Merge "Set default to 1 recent contributor instead of -1"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Fri, 21 Apr 2017 18:15:59 +0000 (18:15 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Fri, 21 Apr 2017 18:15:59 +0000 (18:15 +0000)
832 files changed:
.gitignore
Gruntfile.js
HISTORY
RELEASE-NOTES-1.29
UPGRADE
autoload.php
composer.json
docs/hooks.txt
includes/Block.php
includes/Category.php
includes/CategoryViewer.php
includes/DefaultSettings.php
includes/EditPage.php
includes/GlobalFunctions.php
includes/Linker.php
includes/MediaWiki.php
includes/MediaWikiServices.php
includes/MovePage.php
includes/OutputPage.php
includes/ReadOnlyMode.php [new file with mode: 0644]
includes/Revision.php
includes/Sanitizer.php
includes/ServiceWiring.php
includes/SiteStats.php
includes/Title.php
includes/WatchedItemQueryService.php
includes/WatchedItemStore.php
includes/WikiMap.php
includes/actions/FormAction.php
includes/actions/InfoAction.php
includes/actions/PurgeAction.php
includes/actions/RevertAction.php
includes/actions/UnwatchAction.php
includes/actions/WatchAction.php
includes/api/ApiAMCreateAccount.php
includes/api/ApiAuthManagerHelper.php
includes/api/ApiBase.php
includes/api/ApiBlock.php
includes/api/ApiChangeAuthenticationData.php
includes/api/ApiCheckToken.php
includes/api/ApiClearHasMsg.php
includes/api/ApiClientLogin.php
includes/api/ApiDelete.php
includes/api/ApiEditPage.php
includes/api/ApiEmailUser.php
includes/api/ApiErrorFormatter.php
includes/api/ApiExpandTemplates.php
includes/api/ApiFeedWatchlist.php
includes/api/ApiFormatBase.php
includes/api/ApiHelp.php
includes/api/ApiImport.php
includes/api/ApiLinkAccount.php
includes/api/ApiLogin.php
includes/api/ApiLogout.php
includes/api/ApiMain.php
includes/api/ApiManageTags.php
includes/api/ApiMergeHistory.php
includes/api/ApiMove.php
includes/api/ApiOpenSearch.php
includes/api/ApiOptions.php
includes/api/ApiPageSet.php
includes/api/ApiParamInfo.php
includes/api/ApiParse.php
includes/api/ApiPatrol.php
includes/api/ApiProtect.php
includes/api/ApiPurge.php
includes/api/ApiQuery.php
includes/api/ApiQueryAllCategories.php
includes/api/ApiQueryAllDeletedRevisions.php
includes/api/ApiQueryAllImages.php
includes/api/ApiQueryAllLinks.php
includes/api/ApiQueryAllMessages.php
includes/api/ApiQueryAllPages.php
includes/api/ApiQueryAllRevisions.php
includes/api/ApiQueryAllUsers.php
includes/api/ApiQueryAuthManagerInfo.php
includes/api/ApiQueryBacklinks.php
includes/api/ApiQueryBacklinksprop.php
includes/api/ApiQueryBase.php
includes/api/ApiQueryBlocks.php
includes/api/ApiQueryCategories.php
includes/api/ApiQueryCategoryInfo.php
includes/api/ApiQueryCategoryMembers.php
includes/api/ApiQueryContributors.php
includes/api/ApiQueryDeletedRevisions.php
includes/api/ApiQueryDeletedrevs.php
includes/api/ApiQueryDuplicateFiles.php
includes/api/ApiQueryExtLinksUsage.php
includes/api/ApiQueryExternalLinks.php
includes/api/ApiQueryFileRepoInfo.php
includes/api/ApiQueryFilearchive.php
includes/api/ApiQueryIWBacklinks.php
includes/api/ApiQueryIWLinks.php
includes/api/ApiQueryImageInfo.php
includes/api/ApiQueryImages.php
includes/api/ApiQueryInfo.php
includes/api/ApiQueryLangBacklinks.php
includes/api/ApiQueryLangLinks.php
includes/api/ApiQueryLinks.php
includes/api/ApiQueryLogEvents.php
includes/api/ApiQueryMyStashedFiles.php
includes/api/ApiQueryPagePropNames.php
includes/api/ApiQueryPageProps.php
includes/api/ApiQueryPagesWithProp.php
includes/api/ApiQueryPrefixSearch.php
includes/api/ApiQueryProtectedTitles.php
includes/api/ApiQueryQueryPage.php
includes/api/ApiQueryRandom.php
includes/api/ApiQueryRecentChanges.php
includes/api/ApiQueryRevisions.php
includes/api/ApiQuerySearch.php
includes/api/ApiQuerySiteinfo.php
includes/api/ApiQueryStashImageInfo.php
includes/api/ApiQueryTags.php
includes/api/ApiQueryTokens.php
includes/api/ApiQueryUserContributions.php
includes/api/ApiQueryUserInfo.php
includes/api/ApiQueryUsers.php
includes/api/ApiQueryWatchlist.php
includes/api/ApiQueryWatchlistRaw.php
includes/api/ApiRemoveAuthenticationData.php
includes/api/ApiResetPassword.php
includes/api/ApiRevisionDelete.php
includes/api/ApiRollback.php
includes/api/ApiRsd.php
includes/api/ApiSetNotificationTimestamp.php
includes/api/ApiSetPageLanguage.php
includes/api/ApiTag.php
includes/api/ApiUnblock.php
includes/api/ApiUndelete.php
includes/api/ApiUpload.php
includes/api/ApiUserrights.php
includes/api/ApiValidatePassword.php
includes/api/ApiWatch.php
includes/api/i18n/cs.json
includes/api/i18n/de.json
includes/api/i18n/en.json
includes/api/i18n/fa.json
includes/api/i18n/fr.json
includes/api/i18n/gl.json
includes/api/i18n/he.json
includes/api/i18n/it.json
includes/api/i18n/ko.json
includes/api/i18n/lb.json
includes/api/i18n/nb.json
includes/api/i18n/nl.json
includes/api/i18n/pl.json
includes/api/i18n/pt-br.json
includes/api/i18n/pt.json
includes/api/i18n/ru.json
includes/api/i18n/uk.json
includes/api/i18n/zh-hans.json
includes/auth/Throttler.php
includes/cache/BacklinkCache.php
includes/cache/LinkCache.php
includes/cache/MessageBlobStore.php
includes/cache/MessageCache.php
includes/cache/localisation/LCStoreDB.php
includes/cache/localisation/LocalisationCache.php
includes/changes/ChangesListBooleanFilter.php
includes/changes/ChangesListFilter.php
includes/changes/ChangesListFilterGroup.php
includes/changes/ChangesListStringOptionsFilter.php
includes/changes/RecentChange.php
includes/changetags/ChangeTags.php
includes/config/EtcdConfig.php [new file with mode: 0644]
includes/content/WikiTextStructure.php
includes/dao/DBAccessBase.php
includes/db/DatabaseOracle.php
includes/db/MWLBFactory.php
includes/deferred/LinksUpdate.php
includes/exception/MWExceptionHandler.php
includes/exception/MWExceptionRenderer.php
includes/filebackend/filejournal/DBFileJournal.php
includes/filebackend/lockmanager/MySqlLockManager.php
includes/filerepo/ForeignDBRepo.php
includes/filerepo/LocalRepo.php
includes/filerepo/file/ForeignDBFile.php
includes/filerepo/file/LocalFile.php
includes/htmlform/OOUIHTMLForm.php
includes/http/CurlHttpRequest.php
includes/installer/DatabaseInstaller.php
includes/installer/DatabaseUpdater.php
includes/installer/MssqlInstaller.php
includes/installer/MssqlUpdater.php
includes/installer/MysqlInstaller.php
includes/installer/MysqlUpdater.php
includes/installer/OracleInstaller.php
includes/installer/PostgresInstaller.php
includes/installer/PostgresUpdater.php
includes/installer/SqliteInstaller.php
includes/installer/SqliteUpdater.php
includes/installer/i18n/br.json
includes/installer/i18n/fa.json
includes/installer/i18n/pt-br.json
includes/installer/i18n/roa-tara.json
includes/interwiki/ClassicInterwikiLookup.php
includes/jobqueue/JobQueueDB.php
includes/jobqueue/JobQueueGroup.php
includes/jobqueue/JobQueueRedis.php
includes/jobqueue/JobRunner.php
includes/jobqueue/jobs/RecentChangesUpdateJob.php
includes/jobqueue/jobs/RefreshLinksJob.php
includes/libs/DnsSrvDiscoverer.php
includes/libs/lockmanager/DBLockManager.php
includes/libs/lockmanager/PostgreSqlLockManager.php
includes/libs/mime/XmlTypeCheck.php
includes/libs/objectcache/CachedBagOStuff.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/DatabaseMssql.php
includes/libs/rdbms/database/DatabaseMysql.php
includes/libs/rdbms/database/DatabaseMysqlBase.php
includes/libs/rdbms/database/DatabaseMysqli.php
includes/libs/rdbms/database/DatabasePostgres.php
includes/libs/rdbms/database/DatabaseSqlite.php
includes/libs/rdbms/database/IDatabase.php
includes/libs/rdbms/database/IMaintainableDatabase.php
includes/libs/rdbms/database/MaintainableDBConnRef.php
includes/libs/rdbms/database/resultwrapper/IResultWrapper.php
includes/libs/rdbms/database/utils/SavepointPostgres.php
includes/libs/rdbms/exception/DBAccessError.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/exception/DBReadOnlyError.php
includes/libs/rdbms/exception/DBReplicationWaitError.php
includes/libs/rdbms/exception/DBTransactionError.php
includes/libs/rdbms/exception/DBTransactionSizeError.php
includes/libs/rdbms/exception/DBUnexpectedError.php
includes/libs/rdbms/field/PostgresField.php
includes/libs/rdbms/lbfactory/ILBFactory.php
includes/libs/rdbms/lbfactory/LBFactory.php
includes/libs/rdbms/loadbalancer/ILoadBalancer.php
includes/libs/rdbms/loadbalancer/LoadBalancer.php
includes/logging/DeleteLogFormatter.php
includes/media/SVGMetadataExtractor.php
includes/media/TransformationalImageHandler.php
includes/objectcache/SqlBagOStuff.php
includes/page/PageArchive.php
includes/page/WikiPage.php
includes/parser/Parser.php
includes/parser/ParserOutput.php
includes/profiler/output/ProfilerOutputDb.php
includes/resourceloader/ResourceLoader.php
includes/resourceloader/ResourceLoaderSkinModule.php
includes/resourceloader/ResourceLoaderSpecialCharacterDataModule.php
includes/resourceloader/ResourceLoaderStartUpModule.php
includes/resourceloader/ResourceLoaderWikiModule.php
includes/search/SearchEngine.php
includes/search/SearchHighlighter.php
includes/skins/BaseTemplate.php
includes/skins/Skin.php
includes/skins/SkinTemplate.php
includes/specialpage/ChangesListSpecialPage.php
includes/specialpage/QueryPage.php
includes/specialpage/RedirectSpecialPage.php
includes/specialpage/SpecialPageFactory.php
includes/specials/SpecialAutoblockList.php [new file with mode: 0644]
includes/specials/SpecialChangeCredentials.php
includes/specials/SpecialChangeEmail.php
includes/specials/SpecialContributions.php
includes/specials/SpecialEmailuser.php
includes/specials/SpecialGoToInterwiki.php [new file with mode: 0644]
includes/specials/SpecialNewpages.php [changed mode: 0755->0644]
includes/specials/SpecialPageLanguage.php
includes/specials/SpecialPreferences.php
includes/specials/SpecialRecentchanges.php
includes/specials/SpecialSearch.php
includes/specials/SpecialUndelete.php
includes/specials/SpecialUserrights.php
includes/specials/SpecialWatchlist.php
includes/specials/helpers/LoginHelper.php
includes/specials/pagers/DeletedContribsPager.php
includes/upload/UploadBase.php
includes/user/BotPassword.php
includes/user/User.php
includes/widget/search/SearchFormWidget.php
languages/FakeConverter.php
languages/Language.php
languages/LanguageConverter.php
languages/i18n/ace.json
languages/i18n/ady-cyrl.json
languages/i18n/aeb-arab.json
languages/i18n/af.json
languages/i18n/aln.json
languages/i18n/am.json
languages/i18n/an.json
languages/i18n/ang.json
languages/i18n/anp.json
languages/i18n/ar.json
languages/i18n/arc.json
languages/i18n/arn.json
languages/i18n/arq.json
languages/i18n/ary.json
languages/i18n/as.json
languages/i18n/ast.json
languages/i18n/atj.json
languages/i18n/av.json
languages/i18n/awa.json
languages/i18n/az.json
languages/i18n/azb.json
languages/i18n/ba.json
languages/i18n/ban.json
languages/i18n/bar.json
languages/i18n/bbc-latn.json
languages/i18n/bcc.json
languages/i18n/bcl.json
languages/i18n/be-tarask.json
languages/i18n/be.json
languages/i18n/bg.json
languages/i18n/bgn.json
languages/i18n/bho.json
languages/i18n/bjn.json
languages/i18n/bn.json
languages/i18n/bpy.json
languages/i18n/br.json
languages/i18n/brh.json
languages/i18n/bs.json
languages/i18n/ca.json
languages/i18n/cdo.json
languages/i18n/ce.json
languages/i18n/ceb.json
languages/i18n/ch.json
languages/i18n/ckb.json
languages/i18n/co.json
languages/i18n/cps.json
languages/i18n/crh-cyrl.json
languages/i18n/crh-latn.json
languages/i18n/cs.json
languages/i18n/csb.json
languages/i18n/cu.json
languages/i18n/cv.json
languages/i18n/cy.json
languages/i18n/da.json
languages/i18n/de.json
languages/i18n/diq.json
languages/i18n/dsb.json
languages/i18n/dtp.json
languages/i18n/dty.json
languages/i18n/dz.json
languages/i18n/ee.json
languages/i18n/egl.json
languages/i18n/el.json
languages/i18n/en-gb.json
languages/i18n/en.json
languages/i18n/eo.json
languages/i18n/es.json
languages/i18n/et.json
languages/i18n/eu.json
languages/i18n/ext.json
languages/i18n/fa.json
languages/i18n/ff.json
languages/i18n/fi.json
languages/i18n/fit.json
languages/i18n/fo.json
languages/i18n/fr.json
languages/i18n/frp.json
languages/i18n/frr.json
languages/i18n/fur.json
languages/i18n/fy.json
languages/i18n/ga.json
languages/i18n/gag.json
languages/i18n/gan-hans.json
languages/i18n/gan-hant.json
languages/i18n/gd.json
languages/i18n/gl.json
languages/i18n/glk.json
languages/i18n/gn.json
languages/i18n/gom-deva.json
languages/i18n/gom-latn.json
languages/i18n/gor.json
languages/i18n/got.json
languages/i18n/grc.json
languages/i18n/gsw.json
languages/i18n/gu.json
languages/i18n/gv.json
languages/i18n/ha.json
languages/i18n/hak.json
languages/i18n/haw.json
languages/i18n/he.json
languages/i18n/hi.json
languages/i18n/hif-latn.json
languages/i18n/hil.json
languages/i18n/hr.json
languages/i18n/hrx.json
languages/i18n/hsb.json
languages/i18n/ht.json
languages/i18n/hu.json
languages/i18n/hy.json
languages/i18n/ia.json
languages/i18n/id.json
languages/i18n/ie.json
languages/i18n/ig.json
languages/i18n/ilo.json
languages/i18n/inh.json
languages/i18n/io.json
languages/i18n/is.json
languages/i18n/it.json
languages/i18n/ja.json
languages/i18n/jam.json
languages/i18n/jbo.json
languages/i18n/jut.json
languages/i18n/jv.json
languages/i18n/ka.json
languages/i18n/kaa.json
languages/i18n/kab.json
languages/i18n/kbd-cyrl.json
languages/i18n/khw.json
languages/i18n/kiu.json
languages/i18n/kk-arab.json
languages/i18n/kk-cyrl.json
languages/i18n/kk-latn.json
languages/i18n/kl.json
languages/i18n/km.json
languages/i18n/kn.json
languages/i18n/ko.json
languages/i18n/koi.json
languages/i18n/krc.json
languages/i18n/krl.json
languages/i18n/ku-latn.json
languages/i18n/kw.json
languages/i18n/ky.json
languages/i18n/la.json
languages/i18n/lad.json
languages/i18n/lb.json
languages/i18n/lez.json
languages/i18n/lfn.json
languages/i18n/lg.json
languages/i18n/li.json
languages/i18n/lij.json
languages/i18n/liv.json
languages/i18n/lki.json
languages/i18n/lmo.json
languages/i18n/ln.json
languages/i18n/lo.json
languages/i18n/loz.json
languages/i18n/lt.json
languages/i18n/ltg.json
languages/i18n/lus.json
languages/i18n/lv.json
languages/i18n/lzh.json
languages/i18n/lzz.json
languages/i18n/mai.json
languages/i18n/map-bms.json
languages/i18n/mdf.json
languages/i18n/mg.json
languages/i18n/mhr.json
languages/i18n/min.json
languages/i18n/mk.json
languages/i18n/ml.json
languages/i18n/mn.json
languages/i18n/mo.json
languages/i18n/mr.json
languages/i18n/mrj.json
languages/i18n/ms.json
languages/i18n/mt.json
languages/i18n/mwl.json
languages/i18n/my.json
languages/i18n/myv.json
languages/i18n/nah.json
languages/i18n/nan.json
languages/i18n/nap.json
languages/i18n/nb.json
languages/i18n/nds-nl.json
languages/i18n/nds.json
languages/i18n/ne.json
languages/i18n/nl.json
languages/i18n/nn.json
languages/i18n/nov.json
languages/i18n/nso.json
languages/i18n/oc.json
languages/i18n/olo.json
languages/i18n/or.json
languages/i18n/os.json
languages/i18n/pa.json
languages/i18n/pam.json
languages/i18n/pap.json
languages/i18n/pcd.json
languages/i18n/pdc.json
languages/i18n/pdt.json
languages/i18n/pfl.json
languages/i18n/pl.json
languages/i18n/pms.json
languages/i18n/pnb.json
languages/i18n/pnt.json
languages/i18n/prg.json
languages/i18n/ps.json
languages/i18n/pt-br.json
languages/i18n/pt.json
languages/i18n/qqq.json
languages/i18n/qu.json
languages/i18n/qug.json
languages/i18n/rgn.json
languages/i18n/rif.json
languages/i18n/rm.json
languages/i18n/rmy.json
languages/i18n/ro.json
languages/i18n/roa-tara.json
languages/i18n/ru.json
languages/i18n/rue.json
languages/i18n/sa.json
languages/i18n/sah.json
languages/i18n/sat.json
languages/i18n/sc.json
languages/i18n/scn.json
languages/i18n/sco.json
languages/i18n/sd.json
languages/i18n/sdc.json
languages/i18n/sdh.json
languages/i18n/se.json
languages/i18n/sei.json
languages/i18n/ses.json
languages/i18n/sgs.json
languages/i18n/sh.json
languages/i18n/shi.json
languages/i18n/shn.json
languages/i18n/si.json
languages/i18n/sk.json
languages/i18n/sl.json
languages/i18n/sli.json
languages/i18n/sma.json
languages/i18n/so.json
languages/i18n/sq.json
languages/i18n/sr-ec.json
languages/i18n/sr-el.json
languages/i18n/srn.json
languages/i18n/stq.json
languages/i18n/su.json
languages/i18n/sv.json
languages/i18n/sw.json
languages/i18n/szl.json
languages/i18n/ta.json
languages/i18n/tcy.json
languages/i18n/te.json
languages/i18n/tet.json
languages/i18n/tg-cyrl.json
languages/i18n/tg-latn.json
languages/i18n/th.json
languages/i18n/tk.json
languages/i18n/tl.json
languages/i18n/tly.json
languages/i18n/to.json
languages/i18n/tr.json
languages/i18n/tru.json
languages/i18n/ts.json
languages/i18n/tt-cyrl.json
languages/i18n/tt-latn.json
languages/i18n/tyv.json
languages/i18n/udm.json
languages/i18n/ug-arab.json
languages/i18n/uk.json
languages/i18n/ur.json
languages/i18n/uz.json
languages/i18n/vec.json
languages/i18n/vep.json
languages/i18n/vi.json
languages/i18n/vmf.json
languages/i18n/vo.json
languages/i18n/vot.json
languages/i18n/vro.json
languages/i18n/wa.json
languages/i18n/war.json
languages/i18n/wo.json
languages/i18n/wuu.json
languages/i18n/xal.json
languages/i18n/xmf.json
languages/i18n/yi.json
languages/i18n/yo.json
languages/i18n/yue.json
languages/i18n/zea.json
languages/i18n/zh-hans.json
languages/i18n/zh-hant.json
languages/messages/MessagesDty.php
languages/messages/MessagesEn.php
languages/messages/MessagesEt.php
maintenance/Maintenance.php
maintenance/archives/patch-rename-ar_usertext_timestamp.sql [new file with mode: 0644]
maintenance/archives/upgradeLogging.php
maintenance/benchmarks/Benchmarker.php
maintenance/benchmarks/bench_HTTP_HTTPS.php
maintenance/benchmarks/bench_Wikimedia_base_convert.php
maintenance/benchmarks/bench_delete_truncate.php
maintenance/benchmarks/bench_if_switch.php
maintenance/benchmarks/bench_strtr_str_replace.php
maintenance/benchmarks/bench_utf8_title_check.php
maintenance/benchmarks/bench_wfIsWindows.php
maintenance/convertUserOptions.php
maintenance/deleteOrphanedRevisions.php
maintenance/deleteRevision.php
maintenance/dictionary/mediawiki.dic
maintenance/dumpIterator.php
maintenance/dumpTextPass.php
maintenance/fetchText.php
maintenance/namespaceDupes.php
maintenance/oracle/alterSharedConstraints.php
maintenance/orphans.php
maintenance/populateContentModel.php
maintenance/populateRecentChangesSource.php
maintenance/rebuildFileCache.php
maintenance/rebuildImages.php
maintenance/rebuildtextindex.php
maintenance/refreshImageMetadata.php
maintenance/refreshLinks.php
maintenance/sql.php
maintenance/sqlite.inc
maintenance/storage/trackBlobs.php
maintenance/update.php
maintenance/updateCollation.php
package.json
resources/Resources.php
resources/lib/jquery/jquery.migrate.js [new file with mode: 0644]
resources/lib/jquery/jquery3.js [new file with mode: 0644]
resources/lib/oojs-ui/i18n/jv.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/images/icons/articles-ltr.svg
resources/lib/oojs-ui/themes/apex/images/icons/articles-rtl.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/articles-ltr-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/articles-ltr-progressive.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/articles-ltr.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/articles-rtl-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/articles-rtl-progressive.svg
resources/lib/oojs-ui/themes/mediawiki/images/icons/articles-rtl.svg
resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-down-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-down-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-down.png
resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-down.svg
resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-ltr-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-ltr-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-ltr.png
resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-ltr.svg
resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-rtl-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-rtl-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-rtl.png
resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-rtl.svg
resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-up-invert.png
resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-up-invert.svg
resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-up.png
resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-up.svg
resources/lib/oojs-ui/themes/mediawiki/indicators.json
resources/lib/oojs/oojs.jquery.js
resources/src/mediawiki.action/mediawiki.action.edit.js
resources/src/mediawiki.action/mediawiki.action.edit.styles.css
resources/src/mediawiki.language/specialcharacters.json
resources/src/mediawiki.legacy/commonPrint.css
resources/src/mediawiki.legacy/wikibits.js
resources/src/mediawiki.rcfilters/dm/mw.rcfilters.dm.FiltersViewModel.js
resources/src/mediawiki.rcfilters/mw.rcfilters.Controller.js
resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.CapsuleItemWidget.less [deleted file]
resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.ChangesListWrapperWidget.less
resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.FilterCapsuleMultiselectWidget.less [deleted file]
resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.FilterFloatingMenuSelectWidget.less [new file with mode: 0644]
resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.FilterGroupWidget.less [deleted file]
resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.FilterItemWidget.less [deleted file]
resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.FilterMenuHeaderWidget.less [new file with mode: 0644]
resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.FilterMenuOptionWidget.less [new file with mode: 0644]
resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.FilterMenuSectionOptionWidget.less [new file with mode: 0644]
resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.FilterTagItemWidget.less [new file with mode: 0644]
resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.FilterTagMultiselectWidget.less [new file with mode: 0644]
resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.FilterWrapperWidget.less
resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.FiltersListWidget.less [deleted file]
resources/src/mediawiki.rcfilters/styles/mw.rcfilters.variables.less
resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.CapsuleItemWidget.js [deleted file]
resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.ChangesListWrapperWidget.js
resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.CheckboxInputWidget.js
resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.FilterCapsuleMultiselectWidget.js [deleted file]
resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.FilterFloatingMenuSelectWidget.js [new file with mode: 0644]
resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.FilterGroupWidget.js [deleted file]
resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.FilterItemHighlightButton.js
resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.FilterItemWidget.js [deleted file]
resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.FilterMenuHeaderWidget.js [new file with mode: 0644]
resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.FilterMenuOptionWidget.js [new file with mode: 0644]
resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.FilterMenuSectionOptionWidget.js [new file with mode: 0644]
resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.FilterTagItemWidget.js [new file with mode: 0644]
resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.FilterTagMultiselectWidget.js [new file with mode: 0644]
resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.FilterWrapperWidget.js
resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.FiltersListWidget.js [deleted file]
resources/src/mediawiki.skinning/content.parsoid.less
resources/src/mediawiki.skinning/interface.css
resources/src/mediawiki.special/mediawiki.special.preferences.js
resources/src/mediawiki.special/mediawiki.special.search.interwikiwidget.styles.less
resources/src/mediawiki.widgets/MediaSearch/mw.widgets.MediaResultWidget.css
resources/src/mediawiki.widgets/MediaSearch/mw.widgets.MediaSearchWidget.js
resources/src/mediawiki.widgets/mw.widgets.ComplexNamespaceInputWidget.js
resources/src/mediawiki.widgets/mw.widgets.ComplexTitleInputWidget.js
resources/src/mediawiki/mediawiki.js
resources/src/mediawiki/mediawiki.notification.css
resources/src/mediawiki/mediawiki.notification.js
resources/src/mediawiki/mediawiki.toc.js
resources/src/mediawiki/mediawiki.toc.print.css
resources/src/startup.js
tests/browser/features/support/pages/edit_page.rb
tests/integration/includes/http/MWHttpRequestTestCase.php
tests/parser/parserTests.txt
tests/phpunit/MediaWikiTestCase.php
tests/phpunit/ResourceLoaderTestCase.php
tests/phpunit/data/helpers/WellProtectedClass.php [deleted file]
tests/phpunit/data/resourceloader/oouiimagemodule/apex/icons.json [new file with mode: 0644]
tests/phpunit/data/resourceloader/oouiimagemodule/apex/images/icons/search.svg [new file with mode: 0644]
tests/phpunit/data/resourceloader/oouiimagemodule/mediawiki/icons.json [new file with mode: 0644]
tests/phpunit/data/resourceloader/oouiimagemodule/mediawiki/images/icons/search.svg [new file with mode: 0644]
tests/phpunit/includes/GlobalFunctions/GlobalTest.php
tests/phpunit/includes/MWTimestampTest.php
tests/phpunit/includes/MediaWikiServicesTest.php
tests/phpunit/includes/MessageTest.php
tests/phpunit/includes/OutputPageTest.php
tests/phpunit/includes/PrefixSearchTest.php
tests/phpunit/includes/ReadOnlyModeTest.php [new file with mode: 0644]
tests/phpunit/includes/Services/ServiceContainerTest.php
tests/phpunit/includes/TestingAccessWrapper.php
tests/phpunit/includes/TestingAccessWrapperTest.php [deleted file]
tests/phpunit/includes/TitlePermissionTest.php
tests/phpunit/includes/WatchedItemQueryServiceUnitTest.php
tests/phpunit/includes/WatchedItemStoreUnitTest.php
tests/phpunit/includes/WatchedItemUnitTest.php
tests/phpunit/includes/api/ApiBaseTest.php
tests/phpunit/includes/api/ApiErrorFormatterTest.php
tests/phpunit/includes/api/ApiLoginTest.php
tests/phpunit/includes/api/ApiMainTest.php
tests/phpunit/includes/api/ApiMessageTest.php
tests/phpunit/includes/api/ApiPageSetTest.php
tests/phpunit/includes/auth/AbstractAuthenticationProviderTest.php
tests/phpunit/includes/auth/AbstractPasswordPrimaryAuthenticationProviderTest.php
tests/phpunit/includes/auth/AbstractPrimaryAuthenticationProviderTest.php
tests/phpunit/includes/auth/AbstractSecondaryAuthenticationProviderTest.php
tests/phpunit/includes/auth/AuthManagerTest.php
tests/phpunit/includes/auth/AuthPluginPrimaryAuthenticationProviderTest.php
tests/phpunit/includes/auth/AuthenticationRequestTest.php
tests/phpunit/includes/auth/CheckBlocksSecondaryAuthenticationProviderTest.php
tests/phpunit/includes/auth/ConfirmLinkSecondaryAuthenticationProviderTest.php
tests/phpunit/includes/auth/EmailNotificationSecondaryAuthenticationProviderTest.php
tests/phpunit/includes/auth/LegacyHookPreAuthenticationProviderTest.php
tests/phpunit/includes/auth/LocalPasswordPrimaryAuthenticationProviderTest.php
tests/phpunit/includes/auth/RememberMeAuthenticationRequestTest.php
tests/phpunit/includes/auth/ResetPasswordSecondaryAuthenticationProviderTest.php
tests/phpunit/includes/auth/TemporaryPasswordPrimaryAuthenticationProviderTest.php
tests/phpunit/includes/auth/ThrottlePreAuthenticationProviderTest.php
tests/phpunit/includes/auth/ThrottlerTest.php
tests/phpunit/includes/changes/ChangesListBooleanFilterGroupTest.php
tests/phpunit/includes/changes/ChangesListFilterTest.php
tests/phpunit/includes/changes/ChangesListStringOptionsFilterGroupTest.php
tests/phpunit/includes/content/ContentHandlerTest.php
tests/phpunit/includes/content/FileContentHandlerTest.php
tests/phpunit/includes/content/TextContentHandlerTest.php
tests/phpunit/includes/content/WikitextContentHandlerTest.php
tests/phpunit/includes/db/DatabaseMysqlBaseTest.php
tests/phpunit/includes/db/DatabaseSqliteTest.php
tests/phpunit/includes/debug/logger/MonologSpiTest.php
tests/phpunit/includes/debug/logger/monolog/KafkaHandlerTest.php
tests/phpunit/includes/debug/logger/monolog/LineFormatterTest.php
tests/phpunit/includes/deferred/CdnCacheUpdateTest.php
tests/phpunit/includes/filebackend/FileBackendTest.php
tests/phpunit/includes/filebackend/SwiftFileBackendTest.php
tests/phpunit/includes/filerepo/FileBackendDBRepoWrapperTest.php
tests/phpunit/includes/filerepo/MigrateFileRepoLayoutTest.php
tests/phpunit/includes/filerepo/RepoGroupTest.php
tests/phpunit/includes/filerepo/file/FileTest.php
tests/phpunit/includes/jobqueue/JobTest.php
tests/phpunit/includes/libs/DnsSrvDiscovererTest.php
tests/phpunit/includes/libs/MemoizedCallableTest.php
tests/phpunit/includes/libs/SamplingStatsdClientTest.php
tests/phpunit/includes/libs/objectcache/BagOStuffTest.php
tests/phpunit/includes/libs/objectcache/CachedBagOStuffTest.php
tests/phpunit/includes/libs/objectcache/HashBagOStuffTest.php
tests/phpunit/includes/libs/objectcache/WANObjectCacheTest.php
tests/phpunit/includes/libs/rdbms/connectionmanager/ConnectionManagerTest.php
tests/phpunit/includes/libs/rdbms/connectionmanager/SessionConsistentConnectionManagerTest.php
tests/phpunit/includes/linker/LinkRendererFactoryTest.php
tests/phpunit/includes/logging/DeleteLogFormatterTest.php
tests/phpunit/includes/logging/LogFormatterTest.php
tests/phpunit/includes/mail/MailAddressTest.php
tests/phpunit/includes/objectcache/ObjectCacheTest.php
tests/phpunit/includes/objectcache/RedisBagOStuffTest.php
tests/phpunit/includes/registration/ExtensionProcessorTest.php
tests/phpunit/includes/resourceloader/MessageBlobStoreTest.php
tests/phpunit/includes/resourceloader/ResourceLoaderClientHtmlTest.php
tests/phpunit/includes/resourceloader/ResourceLoaderImageModuleTest.php
tests/phpunit/includes/resourceloader/ResourceLoaderOOUIImageModuleTest.php [new file with mode: 0644]
tests/phpunit/includes/resourceloader/ResourceLoaderStartUpModuleTest.php
tests/phpunit/includes/resourceloader/ResourceLoaderTest.php
tests/phpunit/includes/resourceloader/ResourceLoaderWikiModuleTest.php
tests/phpunit/includes/search/SearchEnginePrefixTest.php
tests/phpunit/includes/search/SearchEngineTest.php
tests/phpunit/includes/session/BotPasswordSessionProviderTest.php
tests/phpunit/includes/session/CookieSessionProviderTest.php
tests/phpunit/includes/session/ImmutableSessionProviderWithCookieTest.php
tests/phpunit/includes/session/PHPSessionHandlerTest.php
tests/phpunit/includes/session/SessionBackendTest.php
tests/phpunit/includes/session/SessionManagerTest.php
tests/phpunit/includes/session/SessionProviderTest.php
tests/phpunit/includes/session/SessionTest.php
tests/phpunit/includes/session/TestUtils.php
tests/phpunit/includes/session/TokenTest.php
tests/phpunit/includes/site/SiteExporterTest.php
tests/phpunit/includes/site/SiteImporterTest.php
tests/phpunit/includes/specialpage/ChangesListSpecialPageTest.php
tests/phpunit/includes/specials/SpecialPreferencesTest.php
tests/phpunit/includes/specials/SpecialRecentchangesTest.php
tests/phpunit/includes/specials/SpecialWatchlistTest.php
tests/phpunit/includes/upload/UploadBaseTest.php
tests/phpunit/includes/user/BotPasswordTest.php
tests/phpunit/includes/user/CentralIdLookupTest.php
tests/phpunit/includes/user/PasswordResetTest.php
tests/phpunit/includes/user/UserTest.php
tests/phpunit/maintenance/MaintenanceTest.php
tests/phpunit/maintenance/backupTextPassTest.php
tests/phpunit/mocks/MockChangesListFilter.php
tests/phpunit/structure/ApiDocumentationTest.php
tests/phpunit/structure/ContentHandlerSanityTest.php
tests/phpunit/tests/MediaWikiTestCaseTest.php
tests/qunit/QUnitTestResources.php
tests/qunit/data/testrunner.js
tests/qunit/suites/resources/jquery/jquery.placeholder.test.js [deleted file]
tests/qunit/suites/resources/jquery/jquery.tablesorter.parsers.test.js
tests/qunit/suites/resources/mediawiki.rcfilters/dm.FiltersViewModel.test.js
tests/qunit/suites/resources/mediawiki/mediawiki.toc.test.js

index b2c4d45..a82ae21 100644 (file)
@@ -72,3 +72,4 @@ Thumbs.db
 /.htaccess
 /.htpasswd
 /tests/phan/issues
+*.rej
index 6c56772..811d2c0 100644 (file)
@@ -92,7 +92,10 @@ module.exports = function ( grunt ) {
                                singleRun: true,
                                autoWatch: false,
                                // Some tests in extensions don't yield for more than the default 10s (T89075)
-                               browserNoActivityTimeout: 60 * 1000
+                               browserNoActivityTimeout: 60 * 1000,
+                               // Karma requires Same-Origin (or CORS) by default since v1.1.1
+                               // for better stacktraces. But we load the first request from wgServer
+                               crossOriginAttribute: false
                        },
                        main: {
                                browsers: [ 'Chrome' ]
diff --git a/HISTORY b/HISTORY
index 7f365ac..c6ce06c 100644 (file)
--- a/HISTORY
+++ b/HISTORY
@@ -1,5 +1,44 @@
 Change notes from older releases. For current info see RELEASE-NOTES-1.29.
 
+= MediaWiki 1.28 =
+
+== MediaWiki 1.28.1 ==
+
+This is a security and maintenance release of the MediaWiki 1.28 branch.
+
+=== Changes since 1.28.0 ===
+
+* $wgRunJobsAsync is now false by default (T142751). This change only affects
+  wikis with $wgJobRunRate > 0.
+* Fix fatal from "WaitConditionLoop" not being found, experienced when a wiki has
+  more than one database server setup.
+* (T152717) Better escaping for PHP mail() command,
+* (T154670) A missing method causing the MySQL installer to fatal in rare
+  circumstances was restored.
+* (T154672) Un-deprecate ArticleAfterFetchContentObject hook.
+* (T158766) Avoid SQL error on MSSQL when using selectRowCount().
+* (T145635) Fix too long index error when installing with MSSQL.
+* (T156184) $wgRawHtml will no longer apply to internationalization messages.
+* (T160519) CACHE_ANYTHING will not be CACHE_ACCEL if no accelerator is installed.
+* (T154872) Fix incorrect ar_usertext_timestamp index names in new 1.28 installs.
+* (T109140) (T122209) SECURITY: Special:UserLogin and Special:Search allow redirect
+  to interwiki links.
+* (T144845) SECURITY: XSS in SearchHighlighter::highlightText() when
+  $wgAdvancedSearchHighlighting is true.
+* (T125177) SECURITY: API parameters may now be marked as "sensitive" to keep
+  their values out of the logs.
+* (T150044) SECURITY: "Mark all pages visited" on the watchlist now requires a CSRF
+  token.
+* (T156184) SECURITY: Escape content model/format url parameter in message.
+* (T151735) SECURITY: SVG filter evasion using default attribute values in DTD
+  declaration.
+* (T161453) SECURITY: LocalisationCache will no longer use the temporary directory
+  in it's fallback chain when trying to work out where to write the cache.
+* (T48143) SECURITY: Spam blacklist ineffective on encoded URLs inside file inclusion
+  syntax's link parameter.
+* (T108138) SECURITY: Sysops can undelete pages, although the page is protected against
+  it.
+
 == MediaWiki 1.28 ==
 
 === Changes since 1.28.0-rc1 ===
@@ -326,6 +365,49 @@ There's usually someone online in #mediawiki on irc.freenode.net.
 
 = MediaWiki 1.27 =
 
+== MediaWiki 1.27.2 ==
+This is a security and maintenance release of the MediaWiki 1.27 branch.
+
+ApiCreateAccount was removed in 1.27.0. It was incorrectly still marked as
+deprecated (rather than already removed) in the RELEASE-NOTES at the point 1.27.0
+was released.
+
+=== Changes since 1.27.1 ===
+
+* (T68404) CSS3 attr() function with url type argument is no longer allowed
+  in inline styles.
+* $wgRunJobsAsync is now false by default (T142751). This change only affects
+  wikis with $wgJobRunRate > 0.
+* (T152717) Better escaping for PHP mail() command
+* Submitting the lgtoken and lgpassword parameters in the query string to
+  action=login is now deprecated and outputs a warning. They should be submitted
+  in the POST body instead.
+* Submitting sensitive authentication request parameters to action=clientlogin,
+  action=createaccount, action=linkaccount, and action=changeauthenticationdata
+  in the query string is now deprecated and outputs a warning. They should be
+  submitted in the POST body instead.
+* (T158766) Avoid SQL error on MSSQL when using selectRowCount()
+* (T145635) Fix too long index error when installing with MSSQL.
+* (T156184) $wgRawHtml will no longer apply to internationalization messages.
+* (T160519) CACHE_ANYTHING will not be CACHE_ACCEL if no accelerator is installed.
+* (T109140) (T122209) SECURITY: Special:UserLogin and Special:Search allow redirect
+  to interwiki links.
+* (T144845) SECURITY: XSS in SearchHighlighter::highlightText() when
+  $wgAdvancedSearchHighlighting is true.
+* (T125177) SECURITY: API parameters may now be marked as "sensitive" to keep
+  their values out of the logs.
+* (T150044) SECURITY: "Mark all pages visited" on the watchlist now requires a CSRF
+  token.
+* (T156184) SECURITY: Escape content model/format url parameter in message.
+* (T151735) SECURITY: SVG filter evasion using default attribute values in DTD
+  declaration.
+* (T161453) SECURITY: LocalisationCache will no longer use the temporary directory
+  in it's fallback chain when trying to work out where to write the cache.
+* (T48143) SECURITY: Spam blacklist ineffective on encoded URLs inside file inclusion
+  syntax's link parameter.
+* (T108138) SECURITY: Sysops can undelete pages, although the page is protected against
+  it.
+
 == MediaWiki 1.27.1 ==
 
 This is a maintenance release of the MediaWiki 1.27 branch.
@@ -2670,6 +2752,32 @@ of files that are no longer available follows.
 
 = MediaWiki 1.23 =
 
+== MediaWiki 1.23.16 ==
+This is a security and maintenance release of the MediaWiki 1.23 branch.
+
+=== Changes since 1.23.15 ===
+* (T68404) CSS3 attr() function with url type is no longer allowed
+  in inline styles.
+* (T156184) $wgRawHtml will no longer apply to internationalization messages.
+* Submitting the lgtoken and lgpassword parameters in the query string to
+  action=login is now deprecated and outputs a warning. They should be submitted
+  in the POST body instead.
+* (T109140) (T122209) SECURITY: Special:UserLogin and Special:Search allow redirect
+  to interwiki links.
+* (T144845) SECURITY: XSS in SearchHighlighter::highlightText() when
+  $wgAdvancedSearchHighlighting is true.
+* (T125177) SECURITY: API parameters may now be marked as "sensitive" to keep
+  their values out of the logs.
+* (T150044) SECURITY: "Mark all pages visited" on the watchlist now requires a CSRF
+  token.
+* (T156184) SECURITY: Escape content model/format url parameter in message.
+* (T151735) SECURITY: SVG filter evasion using default attribute values in DTD
+  declaration.
+* (T48143) SECURITY: Spam blacklist ineffective on encoded URLs inside file inclusion
+  syntax's link parameter.
+* (T108138) SECURITY: Sysops can undelete pages, although the page is protected against
+  it.
+
 == MediaWiki 1.23.15 ==
 
 This is a maintenance release of the MediaWiki 1.23 branch.
index 6dbc749..a225086 100644 (file)
@@ -35,6 +35,10 @@ production.
 * (T156983) $wgRateLimitsExcludedIPs now accepts CIDR ranges as well as single IPs.
 * $wgDummyLanguageCodes is deprecated. Additional language code mappings may be
   added to $wgExtraLanguageCodes instead.
+* (T161453) LocalisationCache will no longer use the temporary directory in it's
+  fallback chain when trying to work out where to write the cache.
+* The user right 'editusercssjs' (deprecated in 1.16) was removed. Use
+  'editusercss' and 'edituserjs' in $wgGroupPermissions and elsewhere instead.
 
 === New features in 1.29 ===
 * (T5233) A cookie can now be set when a user is autoblocked, to track that user
@@ -59,6 +63,13 @@ production.
 * Completely new user interface for the RecentChanges page, which
   structures filters into user-friendly groups.  This has corresponding
   changes to how filters are registered by core and extensions.
+* The edit form now uses pretty OOjs UI buttons, checkboxes and summary input.
+  Because this change can cause problems for extensions and on-wiki
+  scripts depending on the exact HTML, the old version is still available
+  and can be used by setting $wgOOUIEditPage = false; in LocalSettings.php.
+  This will be removed later and OOjs UI will become the only option.
+  To make testing easier, users can also force either mode by adding
+  &ooui=true or &ooui=false to the action=edit URL.
 
 === External library changes in 1.29 ===
 
@@ -70,6 +81,8 @@ production.
 * Updated oyejorge/less.php from v1.7.0.10 to v1.7.0.14.
 * Updated monolog from v1.18.2 to 1.22.1.
 * Updated wikimedia/composer-merge-plugin from v1.3.1 to v1.4.0.
+* Updated OOjs from v1.1.10 to v2.0.0.
+* Updated jQuery from v1.11.3 to v3.2.1 (including jQuery Migrate v3.0.0).
 
 ==== New external libraries ====
 * Added wikimedia/timestamp v1.0.0.
@@ -85,6 +98,23 @@ production.
 * (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.
+* (T109140) (T122209) SECURITY: Special:UserLogin and Special:Search allow redirect
+  to interwiki links.
+* (T144845) SECURITY: XSS in SearchHighlighter::highlightText() when
+  $wgAdvancedSearchHighlighting is true.
+* (T125177) SECURITY: API parameters may now be marked as "sensitive" to keep
+  their values out of the logs.
+* (T150044) SECURITY: "Mark all pages visited" on the watchlist now requires a CSRF
+  token.
+* (T156184) SECURITY: Escape content model/format url parameter in message.
+* (T151735) SECURITY: SVG filter evasion using default attribute values in DTD
+  declaration.
+* (T161453) SECURITY: LocalisationCache will no longer use the temporary directory
+  in it's fallback chain when trying to work out where to write the cache.
+* (T48143) SECURITY: Spam blacklist ineffective on encoded URLs inside file inclusion
+  syntax's link parameter.
+* (T108138) SECURITY: Sysops can undelete pages, although the page is protected against
+  it.
 
 === Action API changes in 1.29 ===
 * Submitting sensitive authentication request parameters to action=login,
@@ -145,6 +175,8 @@ production.
   various methods now take a module path rather than a module name.
 * ApiMessageTrait::getApiCode() now strips 'apierror-' and 'apiwarn-' prefixes
   from the message key, and maps some message keys for backwards compatibility.
+* API parameters may now be marked as "sensitive" to keep their values out of
+  the logs.
 
 === Languages updated in 1.29 ===
 
@@ -283,16 +315,28 @@ changes to languages because of Phabricator reports.
   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.
-* Browser support for non-ES5 JavaScript browsers, including Android 2, Opera 12,
-  and Internet Explorer 9, was lowered from Grade A to Grade C.
+* Browser support for non-ES5 JavaScript browsers, including Android 2,
+  Opera <12.10, and Internet Explorer 9, was lowered from Grade A to Grade C.
+* Removed wikibits global methods deprecated since MediaWiki 1.17 (T122755):
+  is_gecko, is_chrome_mac, is_chrome, webkit_version, is_safari_win, is_safari,
+  webkit_match, is_ff2, ff2_bugs, is_ff2_win, is_ff2_x11, opera95_bugs,
+  opera7_bugs, opera6_bugs, is_opera_95, is_opera_preseven, is_opera,
+  ie6_bugs, clientPC, changeText, killEvt, addHandler, hookEvent,
+  addClickHandler, removeHandler, getElementsByClassName, getInnerText,
+  setupCheckboxShiftClick, addCheckboxClickHandlers, mwEditButtons,
+  mwCustomEditButtons, injectSpinner, removeSpinner, escapeQuotes,
+  escapeQuotesHTML, jsMsg, addPortletLink, appendCSS, tooltipAccessKeyPrefix,
+  tooltipAccessKeyRegexp, updateTooltipAccessKeys.
+* The ID of the <li> element containing the login link has changed from
+  'pt-login' to 'pt-login-private' in private wikis.
 
 == Compatibility ==
 
 MediaWiki 1.29 requires PHP 5.5.9 or later. There is experimental support for
 HHVM 3.6.5 or later.
 
-MySQL is the recommended DBMS. PostgreSQL or SQLite can also be used, but
-support for them is somewhat less mature. There is experimental support for
+MySQL/MariaDB is the recommended DBMS. PostgreSQL or SQLite can also be used,
+but support for them is somewhat less mature. There is experimental support for
 Oracle and Microsoft SQL Server.
 
 The supported versions are:
@@ -310,20 +354,10 @@ updates. Note that due to changes to some very large tables like the revision
 table, the schema update may take quite long (minutes on a medium sized site,
 many hours on a large site).
 
-If upgrading from before 1.11, and you are using a wiki as a commons
-repository, make sure that it is updated as well. Otherwise, errors may arise
-due to database schema changes.
-
-If upgrading from before 1.7, you may want to run refreshLinks.php to ensure
-new database fields are filled with data.
-
-If you are upgrading from MediaWiki 1.4.x or earlier, you should upgrade to
-1.5 first. The upgrade script maintenance/upgrade1_5.php has been removed
-with MediaWiki 1.21.
-
 Don't forget to always back up your database before upgrading!
 
-See the file UPGRADE for more detailed upgrade instructions.
+See the file UPGRADE for more detailed upgrade instructions, including
+important information when upgrading from versions prior to 1.11.
 
 For notes on 1.28.x and older releases, see HISTORY.
 
diff --git a/UPGRADE b/UPGRADE
index 3ec1a22..0e6ad9b 100644 (file)
--- a/UPGRADE
+++ b/UPGRADE
@@ -109,6 +109,12 @@ In the "maintenance" directory, run the updateDoubleWidthSearch.php
 script.  This will update the searchindex table for those pages that
 contain double-byte latin characters.
 
+== Upgrading from 1.10 or earlier ==
+
+If upgrading from before 1.11, and you are using a wiki as a commons
+repository, make sure that it is updated as well. Otherwise, errors may arise
+due to database schema changes.
+
 == Upgrading from 1.8 or earlier ==
 
 MediaWiki 1.9 and later no longer keep default localized message text
@@ -135,6 +141,9 @@ to set only specific items as recommended in DefaultSettings.php.
 
 $wgLocalTZoffset was in hours, it is now using minutes.
 
+If upgrading from before 1.7, you may want to run refreshLinks.php to ensure
+new database fields are filled with data.
+
 == Upgrading from 1.5 or earlier ==
 
 Major changes have been made to the schema from 1.4.x. The updater
@@ -149,7 +158,7 @@ UTF-8; an experimental command-line upgrade helper script,
 'upgrade1_5.php', can do this -- run it prior to 'update.php' or
 the web upgrader.
 
-NOTE that upgrade1_5.php does not work properly with recent version
+NOTE that upgrade1_5.php does not work properly with recent versions
 of MediaWiki. If upgrading a 1.4.x wiki, you should upgrade to 1.5
 first.  upgrade1_5.php has been removed from MediaWiki 1.21.
 
index 21f75d1..ba5b774 100644 (file)
@@ -285,6 +285,7 @@ $wgAutoloadLocalClasses = [
        'Config' => __DIR__ . '/includes/config/Config.php',
        'ConfigException' => __DIR__ . '/includes/config/ConfigException.php',
        'ConfigFactory' => __DIR__ . '/includes/config/ConfigFactory.php',
+       'ConfiguredReadOnlyMode' => __DIR__ . '/includes/ReadOnlyMode.php',
        'ConstantDependency' => __DIR__ . '/includes/cache/CacheDependency.php',
        'Content' => __DIR__ . '/includes/content/Content.php',
        'ContentHandler' => __DIR__ . '/includes/content/ContentHandler.php',
@@ -427,6 +428,7 @@ $wgAutoloadLocalClasses = [
        'EnqueueableDataUpdate' => __DIR__ . '/includes/deferred/EnqueueableDataUpdate.php',
        'EraseArchivedFile' => __DIR__ . '/maintenance/eraseArchivedFile.php',
        'ErrorPageError' => __DIR__ . '/includes/exception/ErrorPageError.php',
+       'EtcdConfig' => __DIR__ . '/includes/config/EtcdConfig.php',
        'EventRelayer' => __DIR__ . '/includes/libs/eventrelayer/EventRelayer.php',
        'EventRelayerGroup' => __DIR__ . '/includes/EventRelayerGroup.php',
        'EventRelayerKafka' => __DIR__ . '/includes/libs/eventrelayer/EventRelayerKafka.php',
@@ -1159,6 +1161,7 @@ $wgAutoloadLocalClasses = [
        'RawAction' => __DIR__ . '/includes/actions/RawAction.php',
        'RawMessage' => __DIR__ . '/includes/Message.php',
        'ReadOnlyError' => __DIR__ . '/includes/exception/ReadOnlyError.php',
+       'ReadOnlyMode' => __DIR__ . '/includes/ReadOnlyMode.php',
        'ReassignEdits' => __DIR__ . '/maintenance/reassignEdits.php',
        'RebuildAll' => __DIR__ . '/maintenance/rebuildall.php',
        'RebuildFileCache' => __DIR__ . '/maintenance/rebuildFileCache.php',
@@ -1259,7 +1262,6 @@ $wgAutoloadLocalClasses = [
        'SVGReader' => __DIR__ . '/includes/media/SVGMetadataExtractor.php',
        'SamplingStatsdClient' => __DIR__ . '/includes/libs/stats/SamplingStatsdClient.php',
        'Sanitizer' => __DIR__ . '/includes/Sanitizer.php',
-       'SavepointPostgres' => __DIR__ . '/includes/libs/rdbms/database/utils/SavepointPostgres.php',
        'ScopedCallback' => __DIR__ . '/includes/compat/ScopedCallback.php',
        'ScopedLock' => __DIR__ . '/includes/libs/lockmanager/ScopedLock.php',
        'SearchApi' => __DIR__ . '/includes/api/SearchApi.php',
@@ -1319,6 +1321,7 @@ $wgAutoloadLocalClasses = [
        'SpecialAllPages' => __DIR__ . '/includes/specials/SpecialAllPages.php',
        'SpecialApiHelp' => __DIR__ . '/includes/specials/SpecialApiHelp.php',
        'SpecialApiSandbox' => __DIR__ . '/includes/specials/SpecialApiSandbox.php',
+       'SpecialAutoblockList' => __DIR__ . '/includes/specials/SpecialAutoblockList.php',
        'SpecialBlankpage' => __DIR__ . '/includes/specials/SpecialBlankpage.php',
        'SpecialBlock' => __DIR__ . '/includes/specials/SpecialBlock.php',
        'SpecialBlockList' => __DIR__ . '/includes/specials/SpecialBlockList.php',
@@ -1340,6 +1343,7 @@ $wgAutoloadLocalClasses = [
        'SpecialExpandTemplates' => __DIR__ . '/includes/specials/SpecialExpandTemplates.php',
        'SpecialExport' => __DIR__ . '/includes/specials/SpecialExport.php',
        'SpecialFilepath' => __DIR__ . '/includes/specials/SpecialFilepath.php',
+       'SpecialGoToInterwiki' => __DIR__ . '/includes/specials/SpecialGoToInterwiki.php',
        'SpecialImport' => __DIR__ . '/includes/specials/SpecialImport.php',
        'SpecialJavaScriptTest' => __DIR__ . '/includes/specials/SpecialJavaScriptTest.php',
        'SpecialLinkAccounts' => __DIR__ . '/includes/specials/SpecialLinkAccounts.php',
@@ -1592,9 +1596,26 @@ $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\\DBAccessError' => __DIR__ . '/includes/libs/rdbms/exception/DBAccessError.php',
        'Wikimedia\\Rdbms\\DBConnRef' => __DIR__ . '/includes/libs/rdbms/database/DBConnRef.php',
+       'Wikimedia\\Rdbms\\DBConnectionError' => __DIR__ . '/includes/libs/rdbms/exception/DBConnectionError.php',
+       'Wikimedia\\Rdbms\\DBError' => __DIR__ . '/includes/libs/rdbms/exception/DBError.php',
+       'Wikimedia\\Rdbms\\DBExpectedError' => __DIR__ . '/includes/libs/rdbms/exception/DBExpectedError.php',
        'Wikimedia\\Rdbms\\DBMasterPos' => __DIR__ . '/includes/libs/rdbms/database/position/DBMasterPos.php',
+       'Wikimedia\\Rdbms\\DBQueryError' => __DIR__ . '/includes/libs/rdbms/exception/DBQueryError.php',
+       'Wikimedia\\Rdbms\\DBReadOnlyError' => __DIR__ . '/includes/libs/rdbms/exception/DBReadOnlyError.php',
+       'Wikimedia\\Rdbms\\DBReplicationWaitError' => __DIR__ . '/includes/libs/rdbms/exception/DBReplicationWaitError.php',
+       'Wikimedia\\Rdbms\\DBTransactionError' => __DIR__ . '/includes/libs/rdbms/exception/DBTransactionError.php',
+       'Wikimedia\\Rdbms\\DBTransactionSizeError' => __DIR__ . '/includes/libs/rdbms/exception/DBTransactionSizeError.php',
+       'Wikimedia\\Rdbms\\DBUnexpectedError' => __DIR__ . '/includes/libs/rdbms/exception/DBUnexpectedError.php',
+       'Wikimedia\\Rdbms\\Database' => __DIR__ . '/includes/libs/rdbms/database/Database.php',
        'Wikimedia\\Rdbms\\DatabaseDomain' => __DIR__ . '/includes/libs/rdbms/database/DatabaseDomain.php',
+       'Wikimedia\\Rdbms\\DatabaseMssql' => __DIR__ . '/includes/libs/rdbms/database/DatabaseMssql.php',
+       'Wikimedia\\Rdbms\\DatabaseMysql' => __DIR__ . '/includes/libs/rdbms/database/DatabaseMysql.php',
+       'Wikimedia\\Rdbms\\DatabaseMysqlBase' => __DIR__ . '/includes/libs/rdbms/database/DatabaseMysqlBase.php',
+       'Wikimedia\\Rdbms\\DatabaseMysqli' => __DIR__ . '/includes/libs/rdbms/database/DatabaseMysqli.php',
+       'Wikimedia\\Rdbms\\DatabasePostgres' => __DIR__ . '/includes/libs/rdbms/database/DatabasePostgres.php',
+       'Wikimedia\\Rdbms\\DatabaseSqlite' => __DIR__ . '/includes/libs/rdbms/database/DatabaseSqlite.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',
@@ -1624,6 +1645,7 @@ $wgAutoloadLocalClasses = [
        'Wikimedia\\Rdbms\\PostgresField' => __DIR__ . '/includes/libs/rdbms/field/PostgresField.php',
        'Wikimedia\\Rdbms\\ResultWrapper' => __DIR__ . '/includes/libs/rdbms/database/resultwrapper/ResultWrapper.php',
        'Wikimedia\\Rdbms\\SQLiteField' => __DIR__ . '/includes/libs/rdbms/field/SQLiteField.php',
+       'Wikimedia\\Rdbms\\SavepointPostgres' => __DIR__ . '/includes/libs/rdbms/database/utils/SavepointPostgres.php',
        'Wikimedia\\Rdbms\\SessionConsistentConnectionManager' => __DIR__ . '/includes/libs/rdbms/connectionmanager/SessionConsistentConnectionManager.php',
        'Wikimedia\\Rdbms\\TransactionProfiler' => __DIR__ . '/includes/libs/rdbms/TransactionProfiler.php',
        'WikitextContent' => __DIR__ . '/includes/content/WikitextContent.php',
index 81abe40..be8ce15 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.2",
+               "oojs/oojs-ui": "0.21.1",
                "oyejorge/less.php": "1.7.0.14",
                "php": ">=5.5.9",
                "psr/log": "1.0.2",
        },
        "require-dev": {
                "composer/spdx-licenses": "1.1.4",
+               "hamcrest/hamcrest-php": "^2.0",
                "jakub-onderka/php-parallel-lint": "0.9.2",
+               "jetbrains/phpstorm-stubs": "dev-master#1b9906084d6635456fcf3f3a01f0d7d5b99a578a",
                "justinrainbow/json-schema": "~3.0",
                "mediawiki/mediawiki-codesniffer": "0.7.2",
-               "jetbrains/phpstorm-stubs": "dev-master#1b9906084d6635456fcf3f3a01f0d7d5b99a578a",
                "monolog/monolog": "~1.22.1",
                "nikic/php-parser": "2.1.0",
                "nmred/kafka-php": "0.1.5",
                "phpunit/phpunit": "4.8.35",
+               "psy/psysh": "0.8.3",
                "wikimedia/avro": "1.7.7",
-               "hamcrest/hamcrest-php": "^2.0",
-               "wmde/hamcrest-html-matchers": "^0.1.0",
-               "psy/psysh": "0.8.3"
+               "wikimedia/testing-access-wrapper": "~1.0",
+               "wmde/hamcrest-html-matchers": "^0.1.0"
        },
        "suggest": {
                "ext-apc": "Local data and opcode cache",
index a38f9bb..060af89 100644 (file)
@@ -736,7 +736,10 @@ $current: the reverted revision
 $create: Whether or not the restoration caused the page to be created (i.e. it
   didn't exist before).
 $comment: The comment associated with the undeletion.
-$oldPageId: ID of page previously deleted (from archive table)
+$oldPageId: ID of page previously deleted (from archive table). This ID will be used
+  for the restored page.
+$restoredPages: Set of page IDs that have revisions restored for this undelete,
+  with keys being page IDs and values are 'true'.
 
 'ArticleUndeleteLogEntry': When a log entry is generated but not yet saved.
 $pageArchive: the PageArchive object
@@ -2309,6 +2312,10 @@ $page: the Page that was rendered.
 $title: the Title of the rendered page.
 $parserOutput: ParserOutput resulting from rendering the page.
 
+'OtherAutoblockLogLink': Get links to the autoblock log from extensions which
+autoblocks users and/or IP addresses too.
+&$otherBlockLink: An array with links to other autoblock logs
+
 'OtherBlockLogLink': Get links to the block log from extensions which blocks
 users and/or IP addresses too.
 &$otherBlockLink: An array with links to other block logs
@@ -3586,6 +3593,10 @@ $removed: Groups removed
 $performer: User who performed the change, false if via autopromotion
 $reason: The reason, if any, given by the user performing the change,
 false if via autopromotion.
+$oldUGMs: An associative array (group name => UserGroupMembership object) of
+the user's group memberships before the change.
+$newUGMs: An associative array (group name => UserGroupMembership object) of
+the user's current group memberships.
 
 'UserIsBlockedFrom': Check if a user is blocked from a specific page (for
 specific block exemptions).
index b6b3ae0..0b7f7b2 100644 (file)
@@ -20,6 +20,7 @@
  * @file
  */
 
+use Wikimedia\Rdbms\Database;
 use Wikimedia\Rdbms\IDatabase;
 use MediaWiki\MediaWikiServices;
 
index ece32ea..50ffeec 100644 (file)
@@ -321,6 +321,13 @@ class Category {
                }
 
                $dbw = wfGetDB( DB_MASTER );
+               # Avoid excess contention on the same category (T162121)
+               $name = __METHOD__ . ':' . md5( $this->mName );
+               $scopedLock = $dbw->getScopedLockAndFlush( $name, __METHOD__, 1 );
+               if ( !$scopedLock ) {
+                       return;
+               }
+
                $dbw->startAtomic( __METHOD__ );
 
                $cond1 = $dbw->conditional( [ 'page_namespace' => NS_CATEGORY ], 1, 'NULL' );
index 31369b0..7086a48 100644 (file)
@@ -740,10 +740,7 @@ class CategoryViewer extends ContextSource {
                        // to refresh the incorrect category table entry -- which should be
                        // quick due to the small number of entries.
                        $totalcnt = $rescnt;
-                       $category = $this->cat;
-                       DeferredUpdates::addCallableUpdate( function () use ( $category ) {
-                               $category->refreshCounts();
-                       } );
+                       DeferredUpdates::addCallableUpdate( [ $this->cat, 'refreshCounts' ] );
                } else {
                        // Case 3: hopeless.  Don't give a total count at all.
                        // Messages: category-subcat-count-limited, category-article-count-limited,
index d158c1e..e38524f 100644 (file)
@@ -3216,6 +3216,14 @@ $wgHTMLFormAllowTableFormat = true;
  */
 $wgUseMediaWikiUIEverywhere = false;
 
+/**
+ * Temporary variable that determines whether the EditPage class should use OOjs UI or not.
+ * This will be removed later and OOjs UI will become the only option.
+ *
+ * @since 1.29
+ */
+$wgOOUIEditPage = true;
+
 /**
  * Whether to label the store-to-database-and-show-to-others button in the editor
  * as "Save page"/"Save changes" if false (the default) or, if true, instead as
@@ -3665,6 +3673,16 @@ $wgResourceLoaderMinifierMaxLineLength = 1000;
  */
 $wgIncludeLegacyJavaScript = false;
 
+/**
+ * Use jQuery 3 (with jQuery Migrate) instead of jQuery 1.
+ *
+ * This is a temporary feature flag for the MediaWiki 1.29 development cycle while
+ * instabilities with jQuery 3 are being addressed. See T124742.
+ *
+ * @deprecated since 1.29
+ */
+$wgUsejQueryThree = true;
+
 /**
  * Whether or not to assign configuration variables to the global window object.
  *
@@ -7394,6 +7412,19 @@ $wgJobQueueAggregator = [
        'class' => 'JobQueueAggregatorNull'
 ];
 
+/**
+ * Whether to include the number of jobs that are queued
+ * for the API's maxlag parameter.
+ * The total number of jobs will be divided by this to get an
+ * estimated second of maxlag. Typically bots backoff at maxlag=5,
+ * so setting this to the max number of jobs that should be in your
+ * queue divided by 5 should have the effect of stopping bots once
+ * that limit is hit.
+ *
+ * @since 1.29
+ */
+$wgJobQueueIncludeInMaxLagFactor = false;
+
 /**
  * Additional functions to be performed with updateSpecialPages.
  * Expensive Querypages are already updated.
index e4d217c..ca3b4d1 100644 (file)
@@ -413,10 +413,17 @@ class EditPage {
         */
        private $isOldRev = false;
 
+       /**
+        * @var bool Whether OOUI should be enabled here
+        */
+       private $oouiEnabled = false;
+
        /**
         * @param Article $article
         */
        public function __construct( Article $article ) {
+               global $wgOOUIEditPage;
+
                $this->mArticle = $article;
                $this->page = $article->getPage(); // model object
                $this->mTitle = $article->getTitle();
@@ -426,6 +433,8 @@ class EditPage {
 
                $handler = ContentHandler::getForModelID( $this->contentModel );
                $this->contentFormat = $handler->getDefaultFormat();
+
+               $this->oouiEnabled = $wgOOUIEditPage;
        }
 
        /**
@@ -476,6 +485,14 @@ class EditPage {
                }
        }
 
+       /**
+        * Check if the edit page is using OOUI controls
+        * @return bool
+        */
+       public function isOouiEnabled() {
+               return $this->oouiEnabled;
+       }
+
        /**
         * Returns if the given content model is editable.
         *
@@ -843,6 +860,9 @@ class EditPage {
        public function importFormData( &$request ) {
                global $wgContLang, $wgUser;
 
+               # Allow users to change the mode for testing
+               $this->oouiEnabled = $request->getFuzzyBool( 'ooui', $this->oouiEnabled );
+
                # Section edit can come from either the form or a link
                $this->section = $request->getVal( 'wpSection', $request->getVal( 'section' ) );
 
@@ -1027,7 +1047,7 @@ class EditPage {
                        throw new ErrorPageError(
                                'editpage-invalidcontentmodel-title',
                                'editpage-invalidcontentmodel-text',
-                               [ $this->contentModel ]
+                               [ wfEscapeWikiText( $this->contentModel ) ]
                        );
                }
 
@@ -1035,7 +1055,10 @@ class EditPage {
                        throw new ErrorPageError(
                                'editpage-notsupportedcontentformat-title',
                                'editpage-notsupportedcontentformat-text',
-                               [ $this->contentFormat, ContentHandler::getLocalizedName( $this->contentModel ) ]
+                               [
+                                       wfEscapeWikiText( $this->contentFormat ),
+                                       wfEscapeWikiText( ContentHandler::getLocalizedName( $this->contentModel ) )
+                               ]
                        );
                }
 
@@ -2630,10 +2653,11 @@ class EditPage {
                }
 
                // @todo add EditForm plugin interface and use it here!
-               //       search for textarea1 and textares2, and allow EditForm to override all uses.
+               //       search for textarea1 and textarea2, and allow EditForm to override all uses.
                $wgOut->addHTML( Html::openElement(
                        'form',
                        [
+                               'class' => $this->oouiEnabled ? 'mw-editform-ooui' : 'mw-editform-legacy',
                                'id' => self::EDITFORM_ID,
                                'name' => self::EDITFORM_ID,
                                'method' => 'post',
@@ -2733,6 +2757,11 @@ class EditPage {
                $wgOut->addHTML( Html::hidden( 'format', $this->contentFormat ) );
                $wgOut->addHTML( Html::hidden( 'model', $this->contentModel ) );
 
+               // following functions will need OOUI, enable it only once; here.
+               if ( $this->oouiEnabled ) {
+                       $wgOut->enableOOUI();
+               }
+
                if ( $this->section == 'new' ) {
                        $this->showSummaryInput( true, $this->summary );
                        $wgOut->addHTML( $this->getSummaryPreview( true, $this->summary ) );
@@ -3004,6 +3033,25 @@ class EditPage {
                $this->showHeaderCopyrightWarning();
        }
 
+       /**
+        * Helper function for summary input functions, which returns the neccessary
+        * attributes for the input.
+        *
+        * @param array|null $inputAttrs Array of attrs to use on the input
+        * @return array
+        */
+       private function getSummaryInputAttributes( array $inputAttrs = null ) {
+               // Note: the maxlength is overridden in JS to 255 and to make it use UTF-8 bytes, not characters.
+               return ( is_array( $inputAttrs ) ? $inputAttrs : [] ) + [
+                       'id' => 'wpSummary',
+                       'name' => 'wpSummary',
+                       'maxlength' => '200',
+                       'tabindex' => '1',
+                       'size' => 60,
+                       'spellcheck' => 'true',
+               ] + Linker::tooltipAndAccesskeyAttribs( 'summary' );
+       }
+
        /**
         * Standard summary input and label (wgSummary), abstracted so EditPage
         * subclasses may reorganize the form.
@@ -3021,14 +3069,7 @@ class EditPage {
        public function getSummaryInput( $summary = "", $labelText = null,
                $inputAttrs = null, $spanLabelAttrs = null
        ) {
-               // Note: the maxlength is overridden in JS to 255 and to make it use UTF-8 bytes, not characters.
-               $inputAttrs = ( is_array( $inputAttrs ) ? $inputAttrs : [] ) + [
-                       'id' => 'wpSummary',
-                       'maxlength' => '200',
-                       'tabindex' => '1',
-                       'size' => 60,
-                       'spellcheck' => 'true',
-               ] + Linker::tooltipAndAccesskeyAttribs( 'summary' );
+               $inputAttrs = $this->getSummaryInputAttributes( $inputAttrs );
 
                $spanLabelAttrs = ( is_array( $spanLabelAttrs ) ? $spanLabelAttrs : [] ) + [
                        'class' => $this->missingSummary ? 'mw-summarymissed' : 'mw-summary',
@@ -3050,6 +3091,35 @@ class EditPage {
                return [ $label, $input ];
        }
 
+       /**
+        * Same as self::getSummaryInput, but uses OOUI, instead of plain HTML.
+        * Builds a standard summary input with a label.
+        *
+        * @param string $summary The value of the summary input
+        * @param string $labelText The html to place inside the label
+        * @param array $inputAttrs Array of attrs to use on the input
+        *
+        * @return OOUI\FieldLayout OOUI FieldLayout with Label and Input
+        */
+       function getSummaryInputOOUI( $summary = "", $labelText = null, $inputAttrs = null ) {
+               $inputAttrs = OOUI\Element::configFromHtmlAttributes(
+                       $this->getSummaryInputAttributes( $inputAttrs )
+               );
+
+               return new OOUI\FieldLayout(
+                       new OOUI\TextInputWidget( [
+                               'value' => $summary,
+                               'infusable' => true,
+                       ] + $inputAttrs ),
+                       [
+                               'label' => new OOUI\HtmlSnippet( $labelText ),
+                               'align' => 'top',
+                               'id' => 'wpSummaryLabel',
+                               'classes' => [ $this->missingSummary ? 'mw-summarymissed' : 'mw-summary' ],
+                       ]
+               );
+       }
+
        /**
         * @param bool $isSubjectPreview True if this is the section subject/title
         *   up top, or false if this is the comment summary
@@ -3070,14 +3140,23 @@ class EditPage {
                                return;
                        }
                }
+
                $labelText = $this->context->msg( $isSubjectPreview ? 'subject' : 'summary' )->parse();
-               list( $label, $input ) = $this->getSummaryInput(
-                       $summary,
-                       $labelText,
-                       [ 'class' => $summaryClass ],
-                       []
-               );
-               $wgOut->addHTML( "{$label} {$input}" );
+               if ( $this->oouiEnabled ) {
+                       $wgOut->addHTML( $this->getSummaryInputOOUI(
+                               $summary,
+                               $labelText,
+                               [ 'class' => $summaryClass ]
+                       ) );
+               } else {
+                       list( $label, $input ) = $this->getSummaryInput(
+                               $summary,
+                               $labelText,
+                               [ 'class' => $summaryClass ]
+                       );
+                       $wgOut->addHTML( "{$label} {$input}" );
+               }
+
        }
 
        /**
@@ -3487,9 +3566,21 @@ HTML
                        $wgOut->addHTML( $this->getSummaryPreview( false, $this->summary ) );
                }
 
-               $checkboxes = $this->getCheckboxes( $tabindex,
-                       [ 'minor' => $this->minoredit, 'watch' => $this->watchthis ] );
-               $wgOut->addHTML( "<div class='editCheckboxes'>" . implode( $checkboxes, "\n" ) . "</div>\n" );
+               if ( $this->oouiEnabled ) {
+                       $checkboxes = $this->getCheckboxesOOUI(
+                               $tabindex,
+                               [ 'minor' => $this->minoredit, 'watch' => $this->watchthis ]
+                       );
+                       $checkboxesHTML = new OOUI\HorizontalLayout( [ 'items' => $checkboxes ] );
+               } else {
+                       $checkboxes = $this->getCheckboxes(
+                               $tabindex,
+                               [ 'minor' => $this->minoredit, 'watch' => $this->watchthis ]
+                       );
+                       $checkboxesHTML = implode( $checkboxes, "\n" );
+               }
+
+               $wgOut->addHTML( "<div class='editCheckboxes'>" . $checkboxesHTML . "</div>\n" );
 
                // Show copyright warning.
                $wgOut->addWikiText( $this->getCopywarn() );
@@ -3577,13 +3668,23 @@ HTML
                } elseif ( $this->getContextTitle()->isRedirect() ) {
                        $cancelParams['redirect'] = 'no';
                }
-
-               return MediaWikiServices::getInstance()->getLinkRenderer()->makeKnownLink(
-                       $this->getContextTitle(),
-                       new HtmlArmor( $this->context->msg( 'cancel' )->parse() ),
-                       Html::buttonAttributes( [ 'id' => 'mw-editform-cancel' ], [ 'mw-ui-quiet' ] ),
-                       $cancelParams
-               );
+               if ( $this->oouiEnabled ) {
+                       return new OOUI\ButtonWidget( [
+                               'id' => 'mw-editform-cancel',
+                               'href' => $this->getContextTitle()->getLinkUrl( $cancelParams ),
+                               'label' => new OOUI\HtmlSnippet( $this->context->msg( 'cancel' )->parse() ),
+                               'framed' => false,
+                               'infusable' => true,
+                               'flags' => 'destructive',
+                       ] );
+               } else {
+                       return MediaWikiServices::getInstance()->getLinkRenderer()->makeKnownLink(
+                               $this->getContextTitle(),
+                               new HtmlArmor( $this->context->msg( 'cancel' )->parse() ),
+                               Html::buttonAttributes( [ 'id' => 'mw-editform-cancel' ], [ 'mw-ui-quiet' ] ),
+                               $cancelParams
+                       );
+               }
        }
 
        /**
@@ -4059,7 +4160,7 @@ HTML
        }
 
        /**
-        * Returns an array of html code of the following checkboxes:
+        * Returns an array of html code of the following checkboxes old style:
         * minor and watch
         *
         * @param int $tabindex Current tabindex
@@ -4116,6 +4217,69 @@ HTML
                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
+        *
+        * @return array
+        */
+       public function getCheckboxesOOUI( &$tabindex, $checked ) {
+               $checkboxes = [];
+               $checkboxesDef = $this->getCheckboxesDefinition( $checked );
+
+               $origTabindex = $tabindex;
+
+               foreach ( $checkboxesDef as $name => $options ) {
+                       $legacyName = isset( $options['legacy-name'] ) ? $options['legacy-name'] : $name;
+
+                       $title = null;
+                       $accesskey = null;
+                       if ( isset( $options['tooltip'] ) ) {
+                               $accesskey = $this->context->msg( "accesskey-{$options['tooltip']}" )->text();
+                               $title = Linker::titleAttrib( $options['tooltip'], 'withaccess' );
+                       }
+                       if ( isset( $options['title-message'] ) ) {
+                               $title = $this->context->msg( $options['title-message'] )->text();
+                       }
+                       if ( isset( $options['label-id'] ) ) {
+                               $labelAttribs['id'] = $options['label-id'];
+                       }
+
+                       $checkboxes[ $legacyName ] = new OOUI\FieldLayout(
+                               new OOUI\CheckboxInputWidget( [
+                                       'tabIndex' => ++$tabindex,
+                                       'accessKey' => $accesskey,
+                                       'id' => $options['id'],
+                                       'name' => $name,
+                                       'selected' => $options['default'],
+                                       'infusable' => true,
+                               ] ),
+                               [
+                                       'align' => 'inline',
+                                       'label' => new OOUI\HtmlSnippet( $this->context->msg( $options['label-message'] )->parse() ),
+                                       'title' => $title,
+                                       'id' => isset( $options['label-id'] ) ? $options['label-id'] : null,
+                               ]
+                       );
+               }
+
+               // Backwards-compatibility hack to run the EditPageBeforeEditChecks hook. It's important,
+               // people have used it for the weirdest things completely unrelated to checkboxes...
+               // And if we're gonna run it, might as well allow its legacy checkboxes to be shown.
+               $legacyCheckboxes = $this->getCheckboxes( $origTabindex, $checked );
+               foreach ( $legacyCheckboxes as $name => $html ) {
+                       if ( $html && !isset( $checkboxes[$name] ) ) {
+                               $checkboxes[$name] = new OOUI\Widget( [ 'content' => new OOUI\HtmlSnippet( $html ) ] );
+                       }
+               }
+
+               return $checkboxes;
+       }
+
        /**
         * Returns an array of html code of the following buttons:
         * save, diff and preview
@@ -4141,31 +4305,65 @@ HTML
                        'name' => 'wpSave',
                        'tabindex' => ++$tabindex,
                ] + Linker::tooltipAndAccesskeyAttribs( 'save' );
-               $buttons['save'] = Html::submitButton(
-                       $this->context->msg( $buttonLabelKey )->text(),
-                       $attribs,
-                       [ 'mw-ui-progressive' ]
-               );
+
+               if ( $this->oouiEnabled ) {
+                       $saveConfig = OOUI\Element::configFromHtmlAttributes( $attribs );
+                       $buttons['save'] = new OOUI\ButtonInputWidget( [
+                               // Support: IE 6 – Use <input>, otherwise it can't distinguish which button was clicked
+                               'useInputTag' => true,
+                               'flags' => [ 'constructive', 'primary' ],
+                               'label' => $this->context->msg( $buttonLabelKey )->text(),
+                               'infusable' => true,
+                               'type' => 'submit',
+                       ] + $saveConfig );
+               } else {
+                       $buttons['save'] = Html::submitButton(
+                               $this->context->msg( $buttonLabelKey )->text(),
+                               $attribs,
+                               [ 'mw-ui-progressive' ]
+                       );
+               }
 
                $attribs = [
                        'id' => 'wpPreview',
                        'name' => 'wpPreview',
                        'tabindex' => ++$tabindex,
                ] + Linker::tooltipAndAccesskeyAttribs( 'preview' );
-               $buttons['preview'] = Html::submitButton(
-                       $this->context->msg( 'showpreview' )->text(),
-                       $attribs
-               );
-
+               if ( $this->oouiEnabled ) {
+                       $previewConfig = OOUI\Element::configFromHtmlAttributes( $attribs );
+                       $buttons['preview'] = new OOUI\ButtonInputWidget( [
+                               // Support: IE 6 – Use <input>, otherwise it can't distinguish which button was clicked
+                               'useInputTag' => true,
+                               'label' => $this->context->msg( 'showpreview' )->text(),
+                               'infusable' => true,
+                               'type' => 'submit'
+                       ] + $previewConfig );
+               } else {
+                       $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
-               );
+               if ( $this->oouiEnabled ) {
+                       $diffConfig = OOUI\Element::configFromHtmlAttributes( $attribs );
+                       $buttons['diff'] = new OOUI\ButtonInputWidget( [
+                               // Support: IE 6 – Use <input>, otherwise it can't distinguish which button was clicked
+                               'useInputTag' => true,
+                               'label' => $this->context->msg( 'showdiff' )->text(),
+                               'infusable' => true,
+                               'type' => 'submit',
+                       ] + $diffConfig );
+               } else {
+                       $buttons['diff'] = Html::submitButton(
+                               $this->context->msg( 'showdiff' )->text(),
+                               $attribs
+                       );
+               }
 
                // Avoid PHP 7.1 warning of passing $this by reference
                $editPage = $this;
index 3747c23..8b857ea 100644 (file)
@@ -28,6 +28,7 @@ use Liuggio\StatsdClient\Sender\SocketSender;
 use MediaWiki\Logger\LoggerFactory;
 use MediaWiki\Session\SessionManager;
 use Wikimedia\ScopedCallback;
+use Wikimedia\Rdbms\DBReplicationWaitError;
 
 // Hide compatibility functions from Doxygen
 /// @cond
@@ -1272,7 +1273,8 @@ function wfIncrStats( $key, $count = 1 ) {
  * @return bool
  */
 function wfReadOnly() {
-       return wfReadOnlyReason() !== false;
+       return \MediaWiki\MediaWikiServices::getInstance()->getReadOnlyMode()
+               ->isReadOnly();
 }
 
 /**
@@ -1284,19 +1286,8 @@ function wfReadOnly() {
  * @return string|bool String when in read-only mode; false otherwise
  */
 function wfReadOnlyReason() {
-       $readOnly = wfConfiguredReadOnlyReason();
-       if ( $readOnly !== false ) {
-               return $readOnly;
-       }
-
-       static $lbReadOnly = null;
-       if ( $lbReadOnly === null ) {
-               // Callers use this method to be aware that data presented to a user
-               // may be very stale and thus allowing submissions can be problematic.
-               $lbReadOnly = wfGetLB()->getReadOnlyReason();
-       }
-
-       return $lbReadOnly;
+       return \MediaWiki\MediaWikiServices::getInstance()->getReadOnlyMode()
+               ->getReason();
 }
 
 /**
@@ -1306,18 +1297,8 @@ function wfReadOnlyReason() {
  * @since 1.27
  */
 function wfConfiguredReadOnlyReason() {
-       global $wgReadOnly, $wgReadOnlyFile;
-
-       if ( $wgReadOnly === null ) {
-               // Set $wgReadOnly for faster access next time
-               if ( is_file( $wgReadOnlyFile ) && filesize( $wgReadOnlyFile ) > 0 ) {
-                       $wgReadOnly = file_get_contents( $wgReadOnlyFile );
-               } else {
-                       $wgReadOnly = false;
-               }
-       }
-
-       return $wgReadOnly;
+       return \MediaWiki\MediaWikiServices::getInstance()->getConfiguredReadOnlyMode()
+               ->getReason();
 }
 
 /**
@@ -3072,7 +3053,7 @@ function wfSplitWikiID( $wiki ) {
  * @todo Replace calls to wfGetDB with calls to LoadBalancer::getConnection()
  *       on an injected instance of LoadBalancer.
  *
- * @return Database
+ * @return \Wikimedia\Rdbms\Database
  */
 function wfGetDB( $db, $groups = [], $wiki = false ) {
        return wfGetLB( $wiki )->getConnection( $db, $groups, $wiki );
index 816271f..bed9957 100644 (file)
@@ -1561,7 +1561,7 @@ class Linker {
                $title = wfMessage( 'toc' )->inLanguage( $lang )->escaped();
 
                return '<div id="toc" class="toc">'
-                       . '<div id="toctitle"><h2>' . $title . "</h2></div>\n"
+                       . '<div id="toctitle" class="toctitle"><h2>' . $title . "</h2></div>\n"
                        . $toc
                        . "</ul>\n</div>\n";
        }
index ef0563e..0fd6b92 100644 (file)
@@ -25,6 +25,7 @@ use Psr\Log\LoggerInterface;
 use MediaWiki\MediaWikiServices;
 use Wikimedia\Rdbms\ChronologyProtector;
 use Wikimedia\Rdbms\LBFactory;
+use Wikimedia\Rdbms\DBConnectionError;
 
 /**
  * The MediaWiki class is the helper class for the index.php entry point.
index e44fefe..3bf6d78 100644 (file)
@@ -656,6 +656,22 @@ class MediaWikiServices extends ServiceContainer {
                return $this->getService( 'VirtualRESTServiceClient' );
        }
 
+       /**
+        * @since 1.29
+        * @return \ConfiguredReadOnlyMode
+        */
+       public function getConfiguredReadOnlyMode() {
+               return $this->getService( 'ConfiguredReadOnlyMode' );
+       }
+
+       /**
+        * @since 1.29
+        * @return \ReadOnlyMode
+        */
+       public function getReadOnlyMode() {
+               return $this->getService( 'ReadOnlyMode' );
+       }
+
        ///////////////////////////////////////////////////////////////////////////
        // NOTE: When adding a service getter here, don't forget to add a test
        // case for it in MediaWikiServicesTest::provideGetters() and in
index 9a83d35..ce6ecad 100644 (file)
@@ -455,7 +455,7 @@ class MovePage {
                        $overwriteMessage = wfMessage(
                                        'delete_and_move_reason',
                                        $this->oldTitle->getPrefixedText()
-                               )->text();
+                               )->inContentLanguage()->text();
                        $newpage = WikiPage::factory( $nt );
                        $errs = [];
                        $status = $newpage->doDeleteArticleReal(
index d3e1373..5c05ad7 100644 (file)
@@ -302,6 +302,11 @@ class OutputPage extends ContextSource {
        /** @var array Profiling data */
        private $limitReportJSData = [];
 
+       /**
+        * Link: header contents
+        */
+       private $mLinkHeader = [];
+
        /**
         * Constructor for OutputPage. This should not be called directly.
         * Instead a new RequestContext should be created and it will implicitly create
@@ -2105,6 +2110,28 @@ class OutputPage extends ContextSource {
                return 'Vary: ' . implode( ', ', array_keys( $this->mVaryHeader ) );
        }
 
+       /**
+        * Add an HTTP Link: header
+        *
+        * @param string $header Header value
+        */
+       public function addLinkHeader( $header ) {
+               $this->mLinkHeader[] = $header;
+       }
+
+       /**
+        * Return a Link: header. Based on the values of $mLinkHeader.
+        *
+        * @return string
+        */
+       public function getLinkHeader() {
+               if ( !$this->mLinkHeader ) {
+                       return false;
+               }
+
+               return 'Link: ' . implode( ',', $this->mLinkHeader );
+       }
+
        /**
         * Get a complete Key header
         *
@@ -2361,6 +2388,12 @@ class OutputPage extends ContextSource {
                // jQuery etc. can work correctly.
                $response->header( 'X-UA-Compatible: IE=Edge' );
 
+               $this->addLogoPreloadLinkHeaders();
+               $linkHeader = $this->getLinkHeader();
+               if ( $linkHeader ) {
+                       $response->header( $linkHeader );
+               }
+
                // Prevent framing, if requested
                $frameOptions = $this->getFrameOptions();
                if ( $frameOptions ) {
@@ -2370,6 +2403,11 @@ class OutputPage extends ContextSource {
                if ( $this->mArticleBodyOnly ) {
                        echo $this->mBodytext;
                } else {
+                       // Enable safe mode if requested
+                       if ( $this->getRequest()->getBool( 'safemode' ) ) {
+                               $this->disallowUserJs();
+                       }
+
                        $sk = $this->getSkin();
                        // add skin specific modules
                        $modules = $sk->getDefaultModules();
@@ -2727,7 +2765,9 @@ class OutputPage extends ContextSource {
                } else {
                        $titleObj = Title::newFromText( $returnto );
                }
-               if ( !is_object( $titleObj ) ) {
+               // We don't want people to return to external interwiki. That
+               // might potentially be used as part of a phishing scheme
+               if ( !is_object( $titleObj ) || $titleObj->isExternal() ) {
                        $titleObj = Title::newMainPage();
                }
 
@@ -3958,4 +3998,75 @@ class OutputPage extends ContextSource {
                        'mediawiki.widgets.styles',
                ] );
        }
+
+       /**
+        * Add Link headers for preloading the wiki's logo.
+        *
+        * @since 1.26
+        */
+       protected function addLogoPreloadLinkHeaders() {
+               $logo = ResourceLoaderSkinModule::getLogo( $this->getConfig() );
+
+               $tags = [];
+               $logosPerDppx = [];
+               $logos = [];
+
+               if ( !is_array( $logo ) ) {
+                       // No media queries required if we only have one variant
+                       $this->addLinkHeader( '<' . $logo . '>;rel=preload;as=image' );
+                       return;
+               }
+
+               foreach ( $logo as $dppx => $src ) {
+                       // Keys are in this format: "1.5x"
+                       $dppx = substr( $dppx, 0, -1 );
+                       $logosPerDppx[$dppx] = $src;
+               }
+
+               // Because PHP can't have floats as array keys
+               uksort( $logosPerDppx, function ( $a , $b ) {
+                       $a = floatval( $a );
+                       $b = floatval( $b );
+
+                       if ( $a == $b ) {
+                               return 0;
+                       }
+                       // Sort from smallest to largest (e.g. 1x, 1.5x, 2x)
+                       return ( $a < $b ) ? -1 : 1;
+               } );
+
+               foreach ( $logosPerDppx as $dppx => $src ) {
+                       $logos[] = [ 'dppx' => $dppx, 'src' => $src ];
+               }
+
+               $logosCount = count( $logos );
+               // Logic must match ResourceLoaderSkinModule:
+               // - 1x applies to resolution < 1.5dppx
+               // - 1.5x applies to resolution >= 1.5dppx && < 2dppx
+               // - 2x applies to resolution >= 2dppx
+               // Note that min-resolution and max-resolution are both inclusive.
+               for ( $i = 0; $i < $logosCount; $i++ ) {
+                       if ( $i === 0 ) {
+                               // Smallest dppx
+                               // min-resolution is ">=" (larger than or equal to)
+                               // "not min-resolution" is essentially "<"
+                               $media_query = 'not all and (min-resolution: ' . $logos[ 1 ]['dppx'] . 'dppx)';
+                       } elseif ( $i !== $logosCount - 1 ) {
+                               // In between
+                               // Media query expressions can only apply "not" to the entire expression
+                               // (e.g. can't express ">= 1.5 and not >= 2).
+                               // Workaround: Use <= 1.9999 in place of < 2.
+                               $upper_bound = floatval( $logos[ $i + 1 ]['dppx'] ) - 0.000001;
+                               $media_query = '(min-resolution: ' . $logos[ $i ]['dppx'] .
+                                       'dppx) and (max-resolution: ' . $upper_bound . 'dppx)';
+                       } else {
+                               // Largest dppx
+                               $media_query = '(min-resolution: ' . $logos[ $i ]['dppx'] . 'dppx)';
+                       }
+
+                       $this->addLinkHeader(
+                               '<' . $logos[$i]['src'] . '>;rel=preload;as=image;media=' . $media_query
+                       );
+               }
+       }
 }
diff --git a/includes/ReadOnlyMode.php b/includes/ReadOnlyMode.php
new file mode 100644 (file)
index 0000000..592d495
--- /dev/null
@@ -0,0 +1,140 @@
+<?php
+
+use Wikimedia\Rdbms\LoadBalancer;
+
+/**
+ * A service class for fetching the wiki's current read-only mode.
+ * To obtain an instance, use MediaWikiServices::getReadOnlyMode().
+ *
+ * @since 1.29
+ */
+class ReadOnlyMode {
+       /** @var ConfiguredReadOnlyMode */
+       private $configuredReadOnly;
+
+       /** @var LoadBalancer */
+       private $loadBalancer;
+
+       public function __construct( ConfiguredReadOnlyMode $cro, LoadBalancer $loadBalancer ) {
+               $this->configuredReadOnly = $cro;
+               $this->loadBalancer = $loadBalancer;
+       }
+
+       /**
+        * Check whether the wiki is in read-only mode.
+        *
+        * @return bool
+        */
+       public function isReadOnly() {
+               return $this->getReason() !== false;
+       }
+
+       /**
+        * Check if the site is in read-only mode and return the message if so
+        *
+        * This checks the configuration and registered DB load balancers for
+        * read-only mode. This may result in DB connection being made.
+        *
+        * @return string|bool String when in read-only mode; false otherwise
+        */
+       public function getReason() {
+               $reason = $this->configuredReadOnly->getReason();
+               if ( $reason !== false ) {
+                       return $reason;
+               }
+               $reason = $this->loadBalancer->getReadOnlyReason();
+               if ( $reason !== false && $reason !== null ) {
+                       return $reason;
+               }
+               return false;
+       }
+
+       /**
+        * Set the read-only mode, which will apply for the remainder of the
+        * request or until a service reset.
+        *
+        * @param string|null $msg
+        */
+       public function setReason( $msg ) {
+               $this->configuredReadOnly->setReason( $msg );
+       }
+
+       /**
+        * Clear the cache of the read only file
+        */
+       public function clearCache() {
+               $this->configuredReadOnly->clearCache();
+       }
+}
+
+/**
+ * A read-only mode service which does not depend on LoadBalancer.
+ * To obtain an instance, use MediaWikiServices::getConfiguredReadOnlyMode().
+ *
+ * @since 1.29
+ */
+class ConfiguredReadOnlyMode {
+       /** @var Config */
+       private $config;
+
+       /** @var string|bool|null */
+       private $fileReason;
+
+       /** @var string|null */
+       private $overrideReason;
+
+       public function __construct( Config $config ) {
+               $this->config = $config;
+       }
+
+       /**
+        * Check whether the wiki is in read-only mode.
+        *
+        * @return bool
+        */
+       public function isReadOnly() {
+               return $this->getReason() !== false;
+       }
+
+       /**
+        * Get the value of $wgReadOnly or the contents of $wgReadOnlyFile.
+        *
+        * @return string|bool String when in read-only mode; false otherwise
+        */
+       public function getReason() {
+               if ( $this->overrideReason !== null ) {
+                       return $this->overrideReason;
+               }
+               $confReason = $this->config->get( 'ReadOnly' );
+               if ( $confReason !== null ) {
+                       return $confReason;
+               }
+               if ( $this->fileReason === null ) {
+                       // Cache for faster access next time
+                       $readOnlyFile = $this->config->get( 'ReadOnlyFile' );
+                       if ( is_file( $readOnlyFile ) && filesize( $readOnlyFile ) > 0 ) {
+                               $this->fileReason = file_get_contents( $readOnlyFile );
+                       } else {
+                               $this->fileReason = false;
+                       }
+               }
+               return $this->fileReason;
+       }
+
+       /**
+        * Set the read-only mode, which will apply for the remainder of the
+        * request or until a service reset.
+        *
+        * @param string|null $msg
+        */
+       public function setReason( $msg ) {
+               $this->overrideReason = $msg;
+       }
+
+       /**
+        * Clear the cache of the read only file
+        */
+       public function clearCache() {
+               $this->fileReason = null;
+       }
+}
index bae974f..b20f843 100644 (file)
@@ -20,6 +20,7 @@
  * @file
  */
 
+use Wikimedia\Rdbms\Database;
 use Wikimedia\Rdbms\IDatabase;
 use MediaWiki\Linker\LinkTarget;
 use MediaWiki\MediaWikiServices;
index 5f6abee..e9519c3 100644 (file)
@@ -1784,7 +1784,7 @@ class Sanitizer {
                        'rb'         => $common,
                        'rp'         => $common,
                        'rt'         => $common, # array_merge( $common, array( 'rbspan' ) ),
-                       'rtc'         => $common,
+                       'rtc'        => $common,
 
                        # MathML root element, where used for extensions
                        # 'title' may not be 100% valid here; it's XHTML
index ce82702..6afabed 100644 (file)
@@ -48,7 +48,8 @@ return [
 
                $lbConf = MWLBFactory::applyDefaultConfig(
                        $mainConfig->get( 'LBFactoryConf' ),
-                       $mainConfig
+                       $mainConfig,
+                       $services->getConfiguredReadOnlyMode()
                );
                $class = MWLBFactory::getLBFactoryClass( $lbConf );
 
@@ -155,7 +156,8 @@ return [
        'WatchedItemStore' => function( MediaWikiServices $services ) {
                $store = new WatchedItemStore(
                        $services->getDBLoadBalancer(),
-                       new HashBagOStuff( [ 'maxKeys' => 100 ] )
+                       new HashBagOStuff( [ 'maxKeys' => 100 ] ),
+                       $services->getReadOnlyMode()
                );
                $store->setStatsdDataFactory( $services->getStatsdDataFactory() );
                return $store;
@@ -404,6 +406,17 @@ return [
                return $vrsClient;
        },
 
+       'ConfiguredReadOnlyMode' => function( MediaWikiServices $services ) {
+               return new ConfiguredReadOnlyMode( $services->getMainConfig() );
+       },
+
+       'ReadOnlyMode' => function( MediaWikiServices $services ) {
+               return new ReadOnlyMode(
+                       $services->getConfiguredReadOnlyMode(),
+                       $services->getDBLoadBalancer()
+               );
+       },
+
        ///////////////////////////////////////////////////////////////////////////
        // NOTE: When adding a service here, don't forget to add a getter function
        // in the MediaWikiServices class. The convenience getter should just call
index bc6b842..1c7730c 100644 (file)
@@ -20,6 +20,7 @@
  * @file
  */
 
+use Wikimedia\Rdbms\Database;
 use Wikimedia\Rdbms\IDatabase;
 
 /**
index f16f0c5..dd6aaef 100644 (file)
@@ -22,6 +22,7 @@
  * @file
  */
 
+use Wikimedia\Rdbms\Database;
 use Wikimedia\Rdbms\IDatabase;
 use MediaWiki\Linker\LinkTarget;
 use MediaWiki\Interwiki\InterwikiLookup;
@@ -1683,6 +1684,33 @@ class Title implements LinkTarget {
                return $url;
        }
 
+       /**
+        * Get a url appropriate for making redirects based on an untrusted url arg
+        *
+        * This is basically the same as getFullUrl(), but in the case of external
+        * interwikis, we send the user to a landing page, to prevent possible
+        * phishing attacks and the like.
+        *
+        * @note Uses current protocol by default, since technically relative urls
+        *   aren't allowed in redirects per HTTP spec, so this is not suitable for
+        *   places where the url gets cached, as might pollute between
+        *   https and non-https users.
+        * @see self::getLocalURL for the arguments.
+        * @param array|string $query
+        * @param string $proto Protocol type to use in URL
+        * @return String. A url suitable to use in an HTTP location header.
+        */
+       public function getFullUrlForRedirect( $query = '', $proto = PROTO_CURRENT ) {
+               $target = $this;
+               if ( $this->isExternal() ) {
+                       $target = SpecialPage::getTitleFor(
+                               'GoToInterwiki',
+                               $this->getPrefixedDBKey()
+                       );
+               }
+               return $target->getFullUrl( $query, false, $proto );
+       }
+
        /**
         * Get a URL with no fragment or server name (relative URL) from a Title object.
         * If this page is generated with action=render, however,
@@ -2124,8 +2152,7 @@ class Title implements LinkTarget {
        private function checkCSSandJSPermissions( $action, $user, $errors, $rigor, $short ) {
                # Protect css/js subpages of user pages
                # XXX: this might be better using restrictions
-               # XXX: right 'editusercssjs' is deprecated, for backward compatibility only
-               if ( $action != 'patrol' && !$user->isAllowed( 'editusercssjs' ) ) {
+               if ( $action != 'patrol' ) {
                        if ( preg_match( '/^' . preg_quote( $user->getName(), '/' ) . '\//', $this->mTextform ) ) {
                                if ( $this->isCssSubpage() && !$user->isAllowedAny( 'editmyusercss', 'editusercss' ) ) {
                                        $errors[] = [ 'mycustomcssprotected', $action ];
@@ -2289,6 +2316,17 @@ class Title implements LinkTarget {
                        ) {
                                $errors[] = [ 'delete-toobig', $wgLang->formatNum( $wgDeleteRevisionsLimit ) ];
                        }
+               } elseif ( $action === 'undelete' ) {
+                       if ( count( $this->getUserPermissionsErrorsInternal( 'edit', $user, $rigor, true ) ) ) {
+                               // Undeleting implies editing
+                               $errors[] = [ 'undelete-cantedit' ];
+                       }
+                       if ( !$this->exists()
+                               && count( $this->getUserPermissionsErrorsInternal( 'create', $user, $rigor, true ) )
+                       ) {
+                               // Undeleting where nothing currently exists implies creating
+                               $errors[] = [ 'undelete-cantcreate' ];
+                       }
                }
                return $errors;
        }
@@ -4613,7 +4651,7 @@ class Title implements LinkTarget {
        }
 
        /**
-        * Whether the magic words __INDEX__ and __NOINDEX__ function for  this page.
+        * Whether the magic words __INDEX__ and __NOINDEX__ function for this page.
         *
         * @return bool
         */
index ba77074..22d5439 100644 (file)
@@ -390,7 +390,7 @@ class WatchedItemQueryService {
                }
 
                if ( array_key_exists( 'rcTypes', $options ) ) {
-                       $conds['rc_type'] = array_map( 'intval',  $options['rcTypes'] );
+                       $conds['rc_type'] = array_map( 'intval', $options['rcTypes'] );
                }
 
                $conds = array_merge(
@@ -565,7 +565,7 @@ class WatchedItemQueryService {
                }
                if ( isset( $options['filter'] ) ) {
                        $filter = $options['filter'];
-                       if ( $filter ===  self::FILTER_CHANGED ) {
+                       if ( $filter === self::FILTER_CHANGED ) {
                                $conds[] = 'wl_notificationtimestamp IS NOT NULL';
                        } else {
                                $conds[] = 'wl_notificationtimestamp IS NULL';
index 70fdbf1..17728fa 100644 (file)
@@ -7,6 +7,7 @@ use MediaWiki\MediaWikiServices;
 use Wikimedia\Assert\Assert;
 use Wikimedia\ScopedCallback;
 use Wikimedia\Rdbms\LoadBalancer;
+use Wikimedia\Rdbms\DBUnexpectedError;
 
 /**
  * Storage layer class for WatchedItems.
@@ -29,6 +30,11 @@ class WatchedItemStore implements StatsdAwareInterface {
         */
        private $loadBalancer;
 
+       /**
+        * @var ReadOnlyMode
+        */
+       private $readOnlyMode;
+
        /**
         * @var HashBagOStuff
         */
@@ -60,13 +66,16 @@ class WatchedItemStore implements StatsdAwareInterface {
        /**
         * @param LoadBalancer $loadBalancer
         * @param HashBagOStuff $cache
+        * @param ReadOnlyMode $readOnlyMode
         */
        public function __construct(
                LoadBalancer $loadBalancer,
-               HashBagOStuff $cache
+               HashBagOStuff $cache,
+               ReadOnlyMode $readOnlyMode
        ) {
                $this->loadBalancer = $loadBalancer;
                $this->cache = $cache;
+               $this->readOnlyMode = $readOnlyMode;
                $this->stats = new NullStatsdDataFactory();
                $this->deferredUpdatesAddCallableUpdateCallback = [ 'DeferredUpdates', 'addCallableUpdate' ];
                $this->revisionGetTimestampFromIdCallback = [ 'Revision', 'getTimestampFromId' ];
@@ -595,7 +604,7 @@ class WatchedItemStore implements StatsdAwareInterface {
         * @return bool success
         */
        public function addWatchBatchForUser( User $user, array $targets ) {
-               if ( $this->loadBalancer->getReadOnlyReason() !== false ) {
+               if ( $this->readOnlyMode->isReadOnly() ) {
                        return false;
                }
                // Only loggedin user can have a watchlist
@@ -653,7 +662,7 @@ class WatchedItemStore implements StatsdAwareInterface {
         */
        public function removeWatch( User $user, LinkTarget $target ) {
                // Only logged in user can have a watchlist
-               if ( $this->loadBalancer->getReadOnlyReason() !== false || $user->isAnon() ) {
+               if ( $this->readOnlyMode->isReadOnly() || $user->isAnon() ) {
                        return false;
                }
 
@@ -784,7 +793,7 @@ class WatchedItemStore implements StatsdAwareInterface {
         */
        public function resetNotificationTimestamp( User $user, Title $title, $force = '', $oldid = 0 ) {
                // Only loggedin user can have a watchlist
-               if ( $this->loadBalancer->getReadOnlyReason() !== false || $user->isAnon() ) {
+               if ( $this->readOnlyMode->isReadOnly() || $user->isAnon() ) {
                        return false;
                }
 
index f7b8d2f..0f479ac 100644 (file)
@@ -182,7 +182,7 @@ class WikiMap {
 class WikiReference {
        private $mCanonicalServer; ///< canonical server URL, e.g. 'https://www.mediawiki.org'
        private $mServer; ///< server URL, may be protocol-relative, e.g. '//www.mediawiki.org'
-       private $mPath;   ///< path, '/wiki/$1'
+       private $mPath; ///< path, '/wiki/$1'
 
        /**
         * @param string $canonicalServer
index e94a188..0141b9e 100644 (file)
@@ -58,6 +58,14 @@ abstract class FormAction extends Action {
        protected function alterForm( HTMLForm $form ) {
        }
 
+       /**
+        * Whether the form should use OOUI
+        * @return bool
+        */
+       protected function usesOOUI() {
+               return false;
+       }
+
        /**
         * Get the HTMLForm to control behavior
         * @return HTMLForm|null
@@ -68,7 +76,11 @@ abstract class FormAction extends Action {
                // Give hooks a chance to alter the form, adding extra fields or text etc
                Hooks::run( 'ActionModifyFormFields', [ $this->getName(), &$this->fields, $this->page ] );
 
-               $form = new HTMLForm( $this->fields, $this->getContext(), $this->getName() );
+               if ( $this->usesOOUI() ) {
+                       $form = HTMLForm::factory( 'ooui', $this->fields, $this->getContext(), $this->getName() );
+               } else {
+                       $form = new HTMLForm( $this->fields, $this->getContext(), $this->getName() );
+               }
                $form->setSubmitCallback( [ $this, 'onSubmit' ] );
 
                $title = $this->getTitle();
index 167b709..df7afca 100644 (file)
@@ -23,6 +23,7 @@
  */
 
 use MediaWiki\MediaWikiServices;
+use Wikimedia\Rdbms\Database;
 
 /**
  * Displays information about a page.
index b2002ff..904c6e2 100644 (file)
@@ -75,12 +75,24 @@ class PurgeAction extends FormAction {
                }
        }
 
-       protected function alterForm( HTMLForm $form ) {
-               $form->setSubmitTextMsg( 'confirm_purge_button' );
+       protected function usesOOUI() {
+               return true;
        }
 
-       protected function preText() {
-               return $this->msg( 'confirm-purge-top' )->parse();
+       protected function getFormFields() {
+               return [
+                       'intro' => [
+                               'type' => 'info',
+                               'vertical-label' => true,
+                               'raw' => true,
+                               'default' => $this->msg( 'confirm-purge-top' )->parse()
+                       ]
+               ];
+       }
+
+       protected function alterForm( HTMLForm $form ) {
+               $form->setWrapperLegendMsg( 'confirm-purge-title' );
+               $form->setSubmitTextMsg( 'confirm_purge_button' );
        }
 
        protected function postText() {
index e466e65..a914c9b 100644 (file)
@@ -66,6 +66,10 @@ class RevertAction extends FormAction {
                }
        }
 
+       protected function usesOOUI() {
+               return true;
+       }
+
        protected function alterForm( HTMLForm $form ) {
                $form->setWrapperLegendMsg( 'filerevert-legend' );
                $form->setSubmitTextMsg( 'filerevert-submit' );
index 7f043e4..aa17b89 100644 (file)
@@ -31,22 +31,27 @@ class UnwatchAction extends WatchAction {
                return 'unwatch';
        }
 
-       protected function getDescription() {
-               return $this->msg( 'removewatch' )->escaped();
-       }
-
        public function onSubmit( $data ) {
                self::doUnwatch( $this->getTitle(), $this->getUser() );
 
                return true;
        }
 
-       protected function alterForm( HTMLForm $form ) {
-               $form->setSubmitTextMsg( 'confirm-unwatch-button' );
+       protected function getFormFields() {
+               return [
+                       'intro' => [
+                               'type' => 'info',
+                               'vertical-label' => true,
+                               'raw' => true,
+                               'default' => $this->msg( 'confirm-unwatch-top' )->parse()
+                       ]
+               ];
        }
 
-       protected function preText() {
-               return $this->msg( 'confirm-unwatch-top' )->parse();
+       protected function alterForm( HTMLForm $form ) {
+               parent::alterForm( $form );
+               $form->setWrapperLegendMsg( 'removewatch' );
+               $form->setSubmitTextMsg( 'confirm-unwatch-button' );
        }
 
        public function onSuccess() {
index 23505c0..e12a727 100644 (file)
@@ -35,11 +35,8 @@ class WatchAction extends FormAction {
                return false;
        }
 
-       /**
-        * @return string HTML
-        */
        protected function getDescription() {
-               return $this->msg( 'addwatch' )->escaped();
+               return '';
        }
 
        public function onSubmit( $data ) {
@@ -57,15 +54,27 @@ class WatchAction extends FormAction {
                parent::checkCanExecute( $user );
        }
 
+       protected function usesOOUI() {
+               return true;
+       }
+
+       protected function getFormFields() {
+               return [
+                       'intro' => [
+                               'type' => 'info',
+                               'vertical-label' => true,
+                               'raw' => true,
+                               'default' => $this->msg( 'confirm-watch-top' )->parse()
+                       ]
+               ];
+       }
+
        protected function alterForm( HTMLForm $form ) {
+               $form->setWrapperLegendMsg( 'addwatch' );
                $form->setSubmitTextMsg( 'confirm-watch-button' );
                $form->setTokenSalt( 'watch' );
        }
 
-       protected function preText() {
-               return $this->msg( 'confirm-watch-top' )->parse();
-       }
-
        public function onSuccess() {
                $msgKey = $this->getTitle()->isTalkPage() ? 'addedwatchtext-talk' : 'addedwatchtext';
                $this->getOutput()->addWikiMsg( $msgKey, $this->getTitle()->getPrefixedText() );
index 5d12590..b8bd511 100644 (file)
@@ -132,6 +132,6 @@ class ApiAMCreateAccount extends ApiBase {
        }
 
        public function getHelpUrls() {
-               return 'https://www.mediawiki.org/wiki/API:Account_creation';
+               return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Account_creation';
        }
 }
index d037c36..8862cc7 100644 (file)
@@ -169,6 +169,7 @@ class ApiAuthManagerHelper {
                $this->module->getMain()->markParamsUsed( array_keys( $data ) );
 
                if ( $sensitive ) {
+                       $this->module->getMain()->markParamsSensitive( array_keys( $sensitive ) );
                        $this->module->requirePostedParameters( array_keys( $sensitive ), 'noprefix' );
                }
 
index fec4234..a6c4b2a 100644 (file)
@@ -188,6 +188,13 @@ abstract class ApiBase extends ContextSource {
         */
        const PARAM_EXTRA_NAMESPACES = 18;
 
+       /*
+        * (boolean) Is the parameter sensitive? Note 'password'-type fields are
+        * always sensitive regardless of the value of this field.
+        * @since 1.29
+        */
+       const PARAM_SENSITIVE = 19;
+
        /**@}*/
 
        const ALL_DEFAULT_STRING = '*';
@@ -378,6 +385,13 @@ abstract class ApiBase extends ContextSource {
 
        /**
         * Indicates whether this module requires write mode
+        *
+        * This should return true for modules that may require synchronous database writes.
+        * Modules that do not need such writes should also not rely on master database access,
+        * since only read queries are needed and each master DB is a single point of failure.
+        * Additionally, requests that only need replica DBs can be efficiently routed to any
+        * datacenter via the Promise-Non-Write-API-Action header.
+        *
         * @return bool
         */
        public function isWriteMode() {
@@ -619,7 +633,7 @@ abstract class ApiBase extends ContextSource {
 
        /**
         * Gets a default replica DB connection object
-        * @return Database
+        * @return IDatabase
         */
        protected function getDB() {
                if ( !isset( $this->mSlaveDB ) ) {
@@ -1025,6 +1039,10 @@ abstract class ApiBase extends ContextSource {
                        } else {
                                $type = 'NULL'; // allow everything
                        }
+
+                       if ( $type == 'password' || !empty( $paramSettings[self::PARAM_SENSITIVE] ) ) {
+                               $this->getMain()->markParamsSensitive( $encParamName );
+                       }
                }
 
                if ( $type == 'boolean' ) {
@@ -2030,6 +2048,7 @@ abstract class ApiBase extends ContextSource {
                        $params['token'] = [
                                ApiBase::PARAM_TYPE => 'string',
                                ApiBase::PARAM_REQUIRED => true,
+                               ApiBase::PARAM_SENSITIVE => true,
                                ApiBase::PARAM_HELP_MSG => [
                                        'api-help-param-token',
                                        $this->needsToken(),
index 8577ad2..4d37af3 100644 (file)
@@ -193,6 +193,6 @@ class ApiBlock extends ApiBase {
        }
 
        public function getHelpUrls() {
-               return 'https://www.mediawiki.org/wiki/API:Block';
+               return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Block';
        }
 }
index c25920e..35c4e56 100644 (file)
@@ -93,6 +93,6 @@ class ApiChangeAuthenticationData extends ApiBase {
        }
 
        public function getHelpUrls() {
-               return 'https://www.mediawiki.org/wiki/API:Manage_authentication_data';
+               return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Manage_authentication_data';
        }
 }
index 3cc7a8a..480915e 100644 (file)
@@ -73,6 +73,7 @@ class ApiCheckToken extends ApiBase {
                        'token' => [
                                ApiBase::PARAM_TYPE => 'string',
                                ApiBase::PARAM_REQUIRED => true,
+                               ApiBase::PARAM_SENSITIVE => true,
                        ],
                        'maxtokenage' => [
                                ApiBase::PARAM_TYPE => 'integer',
index a5474b5..3b24630 100644 (file)
@@ -50,6 +50,6 @@ class ApiClearHasMsg extends ApiBase {
        }
 
        public function getHelpUrls() {
-               return 'https://www.mediawiki.org/wiki/API:ClearHasMsg';
+               return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:ClearHasMsg';
        }
 }
index 3f5bc0c..0d512b3 100644 (file)
@@ -132,6 +132,6 @@ class ApiClientLogin extends ApiBase {
        }
 
        public function getHelpUrls() {
-               return 'https://www.mediawiki.org/wiki/API:Login';
+               return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Login';
        }
 }
index 50c24ae..99065c4 100644 (file)
@@ -218,6 +218,6 @@ class ApiDelete extends ApiBase {
        }
 
        public function getHelpUrls() {
-               return 'https://www.mediawiki.org/wiki/API:Delete';
+               return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Delete';
        }
 }
index b45be31..0b8156b 100644 (file)
@@ -611,6 +611,6 @@ class ApiEditPage extends ApiBase {
        }
 
        public function getHelpUrls() {
-               return 'https://www.mediawiki.org/wiki/API:Edit';
+               return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Edit';
        }
 }
index 8aff6f8..72c7c35 100644 (file)
@@ -114,6 +114,6 @@ class ApiEmailUser extends ApiBase {
        }
 
        public function getHelpUrls() {
-               return 'https://www.mediawiki.org/wiki/API:Email';
+               return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Email';
        }
 }
index c52b731..5484a78 100644 (file)
@@ -176,7 +176,8 @@ class ApiErrorFormatter {
                        } else {
                                $msg = new RawMessage( '$1' );
                                if ( !isset( $options['code'] ) ) {
-                                       $options['code'] = 'internal_api_error_' . get_class( $exception );
+                                       $class = preg_replace( '#^Wikimedia\\\Rdbms\\\#', '', get_class( $exception ) );
+                                       $options['code'] = 'internal_api_error_' . $class;
                                }
                        }
                        $params = [ wfEscapeWikiText( $exception->getMessage() ) ];
index 6f7cf65..e15d7da 100644 (file)
@@ -210,6 +210,6 @@ class ApiExpandTemplates extends ApiBase {
        }
 
        public function getHelpUrls() {
-               return 'https://www.mediawiki.org/wiki/API:Parsing_wikitext#expandtemplates';
+               return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Parsing_wikitext#expandtemplates';
        }
 }
index 7f349bc..b7c5ccc 100644 (file)
@@ -307,6 +307,6 @@ class ApiFeedWatchlist extends ApiBase {
        }
 
        public function getHelpUrls() {
-               return 'https://www.mediawiki.org/wiki/API:Watchlist_feed';
+               return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Watchlist_feed';
        }
 }
index 83c348b..eb23bd6 100644 (file)
@@ -330,7 +330,7 @@ abstract class ApiFormatBase extends ApiBase {
        }
 
        public function getHelpUrls() {
-               return 'https://www.mediawiki.org/wiki/API:Data_formats';
+               return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Data_formats';
        }
 
 }
index e347a9f..df9ca98 100644 (file)
@@ -844,9 +844,9 @@ class ApiHelp extends ApiBase {
 
        public function getHelpUrls() {
                return [
-                       'https://www.mediawiki.org/wiki/API:Main_page',
-                       'https://www.mediawiki.org/wiki/API:FAQ',
-                       'https://www.mediawiki.org/wiki/API:Quick_start_guide',
+                       'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Main_page',
+                       'https://www.mediawiki.org/wiki/Special:MyLanguage/API:FAQ',
+                       'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Quick_start_guide',
                ];
        }
 }
index bf5e4ce..b46f0b1 100644 (file)
@@ -171,7 +171,7 @@ class ApiImport extends ApiBase {
        }
 
        public function getHelpUrls() {
-               return 'https://www.mediawiki.org/wiki/API:Import';
+               return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Import';
        }
 }
 
index 9a21e76..f5c5dee 100644 (file)
@@ -124,6 +124,6 @@ class ApiLinkAccount extends ApiBase {
        }
 
        public function getHelpUrls() {
-               return 'https://www.mediawiki.org/wiki/API:Linkaccount';
+               return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Linkaccount';
        }
 }
index d64aeb7..41bec35 100644 (file)
@@ -250,6 +250,7 @@ class ApiLogin extends ApiBase {
                        'token' => [
                                ApiBase::PARAM_TYPE => 'string',
                                ApiBase::PARAM_REQUIRED => false, // for BC
+                               ApiBase::PARAM_SENSITIVE => true,
                                ApiBase::PARAM_HELP_MSG => [ 'api-help-param-token', 'login' ],
                        ],
                ];
@@ -265,7 +266,7 @@ class ApiLogin extends ApiBase {
        }
 
        public function getHelpUrls() {
-               return 'https://www.mediawiki.org/wiki/API:Login';
+               return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Login';
        }
 
        /**
index d5c28f1..d56c096 100644 (file)
@@ -75,6 +75,6 @@ class ApiLogout extends ApiBase {
        }
 
        public function getHelpUrls() {
-               return 'https://www.mediawiki.org/wiki/API:Logout';
+               return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Logout';
        }
 }
index a1fac0c..00f976e 100644 (file)
@@ -1,7 +1,5 @@
 <?php
 /**
- *
- *
  * Created on Sep 4, 2006
  *
  * Copyright © 2006 Yuri Astrakhan "<Firstname><Lastname>@gmail.com"
@@ -28,6 +26,8 @@
 use MediaWiki\Logger\LoggerFactory;
 use MediaWiki\MediaWikiServices;
 use Wikimedia\Timestamp\TimestampException;
+use Wikimedia\Rdbms\DBQueryError;
+use Wikimedia\Rdbms\DBError;
 
 /**
  * This is the main API class, used for both external and internal processing.
@@ -161,6 +161,7 @@ class ApiMain extends ApiBase {
        private $mCacheMode = 'private';
        private $mCacheControl = [];
        private $mParamsUsed = [];
+       private $mParamsSensitive = [];
 
        /** @var bool|null Cached return value from self::lacksSameOriginSecurity() */
        private $lacksSameOriginSecurity = null;
@@ -1043,7 +1044,8 @@ class ApiMain extends ApiBase {
                } else {
                        // Something is seriously wrong
                        $config = $this->getConfig();
-                       $code = 'internal_api_error_' . get_class( $e );
+                       $class = preg_replace( '#^Wikimedia\\\Rdbms\\\#', '', get_class( $e ) );
+                       $code = 'internal_api_error_' . $class;
                        if ( ( $e instanceof DBQueryError ) && !$config->get( 'ShowSQLErrors' ) ) {
                                $params = [ 'apierror-databaseerror', WebRequest::getRequestId() ];
                        } else {
@@ -1229,6 +1231,35 @@ class ApiMain extends ApiBase {
                return $module;
        }
 
+       /**
+        * @return array
+        */
+       private function getMaxLag() {
+               $dbLag = MediaWikiServices::getInstance()->getDBLoadBalancer()->getMaxLag();
+               $lagInfo = [
+                       'host' => $dbLag[0],
+                       'lag' => $dbLag[1],
+                       'type' => 'db'
+               ];
+
+               $jobQueueLagFactor = $this->getConfig()->get( 'JobQueueIncludeInMaxLagFactor' );
+               if ( $jobQueueLagFactor ) {
+                       // Turn total number of jobs into seconds by using the configured value
+                       $totalJobs = array_sum( JobQueueGroup::singleton()->getQueueSizes() );
+                       $jobQueueLag = $totalJobs / (float)$jobQueueLagFactor;
+                       if ( $jobQueueLag > $lagInfo['lag'] ) {
+                               $lagInfo = [
+                                       'host' => wfHostname(), // XXX: Is there a better value that could be used?
+                                       'lag' => $jobQueueLag,
+                                       'type' => 'jobqueue',
+                                       'jobs' => $totalJobs,
+                               ];
+                       }
+               }
+
+               return $lagInfo;
+       }
+
        /**
         * Check the max lag if necessary
         * @param ApiBase $module Api module being used
@@ -1238,18 +1269,22 @@ class ApiMain extends ApiBase {
        protected function checkMaxLag( $module, $params ) {
                if ( $module->shouldCheckMaxlag() && isset( $params['maxlag'] ) ) {
                        $maxLag = $params['maxlag'];
-                       list( $host, $lag ) = wfGetLB()->getMaxLag();
-                       if ( $lag > $maxLag ) {
+                       $lagInfo = $this->getMaxLag();
+                       if ( $lagInfo['lag'] > $maxLag ) {
                                $response = $this->getRequest()->response();
 
                                $response->header( 'Retry-After: ' . max( intval( $maxLag ), 5 ) );
-                               $response->header( 'X-Database-Lag: ' . intval( $lag ) );
+                               $response->header( 'X-Database-Lag: ' . intval( $lagInfo['lag'] ) );
 
                                if ( $this->getConfig()->get( 'ShowHostnames' ) ) {
-                                       $this->dieWithError( [ 'apierror-maxlag', $lag, $host ] );
+                                       $this->dieWithError(
+                                               [ 'apierror-maxlag', $lagInfo['lag'], $lagInfo['host'] ],
+                                               'maxlag',
+                                               $lagInfo
+                                       );
                                }
 
-                               $this->dieWithError( [ 'apierror-maxlag-generic', $lag ], 'maxlag' );
+                               $this->dieWithError( [ 'apierror-maxlag-generic', $lagInfo['lag'] ], 'maxlag', $lagInfo );
                        }
                }
 
@@ -1602,13 +1637,17 @@ class ApiMain extends ApiBase {
                        " {$logCtx['ip']} " .
                        "T={$logCtx['timeSpentBackend']}ms";
 
+               $sensitive = array_flip( $this->getSensitiveParams() );
                foreach ( $this->getParamsUsed() as $name ) {
                        $value = $request->getVal( $name );
                        if ( $value === null ) {
                                continue;
                        }
 
-                       if ( strlen( $value ) > 256 ) {
+                       if ( isset( $sensitive[$name] ) ) {
+                               $value = '[redacted]';
+                               $encValue = '[redacted]';
+                       } elseif ( strlen( $value ) > 256 ) {
                                $value = substr( $value, 0, 256 );
                                $encValue = $this->encodeRequestLogValue( $value ) . '[...]';
                        } else {
@@ -1658,6 +1697,24 @@ class ApiMain extends ApiBase {
                $this->mParamsUsed += array_fill_keys( (array)$params, true );
        }
 
+       /**
+        * Get the request parameters that should be considered sensitive
+        * @since 1.29
+        * @return array
+        */
+       protected function getSensitiveParams() {
+               return array_keys( $this->mParamsSensitive );
+       }
+
+       /**
+        * Mark parameters as sensitive
+        * @since 1.29
+        * @param string|string[] $params
+        */
+       public function markParamsSensitive( $params ) {
+               $this->mParamsSensitive += array_fill_keys( (array)$params, true );
+       }
+
        /**
         * Get a request value, and register the fact that it was used, for logging.
         * @param string $name
index 3c08093..42de161 100644 (file)
@@ -125,6 +125,6 @@ class ApiManageTags extends ApiBase {
        }
 
        public function getHelpUrls() {
-               return 'https://www.mediawiki.org/wiki/API:Tag_management';
+               return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Tag_management';
        }
 }
index 357698e..79e9909 100644 (file)
@@ -137,6 +137,6 @@ class ApiMergeHistory extends ApiBase {
        }
 
        public function getHelpUrls() {
-               return 'https://www.mediawiki.org/wiki/API:Mergehistory';
+               return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Mergehistory';
        }
 }
index 566f778..1fb034f 100644 (file)
@@ -292,6 +292,6 @@ class ApiMove extends ApiBase {
        }
 
        public function getHelpUrls() {
-               return 'https://www.mediawiki.org/wiki/API:Move';
+               return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Move';
        }
 }
index e6fe27c..dc1b4e7 100644 (file)
@@ -25,6 +25,7 @@
  */
 
 use MediaWiki\MediaWikiServices;
+use Wikimedia\Rdbms\Database;
 
 /**
  * @ingroup API
@@ -309,7 +310,7 @@ class ApiOpenSearch extends ApiBase {
        }
 
        public function getHelpUrls() {
-               return 'https://www.mediawiki.org/wiki/API:Opensearch';
+               return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Opensearch';
        }
 
        /**
index 466d186..5b0d86a 100644 (file)
@@ -169,7 +169,7 @@ class ApiOptions extends ApiBase {
        }
 
        public function getHelpUrls() {
-               return 'https://www.mediawiki.org/wiki/API:Options';
+               return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Options';
        }
 
        protected function getExamplesMessages() {
index 85c6860..5609ad8 100644 (file)
@@ -71,6 +71,7 @@ class ApiPageSet extends ApiBase {
        private $mInterwikiTitles = [];
        /** @var Title[] */
        private $mPendingRedirectIDs = [];
+       private $mPendingRedirectSpecialPages = []; // [dbkey] => [ Title $from, Title $to ]
        private $mResolvedRedirectTitles = [];
        private $mConvertedTitles = [];
        private $mGoodRevIDs = [];
@@ -813,6 +814,8 @@ class ApiPageSet extends ApiBase {
                // Get validated and normalized title objects
                $linkBatch = $this->processTitlesArray( $titles );
                if ( $linkBatch->isEmpty() ) {
+                       // There might be special-page redirects
+                       $this->resolvePendingRedirects();
                        return;
                }
 
@@ -1033,7 +1036,7 @@ class ApiPageSet extends ApiBase {
 
                        // Repeat until all redirects have been resolved
                        // The infinite loop is prevented by keeping all known pages in $this->mAllPages
-                       while ( $this->mPendingRedirectIDs ) {
+                       while ( $this->mPendingRedirectIDs || $this->mPendingRedirectSpecialPages ) {
                                // Resolve redirects by querying the pagelinks table, and repeat the process
                                // Create a new linkBatch object for the next pass
                                $linkBatch = $this->getRedirectTargets();
@@ -1067,56 +1070,76 @@ class ApiPageSet extends ApiBase {
                $titlesToResolve = [];
                $db = $this->getDB();
 
-               $res = $db->select(
-                       'redirect',
-                       [
-                               'rd_from',
-                               'rd_namespace',
-                               'rd_fragment',
-                               'rd_interwiki',
-                               'rd_title'
-                       ], [ 'rd_from' => array_keys( $this->mPendingRedirectIDs ) ],
-                       __METHOD__
-               );
-               foreach ( $res as $row ) {
-                       $rdfrom = intval( $row->rd_from );
-                       $from = $this->mPendingRedirectIDs[$rdfrom]->getPrefixedText();
-                       $to = Title::makeTitle(
-                               $row->rd_namespace,
-                               $row->rd_title,
-                               $row->rd_fragment,
-                               $row->rd_interwiki
-                       );
-                       $this->mResolvedRedirectTitles[$from] = $this->mPendingRedirectIDs[$rdfrom];
-                       unset( $this->mPendingRedirectIDs[$rdfrom] );
-                       if ( $to->isExternal() ) {
-                               $this->mInterwikiTitles[$to->getPrefixedText()] = $to->getInterwiki();
-                       } elseif ( !isset( $this->mAllPages[$to->getNamespace()][$to->getDBkey()] ) ) {
-                               $titlesToResolve[] = $to;
+               if ( $this->mPendingRedirectIDs ) {
+                       $res = $db->select(
+                               'redirect',
+                               [
+                                       'rd_from',
+                                       'rd_namespace',
+                                       'rd_fragment',
+                                       'rd_interwiki',
+                                       'rd_title'
+                               ], [ 'rd_from' => array_keys( $this->mPendingRedirectIDs ) ],
+                                       __METHOD__
+                               );
+                       foreach ( $res as $row ) {
+                               $rdfrom = intval( $row->rd_from );
+                               $from = $this->mPendingRedirectIDs[$rdfrom]->getPrefixedText();
+                               $to = Title::makeTitle(
+                                       $row->rd_namespace,
+                                       $row->rd_title,
+                                       $row->rd_fragment,
+                                       $row->rd_interwiki
+                               );
+                               $this->mResolvedRedirectTitles[$from] = $this->mPendingRedirectIDs[$rdfrom];
+                               unset( $this->mPendingRedirectIDs[$rdfrom] );
+                               if ( $to->isExternal() ) {
+                                       $this->mInterwikiTitles[$to->getPrefixedText()] = $to->getInterwiki();
+                               } elseif ( !isset( $this->mAllPages[$to->getNamespace()][$to->getDBkey()] ) ) {
+                                       $titlesToResolve[] = $to;
+                               }
+                               $this->mRedirectTitles[$from] = $to;
                        }
-                       $this->mRedirectTitles[$from] = $to;
-               }
 
-               if ( $this->mPendingRedirectIDs ) {
-                       // We found pages that aren't in the redirect table
-                       // Add them
-                       foreach ( $this->mPendingRedirectIDs as $id => $title ) {
-                               $page = WikiPage::factory( $title );
-                               $rt = $page->insertRedirect();
-                               if ( !$rt ) {
-                                       // What the hell. Let's just ignore this
-                                       continue;
+                       if ( $this->mPendingRedirectIDs ) {
+                               // We found pages that aren't in the redirect table
+                               // Add them
+                               foreach ( $this->mPendingRedirectIDs as $id => $title ) {
+                                       $page = WikiPage::factory( $title );
+                                       $rt = $page->insertRedirect();
+                                       if ( !$rt ) {
+                                               // What the hell. Let's just ignore this
+                                               continue;
+                                       }
+                                       if ( $rt->isExternal() ) {
+                                               $this->mInterwikiTitles[$rt->getPrefixedText()] = $rt->getInterwiki();
+                                       } elseif ( !isset( $this->mAllPages[$rt->getNamespace()][$rt->getDBkey()] ) ) {
+                                               $titlesToResolve[] = $rt;
+                                       }
+                                       $from = $title->getPrefixedText();
+                                       $this->mResolvedRedirectTitles[$from] = $title;
+                                       $this->mRedirectTitles[$from] = $rt;
+                                       unset( $this->mPendingRedirectIDs[$id] );
                                }
-                               if ( $rt->isExternal() ) {
-                                       $this->mInterwikiTitles[$rt->getPrefixedText()] = $rt->getInterwiki();
-                               } elseif ( !isset( $this->mAllPages[$rt->getNamespace()][$rt->getDBkey()] ) ) {
-                                       $titlesToResolve[] = $rt;
+                       }
+               }
+
+               if ( $this->mPendingRedirectSpecialPages ) {
+                       foreach ( $this->mPendingRedirectSpecialPages as $key => list( $from, $to ) ) {
+                               $fromKey = $from->getPrefixedText();
+                               $this->mResolvedRedirectTitles[$fromKey] = $from;
+                               $this->mRedirectTitles[$fromKey] = $to;
+                               if ( $to->isExternal() ) {
+                                       $this->mInterwikiTitles[$to->getPrefixedText()] = $to->getInterwiki();
+                               } elseif ( !isset( $this->mAllPages[$to->getNamespace()][$to->getDBkey()] ) ) {
+                                       $titlesToResolve[] = $to;
                                }
-                               $from = $title->getPrefixedText();
-                               $this->mResolvedRedirectTitles[$from] = $title;
-                               $this->mRedirectTitles[$from] = $rt;
-                               unset( $this->mPendingRedirectIDs[$id] );
                        }
+                       $this->mPendingRedirectSpecialPages = [];
+
+                       // Set private caching since we don't know what criteria the
+                       // special pages used to decide on these redirects.
+                       $this->mCacheMode = 'private';
                }
 
                return $this->processTitlesArray( $titlesToResolve );
@@ -1197,8 +1220,26 @@ class ApiPageSet extends ApiBase {
                                        $dbkey = $titleObj->getDBkey();
                                        if ( !isset( $this->mAllSpecials[$ns][$dbkey] ) ) {
                                                $this->mAllSpecials[$ns][$dbkey] = $this->mFakePageId;
-                                               $this->mSpecialTitles[$this->mFakePageId] = $titleObj;
-                                               $this->mFakePageId--;
+                                               $target = null;
+                                               if ( $ns === NS_SPECIAL && $this->mResolveRedirects ) {
+                                                       $special = SpecialPageFactory::getPage( $dbkey );
+                                                       if ( $special instanceof RedirectSpecialArticle ) {
+                                                               // Only RedirectSpecialArticle is intended to redirect to an article, other kinds of
+                                                               // RedirectSpecialPage are probably applying weird URL parameters we don't want to handle.
+                                                               $context = new DerivativeContext( $this );
+                                                               $context->setTitle( $titleObj );
+                                                               $context->setRequest( new FauxRequest );
+                                                               $special->setContext( $context );
+                                                               list( /* $alias */, $subpage ) = SpecialPageFactory::resolveAlias( $dbkey );
+                                                               $target = $special->getRedirect( $subpage );
+                                                       }
+                                               }
+                                               if ( $target ) {
+                                                       $this->mPendingRedirectSpecialPages[$dbkey] = [ $titleObj, $target ];
+                                               } else {
+                                                       $this->mSpecialTitles[$this->mFakePageId] = $titleObj;
+                                                       $this->mFakePageId--;
+                                               }
                                        }
                                } else {
                                        // Regular page
@@ -1385,7 +1426,7 @@ class ApiPageSet extends ApiBase {
 
        /**
         * Get the database connection (read-only)
-        * @return Database
+        * @return IDatabase
         */
        protected function getDB() {
                return $this->mDbSource->getDB();
index 67983e7..39b5897 100644 (file)
@@ -543,6 +543,6 @@ class ApiParamInfo extends ApiBase {
        }
 
        public function getHelpUrls() {
-               return 'https://www.mediawiki.org/wiki/API:Parameter_information';
+               return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Parameter_information';
        }
 }
index b8d2641..d648968 100644 (file)
@@ -835,6 +835,6 @@ class ApiParse extends ApiBase {
        }
 
        public function getHelpUrls() {
-               return 'https://www.mediawiki.org/wiki/API:Parsing_wikitext#parse';
+               return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Parsing_wikitext#parse';
        }
 }
index c33542f..06e8ae2 100644 (file)
@@ -112,6 +112,6 @@ class ApiPatrol extends ApiBase {
        }
 
        public function getHelpUrls() {
-               return 'https://www.mediawiki.org/wiki/API:Patrol';
+               return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Patrol';
        }
 }
index c74f890..1be4b10 100644 (file)
@@ -199,6 +199,6 @@ class ApiProtect extends ApiBase {
        }
 
        public function getHelpUrls() {
-               return 'https://www.mediawiki.org/wiki/API:Protect';
+               return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Protect';
        }
 }
index 407497e..83227a2 100644 (file)
@@ -176,6 +176,6 @@ class ApiPurge extends ApiBase {
        }
 
        public function getHelpUrls() {
-               return 'https://www.mediawiki.org/wiki/API:Purge';
+               return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Purge';
        }
 }
index 8196cfa..e6f3fc4 100644 (file)
@@ -24,6 +24,8 @@
  * @file
  */
 
+use Wikimedia\Rdbms\IDatabase;
+
 /**
  * This is the main query class. It behaves similar to ApiMain: based on the
  * parameters given, it will create a list of titles to work on (an ApiPageSet
@@ -168,7 +170,7 @@ class ApiQuery extends ApiBase {
         * @param string $name Name to assign to the database connection
         * @param int $db One of the DB_* constants
         * @param array $groups Query groups
-        * @return Database
+        * @return IDatabase
         */
        public function getNamedDB( $name, $db, $groups ) {
                if ( !array_key_exists( $name, $this->mNamedDB ) ) {
@@ -536,10 +538,10 @@ class ApiQuery extends ApiBase {
 
        public function getHelpUrls() {
                return [
-                       'https://www.mediawiki.org/wiki/API:Query',
-                       'https://www.mediawiki.org/wiki/API:Meta',
-                       'https://www.mediawiki.org/wiki/API:Properties',
-                       'https://www.mediawiki.org/wiki/API:Lists',
+                       'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Query',
+                       'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Meta',
+                       'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Properties',
+                       'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Lists',
                ];
        }
 }
index 614b06c..aa89158 100644 (file)
@@ -200,6 +200,6 @@ class ApiQueryAllCategories extends ApiQueryGeneratorBase {
        }
 
        public function getHelpUrls() {
-               return 'https://www.mediawiki.org/wiki/API:Allcategories';
+               return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Allcategories';
        }
 }
index 020df6d..5682cc2 100644 (file)
@@ -455,6 +455,6 @@ class ApiQueryAllDeletedRevisions extends ApiQueryRevisionsBase {
        }
 
        public function getHelpUrls() {
-               return 'https://www.mediawiki.org/wiki/API:Alldeletedrevisions';
+               return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Alldeletedrevisions';
        }
 }
index 8ce122c..daeedbe 100644 (file)
@@ -428,6 +428,6 @@ class ApiQueryAllImages extends ApiQueryGeneratorBase {
        }
 
        public function getHelpUrls() {
-               return 'https://www.mediawiki.org/wiki/API:Allimages';
+               return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Allimages';
        }
 }
index 3b24e37..9d6bf46 100644 (file)
@@ -308,6 +308,6 @@ class ApiQueryAllLinks extends ApiQueryGeneratorBase {
        public function getHelpUrls() {
                $name = ucfirst( $this->getModuleName() );
 
-               return "https://www.mediawiki.org/wiki/API:{$name}";
+               return "https://www.mediawiki.org/wiki/Special:MyLanguage/API:{$name}";
        }
 }
index 244effc..271d281 100644 (file)
@@ -256,6 +256,6 @@ class ApiQueryAllMessages extends ApiQueryBase {
        }
 
        public function getHelpUrls() {
-               return 'https://www.mediawiki.org/wiki/API:Allmessages';
+               return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Allmessages';
        }
 }
index 6b959ae..315def0 100644 (file)
@@ -355,6 +355,6 @@ class ApiQueryAllPages extends ApiQueryGeneratorBase {
        }
 
        public function getHelpUrls() {
-               return 'https://www.mediawiki.org/wiki/API:Allpages';
+               return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Allpages';
        }
 }
index 7b43efc..20746c9 100644 (file)
@@ -290,6 +290,6 @@ class ApiQueryAllRevisions extends ApiQueryRevisionsBase {
        }
 
        public function getHelpUrls() {
-               return 'https://www.mediawiki.org/wiki/API:Allrevisions';
+               return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Allrevisions';
        }
 }
index 9e7ad67..0f0b2af 100644 (file)
@@ -395,6 +395,6 @@ class ApiQueryAllUsers extends ApiQueryBase {
        }
 
        public function getHelpUrls() {
-               return 'https://www.mediawiki.org/wiki/API:Allusers';
+               return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Allusers';
        }
 }
index 661ec5a..c775942 100644 (file)
@@ -127,6 +127,6 @@ class ApiQueryAuthManagerInfo extends ApiQueryBase {
        }
 
        public function getHelpUrls() {
-               return 'https://www.mediawiki.org/wiki/API:Authmanagerinfo';
+               return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Authmanagerinfo';
        }
 }
index b3ac606..56cbaac 100644 (file)
@@ -59,19 +59,19 @@ class ApiQueryBacklinks extends ApiQueryGeneratorBase {
                        'code' => 'bl',
                        'prefix' => 'pl',
                        'linktbl' => 'pagelinks',
-                       'helpurl' => 'https://www.mediawiki.org/wiki/API:Backlinks',
+                       'helpurl' => 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Backlinks',
                ],
                'embeddedin' => [
                        'code' => 'ei',
                        'prefix' => 'tl',
                        'linktbl' => 'templatelinks',
-                       'helpurl' => 'https://www.mediawiki.org/wiki/API:Embeddedin',
+                       'helpurl' => 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Embeddedin',
                ],
                'imageusage' => [
                        'code' => 'iu',
                        'prefix' => 'il',
                        'linktbl' => 'imagelinks',
-                       'helpurl' => 'https://www.mediawiki.org/wiki/API:Imageusage',
+                       'helpurl' => 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Imageusage',
                ]
        ];
 
index 4ed7f52..00cbcd9 100644 (file)
@@ -432,6 +432,6 @@ class ApiQueryBacklinksprop extends ApiQueryGeneratorBase {
 
        public function getHelpUrls() {
                $name = ucfirst( $this->getModuleName() );
-               return "https://www.mediawiki.org/wiki/API:{$name}";
+               return "https://www.mediawiki.org/wiki/Special:MyLanguage/API:{$name}";
        }
 }
index 87bb6a7..baefbda 100644 (file)
@@ -24,6 +24,7 @@
  * @file
  */
 
+use Wikimedia\Rdbms\IDatabase;
 use Wikimedia\Rdbms\ResultWrapper;
 
 /**
@@ -105,7 +106,7 @@ abstract class ApiQueryBase extends ApiBase {
 
        /**
         * Get the Query database connection (read-only)
-        * @return Database
+        * @return IDatabase
         */
        protected function getDB() {
                if ( is_null( $this->mDb ) ) {
@@ -121,7 +122,7 @@ abstract class ApiQueryBase extends ApiBase {
         * @param string $name Name to assign to the database connection
         * @param int $db One of the DB_* constants
         * @param array $groups Query groups
-        * @return Database
+        * @return IDatabase
         */
        public function selectNamedDB( $name, $db, $groups ) {
                $this->mDb = $this->getQuery()->getNamedDB( $name, $db, $groups );
index 0040860..076a09e 100644 (file)
@@ -335,6 +335,6 @@ class ApiQueryBlocks extends ApiQueryBase {
        }
 
        public function getHelpUrls() {
-               return 'https://www.mediawiki.org/wiki/API:Blocks';
+               return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Blocks';
        }
 }
index f2498ca..c4428d5 100644 (file)
@@ -227,6 +227,6 @@ class ApiQueryCategories extends ApiQueryGeneratorBase {
        }
 
        public function getHelpUrls() {
-               return 'https://www.mediawiki.org/wiki/API:Categories';
+               return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Categories';
        }
 }
index 3416240..2a3bf38 100644 (file)
@@ -115,6 +115,6 @@ class ApiQueryCategoryInfo extends ApiQueryBase {
        }
 
        public function getHelpUrls() {
-               return 'https://www.mediawiki.org/wiki/API:Categoryinfo';
+               return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Categoryinfo';
        }
 }
index 3a8847c..c570ec9 100644 (file)
@@ -391,6 +391,6 @@ class ApiQueryCategoryMembers extends ApiQueryGeneratorBase {
        }
 
        public function getHelpUrls() {
-               return 'https://www.mediawiki.org/wiki/API:Categorymembers';
+               return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Categorymembers';
        }
 }
index 148e315..183409d 100644 (file)
@@ -256,6 +256,6 @@ class ApiQueryContributors extends ApiQueryBase {
        }
 
        public function getHelpUrls() {
-               return 'https://www.mediawiki.org/wiki/API:Contributors';
+               return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Contributors';
        }
 }
index 471aed6..90fd695 100644 (file)
@@ -288,6 +288,6 @@ class ApiQueryDeletedRevisions extends ApiQueryRevisionsBase {
        }
 
        public function getHelpUrls() {
-               return 'https://www.mediawiki.org/wiki/API:Deletedrevisions';
+               return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Deletedrevisions';
        }
 }
index 2959151..b68a868 100644 (file)
@@ -250,7 +250,7 @@ class ApiQueryDeletedrevs extends ApiQueryBase {
                $this->addOption( 'LIMIT', $limit + 1 );
                $this->addOption(
                        'USE INDEX',
-                       [ 'archive' => ( $mode == 'user' ? 'usertext_timestamp' : 'name_title_timestamp' ) ]
+                       [ 'archive' => ( $mode == 'user' ? 'ar_usertext_timestamp' : 'name_title_timestamp' ) ]
                );
                if ( $mode == 'all' ) {
                        if ( $params['unique'] ) {
@@ -505,6 +505,6 @@ class ApiQueryDeletedrevs extends ApiQueryBase {
        }
 
        public function getHelpUrls() {
-               return 'https://www.mediawiki.org/wiki/API:Deletedrevs';
+               return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Deletedrevs';
        }
 }
index 02b7883..2ebd6de 100644 (file)
@@ -189,6 +189,6 @@ class ApiQueryDuplicateFiles extends ApiQueryGeneratorBase {
        }
 
        public function getHelpUrls() {
-               return 'https://www.mediawiki.org/wiki/API:Duplicatefiles';
+               return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Duplicatefiles';
        }
 }
index 9b05537..6c29b60 100644 (file)
@@ -230,6 +230,6 @@ class ApiQueryExtLinksUsage extends ApiQueryGeneratorBase {
        }
 
        public function getHelpUrls() {
-               return 'https://www.mediawiki.org/wiki/API:Exturlusage';
+               return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Exturlusage';
        }
 }
index 8c9c887..71fd6d1 100644 (file)
@@ -134,6 +134,6 @@ class ApiQueryExternalLinks extends ApiQueryBase {
        }
 
        public function getHelpUrls() {
-               return 'https://www.mediawiki.org/wiki/API:Extlinks';
+               return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Extlinks';
        }
 }
index c491236..4589991 100644 (file)
@@ -111,6 +111,6 @@ class ApiQueryFileRepoInfo extends ApiQueryBase {
        }
 
        public function getHelpUrls() {
-               return 'https://www.mediawiki.org/wiki/API:Filerepoinfo';
+               return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Filerepoinfo';
        }
 }
index 116dbb3..7383cba 100644 (file)
@@ -292,6 +292,6 @@ class ApiQueryFilearchive extends ApiQueryBase {
        }
 
        public function getHelpUrls() {
-               return 'https://www.mediawiki.org/wiki/API:Filearchive';
+               return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Filearchive';
        }
 }
index 6e2fb67..a10ba16 100644 (file)
@@ -215,6 +215,6 @@ class ApiQueryIWBacklinks extends ApiQueryGeneratorBase {
        }
 
        public function getHelpUrls() {
-               return 'https://www.mediawiki.org/wiki/API:Iwbacklinks';
+               return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Iwbacklinks';
        }
 }
index cfd990b..9313af3 100644 (file)
@@ -194,6 +194,6 @@ class ApiQueryIWLinks extends ApiQueryBase {
        }
 
        public function getHelpUrls() {
-               return 'https://www.mediawiki.org/wiki/API:Iwlinks';
+               return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Iwlinks';
        }
 }
index e5e45b3..b2664df 100644 (file)
@@ -821,6 +821,6 @@ class ApiQueryImageInfo extends ApiQueryBase {
        }
 
        public function getHelpUrls() {
-               return 'https://www.mediawiki.org/wiki/API:Imageinfo';
+               return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Imageinfo';
        }
 }
index ae6f5bf..0086c58 100644 (file)
@@ -172,6 +172,6 @@ class ApiQueryImages extends ApiQueryGeneratorBase {
        }
 
        public function getHelpUrls() {
-               return 'https://www.mediawiki.org/wiki/API:Images';
+               return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Images';
        }
 }
index e789dd4..c2cdfe4 100644 (file)
@@ -946,6 +946,6 @@ class ApiQueryInfo extends ApiQueryBase {
        }
 
        public function getHelpUrls() {
-               return 'https://www.mediawiki.org/wiki/API:Info';
+               return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Info';
        }
 }
index 8d5b5f3..fd67d7c 100644 (file)
@@ -214,6 +214,6 @@ class ApiQueryLangBacklinks extends ApiQueryGeneratorBase {
        }
 
        public function getHelpUrls() {
-               return 'https://www.mediawiki.org/wiki/API:Langbacklinks';
+               return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Langbacklinks';
        }
 }
index 55e3c85..df33d02 100644 (file)
@@ -190,6 +190,6 @@ class ApiQueryLangLinks extends ApiQueryBase {
        }
 
        public function getHelpUrls() {
-               return 'https://www.mediawiki.org/wiki/API:Langlinks';
+               return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Langlinks';
        }
 }
index 4556e29..29c0b74 100644 (file)
@@ -42,13 +42,13 @@ class ApiQueryLinks extends ApiQueryGeneratorBase {
                                $this->table = 'pagelinks';
                                $this->prefix = 'pl';
                                $this->titlesParam = 'titles';
-                               $this->helpUrl = 'https://www.mediawiki.org/wiki/API:Links';
+                               $this->helpUrl = 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Links';
                                break;
                        case self::TEMPLATES:
                                $this->table = 'templatelinks';
                                $this->prefix = 'tl';
                                $this->titlesParam = 'templates';
-                               $this->helpUrl = 'https://www.mediawiki.org/wiki/API:Templates';
+                               $this->helpUrl = 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Templates';
                                break;
                        default:
                                ApiBase::dieDebug( __METHOD__, 'Unknown module name' );
index 8a13fef..df8a11e 100644 (file)
@@ -467,6 +467,6 @@ class ApiQueryLogEvents extends ApiQueryBase {
        }
 
        public function getHelpUrls() {
-               return 'https://www.mediawiki.org/wiki/API:Logevents';
+               return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Logevents';
        }
 }
index 1324f2f..457f6c6 100644 (file)
@@ -145,6 +145,6 @@ class ApiQueryMyStashedFiles extends ApiQueryBase {
        }
 
        public function getHelpUrls() {
-               return 'https://www.mediawiki.org/wiki/API:mystashedfiles';
+               return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:mystashedfiles';
        }
 }
index fc50b50..4966bcd 100644 (file)
@@ -104,6 +104,6 @@ class ApiQueryPagePropNames extends ApiQueryBase {
        }
 
        public function getHelpUrls() {
-               return 'https://www.mediawiki.org/wiki/API:Pagepropnames';
+               return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Pagepropnames';
        }
 }
index de1df34..e49dfbc 100644 (file)
@@ -120,6 +120,6 @@ class ApiQueryPageProps extends ApiQueryBase {
        }
 
        public function getHelpUrls() {
-               return 'https://www.mediawiki.org/wiki/API:Pageprops';
+               return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Pageprops';
        }
 }
index f1f4d9a..e90356d 100644 (file)
@@ -173,6 +173,6 @@ class ApiQueryPagesWithProp extends ApiQueryGeneratorBase {
        }
 
        public function getHelpUrls() {
-               return 'https://www.mediawiki.org/wiki/API:Pageswithprop';
+               return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Pageswithprop';
        }
 }
index 3bf6d3f..5606f3c 100644 (file)
@@ -127,6 +127,6 @@ class ApiQueryPrefixSearch extends ApiQueryGeneratorBase {
        }
 
        public function getHelpUrls() {
-               return 'https://www.mediawiki.org/wiki/API:Prefixsearch';
+               return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Prefixsearch';
        }
 }
index 62b2e42..5f6510e 100644 (file)
@@ -234,6 +234,6 @@ class ApiQueryProtectedTitles extends ApiQueryGeneratorBase {
        }
 
        public function getHelpUrls() {
-               return 'https://www.mediawiki.org/wiki/API:Protectedtitles';
+               return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Protectedtitles';
        }
 }
index 908cdee..caa5f05 100644 (file)
@@ -166,6 +166,6 @@ class ApiQueryQueryPage extends ApiQueryGeneratorBase {
        }
 
        public function getHelpUrls() {
-               return 'https://www.mediawiki.org/wiki/API:Querypage';
+               return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Querypage';
        }
 }
index 00bd467..cc1fc89 100644 (file)
@@ -209,6 +209,6 @@ class ApiQueryRandom extends ApiQueryGeneratorBase {
        }
 
        public function getHelpUrls() {
-               return 'https://www.mediawiki.org/wiki/API:Random';
+               return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Random';
        }
 }
index 26581a6..0dc01aa 100644 (file)
@@ -699,6 +699,6 @@ class ApiQueryRecentChanges extends ApiQueryGeneratorBase {
        }
 
        public function getHelpUrls() {
-               return 'https://www.mediawiki.org/wiki/API:Recentchanges';
+               return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Recentchanges';
        }
 }
index c47de9d..7b8394f 100644 (file)
@@ -447,6 +447,6 @@ class ApiQueryRevisions extends ApiQueryRevisionsBase {
        }
 
        public function getHelpUrls() {
-               return 'https://www.mediawiki.org/wiki/API:Revisions';
+               return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Revisions';
        }
 }
index 05b693d..72b39b6 100644 (file)
@@ -415,6 +415,6 @@ class ApiQuerySearch extends ApiQueryGeneratorBase {
        }
 
        public function getHelpUrls() {
-               return 'https://www.mediawiki.org/wiki/API:Search';
+               return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Search';
        }
 }
index cc302dc..6b896c9 100644 (file)
@@ -933,6 +933,6 @@ class ApiQuerySiteinfo extends ApiQueryBase {
        }
 
        public function getHelpUrls() {
-               return 'https://www.mediawiki.org/wiki/API:Siteinfo';
+               return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Siteinfo';
        }
 }
index abb827f..1924ca0 100644 (file)
@@ -123,6 +123,6 @@ class ApiQueryStashImageInfo extends ApiQueryImageInfo {
        }
 
        public function getHelpUrls() {
-               return 'https://www.mediawiki.org/wiki/API:Stashimageinfo';
+               return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Stashimageinfo';
        }
 }
index 43eb7e8..be67dd2 100644 (file)
@@ -178,6 +178,6 @@ class ApiQueryTags extends ApiQueryBase {
        }
 
        public function getHelpUrls() {
-               return 'https://www.mediawiki.org/wiki/API:Tags';
+               return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Tags';
        }
 }
index 5b700db..85205c8 100644 (file)
@@ -131,6 +131,6 @@ class ApiQueryTokens extends ApiQueryBase {
        }
 
        public function getHelpUrls() {
-               return 'https://www.mediawiki.org/wiki/API:Tokens';
+               return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Tokens';
        }
 }
index 31a9238..181cddb 100644 (file)
@@ -582,6 +582,6 @@ class ApiQueryContributions extends ApiQueryBase {
        }
 
        public function getHelpUrls() {
-               return 'https://www.mediawiki.org/wiki/API:Usercontribs';
+               return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Usercontribs';
        }
 }
index 04b0fac..1bb54c1 100644 (file)
@@ -352,6 +352,6 @@ class ApiQueryUserInfo extends ApiQueryBase {
        }
 
        public function getHelpUrls() {
-               return 'https://www.mediawiki.org/wiki/API:Userinfo';
+               return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Userinfo';
        }
 }
index 3a814c4..4515f7f 100644 (file)
@@ -406,6 +406,6 @@ class ApiQueryUsers extends ApiQueryBase {
        }
 
        public function getHelpUrls() {
-               return 'https://www.mediawiki.org/wiki/API:Users';
+               return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Users';
        }
 }
index 3f59751..f8f6e7d 100644 (file)
@@ -475,7 +475,8 @@ class ApiQueryWatchlist extends ApiQueryGeneratorBase {
                                ApiBase::PARAM_TYPE => 'user'
                        ],
                        'token' => [
-                               ApiBase::PARAM_TYPE => 'string'
+                               ApiBase::PARAM_TYPE => 'string',
+                               ApiBase::PARAM_SENSITIVE => true,
                        ],
                        'continue' => [
                                ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
@@ -501,6 +502,6 @@ class ApiQueryWatchlist extends ApiQueryGeneratorBase {
        }
 
        public function getHelpUrls() {
-               return 'https://www.mediawiki.org/wiki/API:Watchlist';
+               return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Watchlist';
        }
 }
index a1078a5..b0b1cde 100644 (file)
@@ -170,7 +170,8 @@ class ApiQueryWatchlistRaw extends ApiQueryGeneratorBase {
                                ApiBase::PARAM_TYPE => 'user'
                        ],
                        'token' => [
-                               ApiBase::PARAM_TYPE => 'string'
+                               ApiBase::PARAM_TYPE => 'string',
+                               ApiBase::PARAM_SENSITIVE => true,
                        ],
                        'dir' => [
                                ApiBase::PARAM_DFLT => 'ascending',
@@ -198,6 +199,6 @@ class ApiQueryWatchlistRaw extends ApiQueryGeneratorBase {
        }
 
        public function getHelpUrls() {
-               return 'https://www.mediawiki.org/wiki/API:Watchlistraw';
+               return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Watchlistraw';
        }
 }
index 359d045..661b50c 100644 (file)
@@ -106,6 +106,6 @@ class ApiRemoveAuthenticationData extends ApiBase {
        }
 
        public function getHelpUrls() {
-               return 'https://www.mediawiki.org/wiki/API:Manage_authentication_data';
+               return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Manage_authentication_data';
        }
 }
index b5fa8ed..4f3fc0d 100644 (file)
@@ -134,6 +134,6 @@ class ApiResetPassword extends ApiBase {
        }
 
        public function getHelpUrls() {
-               return 'https://www.mediawiki.org/wiki/API:Manage_authentication_data';
+               return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Manage_authentication_data';
        }
 }
index 4896e7e..4580aa2 100644 (file)
@@ -199,6 +199,6 @@ class ApiRevisionDelete extends ApiBase {
        }
 
        public function getHelpUrls() {
-               return 'https://www.mediawiki.org/wiki/API:Revisiondelete';
+               return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Revisiondelete';
        }
 }
index 9584f09..76b6cc6 100644 (file)
@@ -202,6 +202,6 @@ class ApiRollback extends ApiBase {
        }
 
        public function getHelpUrls() {
-               return 'https://www.mediawiki.org/wiki/API:Rollback';
+               return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Rollback';
        }
 }
index 4fac37d..fdc62a8 100644 (file)
@@ -89,7 +89,7 @@ class ApiRsd extends ApiBase {
                                'apiLink' => wfExpandUrl( wfScript( 'api' ), PROTO_CURRENT ),
 
                                // Docs link is optional, but recommended.
-                               'docs' => 'https://www.mediawiki.org/wiki/API',
+                               'docs' => 'https://www.mediawiki.org/wiki/Special:MyLanguage/API',
 
                                // Some APIs may need a blog ID, but it may be left blank.
                                'blogID' => '',
index 5769ff6..1fc8fc2 100644 (file)
@@ -248,6 +248,6 @@ class ApiSetNotificationTimestamp extends ApiBase {
        }
 
        public function getHelpUrls() {
-               return 'https://www.mediawiki.org/wiki/API:SetNotificationTimestamp';
+               return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:SetNotificationTimestamp';
        }
 }
index 3ff99f1..2d6d9be 100755 (executable)
@@ -144,6 +144,6 @@ class ApiSetPageLanguage extends ApiBase {
        }
 
        public function getHelpUrls() {
-               return 'https://www.mediawiki.org/wiki/API:SetPageLanguage';
+               return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:SetPageLanguage';
        }
 }
index 7470ff3..76c6762 100644 (file)
@@ -187,6 +187,6 @@ class ApiTag extends ApiBase {
        }
 
        public function getHelpUrls() {
-               return 'https://www.mediawiki.org/wiki/API:Tag';
+               return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Tag';
        }
 }
index bfb0324..887edaa 100644 (file)
@@ -132,6 +132,6 @@ class ApiUnblock extends ApiBase {
        }
 
        public function getHelpUrls() {
-               return 'https://www.mediawiki.org/wiki/API:Block';
+               return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Block';
        }
 }
index 7fda1ea..3aa7b60 100644 (file)
@@ -33,7 +33,6 @@ class ApiUndelete extends ApiBase {
                $this->useTransactionalTimeLimit();
 
                $params = $this->extractRequestParams();
-               $this->checkUserRightsAny( 'undelete' );
 
                $user = $this->getUser();
                if ( $user->isBlocked() ) {
@@ -45,6 +44,10 @@ class ApiUndelete extends ApiBase {
                        $this->dieWithError( [ 'apierror-invalidtitle', wfEscapeWikiText( $params['title'] ) ] );
                }
 
+               if ( !$titleObj->userCan( 'undelete', $user, 'secure' ) ) {
+                       $this->dieWithError( 'permdenied-undelete' );
+               }
+
                // Check if user can add tags
                if ( !is_null( $params['tags'] ) ) {
                        $ableToTag = ChangeTags::canAddTagsAccompanyingChange( $params['tags'], $user );
@@ -145,6 +148,6 @@ class ApiUndelete extends ApiBase {
        }
 
        public function getHelpUrls() {
-               return 'https://www.mediawiki.org/wiki/API:Undelete';
+               return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Undelete';
        }
 }
index af3fff6..a283b5a 100644 (file)
@@ -928,6 +928,6 @@ class ApiUpload extends ApiBase {
        }
 
        public function getHelpUrls() {
-               return 'https://www.mediawiki.org/wiki/API:Upload';
+               return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Upload';
        }
 }
index 262f072..d857e4a 100644 (file)
@@ -214,6 +214,6 @@ class ApiUserrights extends ApiBase {
        }
 
        public function getHelpUrls() {
-               return 'https://www.mediawiki.org/wiki/API:User_group_membership';
+               return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:User_group_membership';
        }
 }
index 6968523..943149d 100644 (file)
@@ -76,6 +76,6 @@ class ApiValidatePassword extends ApiBase {
        }
 
        public function getHelpUrls() {
-               return 'https://www.mediawiki.org/wiki/API:Validatepassword';
+               return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Validatepassword';
        }
 }
index 37d319f..efe21f1 100644 (file)
@@ -183,6 +183,6 @@ class ApiWatch extends ApiBase {
        }
 
        public function getHelpUrls() {
-               return 'https://www.mediawiki.org/wiki/API:Watch';
+               return 'https://www.mediawiki.org/wiki/Special:MyLanguage/API:Watch';
        }
 }
index ca1e85a..a6f1a28 100644 (file)
                        "Dvorapa"
                ]
        },
-       "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:API:Main_page|Dokumentace]]\n* [[mw:API:FAQ|FAQ]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api E-mailová konference]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce Oznámení k API]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Chyby a požadavky]\n</div>\n<strong>Stav:</strong> Všechny funkce uvedené na této stránce by měly fungovat, ale API se stále aktivně vyvíjí a může se kdykoli změnit. Upozornění na změny získáte přihlášením se k [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ e-mailové konferenci mediawiki-api-announce].\n\n<strong>Chybné požadavky:</strong> Pokud jsou do API zaslány chybné požadavky, bude vrácena HTTP hlavička s klíčem „MediaWiki-API-Error“ a hodnota této hlavičky a chybový kód budou nastaveny na stejnou hodnotu. Více informací najdete [[mw:API:Errors_and_warnings|v dokumentaci]].\n\n<strong>Testování:</strong> Pro jednoduché testování požadavků na API zkuste [[Special:ApiSandbox]].",
+       "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:Special:MyLanguage/API:Main_page|Dokumentace]]\n* [[mw:Special:MyLanguage/API:FAQ|FAQ]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api E-mailová konference]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce Oznámení k API]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Chyby a požadavky]\n</div>\n<strong>Stav:</strong> Všechny funkce uvedené na této stránce by měly fungovat, ale API se stále aktivně vyvíjí a může se kdykoli změnit. Upozornění na změny získáte přihlášením se k [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ e-mailové konferenci mediawiki-api-announce].\n\n<strong>Chybné požadavky:</strong> Pokud jsou do API zaslány chybné požadavky, bude vrácena HTTP hlavička s klíčem „MediaWiki-API-Error“ a hodnota této hlavičky a chybový kód budou nastaveny na stejnou hodnotu. Více informací najdete [[mw:Special:MyLanguage/API:Errors_and_warnings|v dokumentaci]].\n\n<strong>Testování:</strong> Pro jednoduché testování požadavků na API zkuste [[Special:ApiSandbox]].",
        "apihelp-main-param-action": "Která akce se má provést.",
        "apihelp-main-param-format": "Formát výstupu.",
-       "apihelp-main-param-maxlag": "Maximální zpoždění lze použít, když je MediaWiki nainstalováno na cluster s replikovanou databází. Abyste se vyhnuli zhoršování už tak špatného replikačního zpoždění, můžete tímto parametrem nechat klienta čekat, dokud replikační zpoždění neklesne pod uvedenou hodnotu. V případě příliš vysokého zpoždění se vrátí chybový kód „<samp>maxlag</samp>“ s hlášením typu „<samp>Waiting for $host: $lag seconds lagged</samp>“.<br />Více informací najdete v [[mw:Manual:Maxlag_parameter|příručce]].",
+       "apihelp-main-param-maxlag": "Maximální zpoždění lze použít, když je MediaWiki nainstalováno na cluster s replikovanou databází. Abyste se vyhnuli zhoršování už tak špatného replikačního zpoždění, můžete tímto parametrem nechat klienta čekat, dokud replikační zpoždění neklesne pod uvedenou hodnotu. V případě příliš vysokého zpoždění se vrátí chybový kód „<samp>maxlag</samp>“ s hlášením typu „<samp>Waiting for $host: $lag seconds lagged</samp>“.<br />Více informací najdete v [[mw:Special:MyLanguage/Manual:Maxlag_parameter|příručce]].",
        "apihelp-main-param-smaxage": "Nastaví HTTP hlavičku pro řízení kešování <code>s-maxage</code> na uvedený počet sekund. Chyby se nekešují nikdy.",
        "apihelp-main-param-maxage": "Nastaví HTTP hlavičku pro řízení kešování <code>max-age</code> na uvedený počet sekund. Chyby se nekešují nikdy.",
        "apihelp-main-param-assert": "Pokud je nastaveno na „<kbd>user</kbd>“, ověří, že je uživatel přihlášen, pokud je nastaveno na „<kbd>bot</kbd>“, ověří, že má oprávnění „bot“.",
@@ -32,7 +32,7 @@
        "apihelp-block-param-nocreate": "Nedovolit registraci nových uživatelů.",
        "apihelp-block-param-noemail": "Zakázat uživateli posílat e-maily prostřednictvím wiki. (Vyžaduje oprávnění „<code>blockemail</code>“.)",
        "apihelp-block-param-hidename": "Skrýt uživatelské jméno v knize zablokování. (Vyžaduje oprávnění <code>hideuser</code>.)",
-       "apihelp-block-param-allowusertalk": "Povolit uživateli editovat svou vlastní diskusní stránku (závisí na <var>[[mw:Manual:$wgBlockAllowsUTEdit|$wgBlockAllowsUTEdit]]</var>).",
+       "apihelp-block-param-allowusertalk": "Povolit uživateli editovat svou vlastní diskusní stránku (závisí na <var>[[mw:Special:MyLanguage/Manual:$wgBlockAllowsUTEdit|$wgBlockAllowsUTEdit]]</var>).",
        "apihelp-block-param-reblock": "Pokud již uživatel blokován je, přepsat současný blok.",
        "apihelp-block-param-watchuser": "Sledovat stránku uživatele nebo IP adresy a jejich diskuzní stránky.",
        "apihelp-block-example-ip-simple": "Na tři dny zablokovat IP adresu <kbd>192.0.2.5</kbd> s odůvodněním <kbd>First strike</kbd>.",
        "apihelp-opensearch-param-search": "Hledaný řetězec.",
        "apihelp-opensearch-param-limit": "Maximální počet vrácených výsledků",
        "apihelp-opensearch-param-namespace": "Jmenné prostory pro vyhledávání.",
-       "apihelp-opensearch-param-suggest": "Pokud je <var>[[mw:Manual:$wgEnableOpenSearchSuggest|$wgEnableOpenSearchSuggest]]</var> vypnuto, nedělat nic.",
+       "apihelp-opensearch-param-suggest": "Pokud je <var>[[mw:Special:MyLanguage/Manual:$wgEnableOpenSearchSuggest|$wgEnableOpenSearchSuggest]]</var> vypnuto, nedělat nic.",
        "apihelp-opensearch-param-format": "Formát výstupu.",
        "apihelp-opensearch-example-te": "Najít stránky začínající na „<kbd>Te</kbd>“.",
        "apihelp-options-param-reset": "Vrátit nastavení na výchozí hodnoty.",
        "apihelp-xml-param-includexmlnamespace": "Pokud je uvedeno, přidá jmenný prostor XML.",
        "apihelp-xmlfm-description": "Vypisuje data ve formátu XML (v čitelné HTML podobě).",
        "api-format-title": "Odpověď z MediaWiki API",
-       "api-format-prettyprint-header": "Toto je HTML reprezentace formátu $1. HTML se hodí pro ladění, ale pro aplikační použití je nevhodné.\n\nPro změnu výstupního formátu uveďte parametr <var>format</var>. Abyste viděli ne-HTML reprezentaci formátu $1, nastavte <kbd>format=$2</kbd>.\n\nVíce informací najdete v [[mw:API|úplné dokumentaci]] nebo v [[Special:ApiHelp/main|nápovědě k API]].",
-       "api-format-prettyprint-header-only-html": "Toto je HTML reprezentace určená pro ladění, která není vhodná pro použití v aplikacích.\n\nVíce informací najdete v [[mw:API|úplné dokumentaci]] nebo [[Special:ApiHelp/main|dokumentaci API]].",
+       "api-format-prettyprint-header": "Toto je HTML reprezentace formátu $1. HTML se hodí pro ladění, ale pro aplikační použití je nevhodné.\n\nPro změnu výstupního formátu uveďte parametr <var>format</var>. Abyste viděli ne-HTML reprezentaci formátu $1, nastavte <kbd>format=$2</kbd>.\n\nVíce informací najdete v [[mw:Special:MyLanguage/API|úplné dokumentaci]] nebo v [[Special:ApiHelp/main|nápovědě k API]].",
+       "api-format-prettyprint-header-only-html": "Toto je HTML reprezentace určená pro ladění, která není vhodná pro použití v aplikacích.\n\nVíce informací najdete v [[mw:Special:MyLanguage/API|úplné dokumentaci]] nebo [[Special:ApiHelp/main|dokumentaci API]].",
        "api-help-title": "Nápověda k MediaWiki API",
        "api-help-lead": "Toto je automaticky generovaná dokumentační stránka k MediaWiki API.\n\nDokumentace a příklady: https://www.mediawiki.org/wiki/API",
        "api-help-main-header": "Hlavní modul",
index 14c9986..074d69e 100644 (file)
                        "Zenith"
                ]
        },
-       "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:API:Main_page|Dokumentation]]\n* [[mw:API:FAQ|Häufig gestellte Fragen]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Mailingliste]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce API-Ankündigungen]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Fehlerberichte und Anfragen]\n</div>\n<strong>Status:</strong> Alle auf dieser Seite gezeigten Funktionen sollten funktionieren, allerdings ist die API in aktiver Entwicklung und kann sich zu jeder Zeit ändern. Abonniere die [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ MediaWiki-API-Ankündigungs-Mailingliste], um über Aktualisierungen informiert zu werden.\n\n<strong>Fehlerhafte Anfragen:</strong> Wenn fehlerhafte Anfragen an die API gesendet werden, wird ein HTTP-Header mit dem Schlüssel „MediaWiki-API-Error“ gesendet. Der Wert des Headers und der Fehlercode werden auf den gleichen Wert gesetzt. Für weitere Informationen siehe [[mw:API:Errors_and_warnings|API: Fehler und Warnungen]].\n\n<strong>Testen:</strong> Zum einfachen Testen von API-Anfragen, siehe [[Special:ApiSandbox]].",
+       "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:Special:MyLanguage/API:Main_page|Dokumentation]]\n* [[mw:Special:MyLanguage/API:FAQ|Häufig gestellte Fragen]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Mailingliste]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce API-Ankündigungen]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Fehlerberichte und Anfragen]\n</div>\n<strong>Status:</strong> Alle auf dieser Seite gezeigten Funktionen sollten funktionieren, allerdings ist die API in aktiver Entwicklung und kann sich zu jeder Zeit ändern. Abonniere die [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ MediaWiki-API-Ankündigungs-Mailingliste], um über Aktualisierungen informiert zu werden.\n\n<strong>Fehlerhafte Anfragen:</strong> Wenn fehlerhafte Anfragen an die API gesendet werden, wird ein HTTP-Header mit dem Schlüssel „MediaWiki-API-Error“ gesendet. Der Wert des Headers und der Fehlercode werden auf den gleichen Wert gesetzt. Für weitere Informationen siehe [[mw:Special:MyLanguage/API:Errors_and_warnings|API: Fehler und Warnungen]].\n\n<strong>Testen:</strong> Zum einfachen Testen von API-Anfragen, siehe [[Special:ApiSandbox]].",
        "apihelp-main-param-action": "Auszuführende Aktion.",
        "apihelp-main-param-format": "Format der Ausgabe.",
-       "apihelp-main-param-maxlag": "maxlag kann verwendet werden, wenn MediaWiki auf einem datenbankreplizierten Cluster installiert ist. Um weitere Replikationsrückstände zu verhindern, lässt dieser Parameter den Client warten, bis der Replikationsrückstand kleiner als der angegebene Wert (in Sekunden) ist. Bei einem größerem Rückstand wird der Fehlercode <samp>maxlag</samp> zurückgegeben mit einer Nachricht wie <samp>Waiting for $host: $lag seconds lagged</samp>.<br />Siehe [[mw:Manual:Maxlag_parameter|Handbuch: Maxlag parameter]] für weitere Informationen.",
+       "apihelp-main-param-maxlag": "maxlag kann verwendet werden, wenn MediaWiki auf einem datenbankreplizierten Cluster installiert ist. Um weitere Replikationsrückstände zu verhindern, lässt dieser Parameter den Client warten, bis der Replikationsrückstand kleiner als der angegebene Wert (in Sekunden) ist. Bei einem größerem Rückstand wird der Fehlercode <samp>maxlag</samp> zurückgegeben mit einer Nachricht wie <samp>Waiting for $host: $lag seconds lagged</samp>.<br />Siehe [[mw:Special:MyLanguage/Manual:Maxlag_parameter|Handbuch: Maxlag parameter]] für weitere Informationen.",
        "apihelp-main-param-smaxage": "Den <code>s-maxage</code>-HTTP-Cache-Control-Header auf diese Anzahl Sekunden festlegen. Fehler werden niemals gepuffert.",
        "apihelp-main-param-maxage": "Den <code>max-age</code>-HTTP-Cache-Control-Header auf diese Anzahl Sekunden festlegen. Fehler werden niemals gecacht.",
        "apihelp-main-param-assert": "Sicherstellen, dass der Benutzer eingeloggt ist, wenn auf <kbd>user</kbd> gesetzt, oder Bot ist, wenn auf <kbd>bot</kbd> gesetzt.",
@@ -47,7 +47,7 @@
        "apihelp-block-param-autoblock": "Die zuletzt verwendete IP-Adresse automatisch sperren und alle darauffolgenden IP-Adressen, die versuchen sich anzumelden.",
        "apihelp-block-param-noemail": "Benutzer davon abhalten, E-Mails auf dem Wiki zu versenden (erfordert das <code>blockemail</code>-Recht).",
        "apihelp-block-param-hidename": "Den Benutzernamen im Sperr-Logbuch verstecken (erfordert das <code>hideuser</code>-Recht).",
-       "apihelp-block-param-allowusertalk": "Dem Benutzer erlauben, seine eigene Diskussionsseite zu bearbeiten (abhängig von <var>[[mw:Manual:$wgBlockAllowsUTEdit|$wgBlockAllowsUTEdit]]</var>).",
+       "apihelp-block-param-allowusertalk": "Dem Benutzer erlauben, seine eigene Diskussionsseite zu bearbeiten (abhängig von <var>[[mw:Special:MyLanguage/Manual:$wgBlockAllowsUTEdit|$wgBlockAllowsUTEdit]]</var>).",
        "apihelp-block-param-reblock": "Falls der Benutzer bereits gesperrt ist, die vorhandene Sperre überschreiben.",
        "apihelp-block-param-watchuser": "Benutzer- und Diskussionsseiten des Benutzers oder der IP-Adresse beobachten.",
        "apihelp-block-param-tags": "Auf den Eintrag im Sperr-Logbuch anzuwendende Änderungsmarkierungen.",
        "apihelp-opensearch-param-search": "Such-Zeichenfolge.",
        "apihelp-opensearch-param-limit": "Maximale Anzahl zurückzugebender Ergebnisse.",
        "apihelp-opensearch-param-namespace": "Zu durchsuchende Namensräume.",
-       "apihelp-opensearch-param-suggest": "Nichts unternehmen, falls <var>[[mw:Manual:$wgEnableOpenSearchSuggest|$wgEnableOpenSearchSuggest]]</var> falsch ist.",
+       "apihelp-opensearch-param-suggest": "Nichts unternehmen, falls <var>[[mw:Special:MyLanguage/Manual:$wgEnableOpenSearchSuggest|$wgEnableOpenSearchSuggest]]</var> falsch ist.",
        "apihelp-opensearch-param-redirects": "Wie mit Weiterleitungen umgegangen werden soll:\n;return:Gibt die Weiterleitung selbst zurück.\n;resolve:Gibt die Zielseite zurück. Kann weniger als $1limit Ergebnisse zurückgeben.\nAus Kompatibilitätsgründen ist für $1format=json die Vorgabe \"return\" und \"resolve\" für alle anderen Formate.",
        "apihelp-opensearch-param-format": "Das Format der Ausgabe.",
        "apihelp-opensearch-param-warningsaserror": "Wenn Warnungen mit <kbd>format=json</kbd> auftreten, gib einen API-Fehler zurück, anstatt ihn zu ignorieren.",
        "apihelp-query+search-param-limit": "Wie viele Seiten insgesamt zurückgegeben werden sollen.",
        "apihelp-query+search-example-simple": "Nach <kbd>meaning</kbd> suchen.",
        "apihelp-query+search-example-text": "Texte nach <kbd>meaning</kbd> durchsuchen.",
-       "apihelp-query+siteinfo-paramvalue-prop-languagevariants": "Gibt eine Liste für die Sprachcodes zurück, bei denen der [[mw:LanguageConverter|Sprachkonverter]] aktiviert ist und die unterstützten Varianten für jede Sprache.",
+       "apihelp-query+siteinfo-paramvalue-prop-languagevariants": "Gibt eine Liste für die Sprachcodes zurück, bei denen der [[mw:Special:MyLanguage/LanguageConverter|Sprachkonverter]] aktiviert ist und die unterstützten Varianten für jede Sprache.",
        "apihelp-query+siteinfo-example-simple": "Websiteinformationen abrufen",
        "apihelp-query+stashimageinfo-param-sessionkey": "Alias für $1filekey, für die Rückwärtskompatibilität.",
        "apihelp-query+stashimageinfo-example-simple": "Gibt Informationen für eine gespeicherte Datei zurück.",
        "apihelp-rsd-example-simple": "Das RSD-Schema exportieren",
        "apihelp-setnotificationtimestamp-param-entirewatchlist": "An allen beobachteten Seiten arbeiten.",
        "apihelp-setpagelanguage-description": "Ändert die Sprache einer Seite.",
-       "apihelp-setpagelanguage-description-disabled": "Das Ändern der Sprache von Seiten ist auf diesem Wiki nicht erlaubt.\n\nAktiviere <var>[[mw:Manual:$wgPageLanguageUseDB|$wgPageLanguageUseDB]]</var>, um diese Aktion zu verwenden.",
+       "apihelp-setpagelanguage-description-disabled": "Das Ändern der Sprache von Seiten ist auf diesem Wiki nicht erlaubt.\n\nAktiviere <var>[[mw:Special:MyLanguage/Manual:$wgPageLanguageUseDB|$wgPageLanguageUseDB]]</var>, um diese Aktion zu verwenden.",
        "apihelp-setpagelanguage-param-title": "Titel der Seite, deren Sprache du ändern möchtest. Kann nicht zusammen mit <var>$1pageid</var> verwendet werden.",
        "apihelp-setpagelanguage-param-pageid": "Kennung der Seite, deren Sprache du ändern möchtest. Kann nicht zusammen mit <var>$1title</var> verwendet werden.",
        "apihelp-setpagelanguage-param-lang": "Code der Sprache, auf den die Seite geändert werden soll. Verwende <kbd>default</kbd>, um die Seite auf die Standardinhaltssprache des Wikis zurückzusetzen.",
        "apihelp-xml-param-includexmlnamespace": "Falls angegeben, ergänzt einen XML-Namensraum.",
        "apihelp-xmlfm-description": "Daten im XML-Format ausgeben (schöngedruckt in HTML).",
        "api-format-title": "MediaWiki-API-Ergebnis",
-       "api-format-prettyprint-header": "Dies ist die Darstellung des $1-Formats in HTML. HTML ist gut zur Fehlerbehebung geeignet, aber unpassend für die Nutzung durch Anwendungen.\n\nGib den Parameter <var>format</var> an, um das Ausgabeformat zu ändern. Lege <kbd>format=$2</kbd> fest, um die von HTML abweichende Darstellung des $1-Formats zu erhalten.\n\nSiehe auch die [[mw:API|vollständige Dokumentation der API]] oder die [[Special:ApiHelp/main|API-Hilfe]] für weitere Informationen.",
+       "api-format-prettyprint-header": "Dies ist die Darstellung des $1-Formats in HTML. HTML ist gut zur Fehlerbehebung geeignet, aber unpassend für die Nutzung durch Anwendungen.\n\nGib den Parameter <var>format</var> an, um das Ausgabeformat zu ändern. Lege <kbd>format=$2</kbd> fest, um die von HTML abweichende Darstellung des $1-Formats zu erhalten.\n\nSiehe auch die [[mw:Special:MyLanguage/API|vollständige Dokumentation der API]] oder die [[Special:ApiHelp/main|API-Hilfe]] für weitere Informationen.",
        "api-format-prettyprint-status": "Diese Antwort wird mit dem HTTP-Status $1 $2 zurückgegeben.",
        "api-pageset-param-titles": "Eine Liste der Titel, an denen gearbeitet werden soll.",
        "api-pageset-param-pageids": "Eine Liste der Seitenkennungen, an denen gearbeitet werden soll.",
        "api-help-param-default-empty": "Standard: <span class=\"apihelp-empty\">(leer)</span>",
        "api-help-param-token": "Ein „$1“-Token abgerufen von [[Special:ApiHelp/query+tokens|action=query&meta=tokens]]",
        "api-help-param-token-webui": "Aus Kompatibilitätsgründen wird der in der Weboberfläche verwendete Token ebenfalls akzeptiert.",
-       "api-help-param-disabled-in-miser-mode": "Deaktiviert aufgrund des [[mw:Manual:$wgMiserMode|Miser-Modus]].",
+       "api-help-param-disabled-in-miser-mode": "Deaktiviert aufgrund des [[mw:Special:MyLanguage/Manual:$wgMiserMode|Miser-Modus]].",
        "api-help-param-continue": "Falls weitere Ergebnisse verfügbar sind, dies zum Fortfahren verwenden.",
        "api-help-param-no-description": "<span class=\"apihelp-empty\">(keine Beschreibung)</span>",
        "api-help-examples": "{{PLURAL:$1|Beispiel|Beispiele}}:",
index cd30960..7a04caf 100644 (file)
@@ -6,10 +6,10 @@
                ]
        },
 
-       "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:API:Main_page|Documentation]]\n* [[mw:API:FAQ|FAQ]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Mailing list]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce API Announcements]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Bugs & requests]\n</div>\n<strong>Status:</strong> All features shown on this page should be working, but the API is still in active development, and may change at any time. Subscribe to [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ the mediawiki-api-announce mailing list] for notice of updates.\n\n<strong>Erroneous requests:</strong> When erroneous requests are sent to the API, an HTTP header will be sent with the key \"MediaWiki-API-Error\" and then both the value of the header and the error code sent back will be set to the same value. For more information see [[mw:API:Errors_and_warnings|API: Errors and warnings]].\n\n<strong>Testing:</strong> For ease of testing API requests, see [[Special:ApiSandbox]].",
+       "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:Special:MyLanguage/API:Main_page|Documentation]]\n* [[mw:Special:MyLanguage/API:FAQ|FAQ]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Mailing list]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce API Announcements]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Bugs & requests]\n</div>\n<strong>Status:</strong> All features shown on this page should be working, but the API is still in active development, and may change at any time. Subscribe to [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ the mediawiki-api-announce mailing list] for notice of updates.\n\n<strong>Erroneous requests:</strong> When erroneous requests are sent to the API, an HTTP header will be sent with the key \"MediaWiki-API-Error\" and then both the value of the header and the error code sent back will be set to the same value. For more information see [[mw:Special:MyLanguage/API:Errors_and_warnings|API: Errors and warnings]].\n\n<strong>Testing:</strong> For ease of testing API requests, see [[Special:ApiSandbox]].",
        "apihelp-main-param-action": "Which action to perform.",
        "apihelp-main-param-format": "The format of the output.",
-       "apihelp-main-param-maxlag": "Maximum lag can be used when MediaWiki is installed on a database replicated cluster. To save actions causing any more site replication lag, this parameter can make the client wait until the replication lag is less than the specified value. In case of excessive lag, error code <samp>maxlag</samp> is returned with a message like <samp>Waiting for $host: $lag seconds lagged</samp>.<br />See [[mw:Manual:Maxlag_parameter|Manual: Maxlag parameter]] for more information.",
+       "apihelp-main-param-maxlag": "Maximum lag can be used when MediaWiki is installed on a database replicated cluster. To save actions causing any more site replication lag, this parameter can make the client wait until the replication lag is less than the specified value. In case of excessive lag, error code <samp>maxlag</samp> is returned with a message like <samp>Waiting for $host: $lag seconds lagged</samp>.<br />See [[mw:Special:MyLanguage/Manual:Maxlag_parameter|Manual: Maxlag parameter]] for more information.",
        "apihelp-main-param-smaxage": "Set the <code>s-maxage</code> HTTP cache control header to this many seconds. Errors are never cached.",
        "apihelp-main-param-maxage": "Set the <code>max-age</code> HTTP cache control header to this many seconds. Errors are never cached.",
        "apihelp-main-param-assert": "Verify the user is logged in if set to <kbd>user</kbd>, or has the bot user right if <kbd>bot</kbd>.",
@@ -34,7 +34,7 @@
        "apihelp-block-param-autoblock": "Automatically block the last used IP address, and any subsequent IP addresses they try to login from.",
        "apihelp-block-param-noemail": "Prevent user from sending email through the wiki. (Requires the <code>blockemail</code> right).",
        "apihelp-block-param-hidename": "Hide the username from the block log. (Requires the <code>hideuser</code> right).",
-       "apihelp-block-param-allowusertalk": "Allow the user to edit their own talk page (depends on <var>[[mw:Manual:$wgBlockAllowsUTEdit|$wgBlockAllowsUTEdit]]</var>).",
+       "apihelp-block-param-allowusertalk": "Allow the user to edit their own talk page (depends on <var>[[mw:Special:MyLanguage/Manual:$wgBlockAllowsUTEdit|$wgBlockAllowsUTEdit]]</var>).",
        "apihelp-block-param-reblock": "If the user is already blocked, overwrite the existing block.",
        "apihelp-block-param-watchuser": "Watch the user's or IP address's user and talk pages.",
        "apihelp-block-param-tags": "Change tags to apply to the entry in the block log.",
        "apihelp-opensearch-param-search": "Search string.",
        "apihelp-opensearch-param-limit": "Maximum number of results to return.",
        "apihelp-opensearch-param-namespace": "Namespaces to search.",
-       "apihelp-opensearch-param-suggest": "Do nothing if <var>[[mw:Manual:$wgEnableOpenSearchSuggest|$wgEnableOpenSearchSuggest]]</var> is false.",
+       "apihelp-opensearch-param-suggest": "Do nothing if <var>[[mw:Special:MyLanguage/Manual:$wgEnableOpenSearchSuggest|$wgEnableOpenSearchSuggest]]</var> is false.",
        "apihelp-opensearch-param-redirects": "How to handle redirects:\n;return:Return the redirect itself.\n;resolve:Return the target page. May return fewer than $1limit results.\nFor historical reasons, the default is \"return\" for $1format=json and \"resolve\" for other formats.",
        "apihelp-opensearch-param-format": "The format of the output.",
        "apihelp-opensearch-param-warningsaserror": "If warnings are raised with <kbd>format=json</kbd>, return an API error instead of ignoring them.",
        "apihelp-query+alldeletedrevisions-param-user": "Only list revisions by this user.",
        "apihelp-query+alldeletedrevisions-param-excludeuser": "Don't list revisions by this user.",
        "apihelp-query+alldeletedrevisions-param-namespace": "Only list pages in this namespace.",
-       "apihelp-query+alldeletedrevisions-param-miser-user-namespace": "<strong>Note:</strong> Due to [[mw:Manual:$wgMiserMode|miser mode]], using <var>$1user</var> and <var>$1namespace</var> together may result in fewer than <var>$1limit</var> results returned before continuing; in extreme cases, zero results may be returned.",
+       "apihelp-query+alldeletedrevisions-param-miser-user-namespace": "<strong>Note:</strong> Due to [[mw:Special:MyLanguage/Manual:$wgMiserMode|miser mode]], using <var>$1user</var> and <var>$1namespace</var> together may result in fewer than <var>$1limit</var> results returned before continuing; in extreme cases, zero results may be returned.",
        "apihelp-query+alldeletedrevisions-param-generatetitles": "When being used as a generator, generate titles rather than revision IDs.",
        "apihelp-query+alldeletedrevisions-example-user": "List the last 50 deleted contributions by user <kbd>Example</kbd>.",
        "apihelp-query+alldeletedrevisions-example-ns-main": "List the first 50 deleted revisions in the main namespace.",
        "apihelp-query+filearchive-example-simple": "Show a list of all deleted files.",
 
        "apihelp-query+filerepoinfo-description": "Return meta information about image repositories configured on the wiki.",
-       "apihelp-query+filerepoinfo-param-prop": "Which repository properties to get (there may be more available on some wikis):\n;apiurl:URL to the repository API - helpful for getting image info from the host.\n;name:The key of the repository - used in e.g. <var>[[mw:Manual:$wgForeignFileRepos|$wgForeignFileRepos]]</var> and [[Special:ApiHelp/query+imageinfo|imageinfo]] return values.\n;displayname:The human-readable name of the repository wiki.\n;rooturl:Root URL for image paths.\n;local:Whether that repository is the local one or not.",
+       "apihelp-query+filerepoinfo-param-prop": "Which repository properties to get (there may be more available on some wikis):\n;apiurl:URL to the repository API - helpful for getting image info from the host.\n;name:The key of the repository - used in e.g. <var>[[mw:Special:MyLanguage/Manual:$wgForeignFileRepos|$wgForeignFileRepos]]</var> and [[Special:ApiHelp/query+imageinfo|imageinfo]] return values.\n;displayname:The human-readable name of the repository wiki.\n;rooturl:Root URL for image paths.\n;local:Whether that repository is the local one or not.",
        "apihelp-query+filerepoinfo-example-simple": "Get information about file repositories.",
 
        "apihelp-query+fileusage-description": "Find all pages that use the given files.",
        "apihelp-query+siteinfo-paramvalue-prop-rightsinfo": "Returns wiki rights (license) information if available.",
        "apihelp-query+siteinfo-paramvalue-prop-restrictions": "Returns information on available restriction (protection) types.",
        "apihelp-query+siteinfo-paramvalue-prop-languages": "Returns a list of languages MediaWiki supports (optionally localised by using <var>$1inlanguagecode</var>).",
-       "apihelp-query+siteinfo-paramvalue-prop-languagevariants": "Returns a list of language codes for which [[mw:LanguageConverter|LanguageConverter]] is enabled, and the variants supported for each.",
+       "apihelp-query+siteinfo-paramvalue-prop-languagevariants": "Returns a list of language codes for which [[mw:Special:MyLanguage/LanguageConverter|LanguageConverter]] is enabled, and the variants supported for each.",
        "apihelp-query+siteinfo-paramvalue-prop-skins": "Returns a list of all enabled skins (optionally localised by using <var>$1inlanguagecode</var>, otherwise in the content language).",
        "apihelp-query+siteinfo-paramvalue-prop-extensiontags": "Returns a list of parser extension tags.",
        "apihelp-query+siteinfo-paramvalue-prop-functionhooks": "Returns a list of parser function hooks.",
-       "apihelp-query+siteinfo-paramvalue-prop-showhooks": "Returns a list of all subscribed hooks (contents of <var>[[mw:Manual:$wgHooks|$wgHooks]]</var>).",
+       "apihelp-query+siteinfo-paramvalue-prop-showhooks": "Returns a list of all subscribed hooks (contents of <var>[[mw:Special:MyLanguage/Manual:$wgHooks|$wgHooks]]</var>).",
        "apihelp-query+siteinfo-paramvalue-prop-variables": "Returns a list of variable IDs.",
        "apihelp-query+siteinfo-paramvalue-prop-protocols": "Returns a list of protocols that are allowed in external links.",
        "apihelp-query+siteinfo-paramvalue-prop-defaultoptions": "Returns the default values for user preferences.",
        "apihelp-query+usercontribs-paramvalue-prop-flags": "Adds flags of the edit.",
        "apihelp-query+usercontribs-paramvalue-prop-patrolled": "Tags patrolled edits.",
        "apihelp-query+usercontribs-paramvalue-prop-tags": "Lists tags for the edit.",
-       "apihelp-query+usercontribs-param-show": "Show only items that meet these criteria, e.g. non minor edits only: <kbd>$2show=!minor</kbd>.\n\nIf <kbd>$2show=patrolled</kbd> or <kbd>$2show=!patrolled</kbd> is set, revisions older than <var>[[mw:Manual:$wgRCMaxAge|$wgRCMaxAge]]</var> ($1 {{PLURAL:$1|second|seconds}}) won't be shown.",
+       "apihelp-query+usercontribs-param-show": "Show only items that meet these criteria, e.g. non minor edits only: <kbd>$2show=!minor</kbd>.\n\nIf <kbd>$2show=patrolled</kbd> or <kbd>$2show=!patrolled</kbd> is set, revisions older than <var>[[mw:Special:MyLanguage/Manual:$wgRCMaxAge|$wgRCMaxAge]]</var> ($1 {{PLURAL:$1|second|seconds}}) won't be shown.",
        "apihelp-query+usercontribs-param-tag": "Only list revisions tagged with this tag.",
        "apihelp-query+usercontribs-param-toponly": "Only list changes which are the latest revision.",
        "apihelp-query+usercontribs-example-user": "Show contributions of user <kbd>Example</kbd>.",
        "apihelp-removeauthenticationdata-example-simple": "Attempt to remove the current user's data for <kbd>FooAuthenticationRequest</kbd>.",
 
        "apihelp-resetpassword-description": "Send a password reset email to a user.",
-       "apihelp-resetpassword-description-noroutes": "No password reset routes are available.\n\nEnable routes in <var>[[mw:Manual:$wgPasswordResetRoutes|$wgPasswordResetRoutes]]</var> to use this module.",
+       "apihelp-resetpassword-description-noroutes": "No password reset routes are available.\n\nEnable routes in <var>[[mw:Special:MyLanguage/Manual:$wgPasswordResetRoutes|$wgPasswordResetRoutes]]</var> to use this module.",
        "apihelp-resetpassword-param-user": "User being reset.",
        "apihelp-resetpassword-param-email": "Email address of the user being reset.",
        "apihelp-resetpassword-example-user": "Send a password reset email to user <kbd>Example</kbd>.",
        "apihelp-setnotificationtimestamp-example-allpages": "Reset the notification status for pages in the <kbd>{{ns:user}}</kbd> namespace.",
 
        "apihelp-setpagelanguage-description": "Change the language of a page.",
-       "apihelp-setpagelanguage-description-disabled": "Changing the language of a page is not allowed on this wiki.\n\nEnable <var>[[mw:Manual:$wgPageLanguageUseDB|$wgPageLanguageUseDB]]</var> to use this action.",
+       "apihelp-setpagelanguage-description-disabled": "Changing the language of a page is not allowed on this wiki.\n\nEnable <var>[[mw:Special:MyLanguage/Manual:$wgPageLanguageUseDB|$wgPageLanguageUseDB]]</var> to use this action.",
        "apihelp-setpagelanguage-param-title": "Title of the page whose language you wish to change. Cannot be used together with <var>$1pageid</var>.",
        "apihelp-setpagelanguage-param-pageid": "Page ID of the page whose language you wish to change. Cannot be used together with <var>$1title</var>.",
        "apihelp-setpagelanguage-param-lang": "Language code of the language to change the page to. Use <kbd>default</kbd> to reset the page to the wiki's default content language.",
        "apihelp-xmlfm-description": "Output data in XML format (pretty-print in HTML).",
 
        "api-format-title": "MediaWiki API result",
-       "api-format-prettyprint-header": "This is the HTML representation of the $1 format. HTML is good for debugging, but is unsuitable for application use.\n\nSpecify the <var>format</var> parameter to change the output format. To see the non-HTML representation of the $1 format, set <kbd>format=$2</kbd>.\n\nSee the [[mw:API|complete documentation]], or the [[Special:ApiHelp/main|API help]] for more information.",
-       "api-format-prettyprint-header-only-html": "This is an HTML representation intended for debugging, and is unsuitable for application use.\n\nSee the [[mw:API|complete documentation]], or the [[Special:ApiHelp/main|API help]] for more information.",
+       "api-format-prettyprint-header": "This is the HTML representation of the $1 format. HTML is good for debugging, but is unsuitable for application use.\n\nSpecify the <var>format</var> parameter to change the output format. To see the non-HTML representation of the $1 format, set <kbd>format=$2</kbd>.\n\nSee the [[mw:Special:MyLanguage/API|complete documentation]], or the [[Special:ApiHelp/main|API help]] for more information.",
+       "api-format-prettyprint-header-only-html": "This is an HTML representation intended for debugging, and is unsuitable for application use.\n\nSee the [[mw:Special:MyLanguage/API|complete documentation]], or the [[Special:ApiHelp/main|API help]] for more information.",
        "api-format-prettyprint-status": "This response would be returned with HTTP status $1 $2.",
 
        "api-pageset-param-titles": "A list of titles to work on.",
        "api-help-param-default-empty": "Default: <span class=\"apihelp-empty\">(empty)</span>",
        "api-help-param-token": "A \"$1\" token retrieved from [[Special:ApiHelp/query+tokens|action=query&meta=tokens]]",
        "api-help-param-token-webui": "For compatibility, the token used in the web UI is also accepted.",
-       "api-help-param-disabled-in-miser-mode": "Disabled due to [[mw:Manual:$wgMiserMode|miser mode]].",
-       "api-help-param-limited-in-miser-mode": "<strong>Note:</strong> Due to [[mw:Manual:$wgMiserMode|miser mode]], using this may result in fewer than <var>$1limit</var> results returned before continuing; in extreme cases, zero results may be returned.",
+       "api-help-param-disabled-in-miser-mode": "Disabled due to [[mw:Special:MyLanguage/Manual:$wgMiserMode|miser mode]].",
+       "api-help-param-limited-in-miser-mode": "<strong>Note:</strong> Due to [[mw:Special:MyLanguage/Manual:$wgMiserMode|miser mode]], using this may result in fewer than <var>$1limit</var> results returned before continuing; in extreme cases, zero results may be returned.",
        "api-help-param-direction": "In which direction to enumerate:\n;newer:List oldest first. Note: $1start has to be before $1end.\n;older:List newest first (default). Note: $1start has to be later than $1end.",
        "api-help-param-continue": "When more results are available, use this to continue.",
        "api-help-param-no-description": "<span class=\"apihelp-empty\">(no description)</span>",
index 2ae81d4..daaf0c0 100644 (file)
        "apihelp-help-param-helpformat": "قالب‌بندی خروجی راهنما.",
        "apihelp-help-example-main": "راهنما برای پودمان اصلی",
        "apihelp-help-example-recursive": "همهٔ راهنما در یک صفحه",
-       "apihelp-help-example-help": "راهنما برای خود ماژول راهنما",
-       "apihelp-help-example-query": "راهنما برای دو زیر پودمان کوئری",
+       "apihelp-help-example-help": "راهنمایی برای خود راهنما.",
+       "apihelp-help-example-query": "راهنما برای دو زیرپودمانِ پرسمان",
        "apihelp-imagerotate-description": "چرخاندن یک یا چند تصویر",
        "apihelp-imagerotate-param-rotation": "درجه برای چرخاندن تصویر در جهت ساعت‌گرد.",
        "apihelp-imagerotate-example-simple": "چرخاندن <kbd>۹۰</kbd> درجه برای <kbd>File:Example.png</kbd>",
index 5b974e3..4c028b2 100644 (file)
                        "The RedBurn"
                ]
        },
-       "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:API:Main_page|Documentation]]\n* [[mw:API:FAQ|FAQ]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Liste de diffusion]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce Annonces de l’API]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Bogues et demandes]\n</div>\n<strong>État :</strong> Toutes les fonctionnalités affichées sur cette page devraient fonctionner, mais l’API est encore en cours de développement et peut changer à tout moment. Inscrivez-vous à [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ la liste de diffusion mediawiki-api-announce] pour être informé des mises à jour.\n\n<strong>Requêtes erronées :</strong> Si des requêtes erronées sont envoyées à l’API, un en-tête HTTP sera renvoyé avec la clé « MediaWiki-API-Error ». La valeur de cet en-tête et le code d’erreur renvoyé prendront la même valeur. Pour plus d’information, voyez [[mw:API:Errors_and_warnings|API: Errors and warnings]].\n\n<strong>Test :</strong> Pour faciliter le test des requêtes de l’API, voyez [[Special:ApiSandbox]].",
+       "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:Special:MyLanguage/API:Main_page|Documentation]]\n* [[mw:Special:MyLanguage/API:FAQ|FAQ]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Liste de diffusion]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce Annonces de l’API]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Bogues et demandes]\n</div>\n<strong>État :</strong> Toutes les fonctionnalités affichées sur cette page devraient fonctionner, mais l’API est encore en cours de développement et peut changer à tout moment. Inscrivez-vous à [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ la liste de diffusion mediawiki-api-announce] pour être informé des mises à jour.\n\n<strong>Requêtes erronées :</strong> Si des requêtes erronées sont envoyées à l’API, un entête HTTP sera renvoyé avec la clé « MediaWiki-API-Error ». La valeur de cet entête et le code d’erreur renvoyé prendront la même valeur. Pour plus d’information, voyez [[mw:Special:MyLanguage/API:Errors_and_warnings|API: Errors and warnings]].\n\n<strong>Test :</strong> Pour faciliter le test des requêtes de l’API, voyez [[Special:ApiSandbox]].",
        "apihelp-main-param-action": "Quelle action effectuer.",
        "apihelp-main-param-format": "Le format de sortie.",
-       "apihelp-main-param-maxlag": "La latence maximale peut être utilisée quand MédiaWiki est installé sur un cluster de base de données répliqué. Pour éviter des actions provoquant un supplément de latence de réplication de site, ce paramètre peut faire attendre le client jusqu’à ce que la latence de réplication soit inférieure à une valeur spécifiée. En cas de latence excessive, le code d’erreur <samp>maxlag</samp> est renvoyé avec un message tel que <samp>Attente de $host : $lag secondes de délai</samp>.<br />Voyez [[mw:Manual:Maxlag_parameter|Manuel: Maxlag parameter]] pour plus d’information.",
+       "apihelp-main-param-maxlag": "La latence maximale peut être utilisée quand MédiaWiki est installé sur un cluster de base de données répliqué. Pour éviter des actions provoquant un supplément de latence de réplication de site, ce paramètre peut faire attendre le client jusqu’à ce que la latence de réplication soit inférieure à une valeur spécifiée. En cas de latence excessive, le code d’erreur <samp>maxlag</samp> est renvoyé avec un message tel que <samp>Attente de $host : $lag secondes de délai</samp>.<br />Voyez [[mw:Special:MyLanguage/Manual:Maxlag_parameter|Manuel: Maxlag parameter]] pour plus d’information.",
        "apihelp-main-param-smaxage": "Fixer l’entête HTTP de contrôle de cache <code>s-maxage</code> à ce nombre de secondes. Les erreurs ne sont jamais mises en cache.",
        "apihelp-main-param-maxage": "Fixer l’entête HTTP de contrôle de cache <code>max-age</code> à ce nombre de secondes. Les erreurs ne sont jamais mises en cache.",
        "apihelp-main-param-assert": "Vérifier si l’utilisateur est connecté si positionné à <kbd>user</kbd>, ou s'il a le droit d'un utilisateur robot si positionné à <kbd>bot</kbd>.",
@@ -57,7 +57,7 @@
        "apihelp-block-param-autoblock": "Bloquer automatiquement la dernière adresse IP utilisée, et toute les adresses IP subséquentes depuis lesquelles ils ont essayé de se connecter.",
        "apihelp-block-param-noemail": "Empêcher l’utilisateur d’envoyer des courriels via le wiki (nécessite le droit <code>blockemail</code>).",
        "apihelp-block-param-hidename": "Masque le nom de l’utilisateur dans le journal des blocages (nécessite le droit <code>hideuser</code>).",
-       "apihelp-block-param-allowusertalk": "Autoriser les utilisateurs à modifier leur propre page de discussion (dépend de <var>[[mw:Manual:$wgBlockAllowsUTEdit|$wgBlockAllowsUTEdit]]</var>).",
+       "apihelp-block-param-allowusertalk": "Autoriser les utilisateurs à modifier leur propre page de discussion (dépend de <var>[[mw:Special:MyLanguage/Manual:$wgBlockAllowsUTEdit|$wgBlockAllowsUTEdit]]</var>).",
        "apihelp-block-param-reblock": "Si l’utilisateur est déjà bloqué, écraser le blocage existant.",
        "apihelp-block-param-watchuser": "Surveiller les pages utilisateur et de discussion de l’utilisateur ou de l’adresse IP.",
        "apihelp-block-param-tags": "Modifier les balises à appliquer à l’entrée du journal des blocages.",
        "apihelp-opensearch-param-search": "Chaîne de caractères cherchée.",
        "apihelp-opensearch-param-limit": "Nombre maximal de résultats à renvoyer.",
        "apihelp-opensearch-param-namespace": "Espaces de nom à rechercher.",
-       "apihelp-opensearch-param-suggest": "Ne rien faire si <var>[[mw:Manual:$wgEnableOpenSearchSuggest|$wgEnableOpenSearchSuggest]]</var> vaut faux.",
+       "apihelp-opensearch-param-suggest": "Ne rien faire si <var>[[mw:Special:MyLanguage/Manual:$wgEnableOpenSearchSuggest|$wgEnableOpenSearchSuggest]]</var> vaut faux.",
        "apihelp-opensearch-param-redirects": "Comment gérer les redirections :\n;return:Renvoie la redirection elle-même.\n;resolve:Renvoie la page cible. Peut renvoyer moins de $1limit résultats.\nPour des raisons historiques, la valeur par défaut est « return » pour $1format=json et « resolve » pour les autres formats.",
        "apihelp-opensearch-param-format": "Le format de sortie.",
        "apihelp-opensearch-param-warningsaserror": "Si des avertissements apparaissent avec <kbd>format=json</kbd>, renvoyer une erreur d’API au lieu de les ignorer.",
        "apihelp-query+alldeletedrevisions-param-user": "Lister uniquement les révisions par cet utilisateur.",
        "apihelp-query+alldeletedrevisions-param-excludeuser": "Ne pas lister les révisions par cet utilisateur.",
        "apihelp-query+alldeletedrevisions-param-namespace": "Lister uniquement les pages dans cet espace de noms.",
-       "apihelp-query+alldeletedrevisions-param-miser-user-namespace": "<strong>REMARQUE :</strong> du fait du [[mw:Manual:$wgMiserMode|mode minimal]], utiliser <var>$1user</var> et <var>$1namespace</var> ensemble peut aboutir à moins de résultats renvoyés que <var>$1limit</var> avant de continuer ; dans les cas extrêmes, zéro résultats peuvent être renvoyés.",
+       "apihelp-query+alldeletedrevisions-param-miser-user-namespace": "<strong>REMARQUE :</strong> du fait du [[mw:Special:MyLanguage/Manual:$wgMiserMode|mode minimal]], utiliser <var>$1user</var> et <var>$1namespace</var> ensemble peut aboutir à avoir moins de résultats renvoyés que <var>$1limit</var> avant de continuer ; dans les cas extrêmes, zéro résultats peuvent être renvoyés.",
        "apihelp-query+alldeletedrevisions-param-generatetitles": "Utilisé comme générateur, générer des titres plutôt que des IDs de révision.",
        "apihelp-query+alldeletedrevisions-example-user": "Lister les 50 dernières contributions supprimées par l'utilisateur <kbd>Example</kbd>.",
        "apihelp-query+alldeletedrevisions-example-ns-main": "Lister les 50 premières révisions supprimées dans l’espace de noms principal.",
        "apihelp-query+filearchive-paramvalue-prop-archivename": "Ajoute le nom de fichier de la version d’archive pour les versions autres que la dernière.",
        "apihelp-query+filearchive-example-simple": "Afficher une liste de tous les fichiers supprimés",
        "apihelp-query+filerepoinfo-description": "Renvoyer les méta-informations sur les référentiels d’images configurés dans le wiki.",
-       "apihelp-query+filerepoinfo-param-prop": "Quelles propriétés du référentiel récupérer (il peut y en avoir plus de disponibles sur certains wikis) :\n;apiurl:URL de l’API du référentiel - utile pour obtenir les infos de l’image depuis l’hôte.\n;name:La clé du référentiel - utilisé par ex. dans les valeurs de retour de <var>[[mw:Manual:$wgForeignFileRepos|$wgForeignFileRepos]]</var> et [[Special:ApiHelp/query+imageinfo|imageinfo]].\n;displayname:Le nom lisible du wiki référentiel.\n;rooturl:URL racine des chemins d’image.\n;local:Si ce référentiel est le référentiel local ou non.",
+       "apihelp-query+filerepoinfo-param-prop": "Quelles propriétés du référentiel récupérer (il peut y en avoir plus de disponibles sur certains wikis) :\n;apiurl:URL de l’API du référentiel - utile pour obtenir les infos de l’image depuis l’hôte.\n;name:La clé du référentiel - utilisé par ex. dans les valeurs de retour de <var>[[mw:Special:MyLanguage/Manual:$wgForeignFileRepos|$wgForeignFileRepos]]</var> et [[Special:ApiHelp/query+imageinfo|imageinfo]].\n;displayname:Le nom lisible du wiki référentiel.\n;rooturl:URL racine des chemins d’image.\n;local:Si ce référentiel est le référentiel local ou non.",
        "apihelp-query+filerepoinfo-example-simple": "Obtenir des informations sur les référentiels de fichier.",
        "apihelp-query+fileusage-description": "Trouver toutes les pages qui utilisent les fichiers donnés.",
        "apihelp-query+fileusage-param-prop": "Quelles propriétés obtenir :",
        "apihelp-query+siteinfo-paramvalue-prop-magicwords": "Liste des mots magiques et leurs alias.",
        "apihelp-query+siteinfo-paramvalue-prop-statistics": "Renvoie les statistiques du site.",
        "apihelp-query+siteinfo-paramvalue-prop-interwikimap": "Renvoie la correspondance interwiki (éventuellement filtrée, éventuellement localisée en utilisant <var>$1inlanguagecode</var>).",
-       "apihelp-query+siteinfo-paramvalue-prop-dbrepllag": "Renvoie le serveur de base de donnée avec la plus grande latence de réplication.",
+       "apihelp-query+siteinfo-paramvalue-prop-dbrepllag": "Renvoie le serveur de base de données ayant la plus grande latence de réplication.",
        "apihelp-query+siteinfo-paramvalue-prop-usergroups": "Renvoie les groupes utilisateur et les droits associés.",
        "apihelp-query+siteinfo-paramvalue-prop-libraries": "Renvoie les bibliothèques installées sur le wiki.",
        "apihelp-query+siteinfo-paramvalue-prop-extensions": "Renvoie les extensions installées sur le wiki.",
        "apihelp-query+siteinfo-paramvalue-prop-rightsinfo": "Renvoie l’information sur les droits du wiki (sa licence), si elle est disponible.",
        "apihelp-query+siteinfo-paramvalue-prop-restrictions": "Renvoie l’information sur les types de restriction disponibles (protection).",
        "apihelp-query+siteinfo-paramvalue-prop-languages": "Renvoie une liste des langues que MédiaWiki prend en charge (éventuellement localisée en utilisant <var>$1inlanguagecode</var>).",
-       "apihelp-query+siteinfo-paramvalue-prop-languagevariants": "Renvoie une liste de codes de langue pour lesquels [[mw:LanguageConverter|LanguageConverter]] est activé, et les variantes supportées pour chacun.",
+       "apihelp-query+siteinfo-paramvalue-prop-languagevariants": "Renvoie une liste de codes de langue pour lesquels [[mw:Special:MyLanguage/LanguageConverter|LanguageConverter]] est activé, et les variantes supportées pour chacun.",
        "apihelp-query+siteinfo-paramvalue-prop-skins": "Renvoie une liste de tous les habillages activés (éventuellement localisé en utilisant <var>$1inlanguagecode</var>, sinon dans la langue du contenu).",
        "apihelp-query+siteinfo-paramvalue-prop-extensiontags": "Renvoie une liste des balises d’extension de l’analyseur.",
        "apihelp-query+siteinfo-paramvalue-prop-functionhooks": "Renvoie une liste des accroches de fonction de l’analyseur.",
-       "apihelp-query+siteinfo-paramvalue-prop-showhooks": "Renvoie une liste de toutes les accroches souscrites (contenu de <var>[[mw:Manual:$wgHooks|$wgHooks]]</var>).",
-       "apihelp-query+siteinfo-paramvalue-prop-variables": "Renvoie une liste des IDs de variable.",
-       "apihelp-query+siteinfo-paramvalue-prop-protocols": "Renvoie une liste des protocoles qui sont autorisés dans les liens externes.",
+       "apihelp-query+siteinfo-paramvalue-prop-showhooks": "Renvoie une liste de toutes les accroches souscrites (contenu de <var>[[mw:Special:MyLanguage/Manual:$wgHooks|$wgHooks]]</var>).",
+       "apihelp-query+siteinfo-paramvalue-prop-variables": "Renvoie une liste d'IDs de variable.",
+       "apihelp-query+siteinfo-paramvalue-prop-protocols": "Renvoie une liste de protocoles autorisés dans les liens externes.",
        "apihelp-query+siteinfo-paramvalue-prop-defaultoptions": "Renvoie les valeurs par défaut pour les préférences utilisateur.",
        "apihelp-query+siteinfo-paramvalue-prop-uploaddialog": "Renvoie la configuration du dialogue de téléversement.",
        "apihelp-query+siteinfo-param-filteriw": "Renvoyer uniquement les entrées locales ou uniquement les non locales de la correspondance interwiki.",
        "apihelp-query+siteinfo-param-showalldb": "Lister tous les serveurs de base de données, pas seulement celui avec la plus grande latence.",
        "apihelp-query+siteinfo-param-numberingroup": "Liste le nombre d’utilisateurs dans les groupes.",
        "apihelp-query+siteinfo-param-inlanguagecode": "Code de langue pour les noms de langue localisés (du mieux possible) et les noms d’habillage.",
-       "apihelp-query+siteinfo-example-simple": "Extraire les informations du site",
-       "apihelp-query+siteinfo-example-interwiki": "Extraire une liste des préfixes interwiki locaux",
-       "apihelp-query+siteinfo-example-replag": "Vérifier la latence de réplication actuelle",
+       "apihelp-query+siteinfo-example-simple": "Extraire les informations du site.",
+       "apihelp-query+siteinfo-example-interwiki": "Extraire une liste des préfixes interwiki locaux.",
+       "apihelp-query+siteinfo-example-replag": "Vérifier la latence de réplication actuelle.",
        "apihelp-query+stashimageinfo-description": "Renvoie les informations de fichier des fichiers mis en réserve.",
        "apihelp-query+stashimageinfo-param-filekey": "Clé qui identifie un téléchargement précédent qui a été temporairement mis en réserve.",
-       "apihelp-query+stashimageinfo-param-sessionkey": "Alias pour $1filekey, pour la compatibilité descendante.",
+       "apihelp-query+stashimageinfo-param-sessionkey": "Alias pour $1filekey, pour la compatibilité ascendante.",
        "apihelp-query+stashimageinfo-example-simple": "Renvoie les informations sur un fichier mis en réserve.",
-       "apihelp-query+stashimageinfo-example-params": "Renvoie les vignettes pour deux fichiers mis en réserve",
+       "apihelp-query+stashimageinfo-example-params": "Renvoie les vignettes pour deux fichiers mis de côté.",
        "apihelp-query+tags-description": "Lister les balises de modification.",
        "apihelp-query+tags-param-limit": "Le nombre maximal de balises à lister.",
        "apihelp-query+tags-param-prop": "Quelles propriétés récupérer :",
        "apihelp-query+tags-paramvalue-prop-description": "Ajoute la description de la balise.",
        "apihelp-query+tags-paramvalue-prop-hitcount": "Ajoute le nombre de révisions et d’entrées du journal qui ont cette balise.",
        "apihelp-query+tags-paramvalue-prop-defined": "Indique si la balise est définie.",
-       "apihelp-query+tags-paramvalue-prop-source": "Obtient les sources de la balise, ce qui comprend <samp>extension</samp> pour les balises définies par une extension et <samp>manual</samp> pour les balises pouvant être appliquées manuellement par les utilisateurs.",
+       "apihelp-query+tags-paramvalue-prop-source": "Retourne les sources de la balise, ce qui comprend <samp>extension</samp> pour les balises définies par une extension et <samp>manual</samp> pour les balises pouvant être appliquées manuellement par les utilisateurs.",
        "apihelp-query+tags-paramvalue-prop-active": "Si la balise est encore appliquée.",
        "apihelp-query+tags-example-simple": "Lister les balises disponibles",
        "apihelp-query+templates-description": "Renvoie toutes les pages incluses dans les pages fournies.",
-       "apihelp-query+templates-param-namespace": "Afficher les modèles uniquement dans ces espaces de nom.",
+       "apihelp-query+templates-param-namespace": "Afficher les modèles uniquement dans ces espaces de noms.",
        "apihelp-query+templates-param-limit": "Combien de modèles renvoyer.",
        "apihelp-query+templates-param-templates": "Lister uniquement ces modèles. Utile pour vérifier si une certaine page utilise un modèle donné.",
        "apihelp-query+templates-param-dir": "La direction dans laquelle lister.",
        "apihelp-query+templates-example-namespaces": "Obtenir les pages des espaces de nom {{ns:user}} et {{ns:template}} qui sont inclues dans la page <kdb>Main Page<kdb>.",
        "apihelp-query+tokens-description": "Récupère les jetons pour les actions de modification de données.",
        "apihelp-query+tokens-param-type": "Types de jeton à demander.",
-       "apihelp-query+tokens-example-simple": "Récupérer un jeton csrf (par défaut)",
-       "apihelp-query+tokens-example-types": "Récupérer un jeton de suivi et un de patrouille",
+       "apihelp-query+tokens-example-simple": "Récupérer un jeton csrf (par défaut).",
+       "apihelp-query+tokens-example-types": "Récupérer un jeton de suivi et un de patrouille.",
        "apihelp-query+transcludedin-description": "Trouver toutes les pages qui incluent les pages données.",
        "apihelp-query+transcludedin-param-prop": "Quelles propriétés obtenir :",
        "apihelp-query+transcludedin-paramvalue-prop-pageid": "ID de page de chaque page.",
        "apihelp-query+usercontribs-paramvalue-prop-flags": "Ajoute les marques de la modification.",
        "apihelp-query+usercontribs-paramvalue-prop-patrolled": "Marque les modifications patrouillées.",
        "apihelp-query+usercontribs-paramvalue-prop-tags": "Liste les balises de la modification.",
-       "apihelp-query+usercontribs-param-show": "Afficher uniquement les éléments correspondant à ces critères, par ex. les modifications non mineures uniquement : <kbd>$2show=!minor</kbd>.\n\nSi <kbd>$2show=patrolled</kbd> ou <kbd>$2show=!patrolled</kbd> est positionné, les révisions plus anciennes que <var>[[mw:Manual:$wgRCMaxAge|$wgRCMaxAge]]</var> ($1 {{PLURAL:$1|seconde|secondes}}) ne seront pas affichées.",
+       "apihelp-query+usercontribs-param-show": "Afficher uniquement les éléments correspondant à ces critères, par ex. les modifications non mineures uniquement : <kbd>$2show=!minor</kbd>.\n\nSi <kbd>$2show=patrolled</kbd> ou <kbd>$2show=!patrolled</kbd> est positionné, les révisions plus anciennes que <var>[[mw:Special:MyLanguage/Manual:$wgRCMaxAge|$wgRCMaxAge]]</var> ($1 {{PLURAL:$1|seconde|secondes}}) ne seront pas affichées.",
        "apihelp-query+usercontribs-param-tag": "Lister uniquement les révisions marquées avec cette balise.",
        "apihelp-query+usercontribs-param-toponly": "Lister uniquement les modifications de la dernière révision.",
        "apihelp-query+usercontribs-example-user": "Afficher les contributions de l'utilisateur <kbd>Exemple</kbd>.",
        "apihelp-query+watchlist-paramvalue-type-categorize": "Modifications d’appartenance aux catégories.",
        "apihelp-query+watchlist-param-owner": "Utilisé avec $1token pour accéder à la liste de suivi d’un autre utilisateur.",
        "apihelp-query+watchlist-param-token": "Un jeton de sécurité (disponible dans les [[Special:Preferences#mw-prefsection-watchlist|préférences]] de l’utilsiateur) pour autoriser l’accès à la liste de suivi d&un autre utilisateur.",
-       "apihelp-query+watchlist-example-simple": "Lister la révision de tête des pages récemment modifiées dans la liste de suivi de l’utilisateur actuel",
-       "apihelp-query+watchlist-example-props": "Chercher des informations supplémentaires sur la révision de tête des pages récemment modifiées de la liste de suivi de l’utilisateur actuel",
+       "apihelp-query+watchlist-example-simple": "Lister la révision de tête des pages récemment modifiées dans la liste de suivi de l’utilisateur actuel.",
+       "apihelp-query+watchlist-example-props": "Chercher des informations supplémentaires sur la révision de tête des pages récemment modifiées de la liste de suivi de l’utilisateur actuel.",
        "apihelp-query+watchlist-example-allrev": "Chercher les informations sur toutes les modifications récentes des pages de la liste de suivi de l’utilisateur actuel",
        "apihelp-query+watchlist-example-generator": "Chercher l’information de la page sur les pages récemment modifiées de la liste de suivi de l’utilisateur actuel",
-       "apihelp-query+watchlist-example-generator-rev": "Chercher l’information de la révision pour les modifications récentes des pages de la liste de suivi de l’utilisateur actuel",
+       "apihelp-query+watchlist-example-generator-rev": "Chercher l’information de la révision pour les modifications récentes des pages de la liste de suivi de l’utilisateur actuel.",
        "apihelp-query+watchlist-example-wlowner": "Lister la révision de tête des pages récemment modifiées de la liste de suivi de l'utilisateur <kbd>Exemple</kbd>.",
        "apihelp-query+watchlistraw-description": "Obtenir toutes les pages de la liste de suivi de l’utilisateur actuel.",
        "apihelp-query+watchlistraw-param-namespace": "Lister uniquement les pages dans les espaces de nom fournis.",
        "apihelp-query+watchlistraw-param-dir": "Le sens dans lequel lister.",
        "apihelp-query+watchlistraw-param-fromtitle": "Démarrer l'énumération avec ce Titre (inclure le préfixe d'espace de noms) :",
        "apihelp-query+watchlistraw-param-totitle": "Terminer l'énumération avec ce Titre (inclure le préfixe d'espace de noms) :",
-       "apihelp-query+watchlistraw-example-simple": "Lister les pages dans la liste de suivi de l’utilisateur actuel",
-       "apihelp-query+watchlistraw-example-generator": "Chercher l’information sur les pages de la liste de suivi de l’utilisateur actuel",
+       "apihelp-query+watchlistraw-example-simple": "Lister les pages dans la liste de suivi de l’utilisateur actuel.",
+       "apihelp-query+watchlistraw-example-generator": "Chercher l’information sur les pages de la liste de suivi de l’utilisateur actuel.",
        "apihelp-removeauthenticationdata-description": "Supprimer les données d’authentification pour l’utilisateur actuel.",
        "apihelp-removeauthenticationdata-example-simple": "Tentative de suppression des données de l’utilisateur pour <kbd>FooAuthenticationRequest</kbd>.",
        "apihelp-resetpassword-description": "Envoyer un courriel de réinitialisation du mot de passe à un utilisateur.",
-       "apihelp-resetpassword-description-noroutes": "Aucun chemin pour réinitialiser le mot de passe n’est disponible.\n\nActiver les chemins dans <var>[[mw:Manual:$wgPasswordResetRoutes|$wgPasswordResetRoutes]]</var> pour utiliser ce module.",
+       "apihelp-resetpassword-description-noroutes": "Aucun chemin pour réinitialiser le mot de passe n’est disponible.\n\nActiver les chemins dans <var>[[mw:Special:MyLanguage/Manual:$wgPasswordResetRoutes|$wgPasswordResetRoutes]]</var> pour utiliser ce module.",
        "apihelp-resetpassword-param-user": "Utilisateur ayant été réinitialisé.",
        "apihelp-resetpassword-param-email": "Adresse courriel de l’utilisateur ayant été réinitialisé.",
        "apihelp-resetpassword-example-user": "Envoyer un courriel de réinitialisation du mot de passe à l’utilisateur <kbd>Exemple</kbd>.",
        "apihelp-resetpassword-example-email": "Envoyer un courriel pour la réinitialisation de mot de passe à tous les utilisateurs avec une adresse email <kbd>user@example.com</kbd>.",
-       "apihelp-revisiondelete-description": "Supprimer et annuler la suppression des révisions.",
+       "apihelp-revisiondelete-description": "Supprimer et rétablir des révisions.",
        "apihelp-revisiondelete-param-type": "Type de suppression de révision en cours de traitement.",
        "apihelp-revisiondelete-param-target": "Titre de page pour la suppression de révision, s’il est nécessaire pour le type.",
        "apihelp-revisiondelete-param-ids": "Identifiants pour les révisions à supprimer.",
        "apihelp-setnotificationtimestamp-example-pagetimestamp": "Fixer l’horodatage de notification pour <kbd>Page principale</kbd> afin que toutes les modifications depuis le 1 janvier 2012 soient non vues",
        "apihelp-setnotificationtimestamp-example-allpages": "Réinitialiser l’état de notification sur les pages dans l’espace de noms <kbd>{{ns:user}}</kbd>.",
        "apihelp-setpagelanguage-description": "Modifier la langue d’une page.",
-       "apihelp-setpagelanguage-description-disabled": "Il n’est pas possible de modifier la langue d’une page sur ce wiki.\n\nActiver <var>[[mw:Manual:$wgPageLanguageUseDB|$wgPageLanguageUseDB]]</var> pour utiliser cette action.",
+       "apihelp-setpagelanguage-description-disabled": "Il n’est pas possible de modifier la langue d’une page sur ce wiki.\n\nActiver <var>[[mw:Special:MyLanguage/Manual:$wgPageLanguageUseDB|$wgPageLanguageUseDB]]</var> pour utiliser cette action.",
        "apihelp-setpagelanguage-param-title": "Titre de la page dont vous souhaitez modifier la langue. Ne peut pas être utilisé avec <var>$1pageid</var>.",
        "apihelp-setpagelanguage-param-pageid": "Identifiant (ID) de la page dont vous souhaitez modifier la langue. Ne peut être utilisé avec <var>$1title</var>.",
        "apihelp-setpagelanguage-param-lang": "Code de langue vers lequel la page doit être changée. Utiliser <kbd>defaut</kbd> pour réinitialiser la page sur la langue par défaut du contenu du wiki.",
        "apihelp-xml-param-includexmlnamespace": "Si spécifié, ajoute un espace de noms XML.",
        "apihelp-xmlfm-description": "Extraire les données au format XML (affiché proprement en HTML).",
        "api-format-title": "Résultat de l’API de MediaWiki",
-       "api-format-prettyprint-header": "Voici la représentation HTML du format $1. HTML est utile pour le débogage, mais inapproprié pour être utilisé dans une application.\n\nSpécifiez le paramètre <var>format</var> pour modifier le format de sortie. Pour voir la représentation non HTML du format $1, mettez <kbd>format=$2</kbd>.\n\nVoyez la [[mw:API|documentation complète]], ou l’[[Special:ApiHelp/main|aide de l’API]] pour plus d’information.",
-       "api-format-prettyprint-header-only-html": "Ceci est une représentation HTML à des fins de déboguage, et n’est pas approprié à une utilisation applicative.\n\nVoir la [[mw:API|documentation complète]], ou l’[[Special:ApiHelp/main|aide de l’API]] pour plus d’information.",
+       "api-format-prettyprint-header": "Voici la représentation HTML du format $1. HTML est utile pour le débogage, mais inapproprié pour être utilisé dans une application.\n\nSpécifiez le paramètre <var>format</var> pour modifier le format de sortie. Pour voir la représentation non HTML du format $1, mettez <kbd>format=$2</kbd>.\n\nVoyez la [[mw:Special:MyLanguage/API|documentation complète]], ou l’[[Special:ApiHelp/main|aide de l’API]] pour plus d’information.",
+       "api-format-prettyprint-header-only-html": "Ceci est une représentation HTML à des fins de débogage, et n’est pas approprié pour une utilisation applicative.\n\nVoir la [[mw:Special:MyLanguage/API|documentation complète]], ou l’[[Special:ApiHelp/main|aide de l’API]] pour plus d’information.",
        "api-format-prettyprint-status": "Cette réponse serait retournée avec l'état HTTP $1 $2.",
        "api-pageset-param-titles": "Une liste des titres sur lesquels travailler.",
        "api-pageset-param-pageids": "Une liste des IDs de page sur lesquelles travailler.",
        "api-help-param-default-empty": "Par défaut : <span class=\"apihelp-empty\">(vide)</span>",
        "api-help-param-token": "Un jeton « $1 » récupéré par [[Special:ApiHelp/query+tokens|action=query&meta=tokens]]",
        "api-help-param-token-webui": "Pour rester compatible, le jeton utilisé dans l’IHM web est aussi accepté.",
-       "api-help-param-disabled-in-miser-mode": "Désactivé à cause du [[mw:Manual:$wgMiserMode|mode minimal]].",
-       "api-help-param-limited-in-miser-mode": "<strong>NOTE :</strong> Du fait du [[mw:Manual:$wgMiserMode|mode minimal]], utiliser cela peut aboutir à moins de résultats que <var>$1limit</var> renvoyés avant de continuer ; dans les cas extrêmes, zéro résultats peuvent être renvoyés.",
+       "api-help-param-disabled-in-miser-mode": "Désactivé à cause du [[mw:Special:MyLanguage/Manual:$wgMiserMode|mode minimal]].",
+       "api-help-param-limited-in-miser-mode": "<strong>NOTE :</strong> Du fait du [[mw:Special:MyLanguage/Manual:$wgMiserMode|mode minimal]], utiliser cela peut aboutir à moins de résultats que <var>$1limit</var> renvoyés avant de continuer ; dans les cas extrêmes, zéro résultats peuvent être renvoyés.",
        "api-help-param-direction": "Dans quelle direction énumérer :\n;newer:Lister les plus anciens en premier. Note : $1start doit être avant $1end.\n;older:Lister les nouveaux en premier (par défaut). Note : $1start doit être postérieur à $1end.",
        "api-help-param-continue": "Quand plus de résultats sont disponibles, utiliser cela pour continuer.",
        "api-help-param-no-description": "<span class=\"apihelp-empty\">(aucune description)</span>",
index 392dc45..493184c 100644 (file)
                        "Hamilton Abreu"
                ]
        },
-       "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:API:Main_page|Documentación]]\n* [[mw:API:FAQ|FAQ]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Lista de discusión]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce Anuncios da API]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Erros e solicitudes]\n</div>\n<strong>Estado:</strong> Tódalas funcionalidades mostradas nesta páxina deberían estar funcionanado, pero a API aínda está desenrolo, e pode ser modificada en calquera momento. Apúntese na [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ lista de discusión mediawiki-api-announce] para estar informado acerca das actualizacións.\n\n<strong>Solicitudes incorrectas:</strong> Cando se envían solicitudes incorrectas á API, envíase unha cabeceira HTTP coa chave \"MediaWiki-API-Error\" e, a seguir, tanto o valor da cabeceira como o código de erro retornado serán definidos co mesmo valor. Para máis información, consulte [[mw:API:Errors_and_warnings|API: Erros e avisos]].\n\n<strong>Test:</strong> Para facilitar as probas das peticións da API, consulte [[Special:ApiSandbox]].",
+       "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:Special:MyLanguage/API:Main_page|Documentación]]\n* [[mw:Special:MyLanguage/API:FAQ|FAQ]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Lista de discusión]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce Anuncios da API]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Erros e solicitudes]\n</div>\n<strong>Estado:</strong> Tódalas funcionalidades mostradas nesta páxina deberían estar funcionanado, pero a API aínda está desenrolo, e pode ser modificada en calquera momento. Apúntese na [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ lista de discusión mediawiki-api-announce] para estar informado acerca das actualizacións.\n\n<strong>Solicitudes incorrectas:</strong> Cando se envían solicitudes incorrectas á API, envíase unha cabeceira HTTP coa chave \"MediaWiki-API-Error\" e, a seguir, tanto o valor da cabeceira como o código de erro retornado serán definidos co mesmo valor. Para máis información, consulte [[mw:Special:MyLanguage/API:Errors_and_warnings|API: Erros e avisos]].\n\n<strong>Test:</strong> Para facilitar as probas das peticións da API, consulte [[Special:ApiSandbox]].",
        "apihelp-main-param-action": "Que acción se realizará.",
        "apihelp-main-param-format": "O formato de saída.",
-       "apihelp-main-param-maxlag": "O retardo máximo pode usarse cando MediaWiki está instalada nun cluster de base de datos replicadas. Para gardar accións que causen calquera retardo máis de replicación do sitio, este parámetro pode facer que o cliente espere ata que o retardo de replicación sexa menor que o valor especificado. No caso de retardo excesivo, é devolto o código de erro <samp>maxlag</samp> cunha mensaxe como <samp>esperando por $host: $lag segundos de retardo</samp>.<br />Para máis información, ver [[mw:Manual:Maxlag_parameter|Manual: Maxlag parameter]].",
+       "apihelp-main-param-maxlag": "O retardo máximo pode usarse cando MediaWiki está instalada nun cluster de base de datos replicadas. Para gardar accións que causen calquera retardo máis de replicación do sitio, este parámetro pode facer que o cliente espere ata que o retardo de replicación sexa menor que o valor especificado. No caso de retardo excesivo, é devolto o código de erro <samp>maxlag</samp> cunha mensaxe como <samp>esperando por $host: $lag segundos de retardo</samp>.<br />Para máis información, ver [[mw:Special:MyLanguage/Manual:Maxlag_parameter|Manual: Maxlag parameter]].",
        "apihelp-main-param-smaxage": "Fixar a cabeceira HTTP de control de caché <code>s-maxage</code> a esos segundos. Os erros nunca se gardan na caché.",
        "apihelp-main-param-maxage": "Fixar a cabeceira HTTP de control de caché <code>max-age</code> a esos segundos. Os erros nunca se gardan na caché.",
        "apihelp-main-param-assert": "Verificar se o usuario está conectado como <kbd>usuario</kbd> ou ten a marca de <kbd>bot</kbd>.",
@@ -41,7 +41,7 @@
        "apihelp-block-param-autoblock": "Bloquear automaticamente o último enderezo IP utilizado, e calquera outro enderezo desde o que intente conectarse.",
        "apihelp-block-param-noemail": "Impide que o usuario envíe correos electrónicos a través da wiki. (Require o permiso <code>blockemail</code>).",
        "apihelp-block-param-hidename": "Ocultar o nome de usuario do rexistro de bloqueos. (Precisa do permiso <code>hideuser</code>).",
-       "apihelp-block-param-allowusertalk": "Permitir que o usuario edite a súa propia páxina de conversa (depende de <var>[[mw:Manual:$wgBlockAllowsUTEdit|$wgBlockAllowsUTEdit]]</var>).",
+       "apihelp-block-param-allowusertalk": "Permitir que o usuario edite a súa propia páxina de conversa (depende de <var>[[mw:Special:MyLanguage/Manual:$wgBlockAllowsUTEdit|$wgBlockAllowsUTEdit]]</var>).",
        "apihelp-block-param-reblock": "Se o usuario xa está bloqueado, sobreescribir o bloqueo existente.",
        "apihelp-block-param-watchuser": "Vixiar a páxina de usuario ou direccións IP e a de conversa deste usuario",
        "apihelp-block-param-tags": "Cambiar as etiquetas a aplicar á entrada no rexistro de bloqueos.",
        "apihelp-opensearch-param-search": "Buscar texto.",
        "apihelp-opensearch-param-limit": "Número máximo de resultados a visualizar.",
        "apihelp-opensearch-param-namespace": "Espazo de nomes no que buscar.",
-       "apihelp-opensearch-param-suggest": "Non facer nada se <var>[[mw:Manual:$wgEnableOpenSearchSuggest|$wgEnableOpenSearchSuggest]]</var> é falso.",
+       "apihelp-opensearch-param-suggest": "Non facer nada se <var>[[mw:Special:MyLanguage/Manual:$wgEnableOpenSearchSuggest|$wgEnableOpenSearchSuggest]]</var> é falso.",
        "apihelp-opensearch-param-redirects": "Como xestionar as redireccións:\n;return:Devolve a mesma redirección.\n;resolve:Devolve a páxina á que apunta. Pode devolver menos de $1limit resultados.\nPor razóns históricas, o valor por defecto para $1format=json é \"return\" e \"resolve\" para outros formatos.",
        "apihelp-opensearch-param-format": "O formato de saída.",
        "apihelp-opensearch-param-warningsaserror": "Se os avisos son recibidos con <kbd>format=json</kbd>, devolver un erro de API no canto de ignoralos.",
        "apihelp-parse-paramvalue-prop-limitreportdata": "Devolve o informe de límite de forma estruturada. Non devolve datos cando <var>$1disablelimitreport</var> está fixado.",
        "apihelp-parse-paramvalue-prop-limitreporthtml": "Devolve a versión HTML do informe de límite. Non devolve datos cando <var>$1disablelimitreport</var> está fixado.",
        "apihelp-parse-paramvalue-prop-parsetree": "Árbores de análise XML do contido da revisión (precisa o modelo de contido <code>$1</code>)",
+       "apihelp-parse-paramvalue-prop-parsewarnings": "Devolve os avisos que ocorreron ó analizar o contido.",
        "apihelp-parse-param-pst": "Fai unha transformación antes de gardar a entrada antes de analizala. Válida unicamente para usar con texto.",
        "apihelp-parse-param-onlypst": "Facer unha transformación antes de gardar (PST) a entrada, pero sen analizala. Devolve o mesmo wikitexto, despois de que a PST foi aplicada. Só válida cando se usa con <var>$1text</var>.",
        "apihelp-parse-param-effectivelanglinks": "Inclúe ligazóns de idioma proporcionadas polas extensións (para usar con <kbd>$1prop=langlinks</kbd>).",
        "apihelp-query+alldeletedrevisions-param-user": "Só listar revisións deste usuario.",
        "apihelp-query+alldeletedrevisions-param-excludeuser": "Non listar revisións deste usuario.",
        "apihelp-query+alldeletedrevisions-param-namespace": "Só listar páxinas neste espazo de nomes.",
-       "apihelp-query+alldeletedrevisions-param-miser-user-namespace": "<strong>Nota:</strong> Debido ó [[mw:Manual:$wgMiserMode|modo minimal]], ó usar á vez <var>$1user</var> e <var>$1namespace</var> pode devolver menos resultados de <var>$1limit</var> antes de continuar, en casos extremos, pode que non devolva resultados.",
+       "apihelp-query+alldeletedrevisions-param-miser-user-namespace": "<strong>Nota:</strong> Debido ó [[mw:Special:MyLanguage/Manual:$wgMiserMode|modo minimal]], ó usar á vez <var>$1user</var> e <var>$1namespace</var> pode devolver menos resultados de <var>$1limit</var> antes de continuar, en casos extremos, pode que non devolva resultados.",
        "apihelp-query+alldeletedrevisions-param-generatetitles": "Usado como xenerador, xenera títulos no canto de IDs de revisión.",
        "apihelp-query+alldeletedrevisions-example-user": "Listar as últimas 50 contribucións borradas do usuario <kbd>Example</kbd>.",
        "apihelp-query+alldeletedrevisions-example-ns-main": "Listar as 50 primeiras revisións borradas no espazo de nomes principal.",
        "apihelp-query+filearchive-paramvalue-prop-archivename": "Engade o nome do ficheiro da versión do ficheiro para as versións que non son a última.",
        "apihelp-query+filearchive-example-simple": "Mostrar unha lista de tódolos fichieiros eliminados.",
        "apihelp-query+filerepoinfo-description": "Devolver a meta información sobre os repositorios de imaxes configurados na wiki.",
-       "apihelp-query+filerepoinfo-param-prop": "Que propiedades do repositorio mostrar (pode haber máis dispoñible nalgunhas wikis):\n;apiurl:URL ó API do repositorio - útil para obter información das imaxes no host.\n;name:A clave do repositorio - usada p. ex. nas variables de retorno de <var>[[mw:Manual:$wgForeignFileRepos|$wgForeignFileRepos]]</var> e [[Special:ApiHelp/query+imageinfo|imageinfo]]\n;displayname:O nome lexible do wiki repositorio.\n;rooturl:URL raíz dos camiños de imaxe.\n;local:Se o repositorio é o repositorio local ou non.",
+       "apihelp-query+filerepoinfo-param-prop": "Que propiedades do repositorio mostrar (pode haber máis dispoñible nalgunhas wikis):\n;apiurl:URL ó API do repositorio - útil para obter información das imaxes no host.\n;name:A clave do repositorio - usada p. ex. nas variables de retorno de <var>[[mw:Special:MyLanguage/Manual:$wgForeignFileRepos|$wgForeignFileRepos]]</var> e [[Special:ApiHelp/query+imageinfo|imageinfo]]\n;displayname:O nome lexible do wiki repositorio.\n;rooturl:URL raíz dos camiños de imaxe.\n;local:Se o repositorio é o repositorio local ou non.",
        "apihelp-query+filerepoinfo-example-simple": "Obter infomación sobre os repositorios de ficheiros",
        "apihelp-query+fileusage-description": "Atopar tódalas páxinas que usan os ficheiros dados.",
        "apihelp-query+fileusage-param-prop": "Que propiedades obter:",
        "apihelp-query+siteinfo-paramvalue-prop-rightsinfo": "Devolve a información dos dereitos (licenza) da wiki se está dispoñible.",
        "apihelp-query+siteinfo-paramvalue-prop-restrictions": "Devolve información dos tipos de restricións (protección) dispoñibles.",
        "apihelp-query+siteinfo-paramvalue-prop-languages": "Devolve unha lista dos idiomas que soporta Mediawiki (opcionalmente pode localizarse usando <var>$1inlanguagecode</var>).",
-       "apihelp-query+siteinfo-paramvalue-prop-languagevariants": "Devolve unha lista de códigos de lingua para os que [[mw:LanguageConverter|LanguageConverter]] está activo, e as variantes soportadas para cada un.",
+       "apihelp-query+siteinfo-paramvalue-prop-languagevariants": "Devolve unha lista de códigos de lingua para os que [[mw:Special:MyLanguage/LanguageConverter|LanguageConverter]] está activo, e as variantes soportadas para cada un.",
        "apihelp-query+siteinfo-paramvalue-prop-skins": "Devolve unha lista de todas as aparencias dispoñibles (opcionalmente pode localizarse usando <var>$1inlanguagecode</var>, noutro caso no idioma do contido).",
        "apihelp-query+siteinfo-paramvalue-prop-extensiontags": "Devolve unha lista de etiquetas de extensión de analizador.",
        "apihelp-query+siteinfo-paramvalue-prop-functionhooks": "Devolve unha lista de ganchos de función de analizador.",
-       "apihelp-query+siteinfo-paramvalue-prop-showhooks": "Devolve unha lista de todos os ganchos subscritos (contido de <var>[[mw:Manual:$wgHooks|$wgHooks]]</var>).",
+       "apihelp-query+siteinfo-paramvalue-prop-showhooks": "Devolve unha lista de todos os ganchos subscritos (contido de <var>[[mw:Special:MyLanguage/Manual:$wgHooks|$wgHooks]]</var>).",
        "apihelp-query+siteinfo-paramvalue-prop-variables": "Devolve unha lista de identificadores de variable.",
        "apihelp-query+siteinfo-paramvalue-prop-protocols": "Devolve unha lista de protocolos que están permitidos nas ligazóns externas.",
        "apihelp-query+siteinfo-paramvalue-prop-defaultoptions": "Devolve os valores por defecto das preferencias de usuario.",
        "apihelp-query+usercontribs-paramvalue-prop-flags": "Engade os indicadores da modificación.",
        "apihelp-query+usercontribs-paramvalue-prop-patrolled": "Marca as modificacións vixiadas.",
        "apihelp-query+usercontribs-paramvalue-prop-tags": "Lista as etiquetas da modificación.",
-       "apihelp-query+usercontribs-param-show": "Só mostrar elementos que cumpran estos criterios, p.ex. só edicións menores: <kbd>$2show=!minor</kbd>.\n\nSe está fixado <kbd>$2show=patrolled</kbd> ou <kbd>$2show=!patrolled</kbd>, as modificacións máis antigas que <var>[[mw:Manual:$wgRCMaxAge|$wgRCMaxAge]]</var> ($1 {{PLURAL:$1|segundo|segundos}}) non se mostrarán.",
+       "apihelp-query+usercontribs-param-show": "Só mostrar elementos que cumpran estos criterios, p.ex. só edicións menores: <kbd>$2show=!minor</kbd>.\n\nSe está fixado <kbd>$2show=patrolled</kbd> ou <kbd>$2show=!patrolled</kbd>, as modificacións máis antigas que <var>[[mw:Special:MyLanguage/Manual:$wgRCMaxAge|$wgRCMaxAge]]</var> ($1 {{PLURAL:$1|segundo|segundos}}) non se mostrarán.",
        "apihelp-query+usercontribs-param-tag": "Só listar revisións marcadas con esta etiqueta.",
        "apihelp-query+usercontribs-param-toponly": "Listar só cambios que son a última revisión.",
        "apihelp-query+usercontribs-example-user": "Mostrar as contribucións do usuario <kbd>Exemplo</kbd>.",
        "apihelp-removeauthenticationdata-description": "Elimina os datos de autenticación do usuario actual.",
        "apihelp-removeauthenticationdata-example-simple": "Intenta eliminar os datos de usuario actual para <kbd>FooAuthenticationRequest</kbd>.",
        "apihelp-resetpassword-description": "Envía un correo de inicialización de contrasinal a un usuario.",
-       "apihelp-resetpassword-description-noroutes": "Non están dispoñibles as rutas de reinicio de contrasinal \n\nActive as rutas en <var>[[mw:Manual:$wgPasswordResetRoutes|$wgPasswordResetRoutes]]</var> para usar este módulo.",
+       "apihelp-resetpassword-description-noroutes": "Non están dispoñibles as rutas de reinicio de contrasinal \n\nActive as rutas en <var>[[mw:Special:MyLanguage/Manual:$wgPasswordResetRoutes|$wgPasswordResetRoutes]]</var> para usar este módulo.",
        "apihelp-resetpassword-param-user": "Usuario sendo reinicializado.",
        "apihelp-resetpassword-param-email": "Está reinicializándose o enderezo de correo electrónico do usuario.",
        "apihelp-resetpassword-example-user": "Enviar un correo de reinicialización de contrasinal ó usuario <kbd>Exemplo</kbd>.",
        "apihelp-setnotificationtimestamp-example-pagetimestamp": "Fixar o selo de tempo de notificación para a <kbd>Main page</kbd> de forma que todas as edicións dende o 1 se xaneiro de 2012 queden sen revisar.",
        "apihelp-setnotificationtimestamp-example-allpages": "Restaurar o estado de notificación para as páxinas no espazo de nomes de <kbd>{{ns:user}}</kbd>.",
        "apihelp-setpagelanguage-description": "Cambiar a lingua dunha páxina.",
-       "apihelp-setpagelanguage-description-disabled": "Neste wiki non se permite modificar a lingua das páxinas.\n\nActive <var>[[mw:Manual:$wgPageLanguageUseDB|$wgPageLanguageUseDB]]</var> para utilizar esta acción.",
+       "apihelp-setpagelanguage-description-disabled": "Neste wiki non se permite modificar a lingua das páxinas.\n\nActive <var>[[mw:Special:MyLanguage/Manual:$wgPageLanguageUseDB|$wgPageLanguageUseDB]]</var> para utilizar esta acción.",
        "apihelp-setpagelanguage-param-title": "Título da páxina cuxa lingua quere cambiar. Non se pode usar xunto con <var>$1pageid</var>.",
        "apihelp-setpagelanguage-param-pageid": "Identificador da páxina cuxa lingua quere cambiar. Non se pode usar xunto con <var>$1title</var>.",
        "apihelp-setpagelanguage-param-lang": "Código da lingua á que se quere cambiar a páxina. Use <kbd>default</kbd> para restablecer a páxina á lingua por defecto do contido da wiki.",
        "apihelp-xml-param-includexmlnamespace": "Se está indicado, engade un espazo de nomes XML.",
        "apihelp-xmlfm-description": "Datos de saída en formato XML(impresión en HTML).",
        "api-format-title": "Resultado de API de MediaWiki",
-       "api-format-prettyprint-header": "Esta é a representación HTML do formato $1. HTML é bó para depurar, pero non é axeitado para usar nunha aplicación.\n\nEspecifique o parámetro <var>format</var> para cambiar o formato de saída. Para ver a representación non-HTML do formato $1, fixe <kbd>format=$2</kbd>.\n\n\nRevise a [[mw:API|documentación completa]], ou a [[Special:ApiHelp/main|axuda da API]] para obter máis información.",
-       "api-format-prettyprint-header-only-html": "Esta é unha representación HTML empregada para a depuración de erros, e non é axeitada para o uso de aplicacións.\n\nVexa a [[mw:API|documentación completa]], ou a [[Special:ApiHelp/main|axuda da API]] para máis información.",
+       "api-format-prettyprint-header": "Esta é a representación HTML do formato $1. HTML é bó para depurar, pero non é axeitado para usar nunha aplicación.\n\nEspecifique o parámetro <var>format</var> para cambiar o formato de saída. Para ver a representación non-HTML do formato $1, fixe <kbd>format=$2</kbd>.\n\n\nRevise a [[mw:Special:MyLanguage/API|documentación completa]], ou a [[Special:ApiHelp/main|axuda da API]] para obter máis información.",
+       "api-format-prettyprint-header-only-html": "Esta é unha representación HTML empregada para a depuración de erros, e non é axeitada para o uso de aplicacións.\n\nVexa a [[mw:Special:MyLanguage/API|documentación completa]], ou a [[Special:ApiHelp/main|axuda da API]] para máis información.",
        "api-format-prettyprint-status": "Esta resposta será devolta co estado de HTTP $1 $2.",
        "api-pageset-param-titles": "Lista de títulos nos que traballar.",
        "api-pageset-param-pageids": "Lista de identificadores de páxina nos que traballar.",
        "api-help-param-default-empty": "Por defecto: <span class=\"apihelp-empty\">(baleiro)</span>",
        "api-help-param-token": "Un identificador \"$1\" recuperado por [[Special:ApiHelp/query+tokens|action=query&meta=tokens]]",
        "api-help-param-token-webui": "Por compatibilidade, o identificador usado na web UI tamén é aceptado.",
-       "api-help-param-disabled-in-miser-mode": "Desactivado debido ó [[mw:Manual:$wgMiserMode|modo minimal]].",
-       "api-help-param-limited-in-miser-mode": "<strong>Nota:</strong> Debido ó [[mw:Manual:$wgMiserMode|modo minimal]], usar isto pode devolver menos de <var>$1limit</var> resultados antes de seguir, en casos extremos, pode que non se devolvan resultados.",
+       "api-help-param-disabled-in-miser-mode": "Desactivado debido ó [[mw:Special:MyLanguage/Manual:$wgMiserMode|modo minimal]].",
+       "api-help-param-limited-in-miser-mode": "<strong>Nota:</strong> Debido ó [[mw:Special:MyLanguage/Manual:$wgMiserMode|modo minimal]], usar isto pode devolver menos de <var>$1limit</var> resultados antes de seguir, en casos extremos, pode que non se devolvan resultados.",
        "api-help-param-direction": "En que dirección enumerar:\n;newer:Lista os máis antigos primeiro. Nota: $1start ten que estar antes que $1end.\n;older:Lista os máis novos primeiro (por defecto). Nota: $1start ten que estar despois que $1end.",
        "api-help-param-continue": "Cando estean dispoñibles máis resultados, use isto para continuar.",
        "api-help-param-no-description": "<span class=\"apihelp-empty\">(sen descrición)</span>",
        "apierror-badurl": "Valor \"$2\" non válido para o parámetro de URL <var>$1</var>.",
        "apierror-baduser": "Valor \"$2\" non válido para o parámetro de usuario <var>$1</var>.",
        "apierror-badvalue-notmultivalue": "O separador multivalor U+001F só pode utilizarse en parámetros multivalorados.",
+       "apierror-bad-watchlist-token": "Identificador de lista de vixilancia proporcionado incorrecto. Por favor, obteña un identificador correcto en [[Special:Preferences]].",
        "apierror-blockedfrommail": "Foi bloqueado para o envío de correos electrónicos.",
        "apierror-blocked": "Foi bloqueado fronte á edición.",
        "apierror-botsnotsupported": "Esta interface non está dispoñible para bots.",
        "apiwarn-deprecation-withreplacement": "<kbd>$1</kbd> está obsoleto. No seu lugar, utilice <kbd>$2</kbd>.",
        "apiwarn-invalidcategory": "\"$1\" non é unha categoría.",
        "apiwarn-invalidtitle": "\"$1\" non é un título válido.",
+       "apiwarn-invalidxmlstylesheetext": "As follas de estilo deben ter a extensión <code>.xsl</code>.",
+       "apiwarn-invalidxmlstylesheet": "A folla de estilos especificada non é válida ou non existe.",
+       "apiwarn-invalidxmlstylesheetns": "A folla de estilos debería estar no espazo de nomes {{ns:MediaWiki}}.",
+       "apiwarn-moduleswithoutvars": "A propiedade <kbd>modules</kbd> está definida, pero non o está <kbd>jsconfigvars</kbd> nin <kbd>encodedjsconfigvars</kbd>. As variables de configuración son necesarias para o correcto uso do módulo.",
        "apiwarn-notfile": "\"$1\" non é un ficheiro.",
        "apiwarn-parse-nocontentmodel": "Non se proporcionou <var>title</var> nin <var>contentmodel</var>, asúmese $1.",
        "apiwarn-tokennotallowed": "A acción \"$1\" non está permitida para o usuario actual.",
        "apiwarn-toomanyvalues": "Demasiados valores para o parámetro <var>$1</var>. O límite é $2.",
        "apiwarn-truncatedresult": "Truncouse este resultado porque doutra maneira sobrepasaría o límite de $1 bytes.",
+       "apiwarn-unrecognizedvalues": "{{PLURAL:$3|Valor non recoñecido|Valores non recoñecidos}} para o parámetro <var>$1</var>: $2.",
+       "apiwarn-unsupportedarray": "O parámetro <var>$1</var> usa unha sintaxe PHP de matriz que non está soportada.",
+       "apiwarn-validationfailed-badchars": "caracteres non válidos na clave (só se admiten os caracteres <code>a-z</code>, <code>A-Z</code>, <code>0-9</code>, <code>_</code> e <code>-</code>).",
        "apiwarn-validationfailed-badpref": "non é unha preferencia válida.",
        "apiwarn-validationfailed-cannotset": "non pode ser establecido por este módulo.",
        "apiwarn-validationfailed-keytoolong": "clave demasiado longa (non pode ter máis de $1 bytes).",
index f10334a..a948c85 100644 (file)
                        "שמזן"
                ]
        },
-       "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:API:Main_page|תיעוד]]\n* [[mw:API:FAQ|שו\"ת]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api רשימת דיוור]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce הודעות על API]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R באגים ובקשות]\n</div>\n<strong>מצב:</strong> כל האפשרויות שמוצגות בדף הזה אמורות לעבוד, אבל ה־API עדיין בפיתוח פעיל, ויכול להשתנות בכל זמן. עשו מינוי ל[https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ רשימת הדיוור mediawiki-api-announce] להודעות על עדכונים.\n\n<strong>בקשות שגויות:</strong> כשבקשות שגויות נשלחות ל־API, תישלח כותרת HTTP עם המפתח \"MediaWiki-API-Error\" ואז גם הערך של הכותרת וגם קוד השגיאה יוגדרו לאותו ערך. למידע נוסף ר' [[mw:API:Errors_and_warnings|API: שגיאות ואזהרות]].\n\n<strong>בדיקה:</strong> לבדיקה קלה יותר של בקשות ר' [[Special:ApiSandbox]].",
+       "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:Special:MyLanguage/API:Main_page|תיעוד]]\n* [[mw:Special:MyLanguage/API:FAQ|שו\"ת]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api רשימת דיוור]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce הודעות על API]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R באגים ובקשות]\n</div>\n<strong>מצב:</strong> כל האפשרויות שמוצגות בדף הזה אמורות לעבוד, אבל ה־API עדיין בפיתוח פעיל, ויכול להשתנות בכל זמן. עשו מינוי ל[https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ רשימת הדיוור mediawiki-api-announce] להודעות על עדכונים.\n\n<strong>בקשות שגויות:</strong> כשבקשות שגויות נשלחות ל־API, תישלח כותרת HTTP עם המפתח \"MediaWiki-API-Error\" ואז גם הערך של הכותרת וגם קוד השגיאה יוגדרו לאותו ערך. למידע נוסף ר' [[mw:Special:MyLanguage/API:Errors_and_warnings|API: שגיאות ואזהרות]].\n\n<strong>בדיקה:</strong> לבדיקה קלה יותר של בקשות ר' [[Special:ApiSandbox]].",
        "apihelp-main-param-action": "איזו פעולה לבצע.",
        "apihelp-main-param-format": "תסדיר הפלט.",
-       "apihelp-main-param-maxlag": "שיהוי מרבי יכול לשמש כשמדיה־ויקי מותקנת בצביר עם מסד נתונים משוכפל. כדי לחסוך בפעולות שגורמות יותר שיהוי בשכפול אתר, הפרמטר הזה יכול לגרום ללקוח להמתין עד ששיהוי השכפול יורד מתחת לערך שצוין. במקרה של שיהוי מוגזם, קוד השגיאה <samp>maxlag</samp> מוחזר עם הודעה כמו <samp>Waiting for $host: $lag seconds lagged</samp>.<br />ר' [[mw:Manual:Maxlag_parameter|מדריך למשתמש: פרמטר maxlag]] למידע נוסף.",
+       "apihelp-main-param-maxlag": "שיהוי מרבי יכול לשמש כשמדיה־ויקי מותקנת בצביר עם מסד נתונים משוכפל. כדי לחסוך בפעולות שגורמות יותר שיהוי בשכפול אתר, הפרמטר הזה יכול לגרום ללקוח להמתין עד ששיהוי השכפול יורד מתחת לערך שצוין. במקרה של שיהוי מוגזם, קוד השגיאה <samp>maxlag</samp> מוחזר עם הודעה כמו <samp>Waiting for $host: $lag seconds lagged</samp>.<br />ר' [[mw:Special:MyLanguage/Manual:Maxlag_parameter|מדריך למשתמש: פרמטר maxlag]] למידע נוסף.",
        "apihelp-main-param-smaxage": "הגדרת כותרת בקרת מטמון HTTP‏ <code>s-maxage</code> למספר כזה של שניות.",
        "apihelp-main-param-maxage": "הגדרת כותרת בקרת מטמון HTTP‏ <code>max-age</code> למספר כזה של שניות.",
        "apihelp-main-param-assert": "לוודא שהמשתמש נכנס אם זה מוגדר ל־<kbd>user</kbd>, או שיש לו הרשאת בוט אם זה <kbd>bot</kbd>.",
@@ -44,7 +44,7 @@
        "apihelp-block-param-autoblock": "חסימה אוטומטית גם של כתובת ה־IP האחרונה שהשתמש בה ושל כל כתובת IP שינסה להשתמש בה בעתיד.",
        "apihelp-block-param-noemail": "למנוע ממשתמש לשלוח דואר אלקטרוני דרך הוויקי. (דורש את ההרשאה <code>blockemail</code>).",
        "apihelp-block-param-hidename": "הסרת השם מיומן החסימות. (דורש את ההרשאה <code>hideuser</code>.)",
-       "apihelp-block-param-allowusertalk": "לאפשר למשתמש לערוך את דף השיחה שלו או שלה (תלוי ב־<var>[[mw:Manual:$wgBlockAllowsUTEdit|$wgBlockAllowsUTEdit]]</var>).",
+       "apihelp-block-param-allowusertalk": "לאפשר למשתמש לערוך את דף השיחה שלו או שלה (תלוי ב־<var>[[mw:Special:MyLanguage/Manual:$wgBlockAllowsUTEdit|$wgBlockAllowsUTEdit]]</var>).",
        "apihelp-block-param-reblock": "אם המשתמש כבר חסום, לדרוס את החסימה הנוכחית.",
        "apihelp-block-param-watchuser": "לעקוב אחרי דף המשתמש ודף השיחה של המשתמש או של כתובת ה־IP.",
        "apihelp-block-param-tags": "תגי שינוי שיחולו על העיול ביומן החסימה.",
        "apihelp-opensearch-param-search": "מחרוזת לחיפוש.",
        "apihelp-opensearch-param-limit": "המספר המרבי של התוצאות שתוחזרנה.",
        "apihelp-opensearch-param-namespace": "שמות מתחם לחיפוש.",
-       "apihelp-opensearch-param-suggest": "לא לעשות דבר אם <var>[[mw:Manual:$wgEnableOpenSearchSuggest|$wgEnableOpenSearchSuggest]]</var> הוא false.",
+       "apihelp-opensearch-param-suggest": "לא לעשות דבר אם <var>[[mw:Special:MyLanguage/Manual:$wgEnableOpenSearchSuggest|$wgEnableOpenSearchSuggest]]</var> הוא false.",
        "apihelp-opensearch-param-redirects": "איך לטפל בהפניות:\n;return:להחזיר את ההפניה עצמה.\n;resolve:להחזיר את דף היעד. יכול להחזיר פחות מ־$1limit תוצאות.\nמסיבות היסטוריות, בררת המחדל היא \"return\" עבור $1format=json ו־\"resolve\" עבור תסדירים אחרים.",
        "apihelp-opensearch-param-format": "תסדיר הפלט.",
        "apihelp-opensearch-param-warningsaserror": "אם אזהרות מוּעלות עם <kbd>format=json</kbd>, להחזיר שגיאת API במקום להתעלם מהן.",
        "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": "לעשות התמרה לפני שמירה (pre-save transform‏, PST) על הקלט, אבל לא לפענח אותו. מחזיר את אותו קוד הוויקי אחרי החלת PST. תקף רק בשימוש עם <var>$1text</var>.",
        "apihelp-parse-param-effectivelanglinks": "כולל קישור שפה שמספקות הרחבות (לשימוש עם <kbd>$1prop=langlinks</kbd>).",
        "apihelp-query+alldeletedrevisions-param-user": "לרשום רק גרסאות מאת המשתמש הזה.",
        "apihelp-query+alldeletedrevisions-param-excludeuser": "לא לרשום גרסאות מאת המשתמש הזה.",
        "apihelp-query+alldeletedrevisions-param-namespace": "לרשום רק דפים במרחב השם הזה.",
-       "apihelp-query+alldeletedrevisions-param-miser-user-namespace": "<strong>לתשומת לבך:</strong> בשל [[mw:Manual:$wgMiserMode|מצב חיסכון]], שימוש ב־<var>$1user</var> וב־<var>$1namespace</var> ביחד עלול להניב החזרה של פחות מ־<var>$1limit</var> תוצאות לפני המשך; במצבים קיצוניים יכולות להיות מוחזרות אפס תוצאות.",
+       "apihelp-query+alldeletedrevisions-param-miser-user-namespace": "<strong>לתשומת לבך:</strong> בשל [[mw:Special:MyLanguage/Manual:$wgMiserMode|מצב חיסכון]], שימוש ב־<var>$1user</var> וב־<var>$1namespace</var> ביחד עלול להניב החזרה של פחות מ־<var>$1limit</var> תוצאות לפני המשך; במצבים קיצוניים יכולות להיות מוחזרות אפס תוצאות.",
        "apihelp-query+alldeletedrevisions-param-generatetitles": "בעת שימוש בתור מחולל, לחולל כותרת במקום מזהי גרסה.",
        "apihelp-query+alldeletedrevisions-example-user": "לרשום את 50 התרומות המחוקות האחרונות של משתמש <kbd>Example</kbd>.",
        "apihelp-query+alldeletedrevisions-example-ns-main": "רשימת 50 הגרסאות המחוקות הראשונות במרחב הראשי.",
        "apihelp-query+filearchive-paramvalue-prop-archivename": "הוספת שם הקובץ של גרסה מאורכבת עבור גרסאות שאינן האחרונה.",
        "apihelp-query+filearchive-example-simple": "הצגת רשימת כל הקבצים המחוקים.",
        "apihelp-query+filerepoinfo-description": "החזרת מידע מטא על מאגרי תמונות שמוגדרים בוויקי.",
-       "apihelp-query+filerepoinfo-param-prop": "אילו מאפייני מאגר לקבל (יכולים להיות יותר מזה באתרי ויקי אחדים):\n;apiurl:URL ל־API של המאגר – מועיל לקבלת מידע על התמונה מהמארח.\n;name:המפתח של המאגר – משמש למשל בערכים המוחזרים מ־<var>[[mw:Manual:$wgForeignFileRepos|$wgForeignFileRepos]]</var> ומ־[[Special:ApiHelp/query+imageinfo|imageinfo]].\n;displayname:שם קריא של אתר הוויקי של המאגר.\n;rooturl:URL שורש לנתיבי תמונות.\n;local:האם המאגר הוא מקומי או לא.",
+       "apihelp-query+filerepoinfo-param-prop": "אילו מאפייני מאגר לקבל (יכולים להיות יותר מזה באתרי ויקי אחדים):\n;apiurl:URL ל־API של המאגר – מועיל לקבלת מידע על התמונה מהמארח.\n;name:המפתח של המאגר – משמש למשל בערכים המוחזרים מ־<var>[[mw:Special:MyLanguage/Manual:$wgForeignFileRepos|$wgForeignFileRepos]]</var> ומ־[[Special:ApiHelp/query+imageinfo|imageinfo]].\n;displayname:שם קריא של אתר הוויקי של המאגר.\n;rooturl:URL שורש לנתיבי תמונות.\n;local:האם המאגר הוא מקומי או לא.",
        "apihelp-query+filerepoinfo-example-simple": "קבלת מידע על מאגרי קבצים.",
        "apihelp-query+fileusage-description": "מציאת כל הדפים שמשתמשים בקבצים הנתונים.",
        "apihelp-query+fileusage-param-prop": "אילו מאפיינים לקבל:",
        "apihelp-query+siteinfo-paramvalue-prop-rightsinfo": "החזרת הזכויות (הרישיון) של הוויקי, אם זמין.",
        "apihelp-query+siteinfo-paramvalue-prop-restrictions": "החזרת מידע על ההגבלות (ההגנות) הזמינות.",
        "apihelp-query+siteinfo-paramvalue-prop-languages": "החזרת השפות שמדיה־ויקי תומכת בהן (זה יכול להיות מותאם מקומים עם <var>$1inlanguagecode</var>).",
-       "apihelp-query+siteinfo-paramvalue-prop-languagevariants": "מחזיר רשימת קודי שפה שמופעל עבורם ממיר שפה ([[mw:LanguageConverter|LanguageConverter]]), וההגוונים הנתמכים עבור כל אחת מהן.",
+       "apihelp-query+siteinfo-paramvalue-prop-languagevariants": "מחזיר רשימת קודי שפה שמופעל עבורם ממיר שפה ([[mw:Special:MyLanguage/LanguageConverter|LanguageConverter]]), וההגוונים הנתמכים עבור כל אחת מהן.",
        "apihelp-query+siteinfo-paramvalue-prop-skins": "החזרת רשימת כל העיצובים הזמינים (זה יכול להיות מותאם מקומית באמצעות <var>$1inlanguagecode</var>, אחרת זה יהיה בשפת התוכן).",
        "apihelp-query+siteinfo-paramvalue-prop-extensiontags": "החזרת רשימת תגי הרחבת מפענח.",
        "apihelp-query+siteinfo-paramvalue-prop-functionhooks": "החזרת hook־ים של הרחבות מפענח.",
-       "apihelp-query+siteinfo-paramvalue-prop-showhooks": "החזרת כל ה־hook־ים המנויים (תוכן של <var>[[mw:Manual:$wgHooks|$wgHooks]]</var>).",
+       "apihelp-query+siteinfo-paramvalue-prop-showhooks": "החזרת כל ה־hook־ים המנויים (תוכן של <var>[[mw:Special:MyLanguage/Manual:$wgHooks|$wgHooks]]</var>).",
        "apihelp-query+siteinfo-paramvalue-prop-variables": "החזרת מזהי משתנים.",
        "apihelp-query+siteinfo-paramvalue-prop-protocols": "החזרת רשימת הפרוטוקולים המותרים בקישורים חיצוניים.",
        "apihelp-query+siteinfo-paramvalue-prop-defaultoptions": "החזרת הערכים ההתחלתיים של העדפות משתמש.",
        "apihelp-query+usercontribs-paramvalue-prop-flags": "הוספת הדגלים של העריכה.",
        "apihelp-query+usercontribs-paramvalue-prop-patrolled": "מתייג עריכות בדוקות.",
        "apihelp-query+usercontribs-paramvalue-prop-tags": "רשימת תגים עבור עריכות.",
-       "apihelp-query+usercontribs-param-show": "הצגה רק של פריטים שמתאימים לאמות המידה האלה, למשל רק עריכות לא־משניות.\n\nאם מוגדר <kbd>$2show=patrolled</kbd> או <kbd>$2show=!patrolled</kbd>, גרסאות ישנות מ־<var dir=\"ltr\">[[mw:Manual:$wgRCMaxAge|$wgRCMaxAge]]</var>‏ ({{PLURAL:$1|שנייה אחת|$1 שניות}}) לא תוצגנה.",
+       "apihelp-query+usercontribs-param-show": "הצגה רק של פריטים שמתאימים לאמות המידה האלה, למשל רק עריכות לא־משניות.\n\nאם מוגדר <kbd>$2show=patrolled</kbd> או <kbd>$2show=!patrolled</kbd>, גרסאות ישנות מ־<var dir=\"ltr\">[[mw:Special:MyLanguage/Manual:$wgRCMaxAge|$wgRCMaxAge]]</var>‏ ({{PLURAL:$1|שנייה אחת|$1 שניות}}) לא תוצגנה.",
        "apihelp-query+usercontribs-param-tag": "לרשום רק גרסאות עם התג הזה.",
        "apihelp-query+usercontribs-param-toponly": "לרשום רק שינויים שהם הגרסה האחרונה.",
        "apihelp-query+usercontribs-example-user": "הצגת התרומות של המשתמש <kbd>Example</kbd>.",
        "apihelp-removeauthenticationdata-description": "הסרת נתוני אימות עבור המשתמש הנוכחי.",
        "apihelp-removeauthenticationdata-example-simple": "לנסות להסיר את נתוני המשתמש הנוכחי בשביל <kbd>FooAuthenticationRequest</kbd>.",
        "apihelp-resetpassword-description": "שליחת דוא\"ל איפוס סיסמה למשתמש.",
-       "apihelp-resetpassword-description-noroutes": "אין מסלולים לאיפוס ססמה.\n\nכדי להשתמש במודול הזה, יש להפעיל מסלולים ב־<var>[[mw:Manual:$wgPasswordResetRoutes|$wgPasswordResetRoutes]]</var>.",
+       "apihelp-resetpassword-description-noroutes": "אין מסלולים לאיפוס ססמה.\n\nכדי להשתמש במודול הזה, יש להפעיל מסלולים ב־<var>[[mw:Special:MyLanguage/Manual:$wgPasswordResetRoutes|$wgPasswordResetRoutes]]</var>.",
        "apihelp-resetpassword-param-user": "המשתמש שמאופס.",
        "apihelp-resetpassword-param-email": "כתובת הדוא\"ל של המשתמש שהסיסמה שלו מאופסת.",
        "apihelp-resetpassword-example-user": "שליחת מכתב איפוס ססמה למשתמש <kbd>Example</kbd>.",
        "apihelp-setnotificationtimestamp-example-pagetimestamp": "הגדרת חותם־הזמן להודעה ל־<kbd>Main page</kbd> כך שכל העריכות מאז 1 בינואר 2012 מוגדרות בתור כאלה שלא נצפו.",
        "apihelp-setnotificationtimestamp-example-allpages": "אתחול מצב ההודעה עבור דפים במרחב השם <kbd>{{ns:user}}</kbd>.",
        "apihelp-setpagelanguage-description": "שנה את השפה של דף",
-       "apihelp-setpagelanguage-description-disabled": "שינוי השפה של דף לא מורשה בוויקי זה.\n\nהפעל את <var>[[mw:Manual:$wgPageLanguageUseDB|$wgPageLanguageUseDB]]</var> על מנת להשתמש בפעולה זו",
+       "apihelp-setpagelanguage-description-disabled": "שינוי השפה של דף לא מורשה בוויקי זה.\n\nהפעל את <var>[[mw:Special:MyLanguage/Manual:$wgPageLanguageUseDB|$wgPageLanguageUseDB]]</var> על מנת להשתמש בפעולה זו",
        "apihelp-setpagelanguage-param-title": "כותרת הדף שאת שפתו ברצונך לשנות. לא אפשרי להשתמש באפשרות עם <var>$1pageid</var>.",
        "apihelp-setpagelanguage-param-pageid": "מזהה הדף שאת שפתו ברצונך לשנות. לא אפשרי להשתמש באפשרות עם <var>$1title</var>.",
        "apihelp-setpagelanguage-param-lang": "קוד השפה של השפה שאליה צריך לשנות את הדף. יש להשתמש ב־<kbd>default</kbd> כדי לאתחל את הדף לשפת בררת המחדל של הוויקי.",
        "apihelp-xml-param-includexmlnamespace": "אם זה צוין, מוסיף מרחב שם של XML.",
        "apihelp-xmlfm-description": "לפלוט נתונים בתסדיר XML (עם הדפסה יפה ב־HTML).",
        "api-format-title": "תוצאה של API של מדיה־ויקי",
-       "api-format-prettyprint-header": "זהו ייצוג ב־HTML של תסדיר $1. תסדיר HTML טוב לתיקון שגיאות, אבל אינו מתאים ליישומים.\n\nיש לציין את הפרמטר <var>format</var> כדי לשנות את תסדיר הפלט. כדי לראות ייצוג של תסדיר $1 לא ב־HTML יש לרשום <kbd>format=$2</kbd>.\n\nר' את [[mw:API|התיעוד המלא]], או את [[Special:ApiHelp/main|העזרה של API]] למידע נוסף.",
-       "api-format-prettyprint-header-only-html": "זה ייצוג HTML שמיועד לניפוי שגיאות ואינו מתאים לשימוש ביישומים.\n\nר' את [[mw:API|התיעוד המלא]] או את [[Special:ApiHelp/main|העזרה של API]] למידע נוסף.",
+       "api-format-prettyprint-header": "זהו ייצוג ב־HTML של תסדיר $1. תסדיר HTML טוב לתיקון שגיאות, אבל אינו מתאים ליישומים.\n\nיש לציין את הפרמטר <var>format</var> כדי לשנות את תסדיר הפלט. כדי לראות ייצוג של תסדיר $1 לא ב־HTML יש לרשום <kbd>format=$2</kbd>.\n\nר' את [[mw:Special:MyLanguage/API|התיעוד המלא]], או את [[Special:ApiHelp/main|העזרה של API]] למידע נוסף.",
+       "api-format-prettyprint-header-only-html": "זה ייצוג HTML שמיועד לניפוי שגיאות ואינו מתאים לשימוש ביישומים.\n\nר' את [[mw:Special:MyLanguage/API|התיעוד המלא]] או את [[Special:ApiHelp/main|העזרה של API]] למידע נוסף.",
        "api-format-prettyprint-status": "התשובה הזאת הייתה מוחזרת עם סטטוס ה־HTTP מס' $1 עם הטקסט $2.",
        "api-pageset-param-titles": "רשימת כותרות.",
        "api-pageset-param-pageids": "רשימת מזהי דף לעבוד עליהם.",
        "api-help-param-default-empty": "ברירת מחדל: <span class=\"apihelp-empty\">(ריק)</span>",
        "api-help-param-token": "אסימון \"$1\" שאוחזר מ־[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]",
        "api-help-param-token-webui": "לשם תאימות, גם האסימון שמשמש בממשק דפדפן מתקבל.",
-       "api-help-param-disabled-in-miser-mode": "כבוי בשל [[mw:Manual:$wgMiserMode|מצב חיסכון]].",
-       "api-help-param-limited-in-miser-mode": "<strong>לתשומת לבך:</strong> בשל [[mw:Manual:$wgMiserMode|מצב חיסכון]], שימוש בזה יכול להוביל לפחות מ־<var>$1limit</var> תוצאות לפני המשך; במצבים קיצוניים ייתכן שיחזרו אפס תוצאות.",
+       "api-help-param-disabled-in-miser-mode": "כבוי בשל [[mw:Special:MyLanguage/Manual:$wgMiserMode|מצב חיסכון]].",
+       "api-help-param-limited-in-miser-mode": "<strong>לתשומת לבך:</strong> בשל [[mw:Special:MyLanguage/Manual:$wgMiserMode|מצב חיסכון]], שימוש בזה יכול להוביל לפחות מ־<var>$1limit</var> תוצאות לפני המשך; במצבים קיצוניים ייתכן שיחזרו אפס תוצאות.",
        "api-help-param-direction": "באיזה כיוון למנות:\n;newer:לרשום את הישנים ביותר בהתחלה. לתשומת לבך: $1start חייב להיות לפני $1end.\n;older:לרשום את החדשים ביותר בהתחלה (בררת מחדל). לתשומת לבך: $1start חייב להיות אחרי $1end.",
        "api-help-param-continue": "כשיש עוד תוצאות, להשתמש בזה בשביל להמשיך.",
        "api-help-param-no-description": "<span class=\"apihelp-empty\">(ללא תיאור)</span>",
index d84775f..22b23f0 100644 (file)
@@ -19,7 +19,7 @@
                        "Margherita.mignanelli"
                ]
        },
-       "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:API:Main_page|Documentazione]] (in inglese)\n* [[mw:API:FAQ|FAQ]] (in inglese)\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Mailing list]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce Annunci sull'API]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Bug & richieste]\n</div>\n<strong>Stato:</strong> tutte le funzioni e caratteristiche mostrate su questa pagina dovrebbero funzionare, ma le API sono ancora in fase attiva di sviluppo, e potrebbero cambiare in qualsiasi momento. Iscriviti alla [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ la mailing list sugli annunci delle API MediaWiki] per essere informato sugli aggiornamenti.\n\n<strong>Istruzioni sbagliate:</strong> quando vengono impartite alle API delle istruzioni sbagliate, un'intestazione HTTP verrà inviata col messaggio \"MediaWiki-API-Error\" e, sia il valore dell'intestazione, sia il codice d'errore, verranno impostati con lo stesso valore. Per maggiori informazioni leggi [[mw:API:Errors_and_warnings|API:Errori ed avvertimenti]] (in inglese).\n\n<strong>Test:</strong> per testare facilmente le richieste API, vedi [[Special:ApiSandbox]].",
+       "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:Special:MyLanguage/API:Main_page|Documentazione]] (in inglese)\n* [[mw:Special:MyLanguage/API:FAQ|FAQ]] (in inglese)\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Mailing list]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce Annunci sull'API]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Bug & richieste]\n</div>\n<strong>Stato:</strong> tutte le funzioni e caratteristiche mostrate su questa pagina dovrebbero funzionare, ma le API sono ancora in fase attiva di sviluppo, e potrebbero cambiare in qualsiasi momento. Iscriviti alla [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ la mailing list sugli annunci delle API MediaWiki] per essere informato sugli aggiornamenti.\n\n<strong>Istruzioni sbagliate:</strong> quando vengono impartite alle API delle istruzioni sbagliate, un'intestazione HTTP verrà inviata col messaggio \"MediaWiki-API-Error\" e, sia il valore dell'intestazione, sia il codice d'errore, verranno impostati con lo stesso valore. Per maggiori informazioni leggi [[mw:Special:MyLanguage/API:Errors_and_warnings|API:Errori ed avvertimenti]] (in inglese).\n\n<strong>Test:</strong> per testare facilmente le richieste API, vedi [[Special:ApiSandbox]].",
        "apihelp-main-param-action": "Azione da compiere.",
        "apihelp-main-param-format": "Formato dell'output.",
        "apihelp-main-param-assert": "Verifica che l'utente abbia effettuato l'accesso se si è impostato <kbd>user</kbd>, o che abbia i permessi di bot se si è impostato <kbd>bot</kbd>.",
        "apihelp-move-example-move": "Sposta <kbd>Badtitle</kbd> a <kbd>Goodtitle</kbd> senza lasciare redirect.",
        "apihelp-opensearch-param-search": "Stringa di ricerca.",
        "apihelp-opensearch-param-limit": "Numero massimo di risultati da restituire.",
-       "apihelp-opensearch-param-suggest": "Non fare nulla se <var>[[mw:Manual:$wgEnableOpenSearchSuggest|$wgEnableOpenSearchSuggest]]</var> è falso.",
+       "apihelp-opensearch-param-suggest": "Non fare nulla se <var>[[mw:Special:MyLanguage/Manual:$wgEnableOpenSearchSuggest|$wgEnableOpenSearchSuggest]]</var> è falso.",
        "apihelp-opensearch-param-format": "Il formato dell'output.",
        "apihelp-opensearch-example-te": "Trova le pagine che iniziano con <kbd>Te</kbd>.",
        "apihelp-options-param-optionvalue": "Il valore per l'opzione specificata da <var>$1optionname</var>.",
        "apihelp-query+siteinfo-paramvalue-prop-libraries": "Restituisci librerie installate sul wiki.",
        "apihelp-query+siteinfo-paramvalue-prop-extensions": "Restituisci estensioni installate sul wiki.",
        "apihelp-query+siteinfo-paramvalue-prop-restrictions": "Restituisce informazioni sui tipi di restrizione (protezione) disponibili.",
+       "apihelp-query+siteinfo-paramvalue-prop-languagevariants": "Restituisce un'elenco di codici lingua per cui [[mw:Special:MyLanguage/LanguageConverter|LanguageConverter]] è attivo, e le varianti supportate per ognuno di essi.",
        "apihelp-query+siteinfo-example-simple": "Recupera informazioni sul sito.",
        "apihelp-query+tags-param-prop": "Quali proprietà ottenere:",
        "apihelp-query+templates-param-limit": "Quanti template restituire.",
        "apihelp-removeauthenticationdata-description": "Rimuove i dati di autenticazione per l'utente corrente.",
        "apihelp-removeauthenticationdata-example-simple": "Tentativo di rimuovere gli attuali dati utente per <kbd>FooAuthenticationRequest</kbd>.",
        "apihelp-resetpassword-description": "Invia una mail per reimpostare la password di un utente.",
-       "apihelp-resetpassword-description-noroutes": "Non sono disponibili rotte per la reimpostazione della password.\n\nAbilita le rotte in <var>[[mw:Manual:$wgPasswordResetRoutes|$wgPasswordResetRoutes]]</var> per usare questo modulo.",
+       "apihelp-resetpassword-description-noroutes": "Non sono disponibili rotte per la reimpostazione della password.\n\nAbilita le rotte in <var>[[mw:Special:MyLanguage/Manual:$wgPasswordResetRoutes|$wgPasswordResetRoutes]]</var> per usare questo modulo.",
        "apihelp-resetpassword-param-user": "Utente in corso di ripristino.",
        "apihelp-resetpassword-param-email": "Indirizzo di posta elettronica dell'utente in corso di ripristino.",
        "apihelp-resetpassword-example-user": "Invia una mail per reimpostare la password all'utente <kbd>Example</kbd>.",
index f171f08..7136774 100644 (file)
@@ -18,7 +18,7 @@
                        "코코아"
                ]
        },
-       "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:API:Main_page|설명문서]]\n* [[mw:API:FAQ|FAQ]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api 메일링 리스트]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce API 알림 사항]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R 버그 및 요청]\n</div>\n<strong>상태:</strong> 이 페이지에 보이는 모든 기능은 정상적으로 작동하지만, API는 여전히 활발하게 개발되고 있으며, 언제든지 변경될 수 있습니다. 업데이트 공지를 받아보려면 [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ mediawiki-api-announce 메일링 리스트]를 구독하십시오.\n\n<strong>잘못된 요청:</strong> API에 잘못된 요청이 전송되면 \"MediaWiki-API-Error\" 키가 포함된 HTTP 헤더가 전송되며 반환되는 헤더와 오류 코드의 값은 모두 동일한 값으로 설정됩니다. 자세한 정보에 대해서는 [[mw:API:Errors and warnings/ko|API:오류와 경고]]를 참조하십시오.\n\n<strong>테스트하기:</strong> API 요청 테스트를 용이하게 하려면, [[Special:ApiSandbox]]를 보십시오.",
+       "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:Special:MyLanguage/API:Main_page|설명문서]]\n* [[mw:Special:MyLanguage/API:FAQ|FAQ]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api 메일링 리스트]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce API 알림 사항]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R 버그 및 요청]\n</div>\n<strong>상태:</strong> 이 페이지에 보이는 모든 기능은 정상적으로 작동하지만, API는 여전히 활발하게 개발되고 있으며, 언제든지 변경될 수 있습니다. 업데이트 공지를 받아보려면 [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ mediawiki-api-announce 메일링 리스트]를 구독하십시오.\n\n<strong>잘못된 요청:</strong> API에 잘못된 요청이 전송되면 \"MediaWiki-API-Error\" 키가 포함된 HTTP 헤더가 전송되며 반환되는 헤더와 오류 코드의 값은 모두 동일한 값으로 설정됩니다. 자세한 정보에 대해서는 [[mw:Special:MyLanguage/API:Errors and warnings/ko|API:오류와 경고]]를 참조하십시오.\n\n<strong>테스트하기:</strong> API 요청 테스트를 용이하게 하려면, [[Special:ApiSandbox]]를 보십시오.",
        "apihelp-main-param-action": "수행할 동작",
        "apihelp-main-param-format": "출력값의 형식.",
        "apihelp-main-param-maxlag": "최대 랙은 미디어위키가 데이터베이스 복제된 클러스터에 설치되었을 때 사용될 수 있습니다. 특정한 행동이 사이트 복제 랙을 유발할 때, 이 변수는 클라이언트가 복제 랙이 설정된 숫자 아래로 내려갈 때까지 기다리도록 지시합니다. 과도한 랙의 경우, <samp>maxlag</samp> 오류 코드와 <samp>Waiting for $host: $lag seconds lagged</samp> 메시지가 제공됩니다.<br />[[mw:Manual:Maxlag_parameter|매뉴얼: Maxlag 변수]] 에서 더 많은 정보를 얻을 수 있습니다.",
@@ -45,7 +45,7 @@
        "apihelp-block-param-autoblock": "최근 사용한 IP 주소나 로그인을 시도한 이후에 사용한 모든 IP 주소를 자동으로 차단합니다.",
        "apihelp-block-param-noemail": "위키를 통해 이메일을 보내지 못하도록 막습니다. (<code>blockemail</code> 권한 필요)",
        "apihelp-block-param-hidename": "차단 기록에서 사용자 이름을 숨깁니다. (<code>hideuser</code> 권한 필요)",
-       "apihelp-block-param-allowusertalk": "ì\9e\90ì\8b ì\9d\98 í\86 ë¡  ë¬¸ì\84\9c를 í\8e¸ì§\91í\95  ì\88\98 ì\9e\88ë\8f\84ë¡\9d í\97\88ì\9a©í\95©ë\8b\88ë\8b¤. (<var>[[mw:Manual:$wgBlockAllowsUTEdit|$wgBlockAllowsUTEdit]]</var> ê°\92에 따라 다름)",
+       "apihelp-block-param-allowusertalk": "ì\82¬ì\9a©ì\9e\90ê°\80 ì\9e\90ì\8b ì\9d\98 í\86 ë¡  ë¬¸ì\84\9c를 í\8e¸ì§\91í\95  ì\88\98 ì\9e\88ë\8f\84ë¡\9d í\97\88ì\9a©í\95©ë\8b\88ë\8b¤ (<var>[[mw:Special:MyLanguage/Manual:$wgBlockAllowsUTEdit|$wgBlockAllowsUTEdit]]</var>에 따라 다름)",
        "apihelp-block-param-reblock": "사용자가 이미 차단된 경우, 기존 차단 설정을 바꿉니다.",
        "apihelp-block-param-watchuser": "해당 사용자 또는 IP 주소의 사용자 문서 및 토론 문서를 주시합니다.",
        "apihelp-block-param-tags": "차단 기록의 항목에 적용할 태그를 변경합니다.",
        "apihelp-feedcontributions-param-feedformat": "피드 포맷.",
        "apihelp-feedcontributions-param-user": "기여를 읽을 사용자 이름.",
        "apihelp-feedcontributions-param-namespace": "기여를 분류할 이름공간",
+       "apihelp-feedcontributions-param-year": "년부터 (혹은 그 이전).",
+       "apihelp-feedcontributions-param-month": "달부터 (혹은 그 이전).",
        "apihelp-feedcontributions-param-deletedonly": "삭제된 기여만 봅니다.",
        "apihelp-feedcontributions-param-toponly": "최신 판인 편집만 봅니다.",
        "apihelp-feedcontributions-param-newonly": "새 글인 편집만 봅니다.",
        "apihelp-opensearch-param-search": "문자열 검색",
        "apihelp-opensearch-param-limit": "반환할 결과의 최대 수",
        "apihelp-opensearch-param-namespace": "검색할 이름공간.",
+       "apihelp-opensearch-param-suggest": "<var>[[mw:Special:MyLanguage/Manual:$wgEnableOpenSearchSuggest|$wgEnableOpenSearchSuggest]]</var>이 거짓인 경우 아무 것도 하지 않습니다.",
        "apihelp-opensearch-param-format": "출력 포맷.",
        "apihelp-opensearch-example-te": "<kbd>Te</kbd>로 시작하는 문서를 찾기.",
        "apihelp-options-param-reset": "사이트 기본으로 설정 초기화",
        "apihelp-parse-example-page": "페이지의 구문을 분석합니다.",
        "apihelp-parse-example-text": "위키텍스트의 구문을 분석합니다.",
        "apihelp-parse-example-summary": "요약을 구문 분석합니다.",
+       "apihelp-patrol-description": "문서나 판을 점검하기.",
        "apihelp-patrol-param-rcid": "점검할 최근 바뀜 ID입니다.",
        "apihelp-patrol-param-revid": "점검할 판 ID입니다.",
        "apihelp-patrol-example-rcid": "최근의 변경사항을 점검합니다.",
        "apihelp-query+allcategories-param-prop": "얻고자 하는 속성:",
        "apihelp-query+allcategories-paramvalue-prop-size": "페이지 수를 분류에 추가합니다.",
        "apihelp-query+alldeletedrevisions-paraminfo-nonuseronly": "<var>$3user</var>와 함께 사용할 수 없습니다.",
+       "apihelp-query+alldeletedrevisions-param-from": "이 제목부터 목록을 보이기.",
+       "apihelp-query+alldeletedrevisions-param-to": "이 제목까지 목록을 보이기.",
        "apihelp-query+alldeletedrevisions-param-prefix": "이 값으로 시작하는 모든 문서 제목을 검색합니다.",
        "apihelp-query+alldeletedrevisions-param-tag": "이 태그로 태그된 판만을 나열합니다.",
        "apihelp-query+alldeletedrevisions-param-user": "이 사용자에 대한 판만 나열합니다.",
index a803645..34699d6 100644 (file)
@@ -70,6 +70,7 @@
        "apihelp-move-param-movetalk": "D'Diskussiounssäit ëmbenennen, wann et se gëtt.",
        "apihelp-move-param-noredirect": "Keng Viruleedung uleeën.",
        "apihelp-move-param-ignorewarnings": "All Warnungen ignoréieren.",
+       "apihelp-opensearch-param-suggest": "Näischt maache wa(nn) <var>[[mw:Special:MyLanguage/Manual:$wgEnableOpenSearchSuggest|$wgEnableOpenSearchSuggest]]</var> falsch ass.",
        "apihelp-options-description": "Astellunge fir den aktuelle Benotzer änneren.\n\nNëmmen Optiounen aus dem Haaptdeel (core) oder aus enger vun den installéierten Erweiderunge, oder Optioune mat Schlësselen déi viragestallt si mat <code>userjs-</code> (geduecht fir mat Benotzer-Scripte benotzt ze ginn), kënnen agestallt ginn.",
        "apihelp-options-param-optionname": "Den Numm vun der Optioun deen op de Wäert vun <var>$1optionvalue</var> gesat gi muss",
        "apihelp-options-example-reset": "All Astellungen zrécksetzen",
        "apihelp-revisiondelete-param-reason": "Grond fir ze Läschen oder ze Restauréieren.",
        "apihelp-rsd-example-simple": "Den RSD-Schema exportéieren",
        "apihelp-setpagelanguage-description": "D'Sprooch vun enger Säit änneren",
+       "apihelp-setpagelanguage-description-disabled": "Aschalten\n<var>[[mw:Special:MyLanguage/Manual:$wgPageLanguageUseDB|$wgPageLanguageUseDB]]</var> fir dëse Aktioun ze benotzen",
        "apihelp-setpagelanguage-param-reason": "Grond fir d'Ännerung.",
        "apihelp-setpagelanguage-example-language": "Ännert d'Sprooch vun der <kbd>Main Page</kbd> op baskesch.",
        "apihelp-stashedit-param-title": "Titel vun der Säit déi geännert gëtt.",
index 6506036..5ba174a 100644 (file)
@@ -9,15 +9,22 @@
                        "Kingu"
                ]
        },
-       "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:API:Main_page|Dokumentasjon]]\n* [[mw:API:FAQ|Ofte stilte spørsmål]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api E-post-liste]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce API-kunngjøringer]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Feil & forespørsler]\n</div>\n<strong>Status:</strong> Alle funksjonene som vises på denne siden skal virke, men API-en er fortsatt i aktiv utvikling, og kan bli endret når som helst. Abonner på [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ MediaWiki sin API-kunnkjøringsepostliste] for nyheter om oppdateringer.\n\n<strong>Feile kall:</strong> Hvis det blir sendt feile kall til API-et, blir det sendt en HTTP-header med nøkkelen \"MediaWiki-API-Error\" og da blir både header-verdien og feilkoden sendt tilbake med samme verdi. For mer informasjon se [[mw:API:Errors_and_warnings|API: Feil og advarsler]].\n\n<strong>Testing:</strong> For enkelt å teste API-kall, se [[Special:ApiSandbox]].",
+       "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:Special:MyLanguage/API:Main_page|Dokumentasjon]]\n* [[mw:Special:MyLanguage/API:FAQ|Ofte stilte spørsmål]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api E-post-liste]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce API-kunngjøringer]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Feil & forespørsler]\n</div>\n<strong>Status:</strong> Alle funksjonene som vises på denne siden skal virke, men API-en er fortsatt i aktiv utvikling, og kan bli endret når som helst. Abonner på [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ MediaWiki sin API-kunnkjøringsepostliste] for nyheter om oppdateringer.\n\n<strong>Feile kall:</strong> Hvis det blir sendt feile kall til API-et, blir det sendt en HTTP-header med nøkkelen \"MediaWiki-API-Error\" og da blir både header-verdien og feilkoden sendt tilbake med samme verdi. For mer informasjon se [[mw:API:Errors_and_warnings|API: Feil og advarsler]].\n\n<strong>Testing:</strong> For enkelt å teste API-kall, se [[Special:ApiSandbox]].",
        "apihelp-main-param-action": "Hvilken handling skal utføres",
        "apihelp-main-param-format": "Resultatets format.",
+       "apihelp-main-param-maxlag": "Maksimal forsinkelse kan brukes når MediaWiki er installert på et database-replikert cluster. For å unngå operasjoner som forårsaker replikasjonsforsinkelser, kan denne parameteren få klienten til å vente til replikasjonsforinkelsen er mindre enn angitt verdi. I tilfelle ytterliggående forsinkelser, blir feilkoden <samp>maxlag</samp> returnert med en melding som <samp>Venter på $host: $lag sekunders forsinkelse</samp>.<br />Se [[mw:Special:MyLanguage/Manual:Maxlag_parameter|Manual: Maxlag parameter]] for mer informasjon.",
+       "apihelp-main-param-smaxage": "Sett <code>s-maxage</code> HTTP cache control header til dette antall sekunder. Feil blir aldri mellomlagret.",
+       "apihelp-main-param-maxage": "Set <code>max-age</code> HTTP cache control header til dette antall sekunder. Feil blir aldri mellomlagret.",
        "apihelp-main-param-assert": "Verifiser at brukeren er logget inn om satt til <kbd>user</kbd>, eller har botrettighet om satt til <kbd>bot</kbd>.",
-       "apihelp-main-param-assertuser": "Verifiser at den nåværende brukeren er den navngitte brukeren.",
+       "apihelp-main-param-assertuser": "Verifiser at den gjeldende brukeren er den navngitte brukeren.",
        "apihelp-main-param-requestid": "En gitt verdi her vil inkluderes i responsen. Kan brukes til å skille forespørsler fra hverandre.",
        "apihelp-main-param-servedby": "Inkluder navnet på tjeneren som utførte forespørselen i resultatene.",
        "apihelp-main-param-curtimestamp": "Inkluder det nåværende tidsmerket i resultatet.",
+       "apihelp-main-param-responselanginfo": "Inkluder språkene brukt for <var>uselang</var> og <var>errorlang</var> i resultatet.",
+       "apihelp-main-param-origin": "Når man aksesserer API-en som bruker en domene-kryssende AJAX-forespørsel (CORS), sett denne til det opprinnelige domenet. Denne må tas med i alle pre-flight-forespørsler, og derfor være en del av spørre-URI-en (ikke POST-kroppen).\n\nFor autentiserte forespørsler må denne stemme helt med en av de opprinnelige i <code>Origin</code>-headeren, slik at den må settes til noe a la <kbd>https://en.wikipedia.org</kbd> eller <kbd>https://meta.wikimedia.org</kbd>. Hvis denne parameteren ikke stemmer med <code>Origin</code>-headeren, returneres et 403-svar. Hvis denne parameteren stemmer med <code>Origin</code>-headeren og originalen er hvitlistet, vil <code>Access-Control-Allow-Origin</code> og <code>Access-Control-Allow-Credentials</code>-headere bli satt.\n\nFor ikke-autentiserte forepørsler, spesifiser <kbd>*</kbd>. Denne vil gjøre at <code>Access-Control-Allow-Origin</code>-headeren blir satt, men <code>Access-Control-Allow-Credentials</code> blir <code>false</code> og alle bruerspesifikke data blir begrenset.",
        "apihelp-main-param-uselang": "Språk å bruke for meldingsoversettelser. <kbd>[[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]]</kbd> med <kbd>siprop=languages</kbd> returnerer en liste over språkkoder, eller spesifiser <kbd>user</kbd> for å bruke den nåværende brukerens språkpreferanser, eller spesifiser <kbd>content</kbd> for å bruke denne wikiens innholdsspråk.",
+       "apihelp-main-param-errorformat": "Formater som kan brukes for advarsels- og feiltekster.\n; plaintext: Wikitext der HTML-tagger er fjernet og elementer byttet ut.\n; wikitext: Ubehandlet wikitext.\n; html: HTML.\n; raw: Meldingsnøkler og -parametre.\n; none: Ingen tekst, bare feilkoder.\n; bc: Format brukt før MediaWiki 1.29. <var>errorlang</var> og <var>errorsuselocal</var> ses bort fra.",
+       "apihelp-main-param-errorsuselocal": "Hvis gitt, vil feiltekster bruke lokalt tilpassede meldinger fra {{ns:MediaWiki}}-navnerommet.",
        "apihelp-block-description": "Blokker en bruker.",
        "apihelp-block-param-user": "Brukernavn, IP-adresse eller IP-intervall som skal blokkeres. Kan ikke brukes sammen med <var>$1userid</var>",
        "apihelp-block-param-expiry": "Utløpstid. Kan være relativ (f.eks. <kbd>5 months</kbd> eller <kbd>2 weeks</kbd>) eller absolutt (f.eks. <kbd>2014-09-18T12:34:56Z</kbd>). Om den er satt til <kbd>infinite</kbd>, <kbd>indefinite</kbd> eller <kbd>never</kbd> vil blokkeringen ikke ha noen utløpsdato.",
        "apihelp-block-param-allowusertalk": "La brukeren redigere sin egen diskusjonsside (avhenger av <var>[[mw:Manual:$wgBlockAllowsUTEdit|$wgBlockAllowsUTEdit]]</var>).",
        "apihelp-block-param-reblock": "Overstyr den gamle blokkeringen om brukeren allerede er blokkert.",
        "apihelp-block-param-watchuser": "Overvåk brukerens eller IP-adressas bruker- og brukerdiskusjonssider.",
+       "apihelp-block-param-tags": "Endre taggene slik at de brukes på elementet i blokk-loggen.",
        "apihelp-block-example-ip-simple": "Blokker adressa <kbd>192.0.2.5</kbd> i tre dager med årsak <kbd>First strike</kbd>.",
        "apihelp-block-example-user-complex": "Blokker brukeren <kbd>Vandal</kbd> på ubestemnt tid med årsak <kbd>Vandalism</kbd>, og forhindre ny kontooppretting og sending av epost.",
        "apihelp-changeauthenticationdata-description": "Endre autentiseringsdata for den nåværende brukeren.",
-       "apihelp-changeauthenticationdata-example-password": "Forsøk å endre den nåværende brukerens passord til <kbd>ExamplePassword</kbd>.",
+       "apihelp-changeauthenticationdata-example-password": "Forsøk å endre den gjeldende brukerens passord til <kbd>ExamplePassword</kbd>.",
        "apihelp-checktoken-description": "Sjekk gyldigheten til et tegn fra <kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd>.",
        "apihelp-checktoken-param-type": "Type tegn som testes.",
        "apihelp-checktoken-param-token": "Tegn å teste.",
        "apihelp-feedrecentchanges-example-30days": "Vis siste endringer for 30 døgn.",
        "apihelp-feedwatchlist-description": "Returnerer en overvåkningslistemating.",
        "apihelp-feedwatchlist-param-feedformat": "Matingens format.",
+       "apihelp-filerevert-description": "Tilbakestill en fil til en gammel versjon.",
+       "apihelp-filerevert-param-filename": "Målfilnavn, uten prefikset File:.",
+       "apihelp-filerevert-param-comment": "Opplastingskommentar.",
+       "apihelp-filerevert-example-revert": "Tilbakestiller <kbd>Wiki.png</kbd> til versjonen fra <kbd>2011-03-05T15:27:40Z</kbd>.",
+       "apihelp-help-description": "Vis hjelp for de gitte modulene.",
+       "apihelp-help-param-modules": "Moduler det skal vises hjelp for (verdiene til <var>action</var>- og <var>format</var>-parameterne, eller <kbd>main</kbd>). Kan angi undermoduler med en <kbd>+</kbd>.",
+       "apihelp-help-param-submodules": "Inkluder hjelp for undermoduler av den navngitte modulen.",
+       "apihelp-help-param-recursivesubmodules": "Inkluder hjelp for undermoduler rekursivt.",
+       "apihelp-help-param-helpformat": "Format for hjelperesultatet.",
+       "apihelp-help-param-wrap": "Omgi resultatet i en standard API-responsstruktur.",
        "apihelp-help-param-toc": "Inkluder en innholdsfortegnelse i HTML-utdataen.",
        "apihelp-help-example-main": "Hjelp for hovedmodulen.",
+       "apihelp-help-example-submodules": "Hjelp for <kbd>action=query</kbd> og alle dens undermoduler.",
        "apihelp-help-example-recursive": "All hjelp på en side.",
        "apihelp-help-example-help": "Hjelp for selve hjelpemodulen.",
        "apihelp-help-example-query": "Hjelp for to utspørringsundermoduler.",
        "apihelp-imagerotate-description": "Roter ett eller flere bilder.",
+       "apihelp-imagerotate-param-rotation": "Grader bildet skal roteres med klokka.",
+       "apihelp-imagerotate-param-tags": "Tagger som skal legges til oppslaget i opplastingsloggen.",
+       "apihelp-imagerotate-example-simple": "Roter <kbd>File:Example.png</kbd> <kbd>90</kbd> grader.",
+       "apihelp-imagerotate-example-generator": "Roter alle bilder i <kbd>Category:Flip</kbd> <kbd>180</kbd> grader.",
+       "apihelp-import-description": "Importer en side fra en annen wiki eller fra en XML-fil.\n\nMerk at HTTP POST må gjøres som filopplasting (altså med bruk av multipart/form-data) når man sender en fil for parameteren <var>xml</var>.",
        "apihelp-import-param-summary": "Sammendrag for importering av loggelement.",
        "apihelp-import-param-xml": "Opplastet XML-fil.",
+       "apihelp-import-param-interwikisource": "For interwikiimport: wiki det skal importeres fra.",
+       "apihelp-import-param-interwikipage": "For interwikiimport: side som skal importeres.",
+       "apihelp-import-param-fullhistory": "For interwikiimport: importer hele historikken, ikke bare den nåværende versjonen.",
+       "apihelp-import-param-templates": "For interwikiimport: importer alle inkluderte maler i tillegg.",
+       "apihelp-import-param-namespace": "Importer til dette navnerommet: Kan ikke brukes sammen med <var>$1rootpage</var>.",
+       "apihelp-import-param-rootpage": "Importer som underside av denne siden. Kan ikke brukes sammen med <var>$1namespace</var>.",
+       "apihelp-import-param-tags": "Endringstagger som skal klistres på oppføringen i importloggen og nullrevisjonen til de importerte sidene.",
+       "apihelp-import-example-import": "Importer [[meta:Help:ParserFunctions]] til navnerom 100 med full historikk.",
        "apihelp-login-param-name": "Brukernavn.",
        "apihelp-login-param-password": "Passord.",
        "apihelp-login-param-domain": "Domene (valgfritt).",
+       "apihelp-login-example-gettoken": "Henter innloggingstegn.",
        "apihelp-login-example-login": "Logg inn.",
        "apihelp-logout-description": "Logg ut og fjern sesjonsdata.",
        "apihelp-logout-example-logout": "Logg ut den aktuelle brukeren.",
+       "apihelp-managetags-example-delete": "Slett taggen <kbd>vandlaism</kbd> med årsaken <kbd>Misspelt</kbd>",
+       "apihelp-managetags-example-activate": "Aktiver taggen <kbd>spam</kbd> med årsak <kbd>For use in edit patrolling</kbd>",
+       "apihelp-managetags-example-deactivate": "Deaktiver taggen med navn <kbd>spam</kbd> med årsak <kbd>No longer required</kbd>",
+       "apihelp-mergehistory-description": "Flett sidehistorikker.",
+       "apihelp-mergehistory-param-from": "Tittelen på siden historikken skal flettes fra. Kan ikke brukes sammen med <var>$1fromid</var>.",
+       "apihelp-mergehistory-param-fromid": "Side-ID-en til siden historikken skal flettes fra. Kan ikke brukes sammen med <var>$1from</var>.",
+       "apihelp-mergehistory-param-to": "Tittelen på siden historikken skal flettes til. Kan ikke brukes sammen med <var>$1toid</var>.",
+       "apihelp-mergehistory-param-toid": "Side-ID-en til siden historikken skal flettes til. Kan ikke brukes sammen med <var>$1to</var>.",
+       "apihelp-mergehistory-param-reason": "Årsak for fletting av historikk.",
+       "apihelp-mergehistory-example-merge": "Flett hele historikken til <kbd>Oldpage</kbd> inn i <kbd>Newpage</kbd>.",
+       "apihelp-mergehistory-example-merge-timestamp": "Flett siderevisjonene av <kbd>Oldpage</kbd> til og med <kbd>2015-12-31T04:37:41Z</kbd> inn i <kbd>Newpage</kbd>.",
        "apihelp-move-description": "Flytt en side.",
+       "apihelp-move-param-from": "Tittelen på siden det skal endres navn på. Kan ikke brukes sammen med <var>$1fromid</var>.",
+       "apihelp-move-param-fromid": "Side-ID til siden det skal endres navn på. Kan ikke brukes sammen med <var>$1from</var>.",
+       "apihelp-move-param-to": "Tittelen siden skal endre navn til.",
+       "apihelp-move-param-reason": "Årsak for navneendring.",
+       "apihelp-move-param-movetalk": "Bytt navn på diskusjonssiden om den finnes.",
+       "apihelp-move-param-movesubpages": "Bytt navn på undersider, om mulig.",
+       "apihelp-move-param-noredirect": "Ikke opprett en omdirigering.",
+       "apihelp-move-param-watch": "Legg til siden og omdirigeringen i den gjeldende brukerens overvåkningsliste.",
+       "apihelp-move-param-unwatch": "Fjern siden og omdirigeringen fra den gjeldende brukerens overvåkningsliste.",
+       "apihelp-opensearch-param-search": "Søkestreng.",
+       "apihelp-opensearch-param-limit": "Maksimalt antall resultater som skal returneres.",
+       "apihelp-opensearch-param-namespace": "Navnerom det skal søkes i.",
+       "apihelp-opensearch-param-suggest": "Gjør ingenting om <var>[[mw:Special:MyLanguage/Manual:$wgEnableOpenSearchSuggest|$wgEnableOpenSearchSuggest]]</var> er falsk.",
+       "apihelp-opensearch-param-format": "Resultatets format.",
+       "apihelp-opensearch-example-te": "Finn sider som begynner på <kbd>Te</kbd>.",
+       "apihelp-options-param-reset": "Tilbakestiller innstillingene til sidestandarden.",
+       "apihelp-options-example-reset": "Tilbakestill alle innstillinger.",
+       "apihelp-options-example-change": "Endre innstillinger for <kbd>skin</kbd> og <kbd>hideminor</kbd>.",
+       "apihelp-options-example-complex": "Tilbakestill alle innstillinger, og sett så <kbd>skin</kbd> og <kbd>nickname</kbd>.",
+       "apihelp-paraminfo-description": "Hent informasjon om API-moduler.",
+       "apihelp-paraminfo-param-helpformat": "Format for hjelpestrenger.",
        "apihelp-json-description": "Resultatdata i JSON-format.",
        "apihelp-none-description": "Ingen resultat.",
        "api-help-flag-readrights": "Denne modulen krever lesetilgang.",
        "api-help-param-deprecated": "Utgått.",
        "api-help-param-required": "Denne parameteren er påkrevd.",
        "apierror-multival-only-one": "Bare én verdi er tillatt for parameteret <var>$1</var>.",
+       "apierror-mustbeloggedin": "Du må være logget inn for å $1.",
        "apierror-permissiondenied-generic": "Tilgang nektet.",
        "apiwarn-validationfailed": "Bekreftelsesfeil <kbd>$1</kbd>: $2"
 }
index a305bc2..a5291c7 100644 (file)
                        "Mainframe98"
                ]
        },
-       "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:API:Main_page|Documentatie]]\n* [[mw:API:FAQ|FAQ]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api E-maillijst]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce API-aankondigingen]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Bugs & verzoeken]\n</div>\n<strong>Status:</strong> Alle functies die op deze pagina worden weergegeven horen te werken. Aan de API wordt actief gewerkt, en deze kan gewijzigd worden. Abonneer u op  de [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ e-maillijst mediawiki-api-announce] voor meldingen over aanpassingen.\n\n<strong>Foutieve verzoeken:</strong> als de API foutieve verzoeken ontvangt, wordt er geantwoord met een HTTP-header met de sleutel \"MediaWiki-API-Error\" en daarna worden de waarde van de header en de foutcode op dezelfde waarde ingesteld. Zie [[mw:API:Errors_and_warnings|API: Errors and warnings]] voor meer informatie.\n\n<strong>Testen:</strong> u kunt [[Special:ApiSandbox|eenvoudig API-verzoeken testen]].",
+       "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:Special:MyLanguage/API:Main_page|Documentatie]]\n* [[mw:Special:MyLanguage/API:FAQ|FAQ]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api E-maillijst]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce API-aankondigingen]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Bugs & verzoeken]\n</div>\n<strong>Status:</strong> Alle functies die op deze pagina worden weergegeven horen te werken. Aan de API wordt actief gewerkt, en deze kan gewijzigd worden. Abonneer u op  de [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ e-maillijst mediawiki-api-announce] voor meldingen over aanpassingen.\n\n<strong>Foutieve verzoeken:</strong> als de API foutieve verzoeken ontvangt, wordt er geantwoord met een HTTP-header met de sleutel \"MediaWiki-API-Error\" en daarna worden de waarde van de header en de foutcode op dezelfde waarde ingesteld. Zie [[mw:Special:MyLanguage/API:Errors_and_warnings|API: Foutmeldingen en waarschuwingen]] voor meer informatie.\n\n<strong>Testen:</strong> u kunt [[Special:ApiSandbox|eenvoudig API-verzoeken testen]].",
        "apihelp-main-param-action": "Welke handeling uit te voeren.",
        "apihelp-main-param-format": "De opmaak van de uitvoer.",
-       "apihelp-main-param-maxlag": "De maximale vertraging kan gebruikt worden als MediaWiki is geïnstalleerd op een databasecluster die gebruik maakt van replicatie. Om te voorkomen dat handelingen nog meer databasereplicatievertraging veroorzaken, kan deze parameter er voor zorgen dat de client wacht totdat de replicatievertraging lager is dan de aangegeven waarde. In het geval van buitensporige vertraging, wordt de foutcode <samp>maxlag</samp> teruggegeven met een bericht als <samp>Waiting for $host: $lag seconds lagged</samp>.<br />Zie [[mw:Manual:Maxlag_parameter|Handboek: Maxlag parameter]] voor mee informatie.",
+       "apihelp-main-param-maxlag": "De maximale vertraging kan gebruikt worden als MediaWiki is geïnstalleerd op een databasecluster die gebruik maakt van replicatie. Om te voorkomen dat handelingen nog meer databasereplicatievertraging veroorzaken, kan deze parameter er voor zorgen dat de client wacht totdat de replicatievertraging lager is dan de aangegeven waarde. In het geval van buitensporige vertraging, wordt de foutcode <samp>maxlag</samp> teruggegeven met een bericht als <samp>Waiting for $host: $lag seconds lagged</samp>.<br />Zie [[mw:Special:MyLanguage/Manual:Maxlag_parameter|Handleiding:Maxlag parameter]] voor meer informatie.",
        "apihelp-main-param-smaxage": "Stelt de <code>s-maxage</code> HTTP cache controle header in op het aangegeven aantal seconden. Foutmeldingen komen nooit in de cache.",
        "apihelp-main-param-maxage": "Stelt de <code>max-age</code> HTTP cache controle header in op het aangegeven aantal seconden. Foutmeldingen komen nooit in de cache.",
        "apihelp-main-param-assert": "Controleer of de gebruiker is aangemeld als <kbd>user</kbd> is meegegeven, en of de gebruiker het robotgebruikersrecht heeft als <kbd>bot</kbd> is meegegeven.",
@@ -42,7 +42,7 @@
        "apihelp-block-param-autoblock": "Blokkeer automatisch het laatst gebruikte IP-adres en ieder volgend IP-adres van waaruit ze proberen aan te melden.",
        "apihelp-block-param-noemail": "Gebruiker weerhouden van het sturen van e-mail. (Vereist het <code>blockemail</code> recht).",
        "apihelp-block-param-hidename": "Verberg de gebruikersnaam uit het blokkeerlogboek. (Vereist het <code>hideuser</code> recht).",
-       "apihelp-block-param-allowusertalk": "De gebruiker toestaan om hun eigen overlegpagina te bewerken (afhankelijk van <var>[[mw:Manual:$wgBlockAllowsUTEdit|$wgBlockAllowsUTEdit]]</var>).",
+       "apihelp-block-param-allowusertalk": "De gebruiker toestaan om hun eigen overlegpagina te bewerken (afhankelijk van <var>[[mw:Special:MyLanguage/Manual:$wgBlockAllowsUTEdit|$wgBlockAllowsUTEdit]]</var>).",
        "apihelp-block-param-reblock": "De huidige blokkade aanpassen als de gebruiker al geblokkeerd is.",
        "apihelp-block-param-watchuser": "De gebruikerspagina en overlegpagina van de gebruiker of het IP-adres volgen.",
        "apihelp-block-param-tags": "Wijzigingslabels om toe te passen op de regel in het blokkeerlogboek.",
        "apihelp-feedrecentchanges-param-feedformat": "De indeling van de feed.",
        "apihelp-feedrecentchanges-param-namespace": "Naamruimte om de resultaten tot te beperken.",
        "apihelp-feedrecentchanges-param-invert": "Alle naamruimten behalve de geselecteerde.",
+       "apihelp-feedrecentchanges-param-days": "Aantal dagen om de resultaten tot te beperken.",
        "apihelp-feedrecentchanges-param-limit": "Het maximaal aantal weer te geven resultaten.",
        "apihelp-feedrecentchanges-param-hideminor": "Kleine wijzigingen verbergen.",
        "apihelp-feedrecentchanges-param-hidebots": "Wijzigingen gedaan door bots verbergen.",
        "apihelp-purge-param-forcelinkupdate": "Werk de koppelingstabellen bij.",
        "apihelp-purge-param-forcerecursivelinkupdate": "Werk de koppelingentabel bij, en werk de koppelingstabellen bij voor alle pagina's die gebruik maken van deze pagina als sjabloon.",
        "apihelp-query+allcategories-param-dir": "Richting om in te sorteren.",
+       "apihelp-query+allcategories-param-limit": "Hoeveel categorieën te tonen.",
        "apihelp-query+allcategories-paramvalue-prop-size": "Voegt het aantal pagina's in de categorie toe.",
        "apihelp-query+allcategories-paramvalue-prop-hidden": "Markeert categorieën die verborgen zijn met <code>_&#95;HIDDENCAT_&#95;</code>",
        "apihelp-query+alldeletedrevisions-param-tag": "Alleen versies weergeven met dit label.",
index 25e8330..87cacb9 100644 (file)
@@ -37,7 +37,7 @@
        "apihelp-block-param-autoblock": "Zablokuj ostatni adres IP tego użytkownika i automatycznie wszystkie kolejne, z których będzie się logował.",
        "apihelp-block-param-noemail": "Uniemożliwia użytkownikowi wysyłanie wiadomości e-mail za pośrednictwem interfejsu wiki. (Wymagane uprawnienie <code>blockemail</code>).",
        "apihelp-block-param-hidename": "Ukryj nazwę użytkownika z rejestru blokad. (Wymagane uprawnienia <code>hideuser</code>)",
-       "apihelp-block-param-allowusertalk": "Pozwala użytkownikowi edytować własną stronę dyskusji (zależy od <var>[[mw:Manual:$wgBlockAllowsUTEdit|$wgBlockAllowsUTEdit]]</var>).",
+       "apihelp-block-param-allowusertalk": "Pozwala użytkownikowi edytować własną stronę dyskusji (zależy od <var>[[mw:Special:MyLanguage/Manual:$wgBlockAllowsUTEdit|$wgBlockAllowsUTEdit]]</var>).",
        "apihelp-block-param-reblock": "Jeżeli ten użytkownik jest już zablokowany, nadpisz blokadę.",
        "apihelp-block-param-watchuser": "Obserwuj stronę użytkownika i jego IP oraz ich strony dyskusji.",
        "apihelp-block-example-ip-simple": "Zablokuj IP <kbd>192.0.2.5</kbd> na 3 dni z powodem <kbd>First strike</kbd>.",
        "apihelp-opensearch-param-search": "Wyszukaj tekst.",
        "apihelp-opensearch-param-limit": "Maksymalna liczba zwracanych wyników.",
        "apihelp-opensearch-param-namespace": "Przestrzenie nazw do przeszukania.",
-       "apihelp-opensearch-param-suggest": "Nie działa jeżeli <var>[[mw:Manual:$wgEnableOpenSearchSuggest|$wgEnableOpenSearchSuggest]]</var> ustawiono na false.",
+       "apihelp-opensearch-param-suggest": "Nic nie robi, jeżeli <var>[[mw:Special:MyLanguage/Manual:$wgEnableOpenSearchSuggest|$wgEnableOpenSearchSuggest]]</var> ustawiono na false.",
        "apihelp-opensearch-param-redirects": "Jak obsługiwać przekierowania:\n;return:Zwróć samo przekierowanie.\n;resolve:Zwróć stronę docelową. Może zwrócić mniej niż wyników określonych w $1limit.\nZ powodów historycznych, domyślnie jest to \"return\" dla $1format=json, a \"resolve\" dla innych formatów.",
        "apihelp-opensearch-param-format": "Format danych wyjściowych.",
        "apihelp-opensearch-param-warningsaserror": "Jeżeli pojawią się ostrzeżenia związane z <kbd>format=json</kbd>, zwróć błąd API zamiast ignorowania ich.",
index 7d5f7ea..d7cc662 100644 (file)
@@ -12,7 +12,8 @@
                        "LucyDiniz",
                        "Eduardo Addad de Oliveira",
                        "Warley Felipe C.",
-                       "TheEduGobi"
+                       "TheEduGobi",
+                       "Felipe L. Ewald"
                ]
        },
        "apihelp-main-param-action": "Qual ação executar.",
@@ -25,7 +26,7 @@
        "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-user": "Nome de usuário, endereço IP ou faixa de IP para bloquear. Não pode ser usado junto com <var>$1userid</var>",
        "apihelp-block-param-reason": "Razão do bloqueio.",
        "apihelp-block-param-anononly": "Bloqueia apenas usuários anônimos (ou seja desativa edições anônimas para este endereço IP).",
        "apihelp-block-param-nocreate": "Prevenir a criação de conta.",
@@ -35,6 +36,8 @@
        "apihelp-block-param-watchuser": "Vigiar as páginas de utilizador e de discussão, do utilizador ou do endereço IP.",
        "apihelp-block-example-ip-simple": "Bloquear endereço IP <kbd>192.0.2.5</kbd> por três dias com razão <kbd>Primeira medida</kbd>.",
        "apihelp-block-example-user-complex": "Bloquear usuário <kbd>Vandal</kbd> indefinidamente com razão <kbd>Vandalism</kbd> e o impede de criar nova conta e envio de emails.",
+       "apihelp-checktoken-param-token": "Token para testar.",
+       "apihelp-clearhasmsg-example-1": "Limpa a bandeira <code>hasmsg</code> do usuário atual.",
        "apihelp-compare-param-fromtitle": "Primeiro título para comparar.",
        "apihelp-compare-param-fromid": "Primeiro ID de página para comparar.",
        "apihelp-compare-param-fromrev": "Primeira revisão para comparar.",
@@ -62,7 +65,7 @@
        "apihelp-edit-param-text": "Conteúdo da página",
        "apihelp-edit-param-minor": "Edição menor.",
        "apihelp-edit-param-notminor": "Edição não-menor.",
-       "apihelp-edit-param-bot": "Marcar esta edição como feita por bot.",
+       "apihelp-edit-param-bot": "Marcar esta edição como uma edição de bot.",
        "apihelp-edit-param-createonly": "Não editar a página se já existir.",
        "apihelp-edit-param-nocreate": "Mostra um erro se a página não existir.",
        "apihelp-edit-param-watch": "Adiciona a página para a lista de vigiados do usuário atual.",
        "apihelp-protect-example-protect": "Protege uma página.",
        "apihelp-protect-example-unprotect": "Desprotege uma página definindo restrições para <kbd>all</kbd>.",
        "apihelp-protect-example-unprotect2": "Desprotege uma página ao não definir restrições.",
+       "apihelp-purge-description": "Limpe o cache para os títulos especificados.",
        "apihelp-purge-param-forcelinkupdate": "Atualiza as tabelas de links.",
        "apihelp-purge-param-forcerecursivelinkupdate": "Atualiza a tabela de links, e atualiza as tabelas de links para qualquer página que usa essa página como um modelo.",
+       "apihelp-purge-example-simple": "Purga as páginas <kbd>Main Page</kbd> e <kbd>API</kbd>.",
+       "apihelp-purge-example-generator": "Purga as primeiras 10 páginas no namespace principal.",
        "apihelp-query-param-prop": "Quais propriedades obter para as páginas consultadas.",
        "apihelp-query-param-list": "Quais listas obter.",
        "apihelp-query-param-meta": "Quais metadados obter.",
        "apihelp-query+allfileusages-description": "Lista todas as utilizações de arquivo, incluindo os não-existentes.",
        "apihelp-query+allfileusages-param-from": "O título do arquivo a partir do qual começar a enumerar.",
        "apihelp-query+allfileusages-param-to": "O título do arquivo onde parar de enumerar.",
+       "apihelp-query+allfileusages-param-prop": "Que informações incluir:",
        "apihelp-query+allfileusages-paramvalue-prop-title": "Adiciona o título do arquivo.",
        "apihelp-query+allfileusages-param-limit": "Quantos itens retornar.",
+       "apihelp-query+allfileusages-param-dir": "A direção na qual listar.",
        "apihelp-query+allfileusages-example-unique": "Listar títulos únicos de arquivos",
        "apihelp-query+allfileusages-example-generator": "Obter as páginas contendo os arquivos",
+       "apihelp-query+allimages-param-dir": "A direção de listagem.",
        "apihelp-query+allimages-param-user": "Retorna apenas os arquivos enviados por este usuário. Só pode ser usado com $1sort=timestamp. Não pode ser usado em conjunto com $1filterbots.",
        "apihelp-query+allimages-param-filterbots": "Como filtrar arquivos enviados por bots. Só pode ser usado com $1sort=timestamp. Não pode ser usado em conjunto com $1user.",
        "apihelp-query+allimages-param-mime": "Quais tipos MIME pesquisar, ex.: <kbd>image/jpeg</kbd>.",
        "apihelp-query+alllinks-param-from": "O título do link a partir do qual começar a enumerar.",
        "apihelp-query+alllinks-param-to": "O título do link onde parar de enumerar.",
        "apihelp-query+alllinks-param-prefix": "Pesquisa por todos os títulos com link que começam com este valor.",
+       "apihelp-query+alllinks-param-prop": "Que informações incluir:",
        "apihelp-query+alllinks-param-namespace": "O espaço nominal a se enumerar.",
        "apihelp-query+alllinks-param-limit": "Quantos itens retornar.",
+       "apihelp-query+alllinks-param-dir": "A direção na qual listar.",
        "apihelp-query+alllinks-example-generator": "Obtém páginas contendo os links.",
        "apihelp-query+allmessages-description": "Devolver as mensagens deste site.",
        "apihelp-query+allmessages-param-prop": "Quais propriedades obter.",
        "apihelp-query+allpages-param-minsize": "Limitar a páginas com pelo menos essa quantidade de bytes.",
        "apihelp-query+allpages-param-maxsize": "Limitar a páginas com no máximo essa quantidade de bytes.",
        "apihelp-query+allpages-param-limit": "Quantas páginas retornar.",
+       "apihelp-query+allpages-param-dir": "A direção na qual listar.",
        "apihelp-query+allredirects-description": "Lista todos os redirecionamentos para um espaço nominal.",
        "apihelp-query+allredirects-param-from": "O título do redirecionamento a partir do qual começar a enumerar.",
        "apihelp-query+allredirects-param-to": "O título do redirecionamento onde parar de enumerar.",
+       "apihelp-query+allredirects-param-prop": "Que informações incluir:",
        "apihelp-query+allredirects-param-namespace": "O espaço nominal a se enumerar.",
+       "apihelp-query+allredirects-param-limit": "Quantos item a serem retornados.",
+       "apihelp-query+allredirects-param-dir": "A direção na qual listar.",
        "apihelp-query+allrevisions-description": "Listar todas as revisões.",
+       "apihelp-query+mystashedfiles-param-limit": "Quantos arquivos a serem retornados.",
+       "apihelp-query+alltransclusions-param-prop": "Que informações incluir:",
        "apihelp-query+alltransclusions-param-namespace": "O espaço nominal a se enumerar.",
        "apihelp-query+alltransclusions-param-limit": "Quantos itens retornar.",
+       "apihelp-query+alltransclusions-param-dir": "A direção na qual listar.",
+       "apihelp-query+allusers-param-prop": "Que informações incluir:",
+       "apihelp-query+allusers-param-limit": "Quantos nomes de usuário a serem retornados.",
        "apihelp-query+backlinks-param-title": "Título a se pesquisar. Não pode ser usado em conjunto com <var>$1pageid</var>.",
        "apihelp-query+backlinks-param-pageid": "ID da página a se pesquisar. Não pode ser usado em conjunto com <var>$1title</var>.",
        "apihelp-query+backlinks-param-namespace": "O espaço nominal a se enumerar.",
+       "apihelp-query+backlinks-param-dir": "A direção na qual listar.",
        "apihelp-query+blocks-param-ip": "Obtém todos os blocos aplicando a este IP ou intervalos CIDR, incluindo intervalos de blocos.\nNão pode ser usado em conjunto com <var>$3users</var>. Intervalos CIDR mais largos do que IPv4/$1 ou IPv6/$2 não são aceitos.",
+       "apihelp-query+blocks-param-prop": "Quais propriedades obter:",
        "apihelp-query+categories-param-limit": "Quantas categorias retornar.",
+       "apihelp-query+categories-param-dir": "A direção na qual listar.",
+       "apihelp-query+categorymembers-description": "Lista todas as páginas numa categoria específica.",
        "apihelp-query+categorymembers-param-title": "Qual categoria enumerar (obrigatório). Deve incluir o prefixo <kbd>{{ns:category}}:</kbd>. Não pode ser usado em conjunto com <var>$1pageid</var>.",
        "apihelp-query+categorymembers-param-pageid": "ID da página da categoria para enumerar. Não pode ser usado em conjunto com <var>$1title</var>.",
+       "apihelp-query+categorymembers-param-prop": "Que informações incluir:",
+       "apihelp-query+categorymembers-param-dir": "Em qual sentido ordenar.",
        "apihelp-query+contributors-param-limit": "Quantas contribuições retornar.",
        "apihelp-query+duplicatefiles-param-limit": "Quantos arquivos duplicados retornar.",
+       "apihelp-query+duplicatefiles-param-dir": "A direção na qual listar.",
        "apihelp-query+embeddedin-param-title": "Título a se pesquisar. Não pode ser usado em conjunto com $1pageid.",
        "apihelp-query+embeddedin-param-pageid": "ID da página a se pesquisar. Não pode ser usado em conjunto com $1title.",
        "apihelp-query+embeddedin-param-namespace": "O espaço nominal a se enumerar.",
+       "apihelp-query+embeddedin-param-dir": "A direção na qual listar.",
        "apihelp-query+embeddedin-param-filterredir": "Como filtrar por redirecionamentos.",
        "apihelp-query+embeddedin-param-limit": "Quantas páginas retornar.",
        "apihelp-query+embeddedin-example-simple": "Mostrar páginas transcluíndo <kbd>Template:Stub</kbd>.",
        "apihelp-query+embeddedin-example-generator": "Obtém informação sobre páginas transcluindo <kbd>Template:Stub</kbd>.",
        "apihelp-query+extlinks-description": "Retorna todas as URLs externas (não interwikis) a partir das páginas de dados.",
        "apihelp-query+extlinks-param-limit": "Quantos links retornar.",
+       "apihelp-query+exturlusage-param-prop": "Que informações incluir:",
        "apihelp-query+exturlusage-param-limit": "Quantas páginas retornar.",
        "apihelp-query+filearchive-param-limit": "Quantas imagens retornar.",
+       "apihelp-query+filearchive-param-dir": "A direção na qual listar.",
+       "apihelp-query+fileusage-param-prop": "Quais propriedades obter:",
        "apihelp-query+fileusage-param-limit": "Quantos retornar.",
        "apihelp-query+imageinfo-param-limit": "Quantas revisões de arquivos retornar por arquivo.",
        "apihelp-query+images-param-limit": "Quantos arquivos retornar.",
+       "apihelp-query+images-param-dir": "",
        "apihelp-query+imageusage-param-title": "Título a se pesquisar. Não pode ser usado em conjunto com $1pageid.",
        "apihelp-query+imageusage-param-pageid": "ID da página para pesquisar. Não pode ser usado em conjunto com $1title.",
        "apihelp-query+imageusage-param-namespace": "O espaço nominal a se enumerar.",
+       "apihelp-query+imageusage-param-dir": "A direção na qual listar.",
        "apihelp-query+info-paramvalue-prop-readable": "Se o usuário pode ler esta página.",
        "apihelp-query+info-paramvalue-prop-preload": "Fornece o texto retornado por EditFormPreloadText.",
        "apihelp-query+info-paramvalue-prop-displaytitle": "Fornece o modo como o título da página é exibido.",
        "apihelp-query+iwbacklinks-description": "Encontra todas as páginas que apontam para o determinado link interwiki.\n\nPode ser usado para encontrar todos os links com um prefixo, ou todos os links para um título (com um determinado prefixo). Usar nenhum parâmetro é efetivamente \"todos os links interwiki\".",
        "apihelp-query+iwbacklinks-param-prefix": "Prefixo para o interwiki.",
        "apihelp-query+iwbacklinks-param-limit": "Quantas páginas retornar.",
+       "apihelp-query+iwbacklinks-param-prop": "Quais propriedades obter:",
+       "apihelp-query+iwbacklinks-param-dir": "A direção na qual listar.",
        "apihelp-query+iwlinks-paramvalue-prop-url": "Adiciona o URL completo.",
+       "apihelp-query+iwlinks-param-limit": "Quantos interwiki links a serem retornados.",
+       "apihelp-query+iwlinks-param-dir": "A direção na qual listar.",
        "apihelp-query+langbacklinks-param-limit": "Quantas páginas retornar.",
+       "apihelp-query+langbacklinks-param-prop": "Quais propriedades obter:",
+       "apihelp-query+langbacklinks-param-dir": "A direção na qual listar.",
        "apihelp-query+langlinks-param-limit": "Quantos links de idioma retornar.",
+       "apihelp-query+langlinks-param-dir": "A direção na qual listar.",
        "apihelp-query+links-param-limit": "Quantos links retornar.",
+       "apihelp-query+links-param-dir": "A direção na qual listar.",
+       "apihelp-query+linkshere-param-prop": "Quais propriedades obter:",
        "apihelp-query+linkshere-param-limit": "Quantos retornar.",
+       "apihelp-query+logevents-param-prop": "Quais propriedades obter:",
+       "apihelp-query+logevents-param-limit": "Quantas entradas de eventos a serem retornadas.",
        "apihelp-query+logevents-example-simple": "Listar os eventos recentes do registo.",
+       "apihelp-query+pageswithprop-param-prop": "Que informações incluir:",
+       "apihelp-query+pageswithprop-param-dir": "Em qual sentido ordenar.",
        "apihelp-query+prefixsearch-param-limit": "O número máximo a se retornar.",
        "apihelp-query+protectedtitles-param-limit": "Quantas páginas retornar.",
+       "apihelp-query+protectedtitles-param-prop": "Quais propriedades obter:",
        "apihelp-query+protectedtitles-paramvalue-prop-level": "Adicionar o nível de proteção",
        "apihelp-query+protectedtitles-example-simple": "Listar títulos protegidos",
        "apihelp-query+querypage-param-limit": "O número máximo a se retornar.",
+       "apihelp-query+random-param-limit": "Limita quantas páginas aleatórias serão retornadas.",
        "apihelp-query+random-param-filterredir": "Como filtrar por redirecionamentos.",
        "apihelp-query+recentchanges-param-user": "Listar apenas alterações de usuário.",
        "apihelp-query+recentchanges-param-excludeuser": "Não listar as alterações deste usuário.",
        "apihelp-query+recentchanges-param-tag": "Listar apenas as alterações marcadas com esta etiqueta.",
        "apihelp-query+recentchanges-paramvalue-prop-flags": "Adicionar indicadores para a edição.",
        "apihelp-query+recentchanges-paramvalue-prop-tags": "Listar as etiquetas para entrada.",
+       "apihelp-query+recentchanges-param-limit": "Quantas alterações a serem retornadas.",
        "apihelp-query+recentchanges-example-simple": "Listar mudanças recentes.",
+       "apihelp-query+redirects-param-prop": "Quais propriedades obter:",
        "apihelp-query+redirects-paramvalue-prop-title": "Título de cada redirecionamento.",
        "apihelp-query+redirects-paramvalue-prop-fragment": "Fragmento de cada redirecionamento, se há algum.",
        "apihelp-query+redirects-param-namespace": "Listar páginas apenas neste espaço nominal.",
+       "apihelp-query+redirects-param-limit": "Quantos redirecionamentos a serem retornados.",
        "apihelp-query+revisions-example-last5": "Mostrar as 5 últimas revisões do <kbd>Main Page</kbd>.",
        "apihelp-query+revisions-example-first5": "Mostrar as 5 primeiras revisões do <kbd>Main Page</kbd>.",
        "apihelp-query+revisions-example-first5-after": "Mostrar as 5 primeiras revisões do <kbd>Main Page</kbd> feitas depois de 05/01/2006.",
        "apihelp-query+revisions+base-param-prop": "Que propriedades mostrar para cada modificação:",
        "apihelp-query+revisions+base-paramvalue-prop-content": "Texto da revisão.",
        "apihelp-query+revisions+base-paramvalue-prop-tags": "Etiquetas para a revisão.",
+       "apihelp-query+revisions+base-param-limit": "Limita quantas revisões serão retornadas.",
        "apihelp-query+search-description": "Fazer uma buscar completa de texto.",
        "apihelp-query+search-param-prop": "Que propriedades retornar:",
        "apihelp-query+search-paramvalue-prop-size": "Adiciona o tamanho da página em bytes.",
        "apihelp-query+siteinfo-paramvalue-prop-statistics": "Voltar às estatísticas do site.",
        "apihelp-query+siteinfo-param-numberingroup": "Listar o número de usuários nos grupos de usuário.",
        "apihelp-query+siteinfo-example-simple": "Obter informação do site.",
+       "apihelp-query+tags-param-prop": "Quais propriedades obter:",
        "apihelp-query+templates-param-limit": "Quantas predefinições retornar.",
+       "apihelp-query+templates-param-dir": "A direção na qual listar.",
+       "apihelp-query+transcludedin-param-prop": "Quais propriedades obter:",
        "apihelp-query+transcludedin-param-limit": "Quantos retornar.",
+       "apihelp-query+usercontribs-description": "Obtêm todas as edições de um usuário",
+       "apihelp-query+userinfo-param-prop": "Que informações incluir:",
        "apihelp-query+users-description": "Obter informação sobre uma lista de usuários.",
+       "apihelp-query+users-param-prop": "Que informações incluir:",
        "apihelp-query+watchlist-param-limit": "Quantos resultados retornar por solicitação.",
        "apihelp-query+watchlist-paramvalue-prop-title": "Adicionar título da página.",
        "apihelp-query+watchlist-paramvalue-prop-comment": "Adicionar comentário à edição.",
        "apihelp-query+watchlist-paramvalue-type-log": "Registro de entradas.",
        "apihelp-query+watchlist-paramvalue-type-categorize": "Alterações de membros pertencentes à uma categoria.",
        "apihelp-query+watchlistraw-param-limit": "Quantos resultados retornar por solicitação.",
+       "apihelp-query+watchlistraw-param-dir": "A direção na qual listar.",
        "apihelp-rollback-param-title": "Título da página para reverter. Não pode ser usado em conjunto com <var>$1pageid</var>.",
        "apihelp-rollback-param-pageid": "ID da página para reverter. Não pode ser usado em conjunto com <var>$1title</var>.",
        "apihelp-setnotificationtimestamp-param-entirewatchlist": "Trabalhar em todas as páginas vigiadas.",
        "apihelp-upload-param-ignorewarnings": "Ignorar todos os avisos.",
        "apihelp-userrights-param-user": "Nome de usuário.",
        "apihelp-userrights-param-userid": "ID de usuário.",
-       "apihelp-userrights-param-add": "Adicionar o usuário para estes grupos.",
+       "apihelp-userrights-param-add": "Adicione o usuário a esses grupos ou, se ele já for membro, atualizar a expiração de sua associação nesse grupo.",
        "apihelp-userrights-param-remove": "Remover o usuário destes grupos.",
        "apihelp-userrights-param-reason": "Motivo para a mudança.",
        "apihelp-none-description": "Nenhuma saída.",
        "api-help-license-unknown": "Fonte: <span class=\"apihelp-unknown\">desconhecida</span>",
        "api-help-parameters": "{{PLURAL:$1|Parâmetro|Parâmetros}}:",
        "api-help-param-deprecated": "Obsoleto",
-       "api-help-param-required": "Este parâmetro é obrigatório."
+       "api-help-param-required": "Este parâmetro é obrigatório.",
+       "apierror-badurl": "Valor \"$2\" não é válido para o parâmetro <var>$1</var> da URL.",
+       "apierror-cantblock-email": "Você não tem permissão para impedir que os usuários enviem e-mails através da wiki.",
+       "apierror-cantblock": "Você não tem permissão para bloquear usuários.",
+       "apierror-cantchangecontentmodel": "Você não tem permissão para mudar o modelo de conteúdo de uma página.",
+       "apierror-canthide": "Você não tem permissão para ocultar nomes de usuários do registro de bloqueios.",
+       "apierror-cantimport-upload": "Você não tem permissão para importar páginas enviadas.",
+       "apierror-cantimport": "Você não tem permissão para importar páginas.",
+       "apierror-noedit": "Você não tem permissão para editar páginas.",
+       "apierror-noimageredirect": "Você não tem permissão para criar redirecionamentos de imagens.",
+       "apierror-permissiondenied": "Você não tem permissão para $1.",
+       "apierror-permissiondenied-unblock": "Você não tem permissão para desbloquear usuários.",
+       "apierror-specialpage-cantexecute": "Você não tem permissão para ver os resultados desta página especial.",
+       "apiwarn-invalidcategory": "\"$1\" não é uma categoria.",
+       "apiwarn-invalidtitle": "\"$1\" não é um título válido.",
+       "apiwarn-notfile": "\"$1\" não é um arquivo.",
+       "apiwarn-tokennotallowed": "A ação \"$1\" não é permitida para o usuário atual.",
+       "api-credits-header": "Créditos"
 }
index cb5997b..e6873fb 100644 (file)
@@ -6,7 +6,8 @@
                        "Macofe",
                        "Jkb8",
                        "Hamilton Abreu",
-                       "Mansil"
+                       "Mansil",
+                       "Felipe L. Ewald"
                ]
        },
        "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:API:Main_page|Documentação]]\n* [[mw:API:FAQ|FAQ]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Lista de discussão]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce Anúncios da API]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Erros e pedidos]\n</div>\n<strong>Estado:</strong> Todas as funcionalidades mostradas nesta página devem ter o comportamento documentado mas a API ainda está em desenvolvimento ativo e pode ser alterada a qualquer momento. Inscreva-se na [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ lista de discussão mediawiki-api-announce] para ser informado acerca das atualizações.\n\n<strong>Pedidos incorretos:</strong> Quando são enviados pedidos incorretos à API, será devolvido um cabeçalho HTTP com a chave \"MediaWiki-API-Error\" e depois tanto o valor desse cabeçalho como o código de erro devolvido serão definidos com o mesmo valor. Para mais informação, consulte [[mw:API:Errors_and_warnings|API:Erros e avisos]].\n\n<strong>Testes:</strong> Para testar facilmente pedidos à API, visite [[Special:ApiSandbox|Testes da API]].",
index 723839a..671ac98 100644 (file)
                        "Mailman",
                        "Ping08",
                        "Ivan-r",
-                       "Redredsonia"
+                       "Redredsonia",
+                       "Alexey zakharenkov"
                ]
        },
-       "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:API:Main_page|Документация]]\n* [[mw:API:FAQ|ЧаВО]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Почтовая рассылка]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce Новости API]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Ошибки и запросы]\n</div>\n<strong>Статус:</strong> Все отображаемые на этой странице функции должны работать, однако API находится в статусе активной разработки и может измениться в любой момент. Подпишитесь на [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ почтовую рассылку mediawiki-api-announce], чтобы быть в курсе обновлений.\n\n<strong>Ошибочные запросы:</strong> Если API получает запрос с ошибкой, вернётся заголовок HTTP с ключом «MediaWiki-API-Error», после чего значение заголовка и код ошибки будут отправлены обратно и установлены в то же значение. Более подробную информацию см. [[mw:API:Errors_and_warnings|API: Ошибки и предупреждения]].\n\n<strong>Тестирование:</strong> для удобства тестирования API-запросов, см. [[Special:ApiSandbox]].",
+       "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:Special:MyLanguage/API:Main_page|Документация]]\n* [[mw:Special:MyLanguage/API:FAQ|ЧаВО]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Почтовая рассылка]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce Новости API]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Ошибки и запросы]\n</div>\n<strong>Статус:</strong> Все отображаемые на этой странице функции должны работать, однако API находится в статусе активной разработки и может измениться в любой момент. Подпишитесь на [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ почтовую рассылку mediawiki-api-announce], чтобы быть в курсе обновлений.\n\n<strong>Ошибочные запросы:</strong> Если API получает запрос с ошибкой, вернётся заголовок HTTP с ключом «MediaWiki-API-Error», после чего значение заголовка и код ошибки будут отправлены обратно и установлены в то же значение. Более подробную информацию см. [[mw:Special:MyLanguage/API:Errors_and_warnings|API: Ошибки и предупреждения]].\n\n<strong>Тестирование:</strong> для удобства тестирования API-запросов, см. [[Special:ApiSandbox]].",
        "apihelp-main-param-action": "Действие, которое следует выполнить.",
        "apihelp-main-param-format": "Формат вывода.",
-       "apihelp-main-param-maxlag": "Значение максимального отставания может использоваться, когда MediaWiki устанавливается на кластер из реплицируемых баз данных. Чтобы избежать ухудшения ситуации с отставанием репликации сайта, этот параметр может заставить клиента ждать, когда задержка репликации станет ниже указанного значения. В случае чрезмерной задержки возвращается код ошибки «<samp>maxlag</samp>» с сообщением «<samp>Waiting for $host: $lag seconds lagged</samp>».<br />См. подробнее на странице с описанием [[mw:Manual:Maxlag_parameter|параметра maxlag]].",
+       "apihelp-main-param-maxlag": "Значение максимального отставания может использоваться, когда MediaWiki устанавливается на кластер из реплицируемых баз данных. Чтобы избежать ухудшения ситуации с отставанием репликации сайта, этот параметр может заставить клиента ждать, когда задержка репликации станет ниже указанного значения. В случае чрезмерной задержки возвращается код ошибки «<samp>maxlag</samp>» с сообщением «<samp>Waiting for $host: $lag seconds lagged</samp>».<br />См. подробнее на странице с описанием [[mw:Special:MyLanguage/Manual:Maxlag_parameter|Manual: параметра Maxlag ]].",
        "apihelp-main-param-smaxage": "Устанавливает значение HTTP-заголовка Cache-Control <code>s-maxage</code> в заданное число секунд. Ошибки никогда не кэшируются.",
        "apihelp-main-param-maxage": "Устанавливает значение HTTP-заголовка Cache-Control <code>s-maxage</code> в заданное число секунд. Ошибки никогда не кэшируются.",
        "apihelp-main-param-assert": "Удостовериться, что пользователь авторизован, если задано <kbd>user</kbd>, или что имеет права бота, если задано <kbd>bot</kbd>.",
@@ -51,7 +52,7 @@
        "apihelp-block-param-autoblock": "Автоматически блокировать последний использованный IP-адрес и все последующие, с которых будут совершаться попытки авторизации.",
        "apihelp-block-param-noemail": "Запретить участнику отправлять электронную почту через интерфейс вики. (Требуется право <code>blockemail</code>).",
        "apihelp-block-param-hidename": "Скрыть имя участника из журнала блокировок. (Требуется право <code>hideuser</code>).",
-       "apihelp-block-param-allowusertalk": "Позволяет участникам редактировать их собственные страницы обсуждения (зависит от <var>[[mw:Manual:$wgBlockAllowsUTEdit|$wgBlockAllowsUTEdit]]</var>).",
+       "apihelp-block-param-allowusertalk": "Позволяет участникам редактировать их собственные страницы обсуждения (зависит от <var>[[mw:Special:MyLanguage/Manual:$wgBlockAllowsUTEdit|$wgBlockAllowsUTEdit]]</var>).",
        "apihelp-block-param-reblock": "Если участник уже заблокирован, перезаписать существующую блокировку.",
        "apihelp-block-param-watchuser": "Следить за страницей пользователя или IP-участника и страницей обсуждения.",
        "apihelp-block-example-ip-simple": "Заблокировать IP-адрес <kbd>192.0.2.5</kbd> в течение трех дней с причиной <kbd>первого удара</kbd>.",
        "apihelp-query+revisions+base-param-limit": "Ограничение на количество версий которое будут вовзращено",
        "apihelp-query+search-description": "Выполнить полнотекстовый поиск.",
        "apihelp-query+siteinfo-paramvalue-prop-fileextensions": "Возвращает список расширений (типы файлов), которые доступны к загрузке",
+       "apihelp-query+siteinfo-paramvalue-prop-languagevariants": "Возвращает список кодов языков, для которых включён [[mw:Special:MyLanguage/LanguageConverter|LanguageConverter]], а также варианты,поддерживаемые для каждого языка.",
        "apihelp-query+tags-description": "Список изменерий тегов.",
        "apihelp-query+tags-example-simple": "Лист доступных тегов",
        "apihelp-query+templates-param-namespace": "Показывать шаблоны только из данного списка имен",
index 78f16d3..cd547fe 100644 (file)
                        "AS"
                ]
        },
-       "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:API:Main_page|Документація]]\n* [[mw:API:FAQ|ЧаПи]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Список розсилки]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce Оголошення API]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Баґи і запити]\n</div>\n<strong>Статус:</strong> Усі функції, вказані на цій сторінці, мають працювати, але API далі перебуває в активній розробці і може змінитися у будь-який момент. Підпишіться на [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ список розсилки mediawiki-api-announce], щоб помічати оновлення.\n\n<strong>Хибні запити:</strong> Коли до API надсилаються хибні запити, буде відіслано HTTP-шапку з ключем «MediaWiki-API-Error», а тоді і значення шапки, і код помилки, надіслані назад, будуть встановлені з тим же значенням. Більше інформації див. на [[mw:API:Errors_and_warnings|API: Errors and warnings]].\n\n<strong>Тестування:</strong> Для зручності тестування запитів API, див. [[Special:ApiSandbox]].",
+       "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:Special:MyLanguage/API:Main_page|Документація]]\n* [[mw:Special:MyLanguage/API:FAQ|ЧаПи]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Список розсилки]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce Оголошення API]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Баґи і запити]\n</div>\n<strong>Статус:</strong> Усі функції, вказані на цій сторінці, мають працювати, але API далі перебуває в активній розробці і може змінитися у будь-який момент. Підпишіться на [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ список розсилки mediawiki-api-announce], щоб помічати оновлення.\n\n<strong>Хибні запити:</strong> Коли до API надсилаються хибні запити, буде відіслано HTTP-шапку з ключем «MediaWiki-API-Error», а тоді і значення шапки, і код помилки, надіслані назад, будуть встановлені з тим же значенням. Більше інформації див. на [[mw:Special:MyLanguage/API:Errors_and_warnings|API: Errors and warnings]].\n\n<strong>Тестування:</strong> Для зручності тестування запитів API, див. [[Special:ApiSandbox]].",
        "apihelp-main-param-action": "Яку дію виконати.",
        "apihelp-main-param-format": "Формат виводу.",
-       "apihelp-main-param-maxlag": "Максимальна затримка може використовуватися, коли MediaWiki інстальовано на реплікований кластер бази даних. Щоб зберегти дії, які спричиняють більшу затримку реплікації, цей параметр може змусити клієнт почекати, поки затримка реплікації не буде меншою за вказане значення. У випадку непомірної затримки, видається код помилки <samp>maxlag</samp> з повідомленням на зразок <samp>Очікування на $host: $lag секунд(и) затримки</samp>.<br />Див. [[mw:Manual:Maxlag_parameter|Manual: Maxlag parameter]] для детальнішої інформації.",
+       "apihelp-main-param-maxlag": "Максимальна затримка може використовуватися, коли MediaWiki інстальовано на реплікований кластер бази даних. Щоб зберегти дії, які спричиняють більшу затримку реплікації, цей параметр може змусити клієнт почекати, поки затримка реплікації не буде меншою за вказане значення. У випадку непомірної затримки, видається код помилки <samp>maxlag</samp> з повідомленням на зразок <samp>Очікування на $host: $lag секунд(и) затримки</samp>.<br />Див. [[mw:Special:MyLanguage/Manual:Maxlag_parameter|Manual: Maxlag parameter]] для детальнішої інформації.",
        "apihelp-main-param-smaxage": "Встановити <code>s-maxage</code> HTTP кеш-контроль заголовок на стільки секунд. Помилки ніколи не кешуються.",
        "apihelp-main-param-maxage": "Встановити <code>max-age</code> HTTP кеш-контроль заголовок на стільки секунд. Помилки ніколи не кешуються.",
        "apihelp-main-param-assert": "Перевірити, що користувач увійшов у систему, якщо задано <kbd>user</kbd>, або має права бота, якщо задано <kbd>bot</kbd>.",
@@ -42,7 +42,7 @@
        "apihelp-block-param-autoblock": "Автоматично блокувати IP-адреси, які цей користувач використовував останніми, та будь-які наступні адреси, з яких він спробує зайти в систему.",
        "apihelp-block-param-noemail": "Заборонити користувачеві надсилати електронні листи через вікі. (Вимагає права <code>blockemail</code>).",
        "apihelp-block-param-hidename": "Приховати ім'я користувача з журналу блокувань. (Вимагає права <code>hideuser</code>).",
-       "apihelp-block-param-allowusertalk": "Дозволити користувачу редагувати власну сторінку обговорення (залежить від <var>[[mw:Manual:$wgBlockAllowsUTEdit|$wgBlockAllowsUTEdit]]</var>).",
+       "apihelp-block-param-allowusertalk": "Дозволити користувачу редагувати власну сторінку обговорення (залежить від <var>[[mw:Special:MyLanguage/Manual:$wgBlockAllowsUTEdit|$wgBlockAllowsUTEdit]]</var>).",
        "apihelp-block-param-reblock": "Якщо користувач уже заблокований, переписати наявне блокування.",
        "apihelp-block-param-watchuser": "Спостерігати за сторінкою користувача чи IP-адреси і сторінкою обговорення.",
        "apihelp-block-param-tags": "Змінити теги для застосування їх до запису в журналі блокувань.",
        "apihelp-opensearch-param-search": "Рядок пошуку.",
        "apihelp-opensearch-param-limit": "Максимальна кількість результатів для виведення.",
        "apihelp-opensearch-param-namespace": "Простори назв, у яких шукати.",
-       "apihelp-opensearch-param-suggest": "Нічого не робити, якщо <var>[[mw:Manual:$wgEnableOpenSearchSuggest|$wgEnableOpenSearchSuggest]]</var> хибний.",
+       "apihelp-opensearch-param-suggest": "Нічого не робити, якщо <var>[[mw:Special:MyLanguage/Manual:$wgEnableOpenSearchSuggest|$wgEnableOpenSearchSuggest]]</var> хибний.",
        "apihelp-opensearch-param-redirects": "Як обробляти перенаправлення:\n;return:Видати саме перенаправлення.\n;resolve:Видати цільову сторінку. Може видати менше, ніж $1limit результат{{PLURAL:$1limit||и|ів}}.\nЗ історичних причин, за замовчуванням стоїть «return» для $1format=json і «resolve» — для інших форматів.",
        "apihelp-opensearch-param-format": "Формат виводу.",
        "apihelp-opensearch-param-warningsaserror": "Якщо при <kbd>format=json</kbd> з'являються попередження, видати помилку API замість того, щоб їх ігнорувати.",
        "apihelp-query+alldeletedrevisions-param-user": "Перерахувати лише версії цього користувача.",
        "apihelp-query+alldeletedrevisions-param-excludeuser": "Не перераховувати версії цього користувача.",
        "apihelp-query+alldeletedrevisions-param-namespace": "Перерахувати сторінки лише в цьому просторі назв.",
-       "apihelp-query+alldeletedrevisions-param-miser-user-namespace": "<strong>Примітка:</strong> через [[mw:Manual:$wgMiserMode|«скупий режим»]], використання <var>$1user</var> і <var>$1namespace</var> одночасно можуть вилитися у видачу результатів менше ніж <var>$1limit</var> перед продовженням; в особливих випадках можуть видаватися нульові результати.",
+       "apihelp-query+alldeletedrevisions-param-miser-user-namespace": "<strong>Примітка:</strong> через [[mw:Special:MyLanguage/Manual:$wgMiserMode|«скупий режим»]], використання <var>$1user</var> і <var>$1namespace</var> одночасно можуть вилитися у видачу результатів менше ніж <var>$1limit</var> перед продовженням; в особливих випадках можуть видаватися нульові результати.",
        "apihelp-query+alldeletedrevisions-param-generatetitles": "Коли використовується як генератор, генерувати заголовки замість ідентифікаторів версій.",
        "apihelp-query+alldeletedrevisions-example-user": "Перерахувати останні 50 вилучених редагувань користувача <kbd>Example</kbd>.",
        "apihelp-query+alldeletedrevisions-example-ns-main": "Перерахувати останні 50 вилучених версій у головному просторі назв.",
        "apihelp-query+filearchive-paramvalue-prop-archivename": "Додає до імені версію архіву для неостаточного варіанту файлу.",
        "apihelp-query+filearchive-example-simple": "Показати список усіх вилучених файлів.",
        "apihelp-query+filerepoinfo-description": "Видати мета-інформацію про репозиторії зображень, налаштовані на вікі.",
-       "apihelp-query+filerepoinfo-param-prop": "Які властивості репозиторію отримати (на деяких вікі може бути більше):\n;apiurl:URL до репозиторію API — корисне для отримання інформації про зображення з хосту.\n;name:Ключ репозиторію — використано в e.g. <var>[[mw:Manual:$wgForeignFileRepos|$wgForeignFileRepos]]</var> і значення [[Special:ApiHelp/query+imageinfo|imageinfo]].\n;displayname:Людиночита назва репозиторію вікі.\n;rooturl:Корінний URL для шляху зображення.\n;local:Чи репозиторій локальний, чи ні.",
+       "apihelp-query+filerepoinfo-param-prop": "Які властивості репозиторію отримати (на деяких вікі може бути більше):\n;apiurl:URL до репозиторію API — корисне для отримання інформації про зображення з хосту.\n;name:Ключ репозиторію — використано в e.g. <var>[[mw:Special:MyLanguage/Manual:$wgForeignFileRepos|$wgForeignFileRepos]]</var> і значення [[Special:ApiHelp/query+imageinfo|imageinfo]].\n;displayname:Людиночита назва репозиторію вікі.\n;rooturl:Корінний URL для шляху зображення.\n;local:Чи репозиторій локальний, чи ні.",
        "apihelp-query+filerepoinfo-example-simple": "Отримати інформацію про репозиторії файлів.",
        "apihelp-query+fileusage-description": "Знайти всі сторінки, що використовують дані файли.",
        "apihelp-query+fileusage-param-prop": "Які властивості отримати:",
        "apihelp-query+siteinfo-paramvalue-prop-rightsinfo": "Видає інформацію щодо прав (ліцензії) вікі, якщо наявна.",
        "apihelp-query+siteinfo-paramvalue-prop-restrictions": "Видає інформацію про наявні типи обмежень (захисту).",
        "apihelp-query+siteinfo-paramvalue-prop-languages": "Видає список мов, які підтримує MediaWiki (за бажанням локалізовані через <var>$1inlanguagecode</var>).",
-       "apihelp-query+siteinfo-paramvalue-prop-languagevariants": "Виводить список кодів мов, для яких увімкнено [[mw:LanguageConverter|LanguageConverter]], а також варіанти, підтримувані кожною з цих мов.",
+       "apihelp-query+siteinfo-paramvalue-prop-languagevariants": "Виводить список кодів мов, для яких увімкнено [[mw:Special:MyLanguage/LanguageConverter|LanguageConverter]], а також варіанти, підтримувані кожною з цих мов.",
        "apihelp-query+siteinfo-paramvalue-prop-skins": "Видає список усіх доступних тем оформлення (опціонально локалізовані з використанням <var>$1inlanguagecode</var>, в іншому разі — мовою вмісту).",
        "apihelp-query+siteinfo-paramvalue-prop-extensiontags": "Видає список теґів розширення парсеру.",
        "apihelp-query+siteinfo-paramvalue-prop-functionhooks": "Видає список гуків парсерних функцій.",
-       "apihelp-query+siteinfo-paramvalue-prop-showhooks": "Видає список усіх підписаних гуків (вміст <var>[[mw:Manual:$wgHooks|$wgHooks]]</var>).",
+       "apihelp-query+siteinfo-paramvalue-prop-showhooks": "Видає список усіх підписаних гуків (вміст <var>[[mw:Special:MyLanguage/Manual:$wgHooks|$wgHooks]]</var>).",
        "apihelp-query+siteinfo-paramvalue-prop-variables": "Видає список змінних ID.",
        "apihelp-query+siteinfo-paramvalue-prop-protocols": "Видає список протоколів, дозволених у зовнішніх посиланнях.",
        "apihelp-query+siteinfo-paramvalue-prop-defaultoptions": "Видає значення налаштувань користувача за замовчуванням.",
        "apihelp-query+usercontribs-paramvalue-prop-flags": "Додає прапорці редагування.",
        "apihelp-query+usercontribs-paramvalue-prop-patrolled": "Відзначає патрульовані редагування.",
        "apihelp-query+usercontribs-paramvalue-prop-tags": "Перелічує мітки редагування.",
-       "apihelp-query+usercontribs-param-show": "Показати лише елементи, що відповідають цим критеріям, наприклад, лише не незначні редагування: <kbd>$2show=!minor</kbd>.\n\nЯкщо вказано <kbd>$2show=patrolled</kbd> або <kbd>$2show=!patrolled</kbd>, версії, старіші ніж <var>[[mw:Manual:$wgRCMaxAge|$wgRCMaxAge]]</var> ($1 {{PLURAL:$1|секунда|секунди|секунд}}) не будуть показуватися.",
+       "apihelp-query+usercontribs-param-show": "Показати лише елементи, що відповідають цим критеріям, наприклад, лише не незначні редагування: <kbd>$2show=!minor</kbd>.\n\nЯкщо вказано <kbd>$2show=patrolled</kbd> або <kbd>$2show=!patrolled</kbd>, версії, старіші ніж <var>[[mw:Special:MyLanguage/Manual:$wgRCMaxAge|$wgRCMaxAge]]</var> ($1 {{PLURAL:$1|секунда|секунди|секунд}}) не будуть показуватися.",
        "apihelp-query+usercontribs-param-tag": "Перерахувати лише версії, помічені цим теґом.",
        "apihelp-query+usercontribs-param-toponly": "Виводити лише зміни, які є останньою версією.",
        "apihelp-query+usercontribs-example-user": "Показати внесок користувача <kbd>Example</kbd>.",
        "apihelp-removeauthenticationdata-description": "Вилучити параметри автентифікації для поточного користувача.",
        "apihelp-removeauthenticationdata-example-simple": "Спроба вилучити дані поточного користувача для <kbd>FooAuthenticationRequest</kbd>.",
        "apihelp-resetpassword-description": "Відправити користувачу лист для відновлення пароля.",
-       "apihelp-resetpassword-description-noroutes": "Немає доступних способів відновити пароль.\n\nУвімкніть способи у <var>[[mw:Manual:$wgPasswordResetRoutes|$wgPasswordResetRoutes]]</var>, щоб використовувати цей модуль.",
+       "apihelp-resetpassword-description-noroutes": "Немає доступних способів відновити пароль.\n\nУвімкніть способи у <var>[[mw:Special:MyLanguage/Manual:$wgPasswordResetRoutes|$wgPasswordResetRoutes]]</var>, щоб використовувати цей модуль.",
        "apihelp-resetpassword-param-user": "Користувача відновлено.",
        "apihelp-resetpassword-param-email": "Адреса електронної пошти користувача відновлено.",
        "apihelp-resetpassword-example-user": "Надіслати лист для скидання пароля користувачу <kbd>Example</kbd>.",
        "apihelp-setnotificationtimestamp-example-pagetimestamp": "Встановити часову мітку сповіщень для <kbd>Main page</kbd> так, що всі редагування після 1 січня 2012 будуть виглядати як не переглянуті.",
        "apihelp-setnotificationtimestamp-example-allpages": "Стерти статус сповіщень для сторінок у просторі назв <kbd>{{ns:user}}</kbd>.",
        "apihelp-setpagelanguage-description": "Змінити мову сторінки.",
-       "apihelp-setpagelanguage-description-disabled": "Зміна мови сторінки заборонена в цій вікі. \n\nУвімкніть <var>[[mw:Manual:$wgPageLanguageUseDB|$wgPageLanguageUseDB]]</var>, щоб використовувати цю дію.",
+       "apihelp-setpagelanguage-description-disabled": "Зміна мови сторінки заборонена в цій вікі. \n\nУвімкніть <var>[[mw:Special:MyLanguage/Manual:$wgPageLanguageUseDB|$wgPageLanguageUseDB]]</var>, щоб використовувати цю дію.",
        "apihelp-setpagelanguage-param-title": "Назва сторінки, мову якої Ви хочете змінити. Не можна використовувати разом з <var>$1pageid</var>.",
        "apihelp-setpagelanguage-param-pageid": "Ідентифікатор сторінки, мову якої Ви хочете змінити. Не можна використовувати разом з <var>$1title</var>.",
        "apihelp-setpagelanguage-param-lang": "Код мови, якою треба замінити поточну мову сторінки. Використовуйте <kbd>default</kbd>, щоб встановити стандартну мову вмісту цієї вікі як мову сторінки.",
        "apihelp-xml-param-includexmlnamespace": "Якщо вказано, додає простір назв XML.",
        "apihelp-xmlfm-description": "Вивести дані у форматі XML (вивід відформатованого коду за допомогою HTML).",
        "api-format-title": "Результат запиту до API MediaWiki",
-       "api-format-prettyprint-header": "Це HTML-представлення формату $1. HTML є гарним для налагодження, однак не придатний для прикладного використання.\n\nУкажіть значення для параметра <var>format</var>, для того щоб змінити формат. Для перегляду не-HTML-представлення формату, $1, вкажіть <kbd>format=$2</kbd>.\n\nДив. [[mw:API|повну документацію]], або [[Special:ApiHelp/main|довідку з API]] для детальнішої інформації.",
-       "api-format-prettyprint-header-only-html": "Це HTML-представлення призначене для налагодження, однак не придатне для прикладного використання.\n\nДив. [[mw:API|повну документацію]], або [[Special:ApiHelp/main|довідку з API]] для детальнішої інформації.",
+       "api-format-prettyprint-header": "Це HTML-представлення формату $1. HTML є гарним для налагодження, однак не придатний для прикладного використання.\n\nУкажіть значення для параметра <var>format</var>, для того щоб змінити формат. Для перегляду не-HTML-представлення формату, $1, вкажіть <kbd>format=$2</kbd>.\n\nДив. [[mw:Special:MyLanguage/API|повну документацію]], або [[Special:ApiHelp/main|довідку з API]] для детальнішої інформації.",
+       "api-format-prettyprint-header-only-html": "Це HTML-представлення призначене для налагодження, однак не придатне для прикладного використання.\n\nДив. [[mw:Special:MyLanguage/API|повну документацію]], або [[Special:ApiHelp/main|довідку з API]] для детальнішої інформації.",
        "api-format-prettyprint-status": "Відповідь повернеться із HTTP-статусом $1 $2.",
        "api-pageset-param-titles": "Список назв над якими працювати.",
        "api-pageset-param-pageids": "Список ідентифікаторів сторінок над якими працювати.",
        "api-help-param-default-empty": "За замовчуванням: <span class=\"apihelp-empty\">(пусто)</span>",
        "api-help-param-token": "Токен «$1» отримано з [[Special:ApiHelp/query+tokens|action=query&meta=tokens]]",
        "api-help-param-token-webui": "Для сумісності, приймається також токен, використаний у користувацькому веб-інтерфейсі.",
-       "api-help-param-disabled-in-miser-mode": "Вимкнено через [[mw:Manual:$wgMiserMode|скупий режим]].",
-       "api-help-param-limited-in-miser-mode": "<strong>Примітка:</strong> через [[mw:Manual:$wgMiserMode|«скупий режим»]], використання цього може вилитися у видачу результатів менше ніж <var>$1limit</var> перед продовженням; в особливих випадках можуть видаватися нульові результати.",
+       "api-help-param-disabled-in-miser-mode": "Вимкнено через [[mw:Special:MyLanguage/Manual:$wgMiserMode|скупий режим]].",
+       "api-help-param-limited-in-miser-mode": "<strong>Примітка:</strong> через [[mw:Special:MyLanguage/Manual:$wgMiserMode|«скупий режим»]], використання цього може вилитися у видачу результатів менше ніж <var>$1limit</var> перед продовженням; в особливих випадках можуть видаватися нульові результати.",
        "api-help-param-direction": "У якому напрямку перелічувати:\n;newer:Спочатку найстарші. Примітка: $1start має бути перед $1end.\n;older:Спочатку найновіші (за замовчуванням). Примітка: $1start має бути перед $1end.",
        "api-help-param-continue": "Коли доступно більше результатів, використовуйте це, щоб продовжити.",
        "api-help-param-no-description": "<span class=\"apihelp-empty\">(без опису)</span>",
index 93af817..152f1df 100644 (file)
                        "D41D8CD98F"
                ]
        },
-       "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:API:Main_page|文档]]\n* [[mw:API:FAQ|常见问题]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api 邮件列表]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce API公告]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R 程序错误与功能请求]\n</div>\n<strong>状态信息:</strong>本页所展示的所有特性都应正常工作,但是API仍在开发当中,将会随时变化。请订阅[https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ mediawiki-api-announce 邮件列表]以便获得更新通知。\n\n<strong>错误请求:</strong>当API收到错误请求时,HTTP header将会返回一个包含\"MediaWiki-API-Error\"的值,随后header的值与error code将会送回并设置为相同的值。详细信息请参阅[[mw:API:Errors_and_warnings|API: 错误与警告]]。\n\n<strong>测试中:</strong>测试API请求的易用性,请参见[[Special:ApiSandbox]]。",
+       "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:Special:MyLanguage/API:Main_page|文档]]\n* [[mw:Special:MyLanguage/API:FAQ|常见问题]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api 邮件列表]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce API公告]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R 程序错误与功能请求]\n</div>\n<strong>状态信息:</strong>本页所展示的所有特性都应正常工作,但是API仍在开发当中,将会随时变化。请订阅[https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ mediawiki-api-announce 邮件列表]以便获得更新通知。\n\n<strong>错误请求:</strong>当API收到错误请求时,HTTP header将会返回一个包含\"MediaWiki-API-Error\"的值,随后header的值与error code将会送回并设置为相同的值。详细信息请参阅[[mw:Special:MyLanguage/API:Errors_and_warnings|API: 错误与警告]]。\n\n<strong>测试中:</strong>测试API请求的易用性,请参见[[Special:ApiSandbox]]。",
        "apihelp-main-param-action": "要执行的操作。",
        "apihelp-main-param-format": "输出的格式。",
-       "apihelp-main-param-maxlag": "最大延迟可被用于MediaWiki安装于数据库复制集中。要保存导致更多网站复制延迟的操作,此参数可使客户端等待直到复制延迟少于指定值时。万一发生过多延迟,错误代码<samp>maxlag</samp>会返回消息,例如<samp>等待$host中:延迟$lag秒</samp>。<br />参见[[mw:Manual:Maxlag_parameter|Manual: Maxlag parameter]]以获取更多信息。",
+       "apihelp-main-param-maxlag": "最大延迟可被用于MediaWiki安装于数据库复制集中。要保存导致更多网站复制延迟的操作,此参数可使客户端等待直到复制延迟少于指定值时。万一发生过多延迟,错误代码<samp>maxlag</samp>会返回消息,例如<samp>等待$host中:延迟$lag秒</samp>。<br />参见[[mw:Special:MyLanguage/Manual:Maxlag_parameter|Manual: Maxlag parameter]]以获取更多信息。",
        "apihelp-main-param-smaxage": "设置<code>s-maxage</code> HTTP缓存控制头至这些秒。错误不会缓存。",
        "apihelp-main-param-maxage": "设置<code>max-age</code> HTTP缓存控制头至这些秒。错误不会缓存。",
        "apihelp-main-param-assert": "如果设置为<kbd>user</kbd>就验证用户是否登录,或如果设置为<kbd>bot</kbd>就验证是否有机器人用户权限。",
@@ -52,7 +52,7 @@
        "apihelp-block-param-autoblock": "自动封禁最近使用的IP地址,以及以后他们尝试登陆使用的IP地址。",
        "apihelp-block-param-noemail": "阻止用户通过wiki发送电子邮件。(需要<code>blockemail</code>权限)。",
        "apihelp-block-param-hidename": "从封禁日志中隐藏用户名。(需要<code>hideuser</code>权限)。",
-       "apihelp-block-param-allowusertalk": "允许用户编辑自己的讨论页(取决于<var>[[mw:Manual:$wgBlockAllowsUTEdit|$wgBlockAllowsUTEdit]]</var>)。",
+       "apihelp-block-param-allowusertalk": "允许用户编辑自己的讨论页(取决于<var>[[mw:Special:MyLanguage/Manual:$wgBlockAllowsUTEdit|$wgBlockAllowsUTEdit]]</var>)。",
        "apihelp-block-param-reblock": "如果该用户已被封禁,则覆盖已有的封禁。",
        "apihelp-block-param-watchuser": "监视用户或该 IP 的用户页和讨论页。",
        "apihelp-block-param-tags": "要在封禁日志中应用到实体的更改标签。",
        "apihelp-opensearch-param-search": "搜索字符串。",
        "apihelp-opensearch-param-limit": "要返回的结果最大数。",
        "apihelp-opensearch-param-namespace": "搜索的名字空间。",
-       "apihelp-opensearch-param-suggest": "如果<var>[[mw:Manual:$wgEnableOpenSearchSuggest|$wgEnableOpenSearchSuggest]]</var>设置为false则不做任何事情。",
+       "apihelp-opensearch-param-suggest": "如果<var>[[mw:Special:MyLanguage/Manual:$wgEnableOpenSearchSuggest|$wgEnableOpenSearchSuggest]]</var>设置为false则不做任何事情。",
        "apihelp-opensearch-param-redirects": "如何处理重定向:\n;return:返回重定向本身。\n;resolve:返回目标页面。可能返回少于$1limit个结果。\n由于历史原因,$1format=json默认为\"return\",其他格式默认为\"resolve\"。",
        "apihelp-opensearch-param-format": "输出格式。",
        "apihelp-opensearch-param-warningsaserror": "如果警告通过<kbd>format=json</kbd>提升,返回一个API错误而不是忽略它们。",
        "apihelp-query+alldeletedrevisions-param-user": "只列出此用户做出的修订。",
        "apihelp-query+alldeletedrevisions-param-excludeuser": "不要列出此用户做出的修订。",
        "apihelp-query+alldeletedrevisions-param-namespace": "只列出此名字空间的页面。",
-       "apihelp-query+alldeletedrevisions-param-miser-user-namespace": "<strong>注意:</strong>由于[[mw:Manual:$wgMiserMode|miser模式]],同时使用<var>$1user</var>和<var>$1namespace</var>将导致继续前返回少于<var>$1limit</var>个结果,在极端条件下可能不返回任何结果。",
+       "apihelp-query+alldeletedrevisions-param-miser-user-namespace": "<strong>注意:</strong>由于[[mw:Special:MyLanguage/Manual:$wgMiserMode|miser模式]],同时使用<var>$1user</var>和<var>$1namespace</var>将导致继续前返回少于<var>$1limit</var>个结果,在极端条件下可能不返回任何结果。",
        "apihelp-query+alldeletedrevisions-param-generatetitles": "当作为生成器使用时,生成标题而不是修订ID。",
        "apihelp-query+alldeletedrevisions-example-user": "列出由<kbd>Example</kbd>作出的最近50次已删除贡献。",
        "apihelp-query+alldeletedrevisions-example-ns-main": "列出前50次已删除的主名字空间修订。",
        "apihelp-query+filearchive-paramvalue-prop-archivename": "添加用于非最新版本的存档版本的文件名。",
        "apihelp-query+filearchive-example-simple": "显示已删除文件列表。",
        "apihelp-query+filerepoinfo-description": "返回有关wiki配置的图片存储库的元信息。",
-       "apihelp-query+filerepoinfo-param-prop": "要获取的存储库属性(这在一些wiki上可能有更多可用选项):\n;apiurl:链接至API的URL - 对从主机获取图片信息有用。\n;name:存储库关键词 - 用于例如<var>[[mw:Manual:$wgForeignFileRepos|$wgForeignFileRepos]]</var>,并且[[Special:ApiHelp/query+imageinfo|imageinfo]]会返回值。\n;displayname:人类可读的存储库wiki名称。\n;rooturl:图片路径的根URL。\n;local:存储库是否在本地。",
+       "apihelp-query+filerepoinfo-param-prop": "要获取的存储库属性(这在一些wiki上可能有更多可用选项):\n;apiurl:链接至API的URL - 对从主机获取图片信息有用。\n;name:存储库关键词 - 用于例如<var>[[mw:Special:MyLanguage/Manual:$wgForeignFileRepos|$wgForeignFileRepos]]</var>,并且[[Special:ApiHelp/query+imageinfo|imageinfo]]会返回值。\n;displayname:人类可读的存储库wiki名称。\n;rooturl:图片路径的根URL。\n;local:存储库是否在本地。",
        "apihelp-query+filerepoinfo-example-simple": "获得有关文件存储库的信息。",
        "apihelp-query+fileusage-description": "查找所有使用指定文件的页面。",
        "apihelp-query+fileusage-param-prop": "要获取的属性:",
        "apihelp-query+siteinfo-paramvalue-prop-rightsinfo": "当可用时返回wiki的版权(许可协议)信息。",
        "apihelp-query+siteinfo-paramvalue-prop-restrictions": "返回可用的编辑限制(保护)类型信息。",
        "apihelp-query+siteinfo-paramvalue-prop-languages": "返回MediaWiki支持的语言列表(可选择使用<var>$1inlanguagecode</var>本地化)。",
-       "apihelp-query+siteinfo-paramvalue-prop-languagevariants": "当启用了[[mw:LanguageConverter|语言转换器]],并且每个语言变体都受支持时,返回语言代码列表。",
+       "apihelp-query+siteinfo-paramvalue-prop-languagevariants": "当启用了[[mw:Special:MyLanguage/LanguageConverter|语言转换器]],并且每个语言变体都受支持时,返回语言代码列表。",
        "apihelp-query+siteinfo-paramvalue-prop-skins": "返回所有启用的皮肤列表(可选择使用<var>$1inlanguagecode</var>本地化,否则是内容语言)。",
        "apihelp-query+siteinfo-paramvalue-prop-extensiontags": "返回解析器扩展标签列表。",
        "apihelp-query+siteinfo-paramvalue-prop-functionhooks": "返回解析器函数钩列表。",
-       "apihelp-query+siteinfo-paramvalue-prop-showhooks": "返回所有订阅的钩列表(<var>[[mw:Manual:$wgHooks|$wgHooks]]</var>的内容)。",
+       "apihelp-query+siteinfo-paramvalue-prop-showhooks": "返回所有订阅的钩列表(<var>[[mw:Special:MyLanguage/Manual:$wgHooks|$wgHooks]]</var>的内容)。",
        "apihelp-query+siteinfo-paramvalue-prop-variables": "返回变量ID列表。",
        "apihelp-query+siteinfo-paramvalue-prop-protocols": "返回外部链接中允许的协议列表。",
        "apihelp-query+siteinfo-paramvalue-prop-defaultoptions": "返回用户设置的默认值。",
        "apihelp-query+usercontribs-paramvalue-prop-flags": "添加编辑标记。",
        "apihelp-query+usercontribs-paramvalue-prop-patrolled": "标记已巡查编辑。",
        "apihelp-query+usercontribs-paramvalue-prop-tags": "列举用于编辑的标签。",
-       "apihelp-query+usercontribs-param-show": "只显示符合这些标准的项目,例如只显示不是小编辑的编辑:<kbd>$2show=!minor</kbd>。\n\n如果<kbd>$2show=patrolled</kbd>或<kbd>$2show=!patrolled</kbd>被设定,早于<var>[[mw:Manual:$wgRCMaxAge|$wgRCMaxAge]]</var>($1秒)的修订不会被显示。",
+       "apihelp-query+usercontribs-param-show": "只显示符合这些标准的项目,例如只显示不是小编辑的编辑:<kbd>$2show=!minor</kbd>。\n\n如果<kbd>$2show=patrolled</kbd>或<kbd>$2show=!patrolled</kbd>被设定,早于<var>[[mw:Special:MyLanguage/Manual:$wgRCMaxAge|$wgRCMaxAge]]</var>($1秒)的修订不会被显示。",
        "apihelp-query+usercontribs-param-tag": "只列出被此标签标记的修订。",
        "apihelp-query+usercontribs-param-toponly": "只列举作为最新修订的更改。",
        "apihelp-query+usercontribs-example-user": "显示用户<kbd>Example</kbd>的贡献。",
        "apihelp-query+userinfo-paramvalue-prop-blockinfo": "如果当前用户被封禁就标记,并注明是谁封禁,以何种原因封禁的。",
        "apihelp-query+userinfo-paramvalue-prop-hasmsg": "如果当前用户有等待中的消息的话,添加标签<samp>messages</samp>。",
        "apihelp-query+userinfo-paramvalue-prop-groups": "列举当前用户隶属的所有群组。",
+       "apihelp-query+userinfo-paramvalue-prop-groupmemberships": "列举明确分配给当前用户的用户组,包括每个用户组成员的过期时间。",
        "apihelp-query+userinfo-paramvalue-prop-implicitgroups": "列举当前用户的所有自动成为成员的用户组。",
        "apihelp-query+userinfo-paramvalue-prop-rights": "列举当前用户拥有的所有权限。",
        "apihelp-query+userinfo-paramvalue-prop-changeablegroups": "列举当前用户可以添加并移除的用户组。",
        "apihelp-query+users-param-prop": "要包含的信息束:",
        "apihelp-query+users-paramvalue-prop-blockinfo": "如果用户被封禁就标记,并注明是谁封禁,以何种原因封禁的。",
        "apihelp-query+users-paramvalue-prop-groups": "列举每位用户属于的所有组。",
+       "apihelp-query+users-paramvalue-prop-groupmemberships": "列举明确分配给每位用户的用户组,包括每个用户组成员的过期时间。",
        "apihelp-query+users-paramvalue-prop-implicitgroups": "列举用户自动作为成员之一的所有组。",
        "apihelp-query+users-paramvalue-prop-rights": "列举每位用户拥有的所有权限。",
        "apihelp-query+users-paramvalue-prop-editcount": "添加用户的编辑计数。",
        "apihelp-removeauthenticationdata-description": "从当前用户移除身份验证数据。",
        "apihelp-removeauthenticationdata-example-simple": "尝试移除当前用户的<kbd>FooAuthenticationRequest</kbd>数据。",
        "apihelp-resetpassword-description": "向用户发送密码重置邮件。",
-       "apihelp-resetpassword-description-noroutes": "没有密码重置路由可用。\n\n在<var>[[mw:Manual:$wgPasswordResetRoutes|$wgPasswordResetRoutes]]</var>中启用路由以使用此模块。",
+       "apihelp-resetpassword-description-noroutes": "没有密码重置路由可用。\n\n在<var>[[mw:Special:MyLanguage/Manual:$wgPasswordResetRoutes|$wgPasswordResetRoutes]]</var>中启用路由以使用此模块。",
        "apihelp-resetpassword-param-user": "正在重置的用户。",
        "apihelp-resetpassword-param-email": "正在重置用户的电子邮件地址。",
        "apihelp-resetpassword-example-user": "向用户<kbd>Example</kbd>发送密码重置邮件。",
        "apihelp-setnotificationtimestamp-example-pagetimestamp": "设置<kbd>Main page</kbd>的通知时间戳,这样所有从2012年1月1日起的编辑都会是未复核的。",
        "apihelp-setnotificationtimestamp-example-allpages": "重置在<kbd>{{ns:user}}</kbd>名字空间中的页面的通知状态。",
        "apihelp-setpagelanguage-description": "更改页面的语言。",
-       "apihelp-setpagelanguage-description-disabled": "此wiki不允许更改页面的语言。\n\n启用<var>[[mw:Manual:$wgPageLanguageUseDB|$wgPageLanguageUseDB]]</var>以使用此操作。",
+       "apihelp-setpagelanguage-description-disabled": "此wiki不允许更改页面的语言。\n\n启用<var>[[mw:Special:MyLanguage/Manual:$wgPageLanguageUseDB|$wgPageLanguageUseDB]]</var>以使用此操作。",
        "apihelp-setpagelanguage-param-title": "您希望更改语言的页面标题。不能与<var>$1pageid</var>一起使用。",
        "apihelp-setpagelanguage-param-pageid": "您希望更改语言的页面ID。不能与<var>$1title</var>一起使用。",
        "apihelp-setpagelanguage-param-lang": "更改页面的目标语言的语言代码。使用<kbd>default</kbd>以重置页面为wiki的默认内容语言。",
        "apihelp-xml-param-includexmlnamespace": "如果指定,添加一个XML名字空间。",
        "apihelp-xmlfm-description": "输出数据为XML格式(HTML优质打印效果)。",
        "api-format-title": "MediaWiki API 结果",
-       "api-format-prettyprint-header": "这是$1格式的HTML表示。HTML对调试很有用,但不适合应用程序使用。\n\n指定<var>format</var>参数以更改输出格式。要查看$1格式的非HTML表示,设置<kbd>format=$2</kbd>。\n\n参见[[mw:API|完整文档]],或[[Special:ApiHelp/main|API 帮助]]以获取更多信息。",
-       "api-format-prettyprint-header-only-html": "这是用来调试的HTML表现,不适合实际使用。\n\n参见[[mw:API|完整文档]],或[[Special:ApiHelp/main|API帮助]]以获取更多信息。",
+       "api-format-prettyprint-header": "这是$1格式的HTML实现。HTML对调试很有用,但不适合应用程序使用。\n\n指定<var>format</var>参数以更改输出格式。要查看$1格式的非HTML实现,设置<kbd>format=$2</kbd>。\n\n参见[[mw:Special:MyLanguage/API|完整文档]],或[[Special:ApiHelp/main|API帮助]]以获取更多信息。",
+       "api-format-prettyprint-header-only-html": "这是用来调试的HTML实现,不适合实际使用。\n\n参见[[mw:Special:MyLanguage/API|完整文档]],或[[Special:ApiHelp/main|API帮助]]以获取更多信息。",
        "api-format-prettyprint-status": "此响应将会返回HTTP状态$1 $2。",
        "api-pageset-param-titles": "要工作的标题列表。",
        "api-pageset-param-pageids": "要工作的页面ID列表。",
        "api-help-param-default-empty": "默认:<span class=\"apihelp-empty\">(空)</span>",
        "api-help-param-token": "从[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]取回的“$1”令牌",
        "api-help-param-token-webui": "出于兼容性考虑,web UI中使用的令牌也被接受。",
-       "api-help-param-disabled-in-miser-mode": "由于[[mw:Manual:$wgMiserMode|miser模式]]而禁用。",
-       "api-help-param-limited-in-miser-mode": "<strong>注意:</strong>由于[[mw:Manual:$wgMiserMode|miser模式]],使用这个可能导致继续前返回少于<var>$1limit</var>个结果;极端情况下可能不会返回任何结果。",
+       "api-help-param-disabled-in-miser-mode": "由于[[mw:Special:MyLanguage/Manual:$wgMiserMode|miser模式]]而禁用。",
+       "api-help-param-limited-in-miser-mode": "<strong>注意:</strong>由于[[mw:Special:MyLanguage/Manual:$wgMiserMode|miser模式]],使用这个可能导致继续前返回少于<var>$1limit</var>个结果;极端情况下可能不会返回任何结果。",
        "api-help-param-direction": "列举的方向:\n;newer:最早的优先。注意:$1start应早于$1end。\n;older:最新的优先(默认)。注意:$1start应晚于$1end。",
        "api-help-param-continue": "当更多结果可用时,使用这个继续。",
        "api-help-param-no-description": "<span class=\"apihelp-empty\">(没有说明)</span>",
        "apierror-stashzerolength": "文件长度为0,并且不能在暂存库中储存:$1。",
        "apierror-systemblocked": "您已被MediaWiki自动封禁。",
        "apierror-templateexpansion-notwikitext": "模板展开只支持wiki文本内容。$1使用内容模型$2。",
+       "apierror-toofewexpiries": "提供了$1个逾期{{PLURAL:$1|时间戳}},实际则需要$2个。",
        "apierror-unknownaction": "指定的操作<kbd>$1</kbd>不被承认。",
        "apierror-unknownerror-editpage": "未知的编辑页面错误:$1。",
        "apierror-unknownerror-nocode": "未知错误。",
        "apiwarn-nothumb-noimagehandler": "不能创建缩略图,因为$1没有关联的图片处理器。",
        "apiwarn-parse-nocontentmodel": "<var>title</var>或<var>contentmodel</var>未提供,假设$1。",
        "apiwarn-parse-titlewithouttext": "<var>title</var>在没有<var>text</var>的情况下被使用,并且请求了已解析页面的属性。您是想用<var>page</var>而不是<var>title</var>么?",
+       "apiwarn-redirectsandrevids": "重定向解决方案不能与<var>revids</var>参数一起使用。任何<var>revids</var>所指向的重定向都未被解决。",
        "apiwarn-tokennotallowed": "操作“$1”不允许当前用户使用。",
        "apiwarn-toomanyvalues": "参数<var>$1</var>指定了太多的值。上限为$2。",
        "apiwarn-truncatedresult": "此结果被缩短,否则其将大于$1字节的限制。",
index 6d3b2f4..8a10ecb 100644 (file)
@@ -130,7 +130,7 @@ class Throttler implements LoggerAwareInterface {
                        $throttleKey = wfGlobalCacheKey( 'throttler', $this->type, $index, $ipKey, $userKey );
                        $throttleCount = $this->cache->get( $throttleKey );
 
-                       if ( !$throttleCount ) {  // counter not started yet
+                       if ( !$throttleCount ) { // counter not started yet
                                $this->cache->add( $throttleKey, 1, $expiry );
                        } elseif ( $throttleCount < $count ) { // throttle limited not yet reached
                                $this->cache->incr( $throttleKey );
index 7215606..3ee6330 100644 (file)
@@ -143,7 +143,7 @@ class BacklinkCache {
        /**
         * Get the replica DB connection to the database
         * When non existing, will initialize the connection.
-        * @return Database
+        * @return IDatabase
         */
        protected function getDB() {
                if ( !isset( $this->db ) ) {
@@ -339,7 +339,11 @@ class BacklinkCache {
                        return min( $max, $this->fullResultCache[$table]->numRows() );
                }
 
-               $memcKey = wfMemcKey( 'numbacklinks', md5( $this->title->getPrefixedDBkey() ), $table );
+               $memcKey = $cache->makeKey(
+                       'numbacklinks',
+                       md5( $this->title->getPrefixedDBkey() ),
+                       $table
+               );
 
                // 3) ... fallback to memcached ...
                $count = $cache->get( $memcKey );
@@ -393,7 +397,7 @@ class BacklinkCache {
                        return $cacheEntry['batches'];
                }
 
-               $memcKey = wfMemcKey(
+               $memcKey = $cache->makeKey(
                        'backlinks',
                        md5( $this->title->getPrefixedDBkey() ),
                        $table,
@@ -436,7 +440,11 @@ class BacklinkCache {
                $cache->set( $memcKey, $cacheEntry, self::CACHE_EXPIRY );
 
                // Save backlink count to memcached
-               $memcKey = wfMemcKey( 'numbacklinks', md5( $this->title->getPrefixedDBkey() ), $table );
+               $memcKey = $cache->makeKey(
+                       'numbacklinks',
+                       md5( $this->title->getPrefixedDBkey() ),
+                       $table
+               );
                $cache->set( $memcKey, $cacheEntry['numRows'], self::CACHE_EXPIRY );
 
                wfDebug( __METHOD__ . ": got from database\n" );
index 57f66f1..2d08895 100644 (file)
@@ -20,6 +20,8 @@
  * @file
  * @ingroup Cache
  */
+
+use Wikimedia\Rdbms\Database;
 use Wikimedia\Rdbms\IDatabase;
 use MediaWiki\Linker\LinkTarget;
 use MediaWiki\MediaWikiServices;
index 14baeeb..b076a08 100644 (file)
@@ -26,6 +26,7 @@
 use Psr\Log\LoggerAwareInterface;
 use Psr\Log\LoggerInterface;
 use Psr\Log\NullLogger;
+use Wikimedia\Rdbms\Database;
 
 /**
  * This class generates message blobs for use by ResourceLoader modules.
index 70e1d9a..355aff4 100644 (file)
@@ -23,6 +23,7 @@
 use MediaWiki\MediaWikiServices;
 use Wikimedia\ScopedCallback;
 use MediaWiki\Logger\LoggerFactory;
+use Wikimedia\Rdbms\Database;
 
 /**
  * MediaWiki message cache structure version.
@@ -485,7 +486,8 @@ class MessageCache {
                } else {
                        # Effectively disallows use of '/' character in NS_MEDIAWIKI for uses
                        # other than language code.
-                       $conds[] = 'page_title NOT' . $dbr->buildLike( $dbr->anyString(), '/', $dbr->anyString() );
+                       $conds[] = 'page_title NOT' .
+                               $dbr->buildLike( $dbr->anyString(), '/', $dbr->anyString() );
                }
 
                # Conditions to fetch oversized pages to ignore them
@@ -551,7 +553,7 @@ class MessageCache {
        /**
         * Updates cache as necessary when message page is changed
         *
-        * @param string $title Message cache key with initial uppercase letter.
+        * @param string $title Message cache key with initial uppercase letter
         * @param string|bool $text New contents of the page (false if deleted)
         */
        public function replace( $title, $text ) {
@@ -596,9 +598,8 @@ class MessageCache {
                                $page->loadPageData( $page::READ_LATEST );
                                $text = $this->getMessageTextFromContent( $page->getContent() );
                                // Check if an individual cache key should exist and update cache accordingly
-                               $titleKey = $this->wanCache->makeKey(
-                                       'messages-big', $this->mCache[$code]['HASH'], $title );
                                if ( is_string( $text ) && strlen( $text ) > $wgMaxMsgCacheEntrySize ) {
+                                       $titleKey = $this->bigMessageCacheKey( $this->mCache[$code]['HASH'], $title );
                                        $this->wanCache->set( $titleKey, ' ' . $text, $this->mExpiry );
                                }
                                // Mark this cache as definitely being "latest" (non-volatile) so
@@ -967,8 +968,8 @@ class MessageCache {
         * some callers require this behavior. LanguageConverter::parseCachedTable()
         * and self::get() are some examples in core.
         *
-        * @param string $title Message cache key with initial uppercase letter.
-        * @param string $code Code denoting the language to try.
+        * @param string $title Message cache key with initial uppercase letter
+        * @param string $code Code denoting the language to try
         * @return string|bool The message, or false if it does not exist or on error
         */
        public function getMsgFromNamespace( $title, $code ) {
@@ -995,8 +996,8 @@ class MessageCache {
                        return false;
                }
 
-               // Try the individual message cache
-               $titleKey = $this->wanCache->makeKey( 'messages-big', $this->mCache[$code]['HASH'], $title );
+               // Individual message cache key
+               $titleKey = $this->bigMessageCacheKey( $this->mCache[$code]['HASH'], $title );
 
                if ( $this->mCacheVolatile[$code] ) {
                        $entry = false;
@@ -1005,6 +1006,7 @@ class MessageCache {
                                __METHOD__ . ': loading volatile key \'{titleKey}\'',
                                [ 'titleKey' => $titleKey, 'code' => $code ] );
                } else {
+                       // Try the individual message cache
                        $entry = $this->wanCache->get( $titleKey );
                }
 
@@ -1057,7 +1059,8 @@ class MessageCache {
                        $message = false; // negative caching
                }
 
-               if ( $message === false ) { // negative caching
+               if ( $message === false ) {
+                       // Negative caching in case a "too big" message is no longer available (deleted)
                        $this->mCache[$code][$title] = '!NONEXISTENT';
                        $this->wanCache->set( $titleKey, '!NONEXISTENT', $this->mExpiry, $cacheOpts );
                }
@@ -1301,4 +1304,13 @@ class MessageCache {
 
                return $msgText;
        }
+
+       /**
+        * @param string $hash Hash for this version of the entire key/value overrides map
+        * @param string $title Message cache key with initial uppercase letter
+        * @return string
+        */
+       private function bigMessageCacheKey( $hash, $title ) {
+               return $this->wanCache->makeKey( 'messages-big', $hash, $title );
+       }
 }
index 52611ec..c57145c 100644 (file)
@@ -19,6 +19,7 @@
  */
 
 use Wikimedia\Rdbms\IDatabase;
+use Wikimedia\Rdbms\DBQueryError;
 
 /**
  * LCStore implementation which uses the standard DB functions to store data.
index cbff113..d499340 100644 (file)
@@ -212,19 +212,17 @@ class LocalisationCache {
                                case 'detect':
                                        if ( !empty( $conf['storeDirectory'] ) ) {
                                                $storeClass = 'LCStoreCDB';
+                                       } elseif ( $wgCacheDirectory ) {
+                                               $storeConf['directory'] = $wgCacheDirectory;
+                                               $storeClass = 'LCStoreCDB';
                                        } else {
-                                               $cacheDir = $wgCacheDirectory ?: wfTempDir();
-                                               if ( $cacheDir ) {
-                                                       $storeConf['directory'] = $cacheDir;
-                                                       $storeClass = 'LCStoreCDB';
-                                               } else {
-                                                       $storeClass = 'LCStoreDB';
-                                               }
+                                               $storeClass = 'LCStoreDB';
                                        }
                                        break;
                                default:
                                        throw new MWException(
-                                               'Please set $wgLocalisationCacheConf[\'store\'] to something sensible.' );
+                                               'Please set $wgLocalisationCacheConf[\'store\'] to something sensible.'
+                                       );
                        }
                }
 
index 4117a11..1c116ab 100644 (file)
@@ -136,10 +136,15 @@ class ChangesListBooleanFilter extends ChangesListFilter {
        }
 
        /**
+        * Get the default value
+        *
+        * @param bool $structuredUI Are we currently showing the structured UI
         * @return bool|null Default value
         */
-       public function getDefault() {
-               return $this->defaultValue;
+       public function getDefault( $structuredUI = false ) {
+               return $this->isReplacedInStructuredUi && $structuredUI ?
+                       false :
+                       $this->defaultValue;
        }
 
        /**
@@ -218,4 +223,13 @@ class ChangesListBooleanFilter extends ChangesListFilter {
                return $output;
        }
 
+       /**
+        * @inheritdoc
+        */
+       public function isSelected( FormOptions $opts ) {
+               return !$opts[ $this->getName() ] &&
+                       array_filter( $this->getSiblings(), function ( $sibling ) use ( $opts ) {
+                               return $opts[ $sibling->getName() ];
+                       } );
+       }
 }
index b3a16a8..9af9adc 100644 (file)
@@ -227,6 +227,7 @@ abstract class ChangesListFilter {
                if ( $other instanceof ChangesListFilterGroup ) {
                        $this->conflictingGroups[] = [
                                'group' => $other->getName(),
+                               'groupObject' => $other,
                                'globalDescription' => $globalDescription,
                                'contextDescription' => $contextDescription,
                        ];
@@ -234,6 +235,7 @@ abstract class ChangesListFilter {
                        $this->conflictingFilters[] = [
                                'group' => $other->getGroup()->getName(),
                                'filter' => $other->getName(),
+                               'filterObject' => $other,
                                'globalDescription' => $globalDescription,
                                'contextDescription' => $contextDescription,
                        ];
@@ -385,6 +387,8 @@ abstract class ChangesListFilter {
                );
 
                foreach ( $conflicts as $conflictInfo ) {
+                       unset( $conflictInfo['filterObject'] );
+                       unset( $conflictInfo['groupObject'] );
                        $output['conflicts'][] = $conflictInfo;
                        array_push(
                                $output['messageKeys'],
@@ -395,4 +399,105 @@ abstract class ChangesListFilter {
 
                return $output;
        }
+
+       /**
+        * Checks whether this filter is selected in the provided options
+        *
+        * @param FormOptions $opts
+        * @return bool
+        */
+       abstract public function isSelected( FormOptions $opts );
+
+       /**
+        * Get groups conflicting with this filter
+        *
+        * @return ChangesListFilterGroup[]
+        */
+       public function getConflictingGroups() {
+               return array_map(
+                       function ( $conflictDesc ) {
+                               return $conflictDesc[ 'groupObject' ];
+                       },
+                       $this->conflictingGroups
+               );
+       }
+
+       /**
+        * Get filters conflicting with this filter
+        *
+        * @return ChangesListFilter[]
+        */
+       public function getConflictingFilters() {
+               return array_map(
+                       function ( $conflictDesc ) {
+                               return $conflictDesc[ 'filterObject' ];
+                       },
+                       $this->conflictingFilters
+               );
+       }
+
+       /**
+        * Check if the conflict with a group is currently "active"
+        *
+        * @param ChangesListFilterGroup $group
+        * @param FormOptions $opts
+        * @return bool
+        */
+       public function activelyInConflictWithGroup( ChangesListFilterGroup $group, FormOptions $opts ) {
+               if ( $group->anySelected( $opts ) && $this->isSelected( $opts ) ) {
+                       /** @var ChangesListFilter $siblingFilter */
+                       foreach ( $this->getSiblings() as $siblingFilter ) {
+                               if ( $siblingFilter->isSelected( $opts ) && !$siblingFilter->hasConflictWithGroup( $group ) ) {
+                                       return false;
+                               }
+                       }
+                       return true;
+               }
+               return false;
+       }
+
+       private function hasConflictWithGroup( ChangesListFilterGroup $group ) {
+               return in_array( $group, $this->getConflictingGroups() );
+       }
+
+       /**
+        * Check if the conflict with a filter is currently "active"
+        *
+        * @param ChangesListFilter $filter
+        * @param FormOptions $opts
+        * @return bool
+        */
+       public function activelyInConflictWithFilter( ChangeslistFilter $filter, FormOptions $opts ) {
+               if ( $this->isSelected( $opts ) && $filter->isSelected( $opts ) ) {
+                       /** @var ChangesListFilter $siblingFilter */
+                       foreach ( $this->getSiblings() as $siblingFilter ) {
+                               if (
+                                       $siblingFilter->isSelected( $opts ) &&
+                                       !$siblingFilter->hasConflictWithFilter( $filter )
+                               ) {
+                                       return false;
+                               }
+                       }
+                       return true;
+               }
+               return false;
+       }
+
+       private function hasConflictWithFilter( ChangeslistFilter $filter ) {
+               return in_array( $filter, $this->getConflictingFilters() );
+       }
+
+       /**
+        * Get filters in the same group
+        *
+        * @return ChangesListFilter[]
+        */
+       protected function getSiblings() {
+               return array_filter(
+                       $this->getGroup()->getFilters(),
+                       function ( $filter ) {
+                               return $filter !== $this;
+                       }
+               );
+       }
 }
index 4ff5520..0cdc24a 100644 (file)
@@ -261,6 +261,7 @@ abstract class ChangesListFilterGroup {
                if ( $other instanceof ChangesListFilterGroup ) {
                        $this->conflictingGroups[] = [
                                'group' => $other->getName(),
+                               'groupObject' => $other,
                                'globalDescription' => $globalDescription,
                                'contextDescription' => $contextDescription,
                        ];
@@ -268,6 +269,7 @@ abstract class ChangesListFilterGroup {
                        $this->conflictingFilters[] = [
                                'group' => $other->getGroup()->getName(),
                                'filter' => $other->getName(),
+                               'filterObject' => $other,
                                'globalDescription' => $globalDescription,
                                'contextDescription' => $contextDescription,
                        ];
@@ -390,6 +392,8 @@ abstract class ChangesListFilterGroup {
 
                foreach ( $conflicts as $conflictInfo ) {
                        $output['conflicts'][] = $conflictInfo;
+                       unset( $conflictInfo['filterObject'] );
+                       unset( $conflictInfo['groupObject'] );
                        array_push(
                                $output['messageKeys'],
                                $conflictInfo['globalDescription'],
@@ -399,4 +403,47 @@ abstract class ChangesListFilterGroup {
 
                return $output;
        }
+
+       /**
+        * Get groups conflicting with this filter group
+        *
+        * @return ChangesListFilterGroup[]
+        */
+       public function getConflictingGroups() {
+               return array_map(
+                       function ( $conflictDesc ) {
+                               return $conflictDesc[ 'groupObject' ];
+                       },
+                       $this->conflictingGroups
+               );
+       }
+
+       /**
+        * Get filters conflicting with this filter group
+        *
+        * @return ChangesListFilter[]
+        */
+       public function getConflictingFilters() {
+               return array_map(
+                       function ( $conflictDesc ) {
+                               return $conflictDesc[ 'filterObject' ];
+                       },
+                       $this->conflictingFilters
+               );
+       }
+
+       /**
+        * Check if any filter in this group is selected
+        *
+        * @param FormOptions $opts
+        * @return bool
+        */
+       public function anySelected( FormOptions $opts ) {
+               return !!count( array_filter(
+                       $this->getFilters(),
+                       function ( ChangesListFilter $filter ) use ( $opts ) {
+                               return $filter->isSelected( $opts );
+                       }
+               ) );
+       }
 }
index 1c977b9..6754d67 100644 (file)
@@ -14,4 +14,15 @@ class ChangesListStringOptionsFilter extends ChangesListFilter {
        public function displaysOnUnstructuredUi() {
                return false;
        }
+
+       /**
+        * @inheritdoc
+        */
+       public function isSelected( FormOptions $opts ) {
+               $values = explode(
+                       ChangesListStringOptionsFilterGroup::SEPARATOR,
+                       $opts[ $this->getGroup()->getName() ]
+               );
+               return in_array( $this->getName(), $values );
+       }
 }
index dcab158..35f8b3b 100644 (file)
@@ -874,7 +874,7 @@ class RecentChange {
                        'rc_logid' => 0,
                        'rc_log_type' => null,
                        'rc_log_action' => '',
-                       'rc_params' =>  serialize( [
+                       'rc_params' => serialize( [
                                'hidden-cat' => WikiCategoryPage::factory( $categoryTitle )->isHidden()
                        ] )
                ];
index d2239eb..ca3c28b 100644 (file)
@@ -21,6 +21,8 @@
  * @ingroup Change tagging
  */
 
+use Wikimedia\Rdbms\Database;
+
 class ChangeTags {
        /**
         * Can't delete tags with more than this many uses. Similar in intent to
diff --git a/includes/config/EtcdConfig.php b/includes/config/EtcdConfig.php
new file mode 100644 (file)
index 0000000..d3fbd65
--- /dev/null
@@ -0,0 +1,275 @@
+<?php
+/**
+ * Copyright 2017
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @author Aaron Schulz
+ */
+
+use Psr\Log\LoggerAwareInterface;
+use Psr\Log\LoggerInterface;
+use Wikimedia\WaitConditionLoop;
+
+/**
+ * Interface for configuration instances
+ *
+ * @since 1.29
+ */
+class EtcdConfig implements Config, LoggerAwareInterface {
+       /** @var MultiHttpClient */
+       private $http;
+       /** @var BagOStuff */
+       private $srvCache;
+       /** @var array */
+       private $procCache;
+       /** @var LoggerInterface */
+       private $logger;
+
+       /** @var string */
+       private $host;
+       /** @var string */
+       private $protocol;
+       /** @var string */
+       private $directory;
+       /** @var string */
+       private $encoding;
+       /** @var integer */
+       private $baseCacheTTL;
+       /** @var integer */
+       private $skewCacheTTL;
+       /** @var integer */
+       private $timeout;
+       /** @var string */
+       private $directoryHash;
+
+       /**
+        * @param array $params Parameter map:
+        *   - host: the host address and port
+        *   - protocol: either http or https
+        *   - directory: the etc "directory" were MediaWiki specific variables are located
+        *   - encoding: one of ("JSON", "YAML"). Defaults to JSON. [optional]
+        *   - cache: BagOStuff instance or ObjectFactory spec thereof for a server cache.
+        *            The cache will also be used as a fallback if etcd is down. [optional]
+        *   - cacheTTL: logical cache TTL in seconds [optional]
+        *   - skewTTL: maximum seconds to randomly lower the assigned TTL on cache save [optional]
+        *   - timeout: seconds to wait for etcd before throwing an error [optional]
+        */
+       public function __construct( array $params ) {
+               $params += [
+                       'protocol' => 'http',
+                       'encoding' => 'JSON',
+                       'cacheTTL' => 10,
+                       'skewTTL' => 1,
+                       'timeout' => 10
+               ];
+
+               $this->host = $params['host'];
+               $this->protocol = $params['protocol'];
+               $this->directory = trim( $params['directory'], '/' );
+               $this->directoryHash = sha1( $this->directory );
+               $this->encoding = $params['encoding'];
+               $this->skewCacheTTL = $params['skewTTL'];
+               $this->baseCacheTTL = max( $params['cacheTTL'] - $this->skewCacheTTL, 0 );
+               $this->timeout = $params['timeout'];
+
+               if ( !isset( $params['cache'] ) ) {
+                       $this->srvCache = new HashBagOStuff( [] );
+               } elseif ( $params['cache'] instanceof BagOStuff ) {
+                       $this->srvCache = $params['cache'];
+               } else {
+                       $this->srvCache = ObjectFactory::getObjectFromSpec( $params['cache'] );
+               }
+
+               $this->logger = new Psr\Log\NullLogger();
+               $this->http = new MultiHttpClient( [
+                       'connTimeout' => $this->timeout,
+                       'reqTimeout' => $this->timeout
+               ] );
+       }
+
+       public function setLogger( LoggerInterface $logger ) {
+               $this->logger = $logger;
+       }
+
+       public function has( $name ) {
+               $this->load();
+
+               return array_key_exists( $name, $this->procCache['config'] );
+       }
+
+       public function get( $name ) {
+               $this->load();
+
+               if ( !array_key_exists( $name, $this->procCache['config'] ) ) {
+                       throw new ConfigException( "No entry found for '$name'." );
+               }
+
+               return $this->procCache['config'][$name];
+       }
+
+       private function load() {
+               if ( $this->procCache !== null ) {
+                       return; // already loaded
+               }
+
+               $now = microtime( true );
+               $key = $this->srvCache->makeKey( 'variable', $this->directoryHash );
+
+               // Get the cached value or block until it is regenerated (by this or another thread)...
+               $data = null; // latest config info
+               $error = null; // last error message
+               $loop = new WaitConditionLoop(
+                       function () use ( $key, $now, &$data, &$error ) {
+                               // Check if the values are in cache yet...
+                               $data = $this->srvCache->get( $key );
+                               if ( is_array( $data ) && $data['expires'] > $now ) {
+                                       $this->logger->debug( "Found up-to-date etcd configuration cache." );
+
+                                       return WaitConditionLoop::CONDITION_REACHED;
+                               }
+
+                               // Cache is either empty or stale;
+                               // refresh the cache from etcd, using a mutex to reduce stampedes...
+                               if ( $this->srvCache->lock( $key, 0, $this->baseCacheTTL ) ) {
+                                       try {
+                                               list( $config, $error, $retry ) = $this->fetchAllFromEtcd();
+                                               if ( $config === null ) {
+                                                       $this->logger->error( "Failed to fetch configuration: $error" );
+                                                       // Fail fast if the error is likely to just keep happening
+                                                       return $retry
+                                                               ? WaitConditionLoop::CONDITION_CONTINUE
+                                                               : WaitConditionLoop::CONDITION_FAILED;
+                                               }
+
+                                               // Avoid having all servers expire cache keys at the same time
+                                               $expiry = microtime( true ) + $this->baseCacheTTL;
+                                               $expiry += mt_rand( 0, 1e6 ) / 1e6 * $this->skewCacheTTL;
+
+                                               $data = [ 'config' => $config, 'expires' => $expiry ];
+                                               $this->srvCache->set( $key, $data, BagOStuff::TTL_INDEFINITE );
+
+                                               $this->logger->info( "Refreshed stale etcd configuration cache." );
+
+                                               return WaitConditionLoop::CONDITION_REACHED;
+                                       } finally {
+                                               $this->srvCache->unlock( $key ); // release mutex
+                                       }
+                               }
+
+                               if ( is_array( $data ) ) {
+                                       $this->logger->info( "Using stale etcd configuration cache." );
+
+                                       return WaitConditionLoop::CONDITION_REACHED;
+                               }
+
+                               return WaitConditionLoop::CONDITION_CONTINUE;
+                       },
+                       $this->timeout
+               );
+
+               if ( $loop->invoke() !== WaitConditionLoop::CONDITION_REACHED ) {
+                       // No cached value exists and etcd query failed; throw an error
+                       throw new ConfigException( "Failed to load configuration from etcd: $error" );
+               }
+
+               $this->procCache = $data;
+       }
+
+       /**
+        * @return array (config array or null, error string, allow retries)
+        */
+       public function fetchAllFromEtcd() {
+               $dsd = new DnsSrvDiscoverer( $this->host );
+               $servers = $dsd->getServers();
+               if ( !$servers ) {
+                       return $this->fetchAllFromEtcdServer( $this->host );
+               }
+
+               do {
+                       // Pick a random etcd server from dns
+                       $server = $dsd->pickServer( $servers );
+                       $host = IP::combineHostAndPort( $server['target'], $server['port'] );
+                       // Try to load the config from this particular server
+                       list( $config, $error, $retry ) = $this->fetchAllFromEtcdServer( $host );
+                       if ( is_array( $config ) || !$retry ) {
+                               break;
+                       }
+
+                       // Avoid the server next time if that failed
+                       $dsd->removeServer( $server, $servers );
+               } while ( $servers );
+
+               return [ $config, $error, $retry ];
+       }
+
+       /**
+        * @param string $address Host and port
+        * @return array (config array or null, error string, whether to allow retries)
+        */
+       protected function fetchAllFromEtcdServer( $address ) {
+               // Retrieve all the values under the MediaWiki config directory
+               list( $rcode, $rdesc, /* $rhdrs */, $rbody, $rerr ) = $this->http->run( [
+                       'method' => 'GET',
+                       'url' => "{$this->protocol}://{$address}/v2/keys/{$this->directory}/",
+                       'headers' => [ 'content-type' => 'application/json' ]
+               ] );
+
+               static $terminalCodes = [ 404 => true ];
+               if ( $rcode < 200 || $rcode > 399 ) {
+                       return [
+                               null,
+                               strlen( $rerr ) ? $rerr : "HTTP $rcode ($rdesc)",
+                               empty( $terminalCodes[$rcode] )
+                       ];
+               }
+
+               $info = json_decode( $rbody, true );
+               if ( $info === null || !isset( $info['node']['nodes'] ) ) {
+                       return [ null, $rcode, "Unexpected JSON response; missing 'nodes' list.", false ];
+               }
+
+               $config = [];
+               foreach ( $info['node']['nodes'] as $node ) {
+                       if ( !empty( $node['dir'] ) ) {
+                               continue; // skip directories
+                       }
+
+                       $name = basename( $node['key'] );
+                       $value = $this->unserialize( $node['value'] );
+                       if ( !is_array( $value ) || !isset( $value['val'] ) ) {
+                               return [ null, "Failed to parse value for '$name'.", false ];
+                       }
+
+                       $config[$name] = $value['val'];
+               }
+
+               return [ $config, null, false ];
+       }
+
+       /**
+        * @param string $string
+        * @return mixed
+        */
+       private function unserialize( $string ) {
+               if ( $this->encoding === 'YAML' ) {
+                       return yaml_parse( $string );
+               } else { // JSON
+                       return json_decode( $string, true );
+               }
+       }
+}
index 9f79aa8..afa03b8 100644 (file)
@@ -37,6 +37,9 @@ class WikiTextStructure {
                'h1', 'h2', 'h3', 'h4', 'h5', 'h6',
                // Collapsed fields are hidden by default so we don't want them showing up.
                '.autocollapse',
+               // Content explicitly decided to be not searchable by editors such
+               // as custom navigation templates.
+               '.navigation-not-searchable'
        ];
 
        /**
index da660bd..0f8d7f7 100644 (file)
@@ -1,5 +1,6 @@
 <?php
 
+use Wikimedia\Rdbms\Database;
 use Wikimedia\Rdbms\LoadBalancer;
 
 /**
index ef5a8fe..b728786 100644 (file)
  * @file
  * @ingroup Database
  */
+
+use Wikimedia\Rdbms\Database;
 use Wikimedia\Rdbms\Blob;
 use Wikimedia\Rdbms\ResultWrapper;
+use Wikimedia\Rdbms\DBConnectionError;
+use Wikimedia\Rdbms\DBUnexpectedError;
 
 /**
  * @ingroup Database
index fe063f2..464a918 100644 (file)
@@ -33,9 +33,12 @@ abstract class MWLBFactory {
        /**
         * @param array $lbConf Config for LBFactory::__construct()
         * @param Config $mainConfig Main config object from MediaWikiServices
+        * @param ConfiguredReadOnlyMode $readOnlyMode
         * @return array
         */
-       public static function applyDefaultConfig( array $lbConf, Config $mainConfig ) {
+       public static function applyDefaultConfig( array $lbConf, Config $mainConfig,
+               ConfiguredReadOnlyMode $readOnlyMode
+       ) {
                global $wgCommandLineMode;
 
                static $typesWithSchema = [ 'postgres', 'msssql' ];
@@ -55,8 +58,7 @@ abstract class MWLBFactory {
                        'errorLogger' => [ MWExceptionHandler::class, 'logException' ],
                        'cliMode' => $wgCommandLineMode,
                        'hostname' => wfHostname(),
-                       // TODO: replace the global wfConfiguredReadOnlyReason() with a service.
-                       'readOnlyReason' => wfConfiguredReadOnlyReason(),
+                       'readOnlyReason' => $readOnlyMode->getReason(),
                ];
 
                // When making changes here, remember to also specify MediaWiki-specific options
index 5697960..a629458 100644 (file)
@@ -409,7 +409,7 @@ class LinksUpdate extends DataUpdate implements EnqueueableDataUpdate {
 
                $deleteWheres = []; // list of WHERE clause arrays for each DB delete() call
                if ( $table === 'pagelinks' || $table === 'templatelinks' || $table === 'iwlinks' ) {
-                       $baseKey =  ( $table === 'iwlinks' ) ? 'iwl_prefix' : "{$prefix}_namespace";
+                       $baseKey = ( $table === 'iwlinks' ) ? 'iwl_prefix' : "{$prefix}_namespace";
 
                        $curBatchSize = 0;
                        $curDeletionBatch = [];
index 749be3c..433274e 100644 (file)
@@ -21,6 +21,7 @@
 use MediaWiki\Logger\LoggerFactory;
 use MediaWiki\MediaWikiServices;
 use Psr\Log\LogLevel;
+use Wikimedia\Rdbms\DBError;
 
 /**
  * Handler class for MWExceptions
index a569bcd..a9bd4da 100644 (file)
  * @author Aaron Schulz
  */
 
+use Wikimedia\Rdbms\DBConnectionError;
+use Wikimedia\Rdbms\DBError;
+use Wikimedia\Rdbms\DBReadOnlyError;
+use Wikimedia\Rdbms\DBExpectedError;
+
 /**
  * Class to expose exceptions to the client (API bots, users, admins using CLI scripts)
  * @since 1.28
index d09c245..aa97c9a 100644 (file)
@@ -24,6 +24,7 @@
 
 use MediaWiki\MediaWikiServices;
 use Wikimedia\Rdbms\IDatabase;
+use Wikimedia\Rdbms\DBError;
 
 /**
  * Version of FileJournal that logs to a DB table
index 8510d0c..2108aed 100644 (file)
@@ -1,6 +1,7 @@
 <?php
 
 use Wikimedia\Rdbms\IDatabase;
+use Wikimedia\Rdbms\DBError;
 
 /**
  * MySQL version of DBLockManager that supports shared locks.
index 29c017c..bce3005 100644 (file)
@@ -21,6 +21,7 @@
  * @ingroup FileRepo
  */
 
+use Wikimedia\Rdbms\Database;
 use Wikimedia\Rdbms\IDatabase;
 
 /**
index 9c92bc0..d91ab24 100644 (file)
@@ -23,6 +23,7 @@
  */
 
 use Wikimedia\Rdbms\ResultWrapper;
+use Wikimedia\Rdbms\Database;
 use Wikimedia\Rdbms\IDatabase;
 
 /**
index f6f44e6..cf21161 100644 (file)
@@ -21,6 +21,8 @@
  * @ingroup FileAbstraction
  */
 
+use Wikimedia\Rdbms\DBUnexpectedError;
+
 /**
  * Foreign file with an accessible MediaWiki database
  *
index c109fba..292fc80 100644 (file)
@@ -21,7 +21,8 @@
  * @ingroup FileAbstraction
  */
 
-use \MediaWiki\Logger\LoggerFactory;
+use MediaWiki\Logger\LoggerFactory;
+use Wikimedia\Rdbms\Database;
 use Wikimedia\Rdbms\IDatabase;
 
 /**
index 54bdf04..6650321 100644 (file)
@@ -191,15 +191,12 @@ class OOUIHTMLForm extends HTMLForm {
         * @return string
         */
        public function getErrorsOrWarnings( $elements, $elementsType ) {
-               if ( !in_array( $elementsType, [ 'error', 'warning' ] ) ) {
+               if ( !in_array( $elementsType, [ 'error', 'warning' ], true ) ) {
                        throw new DomainException( $elementsType . ' is not a valid type.' );
                }
-               if ( !$elements ) {
-                       $errors = [];
-               } elseif ( $elements instanceof Status ) {
-                       if ( $elements->isGood() ) {
-                               $errors = [];
-                       } else {
+               $errors = [];
+               if ( $elements instanceof Status ) {
+                       if ( !$elements->isGood() ) {
                                $errors = $elements->getErrorsByType( $elementsType );
                                foreach ( $errors as &$error ) {
                                        // Input:  [ 'message' => 'foo', 'errors' => [ 'a', 'b', 'c' ] ]
@@ -207,13 +204,12 @@ class OOUIHTMLForm extends HTMLForm {
                                        $error = array_merge( [ $error['message'] ], $error['params'] );
                                }
                        }
-               } elseif ( $elementsType === 'errors' )  {
-                       $errors = $elements;
-                       if ( !is_array( $errors ) ) {
-                               $errors = [ $errors ];
+               } elseif ( $elementsType === 'error' ) {
+                       if ( is_array( $elements ) ) {
+                               $errors = $elements;
+                       } elseif ( is_string( $elements ) ) {
+                               $errors = [ $elements ];
                        }
-               } else {
-                       $errors = [];
                }
 
                foreach ( $errors as &$error ) {
index f958ff6..3da3eb3 100644 (file)
@@ -145,7 +145,7 @@ class CurlHttpRequest extends MWHttpRequest {
                $this->parseHeader();
                $this->setStatus();
 
-               return Status::wrap( $this->status );  // TODO B/C; move this to callers
+               return Status::wrap( $this->status ); // TODO B/C; move this to callers
        }
 
        /**
index 22717fc..6113573 100644 (file)
@@ -21,6 +21,7 @@
  * @ingroup Deployment
  */
 use Wikimedia\Rdbms\LBFactorySingle;
+use Wikimedia\Rdbms\Database;
 use Wikimedia\Rdbms\IDatabase;
 
 /**
index 8913c77..a4cb695 100644 (file)
@@ -20,6 +20,7 @@
  * @file
  * @ingroup Deployment
  */
+use Wikimedia\Rdbms\Database;
 use Wikimedia\Rdbms\IDatabase;
 use MediaWiki\MediaWikiServices;
 
index d6efeb2..ba9818d 100644 (file)
  * @ingroup Deployment
  */
 
+use Wikimedia\Rdbms\Database;
+use Wikimedia\Rdbms\DBQueryError;
+use Wikimedia\Rdbms\DBConnectionError;
+
 /**
  * Class for setting up the MediaWiki database using Microsoft SQL Server.
  *
index 988ec41..dfe595e 100644 (file)
@@ -21,6 +21,8 @@
  * @ingroup Deployment
  */
 
+use Wikimedia\Rdbms\DatabaseMssql;
+
 /**
  * Class for setting up the MediaWiki database using Microsoft SQL Server.
  *
index 7269773..09051f4 100644 (file)
  * @ingroup Deployment
  */
 
+use Wikimedia\Rdbms\Database;
+use Wikimedia\Rdbms\DBQueryError;
+use Wikimedia\Rdbms\DBConnectionError;
+
 /**
  * Class for setting up the MediaWiki database using MySQL.
  *
index ff13196..70e790c 100644 (file)
@@ -294,6 +294,7 @@ class MysqlUpdater extends DatabaseUpdater {
                        [ 'addField', 'change_tag', 'ct_id', 'patch-change_tag-ct_id.sql' ],
                        [ 'addField', 'tag_summary', 'ts_id', 'patch-tag_summary-ts_id.sql' ],
                        [ 'modifyField', 'recentchanges', 'rc_ip', 'patch-rc_ip_modify.sql' ],
+                       [ 'addIndex', 'archive', 'usertext_timestamp', 'patch-rename-ar_usertext_timestamp.sql' ],
 
                        // 1.29
                        [ 'addField', 'externallinks', 'el_index_60', 'patch-externallinks-el_index_60.sql' ],
index b8fc4e7..14683d6 100644 (file)
@@ -21,6 +21,8 @@
  * @ingroup Deployment
  */
 
+use Wikimedia\Rdbms\DBConnectionError;
+
 /**
  * Class for setting up the MediaWiki database using Oracle.
  *
index 906768f..b501cb3 100644 (file)
  * @ingroup Deployment
  */
 
+use Wikimedia\Rdbms\Database;
+use Wikimedia\Rdbms\DBQueryError;
+use Wikimedia\Rdbms\DBConnectionError;
+
 /**
  * Class for setting up the MediaWiki database using Postgres.
  *
index 1a7b208..39cb89c 100644 (file)
@@ -21,6 +21,8 @@
  * @ingroup Deployment
  */
 
+use Wikimedia\Rdbms\DatabasePostgres;
+
 /**
  * Class for handling updates to Postgres databases.
  *
index 0fe7068..3943374 100644 (file)
  * @ingroup Deployment
  */
 
+use Wikimedia\Rdbms\Database;
+use Wikimedia\Rdbms\DatabaseSqlite;
+use Wikimedia\Rdbms\DBConnectionError;
+
 /**
  * Class for setting up the MediaWiki database using SQLLite.
  *
index dcd66dd..9c90283 100644 (file)
@@ -21,6 +21,8 @@
  * @ingroup Deployment
  */
 
+use Wikimedia\Rdbms\DatabaseSqlite;
+
 /**
  * Class for handling updates to Sqlite databases.
  *
index 62a9267..661ca43 100644 (file)
        "config-postgres-old": "Rekis eo PostgreSQL $1 pe ur stumm nevesoc'h; ober a rit gant $2.",
        "config-mssql-old": "Stumm $1 Microsoft SQL Server, pe unan nevesoc'h, zo rekis. Ganeoc'h emañ ar stumm $2.",
        "config-sqlite-name-help": "Dibabit un anv dibar d'ho wiki.\nArabat ober gant esaouennoù pe barrennigoù-stagañ.\nImplijet e vo evit ar restr roadennoù SQLite.",
+       "config-sqlite-parent-unwritable-group": "N'haller ket krouiñ ar c'havlec'h roadennoù <code><nowiki>$1</nowiki></code> peogwir n'hall ket ar servijer Web skrivañ war ar c'havlec'h kar <code><nowiki>$2</nowiki></code>.\n\nKavet eo bet gant ar stalier an anv implijer m'eo oberiant ar servijer drezañ. Evit gallout kenderc'hel, lakait ar c'havlec'h <code><nowiki>$3</nowiki></code> da vezañ tizhus evit ar skrivañ.\nWar ur reizhiad Unix/Linux system ober :\n\n<pre>cd $2\nmkdir $3\nchgrp $4 $3\nchmod g+w $3</pre>",
+       "config-sqlite-parent-unwritable-nogroup": "N'haller ket krouiñ ar c'havlec'h roadennoù <code><nowiki>$1</nowiki></code> peogwir n'hall ket ar servijer Web skrivañ war ar c'havlec'h kar <code><nowiki>$2</nowiki></code>.\n\nN'eo ket bet ar servijer evit kavout anv an implijer ma tro ar servijer. Evit kenderc'hel, lakaat ar c'havlec'h <code><nowiki>$3</nowiki></code> da vezañ tizhus evit ar skrivañ dre vras.\nWar ur reizhiad Unix/Linux merkañ :\n\n<pre>cd $2\nmkdir $3\nchmod a+w $3</pre>",
        "config-sqlite-mkdir-error": "Ur fazi zo bet e-ser krouiñ ar c'havlec'h roadennoù \"$1\".\nGwiriañ al lec'hiadur ha klask en-dro.",
        "config-sqlite-dir-unwritable": "Dibosupl skrivañ er c'havlec'h \"$1\".\nCheñchit ar aotreoù evit ma c'hallfe ar servijer web skrivañ ennañ ha klaskit en-dro.",
        "config-sqlite-connection-error": "$1.\n\nGwiriañ ar c'havlec'h roadennoù hag anv an diaz roadennoù a-is ha klaskit en-dro.",
        "config-sqlite-cant-create-db": "N'haller ket krouiñ restr an diaz roadennoù <code>$1</code>.",
        "config-sqlite-fts3-downgrade": "N'eo ket kenglotus ar PHP gant FTS3, o lakaat an taolennoù da glotañ gant ur stumm koshoc'h",
        "config-can-upgrade": "Taolennoù MediaWiki zo en diaz titouroù.\nDa hizivaat anezho da VediaWiki $1, klikañ war '''Kenderc'hel'''.",
+       "config-upgrade-done": "Hizivadenn bet kaset da benn vat.\n\nGallout a rit [$1 kregiñ da implijout ho wiki].\n\nMar fell deoc'h adc'henel ho restr <code>LocalSettings.php</code>, klikit war ar bouton dindan.\n<strong>N'eo ket un dra erbedet</strong> nemet ho pefe kudennoù gant ho wiki.",
        "config-upgrade-done-no-regenerate": "Hizivadenn kaset da benn.\n\nGallout a rit [$1 kregiñ da implijout ho wiki].",
        "config-regenerate": "Adgenel LocalSettings.php →",
        "config-show-table-status": "C'hwitet ar reked <code>SHOW TABLE STATUS</code> !",
        "config-mysql-engine": "Lusker stokañ :",
        "config-mysql-innodb": "InnoDB",
        "config-mysql-myisam": "MyISAM",
+       "config-mysql-myisam-dep": "<strong>Diwallit :</strong> Diuzet eo bet ganeoc'h MyISAM evel keflusker stokañ evit MySQL, ar pezh n'eo ket erbedet evit implijout gant MediaWiki, rak :\n* a-boan m'eo skoret gantañ ober meur a dra war un dro peogwir eo prennet an taolennoù\n* techetoc'h eo d'ar gwastoù eget kefluskerioù all\n* kod diazez MediaWiki n'eo ket atav embreget MyISAM gantañ evel m'eo dleet\n\nM'eo skoret InnoDB gant ho staliadur MySQL, ez eo kuzuliet c'hwek deoc'h dibab hennezh kentoc'h.\nMa n'eo ket skoret InnoDB gant ho staliadur MySQL, e c'hallfe bezañ poent deoc'h ober un hizivadenn.",
        "config-mysql-charset": "Strobad arouezennoù an diaz roadennoù :",
        "config-mysql-binary": "Binarel",
        "config-mysql-utf8": "UTF-8",
index 411b2d0..6282ca1 100644 (file)
@@ -68,7 +68,7 @@
        "config-outdated-sqlite": "''' هشدار:''' شما اس‌کیولایت $1 دارید، که پایین‌تر از حداقل نسخهٔ $2 مورد نیاز است.اس‌کیولایت در دسترس نخواهد بود.",
        "config-no-fts3": "'''هشدار:''' اس‌کیولایت بدون [//sqlite.org/fts3.html FTS3 module] تهیه شده‌است ، جستجوی ویژگی‌ها در این بخش پیشین در دسترس نخواهد‌بود.",
        "config-pcre-old": "''' خطای اساسی:'' ' PCRE  $1  یا بعدا مورد نیاز است.\nکد باینری پی‌اچ‌پی‌تان با PCRE  $2 پیوند دارد.\n[https://www.mediawiki.org/wiki/Manual:Errors_and_symptoms/PCRE اطلاعات بیشتر].",
-       "config-pcre-no-utf8": "'''مخرب:''' به‌ نظر می‌رسد ماژول پی‌سی‌آرایی پی‌اچ‌پی بدون پشتیبانی پی‌سی‌آرایی_یو‌تی‌اف۸ تهیه شده‌است.\nمدیاویکی برای درست عمل کردن نیازمند پشتیبانی یوتی‌اف-۸ است.",
+       "config-pcre-no-utf8": "<strong>مخرب:</strong> به‌ نظر می‌رسد پودمان پی‌سی‌آراییِ پی‌اچ‌پی بدون پشتیبانی پی‌سی‌آرایی_یو‌تی‌اف۸ تهیه شده‌است.\nمدیاویکی برای درست عمل کردن نیازمند پشتیبانی یوتی‌اف-۸ است.",
        "config-memory-raised": "PHP's <code>memory_limit</code>, نسخهٔ $1 است، به نسخهٔ $2 ارتقاء داده شده‌است.",
        "config-memory-bad": "'''هشدار:''' PHP's <code>memory_limit</code> نسخهٔ $1 است.\nاین ممکن است خیلی پایین باشد.\nممکن است نصب با مشکل رو‌به‌رو شود.",
        "config-xcache": "[http://xcache.lighttpd.net/ XCache] نصب شده‌است.",
index 35fa8e8..770a2a8 100644 (file)
@@ -21,7 +21,8 @@
                        "Almondega",
                        "Luk3",
                        "Eduardo Addad de Oliveira",
-                       "Warley Felipe C."
+                       "Warley Felipe C.",
+                       "Felipe L. Ewald"
                ]
        },
        "config-desc": "O instalador do MediaWiki",
        "config-db-host": "Servidor da base de dados:",
        "config-db-host-help": "Se a base de dados do seu servidor está em um servidor diferente, digite o nome do hospedeiro ou o endereço IP aqui.\n\nSe você está utilizando um hospedeiro web compartilhado, o seu provedor de hospedagem deverá fornecer o nome do hospedeiro correto na sua documentação.\n\nSe você está instalando em um servidor Windows e usando o MySQL, usar \"localhost\" pode não funcionar para o nome de servidor. Se não funcionar, tente \"127.0.01\" para o endereço de IP local.\n\nSe você está usando PostgreSQl, deixe este campo em branco para se conectar através de um socket Unix.",
        "config-db-host-oracle": "TNS da base de dados:",
+       "config-db-host-oracle-help": "Digite um  [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm Nome de Conexão local] válido; o arquivo tnsnames.ora precisa estar visível para esta instalação.<br />Se você estiver usando bibliotecas cliente 10g ou mais recente,\n você também pode usar o método [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm Easy Connect].",
        "config-db-wiki-settings": "Identifique esta wiki",
        "config-db-name": "Nome da base de dados:",
        "config-db-name-help": "Escolha um nome que identifique a sua wiki.\nEle não deve conter espaços.\n\nSe você está utilizando um hospedeiro web compartilhado, o provedor de hospedagem lhe dará um nome especifico de base de dados para usar ou o deixará criar a partir do painel de controle.",
        "config-db-name-oracle": "Esquema de base de dados:",
+       "config-db-account-oracle-warn": "Há três cenários suportados para instalar o Oracle como backend do banco de dados:\n\nSe você deseja criar a conta do banco de dados como parte do processo de instalação, forneça uma conta com função SYSDBA como conta do banco de dados para instalação e especifique as credenciais desejadas para a conta de acesso pela web, caso contrário, você poderá criar a conta de acesso via web manualmente e fornecer apenas aquela conta (se tiver permissões necessárias para criar os objetos schema) ou fornecer duas contas diferentes, uma com privilégios de criação e uma restrita para acesso à web.\n\nO script para criar uma conta com os privilégios necessários pode ser encontrado no diretório \"maintenance/oracle/\" desta instalação. Lembre-se de que usar uma conta restrita desativará todos os recursos de manutenção com a conta padrão.",
        "config-db-install-account": "Conta de usuário para instalação",
        "config-db-username": "Nome de usuário do banco de dados:",
        "config-db-password": "Senha do banco de dados:",
        "config-install-mainpage-exists": "A página principal já existe, pulando",
        "config-install-extension-tables": "Criando tabelas para extensões habilitadas",
        "config-install-mainpage-failed": "Não foi possível inserir a página principal: $1",
-       "config-install-done": "<strong>Parabéns!</strong>\nVocê instalou do MediaWiki.\n\nO instalador gerou um arquivo <code>LocalSettings.php</code>.\nEste arquivo contém todas as suas configurações.\n\nVocê precisa fazer o download desse arquivo e colocá-lo na raiz da sua instalação (o mesmo diretório onde está o arquivo <code>index.php</code>). Este download deve ter sido iniciado automaticamente.\n\nSe o download não foi iniciado, ou se ele foi cancelado, pode recomeçá-lo clicando no link abaixo:\n\n$3\n\n<strong>Nota</strong>: Se não fizer isto agora, o arquivo que foi gerado não estará disponível depois que você sair do processo de instalação sem baixá-lo.\n\nQuando isso tiver sido feito, pode <strong>[$2 entrar na sua wiki]</strong>.",
+       "config-install-done": "<strong>Parabéns!</strong>\nVocê instalou o MediaWiki.\n\nO instalador gerou um arquivo <code>LocalSettings.php</code>.\nEste arquivo contém todas as suas configurações.\n\nVocê precisa fazer o download desse arquivo e colocá-lo na raiz da sua instalação (o mesmo diretório onde está o arquivo <code>index.php</code>). Este download deve ter sido iniciado automaticamente.\n\nSe o download não foi iniciado, ou se ele foi cancelado, pode recomeçá-lo clicando no link abaixo:\n\n$3\n\n<strong>Nota:</strong> Se não fizer isto agora, o arquivo que foi gerado não estará disponível depois que você sair do processo de instalação sem baixá-lo.\n\nQuando isso tiver sido feito, você pode <strong>[$2 entrar na sua wiki]</strong>.",
+       "config-install-done-path": "<strong>Parabéns!</strong>\nVocê concluiu a instalação do MediaWiki.\n\nO instalador gerou um arquivo <code>LocalSettings.php</code>.\nEste arquivo contém todas as suas configurações.\n\nVocê precisa fazer o download desse arquivo e colocá-lo em <code>$4</code>. O download deve iniciar automaticamente.\n\nSe o download não foi iniciado, ou se ele foi cancelado, você pode recomeçá-lo clicando no link abaixo:\n\n$3\n\n<strong>Nota:</strong> Se você não fizer isso, o arquivo de configuração que foi gerado não estará mais disponível se você sair da instalação sem fazer o download.\n\nQuando isso tiver sido feito, você pode <strong>[$2 entrar na sua wiki]</strong>.",
        "config-download-localsettings": "Baixar <code>LocalSettings.php</code>",
        "config-help": "ajuda",
        "config-help-tooltip": "clique para expandir",
        "config-nofile": "O arquivo \"$1\" não foi encontrado. Ele foi apagado?",
        "config-extension-link": "Você sabia que sua wiki suporta [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions extensões]?\n\nVocê pode explorar as  [https://www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category extensões por categoria] ou visitar a [https://www.mediawiki.org/wiki/Extension_Matrix Matriz de Extensões] para ver a lista completa.",
        "mainpagetext": "<strong>O MediaWiki foi instalado.</strong>",
-       "mainpagedocfooter": "Consulte o [https://meta.wikimedia.org/wiki/Help:Contents Manual de Usuário] para informações de como usar o software wiki.\n\n== Começando ==\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Lista de opções de configuração]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ FAQ do MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Lista de discussão com avisos de novas versões do MediaWiki]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Traduza o MediaWiki para seu idioma]"
+       "mainpagedocfooter": "Consulte o [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents Manual de Usuário] para informações de como usar o software wiki.\n\n== Começando ==\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Lista de opções de configuração]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ FAQ do MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Lista de discussão com avisos de novas versões do MediaWiki]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Traduza o MediaWiki para seu idioma]"
 }
index 198422a..1d4fc61 100644 (file)
@@ -8,7 +8,7 @@
        "config-title": "Installazzione de MediaUicchi $1",
        "config-information": "'Mbormaziune",
        "config-localsettings-key": "Chiave de aggiornamende:",
-       "config-localsettings-badkey": "'A chiave ca è date non g'è corrette.",
+       "config-localsettings-badkey": "'A chiave de aggiornamende ca è date non g'è corrette.",
        "config-session-error": "Errore facenne accumenzà 'a sessione: $1",
        "config-your-language": "'A lènga toje:",
        "config-your-language-help": "Scacchie 'na lènghe da ausà duranne 'u processe de installazzione:",
@@ -36,6 +36,8 @@
        "config-db-type": "Tipe de database:",
        "config-db-host-oracle": "Database TNS:",
        "config-db-name-oracle": "Scheme d'u database:",
+       "config-db-username": "Nome utende d'u database:",
+       "config-db-password": "Password d'u database:",
        "config-db-port": "Porte d'u database:",
        "config-db-schema": "Scheme pe MediaUicchi:",
        "config-type-mysql": "MySQL (o combatibbile)",
index 4ccca97..5226aa0 100644 (file)
@@ -23,7 +23,7 @@ namespace MediaWiki\Interwiki;
  */
 use \Cdb\Exception as CdbException;
 use \Cdb\Reader as CdbReader;
-use Database;
+use Wikimedia\Rdbms\Database;
 use Hooks;
 use Interwiki;
 use Language;
@@ -221,7 +221,7 @@ class ClassicInterwikiLookup implements InterwikiLookup {
                                }
                        }
 
-                       $value = $this->getCacheValue( wfMemcKey( $prefix ) );
+                       $value = $this->getCacheValue( wfWikiID() . ':' . $prefix );
                        // Site level
                        if ( $value == '' && $this->interwikiScopes >= 3 ) {
                                $value = $this->getCacheValue( "_{$this->thisSite}:{$prefix}" );
@@ -288,7 +288,7 @@ class ClassicInterwikiLookup implements InterwikiLookup {
 
                                $row = $dbr->selectRow(
                                        'interwiki',
-                                       ClassicInterwikiLookup::selectFields(),
+                                       self::selectFields(),
                                        [ 'iw_prefix' => $prefix ],
                                        __METHOD__
                                );
@@ -408,7 +408,7 @@ class ClassicInterwikiLookup implements InterwikiLookup {
                }
 
                $res = $db->select( 'interwiki',
-                       $this->selectFields(),
+                       self::selectFields(),
                        $where, __METHOD__, [ 'ORDER BY' => 'iw_prefix' ]
                );
 
index 540b8c5..924aacc 100644 (file)
  * @author Aaron Schulz
  */
 use Wikimedia\Rdbms\IDatabase;
+use Wikimedia\Rdbms\DBConnRef;
+use Wikimedia\Rdbms\DBConnectionError;
+use Wikimedia\Rdbms\DBError;
 use MediaWiki\MediaWikiServices;
 use Wikimedia\ScopedCallback;
-use Wikimedia\Rdbms\DBConnRef;
 
 /**
  * Class to handle job queues stored in the DB
index 71d68d9..9f78404 100644 (file)
@@ -170,7 +170,7 @@ class JobQueueGroup {
         * @since 1.26
         */
        public function lazyPush( $jobs ) {
-               if ( PHP_SAPI === 'cli' ) {
+               if ( PHP_SAPI === 'cli' || PHP_SAPI === 'phpdbg' ) {
                        $this->push( $jobs );
                        return;
                }
index c2c9d66..eb91680 100644 (file)
@@ -75,6 +75,8 @@ class JobQueueRedis extends JobQueue {
        /** @var string Compression method to use */
        protected $compression;
 
+       const MAX_PUSH_SIZE = 25; // avoid tying up the server
+
        /**
         * @param array $params Possible keys:
         *   - redisConfig : An array of parameters to RedisConnectionPool::__construct().
@@ -212,7 +214,7 @@ class JobQueueRedis extends JobQueue {
                        if ( $flags & self::QOS_ATOMIC ) {
                                $batches = [ $items ]; // all or nothing
                        } else {
-                               $batches = array_chunk( $items, 100 ); // avoid tying up the server
+                               $batches = array_chunk( $items, self::MAX_PUSH_SIZE );
                        }
                        $failed = 0;
                        $pushed = 0;
index baff288..6415533 100644 (file)
@@ -28,6 +28,8 @@ use Psr\Log\LoggerAwareInterface;
 use Psr\Log\LoggerInterface;
 use Wikimedia\ScopedCallback;
 use Wikimedia\Rdbms\LBFactory;
+use Wikimedia\Rdbms\DBError;
+use Wikimedia\Rdbms\DBReplicationWaitError;
 
 /**
  * Job queue runner utility methods
index 5c73308..c123619 100644 (file)
@@ -20,6 +20,7 @@
  * @ingroup JobQueue
  */
 use MediaWiki\MediaWikiServices;
+use Wikimedia\Rdbms\DBReplicationWaitError;
 
 /**
  * Job for pruning recent changes
index f9284a5..02bb829 100644 (file)
@@ -21,6 +21,7 @@
  * @ingroup JobQueue
  */
 use MediaWiki\MediaWikiServices;
+use Wikimedia\Rdbms\DBReplicationWaitError;
 
 /**
  * Job to update link tables for pages
@@ -86,7 +87,7 @@ class RefreshLinksJob extends Job {
                        // When the base job branches, wait for the replica DBs to catch up to the master.
                        // From then on, we know that any template changes at the time the base job was
                        // enqueued will be reflected in backlink page parses when the leaf jobs run.
-                       if ( !isset( $params['range'] ) ) {
+                       if ( !isset( $this->params['range'] ) ) {
                                try {
                                        $lbFactory = MediaWikiServices::getInstance()->getDBLoadBalancerFactory();
                                        $lbFactory->waitForReplication( [
@@ -112,7 +113,7 @@ class RefreshLinksJob extends Job {
                        JobQueueGroup::singleton()->push( $jobs );
                // Job to update link tables for a set of titles
                } elseif ( isset( $this->params['pages'] ) ) {
-                       foreach ( $this->params['pages'] as $pageId => $nsAndKey ) {
+                       foreach ( $this->params['pages'] as $nsAndKey ) {
                                list( $ns, $dbKey ) = $nsAndKey;
                                $this->runForTitle( Title::makeTitleSafe( $ns, $dbKey ) );
                        }
@@ -252,7 +253,7 @@ class RefreshLinksJob extends Job {
                // This avoids snapshot-clearing errors in LinksUpdate::acquirePageLock().
                $lbFactory->commitAndWaitForReplication( __METHOD__, $ticket );
 
-               foreach ( $updates as $key => $update ) {
+               foreach ( $updates as $update ) {
                        // FIXME: This code probably shouldn't be here?
                        // Needed by things like Echo notifications which need
                        // to know which user caused the links update
index c33264d..ce8a204 100644 (file)
@@ -83,6 +83,22 @@ class DnsSrvDiscoverer {
                }
        }
 
+       /**
+        * @param array $server
+        * @param array $servers
+        * @return array[]
+        */
+       public function removeServer( $server, array $servers ) {
+               foreach ( $servers as $i => $srv ) {
+                       if ( $srv['target'] === $server['target'] && $srv['port'] === $server['port'] ) {
+                               unset( $servers[$i] );
+                               break;
+                       }
+               }
+
+               return array_values( $servers );
+       }
+
        /**
         * @return array[]
         */
index 8ef8196..26e25f9 100644 (file)
@@ -21,7 +21,9 @@
  * @ingroup LockManager
  */
 
+use Wikimedia\Rdbms\Database;
 use Wikimedia\Rdbms\IDatabase;
+use Wikimedia\Rdbms\DBError;
 
 /**
  * Version of LockManager based on using named/row DB locks.
index d6b1ce8..65c6993 100644 (file)
@@ -1,4 +1,7 @@
 <?php
+
+use Wikimedia\Rdbms\DBError;
+
 /**
  * PostgreSQL version of DBLockManager that supports shared locks.
  * All locks are non-blocking, which avoids deadlocks.
index 7f2bf5e..e48cf62 100644 (file)
@@ -73,19 +73,36 @@ class XmlTypeCheck {
         */
        private $parserOptions = [
                'processing_instruction_handler' => '',
+               'external_dtd_handler' => '',
+               'dtd_handler' => '',
+               'require_safe_dtd' => true
        ];
 
        /**
+        * Allow filtering an XML file.
+        *
+        * Filters should return either true or a string to indicate something
+        * is wrong with the file. $this->filterMatch will store if the
+        * file failed validation (true = failed validation).
+        * $this->filterMatchType will contain the validation error.
+        * $this->wellFormed will contain whether the xml file is well-formed.
+        *
+        * @note If multiple filters are hit, only one of them will have the
+        *  result stored in $this->filterMatchType.
+        *
         * @param string $input a filename or string containing the XML element
         * @param callable $filterCallback (optional)
         *        Function to call to do additional custom validity checks from the
         *        SAX element handler event. This gives you access to the element
         *        namespace, name, attributes, and text contents.
-        *        Filter should return 'true' to toggle on $this->filterMatch
+        *        Filter should return a truthy value describing the error.
         * @param bool $isFile (optional) indicates if the first parameter is a
         *        filename (default, true) or if it is a string (false)
         * @param array $options list of additional parsing options:
         *        processing_instruction_handler: Callback for xml_set_processing_instruction_handler
+        *        external_dtd_handler: Callback for the url of external dtd subset
+        *        dtd_handler: Callback given the full text of the <!DOCTYPE declaration.
+        *        require_safe_dtd: Only allow non-recursive entities in internal dtd (default true)
         */
        function __construct( $input, $filterCallback = null, $isFile = true, $options = [] ) {
                $this->filterCallback = $filterCallback;
@@ -186,6 +203,9 @@ class XmlTypeCheck {
                        if ( $reader->nodeType === XMLReader::PI ) {
                                $this->processingInstructionHandler( $reader->name, $reader->value );
                        }
+                       if ( $reader->nodeType === XMLReader::DOC_TYPE ) {
+                               $this->DTDHandler( $reader );
+                       }
                } while ( $reader->nodeType != XMLReader::ELEMENT );
 
                // Process the rest of the document
@@ -234,8 +254,13 @@ class XmlTypeCheck {
                                                $reader->value
                                        );
                                        break;
+                               case XMLReader::DOC_TYPE:
+                                       // We should never see a doctype after first
+                                       // element.
+                                       $this->wellFormed = false;
+                                       break;
                                default:
-                                       // One of DOC, DOC_TYPE, ENTITY, END_ENTITY,
+                                       // One of DOC, ENTITY, END_ENTITY,
                                        // NOTATION, or XML_DECLARATION
                                        // xml_parse didn't send these to the filter, so we won't.
                        }
@@ -339,4 +364,140 @@ class XmlTypeCheck {
                        $this->filterMatchType = $callbackReturn;
                }
        }
+       /**
+        * Handle coming across a <!DOCTYPE declaration.
+        *
+        * @param XMLReader $reader Reader currently pointing at DOCTYPE node.
+        */
+       private function DTDHandler( XMLReader $reader ) {
+               $externalCallback = $this->parserOptions['external_dtd_handler'];
+               $generalCallback = $this->parserOptions['dtd_handler'];
+               $checkIfSafe = $this->parserOptions['require_safe_dtd'];
+               if ( !$externalCallback && !$generalCallback && !$checkIfSafe ) {
+                       return;
+               }
+               $dtd = $reader->readOuterXML();
+               $callbackReturn = false;
+
+               if ( $generalCallback ) {
+                       $callbackReturn = call_user_func( $generalCallback, $dtd );
+               }
+               if ( $callbackReturn ) {
+                       // Filter hit!
+                       $this->filterMatch = true;
+                       $this->filterMatchType = $callbackReturn;
+                       $callbackReturn = false;
+               }
+
+               $parsedDTD = $this->parseDTD( $dtd );
+               if ( $externalCallback && isset( $parsedDTD['type'] ) ) {
+                       $callbackReturn = call_user_func(
+                               $externalCallback,
+                               $parsedDTD['type'],
+                               isset( $parsedDTD['publicid'] ) ? $parsedDTD['publicid'] : null,
+                               isset( $parsedDTD['systemid'] ) ? $parsedDTD['systemid'] : null
+                       );
+               }
+               if ( $callbackReturn ) {
+                       // Filter hit!
+                       $this->filterMatch = true;
+                       $this->filterMatchType = $callbackReturn;
+                       $callbackReturn = false;
+               }
+
+               if ( $checkIfSafe && isset( $parsedDTD['internal'] ) ) {
+                       if ( !$this->checkDTDIsSafe( $parsedDTD['internal'] ) ) {
+                               $this->wellFormed = false;
+                       }
+               }
+       }
+
+       /**
+        * Check if the internal subset of the DTD is safe.
+        *
+        * We whitelist an extremely restricted subset of DTD features.
+        *
+        * Safe is defined as:
+        *  * Only contains entity defintions (e.g. No <!ATLIST )
+        *  * Entity definitions are not "system" entities
+        *  * Entity definitions are not "parameter" (i.e. %) entities
+        *  * Entity definitions do not reference other entites except &amp;
+        *    and quotes. Entity aliases (where the entity contains only
+        *    another entity are allowed)
+        *  * Entity references aren't overly long (>255 bytes).
+        *  * <!ATTLIST svg xmlns:xlink CDATA #FIXED "http://www.w3.org/1999/xlink">
+        *    allowed if matched exactly for compatibility with graphviz
+        *  * Comments.
+        *
+        * @param string $internalSubset The internal subset of the DTD
+        * @return bool true if safe.
+        */
+       private function checkDTDIsSafe( $internalSubset ) {
+               $offset = 0;
+               $res = preg_match(
+                       '/^(?:\s*<!ENTITY\s+\S+\s+' .
+                               '(?:"(?:&[^"%&;]{1,64};|(?:[^"%&]|&amp;|&quot;){0,255})"' .
+                               '|\'(?:&[^"%&;]{1,64};|(?:[^\'%&]|&amp;|&apos;){0,255})\')\s*>' .
+                               '|\s*<!--(?:[^-]|-[^-])*-->' .
+                               '|\s*<!ATTLIST svg xmlns:xlink CDATA #FIXED ' .
+                               '"http:\/\/www.w3.org\/1999\/xlink">)*\s*$/',
+                       $internalSubset
+               );
+
+               return (bool)$res;
+       }
+
+       /**
+        * Parse DTD into parts.
+        *
+        * If there is an error parsing the dtd, sets wellFormed to false.
+        *
+        * @param $dtd string
+        * @return array Possibly containing keys publicid, systemid, type and internal.
+        */
+       private function parseDTD( $dtd ) {
+               $m = [];
+               $res = preg_match(
+                       '/^<!DOCTYPE\s*\S+\s*' .
+                       '(?:(?P<typepublic>PUBLIC)\s*' .
+                               '(?:"(?P<pubquote>[^"]*)"|\'(?P<pubapos>[^\']*)\')' . // public identifer
+                               '\s*"(?P<pubsysquote>[^"]*)"|\'(?P<pubsysapos>[^\']*)\'' . // system identifier
+                       '|(?P<typesystem>SYSTEM)\s*' .
+                               '(?:"(?P<sysquote>[^"]*)"|\'(?P<sysapos>[^\']*)\')' .
+                       ')?\s*' .
+                       '(?:\[\s*(?P<internal>.*)\])?\s*>$/s',
+                       $dtd,
+                       $m
+               );
+               if ( !$res ) {
+                       $this->wellFormed = false;
+                       return [];
+               }
+               $parsed = [];
+               foreach ( $m as $field => $value ) {
+                       if ( $value === '' || is_numeric( $field ) ) {
+                               continue;
+                       }
+                       switch ( $field ) {
+                       case 'typepublic':
+                       case 'typesystem':
+                               $parsed['type'] = $value;
+                               break;
+                       case 'pubquote':
+                       case 'pubapos':
+                               $parsed['publicid'] = $value;
+                               break;
+                       case 'pubsysquote':
+                       case 'pubsysapos':
+                       case 'sysquote':
+                       case 'sysapos':
+                               $parsed['systemid'] = $value;
+                               break;
+                       case 'internal':
+                               $parsed['internal'] = $value;
+                               break;
+                       }
+               }
+               return $parsed;
+       }
 }
index 74bf4b5..c85a82e 100644 (file)
@@ -81,6 +81,22 @@ class CachedBagOStuff extends HashBagOStuff {
                $this->backend->setDebug( $bool );
        }
 
+       public function deleteObjectsExpiringBefore( $date, $progressCallback = false ) {
+               parent::deleteObjectsExpiringBefore( $date, $progressCallback );
+               return $this->backend->deleteObjectsExpiringBefore( $date, $progressCallback );
+       }
+
+       public function makeKey() {
+               return call_user_func_array( [ $this->backend, __FUNCTION__ ], func_get_args() );
+       }
+
+       public function makeGlobalKey() {
+               return call_user_func_array( [ $this->backend, __FUNCTION__ ], func_get_args() );
+       }
+
+       // These just call the backend (tested elsewhere)
+       // @codeCoverageIgnoreStart
+
        public function lock( $key, $timeout = 6, $expiry = 6, $rclass = '' ) {
                return $this->backend->lock( $key, $timeout, $expiry, $rclass );
        }
@@ -89,21 +105,17 @@ class CachedBagOStuff extends HashBagOStuff {
                return $this->backend->unlock( $key );
        }
 
-       public function deleteObjectsExpiringBefore( $date, $progressCallback = false ) {
-               parent::deleteObjectsExpiringBefore( $date, $progressCallback );
-               return $this->backend->deleteObjectsExpiringBefore( $date, $progressCallback );
-       }
-
        public function getLastError() {
                return $this->backend->getLastError();
        }
 
        public function clearLastError() {
-               $this->backend->clearLastError();
+               return $this->backend->clearLastError();
        }
 
        public function modifySimpleRelayEvent( array $event ) {
                return $this->backend->modifySimpleRelayEvent( $event );
        }
 
+       // @codeCoverageIgnoreEnd
 }
index 0d5fbf5..6481c92 100644 (file)
@@ -2,7 +2,6 @@
 
 namespace Wikimedia\Rdbms;
 
-use Database;
 use InvalidArgumentException;
 
 /**
@@ -605,4 +604,4 @@ class DBConnRef implements IDatabase {
        }
 }
 
-class_alias( 'Wikimedia\Rdbms\DBConnRef', 'DBConnRef' );
+class_alias( DBConnRef::class, 'DBConnRef' );
index 49ddd14..0915b7d 100644 (file)
  * @file
  * @ingroup Database
  */
+namespace Wikimedia\Rdbms;
+
 use Psr\Log\LoggerAwareInterface;
 use Psr\Log\LoggerInterface;
 use Wikimedia\ScopedCallback;
-use Wikimedia\Rdbms\TransactionProfiler;
-use Wikimedia\Rdbms\LikeMatch;
-use Wikimedia\Rdbms\DatabaseDomain;
-use Wikimedia\Rdbms\ResultWrapper;
-use Wikimedia\Rdbms\DBMasterPos;
-use Wikimedia\Rdbms\Blob;
 use Wikimedia\Timestamp\ConvertibleTimestamp;
-use Wikimedia\Rdbms\IDatabase;
-use Wikimedia\Rdbms\IMaintainableDatabase;
+use MediaWiki;
+use BagOStuff;
+use HashBagOStuff;
+use InvalidArgumentException;
+use Exception;
+use RuntimeException;
 
 /**
  * Relational database abstraction object
@@ -339,6 +339,13 @@ abstract class Database implements IDatabase, IMaintainableDatabase, LoggerAware
                        'oracle' => [],
                        'mssql' => [],
                ];
+               static $classAliases = [
+                       'DatabaseMssql' => DatabaseMssql::class,
+                       'DatabaseMysql' => DatabaseMysql::class,
+                       'DatabaseMysqli' => DatabaseMysqli::class,
+                       'DatabaseSqlite' => DatabaseSqlite::class,
+                       'DatabasePostgres' => DatabasePostgres::class
+               ];
 
                $driver = false;
                $dbType = strtolower( $dbType );
@@ -362,12 +369,17 @@ abstract class Database implements IDatabase, IMaintainableDatabase, LoggerAware
                } else {
                        $driver = $dbType;
                }
+
                if ( $driver === false || $driver === '' ) {
                        throw new InvalidArgumentException( __METHOD__ .
                                " no viable database extension found for type '$dbType'" );
                }
 
                $class = 'Database' . ucfirst( $driver );
+               if ( isset( $classAliases[$class] ) ) {
+                       $class = $classAliases[$class];
+               }
+
                if ( class_exists( $class ) && is_subclass_of( $class, IDatabase::class ) ) {
                        // Resolve some defaults for b/c
                        $p['host'] = isset( $p['host'] ) ? $p['host'] : false;
@@ -3295,26 +3307,37 @@ abstract class Database implements IDatabase, IMaintainableDatabase, LoggerAware
                return false;
        }
 
-       /**
-        * Lock specific tables
-        *
-        * @param array $read Array of tables to lock for read access
-        * @param array $write Array of tables to lock for write access
-        * @param string $method Name of caller
-        * @param bool $lowPriority Whether to indicate writes to be LOW PRIORITY
-        * @return bool
-        */
-       public function lockTables( $read, $write, $method, $lowPriority = true ) {
+       public function tableLocksHaveTransactionScope() {
                return true;
        }
 
-       /**
-        * Unlock specific tables
-        *
-        * @param string $method The caller
-        * @return bool
-        */
-       public function unlockTables( $method ) {
+       final public function lockTables( array $read, array $write, $method ) {
+               if ( $this->writesOrCallbacksPending() ) {
+                       throw new DBUnexpectedError( $this, "Transaction writes or callbacks still pending." );
+               }
+
+               if ( $this->tableLocksHaveTransactionScope() ) {
+                       $this->startAtomic( $method );
+               }
+
+               return $this->doLockTables( $read, $write, $method );
+       }
+
+       protected function doLockTables( array $read, array $write, $method ) {
+               return true;
+       }
+
+       final public function unlockTables( $method ) {
+               if ( $this->tableLocksHaveTransactionScope() ) {
+                       $this->endAtomic( $method );
+
+                       return true; // locks released on COMMIT/ROLLBACK
+               }
+
+               return $this->doUnlockTables( $method );
+       }
+
+       protected function doUnlockTables( $method ) {
                return true;
        }
 
@@ -3468,4 +3491,5 @@ abstract class Database implements IDatabase, IMaintainableDatabase, LoggerAware
        }
 }
 
-class_alias( Database::class, 'DatabaseBase' );
+class_alias( Database::class, 'DatabaseBase' ); // b/c for old name
+class_alias( Database::class, 'Database' ); // b/c global alias
index 75ddc9d..c736cc7 100644 (file)
  * @author Ryan Biesemeyer <v-ryanbi at microsoft dot com>
  * @author Ryan Schmidt <skizzerz at gmail dot com>
  */
-use Wikimedia\Rdbms\Blob;
-use Wikimedia\Rdbms\MssqlBlob;
-use Wikimedia\Rdbms\MssqlField;
-use Wikimedia\Rdbms\ResultWrapper;
-use Wikimedia\Rdbms\MssqlResultWrapper;
+
+namespace Wikimedia\Rdbms;
+
+use MediaWiki;
+use Exception;
+use stdClass;
 
 /**
  * @ingroup Database
@@ -1360,3 +1361,5 @@ class DatabaseMssql extends Database {
                return $old;
        }
 }
+
+class_alias( DatabaseMssql::class, 'DatabaseMssql' );
index 9ab7c64..77e797d 100644 (file)
@@ -20,6 +20,7 @@
  * @file
  * @ingroup Database
  */
+namespace Wikimedia\Rdbms;
 
 /**
  * Database abstraction object for PHP extension mysql.
@@ -202,3 +203,5 @@ class DatabaseMysql extends DatabaseMysqlBase {
                return mysql_real_escape_string( $s, $conn );
        }
 }
+
+class_alias( DatabaseMysql::class, 'DatabaseMysql' );
index 6725090..9824caf 100644 (file)
  * @file
  * @ingroup Database
  */
-use Wikimedia\Rdbms\DBMasterPos;
-use Wikimedia\Rdbms\MySQLMasterPos;
-use Wikimedia\Rdbms\MySQLField;
-use Wikimedia\Rdbms\ResultWrapper;
+namespace Wikimedia\Rdbms;
+
+use DateTime;
+use DateTimeZone;
+use MediaWiki;
+use InvalidArgumentException;
+use Exception;
+use stdClass;
 
 /**
  * Database abstraction object for MySQL.
@@ -1054,36 +1058,26 @@ abstract class DatabaseMysqlBase extends Database {
                return true;
        }
 
-       /**
-        * @param array $read
-        * @param array $write
-        * @param string $method
-        * @param bool $lowPriority
-        * @return bool
-        */
-       public function lockTables( $read, $write, $method, $lowPriority = true ) {
-               $items = [];
+       public function tableLocksHaveTransactionScope() {
+               return false; // tied to TCP connection
+       }
 
+       protected function doLockTables( array $read, array $write, $method ) {
+               $items = [];
                foreach ( $write as $table ) {
-                       $tbl = $this->tableName( $table ) .
-                               ( $lowPriority ? ' LOW_PRIORITY' : '' ) .
-                               ' WRITE';
-                       $items[] = $tbl;
+                       $items[] = $this->tableName( $table ) . ' WRITE';
                }
                foreach ( $read as $table ) {
                        $items[] = $this->tableName( $table ) . ' READ';
                }
+
                $sql = "LOCK TABLES " . implode( ',', $items );
                $this->query( $sql, $method );
 
                return true;
        }
 
-       /**
-        * @param string $method
-        * @return bool
-        */
-       public function unlockTables( $method ) {
+       protected function doUnlockTables( $method ) {
                $this->query( "UNLOCK TABLES", $method );
 
                return true;
@@ -1370,3 +1364,5 @@ abstract class DatabaseMysqlBase extends Database {
                }
        }
 }
+
+class_alias( DatabaseMysqlBase::class, 'DatabaseMysqlBase' );
index 7a2200a..fcd29c3 100644 (file)
  * @file
  * @ingroup Database
  */
+namespace Wikimedia\Rdbms;
 
-use Wikimedia\Rdbms\ResultWrapper;
+use mysqli;
+use IP;
 
 /**
  * Database abstraction object for PHP extension mysqli.
@@ -263,7 +265,7 @@ class DatabaseMysqli extends DatabaseMysqlBase {
        }
 
        /**
-        * @param resource|ResultWrapper $res
+        * @param mysqli $res
         * @param int $n
         * @return mixed
         */
@@ -274,7 +276,7 @@ class DatabaseMysqli extends DatabaseMysqlBase {
        }
 
        /**
-        * @param resource|ResultWrapper $res
+        * @param mysqli $res
         * @param int $n
         * @return mixed
         */
@@ -285,7 +287,7 @@ class DatabaseMysqli extends DatabaseMysqlBase {
        }
 
        /**
-        * @param resource|ResultWrapper $res
+        * @param mysqli $res
         * @param int $row
         * @return mixed
         */
@@ -331,3 +333,5 @@ class DatabaseMysqli extends DatabaseMysqlBase {
                }
        }
 }
+
+class_alias( DatabaseMysqli::class, 'DatabaseMysqli' );
index af9716d..b92d072 100644 (file)
  * @file
  * @ingroup Database
  */
+namespace Wikimedia\Rdbms;
+
 use Wikimedia\Timestamp\ConvertibleTimestamp;
 use Wikimedia\WaitConditionLoop;
-use Wikimedia\Rdbms\Blob;
-use Wikimedia\Rdbms\PostgresBlob;
-use Wikimedia\Rdbms\PostgresField;
-use Wikimedia\Rdbms\ResultWrapper;
+use MediaWiki;
+use Exception;
 
 /**
  * @ingroup Database
@@ -859,10 +859,10 @@ __INDEXATTR__;
         *
         * @since 1.19
         * @param string $text Postgreql array returned in a text form like {a,b}
-        * @param string $output
+        * @param string[] $output
         * @param int|bool $limit
         * @param int $offset
-        * @return string
+        * @return string[]
         */
        private function pg_array_parse( $text, &$output, $limit = false, $offset = 1 ) {
                if ( false === $limit ) {
@@ -1305,6 +1305,33 @@ SQL;
                return parent::streamStatementEnd( $sql, $newLine );
        }
 
+       public function doLockTables( array $read, array $write, $method ) {
+               $tablesWrite = [];
+               foreach ( $write as $table ) {
+                       $tablesWrite[] = $this->tableName( $table );
+               }
+               $tablesRead = [];
+               foreach ( $read as $table ) {
+                       $tablesRead[] = $this->tableName( $table );
+               }
+
+               // Acquire locks for the duration of the current transaction...
+               if ( $tablesWrite ) {
+                       $this->query(
+                               'LOCK TABLE ONLY ' . implode( ',', $tablesWrite ) . ' IN EXCLUSIVE MODE',
+                               $method
+                       );
+               }
+               if ( $tablesRead ) {
+                       $this->query(
+                               'LOCK TABLE ONLY ' . implode( ',', $tablesRead ) . ' IN SHARE MODE',
+                               $method
+                       );
+               }
+
+               return true;
+       }
+
        public function lockIsFree( $lockName, $method ) {
                // http://www.postgresql.org/docs/8.2/static/functions-admin.html#FUNCTIONS-ADVISORY-LOCKS
                $key = $this->addQuotes( $this->bigintFromLockName( $lockName ) );
@@ -1356,6 +1383,8 @@ SQL;
         * @return string Integer
         */
        private function bigintFromLockName( $lockName ) {
-               return Wikimedia\base_convert( substr( sha1( $lockName ), 0, 15 ), 16, 10 );
+               return \Wikimedia\base_convert( substr( sha1( $lockName ), 0, 15 ), 16, 10 );
        }
 }
+
+class_alias( DatabasePostgres::class, 'DatabasePostgres' );
index 090ce8e..779b4c9 100644 (file)
  * @file
  * @ingroup Database
  */
-use Wikimedia\Rdbms\Blob;
-use Wikimedia\Rdbms\SQLiteField;
-use Wikimedia\Rdbms\ResultWrapper;
+namespace Wikimedia\Rdbms;
+
+use PDO;
+use PDOException;
+use LockManager;
+use FSLockManager;
+use InvalidArgumentException;
+use RuntimeException;
+use stdClass;
 
 /**
  * @ingroup Database
@@ -116,8 +122,10 @@ class DatabaseSqlite extends Database {
                $p['dbFilePath'] = $filename;
                $p['schema'] = false;
                $p['tablePrefix'] = '';
+               /** @var DatabaseSqlite $db */
+               $db = Database::factory( 'sqlite', $p );
 
-               return Database::factory( 'sqlite', $p );
+               return $db;
        }
 
        /**
@@ -1048,3 +1056,6 @@ class DatabaseSqlite extends Database {
                return 'SQLite ' . (string)$this->mConn->getAttribute( PDO::ATTR_SERVER_VERSION );
        }
 }
+
+class_alias( DatabaseSqlite::class, 'DatabaseSqlite' );
+
index 0b146cd..0b12cbc 100644 (file)
 namespace Wikimedia\Rdbms;
 
 use Wikimedia\ScopedCallback;
-use DBError;
-use DBConnectionError;
-use DBUnexpectedError;
-use DBQueryError;
 use Exception;
 use RuntimeException;
 use UnexpectedValueException;
@@ -1808,4 +1804,4 @@ interface IDatabase {
        public function setTableAliases( array $aliases );
 }
 
-class_alias( 'Wikimedia\Rdbms\IDatabase', 'IDatabase' );
+class_alias( IDatabase::class, 'IDatabase' );
index 138cf2d..fbc2774 100644 (file)
@@ -26,7 +26,6 @@ namespace Wikimedia\Rdbms;
 
 use Exception;
 use RuntimeException;
-use DBUnexpectedError;
 
 /**
  * Advanced database interface for IDatabase handles that include maintenance methods
@@ -210,6 +209,73 @@ interface IMaintainableDatabase extends IDatabase {
        public function duplicateTableStructure(
                $oldName, $newName, $temporary = false, $fname = __METHOD__
        );
+
+       /**
+        * Checks if table locks acquired by lockTables() are transaction-bound in their scope
+        *
+        * Transaction-bound table locks will be released when the current transaction terminates.
+        * Table locks that are not bound to a transaction are not effected by BEGIN/COMMIT/ROLLBACK
+        * and will last until either lockTables()/unlockTables() is called or the TCP connection to
+        * the database is closed.
+        *
+        * @return bool
+        * @since 1.29
+        */
+       public function tableLocksHaveTransactionScope();
+
+       /**
+        * Lock specific tables
+        *
+        * Any pending transaction should be resolved before calling this method, since:
+        *   a) Doing so resets any REPEATABLE-READ snapshot of the data to a fresh one.
+        *   b) Previous row and table locks from the transaction or session may be released
+        *      by LOCK TABLES, which may be unsafe for the changes in such a transaction.
+        *   c) The main use case of lockTables() is to avoid deadlocks and timeouts by locking
+        *      entire tables in order to do long-running, batched, and lag-aware, updates. Batching
+        *      and replication lag checks do not work when all the updates happen in a transaction.
+        *
+        * Always get all relevant table locks up-front in one call, since LOCK TABLES might release
+        * any prior table locks on some RDBMes (e.g MySQL).
+        *
+        * For compatibility, callers should check tableLocksHaveTransactionScope() before using
+        * this method. If locks are scoped specifically to transactions then caller must either:
+        *   - a) Start a new transaction and acquire table locks for the scope of that transaction,
+        *        doing all row updates within that transaction. It will not be possible to update
+        *        rows in batches; this might result in high replication lag.
+        *   - b) Forgo table locks entirely and avoid calling this method. Careful use of hints like
+        *        LOCK IN SHARE MODE and FOR UPDATE and the use of query batching may be preferrable
+        *        to using table locks with a potentially large transaction. Use of MySQL and Postges
+        *        style REPEATABLE-READ (Snapshot Isolation with or without First-Committer-Rule) can
+        *        also be considered for certain tasks that require a consistent view of entire tables.
+        *
+        * If session scoped locks are not supported, then calling lockTables() will trigger
+        * startAtomic(), with unlockTables() triggering endAtomic(). This will automatically
+        * start a transaction if one is not already present and cause the locks to be released
+        * when the transaction finishes (normally during the unlockTables() call).
+        *
+        * In any case, avoid using begin()/commit() in code that runs while such table locks are
+        * acquired, as that breaks in case when a transaction is needed. The startAtomic() and
+        * endAtomic() methods are safe, however, since they will join any existing transaction.
+        *
+        * @param array $read Array of tables to lock for read access
+        * @param array $write Array of tables to lock for write access
+        * @param string $method Name of caller
+        * @return bool
+        * @since 1.29
+        */
+       public function lockTables( array $read, array $write, $method );
+
+       /**
+        * Unlock all tables locked via lockTables()
+        *
+        * If table locks are scoped to transactions, then locks might not be released until the
+        * transaction ends, which could happen after this method is called.
+        *
+        * @param string $method The caller
+        * @return bool
+        * @since 1.29
+        */
+       public function unlockTables( $method );
 }
 
-class_alias( 'Wikimedia\Rdbms\IMaintainableDatabase', 'IMaintainableDatabase' );
+class_alias( IMaintainableDatabase::class, 'IMaintainableDatabase' );
index 30c62de..6c94eb9 100644 (file)
@@ -68,6 +68,18 @@ class MaintainableDBConnRef extends DBConnRef implements IMaintainableDatabase {
        ) {
                return $this->__call( __FUNCTION__, func_get_args() );
        }
+
+       public function tableLocksHaveTransactionScope() {
+               return $this->__call( __FUNCTION__, func_get_args() );
+       }
+
+       public function lockTables( array $read, array $write, $method ) {
+               return $this->__call( __FUNCTION__, func_get_args() );
+       }
+
+       public function unlockTables( $method ) {
+               return $this->__call( __FUNCTION__, func_get_args() );
+       }
 }
 
-class_alias( 'Wikimedia\Rdbms\MaintainableDBConnRef', 'MaintainableDBConnRef' );
+class_alias( MaintainableDBConnRef::class, 'MaintainableDBConnRef' );
index 8ae78e9..cf5060e 100644 (file)
@@ -18,6 +18,9 @@
  * @file
  * @ingroup Database
  */
+
+namespace Wikimedia\Rdbms;
+
 use Psr\Log\LoggerInterface;
 
 /**
index 864dea0..97e03b2 100644 (file)
@@ -19,6 +19,8 @@
  * @ingroup Database
  */
 
+namespace Wikimedia\Rdbms;
+
 /**
  * Exception class for attempted DB access
  * @ingroup Database
@@ -28,3 +30,5 @@ class DBAccessError extends DBUnexpectedError {
                parent::__construct( null, "Database access has been disabled." );
        }
 }
+
+class_alias( DBAccessError::class, 'DBAccessError' );
index dca1302..0091524 100644 (file)
@@ -18,7 +18,7 @@
  * @file
  * @ingroup Database
  */
-use Wikimedia\Rdbms\IDatabase;
+namespace Wikimedia\Rdbms;
 
 /**
  * @ingroup Database
@@ -37,3 +37,5 @@ class DBConnectionError extends DBExpectedError {
                parent::__construct( $db, $msg );
        }
 }
+
+class_alias( DBConnectionError::class, 'DBConnectionError' );
index 226c675..d65e2d3 100644 (file)
  * @file
  * @ingroup Database
  */
-use Wikimedia\Rdbms\IDatabase;
+
+namespace Wikimedia\Rdbms;
+
+use Exception;
 
 /**
  * Database error base class
@@ -38,3 +41,5 @@ class DBError extends Exception {
                parent::__construct( $error );
        }
 }
+
+class_alias( DBError::class, 'DBError' );
index 57538a8..f6b9bd5 100644 (file)
  * @file
  * @ingroup Database
  */
-use Wikimedia\Rdbms\IDatabase;
+
+namespace Wikimedia\Rdbms;
+
+use MessageSpecifier;
+use ILocalizedException;
+use Message;
 
 /**
  * Base class for the more common types of database errors. These are known to occur
@@ -52,3 +57,5 @@ class DBExpectedError extends DBError implements MessageSpecifier, ILocalizedExc
                return Message::newFromSpecifier( $this );
        }
 }
+
+class_alias( DBExpectedError::class, 'DBExpectedError' );
index b4c3d52..bc2a865 100644 (file)
@@ -18,7 +18,8 @@
  * @file
  * @ingroup Database
  */
-use Wikimedia\Rdbms\IDatabase;
+
+namespace Wikimedia\Rdbms;
 
 /**
  * @ingroup Database
@@ -62,3 +63,5 @@ class DBQueryError extends DBExpectedError {
                $this->fname = $fname;
        }
 }
+
+class_alias( DBQueryError::class, 'DBQueryError' );
index d4dce1e..4393343 100644 (file)
  * @ingroup Database
  */
 
+namespace Wikimedia\Rdbms;
+
 /**
  * @ingroup Database
  */
 class DBReadOnlyError extends DBExpectedError {
 }
+
+class_alias( DBReadOnlyError::class, 'DBReadOnlyError' );
index c5e1ed7..457431e 100644 (file)
  * @ingroup Database
  */
 
+namespace Wikimedia\Rdbms;
+
 /**
  * Exception class for replica DB wait timeouts
  * @ingroup Database
  */
 class DBReplicationWaitError extends DBExpectedError {
 }
+
+class_alias( DBReplicationWaitError::class, 'DBReplicationWaitError' );
index a488667..fd79773 100644 (file)
  * @ingroup Database
  */
 
+namespace Wikimedia\Rdbms;
+
 /**
  * @ingroup Database
  */
 class DBTransactionError extends DBExpectedError {
 }
+
+class_alias( DBTransactionError::class, 'DBTransactionError' );
+
index 4e467b2..e45b9f3 100644 (file)
@@ -19,6 +19,8 @@
  * @ingroup Database
  */
 
+namespace Wikimedia\Rdbms;
+
 /**
  * @ingroup Database
  */
@@ -27,3 +29,5 @@ class DBTransactionSizeError extends DBTransactionError {
                return 'transaction-duration-limit-exceeded';
        }
 }
+
+class_alias( DBTransactionSizeError::class, 'DBTransactionSizeError' );
index 5a12671..9c67eb5 100644 (file)
  * @ingroup Database
  */
 
+namespace Wikimedia\Rdbms;
+
 /**
  * @ingroup Database
  */
 class DBUnexpectedError extends DBError {
 }
+
+class_alias( DBUnexpectedError::class, 'DBUnexpectedError' );
index c5819a3..600f34a 100644 (file)
@@ -2,8 +2,6 @@
 
 namespace Wikimedia\Rdbms;
 
-use DatabasePostgres;
-
 class PostgresField implements Field {
        private $name, $tablename, $type, $nullable, $max_length, $deferred, $deferrable, $conname,
                $has_default, $default;
index faf7fb1..ac79acc 100644 (file)
@@ -24,8 +24,6 @@
 namespace Wikimedia\Rdbms;
 
 use InvalidArgumentException;
-use DBTransactionError;
-use DBReplicationWaitError;
 
 /**
  * An interface for generating database load balancers
index 86547b9..e8210c8 100644 (file)
@@ -30,8 +30,6 @@ use EmptyBagOStuff;
 use WANObjectCache;
 use Exception;
 use RuntimeException;
-use DBTransactionError;
-use DBReplicationWaitError;
 
 /**
  * An interface for generating database load balancers
index 2ea0e4e..ceb8d07 100644 (file)
  */
 namespace Wikimedia\Rdbms;
 
-use Database;
-use DBError;
-use DBAccessError;
-use DBTransactionError;
-use DBExpectedError;
 use Exception;
 use InvalidArgumentException;
 
@@ -136,6 +131,10 @@ 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.
         *
+        * This only applies to connections to the generic replica DB for this request.
+        * If a timeout happens when waiting, then getLaggedReplicaMode()/laggedReplicaUsed()
+        * will return true.
+        *
         * @param DBMasterPos|bool $pos Master position or false
         */
        public function waitFor( $pos );
@@ -441,13 +440,17 @@ interface ILoadBalancer {
        /**
         * @note This method will trigger a DB connection if not yet done
         * @param string|bool $domain Domain ID, or false for the current domain
-        * @return bool Whether the generic connection for reads is highly "lagged"
+        * @return bool Whether the database for generic connections this request is highly "lagged"
         */
        public function getLaggedReplicaMode( $domain = false );
 
        /**
+        * Checks whether the database for generic connections this request was both:
+        *   - a) Already choosen due to a prior connection attempt
+        *   - b) Considered highly "lagged"
+        *
         * @note This method will never cause a new DB connection
-        * @return bool Whether any generic connection used for reads was highly "lagged"
+        * @return bool
         */
        public function laggedReplicaUsed();
 
index d178657..e2fbf72 100644 (file)
@@ -25,18 +25,10 @@ namespace Wikimedia\Rdbms;
 use Psr\Log\LoggerInterface;
 use Psr\Log\NullLogger;
 use Wikimedia\ScopedCallback;
-use Database;
 use BagOStuff;
 use EmptyBagOStuff;
 use WANObjectCache;
 use ArrayUtils;
-use DBError;
-use DBAccessError;
-use DBExpectedError;
-use DBUnexpectedError;
-use DBTransactionError;
-use DBTransactionSizeError;
-use DBConnectionError;
 use InvalidArgumentException;
 use RuntimeException;
 use Exception;
@@ -49,7 +41,7 @@ use Exception;
 class LoadBalancer implements ILoadBalancer {
        /** @var array[] Map of (server index => server config array) */
        private $mServers;
-       /** @var \Database[][][] Map of local/foreignUsed/foreignFree => server index => IDatabase array */
+       /** @var Database[][][] Map of local/foreignUsed/foreignFree => server index => IDatabase array */
        private $mConns;
        /** @var float[] Map of (server index => weight) */
        private $mLoads;
@@ -87,7 +79,7 @@ class LoadBalancer implements ILoadBalancer {
        /** @var LoggerInterface */
        protected $perfLogger;
 
-       /** @var \Database Database connection that caused a problem */
+       /** @var Database DB connection object that caused a problem */
        private $errorConnection;
        /** @var integer The generic (not query grouped) replica DB index (of $mServers) */
        private $mReadIndex;
@@ -277,11 +269,11 @@ class LoadBalancer implements ILoadBalancer {
                                $host = $this->getServerName( $i );
                                if ( $lag === false && !is_infinite( $maxServerLag ) ) {
                                        $this->replLogger->error(
-                                               "Server {host} (#$i) is not replicating?", [ 'host' => $host ] );
+                                               "Server {host} is not replicating?", [ 'host' => $host ] );
                                        unset( $loads[$i] );
                                } elseif ( $lag > $maxServerLag ) {
                                        $this->replLogger->warning(
-                                               "Server {host} (#$i) has {lag} seconds of lag (>= {maxlag})",
+                                               "Server {host} has {lag} seconds of lag (>= {maxlag})",
                                                [ 'host' => $host, 'lag' => $lag, 'maxlag' => $maxServerLag ]
                                        );
                                        unset( $loads[$i] );
@@ -312,60 +304,99 @@ class LoadBalancer implements ILoadBalancer {
 
        public function getReaderIndex( $group = false, $domain = false ) {
                if ( count( $this->mServers ) == 1 ) {
-                       # Skip the load balancing if there's only one server
+                       // Skip the load balancing if there's only one server
                        return $this->getWriterIndex();
                } elseif ( $group === false && $this->mReadIndex >= 0 ) {
-                       # Shortcut if generic reader exists already
+                       // Shortcut if the generic reader index was already cached
                        return $this->mReadIndex;
                }
 
-               # Find the relevant load array
                if ( $group !== false ) {
+                       // Use the server weight array for this load group
                        if ( isset( $this->mGroupLoads[$group] ) ) {
-                               $nonErrorLoads = $this->mGroupLoads[$group];
+                               $loads = $this->mGroupLoads[$group];
                        } else {
-                               # No loads for this group, return false and the caller can use some other group
+                               // No loads for this group, return false and the caller can use some other group
                                $this->connLogger->info( __METHOD__ . ": no loads for group $group" );
 
                                return false;
                        }
                } else {
-                       $nonErrorLoads = $this->mLoads;
+                       // Use the generic load group
+                       $loads = $this->mLoads;
                }
 
-               if ( !count( $nonErrorLoads ) ) {
-                       throw new InvalidArgumentException( "Empty server array given to LoadBalancer" );
+               // Scale the configured load ratios according to each server's load and state
+               $this->getLoadMonitor()->scaleLoads( $loads, $domain );
+
+               // Pick a server to use, accounting for weights, load, lag, and mWaitForPos
+               list( $i, $laggedReplicaMode ) = $this->pickReaderIndex( $loads, $domain );
+               if ( $i === false ) {
+                       // Replica DB connection unsuccessful
+                       return false;
                }
 
-               # Scale the configured load ratios according to the dynamic load if supported
-               $this->getLoadMonitor()->scaleLoads( $nonErrorLoads, $domain );
+               if ( $this->mWaitForPos && $i != $this->getWriterIndex() ) {
+                       // Before any data queries are run, wait for the server to catch up to the
+                       // specified position. This is used to improve session consistency. Note that
+                       // when LoadBalancer::waitFor() sets mWaitForPos, the waiting triggers here,
+                       // so update laggedReplicaMode as needed for consistency.
+                       if ( !$this->doWait( $i ) ) {
+                               $laggedReplicaMode = true;
+                       }
+               }
 
-               $laggedReplicaMode = false;
+               if ( $this->mReadIndex <= 0 && $this->mLoads[$i] > 0 && $group === false ) {
+                       // Cache the generic reader index for future ungrouped DB_REPLICA handles
+                       $this->mReadIndex = $i;
+                       // Record if the generic reader index is in "lagged replica DB" mode
+                       if ( $laggedReplicaMode ) {
+                               $this->laggedReplicaMode = true;
+                       }
+               }
+
+               $serverName = $this->getServerName( $i );
+               $this->connLogger->debug( __METHOD__ . ": using server $serverName for group '$group'" );
+
+               return $i;
+       }
 
-               # No server found yet
+       /**
+        * @param array $loads List of server weights
+        * @param string|bool $domain
+        * @return array (reader index, lagged replica mode) or false on failure
+        */
+       private function pickReaderIndex( array $loads, $domain = false ) {
+               if ( !count( $loads ) ) {
+                       throw new InvalidArgumentException( "Empty server array given to LoadBalancer" );
+               }
+
+               /** @var $i int|bool Index of selected server */
                $i = false;
-               # First try quickly looking through the available servers for a server that
-               # meets our criteria
-               $currentLoads = $nonErrorLoads;
+               /** @var $laggedReplicaMode bool Whether server is considered lagged */
+               $laggedReplicaMode = false;
+
+               // Quickly look through the available servers for a server that meets criteria...
+               $currentLoads = $loads;
                while ( count( $currentLoads ) ) {
                        if ( $this->mAllowLagged || $laggedReplicaMode ) {
                                $i = ArrayUtils::pickRandom( $currentLoads );
                        } else {
                                $i = false;
                                if ( $this->mWaitForPos && $this->mWaitForPos->asOfTime() ) {
-                                       # ChronologyProtecter causes mWaitForPos to be set via sessions.
-                                       # This triggers doWait() after connect, so it's especially good to
-                                       # avoid lagged servers so as to avoid just blocking in that method.
+                                       // ChronologyProtecter sets mWaitForPos for session consistency.
+                                       // This triggers doWait() after connect, so it's especially good to
+                                       // avoid lagged servers so as to avoid excessive delay in that method.
                                        $ago = microtime( true ) - $this->mWaitForPos->asOfTime();
-                                       # Aim for <= 1 second of waiting (being too picky can backfire)
+                                       // Aim for <= 1 second of waiting (being too picky can backfire)
                                        $i = $this->getRandomNonLagged( $currentLoads, $domain, $ago + 1 );
                                }
                                if ( $i === false ) {
-                                       # Any server with less lag than it's 'max lag' param is preferable
+                                       // Any server with less lag than it's 'max lag' param is preferable
                                        $i = $this->getRandomNonLagged( $currentLoads, $domain );
                                }
                                if ( $i === false && count( $currentLoads ) != 0 ) {
-                                       # All replica DBs lagged. Switch to read-only mode
+                                       // All replica DBs lagged. Switch to read-only mode
                                        $this->replLogger->error( "All replica DBs lagged. Switch to read-only mode" );
                                        $i = ArrayUtils::pickRandom( $currentLoads );
                                        $laggedReplicaMode = true;
@@ -373,12 +404,12 @@ class LoadBalancer implements ILoadBalancer {
                        }
 
                        if ( $i === false ) {
-                               # pickRandom() returned false
-                               # This is permanent and means the configuration or the load monitor
-                               # wants us to return false.
+                               // pickRandom() returned false.
+                               // This is permanent and means the configuration or the load monitor
+                               // wants us to return false.
                                $this->connLogger->debug( __METHOD__ . ": pickRandom() returned false" );
 
-                               return false;
+                               return [ false, false ];
                        }
 
                        $serverName = $this->getServerName( $i );
@@ -387,8 +418,7 @@ class LoadBalancer implements ILoadBalancer {
                        $conn = $this->openConnection( $i, $domain );
                        if ( !$conn ) {
                                $this->connLogger->warning( __METHOD__ . ": Failed connecting to $i/$domain" );
-                               unset( $nonErrorLoads[$i] );
-                               unset( $currentLoads[$i] );
+                               unset( $currentLoads[$i] ); // avoid this server next iteration
                                $i = false;
                                continue;
                        }
@@ -399,92 +429,79 @@ class LoadBalancer implements ILoadBalancer {
                                $this->reuseConnection( $conn );
                        }
 
-                       # Return this server
+                       // Return this server
                        break;
                }
 
-               # If all servers were down, quit now
-               if ( !count( $nonErrorLoads ) ) {
+               // If all servers were down, quit now
+               if ( !count( $currentLoads ) ) {
                        $this->connLogger->error( "All servers down" );
                }
 
-               if ( $i !== false ) {
-                       # Replica DB connection successful.
-                       # Wait for the session master pos for a short time.
-                       if ( $this->mWaitForPos && $i > 0 ) {
-                               $this->doWait( $i );
-                       }
-                       if ( $this->mReadIndex <= 0 && $this->mLoads[$i] > 0 && $group === false ) {
-                               $this->mReadIndex = $i;
-                               # Record if the generic reader index is in "lagged replica DB" mode
-                               if ( $laggedReplicaMode ) {
-                                       $this->laggedReplicaMode = true;
-                               }
-                       }
-                       $serverName = $this->getServerName( $i );
-                       $this->connLogger->debug(
-                               __METHOD__ . ": using server $serverName for group '$group'" );
-               }
-
-               return $i;
+               return [ $i, $laggedReplicaMode ];
        }
 
        public function waitFor( $pos ) {
                $oldPos = $this->mWaitForPos;
-               $this->mWaitForPos = $pos;
-
-               // If a generic reader connection was already established, then wait now
-               $i = $this->mReadIndex;
-               if ( $i > 0 ) {
-                       if ( !$this->doWait( $i ) ) {
-                               $this->laggedReplicaMode = true;
+               try {
+                       $this->mWaitForPos = $pos;
+                       // If a generic reader connection was already established, then wait now
+                       $i = $this->mReadIndex;
+                       if ( $i > 0 ) {
+                               if ( !$this->doWait( $i ) ) {
+                                       $this->laggedReplicaMode = true;
+                               }
                        }
+               } finally {
+                       // Restore the older position if it was higher since this is used for lag-protection
+                       $this->setWaitForPositionIfHigher( $oldPos );
                }
-
-               // Restore the older position if it was higher
-               $this->setWaitForPositionIfHigher( $oldPos );
        }
 
        public function waitForOne( $pos, $timeout = null ) {
                $oldPos = $this->mWaitForPos;
-               $this->mWaitForPos = $pos;
+               try {
+                       $this->mWaitForPos = $pos;
 
-               $i = $this->mReadIndex;
-               if ( $i <= 0 ) {
-                       // Pick a generic replica DB if there isn't one yet
-                       $readLoads = $this->mLoads;
-                       unset( $readLoads[$this->getWriterIndex()] ); // replica DBs only
-                       $readLoads = array_filter( $readLoads ); // with non-zero load
-                       $i = ArrayUtils::pickRandom( $readLoads );
-               }
+                       $i = $this->mReadIndex;
+                       if ( $i <= 0 ) {
+                               // Pick a generic replica DB if there isn't one yet
+                               $readLoads = $this->mLoads;
+                               unset( $readLoads[$this->getWriterIndex()] ); // replica DBs only
+                               $readLoads = array_filter( $readLoads ); // with non-zero load
+                               $i = ArrayUtils::pickRandom( $readLoads );
+                       }
 
-               if ( $i > 0 ) {
-                       $ok = $this->doWait( $i, true, $timeout );
-               } else {
-                       $ok = true; // no applicable loads
+                       if ( $i > 0 ) {
+                               $ok = $this->doWait( $i, true, $timeout );
+                       } else {
+                               $ok = true; // no applicable loads
+                       }
+               } finally {
+                       # Restore the old position, as this is not used for lag-protection but for throttling
+                       $this->mWaitForPos = $oldPos;
                }
 
-               // 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 );
+               try {
+                       $this->mWaitForPos = $pos;
+                       $serverCount = count( $this->mServers );
 
-               $ok = true;
-               for ( $i = 1; $i < $serverCount; $i++ ) {
-                       if ( $this->mLoads[$i] > 0 ) {
-                               $ok = $this->doWait( $i, true, $timeout ) && $ok;
+                       $ok = true;
+                       for ( $i = 1; $i < $serverCount; $i++ ) {
+                               if ( $this->mLoads[$i] > 0 ) {
+                                       $ok = $this->doWait( $i, true, $timeout ) && $ok;
+                               }
                        }
+               } finally {
+                       # Restore the old position, as this is not used for lag-protection but for throttling
+                       $this->mWaitForPos = $oldPos;
                }
 
-               // Restore the older position if it was higher
-               $this->setWaitForPositionIfHigher( $oldPos );
-
                return $ok;
        }
 
index 05973df..ceb0052 100644 (file)
@@ -39,6 +39,12 @@ class DeleteLogFormatter extends LogFormatter {
                                // logentry-suppress-event-legacy, logentry-suppress-revision-legacy
                                return "$key-legacy";
                        }
+               } elseif ( $this->entry->getSubtype() === 'restore' ) {
+                       $rawParams = $this->entry->getParameters();
+                       if ( !isset( $rawParams[':assoc:count'] ) ) {
+                               // Message: logentry-delete-restore-nocount
+                               return $key . '-nocount';
+                       }
                }
 
                return $key;
@@ -97,6 +103,19 @@ class DeleteLogFormatter extends LogFormatter {
                                $this->parsedParametersDeleteLog = array_slice( $params, 0, 3 );
                                return $this->parsedParametersDeleteLog;
                        }
+               } elseif ( $subtype === 'restore' ) {
+                       $rawParams = $this->entry->getParameters();
+                       if ( isset( $rawParams[':assoc:count'] ) ) {
+                               $countList = [];
+                               foreach ( $rawParams[':assoc:count'] as $type => $count ) {
+                                       if ( $count ) {
+                                               // Messages: restore-count-revisions, restore-count-files
+                                               $countList[] = $this->context->msg( 'restore-count-' . $type )
+                                                       ->numParams( $count )->plain();
+                                       }
+                               }
+                               $params[3] = $this->context->getLanguage()->listToText( $countList );
+                       }
                }
 
                $this->parsedParametersDeleteLog = $params;
@@ -276,6 +295,11 @@ class DeleteLogFormatter extends LogFormatter {
                                $params[':assoc:old'][$key] = (bool)( $old & $bit );
                                $params[':assoc:new'][$key] = (bool)( $new & $bit );
                        }
+               } elseif ( $subtype === 'restore' ) {
+                       $rawParams = $entry->getParameters();
+                       if ( isset( $rawParams[':assoc:count'] ) ) {
+                               $params[':assoc:count'] = $rawParams[':assoc:count'];
+                       }
                }
 
                return $params;
index 4087fb3..2cf4d23 100644 (file)
@@ -307,12 +307,6 @@ class SVGReader {
                }
        }
 
-       // @todo FIXME: Unused, remove?
-       private function throwXmlError( $err ) {
-               $this->debug( "FAILURE: $err" );
-               wfDebug( "SVGReader XML error: $err\n" );
-       }
-
        private function debug( $data ) {
                if ( $this->mDebug ) {
                        wfDebug( "SVGReader: $data\n" );
index 1ab0f36..2a74e0d 100644 (file)
@@ -521,7 +521,7 @@ abstract class TransformationalImageHandler extends ImageHandler {
                                $cmd = wfEscapeShellArg( $wgImageMagickConvertCommand ) . ' -version';
                                wfDebug( $method . ": Running convert -version\n" );
                                $retval = '';
-                               $return = wfShellExec( $cmd, $retval );
+                               $return = wfShellExecWithStderr( $cmd, $retval );
                                $x = preg_match(
                                        '/Version: ImageMagick ([0-9]*\.[0-9]*\.[0-9]*)/', $return, $matches
                                );
index 8f94374..a4a6ba8 100644 (file)
  * @ingroup Cache
  */
 
+use Wikimedia\Rdbms\Database;
 use Wikimedia\Rdbms\IDatabase;
+use Wikimedia\Rdbms\DBError;
+use Wikimedia\Rdbms\DBQueryError;
+use Wikimedia\Rdbms\DBConnectionError;
 use \MediaWiki\MediaWikiServices;
 use \Wikimedia\WaitConditionLoop;
 use \Wikimedia\Rdbms\TransactionProfiler;
index c2bfb07..11e1a30 100644 (file)
@@ -67,6 +67,56 @@ class PageArchive {
                return self::listPages( $dbr, '' );
        }
 
+       /**
+        * List deleted pages recorded in the archive matching the
+        * given term, using search engine archive.
+        * Returns result wrapper with (ar_namespace, ar_title, count) fields.
+        *
+        * @param string $term Search term
+        * @return ResultWrapper
+        */
+       public static function listPagesBySearch( $term ) {
+               $title = Title::newFromText( $term );
+               if ( $title ) {
+                       $ns = $title->getNamespace();
+                       $termMain = $title->getText();
+                       $termDb = $title->getDBkey();
+               } else {
+                       // Prolly won't work too good
+                       // @todo handle bare namespace names cleanly?
+                       $ns = 0;
+                       $termMain = $termDb = $term;
+               }
+
+               // Try search engine first
+               $engine = MediaWikiServices::getInstance()->newSearchEngine();
+               $engine->setLimitOffset( 100 );
+               $engine->setNamespaces( [ $ns ] );
+               $results = $engine->searchArchiveTitle( $termMain );
+               if ( !$results->isOK() ) {
+                       $results = [];
+               } else {
+                       $results = $results->getValue();
+               }
+
+               if ( !$results ) {
+                       // Fall back to regular prefix search
+                       return self::listPagesByPrefix( $term );
+               }
+
+               $dbr = wfGetDB( DB_REPLICA );
+               $condTitles = array_unique( array_map( function ( Title $t ) {
+                       return $t->getDBkey();
+               }, $results ) );
+               $conds = [
+                       'ar_namespace' => $ns,
+                       $dbr->makeList( [ 'ar_title' => $condTitles ], LIST_OR ) . " OR ar_title " .
+                       $dbr->buildLike( $termDb, $dbr->anyString() )
+               ];
+
+               return self::listPages( $dbr, $conds );
+       }
+
        /**
         * List deleted pages recorded in the archive table matching the
         * given title prefix.
@@ -133,6 +183,7 @@ class PageArchive {
                $fields = [
                        'ar_minor_edit', 'ar_timestamp', 'ar_user', 'ar_user_text',
                        'ar_comment', 'ar_len', 'ar_deleted', 'ar_rev_id', 'ar_sha1',
+                       'ar_page_id'
                ];
 
                if ( $this->config->get( 'ContentHandlerUseDB' ) ) {
@@ -402,25 +453,12 @@ class PageArchive {
 
                // Touch the log!
 
-               if ( $textRestored && $filesRestored ) {
-                       $reason = wfMessage( 'undeletedrevisions-files' )
-                               ->numParams( $textRestored, $filesRestored )->inContentLanguage()->text();
-               } elseif ( $textRestored ) {
-                       $reason = wfMessage( 'undeletedrevisions' )->numParams( $textRestored )
-                               ->inContentLanguage()->text();
-               } elseif ( $filesRestored ) {
-                       $reason = wfMessage( 'undeletedfiles' )->numParams( $filesRestored )
-                               ->inContentLanguage()->text();
-               } else {
+               if ( !$textRestored && !$filesRestored ) {
                        wfDebug( "Undelete: nothing undeleted...\n" );
 
                        return false;
                }
 
-               if ( trim( $comment ) != '' ) {
-                       $reason .= wfMessage( 'colon-separator' )->inContentLanguage()->text() . $comment;
-               }
-
                if ( $user === null ) {
                        global $wgUser;
                        $user = $wgUser;
@@ -429,15 +467,21 @@ class PageArchive {
                $logEntry = new ManualLogEntry( 'delete', 'restore' );
                $logEntry->setPerformer( $user );
                $logEntry->setTarget( $this->title );
-               $logEntry->setComment( $reason );
+               $logEntry->setComment( $comment );
                $logEntry->setTags( $tags );
+               $logEntry->setParameters( [
+                       ':assoc:count' => [
+                               'revisions' => $textRestored,
+                               'files' => $filesRestored,
+                       ],
+               ] );
 
                Hooks::run( 'ArticleUndeleteLogEntry', [ $this, &$logEntry, $user ] );
 
                $logid = $logEntry->insert();
                $logEntry->publish( $logid );
 
-               return [ $textRestored, $filesRestored, $reason ];
+               return [ $textRestored, $filesRestored, $comment ];
        }
 
        /**
@@ -620,7 +664,7 @@ class PageArchive {
                $restored = 0; // number of revisions restored
                /** @var Revision $revision */
                $revision = null;
-
+               $restoredPages = [];
                // If there are no restorable revisions, we can skip most of the steps.
                if ( $latestRestorableRow === null ) {
                        $failedRevisionCount = $rev_count;
@@ -677,6 +721,7 @@ class PageArchive {
 
                                Hooks::run( 'ArticleRevisionUndeleted',
                                        [ &$this->title, $revision, $row->ar_page_id ] );
+                               $restoredPages[$row->ar_page_id] = true;
                        }
 
                        // Now that it's safely stored, take it out of the archive
@@ -717,7 +762,8 @@ class PageArchive {
                                );
                        }
 
-                       Hooks::run( 'ArticleUndelete', [ &$this->title, $created, $comment, $oldPageId ] );
+                       Hooks::run( 'ArticleUndelete',
+                               [ &$this->title, $created, $comment, $oldPageId, $restoredPages ] );
                        if ( $this->title->getNamespace() == NS_FILE ) {
                                DeferredUpdates::addUpdate( new HTMLCacheUpdate( $this->title, 'imagelinks' ) );
                        }
index 7044e6a..a687900 100644 (file)
@@ -24,6 +24,8 @@ use \MediaWiki\Logger\LoggerFactory;
 use \MediaWiki\MediaWikiServices;
 use Wikimedia\Rdbms\FakeResultWrapper;
 use Wikimedia\Rdbms\IDatabase;
+use Wikimedia\Rdbms\DBError;
+use Wikimedia\Rdbms\DBUnexpectedError;
 
 /**
  * Class representing a MediaWiki article and history.
@@ -3250,6 +3252,9 @@ class WikiPage implements Page, IDBAccessObject {
 
                MediaWikiServices::getInstance()->getLinkCache()->invalidateTitle( $title );
 
+               // Invalidate caches of articles which include this page
+               DeferredUpdates::addUpdate( new HTMLCacheUpdate( $title, 'templatelinks' ) );
+
                if ( $title->getNamespace() == NS_CATEGORY ) {
                        // Load the Category object, which will schedule a job to create
                        // the category table row if necessary. Checking a replica DB is ok
index be4557d..19f368a 100644 (file)
@@ -1610,9 +1610,7 @@ class Parser {
                                true, 'free',
                                $this->getExternalLinkAttribs( $url ), $this->mTitle );
                        # Register it in the output object...
-                       # Replace unnecessary URL escape codes with their equivalent characters
-                       $pasteurized = self::normalizeLinkUrl( $url );
-                       $this->mOutput->addExternalLink( $pasteurized );
+                       $this->mOutput->addExternalLink( $url );
                }
                return $text . $trail;
        }
@@ -1908,10 +1906,7 @@ class Parser {
                                $this->getExternalLinkAttribs( $url ), $this->mTitle ) . $dtrail . $trail;
 
                        # Register link in the output object.
-                       # Replace unnecessary URL escape codes with the referenced character
-                       # This prevents spammers from hiding links from the filters
-                       $pasteurized = self::normalizeLinkUrl( $url );
-                       $this->mOutput->addExternalLink( $pasteurized );
+                       $this->mOutput->addExternalLink( $url );
                }
 
                return $s;
@@ -5086,9 +5081,11 @@ class Parser {
                                                        }
                                                        if ( preg_match( "/^($prots)$addr$chars*$/u", $linkValue ) ) {
                                                                $link = $linkValue;
+                                                               $this->mOutput->addExternalLink( $link );
                                                        } else {
                                                                $localLinkTitle = Title::newFromText( $linkValue );
                                                                if ( $localLinkTitle !== null ) {
+                                                                       $this->mOutput->addLink( $localLinkTitle );
                                                                        $link = $localLinkTitle->getLinkURL();
                                                                }
                                                        }
@@ -5144,6 +5141,11 @@ class Parser {
                                $internalParamMap = [];
                                foreach ( $internalParamNames as $type => $names ) {
                                        foreach ( $names as $name ) {
+                                               // For grep: img_left, img_right, img_center, img_none,
+                                               // img_baseline, img_sub, img_super, img_top, img_text_top, img_middle,
+                                               // img_bottom, img_text_bottom,
+                                               // img_thumbnail, img_manualthumb, img_framed, img_frameless, img_upright,
+                                               // img_border, img_link, img_alt, img_class
                                                $magicName = str_replace( '-', '_', "img_$name" );
                                                $internalParamMap[$magicName] = [ $type, $name ];
                                        }
index b2f99b3..7de3b30 100644 (file)
@@ -535,6 +535,10 @@ class ParserOutput extends CacheTime {
                # We don't register links pointing to our own server, unless... :-)
                global $wgServer, $wgRegisterInternalExternals;
 
+               # Replace unnecessary URL escape codes with the referenced character
+               # This prevents spammers from hiding links from the filters
+               $url = parser::normalizeLinkUrl( $url );
+
                $registerExternalLink = true;
                if ( !$wgRegisterInternalExternals ) {
                        $registerExternalLink = !self::isLinkInternal( $wgServer, $url );
index 264ec0c..2225e3f 100644 (file)
@@ -21,6 +21,8 @@
  * @ingroup Profiler
  */
 
+use Wikimedia\Rdbms\DBError;
+
 /**
  * Logs profiling data into the local DB
  *
index e72eaf2..3cd7821 100644 (file)
@@ -27,6 +27,7 @@ use Psr\Log\LoggerAwareInterface;
 use Psr\Log\LoggerInterface;
 use Psr\Log\NullLogger;
 use WrappedString\WrappedString;
+use Wikimedia\Rdbms\DBConnectionError;
 
 /**
  * Dynamic JavaScript and CSS resource loading system.
index d72b3af..5740925 100644 (file)
@@ -28,43 +28,77 @@ class ResourceLoaderSkinModule extends ResourceLoaderFileModule {
         * @return array
         */
        public function getStyles( ResourceLoaderContext $context ) {
-               $conf = $this->getConfig();
-               $logo = $conf->get( 'Logo' );
-               $logoHD = $conf->get( 'LogoHD' );
-
-               $logo1 = OutputPage::transformResourcePath( $conf, $logo );
-               $logo15 = OutputPage::transformResourcePath( $conf, $logoHD['1.5x'] );
-               $logo2 = OutputPage::transformResourcePath( $conf, $logoHD['2x'] );
-
+               $logo = $this->getLogo( $this->getConfig() );
                $styles = parent::getStyles( $context );
+
+               $default = !is_array( $logo ) ? $logo : $logo['1x'];
                $styles['all'][] = '.mw-wiki-logo { background-image: ' .
-                       CSSMin::buildUrlValue( $logo1 ) .
-                       '; }';
-               if ( $logoHD ) {
-                       if ( isset( $logoHD['1.5x'] ) ) {
+                               CSSMin::buildUrlValue( $default ) .
+                               '; }';
+
+               if ( is_array( $logo ) ) {
+                       if ( isset( $logo['1.5x'] ) ) {
                                $styles[
                                        '(-webkit-min-device-pixel-ratio: 1.5), ' .
                                        '(min--moz-device-pixel-ratio: 1.5), ' .
                                        '(min-resolution: 1.5dppx), ' .
                                        '(min-resolution: 144dpi)'
                                ][] = '.mw-wiki-logo { background-image: ' .
-                               CSSMin::buildUrlValue( $logo15 ) . ';' .
+                               CSSMin::buildUrlValue( $logo['1.5x'] ) . ';' .
                                'background-size: 135px auto; }';
                        }
-                       if ( isset( $logoHD['2x'] ) ) {
+                       if ( isset( $logo['2x'] ) ) {
                                $styles[
                                        '(-webkit-min-device-pixel-ratio: 2), ' .
                                        '(min--moz-device-pixel-ratio: 2),' .
                                        '(min-resolution: 2dppx), ' .
                                        '(min-resolution: 192dpi)'
                                ][] = '.mw-wiki-logo { background-image: ' .
-                               CSSMin::buildUrlValue( $logo2 ) . ';' .
+                               CSSMin::buildUrlValue( $logo['2x'] ) . ';' .
                                'background-size: 135px auto; }';
                        }
                }
+
                return $styles;
        }
 
+       /**
+        * @param Config $conf
+        * @return string|array Single url if no variants are defined
+        *  or array of logo urls keyed by dppx in form "<float>x".
+        *  Key "1x" is always defined.
+        */
+       public static function getLogo( Config $conf ) {
+               $logo = $conf->get( 'Logo' );
+               $logoHD = $conf->get( 'LogoHD' );
+
+               $logo1Url = OutputPage::transformResourcePath( $conf, $logo );
+
+               if ( !$logoHD ) {
+                       return $logo1Url;
+               }
+
+               $logoUrls = [
+                       '1x' => $logo1Url,
+               ];
+
+               // Only 1.5x and 2x are supported
+               if ( isset( $logoHD['1.5x'] ) ) {
+                       $logoUrls['1.5x'] = OutputPage::transformResourcePath(
+                               $conf,
+                               $logoHD['1.5x']
+                       );
+               }
+               if ( isset( $logoHD['2x'] ) ) {
+                       $logoUrls['2x'] = OutputPage::transformResourcePath(
+                               $conf,
+                               $logoHD['2x']
+                       );
+               }
+
+               return $logoUrls;
+       }
+
        /**
         * @param ResourceLoaderContext $context
         * @return bool
index 44371bb..a0061e3 100644 (file)
@@ -93,6 +93,7 @@ class ResourceLoaderSpecialCharacterDataModule extends ResourceLoaderModule {
                        'special-characters-group-thai',
                        'special-characters-group-lao',
                        'special-characters-group-khmer',
+                       'special-characters-group-canadianaboriginal',
                        'special-characters-title-endash',
                        'special-characters-title-emdash',
                        'special-characters-title-minus'
index 04b2f72..d92dc0a 100644 (file)
@@ -112,7 +112,6 @@ class ResourceLoaderStartUpModule extends ResourceLoaderModule {
                        'wgIllegalFileChars' => Title::convertByteClassToUnicodeClass( $illegalFileChars ),
                        'wgResourceLoaderStorageVersion' => $conf->get( 'ResourceLoaderStorageVersion' ),
                        'wgResourceLoaderStorageEnabled' => $conf->get( 'ResourceLoaderStorageEnabled' ),
-                       'wgResourceLoaderLegacyModules' => self::getLegacyModules(),
                        'wgForeignUploadTargets' => $conf->get( 'ForeignUploadTargets' ),
                        'wgEnableUploads' => $conf->get( 'EnableUploads' ),
                ];
@@ -330,9 +329,11 @@ class ResourceLoaderStartUpModule extends ResourceLoaderModule {
         */
        public static function getStartupModulesUrl( ResourceLoaderContext $context ) {
                $rl = $context->getResourceLoader();
-
                $derivative = new DerivativeResourceLoaderContext( $context );
-               $derivative->setModules( self::getStartupModules() );
+               $derivative->setModules( array_merge(
+                       self::getStartupModules(),
+                       self::getLegacyModules()
+               ) );
                $derivative->setOnly( 'scripts' );
                // Must setModules() before makeVersionQuery()
                $derivative->setVersion( $rl->makeVersionQuery( $derivative ) );
index 3eac5df..fd31eac 100644 (file)
@@ -22,6 +22,7 @@
  * @author Roan Kattouw
  */
 
+use Wikimedia\Rdbms\Database;
 use Wikimedia\Rdbms\IDatabase;
 
 /**
index 9817b6c..6bb4e5a 100644 (file)
@@ -72,6 +72,21 @@ abstract class SearchEngine {
                return null;
        }
 
+       /**
+        * Perform a title search in the article archive.
+        * NOTE: these results still should be filtered by
+        * matching against PageArchive, permissions checks etc
+        * The results returned by this methods are only sugegstions and
+        * may not end up being shown to the user.
+        *
+        * @param string $term Raw search term
+        * @return Status<Title[]>
+        * @since 1.29
+        */
+       function searchArchiveTitle( $term ) {
+               return Status::newGood( [] );
+       }
+
        /**
         * Perform a title-only search query and return a result set.
         * If title searches are not supported or disabled, return null.
index d0e3a24..cebdb40 100644 (file)
 class SearchHighlighter {
        protected $mCleanWikitext = true;
 
+       /**
+        * @warning If you pass false to this constructor, then
+        *  the caller is responsible for HTML escaping.
+        */
        function __construct( $cleanupWikitext = true ) {
                $this->mCleanWikitext = $cleanupWikitext;
        }
@@ -456,6 +460,10 @@ class SearchHighlighter {
                $text = preg_replace( "/('''|<\/?[iIuUbB]>)/", "", $text );
                $text = preg_replace( "/''/", "", $text );
 
+               // Note, the previous /<\/?[^>]+>/ is insufficient
+               // for XSS safety as the HTML tag can span multiple
+               // search results (T144845).
+               $text = Sanitizer::escapeHtmlAllowEntities( $text );
                return $text;
        }
 
index dc0a703..5868904 100644 (file)
@@ -699,7 +699,7 @@ abstract class BaseTemplate extends QuickTemplate {
                        $html .= Html::closeElement( 'ul' );
                }
 
-               $html .= $this->clear() . $footerEnd;
+               $html .= $this->getClear() . $footerEnd;
 
                return $html;
        }
@@ -710,7 +710,7 @@ abstract class BaseTemplate extends QuickTemplate {
         * @return string html
         * @since 1.29
         */
-       protected function clear() {
+       protected function getClear() {
                return Html::element( 'div', [ 'class' => 'visualClear' ] );
        }
 
index 52678d4..99658f2 100644 (file)
@@ -164,8 +164,6 @@ abstract class Skin extends ContextSource {
                        'content' => [
                                'mediawiki.page.ready',
                        ],
-                       // modules that exist for legacy reasons
-                       'legacy' => ResourceLoaderStartUpModule::getLegacyModules(),
                        // modules relating to search functionality
                        'search' => [],
                        // modules relating to functionality relating to watching an article
index 61dbf2b..1dd9a06 100644 (file)
@@ -720,7 +720,10 @@ class SkinTemplate extends Skin {
                        }
 
                        if ( $authManager->canAuthenticateNow() ) {
-                               $personal_urls['login'] = $login_url;
+                               $key = User::groupHasPermission( '*', 'read' )
+                                       ? 'login'
+                                       : 'login-private';
+                               $personal_urls[$key] = $login_url;
                        }
                }
 
index ad9a248..3aafc94 100644 (file)
@@ -379,7 +379,7 @@ abstract class ChangesListSpecialPage extends SpecialPage {
                                                },
                                                'cssClassSuffix' => 'patrolled',
                                                'isRowApplicableCallable' => function ( $ctx, $rc ) {
-                                                                                    return $rc->getAttribute( 'rc_patrolled' );
+                                                       return $rc->getAttribute( 'rc_patrolled' );
                                                },
                                        ],
                                        [
@@ -394,7 +394,7 @@ abstract class ChangesListSpecialPage extends SpecialPage {
                                                },
                                                'cssClassSuffix' => 'unpatrolled',
                                                'isRowApplicableCallable' => function ( $ctx, $rc ) {
-                                                                                    return !$rc->getAttribute( 'rc_patrolled' );
+                                                       return !$rc->getAttribute( 'rc_patrolled' );
                                                },
                                        ],
                                ],
@@ -422,6 +422,50 @@ abstract class ChangesListSpecialPage extends SpecialPage {
                ];
        }
 
+       /**
+        * Check if filters are in conflict and guaranteed to return no results.
+        *
+        * @return bool
+        */
+       protected function areFiltersInConflict() {
+               $opts = $this->getOptions();
+               /** @var ChangesListFilterGroup $group */
+               foreach ( $this->getFilterGroups() as $group ) {
+
+                       if ( $group->getConflictingGroups() ) {
+                               wfLogWarning(
+                                       $group->getName() .
+                                       " specifies conflicts with other groups but these are not supported yet."
+                               );
+                       }
+
+                       /** @var ChangesListFilter $conflictingFilter */
+                       foreach ( $group->getConflictingFilters() as $conflictingFilter ) {
+                               if ( $conflictingFilter->activelyInConflictWithGroup( $group, $opts ) ) {
+                                       return true;
+                               }
+                       }
+
+                       /** @var ChangesListFilter $filter */
+                       foreach ( $group->getFilters() as $filter ) {
+
+                               /** @var ChangesListFilter $conflictingFilter */
+                               foreach ( $filter->getConflictingFilters() as $conflictingFilter ) {
+                                       if (
+                                               $conflictingFilter->activelyInConflictWithFilter( $filter, $opts ) &&
+                                               $filter->activelyInConflictWithFilter( $conflictingFilter, $opts )
+                                       ) {
+                                               return true;
+                                       }
+                               }
+
+                       }
+
+               }
+
+               return false;
+       }
+
        /**
         * Main execution point
         *
@@ -707,6 +751,7 @@ abstract class ChangesListSpecialPage extends SpecialPage {
        public function getDefaultOptions() {
                $config = $this->getConfig();
                $opts = new FormOptions();
+               $structuredUI = $this->getUser()->getOption( 'rcenhancedfilters' );
 
                // Add all filters
                foreach ( $this->filterGroups as $filterGroup ) {
@@ -716,7 +761,7 @@ abstract class ChangesListSpecialPage extends SpecialPage {
                                $opts->add( $filterGroup->getName(), $filterGroup->getDefault() );
                        } else {
                                foreach ( $filterGroup->getFilters() as $filter ) {
-                                       $opts->add( $filter->getName(), $filter->getDefault() );
+                                       $opts->add( $filter->getName(), $filter->getDefault( $structuredUI ) );
                                }
                        }
                }
@@ -1169,9 +1214,9 @@ abstract class ChangesListSpecialPage extends SpecialPage {
                &$tables, &$fields, &$conds, &$query_options, &$join_conds, $selectedExpLevels ) {
 
                global $wgLearnerEdits,
-                          $wgExperiencedUserEdits,
-                          $wgLearnerMemberSince,
-                          $wgExperiencedUserMemberSince;
+                       $wgExperiencedUserEdits,
+                       $wgLearnerMemberSince,
+                       $wgExperiencedUserMemberSince;
 
                $LEVEL_COUNT = 3;
 
@@ -1207,7 +1252,7 @@ abstract class ChangesListSpecialPage extends SpecialPage {
                );
 
                if ( $selectedExpLevels === [ 'newcomer' ] ) {
-                       $conds[] =  "NOT ( $aboveNewcomer )";
+                       $conds[] = "NOT ( $aboveNewcomer )";
                } elseif ( $selectedExpLevels === [ 'learner' ] ) {
                        $conds[] = $dbr->makeList(
                                [ $aboveNewcomer, "NOT ( $aboveLearner )" ],
index 68d2d30..93873c0 100644 (file)
@@ -23,6 +23,7 @@
 
 use Wikimedia\Rdbms\ResultWrapper;
 use Wikimedia\Rdbms\IDatabase;
+use Wikimedia\Rdbms\DBError;
 
 /**
  * This is a class for doing query pages; since they're almost all the same,
index b1ddacf..9b5d5f4 100644 (file)
@@ -41,7 +41,7 @@ abstract class RedirectSpecialPage extends UnlistedSpecialPage {
                $query = $this->getRedirectQuery();
                // Redirect to a page title with possible query parameters
                if ( $redirect instanceof Title ) {
-                       $url = $redirect->getFullURL( $query );
+                       $url = $redirect->getFullUrlForRedirect( $query );
                        $this->getOutput()->redirect( $url );
 
                        return $redirect;
index 33e1cc3..84d3b08 100644 (file)
@@ -96,6 +96,7 @@ class SpecialPageFactory {
                'Block' => 'SpecialBlock',
                'Unblock' => 'SpecialUnblock',
                'BlockList' => 'SpecialBlockList',
+               'AutoblockList' => 'SpecialAutoblockList',
                'ChangePassword' => 'SpecialChangePassword',
                'BotPasswords' => 'SpecialBotPasswords',
                'PasswordReset' => 'SpecialPasswordReset',
@@ -144,6 +145,7 @@ class SpecialPageFactory {
                'RandomInCategory' => 'SpecialRandomInCategory',
                'Randomredirect' => 'SpecialRandomredirect',
                'Randomrootpage' => 'SpecialRandomrootpage',
+               'GoToInterwiki' => 'SpecialGoToInterwiki',
 
                // High use pages
                'Mostlinkedcategories' => 'MostlinkedCategoriesPage',
@@ -504,7 +506,7 @@ class SpecialPageFactory {
         * @param bool $including Bool output is being captured for use in {{special:whatever}}
         * @param LinkRenderer|null $linkRenderer (since 1.28)
         *
-        * @return bool
+        * @return bool|Title
         */
        public static function executePath( Title &$title, IContextSource &$context, $including = false,
                LinkRenderer $linkRenderer = null
diff --git a/includes/specials/SpecialAutoblockList.php b/includes/specials/SpecialAutoblockList.php
new file mode 100644 (file)
index 0000000..dcb2444
--- /dev/null
@@ -0,0 +1,152 @@
+<?php
+/**
+ * Implements Special:AutoblockList
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup SpecialPage
+ */
+
+/**
+ * A special page that lists autoblocks
+ *
+ * @since 1.29
+ * @ingroup SpecialPage
+ */
+class SpecialAutoblockList extends SpecialPage {
+
+       function __construct() {
+               parent::__construct( 'AutoblockList' );
+       }
+
+       /**
+        * Main execution point
+        *
+        * @param string $par Title fragment
+        */
+       public function execute( $par ) {
+               $this->setHeaders();
+               $this->outputHeader();
+               $out = $this->getOutput();
+               $lang = $this->getLanguage();
+               $out->setPageTitle( $this->msg( 'autoblocklist' ) );
+               $this->addHelpLink( 'Autoblock' );
+               $out->addModuleStyles( [ 'mediawiki.special' ] );
+
+               # setup BlockListPager here to get the actual default Limit
+               $pager = $this->getBlockListPager();
+
+               # Just show the block list
+               $fields = [
+                       'Limit' => [
+                               'type' => 'limitselect',
+                               'label-message' => 'table_pager_limit_label',
+                               'options' => [
+                                       $lang->formatNum( 20 ) => 20,
+                                       $lang->formatNum( 50 ) => 50,
+                                       $lang->formatNum( 100 ) => 100,
+                                       $lang->formatNum( 250 ) => 250,
+                                       $lang->formatNum( 500 ) => 500,
+                               ],
+                               'name' => 'limit',
+                               'default' => $pager->getLimit(),
+                       ]
+               ];
+
+               $context = new DerivativeContext( $this->getContext() );
+               $context->setTitle( $this->getPageTitle() ); // Remove subpage
+               $form = HTMLForm::factory( 'ooui', $fields, $context );
+               $form->setMethod( 'get' )
+                       ->setFormIdentifier( 'blocklist' )
+                       ->setWrapperLegendMsg( 'autoblocklist-legend' )
+                       ->setSubmitTextMsg( 'autoblocklist-submit' )
+                       ->setSubmitProgressive()
+                       ->prepareForm()
+                       ->displayForm( false );
+
+               $this->showList( $pager );
+       }
+
+       /**
+        * Setup a new BlockListPager instance.
+        * @return BlockListPager
+        */
+       protected function getBlockListPager() {
+               $conds = [
+                       'ipb_parent_block_id IS NOT NULL'
+               ];
+               # Is the user allowed to see hidden blocks?
+               if ( !$this->getUser()->isAllowed( 'hideuser' ) ) {
+                       $conds['ipb_deleted'] = 0;
+               }
+
+               return new BlockListPager( $this, $conds );
+       }
+
+       /**
+        * Show the list of blocked accounts matching the actual filter.
+        * @param BlockListPager $pager The BlockListPager instance for this page
+        */
+       protected function showList( BlockListPager $pager ) {
+               $out = $this->getOutput();
+
+               # Check for other blocks, i.e. global/tor blocks
+               $otherAutoblockLink = [];
+               Hooks::run( 'OtherAutoblockLogLink', [ &$otherAutoblockLink ] );
+
+               # Show additional header for the local block only when other blocks exists.
+               # Not necessary in a standard installation without such extensions enabled
+               if ( count( $otherAutoblockLink ) ) {
+                       $out->addHTML(
+                               Html::element( 'h2', [], $this->msg( 'autoblocklist-localblocks',
+                                       $pager->getNumRows() )->parse() )
+                               . "\n"
+                       );
+               }
+
+               if ( $pager->getNumRows() ) {
+                       $out->addParserOutputContent( $pager->getFullOutput() );
+               } else {
+                       $out->addWikiMsg( 'autoblocklist-empty' );
+               }
+
+               if ( count( $otherAutoblockLink ) ) {
+                       $out->addHTML(
+                               Html::rawElement(
+                                       'h2',
+                                       [],
+                                       $this->msg( 'autoblocklist-otherblocks', count( $otherAutoblockLink ) )->parse()
+                               ) . "\n"
+                       );
+                       $list = '';
+                       foreach ( $otherAutoblockLink as $link ) {
+                               $list .= Html::rawElement( 'li', [], $link ) . "\n";
+                       }
+                       $out->addHTML(
+                               Html::rawElement(
+                                       'ul',
+                                       [ 'class' => 'mw-autoblocklist-otherblocks' ],
+                                       $list
+                               ) . "\n"
+                       );
+               }
+       }
+
+       protected function getGroupName() {
+               return 'users';
+       }
+}
index 47f8d2f..970a2e2 100644 (file)
@@ -258,7 +258,7 @@ class SpecialChangeCredentials extends AuthManagerSpecialPage {
                }
 
                $title = Title::newFromText( $returnTo );
-               return $title->getFullURL( $returnToQuery );
+               return $title->getFullUrlForRedirect( $returnToQuery );
        }
 
        protected function getRequestBlacklist() {
index 785447f..eb98fe7 100644 (file)
@@ -136,7 +136,7 @@ class SpecialChangeEmail extends FormSpecialPage {
                $query = $request->getVal( 'returntoquery' );
 
                if ( $this->status->value === true ) {
-                       $this->getOutput()->redirect( $titleObj->getFullURL( $query ) );
+                       $this->getOutput()->redirect( $titleObj->getFullUrlForRedirect( $query ) );
                } elseif ( $this->status->value === 'eauth' ) {
                        # Notify user that a confirmation email has been sent...
                        $this->getOutput()->wrapWikiMsg( "<div class='error' style='clear: both;'>\n$1\n</div>",
index 1028002..167a025 100644 (file)
@@ -395,7 +395,7 @@ class SpecialContributions extends IncludableSpecialPage {
                if ( $userrightsPage->userCanChangeRights( $target ) ) {
                        $tools['userrights'] = $linkRenderer->makeKnownLink(
                                SpecialPage::getTitleFor( 'Userrights', $username ),
-                               $sp->msg( 'sp-contributions-userrights' )->text()
+                               $sp->msg( 'sp-contributions-userrights', $username )->text()
                        );
                }
 
index a69406c..830b438 100644 (file)
@@ -289,7 +289,7 @@ class SpecialEmailUser extends UnlistedSpecialPage {
                                'text',
                                [
                                        'id' => 'emailusertarget',
-                                       'class' => 'mw-autocomplete-user',  // used by mediawiki.userSuggest
+                                       'class' => 'mw-autocomplete-user', // used by mediawiki.userSuggest
                                        'autofocus' => true,
                                        'size' => 30,
                                ]
diff --git a/includes/specials/SpecialGoToInterwiki.php b/includes/specials/SpecialGoToInterwiki.php
new file mode 100644 (file)
index 0000000..809a14a
--- /dev/null
@@ -0,0 +1,79 @@
+<?php
+/**
+ * Implements Special:GoToInterwiki
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup SpecialPage
+ */
+
+/**
+ * Landing page for non-local interwiki links.
+ *
+ * Meant to warn people that the site they're visiting
+ * is not the local wiki (In case of phishing tricks).
+ * Only meant to be used for things that directly
+ * redirect from url (e.g. Special:Search/google:foo )
+ * Not meant for general interwiki linking (e.g.
+ * [[google:foo]] should still directly link)
+ *
+ * @ingroup SpecialPage
+ */
+class SpecialGoToInterwiki extends UnlistedSpecialPage {
+       public function __construct( $name = 'GoToInterwiki' ) {
+               parent::__construct( $name );
+       }
+
+       public function execute( $par ) {
+               $this->setHeaders();
+               $target = Title::newFromText( $par );
+               // Disallow special pages as a precaution against
+               // possible redirect loops.
+               if ( !$target || $target->isSpecialPage() ) {
+                       $this->getOutput()->setStatusCode( 404 );
+                       $this->getOutput()->addWikiMsg( 'gotointerwiki-invalid' );
+                       return;
+               }
+
+               $url = $target->getFullURL();
+               if ( !$target->isExternal() || $target->isLocal() ) {
+                       // Either a normal page, or a local interwiki.
+                       // just redirect.
+                       $this->getOutput()->redirect( $url, '301' );
+               } else {
+                       $this->getOutput()->addWikiMsg(
+                               'gotointerwiki-external',
+                               $url,
+                               $target->getFullText()
+                       );
+               }
+       }
+
+       /**
+        * @return bool
+        */
+       public function requiresWrite() {
+               return false;
+       }
+
+       /**
+        * @return String
+        */
+       protected function getGroupName() {
+               return 'redirects';
+       }
+}
old mode 100755 (executable)
new mode 100644 (file)
index db05ebe..2943fd4 100644 (file)
@@ -136,7 +136,7 @@ class SpecialPageLanguage extends FormSpecialPage {
                }
 
                // Url to redirect to after the operation
-               $this->goToUrl = $title->getFullURL(
+               $this->goToUrl = $title->getFullUrlForRedirect(
                        $title->isRedirect() ? [ 'redirect' => 'no' ] : []
                );
 
index eee5b64..40b50ea 100644 (file)
@@ -148,7 +148,7 @@ class SpecialPreferences extends SpecialPage {
                // Set session data for the success message
                $this->getRequest()->getSession()->set( 'specialPreferencesSaveSuccess', 1 );
 
-               $url = $this->getPageTitle()->getFullURL();
+               $url = $this->getPageTitle()->getFullUrlForRedirect();
                $this->getOutput()->redirect( $url );
 
                return true;
index ae0887d..aaa99b6 100644 (file)
@@ -268,6 +268,10 @@ class SpecialRecentChanges extends ChangesListSpecialPage {
                        return false;
                }
 
+               if ( $this->areFiltersInConflict() ) {
+                       return false;
+               }
+
                // array_merge() is used intentionally here so that hooks can, should
                // they so desire, override the ORDER BY / LIMIT condition(s); prior to
                // MediaWiki 1.26 this used to use the plus operator instead, which meant
@@ -746,6 +750,9 @@ class SpecialRecentChanges extends ChangesListSpecialPage {
                $user = $this->getUser();
                $config = $this->getConfig();
                if ( $options['from'] ) {
+                       $resetLink = $this->makeOptionsLink( $this->msg( 'rclistfromreset' ),
+                               [ 'from' => '' ], $nondefaults );
+
                        $note .= $this->msg( 'rcnotefrom' )
                                ->numParams( $options['limit'] )
                                ->params(
@@ -754,7 +761,13 @@ class SpecialRecentChanges extends ChangesListSpecialPage {
                                        $lang->userTime( $options['from'], $user )
                                )
                                ->numParams( $numRows )
-                               ->parse() . '<br />';
+                               ->parse() . ' ' .
+                               Html::rawElement(
+                                       'span',
+                                       [ 'class' => 'rcoptions-listfromreset' ],
+                                       $this->msg( 'parentheses' )->rawParams( $resetLink )->parse()
+                               ) .
+                               '<br />';
                }
 
                # Sort data for display and make sure it's unique after we've added user data.
@@ -832,7 +845,7 @@ class SpecialRecentChanges extends ChangesListSpecialPage {
                $datenow = $lang->userDate( $timestamp, $user );
                $pipedLinks = '<span class="rcshowhide">' . $lang->pipeList( $links ) . '</span>';
 
-               $rclinks = '<span class="rclinks">' . $this->msg( 'rclinks' )->rawParams( $cl, $dl, $pipedLinks )
+               $rclinks = '<span class="rclinks">' . $this->msg( 'rclinks' )->rawParams( $cl, $dl, '' )
                        ->parse() . '</span>';
 
                $rclistfrom = '<span class="rclistfrom">' . $this->makeOptionsLink(
@@ -841,7 +854,7 @@ class SpecialRecentChanges extends ChangesListSpecialPage {
                        $nondefaults
                ) . '</span>';
 
-               return "{$note}$rclinks<br />$rclistfrom";
+               return "{$note}$rclinks<br />$pipedLinks<br />$rclistfrom";
        }
 
        public function isIncludable() {
index 9cc0048..139e4f7 100644 (file)
@@ -259,7 +259,7 @@ class SpecialSearch extends SpecialPage {
                        return null;
                }
 
-               return $url === null ? $title->getFullURL() : $url;
+               return $url === null ? $title->getFullUrlForRedirect() : $url;
        }
 
        /**
index dc5f877..eb4f0cc 100644 (file)
@@ -21,6 +21,7 @@
  * @ingroup SpecialPage
  */
 
+use MediaWiki\MediaWikiServices;
 use Wikimedia\Rdbms\ResultWrapper;
 
 /**
@@ -45,6 +46,10 @@ class SpecialUndelete extends SpecialPage {
 
        /** @var Title */
        private $mTargetObj;
+       /**
+        * @var string Search prefix
+        */
+       private $mSearchPrefix;
 
        function __construct() {
                parent::__construct( 'Undelete', 'deletedhistory' );
@@ -235,6 +240,7 @@ class SpecialUndelete extends SpecialPage {
                        Xml::openElement( 'form', [ 'method' => 'get', 'action' => wfScript() ] ) .
                                Xml::fieldset( $this->msg( 'undelete-search-box' )->text() ) .
                                Html::hidden( 'title', $this->getPageTitle()->getPrefixedDBkey() ) .
+                               Html::hidden( 'fuzzy', $this->getRequest()->getVal( 'fuzzy' ) ) .
                                Html::rawElement(
                                        'label',
                                        [ 'for' => 'prefix' ],
@@ -245,15 +251,25 @@ class SpecialUndelete extends SpecialPage {
                                        20,
                                        $this->mSearchPrefix,
                                        [ 'id' => 'prefix', 'autofocus' => '' ]
-                               ) . ' ' .
-                               Xml::submitButton( $this->msg( 'undelete-search-submit' )->text() ) .
+                               ) .
+                               ' ' .
+                               Xml::submitButton(
+                                       $this->msg( 'undelete-search-submit' )->text(),
+                                       [ 'id' => 'searchUndelete' ]
+                               ) .
                                Xml::closeElement( 'fieldset' ) .
                                Xml::closeElement( 'form' )
                );
 
                # List undeletable articles
                if ( $this->mSearchPrefix ) {
-                       $result = PageArchive::listPagesByPrefix( $this->mSearchPrefix );
+                       // For now, we enable search engine match only when specifically asked to
+                       // by using fuzzy=1 parameter.
+                       if ( $this->getRequest()->getVal( "fuzzy", false ) ) {
+                               $result = PageArchive::listPagesBySearch( $this->mSearchPrefix );
+                       } else {
+                               $result = PageArchive::listPagesByPrefix( $this->mSearchPrefix );
+                       }
                        $this->showList( $result );
                }
        }
@@ -277,7 +293,7 @@ class SpecialUndelete extends SpecialPage {
 
                $linkRenderer = $this->getLinkRenderer();
                $undelete = $this->getPageTitle();
-               $out->addHTML( "<ul>\n" );
+               $out->addHTML( "<ul id='undeleteResultsList'>\n" );
                foreach ( $result as $row ) {
                        $title = Title::makeTitleSafe( $row->ar_namespace, $row->ar_title );
                        if ( $title !== null ) {
@@ -300,7 +316,7 @@ class SpecialUndelete extends SpecialPage {
                                );
                        }
                        $revs = $this->msg( 'undeleterevisions' )->numParams( $row->count )->parse();
-                       $out->addHTML( "<li>{$item} ({$revs})</li>\n" );
+                       $out->addHTML( "<li class='undeleteResult'>{$item} ({$revs})</li>\n" );
                }
                $result->free();
                $out->addHTML( "</ul>\n" );
index b33aa7d..127b530 100644 (file)
@@ -387,7 +387,8 @@ class UserrightsPage extends SpecialPage {
                $user->invalidateCache();
 
                // update groups in external authentication database
-               Hooks::run( 'UserGroupsChanged', [ $user, $add, $remove, $this->getUser(), $reason ] );
+               Hooks::run( 'UserGroupsChanged', [ $user, $add, $remove, $this->getUser(),
+                       $reason, $oldUGMs, $newUGMs ] );
                MediaWiki\Auth\AuthManager::callLegacyAuthPlugin(
                        'updateExternalDBGroups', [ $user, $add, $remove ]
                );
index 365736f..e9d3f26 100644 (file)
@@ -81,6 +81,7 @@ class SpecialWatchlist extends ChangesListSpecialPage {
                if ( ( $config->get( 'EnotifWatchlist' ) || $config->get( 'ShowUpdatedMarker' ) )
                        && $request->getVal( 'reset' )
                        && $request->wasPosted()
+                       && $user->matchEditToken( $request->getVal( 'token' ) )
                ) {
                        $user->clearAllNotifications();
                        $output->redirect( $this->getPageTitle()->getFullURL( $opts->getChangedValues() ) );
@@ -110,7 +111,7 @@ class SpecialWatchlist extends ChangesListSpecialPage {
         */
        protected function transformFilterDefinition( array $filterDefinition ) {
                if ( isset( $filterDefinition['showHideSuffix'] ) ) {
-                         $filterDefinition['showHide'] = 'wl' . $filterDefinition['showHideSuffix'];
+                       $filterDefinition['showHide'] = 'wl' . $filterDefinition['showHideSuffix'];
                }
 
                return $filterDefinition;
@@ -660,6 +661,7 @@ class SpecialWatchlist extends ChangesListSpecialPage {
                                'id' => 'mw-watchlist-resetbutton' ] ) . "\n" .
                        Xml::submitButton( $this->msg( 'enotif_reset' )->text(),
                                [ 'name' => 'mw-watchlist-reset-submit' ] ) . "\n" .
+                       Html::hidden( 'token', $user->getEditToken() ) . "\n" .
                        Html::hidden( 'reset', 'all' ) . "\n";
                        foreach ( $nondefaults as $key => $value ) {
                                $form .= Html::hidden( $key, $value ) . "\n";
index f853f41..cfcbf65 100644 (file)
@@ -89,7 +89,7 @@ class LoginHelper extends ContextSource {
                }
 
                if ( $type === 'successredirect' ) {
-                       $redirectUrl = $returnToTitle->getFullURL( $returnToQuery, false, $proto );
+                       $redirectUrl = $returnToTitle->getFullUrlForRedirect( $returnToQuery, $proto );
                        $this->getOutput()->redirect( $redirectUrl );
                } else {
                        $this->getOutput()->addReturnTo( $returnToTitle, $returnToQuery, null, $options );
index a1f6b84..78e1092 100644 (file)
@@ -129,7 +129,7 @@ class DeletedContribsPager extends IndexPager {
                $condition = [];
 
                $condition['ar_user_text'] = $this->target;
-               $index = 'usertext_timestamp';
+               $index = 'ar_usertext_timestamp';
 
                return [ $index, $condition ];
        }
index 733c4ff..55fb685 100644 (file)
@@ -798,7 +798,7 @@ abstract class UploadBase {
         * Returns the title of the file to be uploaded. Sets mTitleError in case
         * the name was illegal.
         *
-        * @return Title The title of the file or null in case the name was illegal
+        * @return Title|null The title of the file or null in case the name was illegal
         */
        public function getTitle() {
                if ( $this->mTitle !== false ) {
@@ -1359,7 +1359,10 @@ abstract class UploadBase {
                        $filename,
                        [ $this, 'checkSvgScriptCallback' ],
                        true,
-                       [ 'processing_instruction_handler' => 'UploadBase::checkSvgPICallback' ]
+                       [
+                               'processing_instruction_handler' => 'UploadBase::checkSvgPICallback',
+                               'external_dtd_handler' => 'UploadBase::checkSvgExternalDTD',
+                       ]
                );
                if ( $check->wellFormed !== true ) {
                        // Invalid xml (T60553)
@@ -1391,6 +1394,34 @@ abstract class UploadBase {
                return false;
        }
 
+       /**
+        * Verify that DTD urls referenced are only the standard dtds
+        *
+        * Browsers seem to ignore external dtds. However just to be on the
+        * safe side, only allow dtds from the svg standard.
+        *
+        * @param string $type PUBLIC or SYSTEM
+        * @param string $publicId The well-known public identifier for the dtd
+        * @param string $systemId The url for the external dtd
+        */
+       public static function checkSvgExternalDTD( $type, $publicId, $systemId ) {
+               // This doesn't include the XHTML+MathML+SVG doctype since we don't
+               // allow XHTML anyways.
+               $allowedDTDs = [
+                       'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd',
+                       'http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd',
+                       'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-basic.dtd',
+                       'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd'
+               ];
+               if ( $type !== 'PUBLIC'
+                       || !in_array( $systemId, $allowedDTDs )
+                       || strpos( $publicId, "-//W3C//" ) !== 0
+               ) {
+                       return [ 'upload-scripted-dtd' ];
+               }
+               return false;
+       }
+
        /**
         * @todo Replace this with a whitelist filter!
         * @param string $element
index 57610fc..9a955fb 100644 (file)
@@ -19,6 +19,7 @@
  */
 
 use MediaWiki\Session\BotPasswordSessionProvider;
+use Wikimedia\Rdbms\IMaintainableDatabase;
 
 /**
  * Utility class for bot passwords
@@ -68,7 +69,7 @@ class BotPassword implements IDBAccessObject {
        /**
         * Get a database connection for the bot passwords database
         * @param int $db Index of the connection to get, e.g. DB_MASTER or DB_REPLICA.
-        * @return Database
+        * @return IMaintainableDatabase
         */
        public static function getDB( $db ) {
                global $wgBotPasswordsCluster, $wgBotPasswordsDatabase;
index ef4537f..b8a36b8 100644 (file)
@@ -27,6 +27,8 @@ use MediaWiki\Auth\AuthManager;
 use MediaWiki\Auth\AuthenticationResponse;
 use MediaWiki\Auth\AuthenticationRequest;
 use Wikimedia\ScopedCallback;
+use Wikimedia\Rdbms\Database;
+use Wikimedia\Rdbms\DBExpectedError;
 
 /**
  * String Some punctuation to prevent editing from broken text-mangling proxies.
@@ -146,7 +148,6 @@ class User implements IDBAccessObject {
                'editmyuserjs',
                'editmywatchlist',
                'editsemiprotected',
-               'editusercssjs', # deprecated
                'editusercss',
                'edituserjs',
                'hideuser',
index a7407a0..008ed19 100644 (file)
@@ -103,7 +103,11 @@ class SearchFormWidget {
                if ( $totalResults > 0 && $offset < $totalResults ) {
                        $html .= Xml::tags(
                                'div',
-                               [ 'class' => 'results-info' ],
+                               [
+                                       'class' => 'results-info',
+                                       'data-mw-num-results-offset' => $offset,
+                                       'data-mw-num-results-total' => $totalResults
+                               ],
                                $this->specialSearch->msg( 'search-showingresults' )
                                        ->numParams( $offset + 1, $offset + $numResults, $totalResults )
                                        ->numParams( $numResults )
index 78019a7..6f2117c 100644 (file)
@@ -64,6 +64,9 @@ class FakeConverter {
                return $this->mLang->getFormattedNsText( $ns );
        }
 
+       /**
+        * @return string[]
+        */
        function getVariants() {
                return [ $this->mLang->getCode() ];
        }
index 0672315..14e6f5c 100644 (file)
@@ -4127,7 +4127,7 @@ class Language {
         * Get the list of variants supported by this language
         * see sample implementation in LanguageZh.php
         *
-        * @return array An array of language codes
+        * @return string[] An array of language codes
         */
        public function getVariants() {
                return $this->mConverter->getVariants();
index 6286a2b..4c3e5be 100644 (file)
@@ -48,6 +48,10 @@ class LanguageConverter {
        ];
 
        public $mMainLanguageCode;
+
+       /**
+        * @var string[]
+        */
        public $mVariants;
        public $mVariantFallbacks;
        public $mVariantNames;
@@ -75,11 +79,9 @@ class LanguageConverter {
        const CACHE_VERSION_KEY = 'VERSION 7';
 
        /**
-        * Constructor
-        *
         * @param Language $langobj
         * @param string $maincode The main language code of this language
-        * @param array $variants The supported variants of this language
+        * @param string[] $variants The supported variants of this language
         * @param array $variantfallbacks The fallback language of each variant
         * @param array $flags Defining the custom strings that maps to the flags
         * @param array $manualLevel Limit for supported variants
@@ -122,7 +124,7 @@ class LanguageConverter {
         * Get all valid variants.
         * Call this instead of using $this->mVariants directly.
         *
-        * @return array Contains all valid variants
+        * @return string[] Contains all valid variants
         */
        public function getVariants() {
                return $this->mVariants;
index 9d10b51..726b170 100644 (file)
        "externaldberror": "Na seunalah bak peusahèh basis data luwa atawa droëneuh hana geubri idin keu neupeubarô akun luwa droëneuh",
        "login": "Tamöng",
        "nav-login-createaccount": "Tamöng / dapeuta",
-       "userlogin": "Tamöng / dapeuta",
-       "userloginnocreate": "Tamöng",
        "logout": "Teubiët",
        "userlogout": "Teubiët",
        "notloggedin": "Hana tamöng lom",
        "userlogin-noaccount": "Goh lom neudapeuta?",
        "userlogin-joinproject": "Neugabông ngön {{SITENAME}}",
-       "nologin": "Goh lom neudapeuta? $1.",
-       "nologinlink": "Peudapeuta nan barô",
        "createaccount": "Peudapeuta nan barô",
-       "gotaccount": "Ka lheuëh neudapeuta? $1.",
-       "gotaccountlink": "Tamöng",
-       "userlogin-resetlink": "Tuwo rincian tamöng droëneuh?",
        "userlogin-resetpassword-link": "Tuwö lageuëm rahsia?",
        "userlogin-helplink2": "Beunantu tamöng log",
        "userlogin-loggedin": "Droëneuh ka neutamöng seubagoë $1. Neungui blangko di yup keu neutamöng seubagoë ureuëng ngui la’én",
        "createacct-another-email-ph": "Pasoë alamat surat-e",
        "createaccountmail": "Neungui lageuëm rahsia beurangkapeuë keu si’at nyoë. Lheuëh nyan neupeu’et u surat-e nyang droëneuh meuh’eut",
        "createacct-realname": "Nan aseuli (hana wajéb)",
-       "createaccountreason": "Choë:",
        "createacct-reason": "Choë:",
        "createacct-reason-ph": "Pakön droëneuh neupeugöt nan ureuëng ngui la’én",
        "createacct-submit": "Peudapeuta nan barô",
        "rcshowhidemine": "$1 atra lôn andam",
        "rcshowhidemine-show": "Peuleumah",
        "rcshowhidemine-hide": "Peusom",
-       "rclinks": "Peudeuih $1 neuubah barô lam $2 uroë nyoë<br />$3",
+       "rclinks": "Peudeuih $1 neuubah barô lam $2 uroë nyoë",
        "diff": "bida",
        "hist": "riwayat",
        "hide": "Peusom",
index a5c7dd0..2e74379 100644 (file)
        "password-change-forbidden": "Мы виким и шъэфгущыIэхэр зэблэпхъун уфитэп.",
        "login": "Системэм хахь",
        "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": "УишъэфгущыIэр пщыгъупшагъа?",
        "userlogin-helplink2": "Системэм сыхэхьанэу къыздеӏ",
        "userlogin-createanother": "НэмыкI аккаунт къэубл",
        "createacct-email-ph": "Игъахь уи емэйл адресыр",
        "createacct-another-email-ph": "Игъахь уи емэйл адресыр",
        "createacct-realname": "ЦIэ шъыпкъэр (егъэзыгъэп)",
-       "createaccountreason": "ЗыпкъырыкIырэр:",
        "createacct-reason": "ЗыпкъырыкIырэр:",
        "createacct-reason-ph": "Сыда пэмыкI аккаунт зэкIэублэрэр?",
        "createacct-submit": "Уи аккаунт бгъэпсын",
        "passwordreset-emaildisabled": "Мы виким емэйл-Iофыгъохэр щылажьэхэрэп.",
        "passwordreset-username": "НэбгырацIэ:",
        "passwordreset-domain": "Домен:",
-       "passwordreset-capture": "Къэхъурэ емэйлым уеплъыщта?",
        "passwordreset-email": "Емэйл адрес:",
        "passwordreset-emailtitle": "Аккаунт и гъэпсыкIэхэр, мий щыI {{SITENAME}}",
        "passwordreset-emailelement": "НэбгырацIэ: \n$1\n\nTemporary password: \n$2",
        "prefs-rendering": "Ышъотеплъэ",
        "saveprefs": "Игъэпытыхь",
        "prefs-editing": "ЕIэзэныгъэ",
-       "rows": "Сатырхэу:",
        "searchresultshead": "Лъыхъу",
        "stub-threshold-disabled": "ГъэкIуэсагъэ",
        "recentchangesdays-max": "Максимум $1 {{PLURAL:$1|маф|мафэхэр}}",
        "right-viewsuppressed": "ЗэкIэмэ ашIогъэбылъыгъэ версиемэ яплъ",
        "right-editcontentmodel": "НэкIубгъом и кIоцIырытым и модел зэблэхъун",
        "right-editinterface": "Нэбгырэ-интерфейсым еIэзэн",
-       "right-editusercssjs": "НэмыкI нэбгырэмэ я CSS, JavaScript файлэмэ яIэзэн",
        "right-editusercss": "НэмыкI нэбгырэмэ я CSS файлэмэ яIэзэн",
        "right-edituserjs": "НэмыкI нэбгырэмэ я JavaScript файлэмэ яIэзэн",
        "right-editmyusercss": "Уи CSS файлэмэ яIэзэн",
        "right-unwatchedpages": "Зылъымыплъэрэ нэкIубгъо купым еплъ",
        "right-mergehistory": "НэкIубгъомэ ятарихъхэр зэпыдзэх",
        "right-sendemail": "НэмыкIмэ емэйл афегъэхь",
-       "right-passwordreset": "ШъэфгущыIэм фэгъэхьыгъэ емэйлхэм яплъ",
        "newuserlogpage": "ХэлэжьакӀомэ яублэн лог",
        "action-read": "едж мы нэкIубгъом",
        "action-edit": "мы нэкIубгъом еIаз",
        "rcshowhidemine": "$1 си хэӀэзэнхэр",
        "rcshowhidemine-show": "Къэгъэлъагъу",
        "rcshowhidemine-hide": "Гъэбылъ",
-       "rclinks": "Ыужрэ $1 зэхъокIыныгъэ къэгъэлъагъу мэфэ $2 ыкIоцI<br />$3",
+       "rclinks": "Ыужрэ $1 зэхъокIыныгъэ къэгъэлъагъу мэфэ $2 ыкIоцI",
        "diff": "зэфэшъхь",
        "hist": "тар",
        "hide": "Гъэбылъ",
        "feedback-message": "Мессадж:",
        "searchsuggest-search": "Лъыхъу",
        "api-error-badtoken": "ЫкIоцI фыкъуагъэ: Токен дэй.",
-       "api-error-empty-file": "Ебгъэхьыгъэ файлыр нэкIы.",
        "expand_templates_input": "Ихьэрэ текст:",
        "expand_templates_output": "Резултат",
        "expand_templates_xml_output": "XML къикIырэр",
index 524d511..32ffc96 100644 (file)
        "rcshowhidepatr": "$1 التعديلات المراجعة",
        "rcshowhidemine": "$1 تعديلاتي",
        "rcshowhidemine-hide": "خبّي",
-       "rclinks": "أظهر آخر $1 تعديل في آخر $2 يوم<br />$3",
+       "rclinks": "أظهر آخر $1 تعديل في آخر $2 يوم",
        "diff": "فرق",
        "hist": "تاريخ",
        "hide": "أخف",
index 97936dc..cde12ad 100644 (file)
        "right-editprotected": "Wysig bladsye beskermd as \"{{int:protect-level-sysop}}\"",
        "right-editsemiprotected": "Wysig bladsye wat as \"{{int:protect-level-autoconfirmed}}\" beskerm is",
        "right-editinterface": "Wysig die gebruikerskoppelvlak",
-       "right-editusercssjs": "Wysig ander gebruikers se CSS- en JS-lêers",
        "right-editusercss": "Wysig ander gebruikers se CSS-lêers",
        "right-edituserjs": "Wysig ander gebruikers se JS-lêers",
        "right-editmyusercss": "Wysig u persoonlike CSS-bladsy",
        "rcshowhidemine-hide": "Versteek",
        "rcshowhidecategorization-show": "Wys",
        "rcshowhidecategorization-hide": "Versteek",
-       "rclinks": "Vertoon die laaste $1 wysigings in die afgelope $2 dae<br />$3",
+       "rclinks": "Vertoon die laaste $1 wysigings in die afgelope $2 dae",
        "diff": "verskil",
        "hist": "geskiedenis",
        "hide": "Versteek",
        "undeleteviewlink": "bekyk",
        "undeleteinvert": "Omgekeerde seleksie",
        "undeletecomment": "Rede:",
-       "undeletedrevisions": "{{PLURAL:$1|1 weergawe|$1 weergawes}} herstel",
-       "undeletedrevisions-files": "{{PLURAL:$1|1 weergawe|$1 weergawes}} en {{PLURAL:$2|1 lêer|$2 lêers}} herstel",
-       "undeletedfiles": "{{PLURAL:$1|1 lêer|$1 lêers}} herstel",
        "cannotundelete": "Terugplasing was onsuksesvol:\n$1",
        "undeletedpage": "'''$1 is teruggeplaas'''\n\nKonsulteer die [[Special:Log/delete|verwyderingslogboek]] vir 'n rekord van onlangse verwyderings en terugplasings.",
        "undelete-header": "Sien die [[Special:Log/delete|skraplogboek]] vir onlangs verwyderde bladsye.",
index 5f9ab04..d582fa2 100644 (file)
        "externaldberror": "Ose pat gabim në databazën e autentifikimit, ose nuk lejoheni me ndryshue llogarinë tuej të jashtme.",
        "login": "Kyçu",
        "nav-login-createaccount": "Kyçu / çel llogari",
-       "userlogin": "Kyçu / çel llogari",
-       "userloginnocreate": "Kyçu",
        "logout": "Çkyçu",
        "userlogout": "Çkyçu",
        "notloggedin": "Nuk je i kyçun",
-       "nologin": "Nuk ke llogari? '''$1'''.",
-       "nologinlink": "Krijo llogari",
        "createaccount": "Krijo llogari",
-       "gotaccount": "Ke llogari? '''$1'''.",
-       "gotaccountlink": "Kyçu",
        "createaccountmail": "me email",
-       "createaccountreason": "Arsyeja:",
        "badretype": "Fjalëkalimet nuk janë të njêjta.",
        "userexists": "Nofka keni zgjedhë âsht në përdorim.\nZgjedh nji emën tjetër.",
        "loginerror": "Gabim në kyçje",
        "saveprefs": "Regjistro",
        "restoreprefs": "Kthe tâna përcaktimet si në fillim",
        "prefs-editing": "Tue redaktue",
-       "rows": "Rreshta:",
-       "columns": "Kolona:",
        "searchresultshead": "Kërkimi",
        "stub-threshold": "Pragu për formatimin e <a href=\"#\" class=\"stub\">vegzave të cungueme</a> në (byte):",
        "recentchangesdays": "Numri i ditëve për me i tregue te ndryshimet e freskëta:",
        "userrights-reason": "Arsyeja:",
        "userrights-no-interwiki": "Nuk keni leje për të ndryshuar privilegjet e përdoruesve në wiki të tjera.",
        "userrights-nodatabase": "Regjistri $1 nuk ekziston ose nuk është vendor.",
-       "userrights-nologin": "Duhet të [[Special:UserLogin|hyni brenda]] me një llogari administrative për të ndryshuar privilegjet e përdoruesve.",
-       "userrights-notallowed": "Llogaria juaj nuk ju lejon të ndryshoni privilegjet e përdoruesve.",
        "userrights-changeable-col": "Grupe që mund të ndryshoni",
        "userrights-unchangeable-col": "Grupe që s'mund të ndryshoni",
        "group": "Grupi:",
        "right-protect": "Ndrysho nivelin mbrojtës dhe redakto faqet e mbrojtura",
        "right-editprotected": "Redakto faqet e mbrojtura (pa ndryshuar mbrojtjen)",
        "right-editinterface": "Ndrysho parapamjen e përdoruesit",
-       "right-editusercssjs": "Redakto skedat CSS dhe JS të përdoruesve tjerë",
        "right-editusercss": "Redakto skedat CSS të përdoruesve tjerë",
        "right-edituserjs": "Redakto skedat JS të përdoruesve tjerë",
        "right-noratelimit": "Mos u prek nga kufizimet e vlerësimit",
        "right-unwatchedpages": "Shiko listën e faqeve të pa vëzhguara",
        "right-mergehistory": "Bashko historinë e faqeve",
        "right-userrights": "Redakto të gjitha të drejtat e përdoruesit",
-       "right-passwordreset": "Fjalëkalimi Reset e një përdoruesi ([[Special:PasswordReset|faqe veçantë]])",
        "newuserlogpage": "Regjistri i krijimit të përdoruesve",
        "rightslog": "Regjsitri i tagrit të përdoruesve",
        "rightslogtext": "Ky është një regjistër për ndryshimet e titujve të përdoruesve.",
        "rcshowhideanons": "$1 përdorues anonim",
        "rcshowhidepatr": "$1 redaktime të patrullueme",
        "rcshowhidemine": "$1 redaktimet e mija",
-       "rclinks": "Trego $1 ndryshime gjatë $2 ditëve<br />$3",
+       "rclinks": "Trego $1 ndryshime gjatë $2 ditëve",
        "diff": "ndrysh",
        "hist": "hist",
        "hide": "msheh",
        "revdelete-restricted": "u vendosën kufizime për administruesit",
        "revdelete-unrestricted": "u hoqën kufizimet për administruesit",
        "rightsnone": "(asgjë)",
-       "revdelete-summary": "përmbledhja redaktimit",
        "searchsuggest-search": "Kërkim",
        "searchsuggest-containing": "përmban ...",
        "special-characters-group-latin": "Latinisht",
index 0033e3e..94bfe9c 100644 (file)
@@ -10,7 +10,8 @@
                        "Teferra",
                        "아라",
                        "Matma Rex",
-                       "Macofe"
+                       "Macofe",
+                       "Stephanecbisson"
                ]
        },
        "tog-underline": "በመያያዣ ስር አስምር",
        "externaldberror": "ወይም አፍአዊ የማረጋገጫ መረጃ-ቤት ስኅተት ነበረ፣ ወይም አፍአዊ አባልነትዎን ማሳደስ አልተፈቀዱም።",
        "login": "ለመግባት",
        "nav-login-createaccount": "መግቢያ",
-       "userlogin": "ግባ / ተመዝገብ",
-       "userloginnocreate": "ለመግባት",
        "logout": "ከብዕር ስምዎ ለመውጣት",
        "userlogout": "መውጫ",
        "notloggedin": "አልገቡም",
-       "nologin": "የብዕር ስም ገና የለዎም? '''$1'''!",
-       "nologinlink": "አዲስ የብዕር ስም ያውጡ",
        "createaccount": "አዲስ አባል ለመሆን",
-       "gotaccount": "(አባልነት አሁን ካለዎ፥ '''$1''' ይግቡ)",
-       "gotaccountlink": "በዚህ",
-       "userlogin-resetlink": "የመግቢያ ዝርዝርዎን ረተዋልን?",
        "userlogin-resetpassword-link": "የይለፍ ቃልዎን አጡ?",
        "createacct-emailrequired": "ኢ-ሜይል አድራሻ",
        "createacct-email-ph": "ኢ-ሜይል አድራሻዎን ያስገቡ",
        "createaccountmail": "በኢ-ሜል",
-       "createaccountreason": "ምክንያት:",
        "createacct-reason": "ምክንያት",
        "createacct-reason-ph": "ለምን ሌላ የብዕር ስም ሊያወጡ እንደሆነ",
        "createacct-submit": "የብዕር ስም ለማውጣት",
        "prefs-rendering": " አቀራረብ",
        "saveprefs": "ይቆጠብ",
        "prefs-editing": "የማዘጋጀት ምርጫዎች",
-       "rows": "በማዘጋጀቱ ሰንጠረዥ ስንት ተርታዎች?",
-       "columns": "ስንት ዓምዶችስ?",
        "searchresultshead": "ፍለጋ",
        "recentchangesdays": "በቅርቡ ለውጦች ዝርዝር ስንት ቀን ይታይ?",
        "recentchangesdays-max": "(እስከ $1 {{PLURAL:$1|ቀን|ቀን}} ድረስ)",
        "userrights-reason": "ምክንያቱ፦",
        "userrights-no-interwiki": "ማዕረጎችን በሌላ ዊኪ ላይ ለማስተካከል ፈቃድ የለዎም።",
        "userrights-nodatabase": "መረጃ-ቤቱ $1 አይኖርም ወይም የቅርብ አካባቢ አይደለም።",
-       "userrights-nologin": "የአባል መብቶች ለመወሰን መጋቢ ሆነው [[Special:UserLogin|መግባት]] ያስፈልግዎታል።",
-       "userrights-notallowed": "የአባል መብቶች ለማስተካከል ፈቃድ የለዎም።",
        "userrights-changeable-col": "ሊቀይሩ የሚችሉት ስብስባዎች",
        "userrights-unchangeable-col": "ሊቀይሩ የማይችሉት ስብስባዎች፦",
        "group": "ደረጃ፦",
        "rcshowhideanons": "የቁ. አድራሻ ለውጦች $1",
        "rcshowhidepatr": "የተቆጣጠሩ ለውጦች $1",
        "rcshowhidemine": "የኔ $1",
-       "rclinks": "ባለፉት $2 ቀን ውስጥ የወጡት መጨረሻ $1 ለውጦች ይታዩ።<br />($3)",
+       "rclinks": "ባለፉት $2 ቀን ውስጥ የወጡት መጨረሻ $1 ለውጦች ይታዩ።",
        "diff": "ለውጡ",
        "hist": "ታሪክ",
        "hide": "ይደበቁ",
        "undeleteviewlink": "ተመልከት",
        "undeleteinvert": "ምርጫውን ለመገልበጥ",
        "undeletecomment": "ማጠቃልያ፦",
-       "undeletedrevisions": "{{PLURAL:$1|1 ዕትም|$1 ዕትሞች}} መለሰ",
-       "undeletedrevisions-files": "{{PLURAL:$1|1 ዕትም|$1 ዕትሞች}} እና {{PLURAL:$2|1 ፋይል|$2 ፋይሎች}} መለሰ",
-       "undeletedfiles": "{{PLURAL:$1|1 ፋይል|$1 ፋይሎች}} መለሰ",
        "cannotundelete": "መመለሱ አልተከናወነም፤ ምናልባት ሌላ ሰው ገጹን አስቀድሞ መልሶታል።",
        "undeletedpage": "'''$1 ተመልሷል'''\n\nበቅርብ የጠፉና የተመለሱ ገጾች ለማመልከት [[Special:Log/delete|የማጥፋቱን መዝገብ]] ይዩ።",
        "undelete-header": "በቅርብ ግዜ የተደለዙትን ገጾች ለማመልከት [[Special:Log/delete|የማጥፋቱን መዝገብ]] ይዩ።",
        "htmlform-selectorother-other": "ሌላ",
        "logentry-delete-delete": "$1 ገጹን $3 አጠፋ",
        "rightsnone": "(የለም)",
-       "revdelete-summary": "ማጠቃለያ",
        "feedback-cancel": "ይቅር",
        "searchsuggest-search": "ፈልግ",
        "searchsuggest-containing": "በመጣጥፎች ይዘት ለመፈልግ...",
-       "api-error-badaccess-groups": "እርስዎ በዚህ ውኪ ላይ ፋይል እንድሊኩ አልተፈቀደም።",
        "api-error-badtoken": "የውስጥ ስህተት: መጥፎ ጥቅል።",
-       "api-error-copyuploaddisabled": "በሰነድ አድራሻ መላክ በዚህ አቅራቢ ላይ አልተፈቀደም።",
-       "api-error-duplicate": "በዚህ ድረ ገጽ ላይ የዚህ ዓይነት ይዞታ {{PLURAL:$1| ያለው ፋይል አለ። | ያላቸው ፍይሎች አሉ።}}",
-       "api-error-empty-file": "የላኩት ፋይል ባዶ ነበር።",
-       "api-error-fetchfileerror": "የውስጥ ስህተት: ፍይሉ ሲመጣ ችግር ተፈጠረ።",
-       "api-error-file-too-large": "የላኩት ፋይል በጣም ትልቅ ነበር።",
-       "api-error-filename-tooshort": "የፋይሉ ስም በጣም ትንሽ ነው።",
-       "api-error-filetype-banned": "የዚህ ዓይነት ፋይል ተከልክሏል።",
-       "api-error-filetype-banned-type": "$1 ያልተፈቀደ ፋይል አይነት ነው። የተፈቀዱት ፋይል አይነቶች $2 ናቸው።",
-       "api-error-filetype-missing": "ፋይሉ ቅጥያ ይጎለዋል።",
-       "api-error-illegal-filename": "የፋይሉ ስም የተፈቀደ አይደለም።",
-       "api-error-invalid-file-key": "የውስጥ ስህተት: ፍይሉ የጊዜያዊ ማስቀመጫ ውስጥ አልተገኘም።",
-       "api-error-missingparam": "የውስጥ ስህተት: ጥያቄው ግቤቶች ይጎሉታል።",
-       "api-error-missingresult": "የውስጥ ስህተት: መቅዳቱ እንደተሳካ ማረጋገጥ አልተቻለም።",
-       "api-error-mustbeloggedin": "ፋይል ለመላክ ተዘግቦ መግባት ያስፈልጋል።",
-       "api-error-noimageinfo": "ፋይል መላኩ ተሳክቷል ግን አቅራቢው ምንም ዓይነት መረጃ ስለ ፋይሉ አልሰጠም።",
-       "api-error-overwrite": "እንድን ፋይል ደምስሶ መጻፍ አልተፈቀደም።",
        "api-error-stashfailed": "የውስጥ ስህተት: አቅራቢው ጊዜያዊ ፍይሉን አላስቀመጠም።",
-       "api-error-timeout": "በሚገባ ጊዜ ውስጥ አቅራቢው መልስ አልሰጠም።",
-       "api-error-unknown-code": "ያልታወቀ ስህተት: \"$1\"",
-       "api-error-unknown-error": "የውስጥ ስህተት: የእርስዎን ፋይል ለመላክ ሲሞከር ችግር ተፈጠረ።",
        "api-error-unknown-warning": "ያልታወቀ ማስጠንቀቂያ $1",
        "api-error-unknownerror": "ያልታወቀ ስህተት: \"$1\"",
-       "api-error-uploaddisabled": "ፋይል መላክ በዚህ ውኪ ላይ አልተፈቀደም።",
-       "api-error-verification-error": "ይህ ፋይል የተበላሸ ወይም ትክክል ያልሆነ ቅጥያ ያለው ሊሆን ይችላል።",
        "expand_templates_ok": "እሺ"
 }
index f3d19ec..533c10f 100644 (file)
        "externaldberror": "Bi habió una error d'autenticación externa d'a base de datos u bien no tiene premisos ta esviellar a suya cuenta externa.",
        "login": "Encetar sesión",
        "nav-login-createaccount": "Encetar una sesión / creyar cuenta",
-       "userlogin": "Encetar una sesión / creyar cuenta",
-       "userloginnocreate": "Encetar una sesión",
        "logout": "Salir d'a sesión",
        "userlogout": "Salir",
        "notloggedin": "No ha dentrato en o sistema",
        "userlogin-noaccount": "No tiene garra cuenta?",
-       "nologin": "No tiene garra cuenta? '''$1'''.",
-       "nologinlink": "Creyar una nueva cuenta",
        "createaccount": "Creyar una nueva cuenta",
-       "gotaccount": "Tiene ya una cuenta? '''$1'''.",
-       "gotaccountlink": "Identificar-se y encetar sesión",
-       "userlogin-resetlink": "Ha xublidau os suyos datos d'acceso?",
        "createacct-another-email-ph": "Establir una adreza de correu-e",
        "createaccountmail": "por correu electronico",
-       "createaccountreason": "Razón:",
        "createacct-submit": "Creya a tuya cuenta",
        "createacct-another-submit": "Creya unatra cuenta",
        "createacct-benefit-body3": "{{PLURAL:$1|colaborador recient|colaboradors recients}}",
        "saveprefs": "Alzar preferencias",
        "restoreprefs": "Restaure todas as confeguracions por defecto",
        "prefs-editing": "Edición",
-       "rows": "Ringleras:",
-       "columns": "Columnas:",
        "searchresultshead": "Mirar",
        "stub-threshold": "Branquil superior ta o formateyo de <a href=\"#\" class=\"stub\">vinclos ta borradors</a> (en bytes):",
        "stub-threshold-disabled": "Desactivato",
        "right-protect": "Cambiar os livels de protección y editar pachinas protechitas",
        "right-editprotected": "Editar pachinas protechitas (sin de protección en cascada)",
        "right-editinterface": "Editar a interficie d'usuario",
-       "right-editusercssjs": "Editar os fichers CSS y JS d'atros usuarios",
        "right-editusercss": "Editar os fichers CSS d'atros usuarios",
        "right-edituserjs": "Editar os fichers JS d'atros usuarios",
        "right-rollback": "Desfer a escape as edicions d'o zaguer usuario que cambió una pachina",
        "rcshowhidepatr": "$1 edicions controlatas",
        "rcshowhidemine": "$1 as mías edicions",
        "rcshowhidemine-hide": "Amagar",
-       "rclinks": "Amostrar os zaguers $1 cambeos en os zaguers $2 días.<br />$3",
+       "rclinks": "Amostrar os zaguers $1 cambeos en os zaguers $2 días.",
        "diff": "dif",
        "hist": "hist",
        "hide": "Amagar",
        "undeleteviewlink": "veyer",
        "undeleteinvert": "Contornar selección",
        "undeletecomment": "Razón:",
-       "undeletedrevisions": "{{PLURAL:$1|Una edición restaurata|$1 edicions restauratas}}",
-       "undeletedrevisions-files": "$1 {{PLURAL:$1|revisón|revisions}} y $2 {{PLURAL:$2|fichero|fichers}} restauratos",
-       "undeletedfiles": "$1 {{PLURAL:$1|fichero restaurato|fichers restauratos}}",
        "cannotundelete": "No s'ha puesto desfer o borrau; belatro usuario puede haber desfeito antis o borrau.",
        "undeletedpage": "'''S'ha restaurato $1'''\n\nConsulte o [[Special:Log/delete|rechistro de borraus]] ta veyer una lista d'os zaguers borraus y restauracions.",
        "undelete-header": "En o [[Special:Log/delete|rechistro de borraus]] se listan as pachina borratas fa poco tiempo.",
        "logentry-newusers-create2": "$1 creyó una cuenta d'usuario $3",
        "logentry-newusers-autocreate": "S'ha creyau automaticament a cuenta $1",
        "rightsnone": "(garra)",
-       "revdelete-summary": "editar resumen",
        "feedback-adding": "Adhibindo comentarios ta la pachina...",
        "feedback-bugcheck": "Perfecto! Comprebe nomás que no sía un [$1 fallo conoixiu].",
        "feedback-bugnew": "L'he comprebau. Informar d'un nuevo fallo.",
        "feedback-thanks": "Gracias! O suyo comentario s'ha publicau en a pachina [$2  $1].",
        "searchsuggest-search": "Mirar",
        "searchsuggest-containing": "que contién...",
-       "api-error-badaccess-groups": "No puetz cargar fichers en iste wiki.",
        "api-error-badtoken": "Error interna: Simbolo incorrecto.",
-       "api-error-copyuploaddisabled": "A puyada por URL ye desactivada en iste servidor.",
-       "api-error-duplicate": "Ya existe {{PLURAL:$1|unatro fichero|belatros fichers}} en o puesto con o mesmo conteniu.",
-       "api-error-duplicate-archive": "Ya {{PLURAL:$1|existiba unatro fichero|existiban atros fichers}} en o puesto con o mesmo conteniu, pero {{PLURAL:$1|estió eliminau|estioron eliminaus}}.",
-       "api-error-empty-file": "O fichero que ninvió yera vuedo.",
        "api-error-emptypage": "No se permite a creyación de pachinas nuevas en blanco.",
-       "api-error-fetchfileerror": "Error interna: Bella cosa salió malament mientres s'obteneba o fichero.",
-       "api-error-file-too-large": "O fichero que ninvió yera masiau gran.",
-       "api-error-filename-tooshort": "O nombre de fichero ye masiau corto.",
-       "api-error-filetype-banned": "Iste tipo de fichero ye vedau.",
-       "api-error-filetype-banned-type": "{{PLURAL:$4|Os fichers de tipo $1|Os fichers d'os tipos $1}} no se permiten. {{PLURAL:$3|Nomás s'admeten os fichers d'o tipo|Nomás s'admeten os fichers d'os tipos}} $2.",
-       "api-error-filetype-missing": "O fichero no tiene extensión de fichero.",
-       "api-error-hookaborted": "A modificación que intentés fer estió cancelada por un gancho d'extensión.",
-       "api-error-http": "Error interna: No se puede connectar ta o servidor.",
-       "api-error-illegal-filename": "O nombre de fichero no ye permitiu.",
-       "api-error-internal-error": "Error interna: Bella cosa salió malament en procesar a tuya carga en o wiki.",
-       "api-error-invalid-file-key": "Error interna: No se trobó o fichero en l'almagazenamiento temporal.",
-       "api-error-missingparam": "Error interna: Faltan parametros en a demanda.",
-       "api-error-missingresult": "Error interna: No se podió determinar si la copia estió correcta.",
-       "api-error-mustbeloggedin": "Ha d'encetar una sesión ta cargar fichers.",
-       "api-error-mustbeposted": "Error interna: a suya demanda requiere HTTP POST.",
-       "api-error-noimageinfo": "La carga se realizó correctament, pero o servidor no nos dio garra información sobre o fichero.",
-       "api-error-nomodule": "Error interna: No i hai garra modulo de carga configurau.",
-       "api-error-ok-but-empty": "Error interna: No i hai garra respuesta d'o servidor.",
-       "api-error-overwrite": "No se premite de sobrescribir un fichero existent.",
        "api-error-stashfailed": "Error interna: O servidor no podió almagazenar o fichero temporal.",
-       "api-error-timeout": "O servidor no respondió en o plazo previsto.",
-       "api-error-unclassified": "Ocurrió una error desconoixida.",
-       "api-error-unknown-code": "Error desconoixida: «$1»",
-       "api-error-unknown-error": "Error interna: Bella cosa salió malament en intentar cargar o fichero.",
        "api-error-unknown-warning": "Alvertencia desconoixida: $1",
        "api-error-unknownerror": "Error desconoixida: «$1».",
-       "api-error-uploaddisabled": "As cargas de fichers son desactivadas en iste wiki.",
-       "api-error-verification-error": "Iste fichero puede estar danyau, u tiene una extensión incorrecta.",
        "expandtemplates": "Espandir plantillas",
        "expand_templates_intro": "Ista pachina especial prene bel testo y espande recursivament todas as plantillas que bi ha en el. Tamién espande as funcions parser como <nowiki>{{</nowiki>#language:...}}, y as variables como <nowiki>{{</nowiki>CURRENTDAY}}&mdash; en cheneral tot o que sía entre dobles claus.\nIsto lo fa clamando ta o parser correspondient dende o propio MediaWiki.",
        "expand_templates_title": "Títol ta contestualizar ({{FULLPAGENAME}} etz.):",
index e19c3da..1c60380 100644 (file)
        "rcshowhidemine": "$1 mīna adihtunga",
        "rcshowhidemine-show": "Īwan",
        "rcshowhidemine-hide": "Hȳdan",
-       "rclinks": "Īwan þā nīwostan $1 andwendunga in þissum nīehstum $2 daga<br />$3",
+       "rclinks": "Īwan þā nīwostan $1 andwendunga in þissum nīehstum $2 daga",
        "diff": "scēad",
        "hist": "stǣr",
        "hide": "Hȳdan",
index 56bbdfe..4734ca2 100644 (file)
        "userlogin-remembermypassword": "हमरा लॉगिन रखऽ",
        "login": "लॉग इन",
        "nav-login-createaccount": "सत्रारंभ / खाता खोलॊ",
-       "userlogin": "लॉग इन / खाता बनाबॊ",
        "logout": " सत्रांत (लॉग आउट)",
        "userlogout": "सत्रांत (लॉग आउट)",
        "userlogin-noaccount": "आपन॑ क॑ खाता नै छै?",
        "userlogin-joinproject": "{{SITENAME}} सं॑ जुड़ऽ",
-       "nologinlink": "एगो खाता बनाबॊ",
        "createaccount": "नवीन खाता बनाबऽ",
        "userlogin-resetpassword-link": "पासवर्ड भुलाय गेल्हो की ?",
        "userlogin-helplink2": "लॉग-इन सथें सहायता",
        "rcshowhidemine": "हमरऽ संपादन $1",
        "rcshowhidemine-show": "देखाबऽ",
        "rcshowhidemine-hide": "छुपाबऽ",
-       "rclinks": "पिछला $2 दिना मं॑ होलऽ $1 बदलाव देखियै.<br />$3",
+       "rclinks": "पिछला $2 दिना मं॑ होलऽ $1 बदलाव देखियै.",
        "diff": "अंतर",
        "hist": "इतिहास",
        "hide": "छुपाबऽ",
index 3d3efd4..9187f84 100644 (file)
        "readonlywarning": "<strong>تحذير: لقد أغلقت قاعدة البيانات للصيانة، لذلك لن تتمكن من حفظ التعديلات التي قمت بها حاليا.\nإذا رغبت بإمكانك أن تنسخ النص الذي تعمل عليه وتحفظه في ملف نصي إلى وقت لاحق.</strong>\n\nإداري النظام الذي أغلقها أعطى هذا التفسير: $1",
        "protectedpagewarning": "'''تحذير: تمت حماية هذه الصفحة حتى يمكن للمستخدمين ذوي الصلاحيات الإدارية فقط تعديلها.'''\nآخر مدخلة سجل موفرة بالأسفل كمرجع:",
        "semiprotectedpagewarning": "'''ملاحظة:''' هذه الصفحة محمية بحيث يمكن للمستخدمين المسجلين وحدهم تعديلها.",
-       "cascadeprotectedwarning": "<strong>تحذير:</strong> تمت حماية هذه الصفحة بحيث يستطيع المستخدمون ذوو الصلاحيات الإدارية فقط تعديلها، وذلك لأنها مدمجة في {{PLURAL:$1||الصفحة التالية والتي تمت حمايتها|الصفحتين التاليتين واللتين تمت حمايتها|الصفحات التالية والتي تمت حمايتها}} بخاصية \"حماية الصفحات المدمجة\":",
+       "cascadeprotectedwarning": "<strong>تحذير:</strong> تمت حماية هذه الصفحة بحيث يستطيع المستخدمون [[Special:ListGroupRights|ذوو صلاحيات محددة]] فقط تعديلها، وذلك لأنها مدمجة في {{PLURAL:$1||الصفحة التالية والتي تمت حمايتها|الصفحتين التاليتين واللتين تمت حمايتها|الصفحات التالية والتي تمت حمايتها}} بخاصية \"حماية الصفحات المدمجة\":",
        "titleprotectedwarning": "'''تحذير:  هذه الصفحة تمت حمايتها بحيث أن [[Special:ListGroupRights|صلاحيات معينة]] مطلوبة لإنشائها.'''\nآخر مدخلة سجل موفرة بالأسفل كمرجع:",
        "templatesused": "{{PLURAL:$1||القالب المستخدم|القالبان المستخدمان|القوالب المستخدمة}} في هذه الصفحة:",
        "templatesusedpreview": "{{PLURAL:$1||القالب المستخدم|القالبان المستخدمان|القوالب المستخدمة}} في هذه المعاينة:",
        "saveusergroups": "احفظ مجموعات {{GENDER:$1|المستخدم|المستخدمة}}",
        "userrights-groupsmember": "عضو في:",
        "userrights-groupsmember-auto": "عضو ضمني في:",
-       "userrights-groups-help": "يمكنك تغيير المجموعات التي ينتمي هذا المستخدم إليها:\n* يعني الصندوق المعلم أن المستخدم ضمن هذه المجموعة.\n* يعني الصندوق غير المعلم أن المستخدم ليس في هذه المجموعة.\n* تعني علامة * عدم إمكانية إزالة المجموعة متى ما أضفتها أو العكس.\n* تعني علامة # أنه يمكنك فقط تحديد تاريخ الانتهاء لهذه المجموعة؛ لكن لا يمكنك تقديمه بعد تحديده.",
+       "userrights-groups-help": "يمكنك تغيير المجموعات التي ينتمي هذا المستخدم إليها:\n* يعني الصندوق المعلم أن المستخدم ضمن هذه المجموعة.\n* يعني الصندوق غير المعلم أن المستخدم ليس في هذه المجموعة.\n* تعني علامة * عدم إمكانية إزالة المجموعة متى ما أضفتها أو العكس.\n* تعني علامة # أنه يمكنك فقط تحديد تاريخ الانتهاء لعضوية هذه المجموعة؛ لكن لا يمكنك تقديمه بعد تحديده.",
        "userrights-reason": "السبب:",
        "userrights-no-interwiki": "أنت لا تمتلك الصلاحية لتعديل صلاحيات المستخدمين على الويكيات الأخرى.",
        "userrights-nodatabase": "قاعدة البيانات $1 غير موجودة أو ليست محلية.",
        "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-cannot-shorten-expiry": "أنت لا يمكنك تقديم تاريخ الانتهاء لعضوية المجموعة \"$1\". فقط المستخدمون الذين يمتلكون السماح لإضافة وإزالة هذه المجموعة يمكنهم تقديم تواريخ الانتهاء.",
        "userrights-conflict": "تضارب في تغيير صلاحيات المستخدم! الرجاء مراجعة تغييراتك مجدّدا وتأكيدها.",
        "group": "المجموعة:",
        "group-user": "مستخدمون",
        "right-editsemiprotected": "تعديل الصفحات التي حمايتها \"{{int:protect-level-autoconfirmed}}\"",
        "right-editcontentmodel": "عدل طريقة محتوى صفحة",
        "right-editinterface": "تعديل واجهة المستخدم",
-       "right-editusercssjs": "تعديل ملفات CSS و JS للمستخدمين الآخرين",
        "right-editusercss": "تعديل ملفات CSS للمستخدمين الآخرين",
        "right-edituserjs": "تعديل ملفات جافاسكريبت للمستخدمين الآخرين",
        "right-editmyusercss": "تعديل ملفات CSS للمستخدم نفسه",
        "rcfilters-hideminor-conflicts-typeofchange": "بعض أنواع التغييرات لا يمكن التعليم عليها ك\"طفيفة،\" لذا فهذا المرشح يتعارض مع مرشحات نوع التغيير التالية: $1",
        "rcfilters-typeofchange-conflicts-hideminor": "مرشح نوع التغيير هذا يتعارض مع مرشح \"التعديلات الطفيفة\". بعض أنواع التغييرات لا يمكن التعليم عليها ك\"طفيفة.\"",
        "rcnotefrom": "بالأسفل {{PLURAL:$5|التغيير|التغييرات}} منذ <strong>$2</strong> (إلى <strong>$1</strong> معروضة).",
+       "rclistfromreset": "إعادة ضبط خيار التاريخ",
        "rclistfrom": "أظهر التغييرات بدء من $3 $2",
        "rcshowhideminor": "$1 التعديلات الطفيفة",
        "rcshowhideminor-show": "أظهر",
        "rcshowhidecategorization": "$1 تصنيف الصفحات",
        "rcshowhidecategorization-show": "أظهر",
        "rcshowhidecategorization-hide": "أخف",
-       "rclinks": "أظهر آخر $1 تعديل في آخر $2 يوم<br />$3",
+       "rclinks": "أظهر آخر $1 تعديل في آخر $2 يوم",
        "diff": "فرق",
        "hist": "تاريخ",
        "hide": "أخف",
        "php-uploaddisabledtext": "رفع ملفات PHP معطل. من فضلك تحقق من إعدادات رفع الملفات.",
        "uploadscripted": "هذا الملف يضم كود HTML أو كود آخر يمكن أن يفسره متصفح الوب بطريقة خاطئة.",
        "upload-scripted-pi-callback": "لا يمكن رفع ملف يحتوي على تعليمة معالجة XML-stylesheet",
+       "upload-scripted-dtd": "لا يمكن رفع ملفات SVG التي تحتوي على إعلان DTD غير قياسي.",
        "uploaded-script-svg": "تم العثور على عنصر سكريبت \"$1\" في ملف الSVG المرفوع.",
        "uploaded-hostile-svg": "تم العثور على CSS غير آمن في عنصر الشكل في ملف الSVG المرفوع.",
        "uploaded-event-handler-on-svg": "ضبط سمات معالج الأحداث <code>$1=\"$2\"</code> غير مسموح به في ملفات SVG.",
        "editcomment": "ملخص التعديل كان:<em>$1</em>.",
        "revertpage": "استرجع تعديلات [[Special:Contributions/$2|$2]] ([[User talk:$2|نقاش]]) حتى آخر مراجعة ل[[User:$1|$1]]",
        "revertpage-nouser": "استرجع تعديلات مستخدم مخفي حتى آخر مراجعة ل{{GENDER:$1|[[User:$1|$1]]}}",
-       "rollback-success": "استرجع ØªØ¹Ø¯Ù\8aÙ\84ات {{GENDER:$3|$1}}Ø\9b\nاسترجع حتى آخر نسخة بواسطة {{GENDER:$4|$2}}.",
+       "rollback-success": "تÙ\85 Ø§Ø³ØªØ±Ø¬Ø§Ø¹ ØªØ¹Ø¯Ù\8aÙ\84ات {{GENDER:$3|$1}}Ø\8c حتى آخر نسخة بواسطة {{GENDER:$4|$2}}.",
        "rollback-success-notify": "تم استرجاع التعديلات بواسطة $1;\nتم التغيير إلى آخر مراجعة بواسطة $2. [$3 عرض التغييرات]",
        "sessionfailure-title": "فشل في الجلسة",
        "sessionfailure": "يبدو أنه هناك مشكلة في جلسة الدخول الخاصة بك؛\nلذلك فقد ألغيت هذه العملية كإجراء احترازي ضد الاختراق.\nمن فضلك اضغط على مفتاح \"رجوع\" لتحميل الصفحة التي جئت منها، ثم حاول مرة أخرى.",
        "undeleteviewlink": "اعرض",
        "undeleteinvert": "اعكس الاختيار",
        "undeletecomment": "السبب:",
-       "undeletedrevisions": "تم استرجاع {{PLURAL:$1||تعديل واحد|تعديلين|$1 تعديلات|$1 تعديلا|$1 تعديل}}",
-       "undeletedrevisions-files": "أسترجعت {{PLURAL:$1||مراجعة واحدة|مراجعتان|$1 مراجعات|$1 مراجعة}}  و{{PLURAL:$2||ملف واحد|ملفان|$2 ملفات|$2 ملفًا|$2 ملف}}",
-       "undeletedfiles": "أسترجع {{PLURAL:$1||ملف واحد|ملفان|$1 ملفات|$1 ملفًا|$1 ملف}}",
        "cannotundelete": "بعض أو كل عملية الاسترجاع فشلت:\n$1",
        "undeletedpage": "'''تم استرجاع $1'''\n\nراجع [[Special:Log/delete|سجل الحذف]] لمعاينة عمليات الحذف والاسترجاعات الحديثة.",
        "undelete-header": "انظر الصفحات المحذوفة حديثا في [[Special:Log/delete|سجل الحذف]].",
        "sp-contributions-uploads": "مرفوعات",
        "sp-contributions-logs": "سجلات",
        "sp-contributions-talk": "نقاش",
-       "sp-contributions-userrights": "إدارة صلاحيات المستخدم",
+       "sp-contributions-userrights": "إدارة صلاحيات {{GENDER:$1|المستخدم|المستخدمة}}",
        "sp-contributions-blocked-notice": "هذا المستخدم ممنوع حاليا.\nإن آخر مدخلة في سجل المنع موجودة أدناه كمرجع:",
        "sp-contributions-blocked-notice-anon": "عنوان الأيبي هذا ممنوع حاليا.\nآخر مدخلة لسجل المنع معروضة هنا كمرجع:",
        "sp-contributions-search": "بحث عن مساهمات",
        "unblocked-id": "منع $1 تم رفعه",
        "unblocked-ip": "تم رفع المنع عن [[Special:Contributions/$1|$1]].",
        "blocklist": "المستخدمون الممنوعون",
+       "autoblocklist": "منع تلقائي",
+       "autoblocklist-submit": "بحث",
+       "autoblocklist-legend": "قائمة المنع التلقائي",
+       "autoblocklist-localblocks": "{{PLURAL:$1|المنع التلقائي المحلي|عمليات المنع التلقائي المحلية}}",
+       "autoblocklist-empty": "قائمة المنع التلقائي فارغة.",
+       "autoblocklist-otherblocks": "{{PLURAL:$1|المنع التلقائي الآخر|عمليات المنع التلقائي الأخرى}}",
        "ipblocklist": "المستخدمون الممنوعون",
        "ipblocklist-legend": "إيجاد مستخدم ممنوع",
        "blocklist-userblocks": "أخفِ منع الحسابات",
        "tooltip-pt-mycontris": "قائمة{{GENDER:|your}}  مساهماتك",
        "tooltip-pt-anoncontribs": "قائمة بتعديلات قام بها عنوان الآي بي",
        "tooltip-pt-login": "يفضل أن تسجل الدخول، لكنه ليس إلزاميا.",
+       "tooltip-pt-login-private": "عليك تسجيل الدخول لاستخدام هذه الويكي.",
        "tooltip-pt-logout": "تسجيل الخروج",
        "tooltip-pt-createaccount": "نشجعك على عمل حساب وتسجيل دخولك; لكنه غير ضروري على اي حال",
        "tooltip-ca-talk": "نقاش عن صفحة المحتوى",
        "confirmrecreate-noreason": "{{GENDER:$1|حذف المستخدم|حذفت المستخدمة}} [[User:$1|$1]] ([[User talk:$1|نقاش]]) هذه الصفحة بعد أن بدأت أنت بتحريرها. الرجاء التأكد من أنك تريد إعادة إنشاء هذه الصفحة.",
        "recreate": "إعادة إنشاء",
        "unit-pixel": "بك",
+       "confirm-purge-title": "مسح كاش هذه الصفحة",
        "confirm_purge_button": "موافق",
        "confirm-purge-top": "امسح مختزن هذه الصفحة؟",
        "confirm-purge-bottom": "إفراغ مختزن الصفحة يمحو المختزن ويجبر أحدث نسخة على الظهور.",
        "htmlform-user-not-valid": "اسم المستخدم <strong>$1</strong> غير صالح.",
        "logentry-delete-delete": "{{GENDER:$2|حذف|حذفت}} $1 صفحة $3",
        "logentry-delete-delete_redir": "$1 {{GENDER:$2|حذف|حذفت}} التحويلة $3 بواسطة إعادة الكتابة",
-       "logentry-delete-restore": "{{GENDER:$2|استرجع|استرجعت}} $1 صفحة $3",
+       "logentry-delete-restore": "{{GENDER:$2|استرجع|استرجعت}} الصفحة $3 ($4)",
+       "logentry-delete-restore-nocount": "$1 {{GENDER:$2|استرجع|استرجعت}} الصفحة $3",
+       "restore-count-revisions": "{{PLURAL:$1|1 مراجعة|$1 مراجعة}}",
+       "restore-count-files": "{{PLURAL:$1|1 ملف|$1 ملف}}",
        "logentry-delete-event": "{{GENDER:$2|غيّر|غيّرت}} $1 إمكانية مشاهدة {{PLURAL:$5||حدث|حدثين|$5 أحداث|$5 حدثًا|$5 حدث}} في سجل $3: $4",
        "logentry-delete-revision": "غيّر{{GENDER:$2||ت}} $1 إمكانية مشاهدة {{PLURAL:$5||مراجعة واحدة|مراجعتين|$5 مراجعات|$5 مراجعة}} في صفحة $3: $4",
        "logentry-delete-event-legacy": "{{GENDER:$2|غيّر|غيّرت}} $1 إمكانية رؤية أحداث في سجل $3",
        "mediastatistics": "إحصاءات الميديا",
        "mediastatistics-summary": "إحصاءات عن أنماط الملفات المرفوعة، وتشمل أحدث نسخة من الملف فقط، حيث تستبعد النسخ القديمة أو المحذوفة من الملفات.",
        "mediastatistics-nbytes": "{{PLURAL:$1|بايت واحد|بايتان اثنان|$1 بايتات|$1 بايتاً|$1 بايت}} ($2; $3%)",
-       "mediastatistics-bytespertype": "اÙ\84حجÙ\85 Ø§Ù\84Ù\83Ù\84Ù\8a Ù\84Ù\83Ù\84 Ø§Ù\84Ù\85Ù\84Ù\81ات: {{PLURAL:$1|باÙ\8aت$1|$1 Ø¨Ø§Ù\8aت}}($2; $3%).",
+       "mediastatistics-bytespertype": "إجÙ\85اÙ\84Ù\8a Ø­Ø¬Ù\85 Ø§Ù\84Ù\85Ù\84Ù\81ات Ù\84Ù\87ذا Ø§Ù\84Ù\82سÙ\85: {{PLURAL:$1|باÙ\8aت$1|$1 Ø¨Ø§Ù\8aت}} ($2; $3%).",
        "mediastatistics-allbytes": "الحجم الكلي لكل الملفات: {{PLURAL:$1|$1 بايت}} ($2).",
        "mediastatistics-table-mimetype": "نوع MIME",
        "mediastatistics-table-extensions": "الامتدادات الممكنة",
        "special-characters-group-thai": "تايلندية",
        "special-characters-group-lao": "لاوية",
        "special-characters-group-khmer": "خميرية",
+       "special-characters-group-canadianaboriginal": "كندي أصلي",
        "special-characters-title-endash": "واصلة قصيرة",
        "special-characters-title-emdash": "واصلة طويلة",
        "special-characters-title-minus": "علامة الطرح",
        "restrictionsfield-help": "عنوان أيبي أو نطاق CIDR واحد لكل سطر. لتفعيل كل شيء، استخدم:\n<pre>0.0.0.0/0\n::/0</pre>",
        "revid": "المراجعة $1",
        "pageid": "معرف الصفحة $1",
-       "rawhtml-notallowed": "لا يمكن استخدام وسوم &lt;html&gt; خارج الصفحات العادية."
+       "rawhtml-notallowed": "لا يمكن استخدام وسوم &lt;html&gt; خارج الصفحات العادية.",
+       "gotointerwiki": "ترك {{SITENAME}}",
+       "gotointerwiki-invalid": "العنوان المحدد كان غير صحيح.",
+       "gotointerwiki-external": "أنت على وشك ترك {{SITENAME}} لزيارة [[$2]] والذي هو موقع منفصل.\n\n[$1 اضغط هنا للاستمرار إلى $1].",
+       "undelete-cantedit": "أنت لا يمكنك استرجاع هذه الصفحة حيث أنه لا يمكنك تعديل هذه الصفحة.",
+       "undelete-cantcreate": "أنت لا يمكنك استرجاع هذه الصفحة حيث أنه لا توجد صفحة بهذا الاسم وأنت غير مسموح لك بإنشاء هذه الصفحة."
 }
index 8d20e95..d9d99e7 100644 (file)
        "userlogin-signwithsecure": "ܐܚܫܚ ܕܒܝܩܘܬܐ ܡܫܝܢܢܬܐ",
        "login": "ܥܘܠ",
        "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": "ܢܫܬ ܡܠܬܐ ܕܥܠܠܐ؟",
        "createacct-emailrequired": "ܒܝܠܕܪܐ ܐܠܩܛܪܘܢܝܐ",
        "createaccountmail": "ܐܦܠܚ ܡܠܬܐ ܕܥܠܠܐ ܙܒܢܢܝܬܐ ܘܫܕܪ ܠܗ ܥܠ ܒܝܠܕܪܐ ܐܠܩܛܪܘܢܝܐ ܬܘܚܡܐ ܠܬܚܬ",
-       "createaccountreason": "ܥܠܬܐ",
        "createacct-submit": "ܒܪܝ ܚܘܫܒܢܐ ܕܝܠܟ",
        "createacct-benefit-heading": "ܝܬܒܐ ܕ{{SITENAME}} ܐܣܬܝܡ ܒܝܕ ܐܢܫ̈ܐ ܐܟܘܬܟ.",
        "createacct-benefit-body1": "{{PLURAL:$1|ܫܘܚܠܦܐ|ܫܘܚܠܦ̈ܐ}}",
        "prefs-rendering": "ܐܣܟܝܡܐ",
        "saveprefs": "ܠܒܘܟ",
        "prefs-editing": "ܫܚܠܦܬܐ",
-       "rows": "ܨ̈ܦܐ",
-       "columns": "ܥܡܘܕ̈ܐ:",
        "searchresultshead": "ܒܨܝ",
        "recentchangesdays": "ܝܘܡܬ̈ܐ ܠܚܙܝܐ ܒܫܘܚܠܦ̈ܐ ܚܕ̈ܬܐ:",
        "recentchangescount": "ܡܢܝܢܐ ܕܫܘܚܠܦ̈ܐ ܠܚܙܝܐ ܪܫܐܝܬ:",
        "rcshowhidemine": "$1 ܫܘܚܠܦ̈ܝ",
        "rcshowhidemine-show": "ܚܘܝ",
        "rcshowhidemine-hide": "ܛܫܝ",
-       "rclinks": "ܚܘܝ $1 ܫܘܚܠܦ̈ܐ ܐܚܪ̈ܝܐ ܒ $2 ܝܘܡܬ̈ܐ ܐܚܪ̈ܝܐ<br />$3",
+       "rclinks": "ܚܘܝ $1 ܫܘܚܠܦ̈ܐ ܐܚܪ̈ܝܐ ܒ $2 ܝܘܡܬ̈ܐ ܐܚܪ̈ܝܐ",
        "diff": "ܦܘܪܫܐ",
        "hist": "ܬܫܥܝܬܐ",
        "hide": "ܛܫܝ",
        "undeleteviewlink": "ܚܙܝ",
        "undeleteinvert": "ܐܗܦܟ ܠܓܘܒܝܐ",
        "undeletecomment": "ܥܠܬܐ:",
-       "undeletedrevisions": "{{PLURAL:$1|1 ܬܢܝܬܐ|$1 ܬܢܝܬ̈ܐ}} ܐܦܢܝܬ",
-       "undeletedrevisions-files": "{{PLURAL:$1|1 ܬܢܝܬܐ|$1 ܬܢܝܬ̈ܐ}} and {{PLURAL:$2|1 ܠܦܦܐ|$2 ܠܦܦܐ}} ܐܦܢܝܬ",
-       "undeletedfiles": "{{PLURAL:$1|1 ܠܦܦܐ|$1 ܠܦܦ̈ܐ}} ܐܦܢܝܬ",
        "undelete-header": "ܚܙܝ [[Special:Log/delete|ܣܓܠܐ ܕܫܝܦܐ]] ܠܚܙܝܐ ܕܦܐܬܬ̈ܐ ܫܝܦܬ̈ܐ ܚܕ̈ܬܬܐ.",
        "undelete-search-title": "ܒܨܝ ܦܐܬܬ̈ܐ ܫܝܦܬ̈ܐ",
        "undelete-search-box": "ܒܨܝ ܦܐܬܬ̈ܐ ܫܝܦܬ̈ܐ",
        "logentry-newusers-create2": "ܚܘܫܒܢܐ ܕܡܦܠܚܢܐ $3 {{GENDER:$2|ܐܬܬܟܝܢ}} ܒܝܕ $1",
        "logentry-newusers-autocreate": "ܚܘܫܒܢܐ ܕܡܦܠܚܢܐ $1 {{GENDER:$2|ܐܬܬܣܝܡ}} ܝܬܐܝܬ",
        "rightsnone": "(ܠܐ ܡܕܡ)",
-       "revdelete-summary": "ܫܚܠܦ ܦܣܝܩܬ̈ܐ",
        "feedback-cancel": "ܒܛܘܠ",
        "feedback-message": "ܐܓܪܬܐ:",
        "feedback-subject": "ܡܠܘܐܐ:",
index 44b0f68..ad5a6d3 100644 (file)
        "yourpasswordagain": "Rüf feypinge nülawe:",
        "login": "Konkülen",
        "nav-login-createaccount": "konkülen/dewman konün",
-       "userlogin": "Konkülen/dewman konün",
-       "userloginnocreate": "Konün",
        "logout": "Tripan",
        "userlogout": "Tripan",
        "notloggedin": "Petu konlaymi.",
-       "nologin": "Nielaymi kiñe konün? $1.",
-       "nologinlink": "Dewmafinge konün",
        "createaccount": "Dewmafinge konün",
-       "gotaccount": "Dew nieymi konün? $1.",
-       "gotaccountlink": "Konün",
-       "userlogin-resetlink": "Ngoyüniengetuymi chumngechi konün?",
-       "createaccountreason": "Dungu:",
        "mailmypassword": "Amulün we nülawe werküwe mew",
        "loginlanguagelabel": "Cezugun: $1",
        "pt-login": "Konkülen",
        "rcshowhideanons": "$1 üyngenulu kellufe",
        "rcshowhidepatr": "$1 pukintulu kalekünun",
        "rcshowhidemine": "$1 tañi wirin",
-       "rclinks": "Adkintun doy we $1 kalekünun, tunte $2 antü mew<br />$3",
+       "rclinks": "Adkintun doy we $1 kalekünun, tunte $2 antü mew",
        "diff": "Kalelu",
        "hist": "rupañ",
        "hide": "Ellkan",
index 232427d..527710a 100644 (file)
@@ -6,7 +6,9 @@
                        "아라",
                        "Amire80",
                        "GeekEmad",
-                       "Macofe"
+                       "Macofe",
+                       "Mekakem",
+                       "Vikoula5"
                ]
        },
        "tog-underline": "تسطار الوصيلات:",
@@ -24,6 +26,7 @@
        "tog-watchdefault": "زيد الـصفحات و الـفيشيّات اللي نبدّلها فل قايمة تاع الـتتباع تاعي",
        "tog-watchmoves": "زيد الـصفحات و الـفيشيات اللي نحوّلها فل قايمة تاع الـتباع تاعي",
        "tog-watchdeletion": "زيد الـصفحات اللي نفصيها فل قايمة تاع التتباع تاعي",
+       "tog-watchuploads": "زيد الدوسيّات الجديدة الّي امبورتيتها لل ليستة تاعي تاع المتابعة",
        "tog-watchrollback": "بيّن فل ليستة تاع المتابعة تاعي، الصفحات الّي كنت أنا سترجعتها.",
        "tog-minordefault": "ماركي كل التبديلات بلي راهي خفيفه",
        "tog-previewontop": "ورّي نضرة قبليّة تاع واش يصرا، فوق الجيهة تاع التبدال",
@@ -33,7 +36,7 @@
        "tog-enotifminoredits": "ابعت لي بريه حتا يلا كانت تبدالات صغيرة فلباجات و الـفيشيّات",
        "tog-enotifrevealaddr": "بين لادريستي إلكترونيك في براوات الاعلام",
        "tog-shownumberswatching": "بين شحال كاين من مستعمل يتبع الباجه",
-       "tog-oldsig": "خطّ‘لـيدّ اللي كاين",
+       "tog-oldsig": "خطّ‘ اليدّ تاعك الي كاين:",
        "tog-fancysig": "اعتبر التوقيع كي كتيبه ويكي (بلا وصيله توماتيك)",
        "tog-uselivepreview": "استعمل الشوفة الخفيفة",
        "tog-forceeditsummary": "نبّهني كي تندخل كاش صفحة خاوية",
@@ -50,7 +53,7 @@
        "tog-showhiddencats": "ورّي الـفصلات الـمخبّيين",
        "tog-norollbackdiff": "ما تورّيش الـفروق كي تدير رجوع",
        "tog-useeditwarning": "نبّهني كي نخرج من صفحة كنت نكتب فيها بلا ما نعمّر الخدمة",
-       "tog-prefershttps": "نستعمل دايمن توصال مأمون كي ندخل",
+       "tog-prefershttps": "استعمل دايمن توصال مأمون كي تدخُل",
        "underline-always": "ديما",
        "underline-never": "ابدا",
        "underline-default": "الـقيمة الـعاديّة تاع الـواجهة و الـفلّاك",
        "category-file-count-limited": "{{PLURAL:$1|الملف التابع مصنّف|الملفات الـ $1 التابعة مصنّفة}} ب هاذ التصنيف.",
        "listingcontinuesabbrev": "يُتبع",
        "index-category": "صفحات مفهّرسة",
-       "noindex-category": "باجات Ù\85Ø´Ù\8a Ù\85Ù\81Ù\87رسÙ\87",
+       "noindex-category": "باجات Ù\85اشÙ\8a Ù\85Ù\81Ù\87رسة",
        "broken-file-category": "صفحات فيها وصيلات تاع ملفّات خاسرة",
        "about": "على هاذ الويكي",
        "article": "صفحة تاع محتوى",
        "newwindow": "(حل في تاقة جديدة)",
        "cancel": "انيلي",
        "moredotdotdot": "كتر...",
-       "morenotlisted": "هاد الليستة ما راهيش مكمولة",
+       "morenotlisted": "هاد الليستة بالاك ما راهيش مكمولة",
        "mypage": "باجه",
        "mytalk": "تقرعيج",
        "anontalk": "تقرعيج",
        "tagline": "من {{SITENAME}}",
        "help": "معاونة",
        "search": "فتّش",
+       "search-ignored-headings": " #<!-- خلّي هاد السطَر كيما راه --> <pre>\n# العلاون الّي غادي يتينيوراو ف` التفتاش.\n# التبدالات غادي يبانو غير كي تتفهرس الباجة الي فيها الترويسات.\n# تنجم تفورصي الباجة باش تعاود التفهريص، ل هاد الشي، تنجم تدير تبدال خاوي.\n# الكتيبة تكون كيما هاك:\n#   * كلّ حاجة تكون مكتوبة بعد حتا ل` السطر التالي غادي ينتعد بلّي تعليق.\n#   * كلّ سطر ما يكونش فارغ غادي يتعد هوّا ب` الدات العلوان الّي غادي يتّنسا، ب` الحرف و الشكل.\nمراجع\nوصلات برّانيّة\nشوف تاني\n #</pre> <!-- خلّي هاد السطر كيما راه -->",
        "searchbutton": "فتّش",
        "go": "شايع",
        "searcharticle": "روح",
        "history": "تاريخ الملف",
        "history_short": "تاريخ",
+       "history_small": "التأراخ تاع التبدالات",
        "updatedmarker": "مبدّل منلي الزيارة تاعي الـتالية",
        "printableversion": "ڥرسيون تقدر تطبعها",
        "permalink": "ليان دايم",
        "talk": "تناقش",
        "views": "آفيشاج",
        "toolbox": "ادَوات",
+       "tool-link-userrights": "تبدال مجموعات {{GENDER:$1|المستعملي|المستعمليّة}}",
+       "tool-link-userrights-readonly": "شوف المجموعات تاع {{GENDER:$1|المستعملي|المستعمليّة}}",
+       "tool-link-emailuser": "ارسل بريّة ل هاد {{GENDER:$1|المستعملي|المستعمليّة}}",
        "userpage": "شوف الباجة تاع المستعملي",
        "projectpage": "شوف الباجة تاع البروجي",
        "imagepage": "شوف الباجة تاع الفيشي",
        "viewhelppage": "شوف الباجة تاع المعاونة",
        "categorypage": "شوف الباجة تاع الصنيف",
        "viewtalkpage": "شوف التقرعيج",
-       "otherlanguages": "بلوغات اخرين",
+       "otherlanguages": "ب لوغات وحدخرين",
        "redirectedfrom": "(محول من $1)",
        "redirectpagesub": "باجة تاع التحوال",
        "redirectto": "حوّل لـ:",
        "missingarticle-rev": "(رقم الفرسيون: $1)",
        "missingarticle-diff": "(فرق بين: $1، $2)",
        "readonly_lag": "الدخيرة تاع الخبرات راهي مقفولة بيدما السربايات التوناويّة يلحقو التوخار الّي عندهم معا السرباي اللولاني",
+       "nonwrite-api-promise-error": "الرويصة HTTP 'Promise-Non-Write-API-Action' راهي انبعتت، بصّح المطلب راه ندار ل مودول تاع كتبة تاع الـ API.",
        "internalerror": "غلطة دخلانيّة",
        "internalerror_info": "غلطة دخلانيّة: $1",
        "internalerror-fatal-exception": "غلطة واعرة من الطبَع \"$1\"",
        "viewsource": "شوف الاصل",
        "viewsource-title": "شوف المصدر تاع $1",
        "actionthrottled": "الفعل راه محبّس",
-       "actionthrottledtext": "باش Ù\86حرزÙ\88 Ù\85Ù\86 Ø§Ù\84سباÙ\85Ø\8c Ù\85ا Ù\8aÙ\85Ù\83Ù\86Ø´ ØªØ¯Ù\8aر Ù\87اد Ø§Ù\84Ù\81عÙ\84 Ø¨Ø²Ù\91اÙ\81 Ø§Ù\84Ù\85رات Ù\81Ù\8a Ù\85دÙ\91Ø© ØªØ§Ø¹ Ù\88Ù\82ت Ù\82صÙ\8aرØ\8c Ù\88 Ø±Ø§Ù\83 Ø¶Ø±Ù\83ا فتّ هذا الحد.\nمن فضلك عاود سيّي منّا على شي دقايق.",
+       "actionthrottledtext": "باش Ù\86حرزÙ\88 Ù\85Ù\86 Ø§Ù\84تخسارØ\8c Ù\85ا Ù\8aÙ\85Ù\83Ù\86Ø´ Ù\8aÙ\86دار Ù\87اد Ø§Ù\84Ù\81عÙ\84 Ù\83تر Ù\85Ù\86 Ø´Ù\8a Ù\85رÙ\91ات Ù\81Ù\8a Ù\85دÙ\91Ø© ØªØ§Ø¹ Ù\88Ù\82ت Ù\82صÙ\8aرØ\8c Ù\88 Ø±Ø§Ù\83 Ù\86تا فتّ هذا الحد.\nمن فضلك عاود سيّي منّا على شي دقايق.",
        "protectedpagetext": "هاد الصفحة راهي تنحضات باش ما تتبدّلش ولا شي حاجاخرة.",
-       "viewsourcetext": "تنجم تشوف ولا تنسّح المصدر تاع هاد الصفحة:",
-       "viewyourtext": "تÙ\86جÙ\85 ØªØ´Ù\88Ù\81 Ù\88 ØªÙ\86سÙ\91Ø® Ø§Ù\84Ù\85صدر ØªØ§Ø¹ <strong>اÙ\84تبداÙ\84ات ØªØ§Ø¹Ù\83</strong> Ù\81 Ù\87اد Ø§Ù\84صÙ\81حة:",
+       "viewsourcetext": "تنجم تشوف و تنسّح المضمون تاع هاد الصفحة.",
+       "viewyourtext": "تÙ\86جÙ\85 ØªØ´Ù\88Ù\81 Ù\88 ØªÙ\86سÙ\91Ø® Ø§Ù\84Ù\85ضÙ\85Ù\88Ù\86 ØªØ§Ø¹ <strong>اÙ\84تبداÙ\84ات ØªØ§Ø¹Ù\83</strong> Ù\81 Ù\87اد Ø§Ù\84صÙ\81حة.",
        "protectedinterface": "هاد الباجة توفّر لك وريشة (interface) تاع كتابة مديورة لل صوفتوار الّي ف هاد الويكي، و راهي مأمّنة باش تنحضا من الضرارات.\nباش تزيد ولا تبدّل طرجمات ل كامل الويكيّات، من فضلك استعمل [https://translatewiki.net/ translatewiki.net] المشروع ميدياويكي تاع التبلادات.",
        "editinginterface": "<strong>ردّ بالك:</strong>راك تبدّل صفحة الّمديورة باش تصنع النصّ تاع الواجهة تاع اللوجيسيال. التبدالات على هاد الصفحة غادي يوتّرو على الشكَل تاع الواجهة حتا عند المستعمليين لخرين.",
        "translateinterface": "باش تزيد ولا تبدّل الطرجمات ل كامل الويكيّات، استعمل [https://translatewiki.net/ translatewiki.net]، المشروع تاع التبلاد تاع الميديويكي.",
-       "cascadeprotected": "الپاجة هادي راهي محضيّة من التبدال خاطرش راهي مضمونة فل {{PLURAL:$1|باجة|باجات}} هادي الّي بداتها محضيّة بل خاصيّة تاع \"احضي تاني الپاجات المضمونة\":$2.",
+       "cascadeprotected": "الپاجة هادي راهي محضيّة من التبدال خاطرش راهي مضمونة ف` {{PLURAL:$1|الباجة|الباجات}} هادي الّي بداتها محضيّة ب` الخاصيّة تاع \"احضي تاني الپاجات المضمونة\":$2.",
        "namespaceprotected": "ما عندكش الحقّ باش تبدّل الپاجات الّي بل وسَع تاع التسميّة <strong>$1</strong>.",
        "customcssprotected": "ما عندكش السراح باش تبدّل الپاجة css هادي خاطرش راه مكمون فيها شي توجادات شخصيّة تاع مستعملي وحداخُر.",
        "customjsprotected": "ما عندكش السراح باش تبدّل الپاجة جافاسكريبت هادي خاطرش راه مكمون فيها شي توجادات شخصيّة تاع مستعملي وحداخُر.",
        "mypreferencesprotected": "ما عندكش السراح باش تبدّل الإختيّارات ديالك.",
        "ns-specialprotected": "الپاجات الخصيصة ما تنجمش تتبدّل.",
        "titleprotected": "[[User:$1|$1]] {{GENDER:$1|حمى|حمات}} هاذ العنوان م الخلقان.\nالسبّة تاعو هيّ <em>$2</em>.",
-       "filereadonlyerror": "ماشي ممكن تبدال الفيشي \"$1\" خاطرش الزمّام \"$2\" راه مشغّلة فيه الخاصيّة \"اقرا برك\".\n\nالموسيّر الّي غلقهُ راه ماد التفسير هادا: \"$3\".",
+       "filereadonlyerror": "ماشي ممكن تبدال الفيشي \"$1\" خاطر الدوسي تاع الفيشيّات \"$2\" راه فيه الخاصيّة \"اقرا برك\".\n\nالموسيّر الّي غلقهُ راه ماد التفسير هادا: \"$3\".",
        "invalidtitle-knownnamespace": "علوان ماشي مقبول ب وسَع تاع تسميّة \"$2\" معا الكتيبة \"$3\".",
        "invalidtitle-unknownnamespace": "علوان ماشي مقبول ب نمرو ماشي معروف تاع الوسَع تاع تسميّة \"$1\" معا الكتيبة \"$2\".",
        "exception-nologin": "ماشي مسجّل الدخول",
        "virus-scanfailed": "التفتاش ما لحّقش (كود $1)",
        "virus-unknownscanner": "مضاد الفيروسات ماشي معروف:",
        "logouttext": "<strong>راك ضركا مسجّل الخروج.</strong>\n\nبالاك تنجم تشوف شي حاجات كلّي راك مازال داخل، حتا الّي يفرغ الكاش تاع البحّار تاعك.",
+       "cannotlogoutnow-title": "ما يمكنش قطيع` التوصال ضركا",
+       "cannotlogoutnow-text": "قطيع التوصال ما هوش ممكن كي $1 تكون مستعملة.",
        "welcomeuser": "مرحبا، $1!",
        "welcomecreation-msg": "الحساب تاعك راه ضركا مخلوق.\nتنجم تبدّل الـ[[Special:Preferences|تفضيلات]] تاع {{SITENAME}} تاعك يلا راك حاب.",
        "yourname": "اسم المستخدم:",
        "createacct-yourpasswordagain-ph": "عاود دخّل كلمت` السرّ",
        "userlogin-remembermypassword": "خلّيني مسجّل داخل",
        "userlogin-signwithsecure": "استعمل التوصال المأمون.",
+       "cannotlogin-title": "ما يمكنش قطيع التوصال",
+       "cannotlogin-text": "قطيع التوصال ما راهش ممكن",
+       "cannotloginnow-title": "ماشي ممكن قطيع التوصال ضركا",
+       "cannotloginnow-text": "قطيع التوصال ماشي ممكم كي تستعمل $1.",
+       "cannotcreateaccount-title": "خليق حسابات ماشي ممكن",
+       "cannotcreateaccount-text": "خليق الحسابات المباشر ما راهش مشعول ف هاد الويكي",
        "yourdomainname": "الدومان تاعك:",
        "password-change-forbidden": "ما تنجمش تبدّل كلمات` السرّ فل ويكي هادا.",
        "externaldberror": "بالاك كاشما صرات غلطة فل توتاق تاع داتاباز ولا ما عندكش السراح باش تبدّل الحساب تاعك الخرجاني.",
        "login": "تسجال الدخول",
+       "login-security": "وتّق الهوويّة تاعك",
        "nav-login-createaccount": "تسجل/ اصنع حساب",
        "logout": "مسجّل الخروج",
        "userlogout": "سجل خروج",
        "userlogin-resetpassword-link": "راك ناسي كلمت` السرّ؟",
        "userlogin-helplink2": "معاونة ف تسجال الدخول",
        "userlogin-loggedin": "راك مازلت مسجّل داخل ب`السميّة {{GENDER:$1|$1}}.\nاستعمل الجدوال تاع التجواب الّي هنا لتحت باش تتسجّل داخل ب سميّت` مستعملي وحداخُر.",
+       "userlogin-reauth": "لازم لك تتوصّل م` الجديد باش توتّق بلّي نتا {{GENDER:$1|$1}}",
        "userlogin-createanother": "اخلق حساب وحداخُر.",
        "createacct-emailrequired": "علوان تاع إيمال",
        "createacct-emailoptional": "علوان ليمال (ماشي مسيّف)",
        "createacct-email-ph": "دخّل علوان` ليمال تاعك",
        "createacct-another-email-ph": "دخّل علوان تاع إيمال",
        "createaccountmail": "استعمل كلمت` سرّ على الزهَر و ابعتها للإيمال المنعوت هنايا.",
+       "createaccountmail-help": "ينجم يتستعمل ل` الصنيع تاع حساب ل بنادم وحداخُر بلا ما تكون كلمت` السرّ معروفة.",
        "createacct-realname": "الأسم الحقّاني (ماشي محتّم)",
        "createacct-reason": "سبّة",
        "createacct-reason-ph": "علاش راك تخلق حساب وحداخُر",
+       "createacct-reason-help": "الميساج الي يكون باين ف` الجرنان تاع صنيع الحساب",
        "createacct-submit": "اصنع حسابك",
-       "createacct-another-submit": "اخلق حساب وحداخُر",
+       "createacct-another-submit": "اصنع حساب",
+       "createacct-continue-submit": "كمّل صنيع الحساب",
+       "createacct-another-continue-submit": "كمّل صنيع الحساب",
        "createacct-benefit-heading": "{{SITENAME}} مخلوق من عند شي ناس غير كيفك.",
        "createacct-benefit-body1": "{{PLURAL:$1|تحرير|تحريرات}}",
        "createacct-benefit-body2": "$1 {{PLURAL:$1|صفحة|صفحات}}",
        "createacct-benefit-body3": "{{PLURAL:$1|مساهم|مساهمين}} توالا",
        "badretype": "كلمات` السرّ الّي دخّلتها ماشي متشابهة.",
+       "usernameinprogress": "الصنيع تاع الحساب تاع هاد المستعملي راه بادي. اصبر من فضلك.",
        "userexists": "السميّة تاع المستعملي المدخّل راه كاين مقبل.\nالله يحفضك اختار وحداخُر.",
        "loginerror": "غلطة ف تسجال الدخلة",
        "createacct-error": "غلطة فل خليق تاع الحساب",
        "nocookiesnew": "الحساب تاع المستعملي راه مخلوق بصّح ما راكش مسجّل داخل.\n{{SITENAME}} يستعمل كوكيزات ف تسجال` الدخول تاع المستعمليين.\nراه عندك الكوكيزات راه محبّسين.\nالله يحفضك، اشعلهم و عاود سيّي تسجّل الدخول ب` السميّة تاع المستعملي و كلمت` السرّ تاعك الحدُد.",
        "nocookieslogin": "{{SITENAME}} يستعمل الكوكيزات ف تسجال الدخول تاع المستعمليين.\nالكوكيزات عندك راهم محبّسين.\nالله يحفضك، مشّيهم و عاود سيّي.",
        "nocookiesfornew": "الحساب تاع المستعملي ما تنخلقش خاطر ما نجمناش نوتّقو المصدر تاعهُ.\nأكّد بلّي الكوكيزات راهم ممشّيين عندك، عاود عمّر الپاجة و سيّي مرّة جديدة.",
+       "createacct-loginerror": "الحساب راه ندار وحدو، لكن ما دخلتش أوتوماتيك، من فضلك روح [[Special:UserLogin|دخلة بيديك]]",
        "noname": "ما مدّيتش سميّت` مستعملي مقبولة.",
        "loginsuccesstitle": "التوصال راه نجَح.",
        "loginsuccess": "<strong>راك مسجّل داخل ف {{SITENAME}} ب`السميّة \"$1\".</strong>",
-       "nosuchuser": "Ù\85ا Ù\83اÙ\8aÙ\86 Ø­ØªØ§ Ù\85ستعÙ\85Ù\84Ù\8a Ø¨`اÙ\84سÙ\85Ù\8aÙ\91Ø© \"$1\".\nاÙ\84سÙ\85Ù\8aÙ\91Ø© ØªØ§Ø¹ Ø§Ù\84Ù\85ستعÙ\85Ù\84Ù\8a Ø±Ø§Ù\87 حسّاسة ف تكسار الحروف (majuscule - minuscule).\nعاود أكّد على كيفاش كتبت الكلمات ولا [[Special:CreateAccount|اخلق حساب جديد]].",
+       "nosuchuser": "Ù\85ا Ù\83اÙ\86Ø´ Ù\85ستعÙ\85Ù\84 Ø¨`اÙ\84سÙ\85Ù\8aÙ\91Ø© \"$1\".\nاÙ\84سÙ\85Ù\8aÙ\91Ø© ØªØ§Ø¹ Ø§Ù\84Ù\85ستعÙ\85Ù\84Ù\8aÙ\86 Ø±Ø§Ù\87ا حسّاسة ف تكسار الحروف (majuscule - minuscule).\nعاود أكّد على كيفاش كتبت الكلمات ولا [[Special:CreateAccount|اخلق حساب جديد]].",
        "nosuchusershort": "ما كاين حتا مستعملي ب` السميّة \"$1\".\nأكّد على الكتيبة تاعك.",
        "nouserspecified": "لازم لك تمدّ السميّة تاع المستعملي.",
        "login-userblocked": "هاد السميّة تاع المستعملي راهي مطرودة. تسجال` الدخول ماشي مسموح.",
        "wrongpasswordempty": "كلمت` السرّ كانت خاوية.\nالله يعيّشك عاود سيّي.",
        "passwordtooshort": "كلمت` السرّ لازم يكون فيها على القل {{PLURAL:$1|1 حرف واحد|$1 حروف}}.",
        "passwordtoolong": "كلمت` السرّ ما تنجمش تكون طويلة على {{PLURAL:$1|1 حرف واحد|$1 حرف}}.",
+       "passwordtoopopular": "كلمات المرور الشايعة ما يمكنش استخدامها. من فضلك  خيّر كلمة سر سبيسيال.",
        "password-name-match": "كلمت` السرّ تاعك لازم لها تكون مبدّلة على سميّت` المستعملي تاعك.",
        "password-login-forbidden": "الستعملية تاع هاد السميّة تاع المستعملي و كلمت` السرّ راهم ممنوعين.",
        "mailmypassword": "استرجع كلمت` السرّ",
        "noemail": "ما كاين حتا إيمال مسجّل لل مستعملي \"$1\".",
        "noemailcreate": "لازم لك تحُطّ آدريسة تاع إيمال تكون مقبولة.",
        "passwordsent": "كلمت` سرّ جديدة راهي نبعتت لل آدريسة تاع إيمال المسجّلة ل \"$1\".\nالله يخلّيك عاود اتسجّل داخل مور ما راهي تلحق لك.",
-       "blocked-mailpassword": "الآدريسة إيپي تاعك راهي مبلوكية ف تبدال الپاجات، و باش نحضيو من كاش تخراب، ما تنجمش تاني تطلب باش تسترجع كلمت` السرّ.",
+       "blocked-mailpassword": "الآدريسة إيپي تاعك راهي مبلوكية ف تبدال الپاجات، و باش نحضيو من كاش تخريب، ما تنجمش تطلب باش ترجّع كلمت السرّ من هاذ الإيبي.",
        "eauthentsent": "راه نبعَت إيمال تاع تأكاد لل آدريسة الّي تمدّت.\nقبل ماينبعَت حتا إيمال وحداخُر ل هاد لادريسة، لازم تتبّع بعدا الوصافات الّي وصلو لك، باش تأكّد بلّي الحساب هادا راه ديالك.",
        "throttled-mailpassword": "راه نبعّت لك إيمال تاع السترجاع تاع كلمت& السرّ منقبَل، هادي {{PLURAL:$1|ساعة|$1 سوايع}}.\nباش نتحضّاو منل غشّ، ما ينجم ينبعت غير إيمال واحد تاع السترجاع ف كلّ مدّة تاع {{PLURAL:$1|ساعة|$1 سوايع}}.",
        "mailerror": "صرات غلطة فل بعت تاع الإيمال: $1",
-       "acct_creation_throttle_hit": "شي زايرين ل هاد الويكي كانو مستعملين الادريسة إيپي تاعك و خلقو {{PLURAL:$1|حساب|$1 حسابات}} ف` النهار هادا الّي فات، و هاد هوّا الحدّ القاصي المقبول ف هاد المدّة تاع الزمان.\nعلى هاد الشي، الزايرين من هاد الإيبي ما ينجمو يخلقو حتا حساب ف هاد الوقيتة.",
+       "acct_creation_throttle_hit": "شي زايرين تاع هاد الويكي كانو مستعملين الإيپي تاعك و خلقو {{PLURAL:$1|حساب|$1 حسابات}} ف` النهارات $2 هادو الّي فاتو، و هاد هوّا الحدّ القاصي المقبول ف هاد المدّة.\nعلى هاد الشي، الزايرين من هاد الإيبي ما ينجموش يصّنعو حساب وحداخر.",
        "emailauthenticated": "الادريسة تاع الإيمال تاعك راهي تكونفيرمات ف $2 على الـ $3.",
        "emailnotauthenticated": "الادريسة تاع الإيمال تاعك مازال ما راهيش مكونفيرمية.\nحتا إيمال ما غادي ينبعَت لك على الشغّالات هادي.",
        "noemailprefs": "خصّص كاش آدريسة تاع إيمال فل إختيارات ديالك باش تمشي لك هاد التشغيلة.",
        "createaccount-title": "خليق حساب ف {{SITENAME}}",
        "createaccount-text": "شي واحد راه خلَق حساب ف {{SITENAME}} ($4) ب`السميّة \"$2\"، و كلمت` السرّ \"$3\".\nلازم لك ضركا تتسجّل داخل ف` السيت و تبدّل كلمت` السرّ ديالك.\n\nيلا هاد الحساب راه نخلَق ب غلطة، غير فوت هاد الميساج.",
        "login-throttled": "راك درت مسيّات كتَر من المقبول باش تدخُل ف`السيت.\nالله يخلّيك، اصبَر $1 قبَل ما تسيّي عاود.",
-       "login-abort-generic": "الدخول تاعك ما نجَحش",
+       "login-abort-generic": "المحاولة ديال الدخول نتاعك ما نجَحتش",
        "login-migrated-generic": "الحساب تاعك راه تنقّل و سميّت` المستعملي ما بقاش كاين ف هاد الويكي.",
        "loginlanguagelabel": "اللوغه: $1",
        "suspicious-userlogout": "المطلب تاعك باش تسجّل خارج ما تسجّلش خاطر راه يبان مرسول من عند بحّار معطّل ولا  خزّان تاع وسّاط (proxy cache).",
        "createacct-another-realname-tip": "السميّة الحقّانيّة ماشي ملزومة.\nيلا تستعملها غادي تصلاح باش تنسّب ليك الخدمة الّي غادي تديرها.",
        "pt-login": "ادخل",
        "pt-login-button": "دخول",
+       "pt-login-continue-button": "واصل الدخول",
        "pt-createaccount": "اصنع حساب",
        "pt-userlogout": "الخروج",
        "php-mail-error-unknown": "غلطة مجهولة صرات فل وضيفة mail() تاع PHP.",
        "newpassword": "كلمت` السرّ الجديدة:",
        "retypenew": "عتود اكتب كلمت` السرّ:",
        "resetpass_submit": "اختار كلمت` السرّ و سجّل الدخول",
-       "changepassword-success": "كلمت` السرّ تاعك راهي تبدّلت!",
+       "changepassword-success": "كلمت السرّ نتاعك راها تبدّلت!",
        "changepassword-throttled": "راك درت مسيّات كتَر من المقبول باش تدخُل ف`السيت.\nالله يخلّيك، اصبَر $1 قبَل ما تسيّي عاود.",
+       "botpasswords": "كلمات سر البوت",
+       "botpasswords-summary": "<em>كلمات سر البوت</em> تسمح بالوصول لحساب مستخدم من خلال API بلا ما  تستخدام اعتمادات تسجيل الدخول الرئيسية للحساب. صلاحيات المستخدم المتوفرة عند تسجيل الدخول باستخدام كلمة سر بوت بالاك تكون مقيدة.\nإذا ما عرفتش علاش باغي تدير هذا، لازملك ما تديرهاش. حد أبدا ما يلزملو يسألك باش تولّد واحدة من هذه و تعطيهالو.",
+       "botpasswords-disabled": "كلمات السر الخاصة بالبوت معطلة.",
+       "botpasswords-no-central-id": "باش تستخدام كلمة السر الخاصة بالبوت، لازم أن تسجيل الدخول من خلال حساب موحد.",
+       "botpasswords-existing": "كلمات سر البوت اللي كاينة",
+       "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-created-title": "كلمت` السرّ تاع البوت مصنوعة",
+       "botpasswords-updated-title": "كلمت` السرّ تاع البوت راهي ندارت لها الميزاجور",
+       "botpasswords-deleted-title": "كلمت` السرّ تاع البوت تفاصات",
        "resetpass_forbidden": "كلمت` السرّ ما تنجمش تتبدّل",
+       "resetpass_forbidden-reason": "كلمت` السرّ ما تنجمش تتبدّل",
        "resetpass-no-info": "لازم لك تكون مسجّل الدخول باش تلحق ل هاد الپاجة.",
        "resetpass-submit-loggedin": "بدّل كلمت` السرّ",
        "resetpass-submit-cancel": "بطّل",
        "passwordreset-emailtext-ip": "شي واحد (يكون بالاك نتا، لادريسة إيپي $1) راه طلَب المصاوبة تاع كلمت` السرّ تاعك ف {{SITENAME}} ($4). {{PLURAL:$3|هاد الحساب |هاد الحسابات}} تاع المستعملي {{PLURAL:$3|راه مربوط|راهم مربوطين}} ب لادريسة تاع الإيمال:\n\n$2\n\n{{PLURAL:$3|هاد كلمت` السرّ المأقّتة|هادي كلمات` السرّ المأقّتة}} غادي يكمل صلوحها منّا على {{PLURAL:$5|نهار واحد|$5 إيّام}}.\nمليح لوكان تدخُل ل`السيت من ضركا و تبدّل كلمت` السرّ.\nيلا كاش ما وحداخُر دار هاد المطلب ولا راك تفكّرت كلمت` السرّ تاعك و ما بقيتش باغي تبدّلها، تنجم برك تنسا هاد الميساج و تستعمل كلمت` السرّ تاعك تاع مضاري.",
        "passwordreset-emailtext-user": "المستعملي $1 ف {{SITENAME}} راه طلب تبدال ف كلمت` السرّ تاعك ف {{SITENAME}}\n($4). {{PLURAL:$3|الحساب|الحسايات}} تاع المستعملي {{PLURAL:$3|راه مربوط|راهم مربوطين}} ب لادريسة تاع ليمال هادي:\n\n$2\n\n{{PLURAL:$3|هاد كلمت` السرّ المأقّتة|هادي كلمات` السرّ المأقّتة}} غادي يكمل صلوحها منّا على {{PLURAL:$5|نهار واحد|$5 إيّام}}.\nمادابيك تسجّل داخل ضركا و تختار كلمت` سرّ جديدة. يلا كان وحداخُر دار هاد المطلب، ولا راك ضركا تفكّرت كلمت` السرّ تاعك القديمة و ما بقيتش باغي تبدّلها، تنجم برك تتنسّا هاد الميساج و تدخُل ب كلمت` السرّ تاعك تاع مضاري.",
        "passwordreset-emailelement": "سميّت` المستعملي: \n$1\n\nكلمت` السرّ المأقّتة: \n$2",
-       "passwordreset-emailsentemail": "راه نبعَت إيمال تاع تبدال كلمت` السرّ.",
+       "passwordreset-emailsentemail": "يلا كان ليمال هادا موصّل معا الحساب تاعك، غادي ينبعَت لك إيمال تاع تبدال كلمت` السرّ.",
+       "passwordreset-invalidemail": "كاين غلطة فل ايمال",
        "changeemail": "بدّل لادريسة تاع الإيمال",
        "changeemail-header": "كمّل الكتبة ف` الجدوال هادا باش تبدّل لادريسة تاع الإيمال تاعك. يلزم لك تدخّل كلمت` السرّ تاعك باش تأكّد هاد التبدال.",
        "changeemail-no-info": "لازم لك تكون مسجّل داخل باش توصَل ل هاد الپاجة بسّراح.",
        "sig_tip": "سنياتورتك بالساعة و التاريخ",
        "hr_tip": "خط أفقي (ما تستعملوش بزاف)",
        "summary": "ملخص:",
-       "subject": "موضوع / علوان:",
+       "subject": "موضوع:",
        "minoredit": "هذي تبديلة صغيرة",
        "watchthis": "تبع الباجة",
        "savearticle": "سجل الباجة",
+       "savechanges": "سجّل التبدال",
+       "publishpage": "پوبليي الپاجة",
+       "publishchanges": "پوبليي واش تبدّل",
        "preview": "شوفه-قبلي",
        "showpreview": "بين معاينة",
        "showdiff": "عرض التبديلات",
        "missingsummary": "<strong>تفكار:</strong> راك ما مدّيتش تلخيص على التبدال تاعك.\nيلا تكليكي على \"{{int:savearticle}}\" مجّديد، التبدال تاعك غادي يتسجّل بلاش.",
        "selfredirect": "<strong>ردّ البال:</strong> راك توجّه هاد الپاجة على روحها.\nبالاك راك غلطت فل ختيّار تاع التقيان تاع الپاجة، ولا تاني ما راكش فل پاجة الّي راك حاب تإيديتيها.\nيلا تكليكي على \"{{int:savearticle}}\" مجّديد، هاد التوجاه غادي ينخلق كيما هاك.",
        "missingcommenttext": "الله يحفضك حُطّ شي تعليق هنا لتحت.",
-       "missingcommentheader": "<strong>تفكار:</strong> راك ما حطّيتش علوان تاع الموضوع تاع التعليق تاعك.\nيلا تكليكي على \"{{int:savearticle}}\" مجّديد، التبدال تاعك غادي يتسجّل بلاش.",
+       "missingcommentheader": "<strong>تفكار:</strong> راك ما حطّيتش علوان فل موضوع تاع التعليق تاعك.\nيلا تكليكي على \"{{int:savearticle}}\" مل جديد، التبدال تاعك غادي يتسجّل بلاش.",
        "summary-preview": "شوفة خفيفة على التلخيص:",
        "subject-preview": "شوفة خفيفة على العلوان / الموضوع:",
        "previewerrortext": "صرات غلطة فل محاولة باش تشوف خفيف ف` التبدالات تاعك.",
        "continue-editing": "روح لصندوق التحرير",
        "previewconflict": "هاذ العرض يبين النص الموجود في صندوق التحرير الفوقاني اللي يبانلك إذا اختاريت النشر.",
        "session_fail_preview": "'''مانقدروش نسجلو التبديلات نتاوعك علا خاطر كاين معلومات تودرو في ما يخص القعدة .'''\nمن فضلت حاول مرة اخرى.\nإذا ما نجحتش مرة جديدة, حاول باش [[Special:UserLogout|تخرج]], و تدخل مرة اخرى",
-       "session_fail_preview_html": "'''مانقدروش نسجلو التبديلات نتاوعك علا خاطر كاين معلومات تودرو في ما يخص القعدة .'''\n\n''على خاطر {{SITENAME}} فعل HTML brut, الإستضهار تخبا باش نتوخاو الهجمات بالجافاسكريبت.''\n\n'''إذا كانت محاولة التبديل صادقة, حاول مرة اخرى.'''\nالا ما نجحتش مرة اخرى, [[Special:UserLogout|اخرج]], و ادخل مرة اخرى",
+       "session_fail_preview_html": "'''مانقدروش نسجلو التبديلات نتاوعك علا خاطر كاين معلومات تودرو في ما يخص القعدة.'''\n\n<em>على خاطر {{SITENAME}} فعل HTML brut, الإستضهار تخبا باش نتوخاو الهجمات بالجافاسكريبت.</em>\n\n<strong>إذا كانت محاولة التبديل صادقة, حاول مرة اخرى.</strong>\nالا ما نجحتش مرة اخرى, [[Special:UserLogout|اخرج]], و ادخل مرة اخرى",
        "editing": "تحرير $1",
        "creating": "خليق $1",
        "editingsection": "كتيبه $1 (قسم)",
+       "editconflict": "ڤيرة تاع التبدال:$1",
+       "yourtext": "التاكست تاعك",
+       "yourdiff": "ديفيرونس",
        "templatesused": "{{PLURAL:$1||القالب المستعمل|القوالب المستعمله}} في هذه الباجه:",
        "template-protected": "(محميه)",
        "template-semiprotected": "(نص حماية )",
        "permissionserrorstext-withaction": "ما راكش اوتوريزى ل$2، لل{{PLURAL:$1||سبب هاذا|اسباب هاذي}}:",
        "recreate-moveddeleted-warn": "'''توليه: راك تعاود تصنع باحه اتمحات من قبل.'''\n\nلازم تتأكد بلى الباجه الا نصنعت ماهوش مشكل الا كملت الكتبه فبها.\nريجيستر المحو و النقل معروض هنا باش تراقب :",
        "moveddeleted-notice": "هاذ الباجه تمحات .\nريجيستر المحو والتنقال للباجه معروضين التحت كريفيرونس.",
+       "edit-conflict": "ڤيرة تاع التبدال:$1",
        "post-expand-template-inclusion-warning": "'''توليه:''' الباجة داخل فيها قوالب بزاف.\nشي قوالب ما غاديش تدخل.",
        "post-expand-template-inclusion-category": "الباجات داخل فيها بزاف القوالب",
        "post-expand-template-argument-warning": "'''توليه:''' هذه الباجه فيها عامل قالب واحد على الأقل عندو حجم تمدد كبير بزاف.\nهاذالعوامل اتمحات.",
        "nextrevision": "فرسيون جايه←",
        "currentrevisionlink": "المراجعه الحاليه",
        "cur": "الحالي",
+       "next": "التابع",
        "last": "السابق",
+       "page_first": "اللوّل",
+       "page_last": "التالي",
        "histlegend": "تخيار الفرق: علم على صناديق النسخ للمقارنه و ادرك قارن بين النسخ المختارة والا القفلة التحت .<br />\nمفتاح: (الحالي) = الفرق مع النسخة تع دروك\n(الفايته) = الفرق مع النسخة اللي فاتت، ط = تبديل خفيف",
-       "history-fieldset-title": "نافيقي في التاريخ",
-       "history-show-deleted": "المماسكيه برك",
+       "history-fieldset-title": "ناڢيڤي في التاريخ",
+       "history-show-deleted": "التبدالات المفاصية برك",
        "histfirst": "اول باجه",
        "histlast": "باجه تاليه",
+       "historysize": "({{PLURAL:$1|1 بايت|$1 bytesبايت",
+       "historyempty": "(خاوي)",
        "history-feed-item-nocomment": "$1 إلى $2",
        "rev-delundel": "بين/خبي",
+       "rev-showdeleted": "ورّي",
+       "revdelete-show-file-submit": "إيه",
        "revdel-restore": "غير كيف راهي تبان",
        "revertmerge": "فرق",
        "history-title": " «$1»: تاريخ المراجعات",
        "search-showingresults": "{{PLURAL:$4|النتيج <strong>$1</strong> تاع <strong>$3</strong>|النتايج <strong>$1 - $2</strong> من أصل <strong>$3</strong>}}",
        "search-nonefound": "ما كانش نتائج تطابق المسقسية.",
        "mypreferences": "إختيارات",
+       "prefs-edits": "ڤداه نتبديلة",
+       "prefs-editing": "التبدال",
        "youremail": "البريه الالكترونيه:",
        "yourrealname": "الاسم الحقاني:",
        "prefs-help-email": "لادريس نتع البريه الإلكترونيه بالخاطر، ولكن هي لازمه في حال نسيت كلمت السر نتاعك.",
        "prefs-help-email-others": "تقدر تاني تخلي لوخرين يتاصلو بيك في باجت نقاشك ولا في وصيله في باجت مستخدم نتاعك, اذا ارسلك واحد ما يبانش لادريس نتاعك , حتى اذ رديت عليه باش يبان لادريس نتاعك.",
+       "right-edit": "تبدال الصفحات",
        "right-writeapi": "استعمل API للكتابه نتاع الويكي",
        "newuserlogpage": "ريجيستر صنعة حسابات المستخدمين",
        "action-edit": "عدل هاذ الباجه",
        "recentchanges-label-plusminus": "الحجَم تاع الصفحة راه تبدّل ب هاد العدّة تاع البايتات",
        "recentchanges-legend-heading": "<strong>تفسار:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (شوف تاني [[Special:NewPages|ليستة تاع صفحات جديدة]])",
+       "recentchanges-submit": "ورّي",
+       "rcfilters-filter-editsbyself-label": "التبدال نتاعك",
+       "rcfilters-filter-minor-label": "تبديلة خفيفة",
+       "rcfilters-filter-major-label": "ماشي تبديلة خفيفة",
        "rcnotefrom": "التحت التبديلات من <strong>$2</strong> (إلى <strong>$1</strong> معروضة).",
        "rclistfrom": "بين التبديلات البديه من $3 $2",
        "rcshowhideminor": "$1 التبديلات الصغير",
        "rcshowhidebots-show": "ورّي",
        "rcshowhidebots-hide": "خبّي",
        "rcshowhideliu": "$1 المستخدمين المسجلين",
+       "rcshowhideliu-show": "ورّي",
        "rcshowhideliu-hide": "خبّي",
        "rcshowhideanons": "$1 المستخدمين المجهولين",
        "rcshowhideanons-show": "ورّي",
        "rcshowhidemine": "$1 تبديلات نتاعي",
        "rcshowhidemine-show": "ورّي",
        "rcshowhidemine-hide": "خبّي",
-       "rclinks": "بين آخر $1 تبديل في آخر $2 يوم<br />$3",
+       "rcshowhidecategorization-show": "ورّي",
+       "rclinks": "بين آخر $1 تبديل في آخر $2 يوم",
        "diff": "إختلاف",
        "hist": "تاريخ",
        "hide": "خبي",
        "license": "ترخيص:",
        "license-header": "ترخيص:",
        "imgfile": "فيشي",
+       "listfiles-latestversion-yes": "إيه",
+       "listfiles-latestversion-no": "لالا",
        "file-anchor-link": "ملف",
        "filehist": "تاريخ الفيشيي",
        "filehist-help": "ادرك على وقت و تاريخ/باش تشوف الملف كما بان  في هاذ الوقت.",
        "upload-disallowed-here": "ما تنحمش تعدّل هاد التصويرة",
        "randompage": "صفحة ع الزهر",
        "statistics": "إحصائيّات",
+       "brokenredirects-edit": "تبديل",
+       "withoutinterwiki-submit": "ورّي",
        "nbytes": "{{PLURAL:$1|بايت 1|$1 بايت}}",
        "nmembers": "$1 اعضاء{{PLURAL:$1||s}}",
        "prefixindex": "كامل الباجات الباديه ب",
+       "prefixindex-submit": "ورّي",
+       "usereditcount": "{{PLURAL:$1|تبديلة|تبديلات}}",
        "usercreated": "{{GENDER:$3|صنعه|صنعته}} في $1 الساعة $2",
        "newpages": "باجه جديده",
+       "newpages-submit": "ورّي",
        "move": "عاود التسمية",
        "pager-newer-n": "{{PLURAL:$1|جديد بزاف 1|جديد بزاف $1}}",
        "pager-older-n": "{{PLURAL:$1|قديم بزاف 1|قديم بزاف $1}}",
+       "apisandbox-unfullscreen": "وري الصفحة",
        "booksources": "مصادر كتاب",
        "booksources-search-legend": "حوس ما بين مصادر الكتب",
        "booksources-search": "فتّش",
        "log": "ريجيسترات العمليات",
+       "logeventslist-submit": "ورّي",
        "allpages": "قاع الباجات",
        "allarticles": "قاع الباجات",
        "allpagessubmit": "روح",
        "categories": "تصنيفات",
+       "categories-submit": "ورّي",
        "linksearch-line": "$1 موصولة من $2",
+       "listusers-submit": "ورّي",
        "listgrouprights-members": "(ليسته الأعضاء)",
        "emailuser": "ابعث بريه لهاذ المستخدم",
        "watchlist": "ليستة تاع المتابعة",
        "unwatch": "ما تزيدش تعس",
        "watchlist-details": "{{PLURAL:$1||باجه وحده|باجتين|$1 باجات|$1 باجه}} في ليستت مراقبتك، من غير اعتبار باجات النقاش هي باجات منفصله.",
        "wlshowlast": "بين آخر $1 سوايع $2 يامات",
+       "watchlist-submit": "ورّي",
+       "wlshowhideminor": "تبديلة خفيفة",
+       "wlshowhidepatr": "$1 التبديلات المعسوسه",
        "watchlist-options": "ابسيون ليستت المراقبه",
+       "historyaction-submit": "ورّي",
        "actioncomplete": "العمليه اندارت",
        "actionfailed": "العمليه فشلت",
        "dellogpage": "ريجيستر محو الباجات",
        "rollbacklinkcount": "رجّع {{PLURAL:$1|تعديل واحد|$1 تعديلات}}",
        "protectlogpage": "ريجيستر الحمايه",
        "protectedarticle": "راه حمى \"[[$1]]\"",
+       "restriction-edit": "بدل",
        "undeletelink": "شوف/رجع",
        "undeleteviewlink": "شوف",
+       "undelete-show-file-submit": "إيه",
        "namespace": "بلاصه تع أسموات",
        "invert": "اعكس التخيار",
        "tooltip-invert": "علّم هاد المقّبسة باش تخبّي التبدالات تاع الصفحات الّي فيها وسَع` التسمية (و وسَع التسمية المربوط يلا كاين)",
        "tooltip-p-logo": "زور الباجة اللولة",
        "tooltip-n-mainpage": "زور الپاجة اللولانيّة",
        "tooltip-n-mainpage-description": "زور صفحة الاستقبال",
-       "tooltip-n-portal": "بخوصوص المشروع، واش تقدر تدير، وين تلقى المعلومة اللي حاجتك بيها",
+       "tooltip-n-portal": "ب خوصوص المشروع، واش تقدر تدير، وين تلقى المعلومة لي حاجتك بيها",
        "tooltip-n-currentevents": "شوف اش قاعد يصير",
        "tooltip-n-recentchanges": "ليستة تاع التبدالات الاخّرين ف الويكي",
        "tooltip-n-randompage": "شرجي صفحة ع الزهر",
        "tooltip-undo": "\"نحّي\" فاصي هاد الـمعاودة و حلّ تاقة تاع تبدال بشوفه قبلانيّه. تخلّي باش ترجع لل معاوده التاليه و تزيد الـسبّة علاش فل قابسه تاع الـحويصله.",
        "tooltip-summary": "دخل تلخيص صغير",
        "simpleantispam-label": "مسيّة ضدّ السبام.\nما تعمّرش هادا!",
+       "pageinfo-lastuser": "لخر لي كتب",
+       "pageinfo-lasttime": "تاريخ آخر تبديلة",
        "pageinfo-toolboxlink": "معلومات على هاد الصفحة",
+       "pageinfo-contentpage-yes": "إيه",
+       "pageinfo-protect-cascading-yes": "إيه",
        "previousdiff": "→ التعديل الي قبل",
        "nextdiff": "التبديل الجاي ←",
        "file-info-size": "$1 × $2 بكسل حجم الملف: $3، نوع MIME: $4",
        "show-big-image-preview": "حجم هذه المعاينه: $1.",
        "show-big-image-other": "{{PLURAL:$2||التدقاقة|التدقاقات}}: $1.",
        "show-big-image-size": "$1 × $2 بكسل",
+       "yesterday-at": "لبرح علا $1",
        "bad_image_list": "الفورمة راهي كيما واش يتبع:\nما كاين غير السطور الّي باديين بل *، الّي يكونو معدودين\nالـوصيل الـلوّل تاع سطر لازم كون تاع تصويرة ضايعة.\nكامل الوصيلات لخرين الّي فل سطر، يكونو معدودين كلّي تتنيّات، بل متال باجات وين الـتصويرة تنجم تبان.",
        "metadata": "بايان ميتا",
        "metadata-help": "هذا الملف راه فيه خبيرات زايدين، بالاك تكون انزادت من عند صواره نيميريك ولا سكانر مين صنع الملف.\nالأصلي، شي تفاصيل بالاك ما تعبرش على الملف المعدل.",
        "exif-xresolution": "التدقاق الأوفوقي",
        "exif-yresolution": "التدقاق العامودي",
        "exif-datetime": "تاريخ و وقت تاع تبدال الفيشي",
+       "exif-imagedescription": "عنوان التصويرة",
        "exif-make": "الصانع تاع الجهاز",
        "exif-model": "الطبّع تاع الجهاز",
        "exif-software": "البريمجات الّي مستعملة",
        "exif-datetimeoriginal": "التاريخ و الوقت تاع تولاد المعلومات",
        "exif-datetimedigitized": "التاريخ تاع التنمريل (numérisation)",
        "exif-orientation-1": "عادي",
+       "exif-contrast-0": "عادي",
+       "exif-saturation-0": "عادي",
+       "exif-sharpness-0": "عادي",
+       "exif-urgency-normal": "عادي ($1)",
        "namespacesall": "لكل",
        "monthsall": "لكل",
        "watchlisttools-view": "اعرض التبديلات المرتابطه",
        "watchlisttools-raw": "موديفي ليستت التبيعه الخام",
        "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|تقرعيج]])",
        "duplicate-defaultsort": "'''توليه:''' مفتاح التستيف الافتراضي \"$2\" ديباسا مفتاح التستيف الافتراضي التالي\"$1\".",
+       "version-no-ext-name": "[بلا اسم]",
        "specialpages": "الپاجات الخاصّين",
        "external_image_whitelist": " #<pre>خلى هاذ السطر كيما راه\n#حط منثورات التعبيرات المنتظمة (برك الجزء الي يروح بين //) بالتحت\n#هاذ يكون مطابقتها مع مسارات التصاوير البرانيه (الموصولة بصفه مباشره)\n#هاذي الي تشبهغادي تنعرض  كتصاور، خلاف هذا برك وصيلة للتصويرة غادي تنعرض\n#السطور اللي تبدأا ب# تعتبر تعليقات\n#هذا لا يتأثر بحالة الحروف\n\n#حط كامل منثورات التعبيرات المنتظمة فوق هذا السطر. خلي هاذ السطر سواسوا كيما هو</pre>",
        "tag-filter": "صفاية[[Special:Tags|الوشام]]:",
        "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1||وسم|وسمان|وسوم}}]]: $2)",
+       "tags-active-yes": "إيه",
+       "tags-active-no": "لالا",
+       "tags-edit": "بدّل",
+       "htmlform-no": "لالا",
+       "htmlform-yes": "إيه",
        "logentry-delete-delete": "$1 {{GENDER:$2| راه محا|راهي محات}}الصفحة $3",
        "logentry-move-move": "{{GENDER:$2|نقّل|نقّلت}} $1 الصفحة $3 لـ $4",
        "logentry-newusers-create": "راه تفتح حساب {{GENDER:$2|المستخدم|المستخدمه}} $1",
        "logentry-upload-upload": " {{GENDER:$2|نزّل|نزّلت}} $1 $3",
-       "searchsuggest-search": "فتّش في"
+       "feedback-error2": "غلطة: تبديلتك ما صلحتش",
+       "searchsuggest-search": "فتّش في {{SITENAME}}",
+       "mediastatistics-header-bitmap": "تصويرة Bitmap"
 }
index b490f27..696a491 100644 (file)
        "externaldberror": "kayn imma ċi ĥata' f-doĥol qaĝidaṫ l-bayanaṫ wlla rah ma msmoḫ-likċ baċ ṫḫddṫ l-ḫisab l-ĥariji taĝk.",
        "login": "Dĥel",
        "nav-login-createaccount": "Ṫkonékta / Ĥṫareĝ ċi konṫ",
-       "userlogin": "Ṫkonnékta / Ṣayeb ċi ḫsab",
-       "userloginnocreate": "Ṫkonékta",
        "logout": "Ṫdékonékta",
        "userlogout": "Ĥrej",
        "notloggedin": "nta mamkoniktich",
-       "nologin": "maandkch  cont ? $1",
-       "nologinlink": "Ḫell ċi ḫsab",
        "createaccount": "Ḫell ċi ḫsab",
-       "gotaccount": "aandk deja cont ? $1",
-       "gotaccountlink": "Ṫkonékta",
-       "userlogin-resetlink": "yak-ma nsiṫi ṫ-ṫafaṣil dial d-doĥol taĝk?",
        "createaccountmail": "b l'email",
-       "createaccountreason": "sabab:",
        "badretype": "klmaṫ ṣ-ṣeṛṛ lli dĥĥalṫi maċi b-ḫal b-ḫal.",
        "userexists": "smiṫ l-mosṫĥdim lli ḍĥĥolṫi ĥddam bih ċi waḫd.\nċof lik ċi ṣmiya aĥra.",
        "loginerror": "khataa f dokhol",
        "saveprefs": "sjl",
        "restoreprefs": "rjaa kaml liadadat liftiradiya",
        "prefs-editing": "thrir",
-       "rows": "sofof:",
-       "columns": "aaamida:",
        "searchresultshead": "Qelleb",
        "stub-threshold": "l-ḫadd l-aqṣa ṫaĝ <a href=\"#\" class=\"stub\">wṣlaṫ l-bidraṫ</a> (ḅayṫaṫ):",
        "stub-threshold-disabled": "makhdamch",
        "right-protect": "taghyir mostawayat lhimaya wtadil sfahi li mhmiyin",
        "right-editprotected": "ṣfaḫi mḫmyya mn ṫĝdil (bla ḫimaya mṫslsla)",
        "right-editinterface": "ĝddel wajihaṫ l-mosṫĥdim",
-       "right-editusercssjs": "ĝddel milffaṫ CSS o-JavaScript ṫaĝ mosṫĥdimin aĥrin",
        "right-editusercss": "ĝddel milffaṫ CSS ṫaĝ mosṫĥdimin aĥrin",
        "right-edituserjs": "ĝddel milffaṫ JavaScript ṫaĝ mosṫĥdimin aĥrin",
        "right-rollback": "srtjaa taadilat akhr mostkhdim  adl sfha mayana",
        "rcshowhideanons": "$1 mosṫeĥdimin mĥebbyin",
        "rcshowhidepatr": "$1  taadilat lmorajaa",
        "rcshowhidemine": "$1 ṫ-ṫeĝdilaṫ dyawli",
-       "rclinks": "Werri l-$1 dyal ṫ-ṫeġyiraṫ l-leĥĥrin li ṫdaro fe had l-$2 l-iyam l-leĥĥrin<br />$3.",
+       "rclinks": "Werri l-$1 dyal ṫ-ṫeġyiraṫ l-leĥĥrin li ṫdaro fe had l-$2 l-iyam l-leĥĥrin",
        "diff": "ferq",
        "hist": "Ṫariĥ",
        "hide": "Ĥebbi",
        "undeleteviewlink": "ċof",
        "undeleteinvert": "Qleb dakċi li ĝzelṫi",
        "undeletecomment": "sabab:",
-       "undeletedrevisions": "{{PLURAL:$1|vérsyon weḫda rejĝaṫ ki kaneṫ|$1 de lé-vérsyon rejĝo ki kano}}",
-       "undeletedrevisions-files": "ṫreddaṫ {{PLURAL:$1|1 l-ṃoṛajaĝa|$1 dl-ṃoṛajaĝaṫ}} o-{{PLURAL:$2|1 l-milef|$2 dl-milffaṫ}}",
-       "undeletedfiles": "ṫredd {{PLURAL:$1|1 l-milef|$1 dl-melffaṫ}}",
        "undelete-search-box": "qlleb ĝla ċi ṣ-ṣfaḫi mḫdofa",
        "undelete-search-submit": "Qelleb",
        "undelete-cleanup-error": "ĥata' f-ḫdf milef arċiv ma mĥddem-ċ \"$1\".",
        "htmlform-selectorother-other": "okhra",
        "revdelete-restricted": "tḅḅq ḍ-ḍawaḅit ll-idariyyin",
        "revdelete-unrestricted": "ḫyyd ḍ-ḍawaḅit ll-idariyyin",
-       "rightsnone": "(walo)",
-       "revdelete-summary": "molkhass taadil"
+       "rightsnone": "(walo)"
 }
index 70a1442..3085f60 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": "আপোনাৰ প্ৰৱেশ তথ্য পাহৰিছে?",
        "userlogin-resetpassword-link": "আপোনাৰ গুপ্তশব্দ পাহৰিছে?",
        "userlogin-helplink2": "প্ৰৱেশ সংক্ৰান্তীয় সাহায্য",
        "userlogin-loggedin": "আপুনি ইতিমধ্যে {{GENDER:$1|$1}} হিচাপে প্ৰৱেশ কৰিছে। তলৰ আন সদস্যৰূপে প্ৰৱেশ কৰিবলৈ তলৰ প্ৰপত্ৰ ব্যৱহাৰ কৰক।",
        "createacct-another-email-ph": "ইমেইল ঠিকনা লিখক",
        "createaccountmail": "এটা যাদৃচ্ছিক অস্থায়ী গুপ্তশব্দ ব্যৱহাৰ কৰক আৰু ইয়াক তলত দিয়া ইমেইল ঠিকনাটোলৈ পঠিয়াই দিয়ক",
        "createacct-realname": "প্ৰকৃত নাম (বৈকল্পিক)",
-       "createaccountreason": "কাৰণ:",
        "createacct-reason": "কাৰণ",
        "createacct-reason-ph": "আপুনি কিয় আন এটা একাউণ্ট সৃষ্টি কৰিছে",
        "createacct-submit": "আপোনাৰ একাউণ্ট সৃষ্টি কৰক",
        "passwordreset-emaildisabled": "এই ৱিকিত ই-মেইল বৈশিষ্টসমূহ নিষ্ক্ৰিয় কৰা হৈছে।",
        "passwordreset-username": "সদস্যনাম",
        "passwordreset-domain": "ডমেইন :",
-       "passwordreset-capture": "ফলাফল ই-মেইলখন চাবলৈ বিচাৰিছে ?",
-       "passwordreset-capture-help": "আপুনি এই ঘৰটো চিহ্নিত কৰিলে এই ই-মেইল (আৰু অস্থায়ী গুপ্তশব্দ) আপুনি দেখা পোৱাৰ লগতে সদস্যজনলৈও পঠিওৱা হ'ব।",
        "passwordreset-email": "ই-মেইল ঠিকনা:",
        "passwordreset-emailtitle": "{{SITENAME}}ত একাউণ্টৰ সবিশেষ তথ্য আছে ।",
        "passwordreset-emailtext-ip": "কোনোবাই (IP ঠিকনা $1 ৰ পৰা সম্ভৱতঃ আপুনিয়েই) {{SITENAME}} ($4) ৰ বাবে আপোনাৰ গুপ্তশব্দ ন-কৈ বহুৱাবলৈ অনুৰোধ জনাইছিল। ইমেইল ঠিকনাটোৰ লগত এই সদস্যৰ {{PLURAL:$3|একাউণ্ট|একাউণ্টবোৰ}} জড়িত হৈ আছে ।\n\n$2\n \n{{PLURAL:$3|এই অস্থায়ী গুপ্তশব্দ|এই অস্থায়ী গুপ্তশব্দবোৰ}} {{PLURAL:$5|এদিনত|$5 দিনত }} নাইকীয়া হ’ব । আপুনি লগ-ইন কৰি এটা নতুন গুপ্তশব্দ দিয়া উচিত । যদি আন কোনোবাই এই অনুৰোধ কৰিছিল, বা আপুনি নিজৰ পূৰ্বৰ গুপ্তশব্দ মনত পেলাইছে আৰু ইয়াক সলাব খোজা নাই, তেন্তে আপুনি এই বাৰ্তাক অগ্ৰাহ্য কৰি নিজৰ পূৰ্বৰ গুপ্তশব্দ ব্যৱহাৰ কৰি থাকিব পাৰে ।",
        "watchthis": "এই পৃষ্ঠাটো লক্ষ্য কৰক",
        "savearticle": "পৃষ্ঠা সাঁচক",
        "savechanges": "সাঁচি থওক",
+       "publishchanges": "সালসলনি প্ৰকাশ কৰক",
        "preview": "খচৰা",
        "showpreview": "খচৰা চাওক",
        "showdiff": "সালসলনিবোৰ দেখুৱাওক",
        "searchprofile-advanced-tooltip": "স্বনিৰ্ধাৰিত নামস্থানত অনুসন্ধান কৰক",
        "search-result-size": "$1 ({{PLURAL:$2|1 শব্দ|$2 শব্দসমূহ}})",
        "search-result-category-size": "{{PLURAL:$1|১ জন সদস্য|$1 জন সদস্য}} ({{PLURAL:$2|এটা উপশ্ৰেণী|$2 টা উপশ্ৰেণী}}, {{PLURAL:$3|এটা ফাইল|$3 টা ফাইল}})",
-       "search-redirect": "(পুনৰ্নিৰ্দেশনা $1)",
+       "search-redirect": "($1ৰ পৰা পুনঃনিৰ্দেশিত)",
        "search-section": "(অনুচ্ছেদ $1)",
        "search-file-match": "(ফাইলৰ বিষয়বস্তুৰ লগত মিল পোৱা গৈছে)",
        "search-suggest": "আপুনি $1 বুজাব খুজিছে নেকি?",
        "saveprefs": "সাঁচি থওক",
        "restoreprefs": "সকলো পূৰ্বনিৰ্ধাৰিত ছেটিং ঘূৰাই আনক (সকলো ছেক্‌শ্যনতে)",
        "prefs-editing": "সম্পাদন",
-       "rows": "পথালী শাৰী:",
-       "columns": "ঠিয় শাৰী:",
        "searchresultshead": "সন্ধান কৰক",
        "stub-threshold": "<a href=\"#\" class=\"stub\">আধাৰ সংযোগ</a> ৰ সৰ্বোচ্চ আকাৰ (বাইটত):",
        "stub-threshold-disabled": "নিষ্ক্ৰিয়",
        "userrights-reason": "কাৰণ:",
        "userrights-no-interwiki": "আপোনাৰ অন্য ৱিকিত সদস্যৰ অধিকাৰ সম্পাদনা কৰাৰ অনুমতি নাই",
        "userrights-nodatabase": "$1  তথ্যকোষৰ কোনো অস্তিত্ব নাই অথবা ই স্থানীয় নহয় ।",
-       "userrights-nologin": "সদস্যৰ অধিকাৰ নিৰূপণ কৰিবলৈ আপুনি কোনো প্ৰশাসকৰ একাউণ্টৰ জৰিয়তে [[Special:UserLogin|প্ৰৱেশ]] কৰিব লাগিব ।",
-       "userrights-notallowed": "সদস্যৰ অধিকাৰ যোগ বা আঁতৰ কৰিবলৈ আপোনাৰ অনুমতি নাই ।",
        "userrights-changeable-col": "আপুনি সলনি কৰিব পৰা গোটসমূহ",
        "userrights-unchangeable-col": "আপুনি সলনি কৰিব নোৱাৰা গোটসমূহ",
        "userrights-conflict": "সদস্য অধিকাৰ সালসলনিৰ দ্বন্দ্ব! অনুগ্ৰহ কৰি পুনৰাই চকু ফুৰাই আপোনাৰ সালসলনি নিশ্চিত কৰক।",
-       "userrights-removed-self": "আপুনি সফলতাৰে নিজৰ অধিকাৰসমূহ আঁতৰ কৰিলে। গতিকে আপুনি এতিয়া এই পৃষ্ঠা চাব নোৱাৰে।",
        "group": "গোট:",
        "group-user": "সদস্যসকল",
        "group-autoconfirmed": "স্বয়ংনিশ্চিত সদস্য",
        "right-editprotected": "\"{{int:protect-level-sysop}}\" হিচাপে সুৰক্ষিত পৃষ্ঠা সম্পাদনা কৰক",
        "right-editsemiprotected": "\"{{int:protect-level-autoconfirmed}}\" হিচাপে সুৰক্ষিত পৃষ্ঠা সম্পাদনা কৰক",
        "right-editinterface": "সদস্যৰ ইণ্টাৰফে’চ সম্পাদনা কৰক",
-       "right-editusercssjs": "আন সদস্যৰ CSS আৰু JavaScript  সম্পাদনা কৰক",
        "right-editusercss": "আন সদস্যৰ CSS ফাইল সম্পাদনা কৰক",
        "right-edituserjs": "আন সদস্যৰ JavaScript ফাইল  সম্পাদনা কৰক",
        "right-editmyusercss": "আপোনাৰ নিজৰ সদস্য CSS ফাইলসমূহ সম্পাদনা কৰক।",
        "right-siteadmin": "তথ্যকোষ বন্ধ কৰক বা খোলক",
        "right-override-export-depth": "৫ম স্তৰ পৰ্যন্ত সংযুক্ত পৃষ্ঠাসহ সকলো পৃষ্ঠা ৰপ্তানী কৰক",
        "right-sendemail": "আন সদস্যলৈ ই-পত্ৰ ঠিকনা পঠিয়াওক",
-       "right-passwordreset": "পাছৱৰ্ড ৰি-চেটৰ ই-মেইলসমূহ দেখুৱাওক",
        "newuserlogpage": "সদস্যৰ সৃষ্টি অভিলেখ",
        "newuserlogpagetext": "এইখন এখন সদস্য সৃষ্টিৰ ল’গ।",
        "rightslog": "সদস্যৰ অধিকাৰৰ লেখ",
        "rcshowhidemine-hide": "লুকুৱাওক",
        "rcshowhidecategorization-show": "দেখুৱাওক",
        "rcshowhidecategorization-hide": "লুকুৱাওক",
-       "rclinks": "যোৱা $2 দিনত হোৱা $1 টা সাল-সলনি চাওক ।<br />$3",
+       "rclinks": "যোৱা $2 দিনত হোৱা $1 টা সাল-সলনি চাওক ।",
        "diff": "পাৰ্থক্য",
        "hist": "ইতিবৃত্ত",
        "hide": "দেখুৱাব নালাগে",
        "undeleteviewlink": "দেখুৱাওক",
        "undeleteinvert": "নিৰ্বাচন ওলোটা কৰক",
        "undeletecomment": "কাৰণ:",
-       "undeletedrevisions": "{{PLURAL:$1|১টা সংশোধন|$1টা সংশোধন}} পুনৰুদ্ধাৰ কৰা হৈছে",
-       "undeletedrevisions-files": "{{PLURAL:$1|১টা সংশোধন|$1 টা সংশোধন}} আৰু {{PLURAL:$2|১ খন নথি|$2 খন নথি}} পুনৰুদ্ধাৰ কৰা হ’ল",
-       "undeletedfiles": "{{PLURAL:$1|১খন নথি|$1 খন নথি}} পুনৰুদ্ধাৰ কৰা হ’ল",
        "cannotundelete": "বিলোপ বাতিলকৰণ বিফল হৈছে;\n$1",
        "undeletedpage": "'''$1ক পুনৰুদ্ধাৰ কৰা হৈছে'''\nঅনুগ্ৰহ কৰি শেহতীয়া অৱলুপ্তি আৰু পুনৰুদ্ধাৰৰ বাবে [[Special:Log/delete|অৱলুপ্তি অভিলেখ]] চাওক ।",
        "undelete-header": "শেহতীয়াকৈ বিলোপ কৰা পৃষ্ঠাসমূহৰ বাবে [[Special:Log/delete|অৱলুপ্তি ল’গ]] চাওক ।",
        "whatlinkshere-prev": "{{PLURAL:$1|পিছৰ|পিছৰ $1}}",
        "whatlinkshere-next": "{{PLURAL:$1|আগৰ|আগৰ $1}}",
        "whatlinkshere-links": "← সংযোগকেইটা",
-       "whatlinkshere-hideredirs": "$1 পুননিৰ্দেশনাসমূহ",
-       "whatlinkshere-hidetrans": "$1 à¦\9fà§\8dৰà§\87নà§\8dসà¦\95à§\8dলà§\81সà§\8dবনসমà§\82হ",
+       "whatlinkshere-hideredirs": "$1টা পুনঃনিৰ্দেশ",
+       "whatlinkshere-hidetrans": "$1 à¦\85নà§\8dতৰà§\8dভà§\81à¦\95à§\8dতà¦\95ৰণ",
        "whatlinkshere-hidelinks": "$1 টা সংযোগ",
        "whatlinkshere-hideimages": "$1 ফাইল সংযোগসমূহ",
        "whatlinkshere-filters": "ছেকনী",
        "logentry-rights-autopromote": "$1ক  $4ৰ পৰা $5লৈ স্বয়ংক্ৰিয়ভাৱে পদোন্নীত কৰা হ’ল",
        "logentry-upload-upload": "$1 $3 {{GENDER:$2|আপল'ড কৰা হ'ল}}",
        "rightsnone": "(নাই)",
-       "revdelete-summary": "সম্পাদনাৰ সাৰমৰ্ম",
        "feedback-adding": "পৃষ্ঠাত প্ৰতিক্ৰিয়া যোগ কৰা হৈছে...",
        "feedback-bugcheck": "অতি উত্তম! কেৱল পৰীক্ষা কৰক যে ই ইতিমধ্যে [$1 জ্ঞাত বাগসমূহ]ৰ এটা নহয়।",
        "feedback-bugnew": "মই পৰীক্ষা কৰিলো। এটা নতুন বাগ সংবাদন কৰক",
        "feedback-subject": "বিষয়:",
        "feedback-submit": "দাখিল কৰক",
        "feedback-thanks": "ধন্যবাদ ! আপোনাৰ প্ৰতিক্ৰিয়া \"[$2 $1]\" পৃষ্ঠাত প্ৰকাশ কৰা হৈছে।",
-       "searchsuggest-search": "সন্ধান কৰক",
+       "searchsuggest-search": "{{SITENAME}}ত সন্ধান কৰক",
        "searchsuggest-containing": "যি আছে...",
-       "api-error-badaccess-groups": "এই ৱিকিত ফাইল আপল'ড কৰিবলৈ আপোনাৰ অনুমতি নাই।",
        "api-error-badtoken": "আভ্যন্তৰীণ ত্ৰুটি: ভুল টোকেন।",
-       "api-error-copyuploaddisabled": "ইউ আৰ এলৰ মাধ্যমেৰে আপল'ড কৰাটো এই চাৰ্ভাৰত নিষ্ক্ৰিয় কৰা হৈছে।",
-       "api-error-duplicate": "এই চাইটত একে বিষয়বস্তুৰ {{PLURAL:$1|আন এটা ফাইল|আন কিছুমান ফাইল}} ইতিমধ্যেই আছে।",
-       "api-error-duplicate-archive": "এই চাইটত একে বিষয়বস্তুৰ {{PLURAL:$1|আন এটা ফাইল|আন কিছুমান ফাইল}} ইতিমধ্যেই আছিল, কিন্তু {{PLURAL:$1|সেইটো|সেইবোৰ}} বিলোপ কৰা হৈছে।",
-       "api-error-empty-file": "আপুনি দাখিল কৰা ফাইলটো খালী ।",
        "api-error-emptypage": "নতুন, খালি পৃষ্ঠা সৃষ্টি কৰিবলৈ অনুমতি নাই।",
-       "api-error-fetchfileerror": "আভ্যন্তৰীণ ত্ৰুটি: ফাইলটো অনাত কিবা সমস্যা হৈছে।",
-       "api-error-fileexists-forbidden": "\"$1\" নামৰ এখন নথি আগৰ পৰাই উপলদ্ধ আৰু ইয়াৰ পুনৰ লিখন অসম্ভৱ ।",
-       "api-error-fileexists-shared-forbidden": "উমৈহতীয়া ফাইল ভঁৰালত \"$1\" নামৰ ফাইল এটা আছেই, ইয়াৰ ওপৰত লিখিব নোৱাৰি।",
-       "api-error-file-too-large": "আপুনি দাখিল কৰা ফাইলখন বৰ ডাঙৰ ।",
-       "api-error-filename-tooshort": "ফাইলৰ নামটো অতি চুটি।",
-       "api-error-filetype-banned": "এই ধৰণৰ ফাইল নিষিদ্ধ।",
-       "api-error-filetype-banned-type": "$1 {{PLURAL:$4|অনুমোদিত ফাইল প্ৰকাৰ নহয়|সমূহ অনুমোদিত ফাইল প্ৰকাৰ নহয়}}। অনুমোদিত {{PLURAL:$3|ফাইল প্ৰকাৰ হ’ল|ফাইল প্ৰকাৰসমূহ হ’ল}} $2।",
-       "api-error-filetype-missing": "ফাইল নামটোত এক্সটেন্‌ছন নাই।",
-       "api-error-hookaborted": "আপুনি কৰিব বিচৰা সালসলনি এটা এক্সটেনচনৰ দ্বাৰা বাতিল কৰা হৈছে।",
-       "api-error-http": "আভ্যন্তৰীণ ত্ৰুটি: চাৰ্ভাৰৰ লগত সংযোগ স্থাপন নহ'ল।",
-       "api-error-illegal-filename": "ফাইলৰ এই নামটো গ্ৰহণযোগ্য নহয় ।",
-       "api-error-internal-error": "আভ্যন্তৰীণ ত্ৰুটি: এই ৱিকিত আপোনাৰ আপল'ড প্ৰক্ৰিয়া সমাপনত কিবা সমস্যা হৈছে।",
-       "api-error-invalid-file-key": "আভ্যন্তৰীণ ত্ৰুটি: অস্থায়ী ভঁৰালত ফাইলটো পোৱা নগ'ল।",
-       "api-error-missingparam": "আভ্যন্তৰীণ ত্ৰুটি: অনুৰোধত পাৰামিটাৰৰ কিবা সমস্যা হৈছে।",
-       "api-error-missingresult": "আভ্যন্তৰীণ ত্ৰুটি: অনুলিপি সফল হৈছেনে নাই তাক নিশ্চিত কৰিব পৰা নগ'ল।",
-       "api-error-mustbeloggedin": "ফাইল আপল'ড কৰাৰ আগেয়ে আপুনি প্ৰৱেশ কৰাটো বাধ্যতামূলক ।",
-       "api-error-mustbeposted": "আভ্যন্তৰীণ ত্ৰুটি: এই অনুৰোধত HTTP POST প্ৰয়োজন।",
-       "api-error-noimageinfo": "আপল'ড সফল হৈছে, কিন্তু চাৰ্ভাৰে ফাইলটোৰ সম্পৰ্কে কোনো তথ্য প্ৰদান কৰা নাই।",
-       "api-error-nomodule": "আভ্যন্তৰীণ ত্ৰুটি: কোনো আপল'ড মডিউল ঠিক কৰা হোৱা নাই।",
-       "api-error-ok-but-empty": "আভ্যন্তৰীণ ত্ৰুটি: চাৰ্ভাৰে কোনো সঁহাৰি জনোৱা নাই।",
-       "api-error-overwrite": "এতিয়া থকা ফাইলৰ ওপৰত লিখা নিষেধ।",
-       "api-error-stashfailed": "আভ্যন্তৰীণ ত্ৰুটি: অস্থায়ী ফাইল সাঁচি ৰখাত চাৰ্ভাৰ অসমৰ্থ হৈছে।",
        "api-error-publishfailed": "আভ্যন্তৰীণ ত্ৰুটি: অস্থায়ী ফাইল প্ৰকাশ কৰাত চাৰ্ভাৰ অসমৰ্থ হ'ল।",
-       "api-error-timeout": "আশা কৰা সময়ৰ ভিতৰত চাৰ্ভাৰটোৱে সঁহাৰি নজনালে।",
-       "api-error-unclassified": "এক অজ্ঞাত সমস্যাই দেখা দিছে।",
-       "api-error-unknown-code": "অজ্ঞাত ত্ৰুটি: \"$1\"।",
-       "api-error-unknown-error": "আভ্যন্তৰীণ ত্ৰুটি: আপোনাৰ ফাইলটো আপল'ড কৰাত কিবা সমস্যা হৈছে।",
+       "api-error-stashfailed": "আভ্যন্তৰীণ ত্ৰুটি: অস্থায়ী ফাইল সাঁচি ৰখাত চাৰ্ভাৰ অসমৰ্থ হৈছে।",
        "api-error-unknown-warning": "অজ্ঞাত সাৱধানবাণী: \"$1\"।",
        "api-error-unknownerror": "অজ্ঞাত ত্ৰুটি: \"$1\"।",
-       "api-error-uploaddisabled": "এই ৱিকিত আপল'ড নিষ্ক্ৰিয় কৰা হৈছে।",
-       "api-error-verification-error": "সম্ভৱতঃ এই ফাইলটো ত্ৰুটিপূৰ্ণ বা তাৰ এক্সটেন্‌ছনটো ভুল।",
        "duration-seconds": "$1 {{PLURAL:$1|ছেকেণ্ড|ছেকেণ্ড}}",
        "duration-minutes": "$1 {{PLURAL:$1|মিনিট|মিনিট}}",
        "duration-hours": "$1 {{PLURAL:$1|ঘন্টা|ঘন্টা}}",
index b46c154..c51e568 100644 (file)
        "post-expand-template-argument-warning": "<strong>Avisu:</strong> Esta páxina contien polo menos un parámetru de plantía que tien un tamañu d'espansión demasiao llargu.\nEstos parámetros s'omitieron.",
        "post-expand-template-argument-category": "Páxines con parámetros de plantía omitíos",
        "parser-template-loop-warning": "Deteutóse un bucle de plantíes: [[$1]]",
+       "template-loop-category": "Páxines con bucles de plantíes",
+       "template-loop-category-desc": "Esta páxina contien un bucle de plantía, esto ye, una plantía que se llama ella mesma de mou recursivu.",
        "parser-template-recursion-depth-warning": "Se pasó la llende de fondura recursiva de les plantíes ($1)",
        "language-converter-depth-warning": "Se pasó la llende de fondura del convertidor de llingües ($1)",
        "node-count-exceeded-category": "Páxines onde se pasó la cuenta de noyos",
        "saveusergroups": "Guardar los grupos {{GENDER:$1|del usuariu|de la usuaria}}",
        "userrights-groupsmember": "Miembru de:",
        "userrights-groupsmember-auto": "Miembru implícitu de:",
-       "userrights-groups-help": "Pues camudar los grupos a los que pertenez esti usuariu.\n* Un caxellu marcáu significa que l'usuariu ta nesi grupu.\n* Un caxellu non marcáu significa que l'usuariu nun ta nesi grupu.\n* Un * indica que nun pues desaniciar el grupu una vegada tea inxeríu, o viceversa.\n* Un # indica que namái puede atrasase la fecha de caducidá d'esti grupu; nun puede adelantase.",
+       "userrights-groups-help": "Pues camudar los grupos a los que pertenez esti usuariu.\n* Un caxellu marcáu significa que l'usuariu ta nesi grupu.\n* Un caxellu non marcáu significa que l'usuariu nun ta nesi grupu.\n* Un * indica que nun pues desaniciar el grupu una vegada tea inxeríu, o viceversa.\n* Un # indica que namái puede atrasase la fecha de caducidá de la pertenencia a esti grupu; nun puede adelantase.",
        "userrights-reason": "Motivu:",
        "userrights-no-interwiki": "Nun tienes permisu pa editar los derechos d'usuariu n'otres wikis.",
        "userrights-nodatabase": "La base de datos $1 nun esiste o nun ye llocal.",
        "userrights-expiry-options": "1 día:1 day,1 selmana:1 week,1 mes:1 month,3 meses:3 months,6 meses:6 months,1 añu:1 year",
        "userrights-invalid-expiry": "La hora de caducidá del grupu «$1» nun ye válida.",
        "userrights-expiry-in-past": "La hora de caducidá del grupu «$1» ta nel pasáu",
-       "userrights-cannot-shorten-expiry": "Nun puedes adelantar la caducidá del grupu «$1». Sólo los usuarios con permisu p'amestar y desaniciar esti grupu pueden adelantar les dates de caducidá.",
+       "userrights-cannot-shorten-expiry": "Nun puedes adelantar la caducidá de la pertenencia al grupu «$1». Sólo los usuarios con permisu p'amestar y desaniciar esti grupu pueden adelantar les dates de caducidá.",
        "userrights-conflict": "¡Conflictu de cambiu de permisos d'usuariu! Por favor, revise y confirme los cambios.",
        "group": "Grupu:",
        "group-user": "Usuarios",
        "right-editsemiprotected": "Editar les páxines protexíes como \"{{int:protect-level-autoconfirmed}}\"",
        "right-editcontentmodel": "Editar el modelu de conteníu d'una páxina",
        "right-editinterface": "Editar la interfaz d'usuariu",
-       "right-editusercssjs": "Editar los ficheros CSS y JavaScript d'otros usuarios",
        "right-editusercss": "Editar los ficheros CSS d'otros usuarios",
        "right-edituserjs": "Editar los ficheros JavaScript d'otros usuarios",
        "right-editmyusercss": "Editar los propios ficheros CSS d'usuariu",
        "rcfilters-hideminor-conflicts-typeofchange": "Dellos tipos de cambiu nun pueden designase como «menores», de manera qu'esti filtru fai conflictu colos siguientes filtros «Tipu de cambiu»: $1",
        "rcfilters-typeofchange-conflicts-hideminor": "Esti filtru de «Tipu de cambiu» fai conflictu col filtru «Ediciones menores». Dellos tipos de cambiu nun pueden designase como «menores».",
        "rcnotefrom": "Abaxo {{PLURAL:$5|tá'l cambiu|tan los cambios}} dende'l <strong>$3</strong>, a les <strong>$4</strong> (s'amuesen un máximu de <strong>$1</strong>).",
+       "rclistfromreset": "Reaniciar la seleición de data",
        "rclistfrom": "Amosar los nuevos cambios dende'l $3 a les $2",
        "rcshowhideminor": "$1 ediciones menores",
        "rcshowhideminor-show": "Amosar",
        "rcshowhidecategorization": "$1 la categorización de páxina",
        "rcshowhidecategorization-show": "Amosar",
        "rcshowhidecategorization-hide": "Tapecer",
-       "rclinks": "Amosar los caberos $1 cambeos de los caberos $2 díes <br />$3",
+       "rclinks": "Amosar los caberos $1 cambeos de los caberos $2 díes",
        "diff": "dif",
        "hist": "hist",
        "hide": "Anubrir",
        "undeleteviewlink": "ver",
        "undeleteinvert": "Invertir seleición",
        "undeletecomment": "Motivu:",
-       "undeletedrevisions": "{{PLURAL:$1|1 revisión restaurada|$1 revisiones restauraes}}",
-       "undeletedrevisions-files": "{{PLURAL:$1|1 revisión|$1 revisiones}} y {{PLURAL:$2|1 archivu|$2 archivos}} restauraos",
-       "undeletedfiles": "{{PLURAL:$1|1 archivu restauráu|$1 archivos restauraos}}",
        "cannotundelete": "Falló total o parcialmente la restauración:\n$1",
        "undeletedpage": "'''Restauróse $1'''\n\nConsulta'l [[Special:Log/delete|rexistru d'esborraos]] pa ver los esborraos y restauraciones de recién.",
        "undelete-header": "Mira nel [[Special:Log/delete|rexistru d'esborraos]] les páxines esborraes recién.",
        "newimages-summary": "Esta páxina especial amuesa los caberos archivos xubíos.",
        "newimages-legend": "Peñera",
        "newimages-label": "Nome d'archivu (o una parte d'él):",
+       "newimages-user": "Direición IP o nome d'usuariu",
        "newimages-showbots": "Ver les xubíes de los bots",
        "newimages-hidepatrolled": "Despintar les entraes patrullaes",
        "noimages": "Nun hai nada que ver.",
        "special-characters-group-thai": "Tailandés",
        "special-characters-group-lao": "Laosianu",
        "special-characters-group-khmer": "Khmer",
+       "special-characters-group-canadianaboriginal": "Aborixe canadiense",
        "special-characters-title-endash": "guión curtiu",
        "special-characters-title-emdash": "guión llargu",
        "special-characters-title-minus": "signu menos",
        "restrictionsfield-label": "Rangos d'IP permitíos:",
        "restrictionsfield-help": "Una única direición IP o rangu CIDR per llinia. P'activar toos, utiliza:<pre>0.0.0.0/0\n::/0</pre>",
        "revid": "revisión $1",
-       "pageid": "ID de páxina $1"
+       "pageid": "ID de páxina $1",
+       "rawhtml-notallowed": "Les etiquetes &lt;html&gt; nun pueden usase fuera de les páxines normales."
 }
index 882903f..7a5a43f 100644 (file)
@@ -7,7 +7,8 @@
                        "Jeannette Coocoo",
                        "Nehirowisiw",
                        "Ninmeka",
-                       "Thibaut120094"
+                       "Thibaut120094",
+                       "Catrope"
                ]
        },
        "sunday": "manactakaniwon",
@@ -51,7 +52,7 @@
        "jan": "Kenositc pisimw",
        "feb": "Akokatcic pisimw",
        "mar": "Nikikw pisimw",
-       "apr": "Ka wasikototc pisimw",
+       "apr": "Ka wasikatotc pisimw",
        "may": "Wapikon pisimw",
        "jun": "Otehimin pisimw",
        "jul": "Mikomini pisimw",
        "november-date": "Atikamekw pisimw $1",
        "december-date": "Pitcipipon pisimw $1",
        "pagecategories": "{{PLURAL:$1|Ka ici arimotcikatek|Ka ici arimotcikateki}}",
-       "category_header": "Masinhikana ka ici arimotcikateki \"$1\"",
+       "category_header": "Masinahikana ka ici arimotcikateki \"$1\"",
+       "subcategories": "Awocamec ke ici arimotcikateki",
        "hidden-categories": "{{PLURAL:$1|Ka katcictek|Ka katcicteki}}",
        "listingcontinuesabbrev": "minawatc",
        "about": "Taci we otciparik",
        "newwindow": "(cepita kotak ocki osapwakan)",
-       "cancel": "Ponipita",
+       "cancel": "Ponipata",
        "mypage": "Masinhikan",
-       "mytalk": "Ka ici arimowaniok",
+       "mytalk": "Ka ici arimowaniwok",
        "anontalk": "Ka ici arimowaniok",
        "navigation": "Matcecikinikan",
        "and": "&#32;kaie",
        "navigation-heading": "Matcecikinikana",
        "errorpagetitle": "Oniparin",
        "returnto": "Nte ica paskickwemakanik $1",
-       "tagline": "Epe otcipirik {{SITENAME}}",
+       "tagline": "E pe otciparik {{SITENAME}}",
        "help": "Witcihici",
        "search": "Nantokaskeritcikatek",
-       "searchbutton": "Nantokaskeritcikatek",
+       "searchbutton": "Nantokiskeritcikatek",
        "go": "Go",
-       "searcharticle": "Tapowata",
-       "history": "Ka ki pe icinakok owe masinhikan",
+       "searcharticle": "Tapwata",
+       "history": "Ka ki pe icinakok ohwe masinahikan",
        "history_short": "Isparik",
        "history_small": "isparik",
        "printableversion": "Wi orowipitamone",
        "editthispage": "Mecikotona owe",
        "delete": "Wepina",
        "newpage": "Ocki matcecikinakanik",
-       "talkpagelinktext": "ka ici arimowaniok",
+       "talkpagelinktext": "ka ici arimowaniwok",
        "personaltools": "Kit irapatcitcikan",
-       "talk": "Ka ici arimowaniok",
+       "talk": "Ka ici arimowaniwok",
        "views": "Ke icinakok",
        "toolbox": "Irapitcitcikan",
        "projectpage": "Kitci wapataman nehe masinihikan ocki otamirowinik otci",
-       "otherlanguages": "Kotakhi aiarimowewina",
-       "redirectedfrom": "(Taci e kiweckwemokok $1)",
-       "lastmodifiedat": "Pamitcitc ka meckotcitakiniwok ni apitc $1, ka tatopihikanihak $2.",
+       "otherlanguages": "Kotakahi aiarimowewina",
+       "redirectedfrom": "(Taci e kiweckwemakak $1)",
+       "lastmodifiedat": "Pamitcitc ka meckotcitakiniwok ni apitc $1, ka tato tipahikaneak $2.",
        "jumpto": "Ica:",
        "jumptonavigation": "matcetcicihikan",
-       "jumptosearch": "nantokaskeritcikatek",
+       "jumptosearch": "nantokiskeritcikatek",
        "aboutsite": "Taci we otciparik {{SITENAME}}",
        "aboutpage": "Project:Enko nehe",
        "currentevents": "Mekwata",
        "helppage-top-gethelp": "Witcihici",
        "mainpage": "Otitikowin",
        "mainpage-description": "Otitikowin",
-       "portal": "Kaskina namo awik",
-       "portal-url": "Project:Kaskina namo awik",
+       "portal": "Kaskina mamo awik",
+       "portal-url": "Project:Kaskina mamo awik",
        "privacy": "Kekwan ke ki ici nitcictaman",
        "privacypage": "Project:Kekwan ke ki ici nitcictaman",
        "ok": "OK",
        "editlink": "meckotcita",
        "viewsourcelink": "Nte ici nta kanawapata e otciparik",
        "editsectionhint": "Meckotcita ota: $1",
-       "toc": "Tekaci ecinakok",
+       "toc": "Tekaci e icinakok",
        "showtoc": "Wapata",
        "hidetoc": "Kata",
        "confirmable-yes": "Ehe",
        "site-atom-feed": "Flux Atom de $1",
        "page-atom-feed": "\"$1\" Atom feed",
        "red-link-title": "$1 (nama takon kekwcic)",
-       "nstab-main": "Masinhikan",
+       "nstab-main": "Masinahikan",
        "nstab-user": "{{GENDER:{{ROOTPAGENAME}}|Ka masinahiketc|Ka masinahiketc}}",
-       "nstab-special": "Ka ici wectakaniok",
+       "nstab-special": "Ka ici wectakaniwok",
        "nstab-project": "nohwe ma",
-       "nstab-image": "Masinhikan",
+       "nstab-image": "Masinahikan",
        "nstab-template": "Tapapitcikan",
        "nstab-category": "Ka ici arimotcikatek",
        "mainpage-nstab": "Otitikowin",
        "bold_tip": "Atisokesinahikan e makatewasinatek",
        "italic_sample": "Atisokesinahikan ka kwectek",
        "italic_tip": "Atisokesinahikan ka kwectek",
-       "link_sample": "Ka icinkatek takapikenikan",
+       "link_sample": "Ka icinikatek takapikenikan",
        "link_tip": "Pitc itapikesinikan",
-       "extlink_sample": "http://www.example.com ka icinkatek takapikenikan",
-       "extlink_tip": "Masinhikana ka ici tapitik kotakik masinhikanik",
+       "extlink_sample": "http://www.example.com ka icinikatek takapikenikan",
+       "extlink_tip": "Masinahikana ka ici tapitik kotakik masinahikanik",
        "headline_sample": "Atisokesinahikan ke aicinikatek",
        "nowiki_sample": "Acta atisokesinahikan aka moci ka ki otci nihipitcikatek ota",
-       "nowiki_tip": "aka pamerita e itasinihakw wiki",
+       "nowiki_tip": "aka pamerita e itasinihak wiki",
        "image_tip": "E pitakesinahikatek masinahikaniwoc",
-       "media_tip": "Ka ici tapitik onimiskimasinhikan",
-       "sig_tip": "Masinohotiso acit e tato konekisitc pisimw",
+       "media_tip": "Ka ici tapitik onimiskimasinahikan",
+       "sig_tip": "Masinahotiso acit e tato konekisitc pisimw",
        "summary": "Nosem:",
        "minoredit": "Apicic meckotciparin",
-       "watchthis": "Wi nosinetahine ohe masinhikan",
+       "watchthis": "Wi nosinetaine ohwe masinahikan",
        "savearticle": "Kinokepitcikanik acta",
        "showpreview": "Tcockapita",
        "showdiff": "Kanawapata ka meckotcipitcikateki",
        "loginreqlink": "posi",
        "editing": "Meckotcita $1",
        "templatesused": "{{PLURAL:$1|tapapitcikan ka apatak |tapapitcikan ka apatak}} nta paskickwemakanik:",
-       "template-protected": "(nakatweritcikatew)",
+       "template-protected": "(nakataweritcikatew)",
        "template-semiprotected": "(apita nakatoweritakon)",
-       "moveddeleted-notice": "Paskickwemakan ka ki wepinikatek.\nOhwe wapatcikan nitc ici nokon  paskickwemakanik ka ki wepinikateki acit ka ki atcipitcikateki .",
+       "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",
+       "revisionasof": "Kiwe kanawapata $1",
        "previousrevision": "← Nictam ka ki masinatek",
        "nextrevision": "Tec aci ka ki otamirowitcikatek",
        "currentrevisionlink": "Mekwatc ka otamirowitcikatek",
        "revdelete-show-file-submit": "Ehe",
        "pagehist": "Ka ki pe icinakok owe masinhikan",
        "history-title": "Kotakihi e itatcitcikatekai $1",
-       "lineno": "E tosinatek $1 :",
+       "lineno": "E tatosinatek $1 :",
        "editundo": "nama ntwatc",
-       "searchresults": "Kaki nta kiskeritakok",
-       "searchresults-title": "Kaki nta kiskeritakok \"$1\"",
-       "shown-title": "Akoskoha $1 {{PLURAL:$1|result|results}}  tatwa e matce paskickwemikein",
-       "searchprofile-articles": "Masinhikana ka aicteki",
+       "searchresults": "Ka ki nta kiskeritakok",
+       "searchresults-title": "Ka ki nta kiskeritakok \"$1\"",
+       "prevn": "{{PLURAL:$1|nictamictew|nictamictewa $1}}",
+       "nextn": "minawa {{PLURAL:$1|$1}}",
+       "nextn-title": "Minawa $1 {{PLURAL:$1|ke iti icinakok|ke iti icinakoki}}",
+       "shown-title": "Akwaskoha $1 {{PLURAL:$1|ke iti icinakok|ke iti icinakoki}} tatwa e matce paskickwemikein",
+       "viewprevnext": "Tapwatcike ($1 {{int:pipe-separator}} $2) ($3)",
+       "searchprofile-articles": "Masinahikana ka aicteki",
        "searchprofile-images": "Mitcetowina",
        "searchprofile-everything": "Kaskina",
        "searchprofile-advanced": "Awocamec nantona",
-       "searchprofile-articles-tooltip": "Nantowapita $1",
-       "searchprofile-images-tooltip": "ka nantopitcikatek nakwe masinhikan",
+       "searchprofile-articles-tooltip": "Nantowapata $1",
+       "searchprofile-images-tooltip": "ka nantopitcikatek nakwe masinahikan",
        "searchprofile-everything-tooltip": "Nantona nta kitciwe natosinahikanik (acit nte paskickwemakanik taci e ici aiarimotcikatek)",
-       "searchprofile-advanced-tooltip": "Nantona taci e ici actek  ka mihikok",
+       "searchprofile-advanced-tooltip": "Nantona taci e ici actek  ka mihakok",
        "search-result-size": "$1 ({{PLURAL:$2|1 itewin e masinatek|$2 itewina e masinateki}})",
-       "search-redirect": "(Taci e kiweckwemokok $1)",
+       "search-redirect": "(Taci e kiweckwemakak $1)",
+       "search-section": "(ke arimotcikatek $1)",
        "search-suggest": "Ohwe kotcita e itasinatek:$1",
        "searchall": "kaskina",
+       "search-nonefound": "Nama miskwapahikatew ka nantowapahikatek.",
        "powersearch-legend": "Awocamec nantona",
        "powersearch-toggleall": "Kaskina",
        "preferences": "Kirowe",
        "youremail": "Matcetcicihikan:",
        "email": "Matcetcicihikan",
        "group-user": "Ka mitatc",
-       "right-writeapi": "Ohwe apitcita A.P.I meckoti aitotaman wikik",
-       "newuserlogpage": "E ici masinasotcik ka pitakesinohotosotcik",
+       "right-writeapi": "Ohwe apitcita A.P.I meckotci aitotaman wikik",
+       "newuserlogpage": "E ici masinasotcik ka pitakesinahotisotcik",
        "action-edit": "mecikotona owe",
        "enhancedrc-history": "isparik",
-       "recentchanges": "Ka ki meckotcitakanioki",
+       "recentchanges": "Ka ki meckotcitakaniwoki",
        "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",
+       "recentchanges-label-bot": "nicike ki meckotciparin",
        "recentchanges-label-unpatrolled": "Nama moci koski tapwatcikatew ka ki meckotcipirik",
        "recentchanges-label-plusminus": " Irikik e tacitcik bytes meckotcipirin e irikwak",
        "recentchanges-legend-heading": "<strong>itekesinihikan:</strong>",
        "recentchanges-submit": "Wapata",
-       "rclistfrom": "Nokota ka ki mameckotcipirik nta e otci kitcipirik $2$3",
-       "rcshowhideminor": "$1 memantcic meckotcipirina",
+       "rclistfrom": "Nokota ka ki mameckotciparik nta e otci kitciparik $2$3",
+       "rcshowhideminor": "$1 memantcic meckotcipirino",
        "rcshowhideminor-show": "Wapata",
        "rcshowhideminor-hide": "Kata",
-       "rcshowhidebots": "$1 meckotciparini",
+       "rcshowhidebots": "$1 meckotciparin",
        "rcshowhidebots-show": "Wapata",
        "rcshowhidebots-hide": "Kata",
-       "rcshowhideliu": "$1 ka notcitatcik e ici masinohotisotcik",
+       "rcshowhideliu": "$1 ka notcitatcik e ici masinahotisotcik",
        "rcshowhideliu-show": "Wapata",
        "rcshowhideliu-hide": "Kata",
-       "rcshowhideanons": "$1 nama kiskeritakosiw ka ki masinahaki",
+       "rcshowhideanons": "$1 nama kiskeritakosiw ka ki masinahak",
        "rcshowhideanons-show": "Wapata",
        "rcshowhideanons-hide": "Kata",
        "rcshowhidepatr-show": "Wapata",
        "rcshowhidepatr-hide": "Kata",
-       "rcshowhidemine": "$1 ka meckotcipitaman",
+       "rcshowhidemine": "$1 ka meckotcipataman",
        "rcshowhidemine-show": "Wapata",
        "rcshowhidemine-hide": "Kata",
        "rcshowhidecategorization-show": "Wapata",
        "rcshowhidecategorization-hide": "Kata",
-       "rclinks": "Nokota nehi $1 ka ki mamitcit mameckotcipitcikatekai $2 nac nta  mamitcitc e kicikakai<br />$3.",
+       "rclinks": "Nokota nehi $1 ka ki mamitcit mameckotcipitcikatekai $2 nac nta  mamitcitc e kicikakai",
        "diff": "pitoc",
        "hist": "e itatisokatek",
        "hide": "Kata",
        "newpageletter": "O",
        "boteditletter": "p",
        "rc-change-size-new": "$1 {{PLURAL:$1|irik|irikw}} ke askowak",
-       "recentchangeslinked": "Nosineta masinhikana e mamowapiketik",
-       "recentchangeslinked-toolbox": "Nosineta masinhikana e mamowapiketik",
+       "recentchangeslinked": "Nosineta masinahikana e mamowapiketik",
+       "recentchangeslinked-toolbox": "Nosineta masinahikana e mamowapiketik",
        "recentchangeslinked-title": "E nosinehikatek paskickwemikana ka acotcictek\"$1\"",
        "recentchangeslinked-page": "Icinikatamowin Ickwemakinikan:",
-       "upload": "Natcipota masinhikan",
+       "upload": "Natcipata masinahikan",
        "filedesc": "Nosem",
        "fileuploadsummary": "Nosem:",
        "filesource": "Ite wetciparik:",
        "filehist": "E itatisokemakak masinahikaniwoc",
        "filehist-help": "Ota ici nta makona e tatokonikisitc acitc e tato tipahikaneak kitci wapataman apitc ka masinatek.",
        "filehist-current": "mekwatc",
-       "filehist-datetime": "Tatokonakisitc acitc tato tipahikaneak",
-       "filehist-thumb": "Masinasonic",
+       "filehist-datetime": "E tatokonakisitc acitc e tato tipahikaneak",
+       "filehist-thumb": "Masinasowinicic",
+       "filehist-thumbtext": "Masinasowinicic apitc ka meckotcipatakaniwitc $1",
        "filehist-user": "Ka mitatc",
        "filehist-dimensions": "E iskwaki",
        "filehist-comment": "E iteritaman",
        "imagelinks": "Ke irapatak masinahikaniwoc",
        "nolinkstoimage": "Nama tekaci apatan masinahikaniwoc.",
+       "sharedupload-desc-here": "Ohwe masinahikaniwoc ote otciparin $1. Matci kotakahik wec kata apatan.\nOta masinateriw $2 e irapatanik.",
        "upload-disallowed-here": "Nama actew  kata meckotanaman.",
        "filedelete": "Wepina $1",
        "filedelete-submit": "Wepina",
        "checkbox-all": "Kaskina",
        "allpages": "Kaskina paskickwemikana",
        "allarticles": "Kaskina paskickwemikana",
-       "allpagessubmit": "Tapowata",
-       "categories": "Nakwe tipanictasinihikan",
+       "allpagessubmit": "Tapwata",
+       "categories": "Ka ici arimotcikateki",
        "categories-submit": "Wapata",
-       "sp-deletedcontributions-contribs": "Wi kipitanikeine",
+       "sp-deletedcontributions-contribs": "E ki witcihehin",
        "linksearch-ok": "Nantokaskeritcikatek",
        "listusers-submit": "Wapata",
        "listgrouprights-namespaceprotection-namespace": "Ka ici masinasotcik",
        "delete-legend": "Wepina",
        "historyaction-submit": "Wapata",
        "dellogpage": " Nesitc ka wepinikatek kanaweritcikan",
-       "rollbacklink": "e maninikatek",
+       "rollbacklink": "e maninakatek",
        "protectlogpage": "Nanakatisiwina wapatcikan",
        "restriction-edit": "Meckotcita",
        "undeleteviewlink": "tapwatcike",
        "undelete-search-submit": "Nantokaskeritcikatek",
        "undelete-show-file-submit": "Ehe",
        "namespace": "Ka ici masinasotcik:",
-       "invert": "koweckisinaha nohwe",
+       "invert": "kweskisinaha nohwe",
        "namespace_association": "Taci e mamowisinasonaniwok",
        "blanknamespace": "(Ka ici ocitakiniwok)",
        "mycontris": "Wi kipitanikeine",
-       "anoncontribs": "Wi kipitanikeine",
+       "anoncontribs": "E ki witcihehin",
        "uctop": "(mekwatc)",
        "month": "Anotc pisimw ka akotcinitc (nac nte nictam):",
        "sp-contributions-talk": "ka ici arimowaniok",
        "sp-contributions-submit": "Nantokaskeritcikatek",
-       "whatlinkshere": "Kaskina ickwemikina ka witci acteki",
-       "whatlinkshere-title": "Masinhikan nte mia ka ici tapitik \"$1\"",
-       "whatlinkshere-page": "Masinhikan:",
+       "whatlinkshere": "Kaskina ickwemakina ka witci acteki",
+       "whatlinkshere-title": "Masinahikan nte mia ka ici tapitik \"$1\"",
+       "whatlinkshere-page": "Masinahikan:",
        "linkshere": "Masinhikan ka ici tapitik <strong>[[:$1]]</strong>:",
        "isredirect": "masinhikan ke kweskiticohemikok",
+       "istemplate": "ka ki acotcipitcikatek",
        "isimage": "e ici tapitik masinahikaniwoc",
+       "whatlinkshere-prev": "{{PLURAL:$1|nictamictew|nictamictewa $1}}",
+       "whatlinkshere-next": "{{PLURAL:$1|minawa|minawa $1}}",
        "whatlinkshere-links": "← ka patiki",
-       "whatlinkshere-hideredirs": "$1 itapihikina",
+       "whatlinkshere-hideredirs": "$1 itapahikana",
        "whatlinkshere-hidetrans": "$1 pitcititawina",
        "whatlinkshere-hidelinks": "$1 ka patiki",
        "whatlinkshere-filters": "cikopesinikan",
        "ipblocklist-submit": "Nantokaskeritcikatek",
        "blocklink": "nokipita",
        "contribslink": "wi kipitanikeine",
-       "movesubpagetalktext": "",
-       "export": "Matcetacaha masinhikana",
+       "movesubpagetalktext": "Neta ka arimotcikatek tipatcimosanikanik $1 {{PLURAL:$1|Nota paskickwemakan|Nota paskickwemakana}} kita masinatewa ota.",
+       "export": "Matcetciciha masinahikana",
        "allmessages-filter-all": "Kaskina",
        "allmessages-filter-submit": "Tapowata",
        "thumbnail-more": "Micata",
        "tooltip-pt-userpage": "{{GENDER:|Ki masinahikan|Ki masinahikan}}",
-       "tooltip-pt-login": "Arimatc kika witen e icikasoin: nama tatakatc kitci kiskeritakosiin.",
+       "tooltip-pt-mytalk": "{{GENDER:|Kir}} paskickwemakanik taci e ici aiarimotcikatek",
+       "tooltip-pt-preferences": "{{GENDER:|Kir}} kirowe ka nahinaman",
+       "tooltip-pt-watchlist": "Enko ohwi ka masinateki kaskina ka ki meckotcisinahikateki",
+       "tooltip-pt-mycontris": "Masinatew ota {{GENDER:|kir}} ka ki ici witcihiweiin",
+       "tooltip-pt-login": "Arimatc ki ka witen e icikasoin: nama tatakatc kitci kiskeritakosiin.",
        "tooltip-pt-logout": "Piskeapikenakan",
-       "tooltip-pt-createaccount": "A arimatc kika ocitan kitci cenaman: nama aric tatakatc otcitakotc.",
-       "tooltip-ca-talk": "Kecpin wi aimihate awik aniherie otci",
-       "tooltip-ca-edit": "Mecikotona owe",
-       "tooltip-ca-addsection": "Kitcipirin ocki aimihitosinihikan",
+       "tooltip-pt-createaccount": "A arimatc ki ka ocitan kitci cenaman: nama aric tatakatc otcitakotc.",
+       "tooltip-ca-talk": "Kecpin wi aimihate awik aniheriw otci",
+       "tooltip-ca-edit": "Meckotana ohwe",
+       "tooltip-ca-addsection": "Kitcipirin ocki aimihitosinahikan",
        "tooltip-ca-viewsource": "Nakataweritakon paskickwemikan\n Taci e otcipirik",
-       "tooltip-ca-history": "Nictam kaki itasinahikatek",
+       "tooltip-ca-history": "Nictam ka ki itasinahikatek",
        "tooltip-ca-move": "Orinkata owe masinhikan",
        "tooltip-ca-watch": "E ici nosinehaman ici acotcicta paskickwemakan",
-       "tooltip-search": "Nantokaskeritcikatek {{SITENAME}}",
-       "tooltip-search-go": "Ekota neta icakw kepitc tanokwen itewin",
+       "tooltip-search": "Nantokiskeritcikatek {{SITENAME}}",
+       "tooltip-search-go": "Ekota neta icakw ke apitc tanokwen itewin",
        "tooltip-search-fulltext": "Nantona paskickwemakana atisokesinahikanik",
        "tooltip-p-logo": "Nictam ka nokok",
        "tooltip-n-mainpage": "Nictam ka nokok",
        "tooltip-n-mainpage-description": "Nictam ka nokok",
-       "tooltip-n-portal": "Anihe otci ka tacikatek mia keki totaman tan nte ke otinaman ke kictapatak",
-       "tooltip-n-currentevents": "Ke ici miskaman ka wi nta kiseritaman",
-       "tooltip-n-recentchanges": "Ka ki mecikitonikatek",
-       "tooltip-n-randompage": "Kaskina kekowan",
-       "tooltip-n-help": "Witcihiewin",
-       "tooltip-t-whatlinkshere": "Ka masinateti ite e ici itohikemakak",
-       "tooltip-t-recentchangeslinked": "Ka masinateki anihi kaki atcitakaniwok",
+       "tooltip-n-portal": "Anihe otci ka tacikatek mia ke ki totaman tante ke otinaman ke kictapatak",
+       "tooltip-n-currentevents": "Ke ici miskaman ka wi nta kiskeritaman",
+       "tooltip-n-recentchanges": "Ka ki meckotonikatek",
+       "tooltip-n-randompage": "Kaskina kekwan",
+       "tooltip-n-help": "Witcihiwewin",
+       "tooltip-t-whatlinkshere": "Ka masinateki ite e ici itohikemakak",
+       "tooltip-t-recentchangeslinked": "Ka masinateki anihi ka ki 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-upload": "Matceticiha masinahikan",
+       "tooltip-t-specialpages": "Kotakahi masinahikana",
        "tooltip-t-print": "Matci keki orowipitaman kitci masinatekipan",
        "tooltip-t-permalink": "Taci mia e otcitik",
-       "tooltip-ca-nstab-main": "Ki nawapta ka masinateki",
-       "tooltip-ca-nstab-user": "Kitci wapitaman nehe masinhikan ka apitak",
-       "tooltip-ca-nstab-special": "Ohowe kitcickwemakinikan,nama actew kitci meckotcitaparik.",
+       "tooltip-ca-nstab-main": "Kanawapata ka masinateki",
+       "tooltip-ca-nstab-user": "Kitci wapataman nihe masinahikan ka apatak",
+       "tooltip-ca-nstab-special": "Ohwe kitcickwemakinikan,nama actew kitci meckotciparik.",
        "tooltip-ca-nstab-project": "Kitci wapataman nehe masinihikan ocki otamirowinik otci",
-       "tooltip-ca-nstab-image": "Kitci wapitaman nehe masinhikan",
+       "tooltip-ca-nstab-image": "Kitci wapataman nihe masinahikan",
        "tooltip-ca-nstab-template": "kanawapata orictawisinihikan",
-       "tooltip-ca-nstab-category": "Kitci wapitaman nehe mia ka ici arimotcikatek",
+       "tooltip-ca-nstab-category": "Kitci wapataman nihe mia ka ici arimotcikatek",
        "tooltip-save": "Kinokepita ka meckotcisinihaman",
-       "tooltip-preview": "Mikwetc pitaman e kanawapataman kaki meckotcitain, e pwamici actain pamikicikwepitcikanik.",
+       "tooltip-preview": "Mikwetc pitaman e kanawapataman ka ki meckotcitain, epwomici 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.",
        "confirm-markpatrolled-button": "OK",
        "nextdiff": "Tec meckotcisinihikan",
        "show-big-image": "E otciparik masinahikaniwoc",
-       "show-big-image-preview": "E irikweckwemikisitc$1",
+       "show-big-image-preview": "E irikweckwemakisitc$1",
        "show-big-image-size": "$1 x $2 pixels",
        "ilsubmit": "Nantokaskeritcikatek",
        "monday-at": "ockorkananiwon $1",
        "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-make": "Ka ki ocitatatc masinapiskahikaniw",
+       "exif-model": "E icinakok masinapiskohowewin",
        "exif-software": "Tipatcimocikimiwesinikan ka totcikatek",
-       "exif-colorspace": "Icipekihikanik",
-       "exif-datetimeoriginal": "E tato piponikak nictam ka masinohaniwok",
+       "exif-exifversion": "Exif ka itasinatek",
+       "exif-colorspace": "Icipekahikanik",
+       "exif-datetimeoriginal": "E tato piponikak nictam ka masinahikaniwok",
        "exif-datetimedigitized": "e tato konekisit pisimw ka capwapiskipitcikatek",
        "exif-source": "Ite wetciparik",
        "exif-iimcategory": "Ka ici arimotcikatek",
        "imgmultigo": "Tapowata!",
        "img-lang-go": "Tapowata",
        "table_pager_limit_submit": "Tapowata",
+       "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|ka ici arimowaniwok]])",
        "version-ext-colheader-description": "E witcikemakak",
        "version-libraries-description": "E witcikemakak",
        "redirect-submit": "Tapowata",
        "fileduplicatesearch-submit": "Nantokaskeritcikatek",
-       "specialpages": "Ka ici wectakaniok",
+       "specialpages": "Ka ici wectakaniwok",
+       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Kicawatcikanicic|Kicawatcikanica}}]] : $2)",
        "tags-source-header": "Ite wetciparik",
        "tags-active-yes": "Ehe",
        "tags-active-no": "Nama",
        "htmlform-no": "Nama",
        "htmlform-yes": "Ehe",
        "htmlform-cloner-delete": "Manina",
+       "logentry-delete-delete": "$1 {{GENDER:$2|ki maninam}} $3 ka arimotcikaterik",
+       "logentry-newusers-create": "Anahwe $1 aci {{GENDER:$2|ickwa ocitakiniwon}}",
        "feedback-cancel": "Ponipita",
        "searchsuggest-search": "Nantona {{SITENAME}}",
        "expand_templates_ok": "OK",
index c335429..17cf303 100644 (file)
        "password-change-forbidden": "Гьаб викиялда пароль хисизабун бажаруларо дуда.",
        "login": "Жаниве лъугьине",
        "nav-login-createaccount": "Жаниве лъугьине / аккаунт гьабизе",
-       "userlogin": "Жаниве лъугьине / аккаунт гьабизе",
-       "userloginnocreate": "Жаниве лъугьине",
        "logout": "КъватӀиве лъугьине",
        "userlogout": "КъватӀиве лъугьине",
        "notloggedin": "Мун жаниве лъугьун гьечӀо",
        "userlogin-noaccount": "Дур аккаунт гьечӀебищ?",
        "userlogin-joinproject": "Проекталда гӀахьаллъизе",
-       "nologin": "Дур аккаунт гьечӀебищ? $1.",
-       "nologinlink": "Аккаунт гьабизе",
        "createaccount": "Аккаунт гьабизе",
-       "gotaccount": "Дур аккаунт бугебищ? $1.",
-       "gotaccountlink": "Жаниве лъугьине",
-       "userlogin-resetlink": "Жаниве лъугьине рихьизарулел баяналищ кIочарал?",
        "userlogin-resetpassword-link": "Паролищ кIочараб?",
        "userlogin-helplink2": "Жаниве лъугьине кумек",
        "userlogin-loggedin": "Мун жаниве лъугьана {{GENDER:$1|$1}} хIисабалда.\nГъоркьехун бугеб форма хIалтIизабе, цоги цIаралда гъоркь жаниве лъугьине.",
        "createacct-email-ph": "Дурго электронияб почтаялъул адрес хъвай",
        "createacct-another-email-ph": "Электронияб почтаялъул адрес хъвай",
        "createacct-realname": "Унго-унгояб цIар (чара гьечIого къваригIунеб гуро)",
-       "createaccountreason": "ГIилла:",
        "createacct-reason": "ГIилла",
        "createacct-reason-ph": "Щай дуца цогияб аккаунт гIуцIулеб бугеб",
        "createacct-submit": "Аккаунт гIуцIизе",
        "rcshowhidemine-show": "Бихьизабизе",
        "rcshowhidemine-hide": "Бахчизе",
        "rcshowhidecategorization": "Гьумерал категориязде бикьи $1",
-       "rclinks": "$2 къояйида жаниб гьабураб, ахирисеб $1 хиса-баси бихьизабизе<br />$3",
+       "rclinks": "$2 къояйида жаниб гьабураб, ахирисеб $1 хиса-баси бихьизабизе",
        "diff": "батӀалъи",
        "hist": "тарих",
        "hide": "Бахчизе",
index 9e40aca..420f8e8 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": "आपन प्रवेश जानकारी भूलाई गवा गय?",
        "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-submit": "आपन खाता बनावा जाय",
        "right-editsemiprotected": "अइसन पन्नन् कय सम्पादन करा जाय जवने कय सुरक्षा स्तर होय \"{{int:protect-level-autoconfirmed}}\"",
        "right-editcontentmodel": "पन्ना कय सामग्री नमुना कय बदला जाय",
        "right-editinterface": "सॉफ़्टवेयर इंटरफ़ेस सम्पादित करा जाय",
-       "right-editusercssjs": "अउर सदस्यन् कय सी॰एस॰एस अव जावास्क्रिप्ट पन्ना कय सम्पादन करा जाय",
        "right-editusercss": "अउर सदस्यन् कय सी॰एस॰एस पन्ना सम्पादन करा जाय",
        "right-edituserjs": "अउर सदस्यन् कय जावास्क्रिप्ट पन्ना कय सम्पादन करा जाय",
        "right-editmyusercss": "आपन सदस्य स्तर कय सी॰एस॰एस फ़ाइल कय सम्पादन करा जाय",
        "rcshowhidemine": "हमार बदलाव $1",
        "rcshowhidemine-show": "देखावा जाय",
        "rcshowhidemine-hide": "लुकुआवा जाय",
-       "rclinks": "पिछला $2 दिन में करल $1 बदलाव देखावा जाय<br />$3",
+       "rclinks": "पिछला $2 दिन में करल $1 बदलाव देखावा जाय",
        "diff": "अंतर",
        "hist": "इतिहास",
        "hide": "लुकुआवा जाय",
        "undeleteviewlink": "देखा जाय",
        "undeleteinvert": "चुनाव उल्टा करा जाय",
        "undeletecomment": "कारण:",
-       "undeletedrevisions": "{{PLURAL:$1|अवतरण पहिले जइसन कै गय}}",
-       "undeletedrevisions-files": "{{PLURAL:$1|1 अवतरण|$1 अवतरण}} औ {{PLURAL:$2|1 फ़ाइल}} पहिले जइसन कै गय",
-       "undeletedfiles": "{{PLURAL:$1|1 फ़ाइल|$1 फ़ाइल}} पहिले जइसन कै गय",
        "cannotundelete": "पहिले जइसन नाइ कै मिला : $1",
        "undeletedpage": "'''$1 कय पहिले जइसन कै गए'''\n\nहालिए में हटावल अव पुनर्स्थापित करल पन्नन् कय जानकारी कय खर्तीन [[Special:Log/delete|हटावे कय लॉग]] देखा जाय।",
        "undelete-header": "हालिए में हटावल पन्ना द़ेखयक खर्तीन [[Special:Log/delete|हटावे कय लॉग]] देखा जाय।",
        "logentry-rights-autopromote": "$1 के सदस्य समूह स्वतः $4 से बदलकर $5 {{GENDER:$2|किये}} गए",
        "logentry-upload-upload": "$1 {{GENDER:$2|ने}} $3 अपलोड किया",
        "rightsnone": "(कउनो नाहीं)",
-       "revdelete-summary": "संपादन सारांश",
        "feedback-adding": "पृष्ठ पे प्रतिक्रिया जोडत है ...",
        "feedback-back": "पीछे",
        "feedback-bugcheck": "शानदार! जांच ले कहीं ये [ $1 known bugs] पहले से ही न हो ।",
index 8bbbfd3..51c38b2 100644 (file)
        "content-model-wikitext": "vikimətn",
        "content-model-text": "adi mətn",
        "content-model-javascript": "JavaScript",
+       "duplicate-args-warning": "<strong>Diqqət:</strong> [[:$1]] \"$3\" parametri üçün birdən artıq göstəricisi olan [[:$2]] şablonunu çağırır. Yalnız sonuncu göstərici istifadə ediləcək.",
        "expensive-parserfunction-category": "Kifayət qədər böyük sayda genişresurslu funksiyaların müraciət olunduğu səhifələr",
        "post-expand-template-inclusion-warning": "'''DİQQƏT!''' Daxil edilən şablonların həcmi həddindən artıq böyükdür.\nBəzi şablonlar əlavə olunmayacaq.",
        "post-expand-template-inclusion-category": "Şablonun daxil olduğu səhifələrin ölçüsü böyükdür.",
        "right-protect": "Mühafizə səviyyəsinin dəyişilməsi və kaskad mühafizə olunan səhifələrin redaktə edilməsi",
        "right-editprotected": "\"{{int:protect-level-sysop}}\" mühafizə səviyyəsinə malik səhifələrin redaktə edilməsi",
        "right-editinterface": "İstifadəçi interfeysini dəyişmək",
-       "right-editusercssjs": "Digər istifadəçilərin CSS və JavaScript fayllarını redaktə",
        "right-editusercss": "Digər istifadəçilərin CSS faylını redaktə",
        "right-edituserjs": "Digər istifadəçilərin JavaScript faylını redaktə",
        "right-markbotedits": "Geri qaytarılan dəyişikliklərin bot dəyişiklikləri kimi işarələnməsi",
        "rcshowhidemine-hide": "Gizlət",
        "rcshowhidecategorization-show": "Göstər",
        "rcshowhidecategorization-hide": "Gizlət",
-       "rclinks": "Son $2 gün ərzindəki son $1 dəyişikliyi göstər <br />$3",
+       "rclinks": "Son $2 gün ərzindəki son $1 dəyişikliyi göstər",
        "diff": "fərq",
        "hist": "tarixçə",
        "hide": "Gizlə",
        "undeleteviewlink": "görünüş",
        "undeleteinvert": "Seçilən xaricindəkiləri",
        "undeletecomment": "Səbəb:",
-       "undeletedrevisions": "Cəmi {{PLURAL:$1|1 redaktə|$1 redaktə}} geri qaytarıldı.",
-       "undeletedrevisions-files": "{{PLURAL:$1|1 versiya|$1 versiya}} və {{PLURAL:$2|1 fayl|$2 fayl}} bərpa edildi",
-       "undeletedfiles": "{{PLURAL:$1|1 fayl|$1 fayl}} bərpa olundu",
        "cannotundelete": "Bərpaetmə xətası:\n$1",
        "undeletedpage": "'''$1 bərpa edildi'''\n\nMəqalələrin bərpa edilməsi və silinməsi haqqında son dəyişiklikləri nəzərdən keçirmək üçün [[Special:Log/delete|silmə qeydlərinə]] baxın.",
        "undelete-header": "Son silinmiş səhifələrə baxmaq üçün [[Special:Log/delete|silmə qeydlərinə]] bax.",
        "badipaddress": "Səhv IP",
        "blockipsuccesssub": "Bloklandı",
        "blockipsuccesstext": "[[Special:Contributions/$1|$1]] bloklanıb.<br />\nBlokları yoxlamaq üçün [[Special:BlockList|bloklama siyahısına]] baxın.",
-       "ipb-blockingself": "Özünü bloklayacaqsınız.! Bunu etmək istədiyinizdən əminsinizmi?",
+       "ipb-blockingself": "Özünüzü bloklayacaqsınız! Bunu etmək istədiyinizdən əminsinizmi?",
        "ipb-confirmhideuser": "Siz \"istifadəçini gizlə\" bəndini aktiv edərək istifadəçini bloklamaq üzrəsiniz. Bu halda istifadəçinin adı bütün siyahılarda və qeydiyyat jurnallarında görünməyəcək. Bunu etmək istədiyinizdən əminsinizmi?",
        "ipb-edit-dropdown": "Bloklama səbəblərini redaktə et",
        "ipb-unblock-addr": "$1 üzərindəki blok götürüldü",
index 3a9d7c4..0c10bdb 100644 (file)
        "right-editsemiprotected": "«{{int:protect-level-autoconfirmed}}» جوره قورونموش صحیفه‌لری دَییشدیر",
        "right-editcontentmodel": "صفحه نین ایچریک مودلین دَییشدیر",
        "right-editinterface": "ایستیفاده‌چی آرا-اوزونو دَییشدیر",
-       "right-editusercssjs": "باشقا ایستیفاده‌چیلرین سی‌اس‌اس و جاوااسکریپت فایل‌لارینی دَییشدیر",
        "right-editusercss": "باشقا ایستفاده‌چیلرین سی‌اس‌اس فایل‌لارینی دَییشدیر",
        "right-edituserjs": "باشقا ایستیفاده‌چیلرین جاوااسکریپت فایل‌لارینی دَییشدیر",
        "right-editmyusercss": "اؤز ایستیفاده‌چی CSS فایل‌لارینی دَییشدیر",
        "rcshowhidemine-hide": "گیزلت",
        "rcshowhidecategorization": "صفحه‌لر بؤلمه‌لندیرمه‌سی $1",
        "rcshowhidecategorization-hide": "گیزلت",
-       "rclinks": "سون $2 گون عرضینده‌کی سون  $1 ديَیشیکلیگی گؤستر <br />$3",
+       "rclinks": "سون $2 گون عرضینده‌کی سون  $1 ديَیشیکلیگی گؤستر",
        "diff": "فرق",
        "hist": "گئچمیش",
        "hide": "گیزلت",
        "undeleteviewlink": "باخ",
        "undeleteinvert": "سئچیلنی دؤندر",
        "undeletecomment": "ندن:",
-       "undeletedrevisions": "جمعی {{PLURAL:$1|بیر دییش|$1 دییشدیر}} گئری قایتاریلدی.",
-       "undeletedrevisions-files": "{{PLURAL:$1|1 نوسخه|$1 نوسخه}} و {{PLURAL:$2|1 فایل|$2 فایل}} برپا ائدیلدی",
-       "undeletedfiles": "{{PLURAL:$1|1 فایل|$1 فایل}} برپا اولوندو",
        "cannotundelete": "برپا ائدیلمه اولمادی\n\n$1",
        "undeletedpage": "'$1 برپا ائدیلدی\n\nمقاله‌لرین برپا ائدیلمه‌سی و سیلینمه‌سی حاقیندا سون دییشیک‌لیک‌لری نظردن کئچیرمک اوچون [[Special:Log/delete|سیلمه قئیدلرینه]] باخین.",
        "undelete-header": "سون سیلینمیش صحیفه‌لره باخماق اوچون [[Special:Log/delete|سیلمه قئیدلرینه]] باخ.",
index 9925369..42553b5 100644 (file)
        "right-editsemiprotected": "\"{{int:protect-level-autoconfirmed}}\" булараҡ һаҡланған биттәрҙе төҙәтеү",
        "right-editcontentmodel": "Биттең контент моделен мөхәррирләү",
        "right-editinterface": "Ҡулланыусы интерфейсын үҙгәртеү",
-       "right-editusercssjs": "Башҡа ҡатнашыусыларҙың CSS һәм JS файлдарын мөхәррирләү",
        "right-editusercss": "Башҡа ҡатнашыусыларҙың CSS файлдарын мөхәррирләү",
        "right-edituserjs": "Башҡа ҡатнашыусыларҙың JS файлдарын мөхәррирләү",
        "right-editmyusercss": "Файҙаланыусының CSS файлдарын мөхәррирләү",
        "rcshowhidecategorization": "Биттәр категориялаштырыуын $1",
        "rcshowhidecategorization-show": "Күрһәтергә",
        "rcshowhidecategorization-hide": "Йәшерелгән",
-       "rclinks": "Һуңғы $2 көн эсендәге һуңғы $1 үҙгәртеүҙе күрһәтергә<br />$3",
+       "rclinks": "Һуңғы $2 көн эсендәге һуңғы $1 үҙгәртеүҙе күрһәтергә",
        "diff": "айыр.",
        "hist": "тарих",
        "hide": "йәшер",
        "undeleteviewlink": "ҡарарға",
        "undeleteinvert": "Һайланғандарҙы әйләндерергә",
        "undeletecomment": "Сәбәп:",
-       "undeletedrevisions": "$1 {{PLURAL:$1|өлгө}} тергеҙелде",
-       "undeletedrevisions-files": "{{PLURAL:$1|1=өлгө}} һәм {{PLURAL:$2|файл}} тергеҙелде",
-       "undeletedfiles": "{{PLURAL:$1|файл}} тергеҙелде",
        "cannotundelete": "Юйыуҙы кире алып булманы:\n$1",
        "undeletedpage": "'''$1 бите тергеҙелде'''\n\nҺуңғы юйыуҙарҙы һәм тергеҙеүҙәрҙе ҡарау өсөн, [[Special:Log/delete|юйыу яҙмалары журналын]] ҡарағыҙ.",
        "undelete-header": "Һуңғы юйылған биттәрҙе [[Special:Log/delete|юйыу яҙмалары журналында]] ҡарағыҙ.",
index 585cb1e..4c2c3c6 100644 (file)
        "rcshowhideanons": "$1 penganggo tan meadan",
        "rcshowhidepatr": "$1 suntingan sane kapatroli",
        "rcshowhidemine": "$1 uwahan titiang",
-       "rclinks": "edengang sane untat $1 gentosan anyar $2 dina kaping untat <br />$3",
+       "rclinks": "edengang sane untat $1 gentosan anyar $2 dina kaping untat",
        "diff": "bina",
        "hist": "kawentenan sane lian",
        "hide": "engkebang",
index 5a2c295..ce997c4 100644 (file)
        "rcshowhidepatr": "Kontrolliade Endarunga $1",
        "rcshowhidemine": "Meine Beidreg $1",
        "rcshowhidemine-hide": "Ausblendn",
-       "rclinks": "De letztn Endarunga vo de letztn $2 Dog zoagn<br />$3",
+       "rclinks": "De letztn Endarunga vo de letztn $2 Dog zoagn",
        "diff": "Untaschied",
        "hist": "Versiona",
        "hide": "Ausblendn",
        "undeletebtn": "Wiederherstön",
        "undeletelink": "oschaugn / wiadaheastejn",
        "undeleteviewlink": "oschaugn",
-       "undeletedfiles": "$1 {{PLURAL:$1|Datei|Dateien}} san wieda hergstellt worn",
        "undelete-search-box": "Suach noch gleschde Artiken",
        "undelete-search-submit": "Suach",
        "undelete-show-file-submit": "Jo",
        "htmlform-selectorother-other": "Åndre",
        "logentry-move-move_redir": "$1 hod de Seitn $3 af $4 {{GENDER:$2|verschom}} und hod dabei a Weidaloatung ibaschriem",
        "logentry-move-move_redir-noredirect": "$1 hod de Seitn $3 af $4 {{GENDER:$2|verschom}} und dabei a Weidaloatung ibaschriem, ohne a neiche ozlegn",
-       "searchsuggest-search": "Suach",
+       "searchsuggest-search": "Suach (af Boarisch oda Deutsch)",
        "searchsuggest-containing": "Voitextsuach noch ..."
 }
index 6ecfcb3..9dc0959 100644 (file)
        "rcshowhideanons": "$1 pamarhaseang ndang margoar",
        "rcshowhidepatr": "$1 panotaan na dipamanat",
        "rcshowhidemine": "$1 na hupatota",
-       "rclinks": "Patuduhon $1 parubaan na imbaru dibagasan na $2 ari on<br />$3",
+       "rclinks": "Patuduhon $1 parubaan na imbaru dibagasan na $2 ari on",
        "diff": "duru",
        "hist": "turi",
        "hide": "Bunihon",
index 0fec39a..24880e2 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": "وتی لاگینء جزئیاتء رء شموش کتگ ات؟",
        "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-submit": "وتی اکانتء اڈ کن ات",
        "right-editprotected": "ویرایش مهاپزت بیتگین پیج گون ای حالت \"{{int:protect-level-sysop}}\"",
        "right-editsemiprotected": "ویرایش مهاپزت بیتگین پیج گون ای حالت \"{{int:protect-level-autoconfirmed}}\"",
        "right-editinterface": "دستبر کاربر اصلاح کن",
-       "right-editusercssjs": "دگر کابرانی فایلان  CSS  و JS اصلاح کن",
        "right-editusercss": "دگر کابرانی فایلان CSS اصلاح کن",
        "right-edituserjs": "دگر کابرانی فایلان JS اصلاح کن",
        "right-editmyusercss": "وتیگین سی اس اس فایلانء ویرایش بکن ات",
        "rcshowhidemine": "$1 اصلاحات من",
        "rcshowhidemine-show": "پیش دارگ",
        "rcshowhidemine-hide": "چیردارگ",
-       "rclinks": "پیش دار آهرین$1 تغییرات ته آهرین $2 روچان<br />$3",
+       "rclinks": "پیش دار آهرین$1 تغییرات ته آهرین $2 روچان",
        "diff": "تفاوت",
        "hist": "تاریخ",
        "hide": "پناه",
        "undeleteviewlink": "پیشدارگ",
        "undeleteinvert": "چپکایگ کتن انتخاب",
        "undeletecomment": "نظر:",
-       "undeletedrevisions": "{{PLURAL:$1|1 بازبینی|$1 بازبینی آن}} واترینگ بیت",
-       "undeletedrevisions-files": "{{PLURAL:$1|1 بازبینی|$1بازبینی ان}} و {{PLURAL:$2|1 فایل|$2 فایلان}} برگردینگ بوتن",
-       "undeletedfiles": "{{PLURAL:$1|1 فایل|$1 فایلآن}} واترینگ بین",
        "cannotundelete": "حذف نه کتن پروشت؛\nیک نفری دگه شاید ای صفحهء  پیشتر حذفی ترینتت.",
        "undeletedpage": "'''$1 تررینگ بوتت'''\n\nشوهاز کن [[Special:Log/delete|آمار حذف]] په یک ثبتی چه نوکین حذفیات و بازتررینگان.",
        "undelete-header": "See [[Special:Log/delete|آمار حذف]] په نوکین حذفی صفحات..",
        "revdelete-restricted": "محدودیت آن په مدیران سیستم بوت",
        "revdelete-unrestricted": "به زور چه مدیران سیستم محدودیتان",
        "rightsnone": "(هچ یک)",
-       "revdelete-summary": "خلاصه اصلاح",
        "limitreport-templateargumentsize": "تراشوانِ ارگومینت اندازه",
        "expandtemplates": "پچ کن تمپلیت آنء",
        "expand_templates_intro": "ای تاک حاص لهتی متنء گریت و کل تمپلتان ته آییء برگشتی مزنش کنت.\nآیی هنچوش عمگر تجزیه کنوکء مزن کنت په داب\n<nowiki>{{</nowiki>#language:…}}, و متغییرانی په داب\n<nowiki>{{</nowiki>CURRENTDAY}}&mdash; در حقیقت هر چیزی که ته دو براکتن.\nآیی ای کارء گون توار کنگ تجزیه کنوک مناسب چه مدیا وی کی وت انجام دنت.",
index 2fc4b3c..1c76b3c 100644 (file)
        "externaldberror": "Igwa gayod sala sa arinman kan patunay sa datos-sarayan o ika dae pinagtugutan na bâgohon an saimong panluwas na panindog.",
        "login": "Maglaog",
        "nav-login-createaccount": "Maglaog / magmukna nin panindog",
-       "userlogin": "Maglaog / magmukna nin panindog",
-       "userloginnocreate": "Maglaog ka",
        "logout": "Magluwas",
        "userlogout": "Magluwas",
        "notloggedin": "Dae ka nakalaog",
        "userlogin-noaccount": "Mayo ka nin panindog?",
        "userlogin-joinproject": "Mag-ayon{{SITENAME}}",
-       "nologin": "Mayò ka pa nin panindog (account)? $1.",
-       "nologinlink": "Magmukna nin panindog",
        "createaccount": "Magmukna nin panindog",
-       "gotaccount": "Igwa ka na tabi nin panindog? $1.",
-       "gotaccountlink": "Maglaog",
-       "userlogin-resetlink": "Nakalingaw ka sa panlaog mong detalye?",
        "userlogin-resetpassword-link": "Nalingawan mo an saimong pasa-taramon?",
        "userlogin-helplink2": "Katabangan sa paglalaog",
        "userlogin-loggedin": "Ika nakalaog na tabi bilang si {{GENDER:$1|$1}}.\nGamita an porma sa ibaba sa paglaog bilang ibang paragamit.",
        "createacct-another-email-ph": "Ikaag an estada kan e-surat",
        "createaccountmail": "Gumamit nin sarong temporaryong pampurak na pasa-taramon asin ipadara ini sa pinagsambit na estada kan e-surat",
        "createacct-realname": "Totoong pangaran (opsyonal)",
-       "createaccountreason": "Rason:",
        "createacct-reason": "Rason",
        "createacct-reason-ph": "Tadaw ta ika magmumukna nin ibang panindog",
        "createacct-submit": "Muknaon an saimong panindog",
        "passwordreset-emaildisabled": "E-surat na mga estima pinag-uruntok sa wiking ini.",
        "passwordreset-username": "Paragamit-ngaran:",
        "passwordreset-domain": "Kasakupan:",
-       "passwordreset-capture": "Hilngon an kinaluwasang e-koreo?",
-       "passwordreset-capture-help": "Kun saimong i-tsek ini box, an e-koreo (na igwang temporaryong sekretong panlaog) ipapahiling saimo siring na ini ipagpapadara sa paragamit.",
        "passwordreset-email": "E-koreong address:",
        "passwordreset-emailtitle": "Mga detalye kan panindog sa {{SITENAME}}",
        "passwordreset-emailtext-ip": "May sarong tawo (pwedeng ika gayod, gikan sa IP address na $1) naghahagad nin pagliliwat kan saimong sekretong panlaog para sa{{SITENAME}}($4). An minasunod na paragamit {{PLURAL:$3|panindog iyo an|mga panindog iyo an}} na asosyado kaining e-surat na adres:\n\n$2\n\n{{PLURAL:$3|Ining temporaryong sekretong panlaog|Ining mga temporaryong sekretong panlaog}} mapapaso sa laog nin {{PLURAL:$5|sarong aldaw|$5 mga aldaw}}.\nDapat kang maglaog asin magpili nin sarong baguhon na sekretong panlaog ngunyan. Kun ibang tawo an naghimo kaining kahagadan, o kun saimo nang nagiromdoman an saimong orihinal na sekretong panlaog, asin habo mo nang ribayan ini, ipasipara mo na sana ining mensahe asin ipagpadagos mo nang gamiton an luma mong sekretong panlaog.",
        "saveprefs": "Itagama",
        "restoreprefs": "Balikon an gabos na panugmad na mga panuytoy (sa gabos na mga seksyon)",
        "prefs-editing": "Pighihira",
-       "rows": "Mga hilera:",
-       "columns": "Mga taytay:",
        "searchresultshead": "Hanápon",
        "stub-threshold": "Kasagkoran kan <a href=\"#\" class=\"stub\">takod kan tambô</a> pigpopormato:",
        "stub-threshold-disabled": "Pinagpundo",
        "userrights-reason": "Rason:",
        "userrights-no-interwiki": "Ika mayo tabing permkso na magliwat sa paragamit na karapatan sa ibang wikis.",
        "userrights-nodatabase": "An datos-sarayan $1 bakong eksistido o bakong lokal.",
-       "userrights-nologin": "Ika kaipuhan na [[Special:UserLogin|maglaog ka]] na igwa nin panindog na administrador bago ka makapagtao nin karapatan sa paragamit.",
-       "userrights-notallowed": "Ika mayo tabing permiso na magdugang o magtangkas nin mga katanosan kan paragamit.",
        "userrights-changeable-col": "Mga grupo na mapuwede mong baguhon",
        "userrights-unchangeable-col": "Mga grupo na dae mo mapuwedeng baguhon",
        "userrights-conflict": "Kumplikto sa mga kaliwatan nin mga katanosan kan paragamit! Tabi man pakirikisa asin kumpirmaron an saimong mga kaliwatan.",
-       "userrights-removed-self": "Saimong matrayumpong pinagtangkas an sadire mong mga katanosan. Sa siring, ika dae na tabi makakalaog sa pahinang ini.",
        "group": "Grupo:",
        "group-user": "Mga Paragamit",
        "group-autoconfirmed": "Paragamit na sadiring nagkonpirma",
        "right-editprotected": "Liwaton an mga pahina na protektado bilang \"{{int:protect-level-sysop}}\"",
        "right-editsemiprotected": "Liwaton an mga pahina na protektado bilang \"{{int:protect-level-autoconfirmed}}\"",
        "right-editinterface": "Liwaton an paragamit na olay-panlaog",
-       "right-editusercssjs": "Liwaton an CSS asin JavaScript na mga sagunson kan ibang mga paragamit",
        "right-editusercss": "Liwaton an CSS na mga sagunson kan ibang mga paragamit",
        "right-edituserjs": "Liwaton an JavaScript na mga sagunson kan ibang mga paragamit",
        "right-editmyusercss": "Liwaton an saimong sadireng paragamit na sagunson sa CSS",
        "right-siteadmin": "Kandaduhan asin dae pagkandaduhan an datos-sarayan",
        "right-override-export-depth": "Eksportaron an mga pahina kabali na an pinagkilyawan na mga pahina sagkod sa rarom na 5",
        "right-sendemail": "Magpadara nin e-koreo sa ibang mga paragamit",
-       "right-passwordreset": "Tanawon an e-koreo kan pagbabago nin sekretong panlaog",
        "grant-editmycssjs": "Liwaton an saimong paragamit CSS/JavaScript",
        "grant-editmyoptions": "Liwaton an saimong paragamit na mga kamuyahan",
        "grant-viewdeleted": "Tanawon an pinagpurang mga sagunson asin pahina",
        "rcshowhidemine": "$1 sakong mga pagliliwat",
        "rcshowhidemine-show": "Ipatanaw",
        "rcshowhidemine-hide": "Itago",
-       "rclinks": "Ipahilíng an $1 huring mga kaliwatan sa laog nin huring $2 na mga aldaw<br />$3",
+       "rclinks": "Ipahilíng an $1 huring mga kaliwatan sa laog nin huring $2 na mga aldaw",
        "diff": "kalaenan",
        "hist": "sagaysay",
        "hide": "Tagóon",
        "undeleteviewlink": "hilngon",
        "undeleteinvert": "Baliktada an pinilian",
        "undeletecomment": "An rason:",
-       "undeletedrevisions": "{{PLURAL:$1|1 rebisyon|$1 mga rebisyon}} ipinagbalik",
-       "undeletedrevisions-files": "{{PLURAL:$1|1 rebisyon|$1 mga rebisyon}} asin {{PLURAL:$2|1 sagunson|$2 mga sagunson}} ipinagbalik",
-       "undeletedfiles": "{{PLURAL:$1|1 sagunson|$1 mga sagunson}} ipinagbalik",
        "cannotundelete": "An dae pagpura nagpalya:\n$1",
        "undeletedpage": "'''binalik na an $1 '''\n\nIkonsultar an [[Special:Log/delete|historial nin pagparâ]] para mahiling an lista nin mga kaaaging pagparâ asin pagbalik.",
        "undelete-header": "Hilingon an [[Special:Log/delete|historial kan pagparâ]] kan mga kaaagi pa sanang pinarang páhina.",
        "feedback-thanks": "Salamat! An saimong balik-simbag pinagposte sa pahina \"[$2 $1]\".",
        "searchsuggest-search": "Hanapa baya",
        "searchsuggest-containing": "may laog na...",
-       "api-error-badaccess-groups": "Ika daeng permiso na magkarga nin mga sagunson sa wiking ini.",
        "api-error-badtoken": "Panlaog na kasalaan: Raot na pangilip",
-       "api-error-copyuploaddisabled": "An pagkakarga sa paagi kan URL pinag-untok sa serbidor na ini.",
-       "api-error-duplicate": "Igwa {{PLURAL:$1|nin ibang sagunson|mga iba pang mga sagunson}} na yaon sa sityo na igwa nin kaparehong laog.",
-       "api-error-duplicate-archive": "Igwa {{PLURAL:$1|kaidto nin ibang sagunson|kaidto nin ibang mga sagunson}} na yaon sa sityo na igwa nin kaparehong laog, alagad {{PLURAL:$1|ini kaidto|sinda kaidto}} pinagpura na.",
-       "api-error-empty-file": "An sagunson na saimong pinagsumite daeng laog.",
        "api-error-emptypage": "Nagmumukna nin bago, mayong laog na mga pahina dae pinagtutugutan.",
-       "api-error-fetchfileerror": "Panlaog na kasalaan: May bagay na naging sala habang hinahakot an sagunson.",
-       "api-error-fileexists-forbidden": "Sarong sagunson na igwang ngaran na \"$1\" an yaon na, asin dae puwedeng masalambawan.",
-       "api-error-fileexists-shared-forbidden": "Sarong sagunson na igwang ngaran na \"$1\" an yaon na sa pinagheras na repositoryo nin sagunson, asin dae puwedeng masalambawan.",
-       "api-error-file-too-large": "An sagunson na saimong pinagsumite dakulaon na maray.",
-       "api-error-filename-tooshort": "An pangaran nin sagunson halipoton na maray.",
-       "api-error-filetype-banned": "An tipong ini nin sagunson pinagpangalad na.",
-       "api-error-filetype-banned-type": "$1 {{PLURAL:$4|dae itinutugot na tipo nin sagunson|dae itinutugot na mga tipo nin mga sagunson}}. An pinagtutugutan na {{PLURAL:$3|sagunson iyo an tipo na|mga sagunson iyo an mga tipo na}} $2.",
-       "api-error-filetype-missing": "An pangaran nin sagunson nawawaraan nin ekstensyon.",
-       "api-error-hookaborted": "An modipikasyon na saimong pinagprubaran na hihimoon ipinag-untok nin sarong ekstensyon.",
-       "api-error-http": "Panlaog na kasalaan: Dae nakakakonekta sa serbidor.",
-       "api-error-illegal-filename": "An pangaran nin sagunson dae pinagtutugutan.",
-       "api-error-internal-error": "Panlaog na kasalaan: May bagay na napasala sa pagproseso kan saimong pagkakarga sa wiki.",
-       "api-error-invalid-file-key": "Panlaog na kasalaan: An sagunson dae natagboan sa temporaryong sarayan.",
-       "api-error-missingparam": "Panlaog na kasalaan: Nawawara an mga parametro sa kahagadan.",
-       "api-error-missingresult": "Panlaog na kasalaan: Dae madeterminaran kun an kopya naipadagos.",
-       "api-error-mustbeloggedin": "Ika dapat na nakalaog tanganing makapagkarga nin mga sagunson.",
-       "api-error-mustbeposted": "Panlaog na kasalaan: An kahagadan minakaipo nin HTTP POST.",
-       "api-error-noimageinfo": "An pagkarga nagdagos, alagad an serbidor dae nakapagtao samuya nin anuman na impormasyon manunungod sa sagunson.",
-       "api-error-nomodule": "Panlaog na kasalaan: Mayong pankargang modyul an naikaag.",
-       "api-error-ok-but-empty": "Panlaog na kasalaan: Mayong simbag gikan sa serbidor.",
-       "api-error-overwrite": "An salambawan na sarong eksistido nang sagunson dae pinagtutugutan.",
-       "api-error-stashfailed": "Panlaog na kasalaan: An serbidor nagpalya sa pagsaray kan temporaryong sagunson.",
        "api-error-publishfailed": "Panlaog na kasalaan: An serbidor nagpalya na ipublikar an temporaryong sagunson.",
-       "api-error-stasherror": "Nagkaigwa nin kasalaan mantang ikinakarga an sagunson sa sarayan.",
-       "api-error-timeout": "An serbidor dae nakapagsimbag sa laog kan pinaghunang panahon.",
-       "api-error-unclassified": "May dae midbid na kasalaan an nangyari.",
-       "api-error-unknown-code": "Dae midbid na kasalaan: \"$1\".",
-       "api-error-unknown-error": "Panlaog na kasalaan: May sarong bagay na napasala kan prubaran na ikarga an saimong sagunson.",
+       "api-error-stashfailed": "Panlaog na kasalaan: An serbidor nagpalya sa pagsaray kan temporaryong sagunson.",
        "api-error-unknown-warning": "Dae midbid na patanid: \"$1\".",
        "api-error-unknownerror": "Dae midbidon na kasalaan: \"$1\".",
-       "api-error-uploaddisabled": "An pagkakarga pinag-untok nguna kaining wiki.",
-       "api-error-verification-error": "Ining sagunson baka koraptu, o igwa nin salang ekstensyon.",
        "duration-seconds": "$1 {{PLURAL:$1|segundo|mga segundo}}",
        "duration-minutes": "$1 {{PLURAL:$1|minuto|minutos}}",
        "duration-hours": "$1 {{PLURAL:$1|oras|mga oras}}",
index 54569a2..4495973 100644 (file)
        "readonlywarning": "<strong>Папярэджаньне: База зьвестак была заблякаваная для тэхнічнага абслугоўваньня, таму немагчыма цяпер захаваць Вашыя зьмены.</strong>\nВы можаце скапіяваць тэкст у файл на Вашым кампутары, а пазьней захаваць сюды.\n\nСыстэмны адміністратар, які заблякаваў базу зьвестак, прапанаваў наступнае тлумачэньне: $1",
        "protectedpagewarning": "<strong>Папярэджаньне: гэтая старонка была абароненая, таму толькі адміністратары могуць рэдагаваць яе.</strong>\nАпошні запіс з журнала пададзены ніжэй для даведкі:",
        "semiprotectedpagewarning": "<strong>Заўвага:</strong> гэтая старонка была абароненая, таму рэдагаваць яе могуць толькі зарэгістраваныя ўдзельнікі.\nАпошні запіс з журнала пададзены ніжэй для даведкі:",
-       "cascadeprotectedwarning": "'''Папярэджаньне:''' гэтая старонка абароненая, толькі ўдзельнікі з правамі адміністратараў могуць рэдагаваць яе, таму што яна ўключаная ў {{PLURAL:$1|1=наступную старонку|наступныя старонкі}} з каскаднай абаронай:",
+       "cascadeprotectedwarning": "'''Папярэджаньне:''' гэтая старонка абароненая, толькі ўдзельнікі з [[Special:ListGroupRights|адмысловымі правамі]] могуць рэдагаваць яе, таму што яна ўключаная ў {{PLURAL:$1|1=наступную старонку|наступныя старонкі}} з каскаднай абаронай:",
        "titleprotectedwarning": "<strong>Папярэджаньне: гэтая старонка была абароненая і для яе стварэньня патрабуюцца [[Special:ListGroupRights|адпаведныя правы]].</strong>\nАпошні запіс з журнала пададзены ніжэй для даведкі:",
        "templatesused": "{{PLURAL:$1|Шаблён, які ўжываецца|Шаблёны, якія ўжываюцца}} на гэтай старонцы:",
        "templatesusedpreview": "У гэтым папярэднім праглядзе {{PLURAL:$1|1=выкарыстаны наступны шаблён|выкарыстаныя наступныя шаблёны}}:",
        "revdelete-reasonotherlist": "Іншая прычына",
        "revdelete-edit-reasonlist": "Рэдагаваць прычыны выдаленьня",
        "revdelete-offender": "Аўтар вэрсіі:",
-       "suppressionlog": "Ð\96Ñ\83Ñ\80нал Ñ\81Ñ\85аванÑ\8cнÑ\8fÑ\9e",
-       "suppressionlogtext": "Ð\9dÑ\96жÑ\8dй Ð¿Ð°Ð´Ð°Ð´Ð·ÐµÐ½Ñ\8b Ñ\81Ñ\8cпÑ\96Ñ\81 Ð²Ñ\8bдаленÑ\8cнÑ\8fÑ\9e Ñ\96 Ð±Ð»Ñ\8fкаванÑ\8cнÑ\8fÑ\9e, Ñ\81Ñ\85аванÑ\8bÑ\85 Ð½Ð°Ð²Ð°Ñ\82 Ð°Ð´ Ð°Ð´Ð¼Ñ\96нÑ\96Ñ\81Ñ\82Ñ\80аÑ\82аÑ\80аÑ\9e.\nÐ\93лÑ\8fдзÑ\96Ñ\86е [[Special:BlockList|Ñ\81Ñ\8cпÑ\96Ñ\81 Ð±Ð»Ñ\8fкаванÑ\8cнÑ\8fÑ\9e]], ÐºÐ°Ð± Ð¿Ð°Ð³Ð»Ñ\8fдзець сьпіс цяперашніх блякаваньняў.",
+       "suppressionlog": "Журнал хаваньняў",
+       "suppressionlogtext": "Ð\9dÑ\96жÑ\8dй Ð¿Ð°Ð´Ð°Ð´Ð·ÐµÐ½Ñ\8b Ñ\81Ñ\8cпÑ\96Ñ\81 Ð²Ñ\8bдаленÑ\8cнÑ\8fÑ\9e Ñ\96 Ð±Ð»Ñ\8fкаванÑ\8cнÑ\8fÑ\9e, Ñ\81Ñ\85аванÑ\8bÑ\85 Ð°Ð´ Ð°Ð´Ð¼Ñ\96нÑ\96Ñ\81Ñ\82Ñ\80аÑ\82аÑ\80аÑ\9e.\nÐ\93лÑ\8fдзÑ\96Ñ\86е [[Special:BlockList|Ñ\81Ñ\8cпÑ\96Ñ\81 Ð±Ð»Ñ\8fкаванÑ\8cнÑ\8fÑ\9e]], ÐºÐ°Ð± Ñ\83баÑ\87Ñ\8bць сьпіс цяперашніх блякаваньняў.",
        "mergehistory": "Аб’яднаць гісторыі старонак",
        "mergehistory-header": "Гэтая старонка дазваляе аб'яднаць гісторыю рэдагаваньняў адной старонкі з гісторыяй іншай, новай старонкі.\nУпэўніцеся, што гэтыя зьмены не парушаць пасьлядоўнасьць гісторыі старонкі.",
        "mergehistory-box": "Аб’яднаць гісторыі рэдагаваньняў дзьвюх старонак:",
        "mergehistory-from": "Крынічная старонка:",
        "mergehistory-into": "Мэтавая старонка:",
-       "mergehistory-list": "Гісторыя рэдагаваньняў, якую магчыма аб'яднаць",
+       "mergehistory-list": "Гісторыя рэдагаваньняў, якую магчыма абяднаць",
        "mergehistory-merge": "Наступныя вэрсіі [[:$1]] можна аб'яднаць у [[:$2]].\nКарыстайцеся кнопкамі для аб'яднаньня толькі выбранага дыяпазону рэдагаваньняў.\nЗаўважце, што выкарыстаньне навігацыйных спасылак выдаліць зьвесткі ў гэтым слупку.",
-       "mergehistory-go": "Ð\9fаказаÑ\86Ñ\8c Ð²Ñ\8dÑ\80Ñ\81Ñ\96Ñ\96, Ñ\8fкÑ\96Ñ\8f Ð¼Ð°Ð³Ñ\87Ñ\8bма Ð°Ð±'яднаць",
-       "mergehistory-submit": "Аб'яднаць гісторыі рэдагаваньняў",
-       "mergehistory-empty": "Ð\9dÑ\8fма Ð³Ñ\96Ñ\81Ñ\82оÑ\80Ñ\8bÑ\96 Ñ\80Ñ\8dдагаванÑ\8cнÑ\8fÑ\9e, Ñ\8fкÑ\83Ñ\8e Ð¼Ð°Ð³Ñ\87Ñ\8bма Ð°Ð±'яднаць.",
-       "mergehistory-done": "$3 {{PLURAL:$3|вэрсія|вэрсіі|вэрсіяў}} з $1 пасьпяхова аб’яднаныя ў [[:$2]].",
-       "mergehistory-fail": "Не атрымалася аб'яднаць гісторыі старонак. Калі ласка, праверце парамэтры старонкі і часу.",
+       "mergehistory-go": "Ð\9fаказаÑ\86Ñ\8c Ð¿Ñ\80аÑ\9eкÑ\96, Ñ\8fкÑ\96Ñ\8f Ð¼Ð°Ð³Ñ\87Ñ\8bма Ð°Ð±â\80\99яднаць",
+       "mergehistory-submit": "Абяднаць гісторыі рэдагаваньняў",
+       "mergehistory-empty": "Ð\9dÑ\8fма Ð¿Ñ\80авак, Ñ\8fкÑ\96Ñ\8f Ð¼Ð°Ð³Ñ\87Ñ\8bма Ð°Ð±â\80\99яднаць.",
+       "mergehistory-done": "$3 {{PLURAL:$3|вэрсія|вэрсіі|вэрсіяў}} з $1 {{PLURAL:$3|1=была аб’яднаная|былі аб’яднаныя}} ў [[:$2]].",
+       "mergehistory-fail": "Не атрымалася аб’яднаць гісторыі старонак, калі ласка, праверце парамэтры старонкі і часу.",
        "mergehistory-fail-bad-timestamp": "Няслушная метка часу.",
        "mergehistory-fail-invalid-source": "Няслушная старонка-крыніца.",
        "mergehistory-fail-invalid-dest": "Няслушная мэтавая старонка.",
        "saveusergroups": "Захаваць групы {{GENDER:$1|ўдзельнікаў і ўдзельніц}}",
        "userrights-groupsmember": "Уваходзіць у:",
        "userrights-groupsmember-auto": "Няяўны чалец:",
-       "userrights-groups-help": "Тут можна зьмяняць групы, да якіх належыць гэты ўдзельнік:\n* Адзначанае поле побач з назвай групы пазначае прыналежнасьць удзельніка да групы.\n* Пустое поле азначае, што ўдзельнік не належыць да групы.\n* Знак * азначае, што вы ня зможаце выдаліць удзельніка з групы, калі дададзіце яго да яе, і наадварот.\n* Знак # азначае, што вы можаце толькі зьменшыць час сканчэньня тэрміну дзеяньня гэтай групы, вы ня можаце павялічыць яго.",
+       "userrights-groups-help": "Тут можна зьмяняць групы, да якіх належыць гэты ўдзельнік:\n* Адзначанае поле побач з назвай групы пазначае прыналежнасьць удзельніка да групы.\n* Пустое поле азначае, што ўдзельнік не належыць да групы.\n* Знак * азначае, што вы ня зможаце выдаліць удзельніка з групы, калі дададзіце яго да яе, і наадварот.\n* Знак # азначае, што вы можаце толькі зьменшыць час сканчэньня тэрміну дзеяньня сяброўства ў гэтай групе, вы ня можаце павялічыць яго.",
        "userrights-reason": "Прычына:",
        "userrights-no-interwiki": "Вы ня маеце дазволу зьмяняць правы ўдзельнікаў іншых вікаў.",
        "userrights-nodatabase": "Базы зьвестак $1 не існуе альбо яна не зьяўляецца лякальнай.",
        "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-cannot-shorten-expiry": "Вы ня можаце падоўжыць час сяброўства ў групе «$1». Толькі ўдзельнікі з правамі на дадаваньне і выдаленьне гэтай групы могуць падаўжаць час сяброўства.",
        "userrights-conflict": "Канфлікт пры зьмене правоў удзельнікаў! Калі ласка, праверце і захавайце вашыя зьмены.",
        "group": "Група:",
        "group-user": "Удзельнікі",
        "right-editsemiprotected": "рэдагаваньне старонак, абароненых у рэжыме «{{int:protect-level-autoconfirmed}}»",
        "right-editcontentmodel": "рэдагаваньне мадэлі зьместу старонкі",
        "right-editinterface": "рэдагаваньне інтэрфэйса карыстальніка",
-       "right-editusercssjs": "рэдагаваньне CSS і JS файлаў іншых удзельнікаў",
        "right-editusercss": "рэдагаваньне CSS файлаў іншых удзельнікаў",
        "right-edituserjs": "рэдагаваньне JS файлаў іншых удзельнікаў",
        "right-editmyusercss": "рэдагаваць уласныя карыстальніцкія CSS-файлы",
        "rcfilters-hideminor-conflicts-typeofchange": "Некаторыя тыпы зьменаў ня могуць быць вызначаныя як «дробныя», таму гэты фільтар канфліктуе з наступнымі фільтрамі «Тыпаў зьменаў»: $1",
        "rcfilters-typeofchange-conflicts-hideminor": "Гэты фільтар тыпаў зьменаў канфліктуе зь фільтрам «Дробныя праўкі». Некаторыя тыпы зьменаў ня могуць быць вызначаныя як «дробныя».",
        "rcnotefrom": "Ніжэй {{PLURAL:$5|знаходзіцца зьмена|знаходзяцца зьмены}} з <strong>$4 $3</strong> (да <strong>$1</strong> на старонку).",
+       "rclistfromreset": "Скінуць выбар даты",
        "rclistfrom": "Паказаць зьмены з $2 $3",
        "rcshowhideminor": "$1 дробныя праўкі",
        "rcshowhideminor-show": "Паказаць",
        "rcshowhidecategorization": "$1 катэгарызацыю старонак",
        "rcshowhidecategorization-show": "Паказаць",
        "rcshowhidecategorization-hide": "Схаваць",
-       "rclinks": "Паказаць апошнія $1 зьменаў за мінулыя $2 дзён<br />$3",
+       "rclinks": "Паказаць апошнія $1 зьменаў за мінулыя $2 дзён",
        "diff": "розьн",
        "hist": "гіст",
        "hide": "Схаваць",
        "php-uploaddisabledtext": "Загрузка файлаў была адключаная ў парамэтрах канфігурацыі PHP. Калі ласка, праверце значэньне парамэтра «file_uploads».",
        "uploadscripted": "Гэты файл утрымлівае HTML-код альбо скрыпт, які можа памылкова апрацоўвацца браўзэрам.",
        "upload-scripted-pi-callback": "Немагчыма загрузіць файл, які ўтрымлівае інструкцыі апрацоўкі табліцы стыляў XML.",
+       "upload-scripted-dtd": "Немагчыма загрузіць SVG-файлы, якія ўтрымліваюць нестандартнае DTD-абвяшчэньне.",
        "uploaded-script-svg": "У загружаным SVG-файле знойдзены небясьпечны элемэнт з падтрымкай сцэнароў «$1».",
        "uploaded-hostile-svg": "Знойдзены небясьпечны CSS у элемэнце стылю загружанага SVG-файла.",
        "uploaded-event-handler-on-svg": "Усталёўваць атрыбуты апрацоўніка падзеяў <code>$1=\"$2\"</code> не дазволена для SVG-файлаў.",
        "undeleteviewlink": "паказаць",
        "undeleteinvert": "Адваротны выбар",
        "undeletecomment": "Прычына:",
-       "undeletedrevisions": "{{PLURAL:$1|адноўленая $1 вэрсія|адноўленыя $1 вэрсіі|адноўленыя $1 вэрсіяў}}",
-       "undeletedrevisions-files": "адноўленыя $1 {{PLURAL:$1|вэрсія|вэрсіі|вэрсіяў}} і $2 {{PLURAL:$2|файл|файлы|файлаў}}",
-       "undeletedfiles": "{{PLURAL:$1|адноўлены $1 файл|адноўленыя $1 файлы|адноўленыя $1 файлаў}}",
        "cannotundelete": "Некаторыя або ўсе аднаўленьні не былі выкананыя:\n$1",
        "undeletedpage": "'''Старонка $1 была адноўленая'''\n\nГлядзіце [[Special:Log/delete|журнал выдаленьняў]] для прагляду апошніх выдаленьняў і аднаўненьняў.",
        "undelete-header": "Глядзіце [[Special:Log/delete|журнал выдаленьняў]] для прагляду апошніх выдаленьняў.",
        "sp-contributions-uploads": "загрузкі",
        "sp-contributions-logs": "журналы падзеяў",
        "sp-contributions-talk": "гутаркі",
-       "sp-contributions-userrights": "кіраваньне правамі ўдзельнікаў і ўдзельніц",
+       "sp-contributions-userrights": "кіраваньне правамі {{GENDER:$1|ўдзельніка|ўдзельніцы}}",
        "sp-contributions-blocked-notice": "{{GENDER:$1|Гэты ўдзельнік у дадзены момант заблякаваны|Гэтая ўдзельніца ў дадзены момант заблякаваная}}. Апошні запіс з журнала блякаваньняў пададзены ніжэй для даведкі:",
        "sp-contributions-blocked-notice-anon": "Гэты IP-адрас у дадзены момант заблякаваны.\nАпошні запіс з журнала блякаваньняў пададзены ніжэй для даведкі:",
        "sp-contributions-search": "Пошук унёску",
        "unblocked-id": "Блякаваньне $1 зьнятае",
        "unblocked-ip": "[[Special:Contributions/$1|$1]] быў разблякаваны.",
        "blocklist": "Заблякаваныя ўдзельнікі",
+       "autoblocklist": "Аўтаблякаваньні",
+       "autoblocklist-submit": "Шукаць",
+       "autoblocklist-legend": "Сьпіс аўтаблякаваньняў",
+       "autoblocklist-localblocks": "{{PLURAL:$1|1=Лякальнае аўтаблякаваньне|Лякальныя аўтаблякаваньні}}",
+       "autoblocklist-empty": "Сьпіс аўтаблякаваньняў пусты.",
+       "autoblocklist-otherblocks": "{{PLURAL:$1|1=Іншае аўтаблякаваньне|Іншыя аўтаблякаваньні}}",
        "ipblocklist": "Заблякаваныя ўдзельнікі",
        "ipblocklist-legend": "Пошук заблякаванага ўдзельніка",
        "blocklist-userblocks": "Схаваць блякаваньні рахункаў",
        "anonymous": "{{PLURAL:$1|1=Ананімны ўдзельнік ці ўдзельніца|Ананімныя ўдзельнікі і ўдзельніцы}} {{GRAMMAR:родны|{{SITENAME}}}}",
        "siteuser": "Удзельнік/удзельніца {{GRAMMAR:родны|{{SITENAME}}}} $1",
        "anonuser": "Ананімны ўдзельнік {{GRAMMAR:родны|{{SITENAME}}}} $1",
-       "lastmodifiedatby": "Гэтую старонку апошні раз рэдагаваў $3 $2, $1.",
+       "lastmodifiedatby": "Гэтую старонку апошні раз {{GENDER:$4|рэдагаваў|рэдагавала}} $3 $2 $1.",
        "othercontribs": "На аснове працы $1.",
        "others": "іншыя",
        "siteusers": "{{PLURAL:$2|1={{GENDER:$1|Удзельнік|Удзельніца}}|Удзельнікі}} {{GRAMMAR:родны|{{SITENAME}}}} $1",
        "htmlform-user-not-valid": "<strong>$1</strong> — некарэктнае імя карыстальніка.",
        "logentry-delete-delete": "$1 {{GENDER:$2|выдаліў|выдаліла}} старонку $3",
        "logentry-delete-delete_redir": "$1 {{GENDER:$2|выдаліў|выдаліла}} перанакіраваньне $3 шляхам перазапісу",
-       "logentry-delete-restore": "$1 {{GENDER:$2|аднавіў|аднавіла}} старонку $3",
+       "logentry-delete-restore": "$1 {{GENDER:$2|аднавіў|аднавіла}} старонку $3 ($4)",
+       "logentry-delete-restore-nocount": "$1 {{GENDER:$2|аднавіў|аднавіла}} старонку $3",
+       "restore-count-revisions": "$1 {{PLURAL:$1|вэрсія|вэрсіі|вэрсіяў}}",
        "logentry-delete-event": "$1 {{GENDER:$2|зьмяніў|зьмяніла}} бачнасьць $5 {{PLURAL:$5|1=падзеі ў журнале|падзеяў у журнале}} на $3: $4",
        "logentry-delete-revision": "$1 {{GENDER:$2|зьмяніў|зьмяніла}} бачнасьць $5 {{PLURAL:$5|вэрсіі|вэрсіяў}} старонкі $3: $4",
        "logentry-delete-event-legacy": "$1 {{GENDER:$2|зьмяніў|зьмяніла}} бачнасьць падзеяў у журнале на $3",
        "authmanager-realname-label": "Сапраўднае імя",
        "authmanager-realname-help": "Сапраўднае імя ўдзельніка",
        "authmanager-provider-password": "Аўтэнтыфікацыя на аснове паролю",
+       "authmanager-provider-password-domain": "Аўтэнтыфікацыя на аснове паролю і дамэну",
        "authmanager-provider-temporarypassword": "Часовы пароль",
        "changecredentials": "Зьмена ўліковых зьвестак",
        "removecredentials": "Выдаленьне ўліковых зьвестак",
index d076f51..1a66112 100644 (file)
        "right-editsemiprotected": "Правіць старонкі, што пад аховай \"{{int:protect-level-autoconfirmed}}\"",
        "right-editcontentmodel": "Рэдагаваць мадэль змесціва старонкі",
        "right-editinterface": "Правіць карыстальніцкі інтэрфейс",
-       "right-editusercssjs": "Правіць файлы CSS і JS іншых удзельнікаў",
        "right-editusercss": "Правіць файлы CSS іншых удзельнікаў",
        "right-edituserjs": "Правіць файлы JS іншых удзельнікаў",
        "right-editmyusercss": "Правіць уласныя файлы CSS",
        "rcshowhidecategorization": "$1 катэгарызацыю старонак",
        "rcshowhidecategorization-show": "Паказаць",
        "rcshowhidecategorization-hide": "Схаваць",
-       "rclinks": "Паказаць апошнія $1 змен за мінулыя $2 дзён<br />$3",
+       "rclinks": "Паказаць апошнія $1 змен за мінулыя $2 дзён",
        "diff": "розн.",
        "hist": "гіст.",
        "hide": "Не ўлічваць",
        "undeleteviewlink": "паказаць",
        "undeleteinvert": "Перавярнуць выбранае",
        "undeletecomment": "Прычына:",
-       "undeletedrevisions": "Адноўлен{{PLURAL:$1|а 1 версія|ы $1 версіі|ы $1 версій}}",
-       "undeletedrevisions-files": "Адноўлен{{PLURAL:$1|а 1 версія|ы $1 версіі|ыя $1 версій}} і {{PLURAL:$2|1 файл|$2 файлы|$2 файлаў}}",
-       "undeletedfiles": "Адноўлен{{PLURAL:$1|ы 1 файл|ы $1 файлы|ыя $1 файлаў}}",
        "cannotundelete": "Не ўдалося аднавіць:\n$1",
        "undeletedpage": "'''$1 была адноўлена'''\n\nПраверце пералік нядаўніх сціранняў і аднаўленняў у [[Special:Log/delete|журнале сціранняў]].",
        "undelete-header": "Нядаўна сцёртыя старонкі можна паглядзець у [[Special:Log/delete|журнале сціранняў]].",
index 1f57bb6..b59d50e 100644 (file)
@@ -55,7 +55,7 @@
        "tog-editondblclick": "Редактиране на страниците чрез двойно щракване",
        "tog-editsectiononrightclick": "Възможност за редактиране на раздел при щракване с десния бутон върху заглавието му",
        "tog-watchcreations": "Добавяне на създадените от мен страници и качените от мен файлове към списъка ми за наблюдение",
-       "tog-watchdefault": "Ð\94обавÑ\8fне Ð½Ð° Ñ\81Ñ\82Ñ\80аниÑ\86иÑ\82е, ÐºÐ¾Ð¸Ñ\82о Ñ\80едакÑ\82иÑ\80ам, Ð² списъка ми за наблюдение",
+       "tog-watchdefault": "Ð\94обавÑ\8fне Ð½Ð° Ñ\81Ñ\82Ñ\80аниÑ\86иÑ\82е, ÐºÐ¾Ð¸Ñ\82о Ñ\80едакÑ\82иÑ\80ам, ÐºÑ\8aм списъка ми за наблюдение",
        "tog-watchmoves": "Добавяне на преместените от мен страници и файлове към списъка ми за наблюдение",
        "tog-watchdeletion": "Добавяне на изтритите от мен страници и файлове към списъка ми за наблюдение",
        "tog-watchuploads": "Добавяне на новите качени от мен файлове към списъка ми за наблюдение",
@@ -92,8 +92,8 @@
        "editfont-style": "Стил на шрифта в кутията за редактиране:",
        "editfont-default": "По подразбиране за браузъра",
        "editfont-monospace": "Равноширок шрифт",
-       "editfont-sansserif": "ШÑ\80иÑ\84Ñ\82 Ð±ÐµÐ· Ð¸Ð·Ð²Ð¸Ð²ÐºÐ¸",
-       "editfont-serif": "ШÑ\80иÑ\84Ñ\82 Ñ\81 Ð¸Ð·Ð²Ð¸Ð²ÐºÐ¸",
+       "editfont-sansserif": "Ð\9dеÑ\81еÑ\80иÑ\84ен Ñ\88Ñ\80иÑ\84Ñ\82",
+       "editfont-serif": "СеÑ\80иÑ\84ен Ñ\88Ñ\80иÑ\84Ñ\82",
        "sunday": "неделя",
        "monday": "понеделник",
        "tuesday": "вторник",
        "category_header": "Страници в категория „$1“",
        "subcategories": "Подкатегории",
        "category-media-header": "Файлове в категория „$1“",
-       "category-empty": "''В момента тази категория не съдържа страници или файлове.''",
+       "category-empty": "<em>В момента тази категория не съдържа страници или файлове.</em>",
        "hidden-categories": "{{PLURAL:$1|Скрита категория|Скрити категории}}",
        "hidden-category-category": "Скрити категории",
        "category-subcat-count": "{{PLURAL:$2|Тази категория съдържа само една подкатегория.|{{PLURAL:$1|Показана е една|Показани са $1}} от общо $2 подкатегории на тази категория.}}",
        "talk": "Беседа",
        "views": "Прегледи",
        "toolbox": "Инструменти",
+       "tool-link-userrights": "Промяна на {{GENDER:$1|потребителските}} групи",
+       "tool-link-userrights-readonly": "Преглед на {{GENDER:$1|потребителските}} групи",
        "tool-link-emailuser": "Писмо до {{GENDER:$1|потребителя}}",
        "userpage": "Потребителска страница",
        "projectpage": "Проектна страница",
        "redirectedfrom": "(пренасочване от $1)",
        "redirectpagesub": "Пренасочваща страница",
        "redirectto": "Пренасочване към:",
-       "lastmodifiedat": "Последна промяна на страницата: в $2, на $1.",
+       "lastmodifiedat": "Последна редакция на страницата: в $2, на $1.",
        "viewcount": "Страницата е била преглеждана {{PLURAL:$1|един път|$1 пъти}}.",
        "protectedpage": "Защитена страница",
        "jumpto": "Направо към:",
        "pool-timeout": "Изтичане на времето за заключване на страницата",
        "pool-queuefull": "Опашката за заявки е пълна",
        "pool-errorunknown": "Непозната грешка",
-       "poolcounter-usage-error": "Грешка при ползване $1",
+       "poolcounter-usage-error": "Грешка при употреба: $1",
        "aboutsite": "За {{SITENAME}}",
        "aboutpage": "Project:За {{SITENAME}}",
        "copyright": "Освен ако не е посочено друго, съдържанието е достъпно при условията на $1.",
        "currentevents-url": "Project:Текущи събития",
        "disclaimers": "Предупреждение",
        "disclaimerpage": "Project:Предупреждение",
-       "edithelp": "Ð\9fомоÑ\89 Ð¿Ñ\80и редактиране",
+       "edithelp": "Ð\9fомоÑ\89 Ð·Ð° редактиране",
        "helppage-top-gethelp": "Помощ",
        "mainpage": "Начална страница",
        "mainpage-description": "Начална страница",
        "portal-url": "Проект:Портал на общността",
        "privacy": "Поверителност",
        "privacypage": "Проект:Защита на личните данни",
-       "badaccess": "Грешка при достъп",
-       "badaccess-group0": "Ð\9dÑ\8fмаÑ\82е Ð¿Ñ\80ава Ð´Ð° Ð¸Ð·Ð²Ñ\8aÑ\80Ñ\88иÑ\82е Ð¸Ñ\81каното действие.",
-       "badaccess-groups": "Ð\98Ñ\81каното действие могат да изпълнят само потребители от {{PLURAL:$2|групата|някоя от следните групи:}} $1.",
+       "badaccess": "Ð\93Ñ\80еÑ\88ка Ð¿Ñ\80и Ð¿Ñ\80аваÑ\82а Ð½Ð° Ð´Ð¾Ñ\81Ñ\82Ñ\8aп",
+       "badaccess-group0": "Ð\9dÑ\8fмаÑ\82е Ð¿Ñ\80ава Ð´Ð° Ð¸Ð·Ð²Ñ\8aÑ\80Ñ\88иÑ\82е Ð·Ð°Ñ\8fвеното действие.",
+       "badaccess-groups": "Ð\97аÑ\8fвеното действие могат да изпълнят само потребители от {{PLURAL:$2|групата|някоя от следните групи:}} $1.",
        "versionrequired": "Изисква се версия $1 на МедияУики",
        "versionrequiredtext": "Използването на тази страница изисква версия $1 на софтуера МедияУики. Вижте [[Special:Version|текущата версия]].",
        "ok": "Добре",
        "filerenameerror": "Файлът „$1“ не можа да бъде преименуван на „$2“.",
        "filedeleteerror": "Файлът „$1“ не можа да бъде изтрит.",
        "directorycreateerror": "Невъзможно е да бъде създадена директория „$1“.",
-       "directoryreadonlyerror": "Директория \"$1\" е само за четене.",
-       "directorynotreadableerror": "Директория \"$1\" не може да бъде четена.",
+       "directoryreadonlyerror": "Директория „$1“ е само за четене.",
+       "directorynotreadableerror": "Директория „$1“ не може да бъде четена.",
        "filenotfound": "Файлът „$1“ не беше намерен.",
        "unexpected": "Неочаквана стойност: „$1“=„$2“.",
-       "formerror": "Ð\92Ñ\8aзникна Ð³Ñ\80еÑ\88ка Ð¿Ñ\80и Ð¸Ð·Ð¿Ñ\80аÑ\89ане Ð½Ð° Ñ\84оÑ\80мÑ\83лÑ\8fÑ\80а.",
+       "formerror": "Ð\93Ñ\80еÑ\88ка: Ð¤Ð¾Ñ\80мÑ\83лÑ\8fÑ\80Ñ\8aÑ\82 Ð½Ðµ Ð¼Ð¾Ð¶Ðµ Ð´Ð° Ð±Ñ\8aде Ð¸Ð·Ð¿Ñ\80аÑ\82ен.",
        "badarticleerror": "Действието не може да бъде изпълнено на тази страница.",
        "cannotdelete": "Указаната страница или файл \"$1\" не можа да бъде изтрит(а). Възможно е вече да е бил(а) изтрит(а) от някой друг.",
        "cannotdelete-title": "Страницата „$1“ не може да бъде изтрита",
        "perfcachedts": "Данните са складирани и обновени за последно на $1. Най-много {{PLURAL:$4|един резултат е допустим и наличен|$4 резултата са допустими и налични}} в складираното копие.",
        "querypage-no-updates": "Обновяването на тази страница в момента е изключено. Засега данните тук няма да бъдат обновявани.",
        "viewsource": "Преглед на кода",
-       "viewsource-title": "Ð\9fÑ\80еглеждане на кода на $1",
+       "viewsource-title": "Ð\9fÑ\80еглед на кода на $1",
        "actionthrottled": "Ограничение в скоростта",
        "actionthrottledtext": "Като част от защитата против спам, многократното повтаряне на това действие за кратък период от време е ограничено и вие вече сте надвишили лимита. Моля опитайте отново след няколко минути.",
        "protectedpagetext": "Тази страница е защитена, за да се предотвратят редактиране или други действия.",
        "viewsourcetext": "Можете да разгледате и да копирате кодa на страницата.",
        "viewyourtext": "Можете да прегледате и копирате изходния код на <strong>вашите редакции</strong> на тази страница.",
        "protectedinterface": "Тази страница съдържа текст, нужен за работата на системата. Тя е защитена против редактиране, за да се предотвратят възможни злоупотреби.\nЗа извършване на промяна за всички уикита, посетете [https://translatewiki.net/ translatewiki.net], проектът за локализация на MediaWiki.",
-       "editinginterface": "<strong>Внимание:</strong> Редактирате страница, която се използва за текстовия интерфейс на софтуера. Промяната й ще повлияе на външния вид на уикито.",
+       "editinginterface": "<strong>Внимание:</strong> Редактирате страница, която се използва за текстовия интерфейс на софтуера. Промяната ѝ ще повлияе на външния вид на уикито.",
        "translateinterface": "За да добавите или промените преводи за всички уикита, моля, използвайте [https://translatewiki.net/ translatewiki.net], локализиращия проект на МедияУики.",
        "cascadeprotected": "Тази страница е защитена против редактиране, защото е включена в {{PLURAL:$1|следната страница, която от своя страна има|следните страници, които от своя страна имат}} „каскадна“ защита:\n$2",
        "namespaceprotected": "Нямате права за редактиране на страници в именно пространство '''$1'''.",
        "customcssprotected": "Нямате права за редактиране на тази CSS страница, защото тя съдържа чужди потребителски настройки.",
-       "customjsprotected": "Нямате права за редактиране на тази JavaScript страница, защото тя съдържа чужди потребителски настройки.",
+       "customjsprotected": "Нямате права за редактиране на тази JavaScript страница, тъй като съдържа чужди потребителски настройки.",
        "mycustomcssprotected": "Нямате права за редактиране на тази CSS страница.",
        "mycustomjsprotected": "Нямате права за редактиране на тази JavaScript страница.",
        "myprivateinfoprotected": "Нямате права да редактирате личната си информация.",
        "exception-nologin": "Не сте влезли в системата",
        "exception-nologin-text": "За достъп до избраното действие или страница е необходимо влизане в системата.",
        "exception-nologin-text-manual": "За достъп до избраното действие или страница е необходимо $1 в системата.",
-       "virus-badscanner": "Лоша конфигурация: непознат скенер за вируси: ''$1''",
-       "virus-scanfailed": "сканирането не сполучи (код $1)",
+       "virus-badscanner": "Лоша конфигурация: непознат скенер за вируси: <em>$1</em>",
+       "virus-scanfailed": "неуспешно сканиране (код $1)",
        "virus-unknownscanner": "непознат антивирус:",
        "logouttext": "'''Излязохте от системата.'''\n\nОбърнете внимание, че някои страници все още ще се показват така, сякаш сте влезли, докато не изтриете кеша на браузъра.",
        "cannotlogoutnow-title": "Не може да излезете сега.",
        "pt-login-button": "Влизане",
        "pt-createaccount": "Създаване на сметка",
        "pt-userlogout": "Излизане",
-       "php-mail-error-unknown": "Неизвестна грешка в mail() функцията на PHP",
+       "php-mail-error-unknown": "Неразпозната грешка във функция mail() на PHP.",
        "user-mail-no-addy": "Опитвате се да изпратите е-писмо без да е посочен адрес за електронна поща.",
        "user-mail-no-body": "Опитвате се да изпратите е-писмо с празно или изключително кратко съдържание.",
        "changepassword": "Смяна на парола",
        "oldpassword": "Стара парола:",
        "newpassword": "Нова парола:",
        "retypenew": "Повтори новата парола:",
-       "resetpass_submit": "Ð\98збиÑ\80ане на парола и влизане",
+       "resetpass_submit": "УÑ\81Ñ\82ановÑ\8fване на парола и влизане",
        "changepassword-success": "Паролата беше променена успешно!",
        "changepassword-throttled": "Направили сте твърде много опити да въведете паролата за тази сметка.\nНеобходимо е да изчакате $1 преди да опитате отново.",
        "botpasswords": "Пароли за ботове",
        "botpasswords-deleted-body": "Паролата на бот „$1“ на потребител „$2“ е премахната.",
        "resetpass_forbidden": "Не е разрешена смяна на паролата",
        "resetpass_forbidden-reason": "Паролите не могат да се променят: $1",
-       "resetpass-no-info": "Ð\97а Ð´Ð° Ð¸Ð¼Ð°Ñ\82е Ð´Ð¾Ñ\81Ñ\82Ñ\8aп Ð´Ð¾ Ñ\82ази Ñ\81Ñ\82Ñ\80аниÑ\86а Ð´Ð¸Ñ\80екÑ\82но, Ð½ÐµÐ¾Ð±Ñ\85одимо Ðµ да влезете в системата.",
+       "resetpass-no-info": "Ð\97а Ð´Ð° Ð¸Ð¼Ð°Ñ\82е Ð´Ð¸Ñ\80екÑ\82ен Ð´Ð¾Ñ\81Ñ\82Ñ\8aп Ð´Ð¾ Ñ\82ази Ñ\81Ñ\82Ñ\80аниÑ\86а Ðµ Ð½ÐµÐ¾Ð±Ñ\85одимо да влезете в системата.",
        "resetpass-submit-loggedin": "Промяна на паролата",
        "resetpass-submit-cancel": "Отказ",
        "resetpass-wrong-oldpass": "Невалидна временна или текуща парола.\nВъзможно е вече да сте сменили паролата си или да сте поискали нова временна парола.",
        "passwordreset-invalidemail": "Неправилен email адрес",
        "changeemail": "Промяна или премахване на адреса за е-поща",
        "changeemail-header": "Попълнете формуляра, за да промените адреса на електронната си поща. Ако искате да премахнете адреса на електронната си поща, при попълване на формуляра оставете полето за новия адрес празно.",
-       "changeemail-no-info": "Ð\97а Ð´Ð° Ð¸Ð¼Ð°Ñ\82е Ð´Ð¾Ñ\81Ñ\82Ñ\8aп Ð´Ð¾ Ñ\82ази Ñ\81Ñ\82Ñ\80аниÑ\86а Ð´Ð¸Ñ\80екÑ\82но, е необходимо да влезете в системата.",
+       "changeemail-no-info": "Ð\97а Ð´Ð° Ð¸Ð¼Ð°Ñ\82е Ð´Ð¸Ñ\80екÑ\82ен Ð´Ð¾Ñ\81Ñ\82Ñ\8aп Ð´Ð¾ Ñ\82ази Ñ\81Ñ\82Ñ\80аниÑ\86а Ð´Ð¸Ñ\80екÑ\82но е необходимо да влезете в системата.",
        "changeemail-oldemail": "Текущ адрес за е-поща:",
        "changeemail-newemail": "Нов адрес за е-поща:",
        "changeemail-none": "(няма)",
        "extlink_sample": "http://www.example.com Текст на външната препратка",
        "extlink_tip": "Външна препратка (не забравяйте http:// отпред)",
        "headline_sample": "Заглавие на раздел",
-       "headline_tip": "Заглавие",
+       "headline_tip": "Заглавие от 2-ро ниво",
        "nowiki_sample": "Тук въведете текст",
        "nowiki_tip": "Пренебрегване на форматиращите команди",
        "image_sample": "Пример.jpg",
        "readonlywarning": "<strong>ВНИМАНИЕ: Базата данни беше затворена за поддръжка, затова в момента промените няма да могат да бъдат съхранени.</strong>\n\nАко желаете, можете да съхраните страницата като текстов файл и да се опитате да я публикувате по-късно.\n\nСистемният администратор, който е затворил базата данни, е посочил следната причина: $1",
        "protectedpagewarning": "'''Внимание: Страницата е защитена и само потребители със статут на администратори могат да я редактират.'''\nЗа справка по-долу е показан последният запис от дневниците.",
        "semiprotectedpagewarning": "'''Забележка:''' Тази страница е защитена и само регистрирани потребители могат да я редактират.\nЗа справка по-долу е показан последният запис от дневниците.",
-       "cascadeprotectedwarning": "<strong>Внимание:</strong> Страницата е защитена, като само потребители с администраторски права могат да я редактират. Тя е включена в {{PLURAL:$1|следната страница|следните страници}} с каскадна защита:",
+       "cascadeprotectedwarning": "<strong>Внимание:</strong> Страницата е защитена, като само потребители със [[Special:ListGroupRights|нужните права]] могат да я редактират, тъй като е включена в {{PLURAL:$1|следната страница|следните страници}} с каскадна защита:",
        "titleprotectedwarning": "'''Внимание: Тази страница е защитена и са необходими [[Special:ListGroupRights|специални права]], за да бъде създадена.'''\nЗа справка по-долу е показан последният запис от дневниците.",
        "templatesused": "{{PLURAL:$1|Шаблон, използван|Шаблони, използвани}} на страницата:",
        "templatesusedpreview": "{{PLURAL:$1|Шаблон, използван|Шаблони, използвани}} в предварителния преглед:",
        "invalid-content-data": "Невалидни данни за съдържание",
        "content-not-allowed-here": "\nНа страницата [[$2]] не е позволено използването на $1",
        "editwarning-warning": "Ако излезете от тази страница, може да загубите всички несъхранени промени, които сте направили. \nАко сте влезли в системата, можете да изключите това предупреждение чрез менюто \"Редактиране\" в личните ви настройки.",
+       "editpage-invalidcontentmodel-title": "Форматът на съдържанието не се поддържа",
        "editpage-notsupportedcontentformat-title": "Форматът на съдържанието не се поддържа",
        "content-model-wikitext": "уикитекст",
        "content-model-text": "обикновен текст",
        "post-expand-template-argument-warning": "Внимание: Тази страница съдържа поне един аргумент на шаблон, който има твърде голям размер при разгръщане. Тези аргументи бяха пропуснати.",
        "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": "Страници, където е превишен възел-граф",
        "revision-info": "Версия от $1 на {{GENDER:$6|$2}}$7",
        "previousrevision": "← По-стара версия",
        "nextrevision": "По-нова версия →",
-       "currentrevisionlink": "Ð\9fÑ\80еглед Ð½Ð° Ñ\82екÑ\83Ñ\89аÑ\82а версия",
+       "currentrevisionlink": "ТекÑ\83Ñ\89а версия",
        "cur": "тек",
        "next": "след",
        "last": "пред",
        "page_first": "първа",
        "page_last": "последна",
        "histlegend": "<em>Разлики:</em> Изберете версиите, които желаете да сравните, чрез превключвателите срещу тях и натиснете &lt;Enter&gt; или бутона за сравнение.<br />\n<em>Легенда:</em> (<strong>тек</strong>) = разлика с текущата версия, (<strong>пред</strong>) = разлика с предишната версия, <strong>м</strong>&nbsp;=&nbsp;малка промяна",
-       "history-fieldset-title": "ТÑ\8aÑ\80Ñ\81ене Ð² Ð¸Ñ\81Ñ\82оÑ\80иÑ\8fÑ\82а",
-       "history-show-deleted": "Само Ð¸Ð·Ñ\82Ñ\80иÑ\82иÑ\82е",
+       "history-fieldset-title": "ТÑ\8aÑ\80Ñ\81ене Ð½Ð° Ð²ÐµÑ\80Ñ\81ии",
+       "history-show-deleted": "Само Ð·Ð° Ð¸Ð·Ñ\82Ñ\80иване Ð½Ð° Ð²ÐµÑ\80Ñ\81ии",
        "histfirst": "най-стари",
        "histlast": "най-нови",
        "historysize": "({{PLURAL:$1|1 байт|$1 байта}})",
        "rev-deleted-event": "(записът е изтрит)",
        "rev-deleted-user-contribs": "[потребителското име или IP адрес са премахнати - редакцията е скрита от приносите]",
        "rev-deleted-text-permission": "Тази версия на страницата е била '''изтрита'''.\nДопълнителна информация може да се съдържа в [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} Дневника на изтриванията].",
+       "rev-suppressed-text-permission": "Тази редация на страницата е била <strong>прикрита</strong>.\nДопълнителна информация може да се съдържа в [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} дневника на прикриванията].",
        "rev-deleted-text-unhide": "Тази версия на страницата е била '''изтрита'''.\nДопълнителна информация може се съдържа в [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} Дневника на изтриванията].\nКато администратор на сайта вие можете да [$1 прегледате тази редакция], ако желаете да продължите.",
        "rev-suppressed-text-unhide": "Тази версия на страницата е била '''прикрита'''.\nДопълнителна информация може да се съдържа в [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} Дневника на прикриванията].\nМожете да [$1 прегледате версията], ако желаете да продължите.",
        "rev-deleted-text-view": "Тази редация на страницата е била '''изтрита'''.\nКато администратор на сайта, вие можете да я прегледате.\nДопълнителна информация може да се съдържа в [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} Дневника на изтриванията].",
        "revdelete-show-file-confirm": "Необходимо е потвърждение, че желаете да прегледате изтритата версия на файла „<nowiki>$1</nowiki>“ от $2 $3.",
        "revdelete-show-file-submit": "Да",
        "revdelete-selected-text": "{{PLURAL:$1|Избрана версия|Избрани версии}} от [[:$2]]:",
+       "revdelete-selected-file": "{{PLURAL:$1|Избрана версия|Избрани версии}} на файл от [[:$2]]:",
        "logdelete-selected": "{{PLURAL:$1|Избрано събитие|Избрани събития}}:",
        "revdelete-text-text": "Изтритите редакции ще продължат да се виждат в историята на страницата, но части от съдържанието ще бъдат публично недостъпни.",
        "revdelete-text-file": "Изтритите файлови редакции ще продължат да се виждат в историята на страницата, но части от съдържанието им ще бъдат публично недостъпни.",
        "showingresultsinrange": "Показване на до {{PLURAL:$1|<strong>1</strong> резултат|<strong>$1</strong> резултата}} в диапазона от #<strong>$2</strong> до #<strong>$3</strong>.",
        "search-showingresults": "{{PLURAL:$4|Резултат <strong>$1</strong> от <strong>$3</strong>|Резултати <strong>$1 - $2</strong> от <strong>$3</strong>}}",
        "search-nonefound": "Няма резултати, които да отговарят на заявката.",
+       "search-nonefound-thiswiki": "Няма резултати, които да отговарят на заявката на този сайт.",
        "powersearch-legend": "Разширено търсене",
        "powersearch-ns": "Търсене в именни пространства:",
        "powersearch-togglelabel": "Избор:",
        "search-external": "Външно търсене",
        "searchdisabled": "Търсенето в {{SITENAME}} е временно изключено. Междувременно можете да търсите чрез Google. Обърнете внимание, че съхранените при тях страници най-вероятно са остарели.",
        "search-error": "Възникна грешка при търсене: $1",
+       "search-warning": "По време на търсенето беше генерирано предупреждение: $1",
        "preferences": "Настройки",
        "mypreferences": "Настройки",
        "prefs-edits": "Брой редакции:",
        "gender-unknown": "Когато ви споменава, софтуерът ще използва неутрални думи за пол, когато е възможно",
        "gender-male": "Той редактира уики страниците",
        "gender-female": "Тя редактира уики страниците",
-       "prefs-help-gender": "Ð\9fо Ð¶ÐµÐ»Ð°Ð½Ð¸Ðµ: Ð¸Ð·Ð¿Ð¾Ð»Ð·Ð²Ð° Ñ\81е Ð·Ð° ÐºÐ¾Ñ\80екÑ\82но Ð¾Ð±Ñ\80Ñ\8aÑ\89ение Ð¿Ð¾ Ñ\80од Ð² Ñ\81иÑ\81Ñ\82емниÑ\82е Ñ\81Ñ\8aобÑ\89ениÑ\8f Ð½Ð° Ñ\81оÑ\84Ñ\82Ñ\83еÑ\80а. Тази информация е публично достъпна.",
+       "prefs-help-gender": "УÑ\81Ñ\82ановÑ\8fванеÑ\82о Ð½Ð° Ñ\82ази Ð½Ð°Ñ\81Ñ\82Ñ\80ойка Ð½Ðµ Ðµ Ð·Ð°Ð´Ñ\8aлжиÑ\82елно.\nСоÑ\84Ñ\82Ñ\83еÑ\80Ñ\8aÑ\82 Ð¸Ð·Ð¿Ð¾Ð»Ð·Ð²Ð° Ñ\81Ñ\82ойноÑ\81Ñ\82Ñ\82а Ñ\9d, Ð·Ð° Ð´Ð° Ñ\81е Ð¾Ð±Ñ\8aÑ\80не ÐºÑ\8aм Ð²Ð°Ñ\81 Ñ\81Ñ\8aобÑ\80азно Ð¿Ð¾Ð»Ð° Ð\92и.\nТази информация е публично достъпна.",
        "email": "Е-поща",
        "prefs-help-realname": "* Истинското име не е задължително. Ако го посочите, вашите приноси ще бъдат приписани на него.",
        "prefs-help-email": "Електронната поща е незадължителна, но позволява възстановяване на забравена или загубена парола.",
        "prefs-tokenwatchlist": "Маркер",
        "prefs-diffs": "Разлики",
        "prefs-help-prefershttps": "Това предпочитание ще бъде активирано при следващото влизане.",
-       "userrights": "УпÑ\80авление Ð½Ð° Ð¿Ð¾Ñ\82Ñ\80ебиÑ\82елÑ\81киÑ\82е права",
+       "userrights": "Ð\9fоÑ\82Ñ\80ебиÑ\82елÑ\81ки права",
        "userrights-lookup-user": "Изберете потребител",
        "userrights-user-editname": "Потребителско име:",
        "editusergroup": "Зареждане на потребителските групи",
        "editinguser": "Промяна на потребителските права на {{GENDER:$1|потребител }} <strong>[[User:$1|$1]]</strong> $2",
+       "viewinguserrights": "Преглед на потребителските права на {{GENDER:$1|потребител}} <strong>[[User:$1|$1]]</strong> $2",
        "userrights-editusergroup": "Редактиране на {{GENDER:$1|потребителските}} групи",
        "userrights-viewusergroup": "Преглед на {{GENDER:$1|потребителските}} групи",
        "saveusergroups": "Съхраняване на {{GENDER:$1|потребителските}} групи",
        "userrights-groupsmember": "Член на:",
        "userrights-groupsmember-auto": "Член по подразбиране на:",
-       "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-expiry-current": "Изтича на $1",
        "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",
        "group": "Потребителска група:",
        "right-unblockself": "Собствено отблокиране",
        "right-protect": "Променяне на нивото на защита и редактиране на каскадно-защитените страници",
        "right-editprotected": "Редактиране на страници защитени като „{{int:protect-level-sysop}}“",
+       "right-editsemiprotected": "Редактиране на страници защитени като „{{int:protect-level-autoconfirmed}}“",
+       "right-editcontentmodel": "Редактиране на модела на съдържанието на страница",
        "right-editinterface": "Редактиране на потребителския интерфейс",
-       "right-editusercssjs": "редактиране на CSS и JS файловете на други потребители",
        "right-editusercss": "Редактиране на CSS файловете на други потребители",
        "right-edituserjs": "Редактиране на JS файловете на други потребители",
        "right-editmyusercss": "Редактиране на собствените потребителски CSS файлове",
        "right-patrol": "Отбелязване на редакциите като проверени",
        "right-autopatrol": "Автоматично отбелязване на редакции като проверени",
        "right-patrolmarks": "Показване на отбелязаните като патрулирани последни промени",
-       "right-unwatchedpages": "преглеждане на списъка с ненаблюдаваните страници",
+       "right-unwatchedpages": "Ð\9fреглеждане на списъка с ненаблюдаваните страници",
        "right-mergehistory": "сливане на редакционни истории на страници",
        "right-userrights": "Редактиране на потребителските права",
        "right-userrights-interwiki": "редактиране на потребителски права на потребители в други уикита",
        "action-userrights-interwiki": "редактиране на потребителските права на потребители от други уикита",
        "action-siteadmin": "заключване и отключване на базата от данни",
        "action-sendemail": "изпращане на е-писма",
+       "action-editmyoptions": "редактиране на собствените настройки",
        "action-editmywatchlist": "редактиране на списъка ви за наблюдение",
        "action-viewmywatchlist": "преглед на списъка ви за наблюдение",
        "action-viewmyprivateinfo": "преглеждане на личните данни",
        "action-editmyprivateinfo": "редактиране на личната си информация",
+       "action-editcontentmodel": "редактиране на модела на съдържанието на страница",
        "action-managechangetags": "създаване и (де)активиране на етикети",
        "action-applychangetags": "прилагане на етикетите заедно с промените ви",
        "action-purge": "почисти кеша на тази страница",
        "recentchanges-feed-description": "Проследяване на последните промени в {{SITENAME}}.",
        "recentchanges-label-newpage": "Нова страница",
        "recentchanges-label-minor": "Това е малка промяна",
-       "recentchanges-label-bot": "Тази Ñ\80едакÑ\86иÑ\8f Ðµ Ð¸Ð·Ð²Ñ\8aÑ\80Ñ\88ена от бот",
+       "recentchanges-label-bot": "Тази Ñ\80едакÑ\86иÑ\8f Ðµ Ð½Ð°Ð¿Ñ\80авена от бот",
        "recentchanges-label-unpatrolled": "Тази редакция все още не е проверена",
        "recentchanges-label-plusminus": "Размерът на страницата е променен с този брой байтове",
        "recentchanges-legend-heading": "<strong>Легенда:</strong>",
        "rcfilters-restore-default-filters": "Възстановяване на филтри по подразбиране",
        "rcfilters-clear-all-filters": "Изчистване на всички филтри",
        "rcfilters-filterlist-title": "Филтри",
+       "rcfilters-filterlist-whatsthis": "Какво е това?",
        "rcfilters-highlightmenu-title": "Изберете цвят",
        "rcfilters-filterlist-noresults": "Не са намерени филтри",
        "rcfilters-filtergroup-registration": "Регистрация на потребители",
+       "rcfilters-filter-registered-label": "Регистрация",
        "rcfilters-filter-unregistered-label": "Нерегистрирани",
        "rcfilters-filter-editsbyself-label": "Ваши собствени редакции",
        "rcfilters-filter-editsbyself-description": "Ваши редакции.",
        "rcfilters-filter-humans-label": "Човек (не бот)",
        "rcfilters-filter-humans-description": "Редакции, направени от редактори.",
        "rcfilters-filtergroup-reviewstatus": "Проверка на статуса",
+       "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-major-label": "Обикновени редакции",
        "rcfilters-filtergroup-changetype": "Вид на промяната",
        "rcshowhidecategorization": "$1 категоризации",
        "rcshowhidecategorization-show": "Показване на",
        "rcshowhidecategorization-hide": "Скриване на",
-       "rclinks": "Показване на последните $1 промени за последните $2 дни<br />$3",
+       "rclinks": "Показване на последните $1 промени за последните $2 дни",
        "diff": "разл",
        "hist": "ист",
        "hide": "Скриване",
        "upload-options": "Настройки за качване",
        "watchthisupload": "Наблюдаване на файла",
        "filewasdeleted": "Файл в този име е съществувал преди време, но е бил изтрит. Проверете $1 преди да го качите отново.",
+       "filename-thumb-name": "Заглавието на този файл изглежда като заглавие на миниатюра (thumbnail). Не качвайте миниатюри на файлове, които вече съществуват в това същото уки. Освен това, променете заглавието на файла с някое по-съдържателно и без представката, която е характерна за миниатюрите.",
        "filename-bad-prefix": "Името на файла, който качвате, започва с '''„$1“''', което е неописателно име, типично задавано по автоматичен начин от цифровите камери или апарати. Изберете по-описателно име на файла.",
        "upload-proto-error": "Неправилен протокол",
        "upload-proto-error-text": "Изисква се адрес започващ с <code>http://</code> или <code>ftp://</code>.",
        "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-message-generic-foreign": "Ако не можете да качите този файл в съответствие с правилата на споделеното хранилище, моля, затворете този прозорец и опитайте друг метод.",
        "backend-fail-notexists": "Файлът $1 не съществува.",
        "backend-fail-delete": "Файлът $1 не може да бъде изтрит.",
        "backend-fail-alreadyexists": "Файлът $1 вече съществува.",
        "sharedupload-desc-there": "Този файл е от $1 и може да се използва от други проекти.\nЗа повече информация вижте [$2 описателната му страница].",
        "sharedupload-desc-here": "Този файл е от $1 и може да се използва от други проекти.\nСледва информация за файла, достъпна през [$2 оригиналната му описателна страница].",
        "sharedupload-desc-edit": "Този файл е от $1 и може да бъде използван от други проекти.\nВероятно желаете да редактирате описанието му на [$2 неговата описателна страница].",
+       "sharedupload-desc-create": "Този файл е от $1 и може да бъде използван от други проекти.\nВероятно желаете да редактирате описанието му на [$2 неговата описателна страница].",
        "filepage-nofile": "Не съществува файл с това име.",
        "filepage-nofile-link": "Не съществува файл с това име, но можете [$1 да го качите].",
        "uploadnewversion-linktext": "Качване на нова версия на файла",
        "shared-repo-from": "от $1",
        "shared-repo": "споделено хранилище",
        "shared-repo-name-wikimediacommons": "Общомедия",
-       "upload-disallowed-here": "Ð\9dе Ð¼Ð¾Ð¶ÐµÑ\82е Ð´Ð° Ð¿Ñ\80езапиÑ\88ете файла.",
+       "upload-disallowed-here": "Ð\9dе Ð¼Ð¾Ð¶ÐµÑ\82е Ð´Ð° Ð¿Ñ\80епокÑ\80иете файла.",
        "filerevert": "Възвръщане на $1",
        "filerevert-legend": "Възвръщане на файла",
        "filerevert-intro": "Възвръщане на '''[[Media:$1|$1]]''' към [$4 версията от $3, $2].",
        "listgrouprights-removegroup-self-all": "Може да премахва всички групи от собствената сметка",
        "listgrouprights-namespaceprotection-header": "Ограничения на именните пространства",
        "listgrouprights-namespaceprotection-namespace": "Именно пространство",
+       "listgrouprights-namespaceprotection-restrictedto": "Права, които дават възможност на потребителите да редактират",
        "listgrants": "Разрешения",
        "listgrants-grant": "Разрешение",
        "listgrants-rights": "Права",
        "emailccsubject": "Копие на писмото ви до $1: $2",
        "emailsent": "Писмото е изпратено",
        "emailsenttext": "Писмото ви беше изпратено.",
-       "emailuserfooter": "Това писмо беше изпратено от $1 на $2 чрез функцията „Изпращане на писмо до потребителя“ на {{SITENAME}}.",
+       "emailuserfooter": "Това писмо беше изпратено от $1 на {{GENDER:$2|$2}} чрез функцията „{{int:emailuser}}“ на {{SITENAME}}. Ако отговорите на писмото, вашето писмо ще бъде изпратено директно на {{GENDER:$1|първоначалния подател}}, показвайки адреса на ел. Ви поща на получателя.",
        "usermessage-summary": "Оставяне на системно съобщение.",
        "usermessage-editor": "Системни съобщения",
        "watchlist": "Списък за наблюдение",
        "enotif_lastvisited": "Преглед на всички промени след последното ви посещение: $1.",
        "enotif_lastdiff": "Преглед на тази промяна: $1.",
        "enotif_anon_editor": "анонимен потребител $1",
-       "enotif_body": "Уважаеми(а) $WATCHINGUSERNAME,\n\n$PAGEINTRO $NEWPAGE\n\nРезюме на редакцията: $PAGESUMMARY $PAGEMINOREDIT\n\nВръзка с редактора:\n* електронна поща: $PAGEEDITOR_EMAIL\n* уики страница: $PAGEEDITOR_WIKI\n\nНяма да получавате други известия за последващи промени, докато не посетите страницата.\nМожете да актуализиране настройките си за този вид известия за всички страници от вашия списък за наблюдение.\n\nСистемата за известяване на {{SITENAME}}\n\n--\nПромяна на настройките за известявания чрез електронна поща може да се извърши на\n{{canonicalurl:{{#special:Preferences}}}}\n\nПромяна на настройките на списъка за наблюдение се извършва на\n{{canonicalurl:{{#special:EditWatchlist}}}}\n\nИзтриването на тази страницата от списъка за наблюдение става чрез \n$UNWATCHURL\n\nЗа обратна връзка и помощ:\n$HELPPAGE",
+       "enotif_body": "Уважаеми(а) $WATCHINGUSERNAME,\n\n$PAGEINTRO $NEWPAGE\n\nРезюме на редакцията: $PAGESUMMARY $PAGEMINOREDIT\n\nВръзка с редактора:\n* електронна поща: $PAGEEDITOR_EMAIL\n* уики страница: $PAGEEDITOR_WIKI\n\nНяма да получавате други известия за последващи промени, докато не посетите страницата докато акаунтът ви е влязъл в системата.\nМожете да актуализиране настройките си за този вид известия за всички страници от вашия списък за наблюдение.\n\nСистемата за известяване на {{SITENAME}}\n\n--\nПромяна на настройките за известявания чрез електронна поща може да се извърши на\n{{canonicalurl:{{#special:Preferences}}}}\n\nПромяна на настройките на списъка за наблюдение се извършва на\n{{canonicalurl:{{#special:EditWatchlist}}}}\n\nИзтриването на тази страницата от списъка за наблюдение става чрез \n$UNWATCHURL\n\nЗа обратна връзка и помощ:\n$HELPPAGE",
        "created": "създадена",
        "changed": "променена",
        "deletepage": "Изтриване",
        "changecontentmodel-success-title": "Моделът на съдържание бе променен",
        "changecontentmodel-success-text": "Типът на съдържанието на [[:$1]] е успешно променен.",
        "log-name-contentmodel": "Дневник на cъдържанието промяна модела",
-       "log-description-contentmodel": "СÑ\8aбиÑ\82иÑ\8f, Ð¾Ñ\82наÑ\81Ñ\8fÑ\89и Ñ\81е Ð´Ð¾ Ð¼Ð¾Ð´ÐµÐ»Ð¸ Ð½Ð° Ñ\81Ñ\8aдÑ\8aÑ\80жаниеÑ\82о Ð½Ð° Ñ\81Ñ\82Ñ\80аниÑ\86аÑ\82а",
+       "log-description-contentmodel": "СÑ\82Ñ\80аниÑ\86аÑ\82а Ð¿Ð¾ÐºÐ°Ð·Ð²Ð° Ð¿Ñ\80омениÑ\82е Ð² Ð¼Ð¾Ð´ÐµÐ»Ð° Ð½Ð° Ñ\81Ñ\8aдÑ\8aÑ\80жаниеÑ\82о Ð½Ð° Ñ\81Ñ\82Ñ\80аниÑ\86иÑ\82е Ð¸ Ñ\81Ñ\82Ñ\80аниÑ\86иÑ\82е, Ñ\81Ñ\8aздадени Ñ\81 Ð¼Ð¾Ð´ÐµÐ» Ð½Ð° Ñ\81Ñ\8aдÑ\8aÑ\80жаниеÑ\82о Ñ\80азлиÑ\87ен Ð¾Ñ\82 Ñ\82ози Ð¿Ð¾ Ð¿Ð¾Ð´Ñ\80азбиÑ\80ане.",
        "logentry-contentmodel-change-revertlink": "връщане",
        "logentry-contentmodel-change-revert": "връщане",
        "protectlogpage": "Дневник на защитата",
        "protect-locked-blocked": "Не можете да променяте нивата на защита на страниците, докато сте блокиран(а). Текущите настройки за страницата „'''$1'''“ са:",
        "protect-locked-dblock": "Нивата на защита на страниците не могат да бъдат променяни, защото базата от данни е заключена. Ето текущите настройки за страницата „'''$1'''“:",
        "protect-locked-access": "Нямате правото да променяте нивата на защита на страниците. Ето текущите настройки за страницата „'''$1'''“:",
-       "protect-cascadeon": "Тази страница е защитена против редактиране, защото е включена в {{PLURAL:$1|следната страница, която от своя страна има|следните страници, които от своя страна имат}} каскадна защита. Можете да промените нивото на защита на страницата, но това няма да повлияе върху каскадната защита.",
+       "protect-cascadeon": "Тази страница е защитена против редактиране, защото е включена в {{PLURAL:$1|следната страница, която от своя страна има|следните страници, които от своя страна имат}} каскадна защита.\nМожете да промените нивото на защита на страницата, но това няма да повлияе върху каскадната защита.",
        "protect-default": "Позволяване за всички потребители",
        "protect-fallback": "Позволяване само за потребители с права на „$1“",
        "protect-level-autoconfirmed": "Позволено само за автоматично одобрени потребители",
        "undeletepagetext": "{{PLURAL:$1|Следната страница беше изтрита, но все още се намира в архива и може да бъде възстановена|Следните $1 страници бяха изтрити, но все още се намират в архива и могат да бъдат възстановени}}. Архивът може да се почиства от време на време.",
        "undelete-fieldset-title": "Възстановяване на версии",
        "undeleteextrahelp": "За възстановяване на пълната история на страницата не се слагат отметки и се натиска '''''{{int:undeletebtn}}'''''.\nЗа частично възстановяване се поставят отметки на тези версии на страницата, които трябва да бъдат възстановени, след което се натиска '''''{{int:undeletebtn}}'''''.",
-       "undeleterevisions": "{{PLURAL:$1|Една версия беше архивирана|$1 версии бяха архивирани}}",
+       "undeleterevisions": "$1 {{PLURAL:$1|версия беше изтрита|версии бяха изтрити}}",
        "undeletehistory": "Ако възстановите страницата, всички версии ще бъдат върнати в историята.\nАко след изтриването е създадена страница със същото име, възстановените версии ще се появят като по-ранна история, а текущата версия на страницата няма да бъде заменена автоматично. Също така обърнете внимание, че ограниченията, приложени върху версиите, ще се загубят след възстановяването.",
        "undeleterevdel": "Възстановяването няма да бъде изпълнено, ако би довело до частично изтриване на актуалната версия. В такъв случай актуалната версия не трябва да бъде избирана или пък състоянието й трябва да бъде променено на нормална (нескрита) версия. Версиите на файлове, които нямате право да преглеждате, няма да бъдат възстановени.",
        "undeletehistorynoadmin": "Тази страница е била изтрита. В резюмето отдолу е посочена причината за това, заедно с информация за потребителите, редактирали страницата преди изтриването й. Конкретното съдържание на изтритите версии е достъпно само за администратори.",
        "undeleteviewlink": "преглеждане",
        "undeleteinvert": "Обръщане на избора",
        "undeletecomment": "Причина:",
-       "undeletedrevisions": "{{PLURAL:$1|Една версия беше възстановена|$1 версии бяха възстановени}}",
-       "undeletedrevisions-files": "{{PLURAL:$1|Една версия|$1 версии}} и {{PLURAL:$1|един файл|$2 файла}} бяха възстановени",
-       "undeletedfiles": "{{PLURAL:$1|Един файл беше възстановен|$1 файла бяха възстановени}}",
        "cannotundelete": "Една или повече операции по възстановяване се провалиха:\n$1",
        "undeletedpage": "'''Страницата „$1“ беше възстановена.'''\n\nМожете да видите последните изтрити и възстановени страници в [[Special:Log/delete|дневника на изтриванията]].",
        "undelete-header": "Прегледайте [[Special:Log/delete|дневника на изтриванията]] за текущо изтритите страници.",
        "sp-contributions-uploads": "качвания",
        "sp-contributions-logs": "дневници",
        "sp-contributions-talk": "беседа",
-       "sp-contributions-userrights": "управление на потребителските права",
+       "sp-contributions-userrights": "управление на {{GENDER:$1|потребителските}} права",
        "sp-contributions-blocked-notice": "Потребителят понастоящем е блокиран.\nЗа справка по-долу е показан последния запис за него от дневника на блокиранията:",
        "sp-contributions-blocked-notice-anon": "Този IP адрес понастоящем е блокиран.\nЗа повече информация можете да прегледате последният запис в Дневника на блокиранията:",
        "sp-contributions-search": "Търсене на приноси",
        "unblock": "Отблокиране на потребител",
        "blockip": "Блокиране на {{GENDER:$1|потребител}}",
        "blockip-legend": "Блокиране на потребител",
-       "blockiptext": "Формулярът по-долу се използва, за да се забрани правото на писане\nна определен IP-адрес или потребител.\nТова трябва да се направи само за да се предотвратят прояви на вандализъм\nи в съответствие с [[{{MediaWiki:Policy-url}}|политиката за поведение]] в {{SITENAME}}.\nНеобходимо е да се посочи и причина за блокирането (например заглавия на страници, станали обект на вандализъм).",
+       "blockiptext": "Формулярът по-долу се използва, за да се забрани правото на писане на определен IP-адрес или потребителско име.\nТова трябва да се направи само за предотвратяване прояви на вандализъм\nи в съответствие с [[{{MediaWiki:Policy-url}}|политиката за поведение]].\nНеобходимо е да се посочи и причина за блокирането (например заглавия на страници, станали обект на вандализъм).\nМожете да блокирате диапазон от IP-адреси чрез синтаксиса на [https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing CIDR]; максималният позволен диапазон е /$1 за IPv4 и /$2 за IPv6.",
        "ipaddressorusername": "IP-адрес или потребител:",
        "ipbexpiry": "Срок:",
        "ipbreason": "Причина:",
        "lockedbyandtime": "(от $1 на $2 в $3)",
        "move-page": "Преместване на $1",
        "move-page-legend": "Преместване на страница",
-       "movepagetext": "Използването на формуляра по-долу ще преименува страница, като се премести цялата ѝ редакционна история история на новото име. Старото заглавие ще се превърне в пренасочваща страница.\nМоже да се избере възможност пренасочванията към оригиналното заглавие да бъдат обновени автоматично. В случай, че тази възможност не е избрана, препоръчително е да се провери за [[Special:DoubleRedirects|двойни]] или [[Special:BrokenRedirects|невалидни пренасочвания]].\nВие сами би трябвало да се убедите в това дали препратките продължават да сочат там, където се предполага.\n\nОбърнете внимание, че страницата '''няма''' да бъде преместена, ако вече съществува страница с новото име, освен ако е празна или пренасочване и няма редакционна история.\n\n'''ВНИМАНИЕ!'''\nТова може да е голяма и неочаквана промяна за известна страница. Уверете се, че разбирате последствията, преди да продължите.",
-       "movepagetext-noredirectfixer": "С помощта на формуляра по-долу се преименува страница, като цялата ѝ редакционна история се премества под новото име.\nСтарото име ще остане като пренасочваща страница към новото заглавие.\nЖелателно е преди преместването да се извърши проверка за [[Special:DoubleRedirects|двойни]] или [[Special:BrokenRedirects|невалидни пренасочвания]].\nДобре е да се направи проверка дали препратките продължават да сочат там, където се предполага.\n\nВажно е да се знае, че страницата '''няма''' да бъде преместена, ако вече съществува страница с новото име, освен ако не е празна или пренасочваща страница и няма налична редакционна история.\nТова означава, че ако една страница бъде преименувана по погрешка, тя може да се премести обратно със старото си заглавие, но не може да се замести съществуваща страница.\n\n'''Предупреждение!'''\nТова може да е драстична или неочаквана промяна за някоя популярна страница;\nнеобходимо е да се уверите, че разбирате последствията от това преди да предприемете действието.",
-       "movepagetalktext": "Ако съществува, съответната дискусионна страница ще бъде преместена автоматично заедно с нея, '''освен ако:'''\n* не местите страницата от едно именно пространство в друго,\n* вече съществува непразна дискусионна страница с това име или\n* не сте отметнали долната кутийка.\n\nВ тези случаи, ако желаете, ще е необходимо да преместите страницата ръчно.",
+       "movepagetext": "Използването на формуляра по-долу ще преименува страница, като се премести цялата ѝ редакционна история история на новото име. Старото заглавие ще се превърне в пренасочваща страница.\nМоже да се избере възможност пренасочванията към оригиналното заглавие да бъдат обновени автоматично. В случай, че тази възможност не е избрана, препоръчително е да се провери за [[Special:DoubleRedirects|двойни]] или [[Special:BrokenRedirects|невалидни пренасочвания]].\nВие сами би трябвало да се убедите в това дали препратките продължават да сочат там, където се предполага.\n\nОбърнете внимание, че страницата <strong>няма</strong> да бъде преместена, ако вече съществува страница с новото име, освен ако е празна или пренасочване и няма редакционна история.\n\n<strong>Забележка:</strong>\nТова може да е голяма и неочаквана промяна за известна страница. Уверете се, че разбирате последствията, преди да продължите.",
+       "movepagetext-noredirectfixer": "С помощта на формуляра по-долу се преименува страница, като цялата ѝ редакционна история се премества под новото име.\nСтарото име ще остане като пренасочваща страница към новото заглавие.\nЖелателно е преди преместването да се извърши проверка за [[Special:DoubleRedirects|двойни]] или [[Special:BrokenRedirects|невалидни пренасочвания]].\nДобре е да се направи проверка дали препратките продължават да сочат там, където се предполага.\n\nВажно е да се знае, че страницата <strong>няма</strong> да бъде преместена, ако вече съществува страница с новото име, освен ако не е празна или пренасочваща страница и няма налична редакционна история.\nТова означава, че ако една страница бъде преименувана по погрешка, тя може да се премести обратно със старото си заглавие, но не може да се замести съществуваща страница.\n\n<strong>Забележка:</strong>\nТова може да е драстична или неочаквана промяна за някоя популярна страница;\nнеобходимо е да се уверите, че разбирате последствията от това преди да предприемете действието.",
+       "movepagetalktext": "Ако поставите отметка, свързаната дискусионна страница ще бъде преместена автоматично към новото заглавие, освен ако под това име не съществува друга дискусионна страница със съдържание.\n\nВ този случай, ако желаете, ще е необходимо да преместите или да слеете страницата ръчно.",
        "moveuserpage-warning": "'''Внимание:''' Предприели сте опит да преместите потребителска страница. Забележете, че от преместването на страницата '''няма''' да последва преименуване на потребителя.",
        "movecategorypage-warning": "<strong>Внимание:</strong> На път сте да преместите категорийна страница. Моля, обърнете внимание, че ще бъде преместена само страницата на категорията. <em>Никоя</em> от страниците в старата категория <em>няма</em> да бъде прекатегоризирана.",
        "movenologintext": "Необходимо е да [[Special:UserLogin|влезете]], за да може да премествате страници.",
        "import-nonewrevisions": "Не са импортирани версии (всички вече съществуват или са пропуснати поради грешки).",
        "xml-error-string": "$1 на ред $2, колона $3 (байт $4): $5",
        "import-upload": "Качване на XML данни",
-       "import-token-mismatch": "Ð\97агÑ\83бени Ñ\81а Ð´Ð°Ð½Ð½Ð¸Ñ\82е Ð·Ð° Ñ\81еÑ\81иÑ\8fÑ\82а. Ð\9eпиÑ\82айÑ\82е Ð¾Ñ\82ново.",
+       "import-token-mismatch": "Ð\97агÑ\83ба Ð½Ð° Ð´Ð°Ð½Ð½Ð¸Ñ\82е Ð·Ð° Ñ\82екÑ\83Ñ\89аÑ\82а Ñ\81еÑ\81иÑ\8f.\n\nÐ\9cоже Ð±Ð¸ Ñ\81Ñ\82е Ð¸Ð·Ð»ÐµÐ·Ð»Ð¸ Ð¾Ñ\82 Ñ\81иÑ\81Ñ\82емаÑ\82а. <strong>Ð\9cолÑ\8f, Ñ\83веÑ\80еÑ\82е Ñ\81е, Ñ\87е Ñ\81Ñ\82е Ð²Ð»ÐµÐ·Ð»Ð¸ Ð² Ð¿Ñ\80оÑ\84ила Ñ\81и Ð¸ Ð¾Ð¿Ð¸Ñ\82айÑ\82е Ð¾Ñ\82ново</strong>.\nÐ\90ко Ð²Ñ\81е Ð¾Ñ\89е Ð½Ðµ Ñ\80абоÑ\82и, Ð¾Ð¿Ð¸Ñ\82айÑ\82е Ð´Ð° [[Special:UserLogout|излезеÑ\82е]] Ð¸ Ð´Ð° Ð²Ð»ÐµÐ·ÐµÑ\82е Ð¾Ñ\82ново, Ñ\81Ñ\8aÑ\89о Ñ\82ака Ð¿Ñ\80овеÑ\80еÑ\82е Ð´Ð°Ð»Ð¸ Ð±Ñ\80аÑ\83зÑ\8aÑ\80Ñ\8aÑ\82 Ð²Ð¸ Ð¿Ð¾Ð·Ð²Ð¾Ð»Ñ\8fва Ð±Ð¸Ñ\81квиÑ\82ки Ð¾Ñ\82 Ñ\82ози Ñ\81айÑ\82.",
        "import-invalid-interwiki": "Не може да бъде извършено внасяне от посоченото уики.",
        "import-error-edit": "Страницата „$1“ не беше импортирана, тъй като нямате права да я редактирате.",
        "import-error-create": "Страницата „$1“ не беше импортирана, тъй като нямате права да я създадете.",
        "tooltip-t-recentchangeslinked": "Последните промени на страници, сочени от тази страница",
        "tooltip-feed-rss": "RSS feed за страницата",
        "tooltip-feed-atom": "Atom feed за страницата",
-       "tooltip-t-contributions": "Ð\9fоказване на приносите на {{GENDER:$1|потребителя}}",
+       "tooltip-t-contributions": "СпиÑ\81Ñ\8aк на приносите на {{GENDER:$1|потребителя}}",
        "tooltip-t-emailuser": "Изпращане на писмо до {{GENDER:$1|потребителя}}",
        "tooltip-t-info": "Повече за тази страница",
        "tooltip-t-upload": "Качи файлове",
        "anonymous": "{{PLURAL:$1|Анонимен потребител|Анонимни потребители}}на {{SITENAME}}",
        "siteuser": "потребител на {{SITENAME}} $1",
        "anonuser": "Анонимен потребител на {{SITENAME}} $1",
-       "lastmodifiedatby": "Ð\9fоÑ\81леднаÑ\82а Ð¿Ñ\80омÑ\8fна Ð½Ð° Ñ\81Ñ\82Ñ\80аниÑ\86аÑ\82а Ðµ Ð¸Ð·Ð²Ñ\8aÑ\80Ñ\88ена Ð¾Ñ\82 $3 Ð½Ð° $2, $1.",
+       "lastmodifiedatby": "Ð\9fоÑ\81леднаÑ\82а Ð¿Ñ\80омÑ\8fна Ð½Ð° Ñ\81Ñ\82Ñ\80аниÑ\86аÑ\82а Ðµ Ð¸Ð·Ð²Ñ\8aÑ\80Ñ\88ена Ð¾Ñ\82 $3 Ð² $2 Ñ\87. Ð½Ð° $1 Ð³.",
        "othercontribs": "Основаващо се върху работа на $1.",
        "others": "други",
        "siteusers": "{{PLURAL:$2|потребителят|потребителите}} на {{SITENAME}} $1",
        "pageinfo-header-properties": "Характеристики на страницата",
        "pageinfo-display-title": "Показвано заглавие",
        "pageinfo-default-sort": "Ключ за сортиране по подразбиране",
-       "pageinfo-length": "Ð\94Ñ\8aлжина на страницата (в байтове)",
+       "pageinfo-length": "Ð\93олемина на страницата (в байтове)",
        "pageinfo-article-id": "Номер на страницата",
        "pageinfo-language": "Език на съдържанието на страницата",
+       "pageinfo-language-change": "промяна",
        "pageinfo-content-model": "Модел на съдържанието на страницата",
        "pageinfo-content-model-change": "промяна",
        "pageinfo-robot-policy": "Индексиране от роботи",
        "newimages-summary": "Тази специална страница показва последно качените файлове.",
        "newimages-legend": "Име на файл",
        "newimages-label": "Име на файл (или част от него):",
+       "newimages-user": "IP-адрес или потребителско име",
        "newimages-showbots": "Показване на качвания от ботове",
        "newimages-hidepatrolled": "Скрий проверените качвания",
        "noimages": "Няма нищо.",
        "tags-edit-title": "Редактиране на етикетите",
        "tags-edit-manage-link": "Управление на етикетите",
        "tags-edit-revision-selected": "{{PLURAL:$1|Избрана версия|Избрани версии}} от [[:$2]]:",
+       "tags-edit-logentry-selected": "{{PLURAL:$1|Избрано събитие|Избрани събития}}:",
        "tags-edit-revision-legend": "Добавяне или премахване на етикети от {{PLURAL:$1|тази редакция|всичките $1 редакции}}",
        "tags-edit-existing-tags": "Съществуващи етикети:",
        "tags-edit-existing-tags-none": "<em>Няма</em>",
        "htmlform-time-placeholder": "ЧЧ:ММ:СС",
        "htmlform-datetime-placeholder": "ГГГГ-ММ-ДД ЧЧ:ММ:СС",
        "htmlform-date-invalid": "Избраната от вас стойност за дата не е разпозната. Опитайте да използвате формат ГГГГ-ММ-ДД.",
+       "htmlform-datetime-invalid": "Избраната от вас стойност за дата не е разпозната. Опитайте да използвате формат ГГГГ-ММ-ДД ЧЧ:ММ:СС.",
        "htmlform-title-badnamespace": "[[:$1]] не е в именното пространство \"{{ns:$2}}\".",
        "htmlform-title-not-exists": "$1 не съществува.",
        "htmlform-user-not-exists": "<strong>$1</strong> не съществува.",
        "htmlform-user-not-valid": "<strong>$1</strong> не е валидно потребителско име.",
        "logentry-delete-delete": "$1 {{GENDER:$2|изтри}} страницата $3",
        "logentry-delete-delete_redir": "$1 {{GENDER:$2|изтри}} пренасочване $3 чрез препокриване",
-       "logentry-delete-restore": "$1 {{GENDER:$2|възстанови}} страницата $3",
+       "logentry-delete-restore": "$1 {{GENDER:$2|възстанови}} страницата $3 ($4)",
        "logentry-delete-revision": "$1 {{GENDER:$2|промени}} видимостта на {{PLURAL:$5|една редакция|$5 редакции}} в страница $3: $4",
        "logentry-delete-event-legacy": "$1 {{GENDER:$2|промени}} видимостта на събитията от дневниците за страница $3",
        "logentry-delete-revision-legacy": "$1 {{GENDER:$2|промени}} видимостта на версиите на страница $3",
        "logentry-rights-rights-legacy": "$1 {{GENDER:$2|промени}} потребителската група на $3",
        "logentry-rights-autopromote": "$1 е автоматично {{GENDER:$2|повишен|повишена}} от $4 до $5",
        "logentry-upload-upload": "$1 {{GENDER:$2|качи}} $3",
+       "logentry-upload-overwrite": "$1 {{GENDER:$2|качи}} нова версия на $3",
+       "logentry-upload-revert": "$1 {{GENDER:$2|качи}} $3",
        "log-name-managetags": "Дневник на управлението на етикети",
        "log-description-managetags": "На тази страница са изброени задачи, свързани с управлението на [[Special:Tags|етикети]]. Дневникът съдържа само действия, извършвани ръчно от администратор. Етикети могат да бъдат създавани или изтривани от уики софтуера без това да бъде отразено в този дневник.",
+       "logentry-managetags-create": "$1 {{GENDER:$2|създаде}} етикета \"$4\"",
        "log-name-tag": "Дневник на етикетите",
        "log-description-tag": "Тази страница показва, кога потребителите са добавили или премахнали [[Special:Tags|етикети]] от отделни версии или записи. Списъкът не включва подобни действия, когато те се появяват, като част от процеса на редактиране, изтриване или подобни действия.",
        "rightsnone": "(никакви)",
        "pagelang-select-lang": "Избиране на език",
        "pagelang-reason": "Причина",
        "pagelang-submit": "Изпращане",
+       "pagelang-nonexistent-page": "Страницата $1 не съществува.",
        "right-pagelang": "Промяна езика на страница",
        "action-pagelang": "промяна езика на страницата",
        "log-name-pagelang": "Дневник на езиковите промени",
        "mediastatistics-header-audio": "Аудио",
        "mediastatistics-header-video": "Видео",
        "mediastatistics-header-multimedia": "Мултимедия",
+       "mediastatistics-header-office": "Офис",
        "mediastatistics-header-total": "Всички файлове",
        "json-error-syntax": "Синтактична грешка",
        "headline-anchor-title": "Препратка към този раздел",
        "mw-widgets-dateinput-no-date": "Нищо не е избрано",
        "mw-widgets-dateinput-placeholder-day": "ГГГГ-ММ-ДД",
        "mw-widgets-dateinput-placeholder-month": "ГГГГ-ММ",
+       "mw-widgets-mediasearch-input-placeholder": "Търсене на мултимедия",
+       "mw-widgets-mediasearch-noresults": "Не бяха открити резултати.",
        "mw-widgets-titleinput-description-new-page": "страницата все още не съществува",
        "mw-widgets-titleinput-description-redirect": "пренасочване към $1",
+       "mw-widgets-categoryselector-add-category-placeholder": "Добавяне на категория...",
        "randomrootpage": "Случайна основна страница",
        "log-action-filter-block": "Вид на блокирането:",
        "log-action-filter-delete": "Вид на изтриването:",
        "log-action-filter-block-block": "Блокиране",
        "log-action-filter-block-reblock": "Промяна на блокирането",
        "log-action-filter-block-unblock": "Отблокиране",
+       "log-action-filter-contentmodel-change": "Промяна на модела на съдържанието",
        "log-action-filter-delete-delete": "Изтриване на страница",
        "log-action-filter-delete-restore": "Възстановяване на страница",
+       "log-action-filter-managetags-create": "Създаване на етикети",
        "log-action-filter-managetags-delete": "Премахване на етикет",
        "log-action-filter-managetags-activate": "Активиране на етикет",
        "log-action-filter-managetags-deactivate": "Деактивиране на етикет",
+       "log-action-filter-newusers-autocreate": "Автоматично създаване",
+       "log-action-filter-protect-protect": "Защита",
+       "log-action-filter-protect-unprotect": "Сваляне на защитата",
+       "log-action-filter-rights-rights": "Ръчна промяна",
+       "log-action-filter-rights-autopromote": "Автоматична промяна",
        "log-action-filter-upload-upload": "Ново качване",
        "log-action-filter-upload-overwrite": "Повторно качване",
+       "authmanager-create-disabled": "Създаването на сметки е изключено.",
        "authmanager-authplugin-setpass-bad-domain": "Невалиден домейн.",
+       "authmanager-userdoesnotexist": "Няма регистрирана потребителска сметка за „$1“.",
        "authmanager-retype-help": "Парола (повторно) за потвърждение.",
        "authmanager-email-label": "Е-поща",
        "authmanager-email-help": "Електронна поща",
        "authmanager-provider-temporarypassword": "Временна парола",
        "authprovider-resetpass-skip-label": "Пропусни",
        "specialpage-securitylevel-not-allowed-title": "Не е позволено",
-       "cannotauth-not-allowed-title": "Достъпът е отказан"
+       "cannotauth-not-allowed-title": "Достъпът е отказан",
+       "cannotauth-not-allowed": "Не ви е позволено да използвате тази страница",
+       "credentialsform-account": "Име на сметка:",
+       "linkaccounts": "Свързване на сметки",
+       "linkaccounts-success-text": "Сметката беше свързана.",
+       "linkaccounts-submit": "Свързване на сметки",
+       "restrictionsfield-badip": "Невалиден IP-адрес или интервал от адреси: $1",
+       "revid": "версия $1"
 }
index af8c1e1..d86abf6 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": "وتئ داخل بوتینئ مئلوماتان شه هوشا بورته ئیت؟",
        "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-submit": "وتي کار زوروکین حسابا جوڑ کنیت",
        "right-editsemiprotected": "ایڈیٹ کورتین قُلپ بوته ئین تاکدیمانی بئ ئنوانی \"{{int:protect-level-autoconfirmed}}\"",
        "right-editcontentmodel": "یک تاکدیمی محتوایی مدل یی ایڈیٹ کورتین",
        "right-editinterface": "ای\tڈیٹ کورتین کار زوروکانئ رابطه",
-       "right-editusercssjs": "ایڈیٹ کورتین دیگه کار زوروکانئ  CSS و JS ئی تاکدیمانئ",
        "right-editusercss": "ایڈیٹ کورتین دیگه کار زوروکانئ  CSS ئی تاکدیمانئ",
        "right-edituserjs": "ایڈیٹ کورتین دیگه کار زوروکانئ  JS ئی تاکدیمانئ",
        "right-editmyusercss": "وتئ  سی‌اس‌اس کار زوروکئ فایلانا ایڈیٹ بکینت",
        "rcshowhidecategorization": "$1 تاکدیمئ تهربندی",
        "rcshowhidecategorization-show": "نشان داتین",
        "rcshowhidecategorization-hide": "چیهر داتین",
-       "rclinks": "آ آخیرئین $1 تغیرانئ نشان داتین که به $2 اخیرئین روچانئ تا پیش بوته انت<br />$3",
+       "rclinks": "آ آخیرئین $1 تغیرانئ نشان داتین که به $2 اخیرئین روچانئ تا پیش بوته انت",
        "diff": "فرق",
        "hist": "تاریخچه",
        "hide": "چیهر داتین",
        "undeleteviewlink": "دیستین",
        "undeleteinvert": "انتخابئ سرچپي کورتین",
        "undeletecomment": "دلیل:",
-       "undeletedrevisions": "$1 ئی نخسه احیا {{PLURAL:$1|بوت}}",
-       "undeletedrevisions-files": "$1 نخسه و $2 فایل پداجۆڑ {{PLURAL:$1|بوت|بوتنت}}.",
-       "undeletedfiles": "$1 ئی فایل پدا جۆڑ {{PLURAL:$1|بوت|بوتنت}}.",
        "cannotundelete": "پدا جۆڑ کورتین ناکام ات:\n$1",
        "undeletedpage": "'''$1 پدا جۆڑ بوت'''\n\nپه پاک بوته ئین و پدا جۆڑ بوته ئین سیاهه ئی خاتیرا بئ [[Special:Log/delete|پاک بوته ئین ئانی سیاهه]] ئی تا برۆیت.",
        "undelete-header": "په آ دیما که بئ ای آخیرا پاک بوته انت بئ   [[Special:Log/delete|پاک بوته ئین ئانی سیاهه]] ئا بگیندیت.",
        "logentry-managetags-create": "$1 تگ «$4» ئا {{GENDER:$2|ج\tۆڑ کورت}}",
        "log-name-tag": "خالیجای ٹاپه",
        "rightsnone": "(هیچ)",
-       "revdelete-summary": "ایڈیتی خاصه",
        "feedback-back": "بیئرگشت",
        "feedback-bugnew": "دیستونئ . نوکین مشکل ئی راپور دیئ",
        "feedback-cancel": "کنسیل",
index 1990c25..25da988 100644 (file)
        "rcshowhidecategorization": "$1 पन्ना श्रेणीकरण",
        "rcshowhidecategorization-show": "देखावल जाय",
        "rcshowhidecategorization-hide": "छिपावल जाय",
-       "rclinks": "पछिला $2 दिन में भइल $1 बदलाव देखावल जाय<br />$3",
+       "rclinks": "पछिला $2 दिन में भइल $1 बदलाव देखावल जाय",
        "diff": "अंतर",
        "hist": "इतिहास",
        "hide": "छिपावल जाय",
index 3e79912..1a409db 100644 (file)
        "externaldberror": "Ada kasalahan apakah kacucukan basis data atawa Pian kada bulih mamutakhirakan akun luar.",
        "login": "Babuat",
        "nav-login-createaccount": "Babuat log / ulah akun",
-       "userlogin": "Babuat log / ulah akun",
-       "userloginnocreate": "Babuat log",
        "logout": "Kaluar",
        "userlogout": "Kaluar",
        "notloggedin": "Balum babuat log",
-       "nologin": "Balum baisi akun? '''$1'''.",
-       "nologinlink": "Ulah sabuting akun",
        "createaccount": "Ulah akun",
-       "gotaccount": "Hudah baisi sabuting akun? $1.",
-       "gotaccountlink": "Babuat log",
-       "userlogin-resetlink": "Kada ingat rarincian babuat log Pian?",
        "createaccountmail": "Malalui suril",
-       "createaccountreason": "Alasan:",
        "badretype": "Katasunduk nang Pian buati kada pas.",
        "userexists": "Ngaran pamakai nang dibuati hudah dipuruk urang lain.\nMuhun pilih sabuting ngaran lain.",
        "loginerror": "Kasalahan babuat log",
        "passwordreset-disabled": "Mambulikakan setelan katasunduk dipajahakan hagan wiki ngini.",
        "passwordreset-username": "Ngaran pamakai:",
        "passwordreset-domain": "Dumain:",
-       "passwordreset-capture": "Tiringikah kulihan suril?",
-       "passwordreset-capture-help": "Amun Pian cintang kutak ngini, suril (awan katasunduk pahadangan) akan ditampaiakan ka Pian bahwasa lagi dikirim ka pamakai.",
        "passwordreset-email": "Alamat suril:",
        "passwordreset-emailtitle": "Rarincian akun pada {{SITENAME}}",
        "passwordreset-emailtext-ip": "Ada urang (pinanya Pian, matan alamat IP $1) maminta sabuting pangingat hagan rarincian akun Pian gasan {{SITENAME}} ($4). Pamakai barikut {{PLURAL:$3|akun|akun}}\ntarait awan suril:\n\n$2\n\n{{PLURAL:$3|katasunduk pahadangan ngini|kakatasunduk pahadangan ngini}} akan kadaluarsa dalam {{PLURAL:$5|asa hari|$5 hari}}.\nPian parlu babuat log wan mamilih katasunduk hanyar wayah ni jua. Amun urang lain nang maminta ngini, atawa amun Pian sudah paingatan awan katasunduk Pian, wan Pian kada handak maubahnya, Pian kawa kada mahuwal pasan ngini wan manyambung mamuruk katasunduk lawas Pian.",
        "saveprefs": "Simpan",
        "restoreprefs": "Bulikakan samunyaan sesetélan default",
        "prefs-editing": "Pambabakan",
-       "rows": "Baris:",
-       "columns": "Kolom:",
        "searchresultshead": "Gagai",
        "stub-threshold": "Ambang watas gasan pormat <a href=\"#\" class=\"stub\">taautan rintisan</a>:",
        "stub-threshold-disabled": "Kada kawa-akan",
        "userrights-reason": "Alasan:",
        "userrights-no-interwiki": "Pian kada baisi ijin hagan mambabak hak pamuruk di wiki lain.",
        "userrights-nodatabase": "Basis data $1 kadada atawa lainan lukal.",
-       "userrights-nologin": "Pian musti [[Special:UserLogin|lbabuat log]] awan sabuah akun pambakal hagan mambari hak pamuruk.",
-       "userrights-notallowed": "Akun Pian kada baisi ijin hagan manambahi atawa malapas hak pamuruk.",
        "userrights-changeable-col": "Gagalambang nang Pian kawa ubah",
        "userrights-unchangeable-col": "Gagalambang nang Pian kada kawa ubah",
        "group": "Galambang:",
        "right-protect": "Ubah tingkat parlindungan wan babakan tutungkaran nang diindungi",
        "right-editprotected": "Babak tungkaran nang dilindungi (kada parlindungan barenteng)",
        "right-editinterface": "Babak antarmuha pamuruk ini",
-       "right-editusercssjs": "Babak pamuruk lain babarakas CSS wan JavaScript",
        "right-editusercss": "Babak pamruk lain babarakas CSS",
        "right-edituserjs": "Babak pamuruk lain babarakas JavaScript",
        "right-rollback": "Mambulikakan hancap bababakan matan pamuruk tauncit nang mambabak sabuah tungkaran tatantu",
        "right-siteadmin": "Sunduk wan buka sunduk basis data",
        "right-override-export-depth": "Ekspur tutungkaran tamasuk tutungkaran tataut sampai kadalaman 5",
        "right-sendemail": "Mangirim suril ka papamuruk lain",
-       "right-passwordreset": "Tiringi setelan-pulang katasunduk suril",
        "newuserlogpage": "Log pamakai hanyar",
        "newuserlogpagetext": "Ngini adalah sabuah log paulahan pamuruk.",
        "rightslog": "Log paubahan hak masuk",
        "rcshowhideanons": "$1 pamakai kada bangaran",
        "rcshowhidepatr": "$1 babakan ta'awasi",
        "rcshowhidemine": "$1 babakan ulun",
-       "rclinks": "Tampaiakan $1 paubahan pahanyarnya dalam $2 hari tauncit<br />$3",
+       "rclinks": "Tampaiakan $1 paubahan pahanyarnya dalam $2 hari tauncit",
        "diff": "bida",
        "hist": "halam",
        "hide": "Sungkupakan",
        "undeleteviewlink": "tiringi",
        "undeleteinvert": "Bulikakan pilihan",
        "undeletecomment": "Alasan:",
-       "undeletedrevisions": "{{PLURAL:$1|1 ralatan|$1 raralatan}} dibulikakan",
-       "undeletedrevisions-files": "{{PLURAL:$1|1 ralatan|$1 raralatan}} and {{PLURAL:$2|1 barakas|$2 babarakas}} dibulikakan",
-       "undeletedfiles": "$1 {{PLURAL:$1|barakas|babarakas}} dibulikakan",
        "cannotundelete": "Walang mahapus gagal;\nada urang lain nang badahulu mawalangi pahapusan tungkaran ngini.",
        "undeletedpage": "'''$1 sudah dibulikakan'''\nJanaki [[Special:Log/delete|log pahapusan]] gasan sabuting rakaman matan pahapusan wan pambulikakan.",
        "undelete-header": "Janaki [[Special:Log/delete|log pahapusan]] gasan tutungkaran hanyar tahapus.",
        "logentry-newusers-create2": "$1 ma-ulah sabuting akun pamakai $3",
        "logentry-newusers-autocreate": "Akun $1 utumatis diulah",
        "rightsnone": "(kadada)",
-       "revdelete-summary": "Kasimpulan babakan",
        "feedback-adding": "Manambahi kitihanbalik ka tungkaran...",
        "feedback-bugcheck": "Harat! hanyar dipariksa bahwasa ngini lainan salah asa [$1 bug nang dipinandui].",
        "feedback-bugnew": "Ulun mamariksa. Malapurakan sabuah bug hanyar",
        "feedback-thanks": "Tarimakasih! jitihanbalik Pian sudah dipusakan ka si tungkaran \"[$2 $1]\".",
        "searchsuggest-search": "Gagai",
        "searchsuggest-containing": "isian ...",
-       "api-error-missingresult": "Kasalahan intarnal: kada kawa manantuakan napakah panyalinan tuntung.",
-       "api-error-mustbeloggedin": "Pian harus babuat ka log gasan maunggah barakas.",
-       "api-error-mustbeposted": "Ada bug di parangkat lamah naya; kada mamakai mituda HTTP nang bujur.",
-       "api-error-noimageinfo": "Paunggahan tuntung, tagal paladen kada mambarii inpurmasi napa haja masalah barakas.",
-       "api-error-nomodule": "Kasalahan intarnal: kada ada modul unggahan nang ditatapakan.",
-       "api-error-ok-but-empty": "Kasalahan intarnal: kada ada tanggapan matan paladen.",
-       "api-error-overwrite": "Kada dibariakan manindihi barakas nang sudah ada.",
        "api-error-stashfailed": "Kasalahan intarnal: server gagal manyimban barakas samantara.",
-       "api-error-timeout": "Peladen kada marispun di waktu nang diharapakan",
-       "api-error-unclassified": "Tajadi kasalahan nang kada dikatahui.",
-       "api-error-unknown-code": "Kasalahan kada dipinandui: \"$1\".",
-       "api-error-unknown-error": "Kasalahan intarnal: tajadi kasalahan pas mancuba maunggah barakas Pian.",
        "api-error-unknown-warning": "Paringatan kada dipinandui: \"$1\".",
        "api-error-unknownerror": "Kasalahan kada dipinandui: \"$1\".",
-       "api-error-uploaddisabled": "Paunggahan dinunaktipakan di wiki naya.",
-       "api-error-verification-error": "Barakas naya kira-kira rusak atawa baisi ikstinsi nang salah.",
        "special-characters-group-latin": "Latin",
        "special-characters-group-ipa": "IPA",
        "special-characters-group-symbols": "Simbul",
index 50bcd54..e7cbfb8 100644 (file)
@@ -32,7 +32,8 @@
                        "আজিজ",
                        "Kayser Ahmad",
                        "NahidSultan",
-                       "Elias Ahmmad"
+                       "Elias Ahmmad",
+                       "Catrope"
                ]
        },
        "tog-underline": "সংযোগের নিচে দাগ দেখানো হোক:",
        "title-invalid-too-long": "অনুরোধকৃত পাতার শিরোনামটি অত্যধিক দীর্ঘ। ইউটিএফ-৮ সাংকেতিকীকরণ অনুযায়ী এটি $1 {{PLURAL:$1|বাইটের}} থেকে দীর্ঘতর হতে পারবে না।",
        "title-invalid-leading-colon": "অনুরোধকৃত পাতার শিরোনামটির শুরুতে একটি অবৈধ কোলন চিহ্ন (:) রয়েছে।",
        "perfcached": "নিচের উপাত্তগুলো ক্যাশ থেকে নেয়া এবং সম্পূর্ণ হালনাগাদকৃত না-ও হতে পারে। সর্বোচ্চ {{PLURAL:$1|একটি ফলাফল|$1 টি ফলাফল}} ক্যাশে থাকতে পারে।",
-       "perfcachedts": "নিচের উপাত্তগুলো ক্যাশ থেকে নেয়া এবং সর্বশেষ $1 তারিখে হালনাগাদ করা হয়েছে। সর্বোচ্চ {{PLURAL:$4|একটি ফলাফল|$4টি ফলাফল}} ক্যাশে থাকতে পারে।",
+       "perfcachedts": "নিà¦\9aà§\87র à¦\89পাতà§\8dতà¦\97à§\81লà§\8b à¦\95à§\8dযাশ à¦¥à§\87à¦\95à§\87 à¦¨à§\87য়া à¦\8fবà¦\82 à¦¸à¦°à§\8dবশà§\87ষ $1 à¦¤à¦¾à¦°à¦¿à¦\96à§\87 à¦¹à¦¾à¦²à¦¨à¦¾à¦\97াদ à¦\95রা à¦¹à¦¯à¦¼à§\87à¦\9bà§\87। à¦\8fতà§\87 à¦¸à¦°à§\8dবà§\8bà¦\9aà§\8dà¦\9a {{PLURAL:$4|à¦\8fà¦\95à¦\9fি à¦«à¦²à¦¾à¦«à¦²|$4à¦\9fি à¦«à¦²à¦¾à¦«à¦²}} à¦\95à§\8dযাশà§\87 à¦¥à¦¾à¦\95তà§\87 à¦ªà¦¾à¦°à§\87।",
        "querypage-no-updates": "এই পাতার জন্য হালনাগাদ নিষ্ক্রিয় করা হয়েছে। এখানে রাখা উপাত্তগুলি এ মুহূর্তে হালনাগাদ করা হবে না।",
        "viewsource": "উৎস দেখুন",
        "viewsource-title": "$1-এর উৎস দেখুন",
        "readonlywarning": "<strong>সতর্কবার্তা: রক্ষণাবেক্ষণের জন্য ডাটাবেজ অবরুদ্ধ রাখা হয়েছে, তাই এই মুহূর্তে আপনি আপনার সম্পাদনা সংরক্ষণ করতে পারবেন না।</strong>\nআপনি চাইলে লেখাটি প্রতিলিপি করে কোন টেক্সট ফাইলে সেঁটে ভবিষ্যতের জন্য সংরক্ষণ করতে পারেন।\n\nযে সিস্টেম প্রশাসক ডাটাবেজটি  অবরুদ্ধ করেছেন তিনি এই ব্যাখ্যা দিয়েছেন: $1",
        "protectedpagewarning": "'''সতর্কীকরণ: এই পাতাটি বন্ধ করা হয়েছে; কেবলমাত্র প্রশাসক মর্যাদার ব্যবহারকারীরাই এটি সম্পাদনা করতে পারবেন।'''\nআপনার সুবিধার্থে পাতাটির সাম্প্রতিক সংরক্ষণ লগের বিবরণ নিচে দেওয়া হলো।",
        "semiprotectedpagewarning": "'''নোট:''' এই পাতাটির ব্যবহার নিয়ন্ত্রণ করা হয়েছে তাই নিবন্ধনকৃত ব্যবহারকারী এটি সম্পাদনা করতে পারবেন।\nআপনার সুবিধার্থে পাতাটির সাম্প্রতিক সংরক্ষণ লগের বিবরণ নিচে দেওয়া হলো।",
-       "cascadeprotectedwarning": "<strong>সতর্কীকরণ:</strong> এই পাতাটি সুরক্ষিত, ফলে এটি শুধুমাত্র প্রশাসক অধিকারপ্রাপ্ত ব্যবহারকারীগণ সম্পাদনা করতে পারেন, কারণ এটি নিচের প্রপাতাকার-সুরক্ষিত {{PLURAL:$1|পাতায়|পাতাসমূহে}} অন্তর্ভুক্ত আছে:",
+       "cascadeprotectedwarning": "<strong>সতর্কীকরণ:</strong> এই পাতাটি সুরক্ষিত, ফলে এটি শুধুমাত্র [[Special:ListGroupRights|নির্দিষ্ট অধিকারপ্রাপ্ত]] ব্যবহারকারীগণ সম্পাদনা করতে পারেন, কারণ এটি নিচের প্রপাতাকার-সুরক্ষিত {{PLURAL:$1|পাতায়|পাতাসমূহে}} অন্তর্ভুক্ত আছে:",
        "titleprotectedwarning": "'''সতর্কীকরণ: এই পাতাটির ব্যবহার সীমিত করা হয়েছে, যাতে কেবলমাত্র [[Special:ListGroupRights|এই নির্দিষ্ট অনুমতিপ্রাপ্ত]] ব্যবহারকারী এটি তৈরি করতে পারেন।'''\nআপনার সুবিধার্থে পাতাটির সাম্প্রতিক সংরক্ষণ লগের বিবরণ নিচে দেওয়া হলো।",
        "templatesused": "এই পাতায় ব্যবহৃত {{PLURAL:$1|টেমপ্লেট|টেমপ্লেটসমূহ}}:",
        "templatesusedpreview": "এই প্রাকদর্শনে ব্যবহৃত {{PLURAL:$1|টেমপ্লেট|টেমপ্লেটসমূহ}}:",
        "logdelete-text": "অপসারিত লগ ইভেন্টসমূহ এখনও লগে প্রদর্শিত হয়, কিন্তু সেই বিষয়বস্তুর অংশগুলি সর্বসাধারণ দেখতে পারেবে না।",
        "revdelete-text-others": "অন্যান্য প্রশাসকেরা তার পরেও এই লুকানো বিষয়বস্তুগুলি দেখতে পারবেন এবং প্রয়োজনে সেগুলো ফিরিয়ে আনতে পারবেন, যদি অন্যান্য কোনো বাধা না থাকে।",
        "revdelete-confirm": "অনুগ্রহ করে নিশ্চিত করুন যে আপনি এটি করতে চাচ্ছিলেন, আপনি এর ফলাফল সম্পর্কে অবগত আছেন, এবং [[{{MediaWiki:Policy-url}}|নীতিমালার]] উপর ভিত্তি করেই এই কাজটি করছেন।",
-       "revdelete-suppress-text": "নিচের বিষয়গুলোর ক্ষেত্রেই '''কেবলমাত্র'''  চাপাচাপি করা যাবে:\n* সম্ভাব্য মানহানিকর তথ্য\n* ভুল ব্যক্তিগত তথ্য\n*: ''বাসার ঠিকানা এবং ফোন নম্বর, সোসাল সিকিউরিটি নম্বর, ইত্যাদি।''",
+       "revdelete-suppress-text": "নিচের বিষয়গুলোর ক্ষেত্রেই <strong>কেবলমাত্র</strong> গোপন করা যাবে:\n* সম্ভাব্য মানহানিকর তথ্য\n* ভুল ব্যক্তিগত তথ্য\n*: <em>বাসার ঠিকানা এবং ফোন নম্বর, সামাজিক নিরাপত্তা নম্বর, ইত্যাদি।</em>",
        "revdelete-legend": "দৃষ্টিপাত সীমাবদ্ধ করো",
        "revdelete-hide-text": "সংশোধনের লেখা",
        "revdelete-hide-image": "ফাইলের বিষয়বস্তু লুকিয়ে রাখা হোক",
        "saveusergroups": "{{GENDER:$1|ব্যবহারকারীর}} দল সংরক্ষণ করো",
        "userrights-groupsmember": "সদস্য:",
        "userrights-groupsmember-auto": "শর্তহীন সদস্য",
-       "userrights-groups-help": "আপনি এই ব্যবহারকারীর বর্তমান দল পরিবর্তন করতে পারবেন:\n* টিক চিহ্ন দেওয়া ঘরের অর্থ ব্যবহারকারী ঐ দলের অন্তর্ভুক্ত।\n* টিক চিহ্ন বিহীন ঘরের অর্থ ব্যবহারকারী ঐ দলের অন্তর্ভুক্ত নন।\n* একটি তারকা চিহ্ন (*) দ্বারা বোঝানো হচ্ছে এই দলের অন্তর্ভুক্তির পর আপনি আর তা বাতিল করতে পারবেন না, বা তদ্বিপরীত।\n* একটি হ্যাশ চিহ্ন (#) দ্বারা বোঝানো হচ্ছে আপনি শুধুমাত্র এই দলের মেয়াদ শেষ হওয়ার সময় পিছনে নিতে পারবেন; কিন্তু সামনে নিতে পারবেন না।",
+       "userrights-groups-help": "à¦\86পনি à¦\8fà¦\87 à¦¬à§\8dযবহারà¦\95ারà§\80র à¦¬à¦°à§\8dতমান à¦¦à¦² à¦ªà¦°à¦¿à¦¬à¦°à§\8dতন à¦\95রতà§\87 à¦ªà¦¾à¦°à¦¬à§\87ন:\n* à¦\9fিà¦\95 à¦\9aিহà§\8dন à¦¦à§\87à¦\93য়া à¦\98রà§\87র à¦\85রà§\8dথ à¦¬à§\8dযবহারà¦\95ারà§\80 à¦\90 à¦¦à¦²à§\87র à¦\85নà§\8dতরà§\8dভà§\81à¦\95à§\8dত।\n* à¦\9fিà¦\95 à¦\9aিহà§\8dন à¦¬à¦¿à¦¹à§\80ন à¦\98রà§\87র à¦\85রà§\8dথ à¦¬à§\8dযবহারà¦\95ারà§\80 à¦\90 à¦¦à¦²à§\87র à¦\85নà§\8dতরà§\8dভà§\81à¦\95à§\8dত à¦¨à¦¨à¥¤\n* à¦\8fà¦\95à¦\9fি à¦¤à¦¾à¦°à¦\95া à¦\9aিহà§\8dন (*) à¦¦à§\8dবারা à¦¬à§\8bà¦\9dানà§\8b à¦¹à¦\9aà§\8dà¦\9bà§\87 à¦\8fà¦\87 à¦¦à¦²à§\87র à¦\85নà§\8dতরà§\8dভà§\81à¦\95à§\8dতির à¦ªà¦° à¦\86পনি à¦\86র à¦¤à¦¾ à¦¬à¦¾à¦¤à¦¿à¦² à¦\95রতà§\87 à¦ªà¦¾à¦°à¦¬à§\87ন à¦¨à¦¾, à¦¬à¦¾ à¦¤à¦¦à§\8dবিপরà§\80ত।\n* à¦\8fà¦\95à¦\9fি à¦¹à§\8dযাশ à¦\9aিহà§\8dন (#) à¦¦à§\8dবারা à¦¬à§\8bà¦\9dানà§\8b à¦¹à¦\9aà§\8dà¦\9bà§\87 à¦\86পনি à¦¶à§\81ধà§\81মাতà§\8dর à¦\8fà¦\87 à¦¦à¦²à§\87র à¦¸à¦¦à¦¸à§\8dযতার à¦®à§\87য়াদ à¦¶à§\87ষ à¦¹à¦\93য়ার à¦¸à¦®à¦¯à¦¼ à¦ªà¦¿à¦\9bনà§\87 à¦¨à¦¿à¦¤à§\87 à¦ªà¦¾à¦°à¦¬à§\87ন; à¦\95িনà§\8dতà§\81 à¦¸à¦¾à¦®à¦¨à§\87 à¦¨à¦¿à¦¤à§\87 à¦ªà¦¾à¦°à¦¬à§\87ন à¦¨à¦¾à¥¤",
        "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-cannot-shorten-expiry": "\"$1\" à¦¦à¦²à¦\9fির à¦¸à¦¦à¦¸à§\8dযতার à¦®à§\87য়াদà§\8bতà§\8dতà§\80রà§\8dণ à¦¹à¦¬à¦¾à¦° à¦¸à¦®à¦¯à¦¼ à¦\93 à¦¤à¦¾à¦°à¦¿à¦\96 à¦\86পনি à¦ªà§\82রà§\8dববরà§\8dতà§\80 à¦\95à§\8bন à¦¸à¦®à¦¯à¦¼à§\87 à¦\8fà¦\97িয়à§\87 à¦¨à¦¿à¦¯à¦¼à§\87 à¦\86সতà§\87 à¦ªà¦¾à¦°à¦¬à§\87ন à¦¨à¦¾à¥¤ à¦¯à§\87সব à¦¬à§\8dযবহারà¦\95ারà§\80র à¦\8fà¦\87 à¦¦à¦²à¦\9fি à¦¯à§\8bà¦\97 à¦¬à¦¾ à¦\85পসারণ à¦\95রার à¦\85নà§\81মতি à¦\86à¦\9bà§\87, à¦\95à§\87বল à¦¤à¦¾à¦°à¦¾à¦\87 à¦®à§\87য়াদà§\8bতà§\8dতà§\80রà§\8dণ à¦¹à¦¬à¦¾à¦° à¦¸à¦®à¦¯à¦¼ à¦\93 à¦¤à¦¾à¦°à¦¿à¦\96 à¦\8fà¦\97িয়à§\87 à¦¨à¦¿à¦¯à¦¼à§\87 à¦\86সতà§\87 à¦ªà¦¾à¦°à¦¬à§\87ন।",
        "userrights-conflict": "ব্যবহারকারী অধিকার দ্বন্দ্ব! অনুগ্রহ করে নিশ্চিত হোন এবং পুনরায় চেষ্টা করুন।",
        "group": "দল:",
        "group-user": "ব্যবহারকারীগণ",
        "right-editsemiprotected": "পাতা সম্পাদনা সুরক্ষিত রয়েছে,  \"{{int:protect-level-autoconfirmed}}\"",
        "right-editcontentmodel": "পাতার তথ্যের ধরণ সম্পাদনা করুন",
        "right-editinterface": "ব্যবহারকারী ইন্টারফেস সম্পাদনা",
-       "right-editusercssjs": "অন্য ব্যবহারকারীগণের CSS এবং JS ফাইল সম্পাদনা",
        "right-editusercss": "অন্য ব্যবহারকারীগণের CSS ফাইল সম্পাদনা",
        "right-edituserjs": "অন্য ব্যবহারকারীগণের JS ফাইল সম্পাদনা",
        "right-editmyusercss": "আপনার নিজস্ব ব্যবহারকারী সিএসএস ফাইল সম্পাদনা করুন",
        "rcfilters-hideminor-conflicts-typeofchange": "কিছু নির্দিষ্ট ধরনের সম্পাদনা \"অনুল্লেখ্য\" হিসেবে চিহ্নিত করা সম্ভব নয়, তাই এই ছাঁকনিটির সাথে নিম্নোক্ত পরিবর্তনের ধরন ছাঁকনিগুলির সংঘর্ষ আছে: $1",
        "rcfilters-typeofchange-conflicts-hideminor": "এই \"পরিবর্তনের ধরন\"-সংক্রান্ত ছাঁকনিটির সাথে \"অনুল্লেখ্য সম্পাদনা\" ছাঁকনিটির সংঘর্ষ আছে। কিছু নির্দিষ্ট ধরনের সম্পাদনা \"অনুল্লেখ্য\" হিসেবে চিহ্নিত করা সম্ভব নয়।",
        "rcnotefrom": "<strong>$2</strong>টা থেকে সংঘটিত পরিবর্তনগুলি (সর্বোচ্চ <strong>$1টি</strong> দেখানো হয়েছে)।",
+       "rclistfromreset": "তারিখ নির্বাচন পুনঃস্থাপন করুন",
        "rclistfrom": "$2, $3 তারিখের পর সংঘটিত নতুন পরিবর্তনগুলো দেখাও",
        "rcshowhideminor": "অনুল্লেখ্য পরিবর্তনগুলো $1",
        "rcshowhideminor-show": "দেখাও",
        "rcshowhidecategorization": "পাতা শ্রেণীবদ্ধকরণ $1",
        "rcshowhidecategorization-show": "দেখাও",
        "rcshowhidecategorization-hide": "লুকিয়ে রাখো",
-       "rclinks": "'''প্রদর্শনের ধরন'''<br />\n* বিগত ($2) দিনের শেষ ($1)টি পরিবর্তন দেখাও\n* $3",
+       "rclinks": "'''প্রদর্শনের ধরন'''<br />\n* বিগত ($2) দিনের শেষ ($1)টি পরিবর্তন দেখাও",
        "diff": "পরিবর্তন",
        "hist": "ইতিহাস",
        "hide": "লুকিয়ে রাখো",
        "php-uploaddisabledtext": "পিএইপি -এ ফাইল আপলোড নিস্ক্রিয় রয়েছে।\nঅনুগ্রহ করে file_uploads সেটিং পরীক্ষা করুন।",
        "uploadscripted": "এই ফাইলে এমন HTML বা স্ক্রিপ্ট কোড আছে যা একটি ওয়েব ব্রাউজার ভুল বুঝতে পারে।",
        "upload-scripted-pi-callback": "এক্সএমএল-স্টাইলশিট প্রক্রিয়াকরণ নির্দেশনাবিশিষ্ট কোন ফাইল আপলোড করা সম্ভব নয়।",
+       "upload-scripted-dtd": "SVG ফাইল আপলোড করা যাবে না যা অ-মানক DTD ঘোষণা ধারণ করে।",
        "uploaded-script-svg": "আপলোডকৃত SVG ফাইলে স্ক্রিপ্টযোগ্য উপাদান \"$1\" পাওয়া গেছে।",
        "uploaded-hostile-svg": "আপলোড করা SVG ফাইলের শৈলী উপাদানে অনিরাপদ সিএসএস পাওয়া গেছে।",
        "uploaded-event-handler-on-svg": "এসভিজি ফাইলের জন্য <code>$1=\"$2\"</code> ইভেন্ট-হ্যান্ডলার বৈশিষ্ট্যটি নির্ধারণ করা অনুমোদিত নয়।",
        "prefixindex": "উপসর্গ সহ সমস্ত পাতা",
        "prefixindex-namespace": "উপসর্গ সহ সকল পাতা ($1 নামস্থান)",
        "prefixindex-submit": "দেখাও",
-       "prefixindex-strip": "তালিà¦\95া à¦¥à§\87à¦\95à§\87 à¦ªà§\8dরিফিà¦\95à§\8dস à¦¸à¦°à¦¾à¦\93",
+       "prefixindex-strip": "তালিà¦\95া à¦¥à§\87à¦\95à§\87 à¦\89পসরà§\8dà¦\97 à¦²à§\81à¦\95ান",
        "shortpages": "সংক্ষিপ্ত পাতাসমূহ",
        "longpages": "দীর্ঘ পাতাসমূহ",
        "deadendpages": "যেসব পাতা থেকে কোনো সংযোগ নেই",
        "rollback-missingparam": "অনুরোধে প্রয়োজনীয় প্যারামিটারগুলি অনুপস্থিত।",
        "rollback-missingrevision": "সংশোধনের উপাত্ত লোড করতে অক্ষম।",
        "cantrollback": "পূর্বের সংস্করণে ফেরত যাওয়া সম্ভব হল না, সর্বশেষ সম্পাদনাকারী এই নিবন্ধটির একমাত্র লেখক।",
-       "alreadyrolled": "[[User:$2|$2]] ([[User talk:$2|talk]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) দ্বারা সম্পাদিত সর্বশেষ [[:$1]] সম্পাদনাটি পুনর্বহাল করা যাচ্ছে না;\nঅন্য কোন ব্যবহারকারী এই পাতা ইতিমধ্যে সম্পাদনা বা পুনর্বহাল করেছেন।\n\nএই পাতায় সর্বোশেষে [[User:$3|$3]] ([[User talk:$3|talk]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]) দ্বারা সম্পাদিত।",
+       "alreadyrolled": "[[User:$2|$2]] ([[User talk:$2|আলাপ]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) দ্বারা সম্পাদিত [[:$1]]-এর সর্বশেষ সম্পাদনাটি পুনর্বহাল করা যাচ্ছে না;\nঅন্য কোন ব্যবহারকারী এই পাতা ইতিমধ্যে সম্পাদনা বা পুনর্বহাল করেছেন।\n\nএই পাতায় সর্বশেষ সম্পাদনা করেছেন [[User:$3|$3]] ([[User talk:$3|আলাপ]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]])।",
        "editcomment": "সম্পাদনা সারাংশ ছিল: \"''$1''\"।",
        "revertpage": "[[Special:Contributions/$2|$2]] ([[User talk:$2|আলাপ]]) এর সম্পাদিত সংস্করণ হতে [[User:$1|$1]] এর সম্পাদিত সর্বশেষ সংস্করণে ফেরত যাওয়া হয়েছে।",
        "revertpage-nouser": "একজন গোপন ব্যবহারকারী কর্তৃক সম্পাদিত সম্পাদনাটি বাতিলপূর্বক {{GENDER:$1|[[User:$1|$1]]}}-এর সর্বশেষ সম্পাদনায় ফেরত যাওয়া হয়েছে।",
        "undeleteviewlink": "দেখাও",
        "undeleteinvert": "ব্যুত্ক্রমে নির্বাচন",
        "undeletecomment": "কারণ:",
-       "undeletedrevisions": "{{PLURAL:$1|১টি সংশোধন|$1টি সংশোধন}} পুনরুদ্ধার করা হয়েছে",
-       "undeletedrevisions-files": "{{PLURAL:$1|১টি সংশোধন|$1টি সংশোধন}} এবং {{PLURAL:$2|১টি ফাইল|$2টি ফাইল}} পুনরুদ্ধার করা হয়েছে",
-       "undeletedfiles": "{{PLURAL:$1|১টি ফাইল|$1টি ফাইল}} পুনরুদ্ধার করা হয়েছে",
        "cannotundelete": "কিছু বা সব পুনরুদ্ধার করা যায়নি:\n$1",
        "undeletedpage": "'''$1 পুনরুদ্ধার করা হয়েছে'''\n\nসাম্প্রতিক মুছে ফেলা ও পুনরুদ্ধারের ঘটনাগুলির জন্য [[Special:Log/delete|অবলুপ্তি লগ]] দেখুন।",
        "undelete-header": "সাম্প্রতিক সময়ে মুছে ফেলা পাতাগুলি দেখতে [[Special:Log/delete|অবলুপ্তি লগ]] দেখুন।",
        "blockipsuccesssub": "বাধা সফল",
        "blockipsuccesstext": "[[Special:Contributions/$1|$1]] কে বাধা দেয়া হয়েছে।<br />\nবাধা দেয়া পুনর্বিবেচনা করতে হলে [[Special:BlockList|বাধা দেয়া তালিকা]] দেখুন।",
        "ipb-blockingself": "আপনি নিজেকেই বাধাপ্রদান করতে যাচ্ছেন! আপনি কী নিশ্চিত যে আপনি এটি-ই করতে চান?",
-       "ipb-confirmhideuser": "\"hide user\" ক্ষমতার মাধ্যমে আপনি একজন ব্যবহারকারীকে বাধা দিতে যাচ্ছেন। এর মাধ্যমে এই ব্যবহারকারীর নাম সকল লিস্ট এবং লগএন্ট্রি থেকে সরিয়ে ফেলা হবে। আপনি কি নিশ্চিতভাবে এটি করতে চান?",
+       "ipb-confirmhideuser": "আপনি \"ব্যবহারকারী লুকানো\" অধিকার যুক্ত একজন ব্যবহারকারীকে বাধা দিতে যাচ্ছেন। এর মাধ্যমে এই ব্যবহারকারীর নাম সকল তালিকা এবং লগের ভুক্তি থেকে সরিয়ে ফেলা হবে। আপনি কি নিশ্চিতভাবে এটি করতে চান?",
        "ipb-confirmaction": "আপনি যদি নিশ্চিত হন আপনি এটি সত্যিকার অর্থেই করতে চান তাহলে অনুগ্রহ করে উপরের \"{{int:ipb-confirm}}\" ঘরটি দেখুন।",
        "ipb-edit-dropdown": "বাধাদানের কারণ সম্পাদনা করুন",
        "ipb-unblock-addr": "$1-এর বাধা তুলে নিন",
        "unblocked-id": "$1 বাধাটি তুলে নেওয়া হয়েছে",
        "unblocked-ip": "[[Special:Contributions/$1|$1]] কে অবরোধমুক্ত করা হয়েছে।",
        "blocklist": "বাধাপ্রাপ্ত ব্যবহারকারী",
+       "autoblocklist": "স্বয়ংক্রিয়বাধা",
+       "autoblocklist-submit": "অনুসন্ধান",
+       "autoblocklist-legend": "স্বয়ংক্রিয়বাধার তালিকা",
+       "autoblocklist-localblocks": "স্থানীয় {{PLURAL:$1|স্বয়ংবাধা|স্বয়ংবাধাসমূহ}}",
+       "autoblocklist-empty": "স্বয়ংক্রিয়বাধার তালিকাটি খালি।",
+       "autoblocklist-otherblocks": "অন্য {{PLURAL:$1|স্বয়ংবাধা|স্বয়ংবাধাসমূহ}}",
        "ipblocklist": "বাধাপ্রাপ্ত ব্যবহারকারী",
        "ipblocklist-legend": "বাধা দেওয়া কোন ব্যবহারকারীকে অনুসন্ধান করুন",
        "blocklist-userblocks": "অ্যাকাউন্ট বাধা লুকানো হোক",
        "htmlform-user-not-valid": "<strong>$1</strong> একটি বৈধ ব্যবহারকারীর নাম নয়।",
        "logentry-delete-delete": "$1 কর্তৃক $3 পাতাটি অপসারিত হয়েছে",
        "logentry-delete-delete_redir": "$1 পুনর্লিখনের দ্বারা $3 পুনর্নির্দেশ {{GENDER:$2|অপসারণ করেছেন}}",
-       "logentry-delete-restore": "$1 কর্তৃক $3 পাতাটি {{GENDER:$2|ফিরিয়ে আনা}} হয়েছে",
+       "logentry-delete-restore": "$1 $3 পাতাটি {{GENDER:$2|পুনরুদ্ধার করেছেন}} ($4)",
+       "logentry-delete-restore-nocount": "$1 $3 পাতাটি {{GENDER:$2|পুনরুদ্ধার করেছেন}}",
+       "restore-count-revisions": "{{PLURAL:$1|১টি সংশোধন|$1টি সংশোধন}}",
+       "restore-count-files": "{{PLURAL:$1|১টি ফাইল|$1টি ফাইল}}",
        "logentry-delete-event": "$1 {{PLURAL:$5|একটি লগ ইভেন্টের|$5 লগ ইভেন্টসমূহের}} দৃশ্যমানতা {{GENDER:$2|পরিবর্তন}} করেছেন $3: $4",
        "logentry-delete-revision": "$1 {{PLURAL:$5|একটি সংস্করণের|$5টি সংস্করণের}} দৃশ্যমানতা {{GENDER:$2|পরিবর্তন}} করেছেন $3: $4",
        "logentry-delete-event-legacy": "$1 $3টায় লগ ইভেন্টসমূহের দৃশ্যমানতা {{GENDER:$2|পরিবর্তন}} করেছেন",
        "special-characters-group-thai": "থাই",
        "special-characters-group-lao": "লাও",
        "special-characters-group-khmer": "খেমার",
+       "special-characters-group-canadianaboriginal": "কানাডীয় আদিবাসী",
        "special-characters-title-endash": "en ড্যাশ",
        "special-characters-title-emdash": "em ড্যাশ",
        "special-characters-title-minus": "বিয়োগ চিহ্ন",
        "restrictionsfield-help": "লাইন প্রতি একটি আইপি ঠিকানা বা CIDR পরিসীমা। সবকিছু সক্রিয় করতে ব্যবহার করুন: :<pre>0.0.0.0/0\n::/0</pre>",
        "revid": "সংশোধন $1",
        "pageid": "পাতার আইডি $1",
-       "rawhtml-notallowed": "&lt;html&gt; ট্যাগ স্বাভাবিক পৃষ্ঠাগুলির বাহিরে ব্যবহার করা যাবে না।"
+       "rawhtml-notallowed": "&lt;html&gt; ট্যাগ স্বাভাবিক পৃষ্ঠাগুলির বাহিরে ব্যবহার করা যাবে না।",
+       "gotointerwiki": "{{SITENAME}} ছেড়ে যাচ্ছেন",
+       "gotointerwiki-invalid": "নিদিষ্টকৃত শিরোনামটি অবৈধ ছিল।",
+       "gotointerwiki-external": "আপনি [[$2]] পরিদর্শন করতে {{SITENAME}} ছাড়তে চলেছেন যা একটি ভিন্ন ওয়েবসাইট।\n\n[$1 $1-এ অবিরত থাকতে এখানে ক্লিক করুন]।",
+       "undelete-cantedit": "আপনি এই পাতাটি ফিরিয়ে আনতে পারবেন না কারণ আপনার এই পাতাটি সম্পাদনা করার অনুমতি নেই।",
+       "undelete-cantcreate": "আপনি এই পাতাটি ফিরিয়ে আনতে পারবেন না কারণ এই নামে কোন পাতা বিদ্যমান নেই ও আপনার এই পাতাটি তৈরি করার অনুমতি নেই।"
 }
index f1b084d..d989014 100644 (file)
        "externaldberror": "ডাটেবেজর মা বেসেপ আহান ইসে নাইলে তরতা বারেদের একাউন্ট বদালানির য়্যাথাং নেই।",
        "login": "হমানি",
        "nav-login-createaccount": "লগইন / একাউন্ট খুল",
-       "userlogin": "হমানি / নৱা একাউন্ট খুলানি",
-       "userloginnocreate": "লগইন",
        "logout": "নিকুলানি",
        "userlogout": "নিকুলানি",
        "notloggedin": "তি লগ-ইন নাকরিসত",
-       "nologin": "তরতা একাউন্টহান নেই থাং? $1",
-       "nologinlink": "একাউন্ট আহান খুল",
        "createaccount": "একাউন্ট খুল",
-       "gotaccount": "মান্নাপা একাউন্ট আহান আগেত্তর আসে? '''$1'''।",
-       "gotaccountlink": "লগইন",
-       "userlogin-resetlink": "তর লগইন করানির পৌ পাহুরলেথাঙ?",
        "createaccountmail": "ই-মেইলন",
-       "createaccountreason": "কারণ:",
        "badretype": "খন্তাচাবি (password) দ্বিয়গি না মিলের।",
        "userexists": "এরে আতাকুরার নাঙ এহান আরাক আগই আগে ব্যবহার করিসে। \nতি আরাক নাঙ আহান বাছ।",
        "loginerror": "লগইনে লালুইসে",
        "prefs-resetpass": "খন্তাচাবি সিলকর",
        "prefs-email": "ই-মেইল অপশনহানি",
        "saveprefs": "ইতু",
-       "columns": "দুরগিঃ",
        "timezoneregion-africa": "আফ্রিকা",
        "timezoneregion-america": "আমেরিকা",
        "timezoneregion-antarctica": "এন্টার্টিকা",
        "rcshowhideanons": "$1 হারানাপাসি আতাকুরা",
        "rcshowhidepatr": "$1 পাহারাত আসে পতানি",
        "rcshowhidemine": "$1 মর পাতানিহানি",
-       "rclinks": "গেলগা $1 হান পতানি দেখাদে $2 দিনরতা <br />$3",
+       "rclinks": "গেলগা $1 হান পতানি দেখাদে $2 দিনরতা",
        "diff": "ফারাক",
        "hist": "ইতিহাসহান",
        "hide": "আরুম",
        "revdelete-restricted": "ডান্ডিকরেকুরাগরাঙ সীমাবদ্ধতাহানি ফলা",
        "revdelete-unrestricted": "ডান্ডিকরেকুরাগরাঙ সীমাবদ্ধতাহানি নেইকর",
        "rightsnone": "(নেই)",
-       "revdelete-summary": "সারাংশ পতানি",
        "searchsuggest-search": "বিসারা",
        "searchsuggest-containing": "আসেতা...",
        "special-characters-group-latin": "লাতিন",
index e0ab301..846759b 100644 (file)
        "redirectedfrom": "(Adkaset eus $1)",
        "redirectpagesub": "Pajenn adkas",
        "redirectto": "Adkas da :",
-       "lastmodifiedat": "Kemmoù diwezhañ degaset d'ar bajenn-mañ, d'an/ar $1 da $2.",
+       "lastmodifiedat": "Kemmoù diwezhañ degaset d'ar bajenn-mañ d'an $1, da $2.",
        "viewcount": "Sellet ez eus bet {{PLURAL:$1|$1 wezh|$1 gwezh}} ouzh ar bajenn-mañ.",
        "protectedpage": "Pajenn warezet",
        "jumpto": "Mont da :",
        "readonlywarning": "<strong>Diwallit : prennet eo bet an diaz roadennoù evit bezañ trezalc'het; setu ne viot ket evit enrollañ ho kemmoù diouzhtu-diouzhtu eta.</strong>\n\nGallout a rit eilañ ha pegañ ho skrid en ur restr testenn all hag enrollañ anezhañ a-benn diwezhatoc'hik.\n\nSetu an displegadenn lakaet gant ar merour reizhiad eo bet prennet an traoù gantañ : $1",
        "protectedpagewarning": "'''KEMENN DIWALL: Gwarezet eo bet ar bajenn-mañ. N'eus nemet an implijerien ganto ar statud merour a c'hall kemmañ anezhi.'''\nEnmont diwezhañ ar marilh a ziskouezer amañ a-is evel dave :",
        "semiprotectedpagewarning": "''Notenn :''' Gwarezet eo ar bajenn-mañ; n'eus nemet an implijerien bet krouet ur gont ganto a kemmañ anezhi. Kasadenn ziwezhañ ar marilh zo diskouezet amañ a-is evel dave :",
-       "cascadeprotectedwarning": "<strong>Diwallit :</strong> Prennet eo ar bajenn-mañ. N'eus nemet ar verourien a c'hall kemmañ anezhi peogwir emañ treuzkludet {{PLURAL:$1|er bajenn|e-mesk ar pajennoù}} da-heul zo bet gwarezet en ur zibab an dibarzh \"skalierad\" :",
+       "cascadeprotectedwarning": "<strong>Diwallit :</strong> Prennet eo bet ar bajenn-mañ. N'eus nemet an implijerien ganto [[Special:ListGroupRights|gwirioù dibar]] a c'hall kemmañ anezhi peogwir emañ treuzkludet {{PLURAL:$1|er bajenn|er pajennoù}} da-heul gwarezet dre skalierad :",
        "titleprotectedwarning": "'''DIWALLIT :  Gwarezet eo bet ar bajenn-mañ e doare ma ranker kaout [[Special:ListGroupRights|gwirioù dibar]] a-benn krouiñ anezhi.''' Kasadenn ziwezhañ ar marilh a zo diskouezet amañ a-is evel dave :",
        "templatesused": "{{PLURAL:$1|Patrom|Patromoù}} implijet war ar bajenn-mañ :",
        "templatesusedpreview": "{{PLURAL:$1|Patrom|Patromoù}} implijet er rakweladenn-mañ :",
        "saveusergroups": "Enrollañ strolladoù an {{GENDER:$1|implijer|implijerez}}",
        "userrights-groupsmember": "Ezel eus :",
        "userrights-groupsmember-auto": "Ezel emplegat eus :",
-       "userrights-groups-help": "Cheñch strolladoù an implijer a c'hallit ober.\n* Ul log asket a verk emañ an implijer er strollad.\n* Ul log diask a verk n'emañ ket an implijer er strollad.\n* Ur * a verk n'hallit ket dilemel ar strollad ur wech bet ouzhpennet ganeoc'h, pe ar c'hontrol.\n* Ur # a verk a c'hallit astenn termen echuiñ ar strollad hepken ; n'hallit ket berraat anezhañ.",
+       "userrights-groups-help": "Cheñch strolladoù an implijer a c'hallit ober.\n* Ul log asket a verk emañ an implijer er strollad.\n* Ul log diask a verk n'emañ ket an implijer er strollad.\n* Ur * a verk n'hallit ket dilemel ar strollad ur wech bet ouzhpennet ganeoc'h, pe ar c'hontrol.\n* Ur # a verk e c'hallit astenn termen an emezelañ er strollad hepken ; n'hallit ket berraat anezhañ.",
        "userrights-reason": "Abeg :",
        "userrights-no-interwiki": "N'oc'h ket aotreet da gemmañ ar gwirioù implijer war wikioù all.",
        "userrights-nodatabase": "N'eus ket eus an diaz titouroù $1 pe n'eo ket lec'hel.",
        "userrights-expiry-options": "1 deiz:1 day,1 sizhun:1 week,1 miz:1 month,3 miz:3 months,6 miz:6 months, bloaz:1 year",
        "userrights-invalid-expiry": "Direizh eo termen echuiñ ar strollad \"$1\".",
        "userrights-expiry-in-past": "Re gozh eo termen echuiñ ar strollad \"$1\".",
-       "userrights-cannot-shorten-expiry": "N'hallit ket astenn termen echuiñ ar strollad \"$1\". N'eus nemet an implijerien aotreet da ouzhpennañ ha lemel ar strollad-mañ a c'hall astenn an termen.",
+       "userrights-cannot-shorten-expiry": "N'hallit ket astenn an termen emezelañ er strollad \"$1\". N'eus nemet an implijerien aotreet da ouzhpennañ pe lemel ar strollad-mañ a c'hall astenn an termen.",
        "userrights-conflict": "Bec'h zo abalamour da gemmoù e gwirioù an implijerien. Adwelit an traoù, mar plij, ha kadarnait ho kemmoù.",
        "group": "Strollad :",
        "group-user": "Implijerien",
        "right-editsemiprotected": "Aozañ ar pajennoù gwarezet evel \"{{int:protect-level-autoconfirmed}}\"",
        "right-editcontentmodel": "Kemmañ patrom danvez ur bajenn bennak",
        "right-editinterface": "Kemmañ an etrefas implijer",
-       "right-editusercssjs": "Kemmañ restroù CSS ha JS implijerien all",
        "right-editusercss": "Kemmañ restroù CSS implijerien all",
        "right-edituserjs": "Kemmañ restroù JS implijerien all",
        "right-editmyusercss": "Aozañ ho restroù implijer CSS deoc'h-c'hwi",
        "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ñ).",
+       "rclistfromreset": "adderaouekaat dibab an deiziad",
        "rclistfrom": "Diskouez ar c'hemmoù diwezhañ abaoe an/ar $3 $2",
        "rcshowhideminor": "$1 ar c'hemmoù dister",
        "rcshowhideminor-show": "Diskouez",
        "rcshowhidecategorization": "$1 rummatadur ar bajenn",
        "rcshowhidecategorization-show": "Diskouez",
        "rcshowhidecategorization-hide": "Kuzhat",
-       "rclinks": "Diskouez an/ar $1 kemm diwezhañ c'hoarvezet e-pad an/ar $2 devezh diwezhañ.<br />$3",
+       "rclinks": "Diskouez an/ar $1 kemm diwezhañ c'hoarvezet e-pad an/ar $2 devezh diwezhañ.",
        "diff": "diforc'h",
        "hist": "ist",
        "hide": "Kuzhat",
        "php-uploaddisabledtext": "Diweredekaet eo bet ar pellgargañ e PHP. Gwiriit an dibarzh arventennoù file_uploads.",
        "uploadscripted": "Er restr-mañ ez eus kodoù HTML pe skriptoù a c'hallfe bezañ kammgomprenet gant ur merdeer Kenrouedad.",
        "upload-scripted-pi-callback": "Dibosupl eo enporzhiañ ur restr enni kemennoù plediñ gant ur follenn stil XML.",
+       "upload-scripted-dtd": "Dibosupl eo enporzhiañ restroù SVG enno un disklêriadur DTD n'eo ket standart.",
        "uploaded-script-svg": "Kavet ez eus bet ul elfenn skriptadus \"$1\" er restr SVG enporzhiet.",
        "uploaded-hostile-svg": "Kavet ez eus bet ur CSS diasur en elfenn stil ur restr SVG.",
        "uploaded-event-handler-on-svg": "N'eo ket aotreet spisaat perzhioù merañ darvoudoù <code>$1=\"$2\"</code> er restroù SVG.",
        "undeleteviewlink": "gwelet",
        "undeleteinvert": "Eilpennañ an diuzadenn",
        "undeletecomment": "Abeg :",
-       "undeletedrevisions": "Adsavet {{PLURAL:$1|1 stumm|$1 stumm}}",
-       "undeletedrevisions-files": "Adsavet ez ez eus bet {{PLURAL:$1|1 stumm|$1 stumm}} ha {{PLURAL:$2|1 restr|$2 restr}}",
-       "undeletedfiles": "{{PLURAL:$1|1 restr|$1 restr}} adsavet",
        "cannotundelete": "Dibosupl eo bet nullañ diziverkadennoù zo pe an holl anezho :\n$1",
        "undeletedpage": "'''Diziverket eo bet $1'''\n\nSellit ouzh [[Special:Log/delete|marilh an diverkadennoù]] evit teuler ur sell ouzh an diverkadennoù diwezhañ.",
        "undelete-header": "Gwelet [[Special:Log/delete|al log diverkañ]] evit ar pajennoù diverket nevez zo.",
        "sp-contributions-uploads": "Enporzhiadennoù",
        "sp-contributions-logs": "marilhoù",
        "sp-contributions-talk": "kaozeal",
-       "sp-contributions-userrights": "Merañ ar gwirioù",
+       "sp-contributions-userrights": "merañ gwirioù {{GENDER:$1|an implijer|an implijerez}}",
        "sp-contributions-blocked-notice": "Stanket eo an implijer-mañ evit poent. Dindan emañ merket moned diwezhañ marilh ar stankadennoù, d'ho kelaouiñ :",
        "sp-contributions-blocked-notice-anon": "Stanket eo ar chomlec'h IP-mañ evit ar mare.\nDindan emañ merket enmont diwezhañ marilh ar stankadennoù, d'ho kelaouiñ :",
        "sp-contributions-search": "Klask degasadennoù",
        "unblocked-id": "Distanket eo bet $1",
        "unblocked-ip": "[[Special:Contributions/$1|$1]] zo bet distanket.",
        "blocklist": "Implijerien stanket",
+       "autoblocklist": "Stankadennoù emgefre",
+       "autoblocklist-submit": "Klask",
+       "autoblocklist-legend": "Rollañ ar stankadennoù emgefre",
+       "autoblocklist-localblocks": "{{PLURAL:$1|Stankadenn emgefre|Stankadennoù emgefre}} lec'hel",
+       "autoblocklist-empty": "Goullo eo roll ar stankadennoù emgefre",
+       "autoblocklist-otherblocks": "{{PLURAL:$1|Stankadenn emgefre|Stankadennoù emgefre}} all",
        "ipblocklist": "Implijerien stanket",
        "ipblocklist-legend": "Kavout un implijer stanket",
        "blocklist-userblocks": "Kuzhat ar stankadennoù kont",
        "anonymous": "{{PLURAL:$1|Implijer|Implijerien}} dizanv war {{SITENAME}}",
        "siteuser": "Implijer(ez) $1 eus {{SITENAME}}",
        "anonuser": "implijer dizanv $1 eus {{SITENAME}}",
-       "lastmodifiedatby": "Kemmet eo bet ar bajenn-mañ da ziwezhañ da $2, d'an $1 gant $3",
+       "lastmodifiedatby": "Kemmet eo bet ar bajenn-mañ da ziwezhañ da $2, d'an $1 gant $3.",
        "othercontribs": "Diazezet war labour $1.",
        "others": "re all",
        "siteusers": "{{PLURAL:$2|{{GENDER:$1|An implijer|An implijerez}}|{{GENDER:$1|An implijerien|An implijerezed}}}} $1 eus {{SITENAME}}",
        "confirmrecreate": "{{GENDER:$1|Diverket}} eo bet ar bajenn-mañ gant [[User:$1|$1]] ([[User talk:$1|kaozeal]]) goude ma vije bet kroget ganeoc'h kemmañ anezhi :\n: ''$2''\nKadarnait mar plij e fell deoc'h krouiñ ar pennad-mañ en-dro.",
        "confirmrecreate-noreason": "{{GENDER:$1|Diverket}} eo bet ar bajenn-mañ gant [[User:$1|$1]] ([[User talk:$1|kaozeal]]) goude ma vije bet kroget ganeoc'h kemmañ anezhi. Kadarnait e fell deoc'h adkrouiñ ar pennad-mañ e gwirionez.",
        "recreate": "Adkrouiñ",
+       "confirm-purge-title": "Spurjañ ar bajenn-mañ.",
        "confirm_purge_button": "Mat eo",
        "confirm-purge-top": "Spurjañ krubuilh ar bajenn-mañ?",
        "confirm-purge-bottom": "Spurjañ ur bajenn a a naeta ar grubuilh hag a redi ar stumm nevesañ da zont war wel.",
        "htmlform-user-not-valid": "Un anv implijer direizh eo <strong>$1</strong>.",
        "logentry-delete-delete": "Diverket eo bet ar bajenn $3 gant $1",
        "logentry-delete-delete_redir": "{{GENDER:$2|Friket}} eo bet an adkas $3 gant $1",
-       "logentry-delete-restore": "Assavet eo bet ar bajenn $3 gant $1",
+       "logentry-delete-restore": "{{GENDER:$2|Assavet eo bet}} ar bajenn $3 ($4) gant $1",
+       "logentry-delete-restore-nocount": "{{GENDER:$2|Asavet eo bet}} ar bajenn $3 gant $1",
+       "restore-count-revisions": "{{PLURAL:$1|1 stumm|$1 stumm}}",
+       "restore-count-files": "{{PLURAL:$1|1 restr|$1 restr}}",
        "logentry-delete-event": "Kemmet eo bet gwelusted {{PLURAL:$5|un darvoud eus ar marilh|$5 darvoud eus ar marilh}} d'an $3 gant $1 : $4",
        "logentry-delete-revision": "{{GENDER:$2|Kemmet}} eo bet gwelusted {{PLURAL:$5|reizhadenn|$5 reizhadenn}} war ar bajenn $3 gant $1 : $4",
        "logentry-delete-event-legacy": "{{GENDER:$2|Kemmet}} eo bet gwelusted darvoudoù ar marilh $3 gant $1",
        "special-characters-group-thai": "Thai",
        "special-characters-group-lao": "Laoseg",
        "special-characters-group-khmer": "Khmer",
+       "special-characters-group-canadianaboriginal": "Aborijen kanadian",
        "special-characters-title-endash": "tired berr",
        "special-characters-title-emdash": "tired hir",
        "special-characters-title-minus": "arouezenn nemet",
        "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",
-       "rawhtml-notallowed": "N'hall an tikedennoù &lt;html&gt; bezañ implijet nemet er pajennoù normal."
+       "rawhtml-notallowed": "N'hall an tikedennoù &lt;html&gt; bezañ implijet nemet er pajennoù normal.",
+       "gotointerwiki": "Kuitaat {{SITENAME}}",
+       "gotointerwiki-invalid": "Direizh eo an titl merket",
+       "gotointerwiki-external": "Emaoc'h war-nes kuitaat {{SITENAME}} evit mont da welet [[$2]] hag a zo ul lec'hienn all a-ziforc'h.\n\n[$1 Klikañ amañ evit kenderc'hel war $1].",
+       "undelete-cantedit": "N'hallit ket diziverkañ ar bajenn-mañ rak n'oc'h ket aotreet da gemmañ anezhi.",
+       "undelete-cantcreate": "N'hallit ket diziverkañ ar bajenn-mañ rak n'eus pajenn ebet gant an anv-mañ ha n'oc'h ket aotreet da grouiñ ar bajenn-mañ."
 }
index bac1f15..da9b6d7 100644 (file)
        "rcshowhideliu": "Drustírástí kárband áte $1",
        "rcshowhideanons": "Bidar kárband áte $1",
        "rcshowhidemine": "Kaná radbadal áte $1",
-       "rclinks": "Guđđíko $2 de teŧí maroká guđđíko $1 radbadal e nişán et<br />$3",
+       "rclinks": "Guđđíko $2 de teŧí maroká guđđíko $1 radbadal e nişán et",
        "diff": "fark",
        "hist": "lekav",
        "hide": "aodem kar",
index 9ac1030..e03faf1 100644 (file)
        "templatesusedpreview": "{{PLURAL:$1|Šablon|Šabloni}} prikazani u ovom pregledu:",
        "templatesusedsection": "{{PLURAL:$1|Šablon|Šabloni}} korišteni u ovoj sekciji:",
        "template-protected": "(zaštićeno)",
-       "template-semiprotected": "(polu-zaštićeno)",
+       "template-semiprotected": "(poluzaštićeno)",
        "hiddencategories": "Ova stranica pripada u {{PLURAL:$1|$1 skrivenu kategoriju|$1 skrivene kategorije|$1 skrivenih kategorija}}:",
        "edittools": "<!-- Ovaj tekst će biti prikazan ispod formi za uređivanje i postavljanje. -->",
        "nocreatetext": "Na {{SITENAME}} je zabranjeno postavljanje novih stranica.\nMožete se vratiti i uređivati već postojeće stranice ili se [[Special:UserLogin|prijaviti ili otvoriti korisnički račun]].",
        "right-editsemiprotected": "Uređivanje stranica pod zaštitom \"{{int:protect-level-autoconfirmed}}\"",
        "right-editcontentmodel": "Uređivanje modela sadržaja stranice",
        "right-editinterface": "Uređivanje korisničkog interfejsa",
-       "right-editusercssjs": "Uređivanje CSS i JS datoteka drugih korisnika",
        "right-editusercss": "Uređivanje tuđih CSS datoteka",
        "right-edituserjs": "Uređivanje tuđih JavaScript datoteka",
        "right-editmyusercss": "Uređivanje vlastitih CSS datoteka",
        "rcshowhidecategorization": "$1 kategorizaciju stranica",
        "rcshowhidecategorization-show": "Prikaži",
        "rcshowhidecategorization-hide": "Sakrij",
-       "rclinks": "Prikaži posljednjih $1 izmjena u posljednjih $2 dana<br />$3",
+       "rclinks": "Prikaži posljednjih $1 izmjena u posljednjih $2 dana",
        "diff": "razl",
        "hist": "hist",
        "hide": "Sakrij",
        "undeleteviewlink": "pogledaj",
        "undeleteinvert": "Obrni izbor",
        "undeletecomment": "Razlog:",
-       "undeletedrevisions": "{{PLURAL:$1|vraćena $1 verzija|vraćene $1 verzije|vraćeno $1 verzija}}",
-       "undeletedrevisions-files": "{{PLURAL:$1|1 verzija|$1 verzije|$1 verzija}} i {{PLURAL:$2|1 datoteka|$2 datoteke|$2 datoteka}} vraćeno",
-       "undeletedfiles": "{{PLURAL:$1|1 datoteka vraćena|$1 datoteke vraćene|$1 datoteka vraćeno}}",
        "cannotundelete": "Vraćanje jedne ili svih stavki nije uspjelo:\n$1",
        "undeletedpage": "<strong>Stranica $1 je vraćena</strong>\n\nProvjerite [[Special:Log/delete|zapisnik brisanja]] za zapise nedavnih brisanja i vraćanja.",
        "undelete-header": "Pogledajte [[Special:Log/delete|zapisnik brisanja]] za nedavno obrisane stranice.",
        "newimages-summary": "Ova posebna stranica prikazuje nedavno postavljene datoteke.",
        "newimages-legend": "Filter",
        "newimages-label": "Ime datoteke (ili dio imena):",
+       "newimages-user": "IP-adresa ili korisničko ime",
        "newimages-showbots": "Pokaži datoteke koje su poslali botovi",
        "newimages-hidepatrolled": "Sakrij patrolirana postavljanja",
        "noimages": "Nema ništa.",
        "special-characters-group-thai": "tajlandski",
        "special-characters-group-lao": "laoski",
        "special-characters-group-khmer": "kmerski",
+       "special-characters-group-canadianaboriginal": "kanadski domorodni",
        "special-characters-title-endash": "crtica",
        "special-characters-title-emdash": "duga crta",
        "special-characters-title-minus": "minus",
index 0ccc4ed..bc494d5 100644 (file)
        "right-editsemiprotected": "Edita les pàgines protegides com «{{int:protect-level-autoconfirmed}}»",
        "right-editcontentmodel": "Editar el model de contingut d'una pàgina",
        "right-editinterface": "Editar la interfície d'usuari",
-       "right-editusercssjs": "Modificar els fitxers CSS i JavaScript d'altres usuaris",
        "right-editusercss": "Modificar els fitxers CSS d'altres usuaris",
        "right-edituserjs": "Modificar els fitxers JavaScript d'altres usuaris",
        "right-editmyusercss": "Modificar els vostres fitxers d'usuari CSS",
        "rcshowhidecategorization": "$1 categoritzacions de pàgina",
        "rcshowhidecategorization-show": "Mostra",
        "rcshowhidecategorization-hide": "Amaga",
-       "rclinks": "Mostra els darrers $1 canvis en els darrers $2 dies<br />$3",
+       "rclinks": "Mostra els darrers $1 canvis en els darrers $2 dies",
        "diff": "dif",
        "hist": "hist",
        "hide": "Amaga",
        "undeleteviewlink": "veure",
        "undeleteinvert": "Invertir selecció",
        "undeletecomment": "Motiu:",
-       "undeletedrevisions": "{{PLURAL:$1|Una revisió restaurada|$1 revisions restaurades}}",
-       "undeletedrevisions-files": "{{PLURAL:$1|Una revisió|$1 revisions}} i {{PLURAL:$2|un fitxer|$2 fitxers}} restaurats",
-       "undeletedfiles": "$1 {{PLURAL:$1|fitxer restaurat|fitxers restaurats}}",
        "cannotundelete": "Hi ha hagut un error en algunes o totes les restauracions:\n$1",
        "undeletedpage": "'''S'ha restaurat «$1»'''\n\nConsulteu el [[Special:Log/delete|registre d'esborraments]] per a veure els esborraments i els restauraments més recents.",
        "undelete-header": "Vegeu [[Special:Log/delete|el registre d'eliminació]] per a veure les pàgines eliminades recentment.",
index e4ed07f..03c873b 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": "躒入其資料𣍐記去是伓是?",
        "userlogin-resetpassword-link": "密碼𣍐記?",
        "userlogin-helplink2": "對手汝躒入",
        "userlogin-loggedin": "汝已經使$1躒入過了。\n儷是卜想挈其他用戶來躒入,起動汝使下底其表格來躒入。",
        "createacct-another-email-ph": "拍入電批地址",
        "createaccountmail": "使臨時其隨機密碼,共伊送遘指定其電子郵件地址",
        "createacct-realname": "實際其名字(愛寫就寫)",
-       "createaccountreason": "原因:",
        "createacct-reason": "原因",
        "createacct-reason-ph": "汝奚勢復想開另外蜀隻賬戶?",
        "createacct-submit": "開賬戶",
        "prefs-misc": "其它",
        "saveprefs": "保存",
        "prefs-editing": "編輯",
-       "rows": "行數:",
        "searchresultshead": "尋討",
        "recentchangescount": "這般改變其條目:",
        "savedprefs": "汝其設定已經乞保存了。",
        "rcshowhideliu": "$1 ī dĕng-gé gì ê̤ṳng-hô",
        "rcshowhideanons": "$1 ù-mìng-sê",
        "rcshowhidemine": "$1 nguāi gì siŭ-gāi",
-       "rclinks": "Hiēng-sê có̤i-gê̤ṳng $2 gĕ̤ng ī-nô̤i gì $1 huòi gāi-biéng<br />$3",
+       "rclinks": "Hiēng-sê có̤i-gê̤ṳng $2 gĕ̤ng ī-nô̤i gì $1 huòi gāi-biéng",
        "diff": "chă",
        "hist": "sṳ̄",
        "hide": "掩",
index a5f7bc0..992eed7 100644 (file)
        "right-editprotected": "«{{int:protect-level-sysop}}» бахьанца ларйина агӀонаш нисъяр",
        "right-editsemiprotected": "«{{int:protect-level-autoconfirmed}}» бахьанца ларйина агӀонаш нисъяр",
        "right-editinterface": "лелош йолу интерфейсан хийцам бар",
-       "right-editusercssjs": "кхечу декъашхойн CSS- а, JS- а файлаш нисяр",
        "right-editusercss": "кхечу декъашхойн CSS-файлаш нсяр",
        "right-edituserjs": "кхечу декъашхойн JavaScript-файлаш нисяр",
        "right-editmyusercss": "Декъашхочун CSS файлаш таяр",
        "rcshowhidecategorization": "$1 категореш тӀетохар",
        "rcshowhidecategorization-show": "Гайта",
        "rcshowhidecategorization-hide": "Къайлаяккха",
-       "rclinks": "Гайта тӀаьххьарлерачу $2 дийнахь бина болу $1 хийцамаш\n<br />$3",
+       "rclinks": "Гайта тӀаьххьарлерачу $2 дийнахь бина болу $1 хийцамаш",
        "diff": "башхалла",
        "hist": "истори",
        "hide": "Къайлаяккха",
        "emailccsubject": "$1: $2 бохьуьтучу хааман копи",
        "emailsent": "Кехат дӀадахьийтина",
        "emailsenttext": "Хьан электроннан хаам дӏабахьийтина.",
-       "emailuserfooter": "Ð¥Ó\80аÑ\80а Ñ\85аам Ð±Ð°Ñ\85ийÑ\82инеÑ\80а $1 {{GENDER:$1|декÑ\8aаÑ\89Ñ\85оÑ\87о}} $2 {{GENDER:$2|декÑ\8aаÑ\89хочунга}} «декъашхочунга хаам» олучу функцин гӀоьнца {{SITENAME}} проектан.",
+       "emailuserfooter": "Ð¥Ó\80аÑ\80а Ñ\85аам Ð±Ð°Ñ\85ийÑ\82инеÑ\80а $1 {{GENDER:$1|декÑ\8aаÑ\88Ñ\85оÑ\87о}} $2 {{GENDER:$2|декÑ\8aаÑ\88хочунга}} «декъашхочунга хаам» олучу функцин гӀоьнца {{SITENAME}} проектан.",
        "usermessage-summary": "Битта системан хаам.",
        "usermessage-editor": "Системан дӀакхачор",
        "watchlist": "Тергаме могӀам",
        "undeleteviewlink": "хьажа",
        "undeleteinvert": "Къастае массо",
        "undeletecomment": "Бахьана:",
-       "undeletedrevisions": "{{PLURAL:$1|меттахӀоьттина}} $1 {{PLURAL:$1|хийцам}}",
-       "undeletedrevisions-files": "меттахӀоьттина $1 {{PLURAL:$1|верси}} а, $2 {{PLURAL:$2|файл}} а",
-       "undeletedfiles": "$1 {{PLURAL:$1|файл меттахӀоттайина|файлаш меттахӀоттайина}}",
        "cannotundelete": "ГӀалат меттахӀоттайина:\n$1",
        "undeletedpage": "'''МеттахӀоттайина агӀо «$1».'''\n\nДӀадяхнарш долу могӀане [[Special:Log/delete|тéптаре хьажа]].",
        "undelete-header": "Дукху хан йоцуш дӀаяхна агӀонаш хьажа мега [[Special:Log/delete|дӀадаьхьнарш долу тептар чохь]].",
index d99a3ad..a0cc596 100644 (file)
        "rcshowhideanons-hide": "Tagoa",
        "rcshowhidemine": "$1 akong mga pag-usab",
        "rcshowhidemine-hide": "Tagoa",
-       "rclinks": "Ipakita ang miaging $1 ka kausaban sa miaging $2 ka mga adlaw<br />$3",
+       "rclinks": "Ipakita ang miaging $1 ka kausaban sa miaging $2 ka mga adlaw",
        "diff": "kalainan",
        "hist": "kaagi",
        "hide": "Tagoi",
index b104745..7d4ebe0 100644 (file)
        "yourdomainname": "Lugat-mu:",
        "login": "Log in",
        "nav-login-createaccount": "Hålom / fa'tinas kuenta-mu",
-       "userlogin": "Hålom / fa'tinas kuenta-mu",
        "logout": "Log out",
        "userlogout": "Log out",
        "notloggedin": "Ti malogin",
-       "nologin": "Tåya' iyo-mu login? '''$1'''.",
-       "nologinlink": "Fama'tinas kuenta",
        "createaccount": "Fa'tinas kuenta-hu",
-       "gotaccount": "Guåha esta kuenta-mu? '''$1'''.",
-       "gotaccountlink": "Log in",
        "createaccountmail": "gi e-mail",
        "badretype": "Ti parehu i password siha ni un po'lo.",
        "userexists": "Esta guåha na u'usa enao na nå'an muna'sesetbi.\nAyek fan otru na nå'an.",
        "prefs-misc": "Misc",
        "saveprefs": "Såtba",
        "prefs-editing": "Tumulaika",
-       "rows": "Fila siha:",
-       "columns": "Kolumna siha:",
        "searchresultshead": "Aligao",
        "recentchangesdays": "Diha siha na para u na'annok gi i tinilaika gi halacha:",
        "recentchangescount": "Kunatu na tinilaika para u na'annok gi i tinilaika gi halacha:",
        "rcshowhideliu": "$1 na muna'sesetbi ni ma log in",
        "rcshowhideanons": "$1 i muna'sesetbi taina'an",
        "rcshowhidemine": "$1 na tinilaika-hu",
-       "rclinks": "Na'annok na $1 tinilaika siha ginen $2 na dihas manmaloffan<br />$3",
+       "rclinks": "Na'annok na $1 tinilaika siha ginen $2 na dihas manmaloffan",
        "diff": "dif",
        "hist": "hist",
        "hide": "Nå'na'",
        "version": "Tinilaika",
        "version-specialpages": "Manespesiat na påhina",
        "fileduplicatesearch-submit": "Aligao",
-       "specialpages": "Manespesiat na påhina",
-       "revdelete-summary": "tulaika i sumaria"
+       "specialpages": "Manespesiat na påhina"
 }
index d1865db..bf119ff 100644 (file)
        "anoneditwarning": "<strong>ھۆشیار بە:</strong> نەڕۆیشتووتەتە ژوورەوە. ھەر دەستکارییەک بکەیت ناونیشانی IPیەکەت بۆ ھەموو کەسێک دیار دەبێت. بەڵام ئەگەر <strong>[$1 بچیتە ژوورەوە]</strong> یان <strong>[$2 ھەژمارێک دروست بکەیت]</strong>، دەستکارییەکانت بە ناوی بەکارھێنەرییەکەتەوە بڵاو دەبێتەوە و لە چەند قازانجی تریشی ھەیە.",
        "anonpreviewwarning": "«نەڕۆشتوویتە ژوورەوە. پاشەکەوتکردن، ئەدرەسی IPەکەت لە مێژووی دەستکاریی ئەم پەڕە تۆمار دەکات.»",
        "missingsummary": "'''وە بیر خستنەوە:''' پوختەیەکت نەنووسیوە بۆ چۆنیەتی گۆڕانکارییەکەت.\nئەگەر جارێکی تر پاشکەوت کردن لێبدەی، بێ پوختە تۆمار دەکرێ.",
-       "selfredirect": "<strong>ئاگاداری:</strong> تۆ خەریکی گواستنەوەی ئەم پەڕەیەیت بۆ سەر خۆی. لەوانەیە خەریکی گواستنەوەی پەڕەیەکی ھەڵە بیت یان ھەوڵی گواستنەوە دەدەیت بۆ ئامانجێکی ھەڵە. \nئەگەر دەەبارە کرتە لەسەر «{{int:savearticle}}» بکەیتەوە، ڕەوانەکەرەکە دروست دەکرێت بەھەرحاڵ.",
+       "selfredirect": "<strong>ئاگاداری:</strong> تۆ خەریکی گواستنەوەی ئەم پەڕەیەیت بۆ سەر خۆی. لەوانەیە خەریکی گواستنەوەی پەڕەیەکی ھەڵە بیت یان ھەوڵی گواستنەوە دەدەیت بۆ ئامانجێکی ھەڵە. \nئەگەر دووبارە کرتە لەسەر «{{int:savearticle}}» بکەیتەوە، ڕەوانەکەرەکە دروست دەکرێت بەھەرحاڵ.",
        "missingcommenttext": "تکایە لە خوارەوە شرۆڤەیەک بنووسە.",
        "missingcommentheader": "'''بیرهێنانەوە:''' بۆ ئەم بۆچوونەت سەردێڕ\\بابەت ڕاچاو نەکردووە.\nئەگەر دیسان «{{int:savearticle}}» لێبدەی، دەستکاریەکەت بێ سەردێڕ یان بابەت پاشەکەوت دەبێ.",
        "summary-preview": "پێشبینینی کورتە:",
        "badsiglength": "واژووەکەت زۆر درێژە.\nواژوو نابێ لە $1 {{PLURAL:$1|نووسە}} درێژتر بێت.",
        "yourgender": "پێت خۆشە چۆن وەسف بکرێیت؟",
        "gender-unknown": "پێم خۆشە باسی نەکەم",
-       "gender-male": "Ù¾Û\8cاÙ\88",
-       "gender-female": "ژن",
+       "gender-male": "Ù\86Û\8eر",
+       "gender-female": "مێ",
        "prefs-help-gender": "ئەم ھەڵبژاردەیە دڵخوازانەیە.\nبۆ بانگکردن و ئاماژەپێکردن بە شێوەیەکی دروست لەلایەن نەرمامێرەوە بەکاردێت.\nئەم زانیارییە گشتی دەبێت.",
        "email": "ئیمەیل",
        "prefs-help-realname": "ناوی ڕاستەقینە دڵخوازە.\nئەگەر بنووسرێت، لەوانەیە بۆ ئاماژەدان بەرھەمەکەت بە کار بھێنرێت.",
        "right-editprotected": "دەستکاریی پەڕە پارێزراوەکانی وەک «{{int:protect-level-sysop}}»",
        "right-editsemiprotected": "دەستکاریی پەڕە پارێزراوەکانی وەک «{{int:protect-level-autoconfirmed}}»",
        "right-editinterface": "دەستکاریی ڕووکاری بەکارھێنەر",
-       "right-editusercssjs": "دەستکاریی پەڕگەکانی جاڤاسکریپت و CSSی بەکارھێنەرانی تر",
        "right-editusercss": "دەستکاریی پەڕگەکانی CSSی بەکارھێنەرانی تر",
        "right-edituserjs": "دەستکاریی پەڕگەکانی جاڤاسکریپتی بەکارھێنەرانی تر",
        "right-editmyusercss": "دەستکاریی پەڕگەکانی CSSی بەکارھێنەریی خۆی",
        "right-deletechangetags": "سڕینەوەی [[Special:Tags|tags]] لە بنکەی زانیاری",
        "grant-group-file-interaction": "مامەڵەکردن لەگەڵ میدیا",
        "grant-group-email": "ناردنی ئیمەیل",
+       "grant-blockusers": "بەربەستکردن و بەربەستنەکردنی بەکارھێنەران",
        "grant-createaccount": "دروستکردنی ھەژمار",
        "grant-createeditmovepage": "دروستکردن، دەستکاریکردن و گواستنەوەی پەڕەکان",
+       "grant-editmyoptions": "دەستکاریی ھەڵبژاردەکانی خۆت",
+       "grant-editmywatchlist": "دەستکاریکردنی لیستی چاودێرییەکەت",
+       "grant-editpage": "پەڕە ھەبووەکان دەستکاری بکە",
+       "grant-editprotected": "پەڕە پارێزراوەکان دەستکاری بکە",
+       "grant-privateinfo": "بینینی زانیارییە تایبەتییەکان",
+       "grant-protect": "پاراستن و نەپاراستنی پەڕەکان",
+       "grant-rollback": "گۆڕانکارییە گەڕاندنەوەییەکانی پەڕەکان",
        "grant-sendemail": "ناردنی ئیمەیل بۆ بەکارھێنەرانی تر",
        "grant-uploadfile": "بەڕگەی نوێ بار بکە",
        "grant-basic": "مافی سەرەکی",
        "action-deletedhistory": "دیتنی مێژووی سڕاوەی ئەم پەڕەیە",
        "action-browsearchive": "گەران لە نێو لاپەڕە سڕاوەکان",
        "action-undelete": "گەڕاندنەوەی ئەم پەڕەیە",
-       "action-suppressrevision": "چاوپێداخشان و هاردنوەی ئەم لاپەڕە شاراوە",
+       "action-suppressrevision": "چاوپێداخشان و هاوردنەوەی ئەم لاپەڕە شاراوە",
        "action-suppressionlog": "دیتنی ئەم لۆگە ئەهلیە",
        "action-block": "بەربەست کردنی ئەم بەکارهێنەرە بۆ دەستکاری‌کردن",
        "action-protect": "گۆڕینی ئاستی پاراستن بۆ ئەم پەڕەیە",
        "action-userrights-interwiki": "دەستکاری مافەکانی بەکارهێنەریی بەکارهێنەران لە ویکی‌یەکانی دیکە‌دا",
        "action-siteadmin": "داخستن یا کردنەوەی بنکەدراو",
        "action-sendemail": "ناردنی ئیمەیلەکان",
+       "action-editmyoptions": "دەستکاریی ھەڵبژاردەکانی خۆت",
        "action-editmywatchlist": "دیتنی پێرستی چاودێریت",
        "action-viewmywatchlist": "دیتنی پێرستی چاودێریت",
        "action-viewmyprivateinfo": "زانیارییە تایبەتییەکانت ببینە",
        "recentchanges-submit": "نیشانی بدە",
        "rcfilters-filterlist-whatsthis": "ئەمە چییە؟",
        "rcfilters-highlightmenu-title": "ڕەنگێکی نوێ ھەڵبژێرە",
+       "rcfilters-filter-registered-label": "تۆمارکراو",
+       "rcfilters-filter-registered-description": "ئەو بەکارھێنەرانەی لە ژوورەوەن",
+       "rcfilters-filter-unregistered-label": "تۆمارنەکراوەکان",
+       "rcfilters-filter-unregistered-description": "ئەو بەکارھێنەرانەی لە ژوورەوە نین",
        "rcfilters-filter-editsbyself-label": "مافەکانی خۆت",
        "rcfilters-filter-editsbyself-description": "دەستکارییەکانی خۆت.",
        "rcfilters-filter-editsbyother-label": "دەستکارییەکانی کەسانی تر",
        "rcfilters-filter-user-experience-level-newcomer-description": "کەمتر لە ١٠ دەستکاری و ٤ ڕۆژ لە چالاک بوون",
        "rcfilters-filter-user-experience-level-experienced-label": "بەکارھێنەرانی پێشکەوتوو",
        "rcfilters-filter-user-experience-level-experienced-description": "زیاتر لە ٣٠ ڕۆژ لە چالاکی و ٥٠٠ دەستکاری",
+       "rcfilters-filter-bots-label": "بۆت",
        "rcfilters-filter-humans-label": "مرۆڤ (بۆت نییە)",
        "rcfilters-filter-humans-description": "دەستکارییەکانی لەلایەن مرۆڤەکانەوە ئەنجام دراون",
        "rcfilters-filter-patrolled-label": "پاسدراو",
        "rcfilters-filter-patrolled-description": "ئەو دەستکارییانەی وەک پاسدراو دیاریکراون",
+       "rcfilters-filter-unpatrolled-label": "پاسنەدراوەکان",
+       "rcfilters-filter-unpatrolled-description": "ئەو دەستکارییانەی وەک پاسدراو دیارینەکراون",
        "rcfilters-filter-minor-label": "دەستکارییە بچووکەکان",
        "rcfilters-filter-minor-description": "ئەو دەستکارییانەی کە دەستکاریکەر وەک بچووک ناوی بردووە",
        "rcfilters-filter-major-label": "دەستکارییە نا-بچووکەکان",
+       "rcfilters-filter-pageedits-label": "دەستکارییەکانی پەڕە",
+       "rcfilters-filter-newpages-label": "دروستکردنی پەڕەکان",
+       "rcfilters-filter-categorization-label": "گۆڕانکاری پۆلەکان",
        "rcnotefrom": "ژێرەوە {{PLURAL:$5|گۆڕانکارییەکەیە|گۆڕانکارییەکانە}} لە strong>$3، $4</strong>ەوە (ھەتا <strong>$1</strong> نیشان دراوە).",
        "rclistfrom": "گۆڕانکارییە نوێکان نیشان بدە بە دەستپێکردن لە $3 $2",
        "rcshowhideminor": "دەستکارییە بچووکەکان $1",
        "rcshowhidecategorization": "$1 پۆلێنکردنی پەڕە",
        "rcshowhidecategorization-show": "نیشانی بدە",
        "rcshowhidecategorization-hide": "شاردراوە",
-       "rclinks": "دوایین $1 گۆڕانکاریی $2 ڕۆژی ڕابردوو نیشان بدە<br />$3",
+       "rclinks": "دوایین $1 گۆڕانکاریی $2 ڕۆژی ڕابردوو نیشان بدە",
        "diff": "جیاوازی",
        "hist": "مێژوو",
        "hide": "بشارەوە",
        "newpageletter": "ن",
        "boteditletter": "بۆت",
        "number_of_watching_users_pageview": "[$1 {{PLURAL:$1|بەکارھێنەر}}ی چاودێر]",
-       "rc_categories": "بەرتەسککردنەوە بە هاوپۆلەکان (به «|» جیای بکەوە‌)",
-       "rc_categories_any": "هەرکام",
+       "rc_categories": "بەرتەسککردنەوە بە هاوپۆلەکان (به «|» جیای بکەوە‌)",
+       "rc_categories_any": "هەرکامێک بێت",
        "rc-change-size-new": "$1 {{PLURAL:$1|بایت}} پاش گۆڕانکاری",
        "newsectionsummary": "/* $1 */ بەشی نوێ",
        "rc-enhanced-expand": "وردەکارییەکان نیشان بدە",
        "recentchangeslinked-summary": "ئەمە لیستێکی گۆڕانکارییەکانی ئەم دوایییانەی ئەو پەڕانەیە کە بەستەریان ھەیە لە پەڕەیەکی دیاریکراو (یان بۆ ئەندامەکانی پۆلێکی دیاریکراو)\nپەڕەکانی [[Special:Watchlist|لیستی چاودێرییەکەت]] '''ئەستوورن'''.",
        "recentchangeslinked-page": "ناوی پەڕە:",
        "recentchangeslinked-to": "بەجێگەی ئەوە گۆڕانکارییەکانی ئەو پەڕانە نیشانبدە کە بەستەریان ھەیە بۆ پەڕەی دیاریکراو",
+       "recentchanges-page-added-to-category": "[[:$1]] زیادکرا بۆ پۆل",
+       "recentchanges-page-removed-from-category": "[[:$1]] لابرا لە پۆل",
        "upload": "پەڕگەیەک بار بکە",
        "uploadbtn": "پەڕگە بار بکە",
        "reuploaddesc": "هەڵوەشانەوەی بارکردن و گەڕانەوە بۆ فۆرمی بارکردن",
        "illegalfilename": "ناوی‌پەڕگەی \"$1\" پیتێکی تێدایە کە ڕێگەنەدراوە بۆ سەردێڕی لاپەڕە بەکاربێت.\nتکایە ناوی پەڕگەکە بگۆڕە و دیسان باری بکەوە.",
        "filename-toolong": "ناوی پەڕگە ناتوانێ لە ٢٤٠ بایت درێژتر بێت.",
        "badfilename": "ناوی پەڕگە بە \"$1\" گۆڕا .",
+       "filetype-mime-mismatch": "فۆرماتی پەڕگە «$1» نەگونجێت لەگەڵ MIMEی دیاریکراوی پەڕگە ($2).",
        "filetype-badmime": "ڕێگە نەدراوە پەڕگەی \"$1\" جۆری MIME بار بکرێت.",
        "filetype-bad-ie-mime": "ناتوانین ئەم پەڕگە باربکەین لەبەر ئەوەی وێبگەڕی Internet Explore ئەوە وەک \"$1\" دەناسێت کە ڕێگەنەدراوەیە و جۆرە پەڕگەیەکی مەترسی‌دارە.",
        "filetype-unwanted-type": "'''\".$1\"''' جۆرە پەڕگەی نەخوازراوە.\n$2، ئەو جۆرە {{PLURAL:$3|پەڕگەیە|پەڕگانەیە}} وا بە باش‌ دازاندرێت.",
        "file-too-large": "ئەو پەڕگەیە ناردووتە زۆر گەورەیە.",
        "filename-tooshort": "ناوی پەڕگە زۆر کورتە.",
        "filetype-banned": "ئەم جۆرە پەڕگەیە قەدەغەیە.",
+       "verification-error": "ئەم پەڕگەیە شکسی ھێنا لە پڕۆسەی پەسەندکردنی پەڕگە.",
        "illegal-filename": "ناوی پەڕگە رێگەپێ‌نەدراوە.",
+       "overwrite": "بەسەردانانی پەڕگەی ئێستا ڕێگە پێنەدراوە.",
        "unknown-error": "ھەڵەیەکی نەزانراو ڕوویداوە.",
+       "tmp-create-error": "نەتوانرا پەڕگەی کاتیی دروست بکرێت.",
        "large-file": "پێشنیار دەکرێت قەبارەی پەڕگەکان زیاتر لە $1 نەبێت؛\nقەبارەی ئەم پەڕگە $2.",
        "largefileserver": "ئەم پەڕگە گەورەتر لەوەیە کە ڕاژەکار ڕێگەدەدات.",
        "emptyfile": "ئەو پەڕگەیەی بارت کردووە لەوە دەچێ واڵا بێت.\nلەوانەیە بە ھۆی هەڵەیەک لە تایپی ناوی پەڕگەکە بێت.\nتکایە تاوتوێی بکە ئەگەر بە ڕاستی دەتەوێ ئەم پەڕگەیە بار بکەی.",
-       "fileexists": "پەڕگەیەک هەر بەو ناوە‌ لە پێش‌دا هەیە، تکایە گەر ئەرخەیان نیت بۆ گۆڕینی، چاوێک لە <strong>[[:$1]]</strong> بکە.\n[[$1|thumb]]",
+       "windows-nonascii-filename": "ئەم ویکییە ڕێگە نادات بە بەکارھێنانی نووسینی تایبەتیی لە سەرناوی پەڕگەکاندا.",
+       "fileexists": "پەڕگەیەک هەر بەو ناوە‌ هەیە، تکایە گەر ئەرخەیان نیت بۆ گۆڕینی، چاوێک لە <strong>[[:$1]]</strong> بکە.\n[[$1|thumb]]",
        "filepageexists": "پەڕەی ناساندن بۆ ئەم پەڕگە پێشتر لە <strong>[[:$1]]</strong> درووستکراوە، بەڵام پەڕگەیەک بەو ناوەوە ئێستا نادۆزرێتەوە.\nئەو پوختەی کە نووسیوتە لە پەڕەی ناساندن بەرچاو ناکەوێت.\nگەر دەتەوێ پوختەکەت بەرچاو کەوێت دەبێ خۆت دەستی دەستکاری بکەی.\n[[$1|thumb]]",
        "fileexists-extension": "پەڕگەیەک هەر بەو ناوە هەیە: [[$2|thumb]]\n* ناوی ئەو پەڕگەی باری ئەکەی:<strong>[[:$1]]</strong>\n* ناوی ئەو پەڕگەی ئێستا هەیە:<strong>[[:$2]]</strong>\nتکایە ناوێکی دیکە هەڵبژێرە.",
        "fileexists-thumbnail-yes": "لەوە دەچێ ئەم پەڕگە وێنەیەکی بچووک‌کراوە بێت ''(هێما)''. [[$1|thumb]]\nتکایە چاو لە پەڕگەی <strong>[[:$1]]</strong> بکه.‌\nگەر ئەوەی چاوت لێ‌کرد قەبارەی ڕەسەنی هەر ئەو وێنەیە، پێویست ناکات دیسان هێماکەی باربکەی.",
        "uploadwarning": "ئاگادارییەکانی بارکردن",
        "savefile": "پەڕگە پاشەکەوت بکە",
        "uploaddisabled": "بارکردن قەدەخە کراوە",
+       "copyuploaddisabled": "بارکردن بە URL لابرا.",
        "uploaddisabledtext": "بارکردنی پەڕگەکان لە کار خستراوە.",
        "php-uploaddisabledtext": "بارکردنی پەڕگەکان لە PHPدا لە کار خستراوە.\nتکایە چاو لە هەڵبژاردەکانی بارکردنی_پەڕگەکان بکە.",
        "uploadscripted": "ئەم پەڕگە HTML یان کۆدی سکریپتی لەخۆگرتووە کە لەوانەیە ببێتە هۆی هەڵە تێگەیشتنی هێندێ وێبگەڕەکان.",
        "upload-misc-error-text": "هەڵەیەکی نەناسراو لە کاتی بارکردن ڕووی‌دا.\nتکایە لە درووست‌بوون و دەست‌پێ گەیشتنی URL ئەرخەیان ببە و دیسان تاقی‌بکەوە.\nگەر کێشەکە هەر بەردەوام بوو پەیوەندی بکە بە [[Special:ListUsers/sysop|بەڕێوبەر]].",
        "upload-too-many-redirects": "URL ڕەوانەکەری زۆری لەخۆ گرتووە",
        "upload-http-error": "هەڵەیەکی HTTP ڕووئ داوە: $1",
+       "upload-dialog-title": "بارکردنی پەڕگە",
        "upload-dialog-button-cancel": "ھەڵوەشاندنەوە",
        "upload-dialog-button-back": "گەڕانەوە",
        "upload-dialog-button-done": "کرا",
        "uploadstash": "ئەمباری بارکردن",
        "uploadstash-errclear": "سڕینەوەی پەڕگەکان سەرکەوتوو نەبوو.",
        "uploadstash-refresh": "نوێکردنەوەی پێرستی پەڕگەکان",
+       "uploadstash-thumbnail": "بینینی وێنۆک",
        "img-auth-accessdenied": "تێپه‌ربوون ره‌تکرایه‌وه‌",
        "img-auth-nofile": "فایلی \"$1\" بوونی نیه‌",
        "img-auth-isdir": "هه‌وڵ ده‌ده‌ی بۆ کردنه‌وه‌ی بوخچه‌ی \"$1\" له‌ کاتێکدا ته‌نیا کردنه‌وه‌ی فایل رێپێدراوه‌",
+       "http-invalid-url": "URLـی ھەڵە: $1",
        "upload-curl-error6": "توانای دەست‌پێ‌گەیشتنی URL نیە",
        "upload-curl-error6-text": "ئەو URL کە ڕاچاوت کردووە توانای دەست‌پێ‌گەیشتنی نییە.\nتکایە دیسان سەرنجی بدەوە کە URL درووست‌ نووسراوە و ماڵپەڕەکە بەردەوام کار دەکات.",
        "upload-curl-error28": "کات‌بەسەرچوونی بارکردن",
        "listfiles-delete": "سڕینەوە",
        "listfiles-summary": "ئەم پەڕە تایبەتە ھەموو پەڕگە بارکراوەکان نیشان دەدات.",
        "listfiles_search_for": "بگەڕێ بۆ ناوی میدیای:",
+       "listfiles-userdoesnotexist": "ھەژماری بەکارھێنەریی «$1» تۆمار نەکراوە.",
        "imgfile": "پەڕگە",
        "listfiles": "پێرستی پەڕگەکان",
        "listfiles_thumb": "وێنۆک",
        "randompage": "پەڕەی ھەڕەمەکی",
        "randompage-nopages": "ھیچ پەڕەیەک لە {{PLURAL:$2|بۆشایی ناو|بۆشایی ناوەکان}}ی خوارەوەدا نییە: $1.",
        "randomincategory": "پەڕەیەک بە ھەڵکەوت لە پۆلدا",
+       "randomincategory-invalidcategory": "«$1» ناوی پۆلێکی دروست نییە.",
+       "randomincategory-nopages": "ھیچ پەڕەیەک لە پۆلی [[:Category:$1|$1]]دا نییە.",
+       "randomincategory-category": "پۆل:",
+       "randomincategory-legend": "پەڕەیەک بە ھەڵکەوت لە پۆلدا",
        "randomincategory-submit": "بڕۆ",
        "randomredirect": "ڕەوانەکەری ھەڕەمەکی",
        "randomredirect-nopages": "لە ناوبۆشایی \"$1\" هیچ ڕەوانکەرێک نییە.",
        "protectedpages-noredirect": "ڕەوانەکەرەکان بشارەوە",
        "protectedpagesempty": "هیچ لاپەڕەیک ئێستا بەم دیاریکراوانە نەپارێزراوە.",
        "protectedpages-page": "پەڕە",
+       "protectedpages-expiry": "بەسەردەچێت",
+       "protectedpages-performer": "پاراستنی بەکارھێنەر",
        "protectedpages-params": "پارامەترەکانی پاراستن",
        "protectedpages-reason": "ھۆکار",
+       "protectedpages-submit": "پەڕەکان پیشان بدە",
+       "protectedpages-unknown-timestamp": "نەزانراو",
+       "protectedpages-unknown-performer": "بەکارھێنەرێکی نەناسراو",
        "protectedtitles": "سەرناوە پارێزراوەکان",
        "protectedtitlesempty": "ھیچ سەرناوێک بەم سنوورانەوە ئێستا نەپارێزراوە.",
        "listusers": "پێرستی بەکارھێنەران",
        "pager-older-n": "{{PLURAL:$1|یەکێک کۆنتر|$1ی کۆنتر}}",
        "suppress": "چاودێری",
        "apisandbox-unfullscreen": "نیشاندانی پەڕە",
+       "apisandbox-submit": "داواکاری",
+       "apisandbox-reset": "سڕینەوە",
+       "apisandbox-retry": "ھەوڵداناوە",
+       "apisandbox-helpurls": "بەستەرەکانی یارمەتی",
+       "apisandbox-examples": "نموونەکان",
+       "apisandbox-submit-invalid-fields-message": "تکایە بەشە دیاریکراوەکان ڕاست بکەرەوە و دووبارە ھەوڵ بدەرەوە.",
+       "apisandbox-results": "ئاکامەکان",
+       "apisandbox-continue": "بەردەوامبوون",
+       "apisandbox-continue-clear": "سڕینەوە",
        "booksources": "سەرچاوەکانی کتێب",
        "booksources-search-legend": "گەڕان بۆ سەرچاوەکانی کتێب",
        "booksources-search": "بگەڕێ",
        "showhideselectedlogentries": "دیاریکردنی بابەتە ھەڵبژێردراوەکانی لۆگ بگۆڕە",
        "checkbox-all": "ھەموو",
        "checkbox-none": "هیچ",
+       "checkbox-invert": "پێچەوانەکردنەوە",
        "allpages": "ھەموو پەڕەکان",
        "nextpage": "پەڕەی پاشەوە ($1)",
        "prevpage": "پەڕەی پێشەوە ($1)",
        "allpages-bad-ns": "{{SITENAME}} ناوبۆشایی نیە \"$1\".",
        "allpages-hide-redirects": "ڕەوانەکەرەکان بشارەوە",
        "cachedspecial-viewing-cached-ttl": "خەریکیت وەشانێکی حەشارکراوی ئەم پەڕەیە دەبینی کە دەتوانێت ھی $1 لەمەوبەر بێت.",
+       "cachedspecial-viewing-cached-ts": "تۆ وەشانێکی کاشکراوی ئەم پەڕەیە دەبینیت، لەوانەیە زانیارییەکان گۆڕانکارییان بەسەردا ھاتبێت.",
        "cachedspecial-refresh-now": "دواترین پیشانبدە",
        "categories": "پۆلەكان",
        "categories-submit": "نیشاندان",
        "activeusers-count": "$1 {{PLURAL:$1|کردەوە}} لە دوایین {{PLURAL:$3|ڕۆژ|$3 ڕۆژ}}دا",
        "activeusers-from": "نیشاندانی بەکارھێنەران بە دەستپێکردن لە:",
        "activeusers-noresult": "هیچ بەکارهێنەرێک نەدۆزرایەوە",
+       "activeusers-submit": "بەکارھێنەرە چالاکەکان نیشان بدە",
        "listgrouprights": "مافەکانی گرووپی بەکارھێنەر",
        "listgrouprights-summary": "ئەمە لیستێکە لە گرووپەکانی بەکارهێنەر لەسەر ئەم ویکی‌یە، دەگەڵ مافەکانی دەست‌پێ‌گەیشتنی هاوپەیوەندیان.\nلێرەدا لەوانەیە [[{{MediaWiki:Listgrouprights-helppage}}|زانیاری زیاترت]] دەست‌کەوێت سەبارەت بە مافە تاکەکەسیەکان.",
        "listgrouprights-key": "تێبینی:\n* <span class=\"listgrouprights-granted\">مافی دراوە</span>\n* <span class=\"listgrouprights-revoked\">مافی سەنراوە</span>",
        "listgrouprights-namespaceprotection-header": "سنوورداریی بۆشایی ناو",
        "listgrouprights-namespaceprotection-namespace": "بۆشایی ناو",
        "listgrouprights-namespaceprotection-restrictedto": "مافی رێ‌پێدراوی بەکارھێنەر بۆ دەستکاری",
+       "listgrants-rights": "مافەکان",
        "trackingcategories": "پۆلەکانی شوێنکەوتن",
        "trackingcategories-name": "ناوی پەیام",
+       "restricted-displaytitle-ignored": "پەڕەکان بە ناونیشانی بینینی پشتگوێخراوەوە",
+       "trackingcategories-nodesc": "ھیچ وردەکارییەک بەردەست نییە",
        "mailnologin": "ناونیشان بۆ ناردن نییە",
        "mailnologintext": "ده‌بێ له‌ [[Special:UserLogin|ژووره‌وه‌]] بیت و ناونیشانێکی بڕواپێ‌کراوی ئی‌مه‌یلت له‌ ناو [[Special:Preferences|هه‌ڵبژارده‌کان]] دیاری کردبێت تا بتوانی ئی‌مه‌یل بنێریت بۆ به‌کارهێنه‌رانی دیکه‌.",
        "emailuser": "ئیمەیل بنێرە بۆ ئەم بەکارھێنەرە",
        "addedwatchtext": "پەڕەی «[[:$1]]» خرایە ژێر [[Special:Watchlist|پێرستی چاودێری]]یەکەت.\nگۆڕانکارییەکانی داھاتووی ئەم پەڕەیە و پەڕەی وتووێژەکەی، لەوێدا پێرست دەکرێت.",
        "removewatch": "لەلیستی چاودێری لایبە",
        "removedwatchtext": "پەڕەی «[[:$1]]» لە [[Special:Watchlist|لیستی چاودێریەکەت]] لابرا.",
+       "removedwatchtext-short": "پەڕەی «$1» لە پێڕستی چاودێریت لابرا.",
        "watch": "چاودێری بکە",
        "watchthispage": "ئەم پەڕەیە بخە ژێر چاودێری",
        "unwatch": "لابردنی چاودێری",
        "wlshowtime": "ماوەی کات بۆ نیشاندان:",
        "wlshowhideminor": "دەستکارییە بچووکەکان",
        "wlshowhidebots": "بۆتەکان",
+       "wlshowhideliu": "بەکارھێنەرە تۆمارکراوەکان",
        "wlshowhideanons": "بەکارھێنەرە نەناسراوەکان",
+       "wlshowhidepatr": "دەستکارییە پاسدراوەکان",
        "wlshowhidemine": "دەستکارییەکانم",
        "wlshowhidecategorization": "پۆلێنکردنی پەڕە",
        "watchlist-options": "ھەڵبژاردەکانی لیستی چاودێری",
        "watching": "چاودێری...",
        "unwatching": "لابردنی چاودێری...",
+       "watcherrortext": "کێشەیەک دروست بوو لەکاتی گۆڕینی پێڕستی چاودێریت بۆ «$1».",
        "enotif_reset": "ھەموو پەڕەکان وەک بینراو دیاری بکە",
        "enotif_impersonal_salutation": "بەکارهێنەری \t{{SITENAME}}",
        "enotif_subject_deleted": "پەڕەی {{SITENAME}} $1 بە دەستی {{gender:$2|$2}} سڕایەوە.",
        "delete-edit-reasonlist": "دەستکاری کردنی ھۆکارەکانی سڕینەوە",
        "delete-toobig": "ئەم لاپەڕە مێژوویەکی دەستکاری زۆر گەورەی هەیە، زیاتر لە $1 {{PLURAL:$1|پێداچوونەوە|پێداچوونەوە}}.\nبۆ بەرگری لە خراپ‌بوونی چاوەڕوان نەکراوی {{SITENAME}}، سڕینەوەی لاپەڕەی وا بەربەست‌کراوە.",
        "delete-warning-toobig": "ئەم پەڕەیە مێژوویەکی دەستکاریی زۆر گەورەی ھەیە، زۆرتر لە $1 {{PLURAL:$1|پێداچوونەوە}}.\nسڕینەوەی ئەو پەڕەیە لەوانەی کارەکانی بنکەدراوەی {{SITENAME}} تووشی کێشە بکات؛\nبە سەرنجەوە بچۆ پێشەوە.",
-       "deleting-backlinks-warning": "'''ھۆشدار:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|پەڕەکانی تر]] بەم پەڕەیەی دەتەوێ بیسڕییەوە بەستەر دراوە.",
+       "deleteprotected": "تۆ ناتوانیت ئەم پەڕەیە بسڕیتەوە لەبەرئەوەی پارێزراوە.",
+       "deleting-backlinks-warning": "'''ئاگاداری:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|پەڕەکانی تر]] بەم پەڕەیەی دەتەوێ بیسڕییەوە بەستەر دراوە.",
        "rollback": "گەڕاندنەوەی دەستکارییەکان",
        "rollbacklink": "گەڕاندنەوە",
        "rollbacklinkcount": "گەڕاندنەوەی $1 {{PLURAL:$1|دەستکاری}}",
        "sessionfailure": "لەوەدەچی کێشەیەک لە دانیشتنی چوونەژوورەوەت (login session)دا ببێت.\nئەم کردەوە هەڵوەشێندرایەوە بۆ بەرگری لە دزینی دراوەکانی دانیشتن.\nتکایە بگەڕێوە بۆ پەڕەی پێشوو و نوێی بکەوە، ئینجا دیسان تاقیی بکەوە.",
        "changecontentmodel-title-label": "سەرناوی پەڕە",
        "changecontentmodel-reason-label": "هۆکار:",
+       "changecontentmodel-submit": "گۆڕین",
+       "logentry-contentmodel-change-revertlink": "گەڕاندنەوە",
+       "logentry-contentmodel-change-revert": "گەڕاندنەوە",
        "protectlogpage": "لۆگی پاراستن",
        "protectlogtext": "لە ژێرەوە پێرستێک لە گۆڕانکارییەکانی پەڕە پارێزراوەکان دەبینی.\nبۆ پێرستی ئەو پەڕانەی ئێستا پاراستنیان لە ئارادایە بڕوانە [[Special:ProtectedPages|پێرستی پەڕە پارێزراوەکان]].",
        "protectedarticle": "«[[$1]]»ی پاراست",
        "modifiedarticleprotection": "ئاستی پاراستنی «[[$1]]»ی گۆڕی",
        "unprotectedarticle": "پاراستنی لەسەر «[[$1]]» لابرد",
        "movedarticleprotection": "ڕێککارییەکانی پاراستن لە  «[[$2]]» گوازرایەوە بۆ «[[$1]]»",
+       "protectedarticle-comment": "«[[$1]]»ی {{GENDER:$2|پاراست}}",
+       "modifiedarticleprotection-comment": "{{GENDER:$2|ئاستی پاراستنی گۆڕی}} بۆ «[[$1]]»",
        "unprotectedarticle-comment": "{{GENDER:$2|پاراستنی}} لەسەر ''[[$1]]'' لابرد",
        "protect-title": "گۆڕینی ئاستی پاراستنی \"$1\"",
        "protect-title-notallowed": "دیتنی ئاستی پاراستنی «$1»",
        "prot_1movedto2": "[[$1]] گوازرایەوە بۆ [[$2]]",
+       "protect-badnamespace-text": "ئەو پەڕانەی لەم بۆشایی ناوەدان ناتواندرێت بپارێزرێن.",
        "protect-legend": "پاراستن تەیید بکە",
        "protectcomment": "ھۆکار:",
        "protectexpiry": "ھەتا:",
        "protect-othertime": "کاتی تر:",
        "protect-othertime-op": "کاتی تر",
        "protect-existing-expiry": "ئەم کاتی بەسەرچوونی ماوە کە هەیە: $3، $2",
+       "protect-existing-expiry-infinity": "کاتی بەسەرچوون: بێ کۆتا",
        "protect-otherreason": "ھۆکاری تر/زیاتر:",
        "protect-otherreason-op": "ھۆکاری تر",
        "protect-dropdown": "*ھۆکارە باوەکانی پاراستن\n** خراپکاریی لەڕادەبەدەر\n** سپامی لەڕادەبەدەر\n** شەڕە دەستکاریی بێ‌سوود\n** پەڕەی زۆربینەردار",
        "undeletepagetext": "ئەم {{PLURAL:$1|سڕاوەتەوە|$1 لاپەڕە سڕاونەتەوە}} بەڵام لەبەر ئەوەی لە ئەرشیڤ‌دا هەن هێشتا دەتوانی بیانهێنیتەوە.\nئەرشیڤ چەن‌وەخت جارێ لە کاتی دیاری‌کراودا خاوێن‌دەکرێتەوە.",
        "undelete-fieldset-title": "هێنانەوەی پێداچوونەوەکان",
        "undeleteextrahelp": "بۆ ھێنانەوەی گشت مێژووی پەڕەکە، ھەموو چوارچێوەکانی نیشانکردن ھەڵنەبژێردراو بھێڵەوە و لە سەر '''''{{int:undeletebtn}}''''' کرتە بکە.\nبۆ ھێنانەوەی ھەڵبژێردراو، چوارچێوەی بەرامبەر بەو پێداچوونەویەی دەتەوێ بیھێنیتەوە، نیشان بکە و لە سەر '''''{{int:undeletebtn}}''''' کرتە بکە.",
-       "undeleterevisions": "$1 {{PLURAL:$1|Ù¾Û\8eداÚ\86Ù\88Ù\88Ù\86Û\95Ù\88Û\95|Ù¾Û\8eداÚ\86Ù\88Ù\88Ù\86Û\95Ù\88Û\95}} Ø¦Û\95رشÛ\8cÚ¤â\80\8cکرا",
+       "undeleterevisions": "$1 {{PLURAL:$1|Ù¾Û\8eداÚ\86Ù\88Ù\88Ù\86Û\95Ù\88Û\95|Ù¾Û\8eداÚ\86Ù\88Ù\88Ù\86Û\95Ù\88Û\95}} Ø³Ú\95دراÛ\8cÛ\95Ù\88Û\95",
        "undeletehistory": "ئەگەر پەڕەیەک بھێنیتەوە، ھەموو پێداچوونەوەکان دەگەڕێنەوە بۆ مێژووی پەڕە.\nئەگەر لە کاتی سڕانەوەی پەڕەکەوە، پەڕەیەک هەر بەو ناوەوە دروست کرابێت، پێداچوونەوە گەرێنراوەکان لە مێژووی پێشووەکەدا دەدرەکەوێت.",
        "undeletehistorynoadmin": "ئەم پەڕەیە سڕاوەتەوە.\nھۆکاری سڕینەوە و وردەکارییەکانی ئەو بەکارھێنەرانەی کە پێش سڕینەوەی دەستکارییان کردووە لە پۆختەی خوارەوەدا نیشان دراوە.\nدەقی ڕاستەقینەی ئەم پێداچوونەوە سڕراوانە تەنھا لەبەر دەستی بەڕێوەبەراندایە.",
        "undelete-revision": "پێداچوونەوەی سڕاوەی $1 (لە $4،  $5) لەلایەن $3:",
        "undeleteviewlink": "دیتن",
        "undeleteinvert": "ھەڵبژاردەکان پێچەوانە بکە",
        "undeletecomment": "هۆکار:",
-       "undeletedrevisions": "{{PLURAL:$1|$1 پێداچوونەوە}} هێنرایەوە",
-       "undeletedrevisions-files": "{{PLURAL:$1|1 پێداچوونەوە|$1 پێداچوونەوە}} و {{PLURAL:$2|1 پەڕگە|$2 پەڕگە}} هێنرایەوە",
-       "undeletedfiles": "{{PLURAL:$1|1 پەڕگە|$1 پەڕگە}} هێنرایەوه",
        "cannotundelete": "ھێنانەوە سەرکەوتوو نەبوو:\n$1",
        "undeletedpage": "'''$1 هێنراوەتەوە'''\n\nبۆ دیتنی پێشینەی دوایین سڕینەوەکان و هێنانەوەکان سەرنجی [[Special:Log/delete|لۆگی سڕینەوە]] بدە.",
        "undelete-header": "بۆ دیتنی ئەو لاپەڕانەی لەم داییانەدا سڕاونەتەوە چاو لە [[Special:Log/delete|لۆگی سڕینەوە]] بکە.",
        "undelete-no-results": "لە ئەرشیڤی سڕاوەکانی لاپەڕەیەکی هاوتا نەدۆزرایەوە.",
        "undelete-cleanup-error": "هەڵە لە سڕینەوەی ئەرشیڤی بەکەڵک نەهاتووی پەڕگە \"$1\".",
        "undelete-missing-filearchive": "ناکرێ ئەرشیڤی پەڕگە بە پێناسەی $1 بهێنیتەوە لەبەر ئەوەی لە ناو بنکەی دراوە‌دا نییە.\nلەوانەیە لە‌پێش‌دا هێنرابێتەوە.",
+       "undelete-error": "کێشە دروست بوو لەکاتی ھەوڵدان بۆ ھێنانەوەی پەڕەکە",
        "undelete-error-short": "هەڵە لە گەڕاندنەوەی سڕینەوەی پەڕگە: $1",
        "undelete-error-long": "هەڵەیەک لە کاتی گەڕاندنەوەی سڕینەوەی پەڕگە ڕووی‌دا:\n\n$1",
        "undelete-show-file-confirm": "ئایا ئەرخەیانی کە دەتەوێ پێداچوونەوە سراوەکەی پەڕگەی \"<nowiki>$1</nowiki>\" لە $2 لە $3 ببینی؟",
        "mycontris": "بەشدارییەکان",
        "anoncontribs": "بەشدارییەکان",
        "contribsub2": "بۆ {{GENDER:$3|$1}} ($2)",
+       "contributions-userdoesnotexist": "ھەژماری بەکارھێنەریی «$1» تۆمار نەکراوە.",
        "nocontribs": "هیچ گۆڕانکاریەکی هاوتای ئەم پێوەرانە نودۆزرایەوە",
        "uctop": "(ھەنووکە)",
        "month": "لە مانگی (و پێشترەوە):",
        "whatlinkshere-hideimages": "$1 بەستەرەکانی پەڕگە",
        "whatlinkshere-filters": "پاڵێوکەکان",
        "whatlinkshere-submit": "بڕۆ",
+       "autoblockid": "بەربەستی ئۆتۆماتیکی #$1",
        "block": "بەربەستنی بەکارھێنەر",
        "unblock": "لە بەربەست‌دەرهێنانی بەکارهێنەر",
        "blockip": "بەربەستنی {{GENDER:$1|بەکارھێنەر}}",
        "ipbwatchuser": "پەڕەکانی بەکارھێنەر و لێدوانی ئەم بەکارهێنەرە بخە ژێر چاودێری",
        "ipb-disableusertalk": "بەرگری ئەم بەکارھێنەرە بکە لە دستکاریکردنی پەڕەی لێدوانەکەی کاتێک بەربەست کراوە",
        "ipb-change-block": "دیسان بەربەست‌کردنەوەی ئەم بەکارهێنەرە بەم هەڵبژاردانە",
+       "ipb-confirm": "بەربەست کردن دڵنیا بکەرەوە",
        "badipaddress": "ناونیشانی ئای‌پی نەگونجاو",
        "blockipsuccesssub": "بەربەست کردن سەرکەوتوو بوو",
        "blockipsuccesstext": "[[Special:Contributions/$1|$1]] بەربەست کرا.<br />\nبڕوانە [[Special:BlockList|پێرستی بەربەستن]] بۆ بەسەرداچوونەوەی بەربەستنەکان.",
+       "ipb-blockingself": "تۆ خەریکە خۆت بەربەست دەکەیت! دڵنیایت کە دەتەوێت ئەم کارە بکەیت؟",
        "ipb-edit-dropdown": "دەستکاری هۆکارەکانی بەربەست",
        "ipb-unblock-addr": "لە بەربەست‌دەرهێنانی $1",
        "ipb-unblock": "لە بەربەست‌دەرهێنانی ناوی بەکارهێنەریەک یا ناونیشانێکی ئای‌پی",
        "ipb-blocklist": "دیتنی ئەو بەربەستانەی وا هەیە",
        "ipb-blocklist-contribs": "بەشدارییەکانی {{GENDER:$1|$1}}",
+       "ipb-blocklist-duration-left": "$1 ماوە",
        "unblockip": "لە بەربەست‌دەرهێنانی بەکارهێنەر",
        "unblockiptext": "بۆ گەڕاندنەوەی دەست‌پی‌گەیشتنی نووسین بۆ ئەو دوایین ئای‌پی یان بەکارهێنەری بەربەست کراوە، لەو فۆرمەی خوارەوە کەڵک وەرگرە.",
        "ipusubmit": "لابردنی ئەم بەربەستە",
        "unblocked": "[[User:$1|$1]] لە بەربەست دەرهێنرا",
+       "unblocked-range": "بەربەست لەسەر $1 لابرا.",
        "unblocked-id": "بەربەستی $1 لابرا",
+       "unblocked-ip": "بەربەست لەسەر [[Special:Contributions/$1|$1]] لابرا.",
        "blocklist": "بەکارھێنەرە بەربەستکراوەکان",
+       "autoblocklist": "بەربەستی ئۆتۆماتیکی",
+       "autoblocklist-submit": "گەڕان",
        "ipblocklist": "بەکارھێنەرە بەربەستکراوەکان",
        "ipblocklist-legend": "دۆزینەوەی بەکارهێنەرێکی بەربەست‌کراو",
        "blocklist-userblocks": "ھەژمارە بەربەستکراوەکان بشارەوە",
        "sorbsreason": "ناونیشانی ئای‌پی تۆ لە DNSBLدا کە {{SITENAME}} کەڵکی لێ‌وەر دەگرێ، وەک پرۆکسیەکی کراوە لیست کراوە.",
        "sorbs_create_account_reason": "ناونیشانی ئای‌پی تۆ لە DNSBLدا کە {{SITENAME}} کەڵکی لێ‌وەر دەگرێ، وەک پرۆکسیەکی کراوە لیست کراوە.\nبۆیە ناتوانی هەژمارە درووست‌بکەی.",
        "ipbblocked": "ناتوانی بەکارھێنەرانی تر بەربەست بکەیت یان بکەیتەوە، چونکوو خۆت بەربەست کراوی.",
+       "ipbnounblockself": "تۆ ڕێگە پێ نەدراویت کە بەربەست لەسەر خۆت لابەریت.",
        "lockdb": "داخستنی بنکەدراوە",
        "unlockdb": "کردنەوەی بنکەدراوە",
        "lockdbtext": "داخستنی بنکەدراوە ئەبێتە هۆی ڕاگرتنی توانای هەموو بەکارهێنەران بۆ دەستکاری لاپەڕەکان، گۆڕانی هەڵبژاردەکانیان، دەستکاری لیستی چاودێرییەکانیان و هەموو ئەموو ئەو شتانە وا پێویستی بە گۆرانکاری لە بنکەدراوە هەیە.\nتکایە ئەرخەیان بە ئەمە هەر ئەوەیە کە دەتەوێ بیکەی و دوای چاکسازیەکەت لەیادت بێ کە بنکەدراوەکە بکەیتەوە.",
        "immobile-source-namespace": "پەڕەکان لە بۆشاییی ناوی \"$1\"دا ناگوێزرێنەوە.",
        "immobile-target-namespace": "گواستنەوەی لاپەڕە بۆناو بۆشایی‌ناو \"$1\" ناکرێت.",
        "immobile-target-namespace-iw": "بەستەرێکی نێوان‌ویکی ئامانجێکی گونجاو نیە بۆ گواستنەوەی لاپەڕە.",
-       "immobile-source-page": "ئەمە لاپەڕە بۆ گواستنەوە نابێت.",
+       "immobile-source-page": "ئەم لاپەڕەیە بۆ گواستنەوە نابێت.",
        "immobile-target-page": "بۆ ئەم سەردێڕی ئامانجە جێگۆڕ ناکرێ.",
        "imagenocrossnamespace": "گواستنەوەی پەڕگە بۆ بۆشایی‌نوێکی غەیری پەڕگە گونجاو نیە.",
        "nonfile-cannot-move-to-file": "گواستنەوەی پەڕگە بۆ بۆشایی‌نوێکی غەیری پەڕگە گونجاو نیە.",
        "export-download": "وەک پەڕگە پاشەکەوتی بکە",
        "export-templates": "داڕێژەکانیش لە خۆگرێت",
        "export-pagelinks": "لەخۆگرتنی لاپەڕەکانی بەستەر پێ‌دراو هەتا قووڵایی:",
+       "export-manual": "پەڕەکان بە دەست زیاد بکە:",
        "allmessages": "پەیامەکانی سیستەم",
        "allmessagesname": "ناو",
        "allmessagesdefault": "دەقی بنەڕەتی",
        "allmessages-prefix": "پاڵێو بە پێشگر:",
        "allmessages-language": "زمان:",
        "allmessages-filter-submit": "بڕۆ",
+       "allmessages-filter-translate": "وەرگێڕان",
        "thumbnail-more": "گەورە کردنەوە",
        "filemissing": "ون‌بوونی پەڕگە",
        "thumbnail_error": "هەڵە کاتی درووست‌کردنی هێما: $1",
        "tooltip-pt-preferences": "{{GENDER:|هەڵبژاردەکانت}}",
        "tooltip-pt-watchlist": "پێڕستی ئەو پەڕانەی کە چاودێریی گۆڕانکارییەکانیان دەکەیت",
        "tooltip-pt-mycontris": "پێڕستی بەشدارییەکان",
+       "tooltip-pt-anoncontribs": "پێڕستی ئەو دەستکارییانەی لەم ناونیشانی ئای-پییەوە کراوە",
        "tooltip-pt-login": "پێشنیارت پێدەکرێ بچیتە ژوورەوە؛ ھەرچەندە زۆرت لێناکرێ",
        "tooltip-pt-logout": "دەرچوون",
        "tooltip-pt-createaccount": "تۆ ھان دەدرێیت کە ھەژمارێک دروست بکەیت و بچیتە ژوورەوە، ئەمە سەرەکی نییە بەھەرحاڵ",
        "tooltip-feed-atom": "Atom feed بۆ ئەم پەڕە",
        "tooltip-t-contributions": "پێڕستی بەشدارییەکانی {{GENDER:$1|ئەم بەکارھێنەرە}}",
        "tooltip-t-emailuser": "ئیمەیڵێک بنێرە بۆ {{GENDER:$1|ئەم بەکارھێنەرە}}",
+       "tooltip-t-info": "زانیاری زیاتر لەبارەی ئەم پەڕەیەوە",
        "tooltip-t-upload": "پەڕگە بار بکە",
        "tooltip-t-specialpages": "پێڕستی ھەموو پەڕە تایبەتەکان",
        "tooltip-t-print": "وەشانی چاپی ئەم پەڕەیە",
        "tooltip-ca-nstab-category": "بینینی پەڕەی پۆلەکە",
        "tooltip-minoredit": "ئەمە وەک گۆڕانکارییەکی بچووک دیاری بکە",
        "tooltip-save": "گۆڕانکارییەکانی خۆت پاشکەوت بکە",
+       "tooltip-publish": "پاشەکەوتکردنی گۆڕانکارییەکان",
        "tooltip-preview": "پێش بینینی گۆڕانکارییەکان، تکایە پێش پاشکەوت کردن ئەمە بەکار بھێنە",
        "tooltip-diff": "نیشان دانی گۆڕانکارییەکانت لە دەقەکەدا",
        "tooltip-compareselectedversions": "جیاوازییەکانی دوو وەشانە دیاریکراوەی ئەم پەڕەیە ببینە.",
        "pageinfo-length": "قەبارەی پەڕە (بایت)",
        "pageinfo-article-id": "زنجیرەی پەڕە",
        "pageinfo-language": "زمانی ناوەرۆکی پەڕە",
+       "pageinfo-language-change": "گۆڕین",
        "pageinfo-content-model": "شێوازی ناوەرۆکی پەڕە",
+       "pageinfo-content-model-change": "گۆڕین",
        "pageinfo-robot-policy": "پێرستکردن بە بۆتەکان",
        "pageinfo-robot-index": "ڕێ پێدراو",
        "pageinfo-robot-noindex": "ڕێ پێنەدراوه",
        "pageinfo-hidden-categories": "{{PLURAL:$1|پۆلی شاردراوە|پۆلە شاردراوەکان}} ($1)",
        "pageinfo-templates": "{{PLURAL:$1|داڕێژەی|داڕێژە}} {{PLURAL:$1|بەکارگیراو|بەکارگیراوەکان}} ($1)",
        "pageinfo-toolboxlink": "زانیاریی پەڕە",
+       "pageinfo-redirectsto": "ڕەوانە دەکرێت بۆ",
        "pageinfo-redirectsto-info": "زانیاری",
        "pageinfo-contentpage": "ھەژمارکراو وەک پەڕەی بەناوەرۆک",
        "pageinfo-contentpage-yes": "بەڵێ",
        "patrol-log-page": "لۆگی پاسدان",
        "patrol-log-header": "ئەمە لۆگێکی پێداچوونەوە پاس دراوەکانە.",
        "log-show-hide-patrol": "لۆگی پاسدان $1",
+       "confirm-markpatrolled-button": "باشە",
        "deletedrevision": "پێداچوونەوەی کۆنی سڕاوە $1",
        "filedeleteerror-short": "هەڵە لە سڕینەوەی پەڕگە: $1",
        "filedeleteerror-long": "کاتی سڕینەوەی ئەم پەڕگەی ڕووبەڕووی کێشە بووینەوە:\n\n$1",
        "newimages-summary": "ئەم پەڕە تایبەتە دوایین پەڕگە بارکراوەکان نیشان دەدات.",
        "newimages-legend": "پاڵاوتن",
        "newimages-label": "ناوی پەڕگە (یان بەشێکیی):",
+       "newimages-user": "ناونیشانی ئای-پی یان ناوی‌ بەکارھێنەر",
+       "newimages-showbots": "بارکردنی بۆتەکان پیشان بدە",
+       "newimages-hidepatrolled": "شاردنەوەی بارکردنە پاسدراوەکان",
        "noimages": "هیچ بۆ بینین نییە.",
        "ilsubmit": "بگەڕێ",
        "bydate": "بەپێی ڕێکەوت",
        "exif-model": "جۆری کامێرا",
        "exif-software": "نەرمەواڵەی بەکارهاتوو",
        "exif-artist": "نووسەر",
+       "exif-copyright": "ھەڵگری مۆڵەتنامە",
        "exif-exifversion": "وەشانی exif",
        "exif-colorspace": "بۆشایی ره‌نگ",
        "exif-pixelxdimension": "پانی وێنە",
        "confirm-watch-top": "زێدەکردنی ئەم پەڕە بە لیستی چاودێریت؟",
        "confirm-unwatch-button": "باشه‌",
        "confirm-unwatch-top": "ئەم پەڕە لە لیستی چاودێریت لاببرێت؟",
+       "confirm-rollback-button": "باشە",
        "semicolon-separator": "؛&#32;",
        "comma-separator": "،&#32;",
        "imgmultipageprev": "← پەڕەی پێشوو",
        "watchlistedit-raw-done": "لیستی چاودێریەکەت نوێ‌کرایەوە",
        "watchlistedit-raw-added": "{{PLURAL:$1|1 سەردێڕ|$1 سەردێڕ}} زیادکرا:",
        "watchlistedit-raw-removed": "{{PLURAL:$1|1 سەردێڕ|$1 سەردێڕ}} لابرا:",
+       "watchlistedit-clear-title": "خاوێنکردنی پێڕستی چاودێری",
        "watchlistedit-clear-titles": "ناونیشانەکان :",
+       "watchlistedit-clear-done": "پێڕستی چاودێریت خاوێن کرایەوە",
        "watchlisttools-clear": "لیستی چاودێری پاک بکەرەوە",
        "watchlisttools-view": "گۆڕانکارییە پەیوەندیدارەکان ببینە",
        "watchlisttools-edit": "لیستی چاودێری ببینە و دەستکاری بکە",
        "version-hook-name": "ناوی قولاپ",
        "version-hook-subscribedby": "بەشداربوو لە لایەن",
        "version-version": "($1)",
+       "version-no-ext-name": "[بێ ناو]",
        "version-license": "مۆڵەتنامە",
        "version-ext-colheader-version": "وەشان",
+       "version-ext-colheader-license": "مۆڵەتنامە",
        "version-ext-colheader-description": "وەسف",
+       "version-ext-colheader-credits": "بەرھەمھێنەر",
        "version-poweredby-others": "دیکە",
        "version-software": "نەرمەکاڵای دامەزراو",
        "version-software-product": "بەرهەم",
        "version-software-version": "وەشان",
        "version-entrypoints-header-url": "ناونیشانی ئینتەرنێتی",
+       "version-libraries-version": "وەشان",
        "version-libraries-license": "مۆڵەت",
        "version-libraries-description": "وەسف",
        "version-libraries-authors": "نووسەر",
        "tags-tag": "ناوی تاگ",
        "tags-display-header": "دەرکەوتنی لە پێرستەکانی گۆڕانکاری",
        "tags-description-header": "وەسفی ماناکەی بە تەواوی",
+       "tags-source-header": "سەرچاوە",
+       "tags-active-header": "چالاک؟",
        "tags-hitcount-header": "گۆڕانکاریە تاگ‌کراوەکان",
+       "tags-actions-header": "کردەوەکان",
        "tags-active-yes": "بەڵێ",
        "tags-active-no": "نا",
        "tags-edit": "دەستکاری",
        "tags-delete": "سڕینەوە",
+       "tags-activate": "کارپێکردن",
+       "tags-deactivate": "لەکارخستن",
        "tags-hitcount": "$1 {{PLURAL:$1|گۆڕان|گۆڕانکاری}}",
+       "tags-create-heading": "تاگی نوێ دروست بکە",
+       "tags-create-tag-name": "ناوی تاگ:",
+       "tags-create-reason": "هۆکار:",
+       "tags-create-submit": "دروستکردن",
+       "tags-create-no-name": "پێویستە ئامژە بە ناوی تاگ بدەیت.",
+       "tags-create-invalid-chars": "تاگەکان نابێت بۆر (<code>،</code>) یان سلاش (<code>/</code>)یان تێدابێت.",
+       "tags-delete-reason": "هۆکار:",
        "comparepages": "پەڕەکان ھەڵسەنگێنە",
        "compare-page1": "پەڕەی ١",
        "compare-page2": "پەڕەی ٢",
        "htmlform-title-not-creatable": "«$1» سەرناوێک نییە کە بکرێت پەڕەی بۆ دروست بکرێت",
        "htmlform-title-not-exists": "$1 بوونی نیە.",
        "logentry-delete-delete": "$1 پەڕەی $3ی {{GENDER:$2|سڕییەوە}}",
+       "logentry-delete-delete_redir": "$1 {{GENDER:$2|ڕەوانەکەری}} $3 سڕیەوە",
        "logentry-delete-restore": "$1 پەڕەی $3ی {{GENDER:$2|ھێنایەوە}}",
        "logentry-delete-revision": "$1 دەرکەوتنی {{PLURAL:$5|پێداچوونەوەیەکی|$5 پێداچوونەوەی}} پەڕەی $3ی {{GENDER:$2|گۆڕیی}}: $4",
        "logentry-suppress-delete": "$1 پەڕەی $3 {{GENDER:$2|بەرگری کرد}}.",
index 457ee31..d7ea238 100644 (file)
        "yourdomainname": "U to duminiu:",
        "login": "Cunnessione",
        "nav-login-createaccount": "Cunnessione / registramentu",
-       "userlogin": "Cunnessione / registramentu",
        "logout": "Scunnessione",
        "userlogout": "Scunnessione",
-       "nologin": "Ùn ha ancu un accessu? $1.",
-       "nologinlink": "Registramentu",
        "createaccount": "Registramentu",
-       "gotaccount": "Ùn ha ancu un accessu? $1.",
-       "gotaccountlink": "Cunnessione",
-       "createaccountreason": "Mutivu:",
        "createacct-reason": "Mutivu",
        "loginsuccesstitle": "Cunnessione fatta",
        "acct_creation_throttle_hit": "Desulatu, ai digià fattu $1 registramenti. Ùn ne poi micca fà d'altri.",
        "mypreferences": "Preferenze",
        "prefs-rc": "Ultimi cambiamenti",
        "prefs-watchlist": "Articuli seguitati",
-       "columns": "Culonne:",
        "searchresultshead": "Ricerca",
        "localtime": "Ora lucale",
        "allowemail": "Abilità a ricezzione di e-mail da altri utilizatori",
        "rcshowhideanons": "$1 i cuntributori anonimi",
        "rcshowhidepatr": "$1 e mudifiche verificate",
        "rcshowhidemine": "$1 e mo cuntribuzioni",
-       "rclinks": "Mustrà l'ultime $1 mudifiche in i $2 ghjorni scorsi<br />$3",
+       "rclinks": "Mustrà l'ultime $1 mudifiche in i $2 ghjorni scorsi",
        "hist": "cron",
        "hide": "piattà",
        "show": "mustrà",
index 0899e65..e4376c2 100644 (file)
@@ -5,7 +5,8 @@
                        "Oxyzen",
                        "Reedy",
                        "아라",
-                       "Macofe"
+                       "Macofe",
+                       "Stephanecbisson"
                ]
        },
        "tog-underline": "Kuritan sa idalum ang mga link",
        "yourdomainname": "Imo domain:",
        "login": "Mag sulod",
        "nav-login-createaccount": "Magsulod / mag-ubra sang account",
-       "userlogin": "Mag sulod / mag-ubra account",
-       "userloginnocreate": "Magsulod",
        "logout": "Maggwa",
        "userlogout": "Maggwa",
        "notloggedin": "Wala nakasulod",
-       "nologin": "Wala ka account? '''$1'''.",
-       "nologinlink": "Mag-ubra account",
        "createaccount": "Mag-ubra account",
-       "gotaccount": "May account ka na bala? '''$1'''.",
-       "gotaccountlink": "Magsulod",
        "createaccountmail": "Paagi sa email",
        "badretype": "Wala gasanto ang password nga imo ginsulod",
        "userexists": "May naga-usar na sang ginpasulod nga ngalan manug-usar.\nMagpili sang iban nga ngalan.",
        "rcshowhideliu": "$1 ka mga gagamit nga naka-sulod",
        "rcshowhideanons": "$1 ang wala nakilal-an nga mga ga-usar",
        "rcshowhidemine": "$1 akon mga na-islan",
-       "rclinks": "Ipakita ang nagligad ka $1 nga nabag-o lang gid sang $2 ka adlaw<br  />$3",
+       "rclinks": "Ipakita ang nagligad ka $1 nga nabag-o lang gid sang $2 ka adlaw",
        "diff": "ginkala-in",
        "hist": "kasaysayan",
        "hide": "Itago",
index 176b2b7..a954b41 100644 (file)
@@ -9,7 +9,8 @@
                        "Исмаил Садуев",
                        "Умар",
                        "Macofe",
-                       "Danvintius Bookix"
+                       "Danvintius Bookix",
+                       "Stephanecbisson"
                ]
        },
        "tog-underline": "Багълантыларнынъ тюбюни сызув:",
        "rcshowhidemine": "меним япкъан денъиштирмелеримни $1",
        "rcshowhidemine-show": "косьтер",
        "rcshowhidemine-hide": "гизле",
-       "rclinks": "Сонъки $2 куньде япылгъан сонъки $1 денъиштирмени косьтер;<br /> $3",
+       "rclinks": "Сонъки $2 куньде япылгъан сонъки $1 денъиштирмени косьтер;",
        "diff": "фаркъ",
        "hist": "кечмиш",
        "hide": "гизле",
        "undeletebtn": "Кери кетир!",
        "undeletelink": "косьтер/кери кетир",
        "undeletecomment": "Себеп:",
-       "undeletedrevisions": "Топлам {{PLURAL:$1|1=1 къайд|$1 къайд}} кери кетирильди.",
        "undelete-header": "Кеченлерде ёкъ этильген саифелерни корьмек ичюн [[Special:Log/delete|ёкъ этюв журналына]] бакъынъыз.",
        "undelete-search-submit": "Къыдыр",
        "namespace": "Исим фезасы:",
index 0f463ba..7889445 100644 (file)
@@ -5,7 +5,8 @@
                        "Don Alessandro",
                        "Urhixidur",
                        "아라",
-                       "Macofe"
+                       "Macofe",
+                       "Stephanecbisson"
                ]
        },
        "tog-underline": "Bağlantılarnıñ tübüni sızuv:",
        "rcshowhidemine": "menim yapqan deñiştirmelerimni $1",
        "rcshowhidemine-show": "köster",
        "rcshowhidemine-hide": "gizle",
-       "rclinks": "Soñki $2 künde yapılğan soñki $1 deñiştirmeni köster;<br /> $3",
+       "rclinks": "Soñki $2 künde yapılğan soñki $1 deñiştirmeni köster;",
        "diff": "farq",
        "hist": "keçmiş",
        "hide": "gizle",
        "undeletebtn": "Keri ketir!",
        "undeletelink": "köster/keri ketir",
        "undeletecomment": "Sebep:",
-       "undeletedrevisions": "Toplam {{PLURAL:$1|1 qayd|$1 qayd}} keri ketirildi.",
        "undelete-header": "Keçenlerde yoq etilgen saifelerni körmek içün [[Special:Log/delete|yoq etüv jurnalına]] baqıñız.",
        "undelete-search-submit": "Qıdır",
        "namespace": "İsim fezası:",
index dec6dea..e13ef12 100644 (file)
        "readonlywarning": "<strong>Varování: Databáze byla uzamčena kvůli údržbě, takže momentálně nebudete moci uložit své změny.</strong>\nMůžete si okopírovat text do souboru a uložit si ho na později.\n\nSprávce serveru, který databázi zamkl, poskytl toto zdůvodnění: $1",
        "protectedpagewarning": "'''Varování: Tato stránka byla zamčena, takže ji mohou editovat pouze správci.'''\nNíže je pro přehled zobrazen nejnovější protokolovací záznam:",
        "semiprotectedpagewarning": "'''Poznámka:''' Tato stránka byla zamčena, takže ji mohou editovat pouze registrovaní uživatelé.\nNíže je pro přehled zobrazen nejnovější protokolovací záznam:",
-       "cascadeprotectedwarning": "<strong>Varování:</strong> Tato stránka byla zamčena, takže ji mohou editovat pouze správci, protože je vložena na následující, kaskádovým zámkem {{PLURAL:$1|zamčenou, stránku|zamčené, stránky}}:",
+       "cascadeprotectedwarning": "<strong>Varování:</strong> Tato stránka byla zamčena, takže ji mohou editovat pouze uživatelé s [[Special:ListGroupRights|určitými oprávněními]], protože je vložena na následující, kaskádovým zámkem {{PLURAL:$1|zamčenou, stránku|zamčené, stránky}}:",
        "titleprotectedwarning": "'''Varování: Tato stránka byla uzamčena, takže k jejímu založení jsou potřeba [[Special:ListGroupRights|zvláštní oprávnění]].'''\nNíže je pro přehled zobrazen nejnovější protokolovací záznam:",
        "templatesused": "{{PLURAL:$1|Šablona použitá|Šablony použité}} na této stránce:",
        "templatesusedpreview": "{{PLURAL:$1|Šablona použitá|Šablony použité}} v tomto náhledu:",
        "saveusergroups": "Uložit {{GENDER:$1|uživatelské}} skupiny",
        "userrights-groupsmember": "{{GENDER:$2|Člen|Členka}} {{PLURAL:$1|skupiny|skupin}}:",
        "userrights-groupsmember-auto": "Automaticky {{GENDER:$2|člen|členka}} {{PLURAL:$1|skupiny|skupin}}:",
-       "userrights-groups-help": "Můžete měnit skupiny, do nichž je {{GENDER:$1|uživatel zařazen|uživatelka zařazena}}.\n* Zaškrtnuté políčko znamená, že {{GENDER:$1|uživatel|uživatelka}} je v dané skupině.\n* Nezaškrtnuté políčko značí, že {{GENDER:$1|uživatel|uživatelka}} v dané skupině není.\n* Hvězdička (*) znamená, že nemůžete danou skupinu odstranit, jakmile ji přidáte, nebo naopak.\n* Křížek (#) znamená, že čas do vypršení dané skupiny můžete pouze prodloužit, ne zkrátit.",
+       "userrights-groups-help": "Můžete měnit skupiny, do nichž je {{GENDER:$1|uživatel zařazen|uživatelka zařazena}}.\n* Zaškrtnuté políčko znamená, že {{GENDER:$1|uživatel|uživatelka}} je v dané skupině.\n* Nezaškrtnuté políčko značí, že {{GENDER:$1|uživatel|uživatelka}} v dané skupině není.\n* Hvězdička (*) znamená, že nemůžete danou skupinu odstranit, jakmile ji přidáte, nebo naopak.\n* Křížek (#) znamená, že čas do vypršení členství v dané skupině můžete pouze prodloužit, ne zkrátit.",
        "userrights-reason": "Důvod:",
        "userrights-no-interwiki": "Nemáte povoleno měnit uživatelská práva na jiných wiki.",
        "userrights-nodatabase": "Databáze $1 neexistuje nebo není místní.",
        "userrights-expiry-options": "1 den:1 day,1 týden:1 week,1 měsíc:1 month,3 měsíce:3 months,6 měsíců:6 months,1 rok:1 rok",
        "userrights-invalid-expiry": "Čas vypršení pro skupinu „$1“ je neplatný.",
        "userrights-expiry-in-past": "Čas vypršení pro skupinu „$1“ je v minulosti.",
-       "userrights-cannot-shorten-expiry": "Čas do vypršení skupiny „$1“ nemůžete zkrátit. To mohou provést pouze uživatelé oprávnění k jejímu přiřazení nebo odstranění.",
+       "userrights-cannot-shorten-expiry": "Čas do vypršení členství ve skupině „$1“ nemůžete zkrátit. To mohou provést pouze uživatelé oprávnění k jejímu přiřazení nebo odstranění.",
        "userrights-conflict": "Konflikt změn uživatelských práv! Zkontrolujte a potvrďte požadované změny.",
        "group": "Skupina:",
        "group-user": "Uživatelé",
        "right-editsemiprotected": "Editace stránek zamčených na „{{int:protect-level-autoconfirmed}}“",
        "right-editcontentmodel": "Editace modelu obsahu stránky",
        "right-editinterface": "Editace zpráv uživatelského rozhraní",
-       "right-editusercssjs": "Editace CSS a JS souborů jiných uživatelů",
        "right-editusercss": "Editace CSS souborů jiných uživatelů",
        "right-edituserjs": "Editace JavaScriptových souborů jiných uživatelů",
        "right-editmyusercss": "Editace vlastních uživatelských CSS souborů",
        "rcfilters-filter-user-experience-level-experienced-label": "Zkušení uživatelé",
        "rcfilters-filter-user-experience-level-experienced-description": "Více než 30 dní činnosti a 500 editací.",
        "rcfilters-filtergroup-automated": "Automatizované příspěvky",
-       "rcfilters-filter-bots-label": "Bot",
+       "rcfilters-filter-bots-label": "Robot",
        "rcfilters-filter-bots-description": "Editace provedené pomocí automatizovaných nástrojů.",
-       "rcfilters-filter-humans-label": "Člověk (ne bot)",
+       "rcfilters-filter-humans-label": "Člověk (ne robot)",
        "rcfilters-filter-humans-description": "Editace provedené lidmi.",
        "rcfilters-filtergroup-reviewstatus": "Stav prověření",
        "rcfilters-filter-patrolled-label": "Prověřené",
        "rcfilters-filter-categorization-description": "Záznamy stránek zařazených do nebo vyřazených z kategorií.",
        "rcfilters-filter-logactions-label": "Zaznamenané činnosti",
        "rcfilters-filter-logactions-description": "Administrativní úkony, založení účtů, mazání stránek, načtení souborů...",
-       "rcfilters-hideminor-conflicts-typeofchange-global": "Filtr „Malé editace“ je v konfliktu s jedním nebo více filtry podle typu změny, protože určité typy změn nelze označit jako malé. Dotyčné filtry jsou označeny nahoře, v prostoru „Aktivní filtry.",
+       "rcfilters-hideminor-conflicts-typeofchange-global": "Filtr „Malé editace“ je v konfliktu s jedním nebo více filtry podle typu změny, protože určité typy změn nelze označit jako malé. Dotyčné filtry jsou označeny nahoře, v prostoru „Aktivní filtry.",
        "rcfilters-hideminor-conflicts-typeofchange": "Určité typy změn nelze označit jako malé, tento filtr je proto v konfliktu s následujícími filtry podle typu změny: $1",
        "rcfilters-typeofchange-conflicts-hideminor": "Tento filtr podle typu změny je v konfliktu s filtrem „Malé editace“. Určité typy změn nelze označit jako malé.",
        "rcnotefrom": "Níže {{PLURAL:$5|je změna|jsou změny}} od <strong>$3, $4</strong> ({{PLURAL:$1|zobrazena|zobrazeny|zobrazeno}} nejvýše <strong>$1</strong>).",
+       "rclistfromreset": "Obnovit výběr data",
        "rclistfrom": "Ukázat nové změny, počínaje od $2, $3",
        "rcshowhideminor": "$1 malé editace",
        "rcshowhideminor-show": "Zobrazit",
        "rcshowhidecategorization": "$1 kategorizaci stránek",
        "rcshowhidecategorization-show": "Zobrazit",
        "rcshowhidecategorization-hide": "Skrýt",
-       "rclinks": "Ukázat $1 posledních změn během posledních $2 dnů<br />\n$3",
+       "rclinks": "Ukázat $1 posledních změn během posledních $2 dnů",
        "diff": "rozdíl",
        "hist": "historie",
        "hide": "skrýt",
        "undeleteviewlink": "prohlédnout",
        "undeleteinvert": "Invertovat výběr",
        "undeletecomment": "Důvod:",
-       "undeletedrevisions": "{{PLURAL:$1|Obnovena jedna verze|Obnoveny $1 verze|Obnoveno $1 verzí}}",
-       "undeletedrevisions-files": "{{PLURAL:$1|Obnovena jedna verze|Obnoveny $1 verze|Obnoveno $1 verzí}} a {{PLURAL:$2|jeden soubor|$2 soubory|$2 souborů}}.",
-       "undeletedfiles": "{{PLURAL:$1|Obnoven jeden soubor|Obnoveny $1 soubory|Obnoveno $1 souborů}}",
        "cannotundelete": "Některá nebo všechna obnovení se nezdařila:\n$1",
        "undeletedpage": "<strong>Stránka „$1“ byla obnovena</strong>\n\nZáznam o posledních mazáních a obnoveních najdete v [[Special:Log/delete|knize smazaných stránek]].",
        "undelete-header": "Vizte nedávno smazané stránky v [[Special:Log/delete|knize smazaných stránek]].",
        "sp-contributions-uploads": "načtené soubory",
        "sp-contributions-logs": "protokolovací záznamy",
        "sp-contributions-talk": "diskuse",
-       "sp-contributions-userrights": "správa uživatelských práv",
+       "sp-contributions-userrights": "správa {{GENDER:$1|uživatelských}} práv",
        "sp-contributions-blocked-notice": "Tento uživatel je momentálně zablokován. Zde je pro přehled zobrazen nejnovější záznam z knihy zablokování:",
        "sp-contributions-blocked-notice-anon": "Tato IP adresa je momentálně zablokována.\nZde je pro přehled zobrazen nejnovější záznam z knihy zablokování:",
        "sp-contributions-search": "Zobrazení příspěvků",
        "unblocked-id": "Blok $1 byl zrušen.",
        "unblocked-ip": "Adresa [[Special:Contributions/$1|$1]] byla odblokována.",
        "blocklist": "Zablokovaní uživatelé",
+       "autoblocklist": "Automatická blokování",
+       "autoblocklist-submit": "Hledat",
+       "autoblocklist-legend": "Seznam automatických blokování",
+       "autoblocklist-localblocks": "Místní {{PLURAL:$1|automatické|automatická}} blokování",
+       "autoblocklist-empty": "Seznam automatických blokování je prázdný.",
+       "autoblocklist-otherblocks": "{{PLURAL:$1|Jiné automatické|Jiná automatická}} blokování",
        "ipblocklist": "Zablokovaní uživatelé",
        "ipblocklist-legend": "Hledat zablokovaného uživatele",
        "blocklist-userblocks": "Skrýt zablokované účty",
        "tooltip-pt-mycontris": "Seznam {{GENDER:|vašich}} příspěvků",
        "tooltip-pt-anoncontribs": "Seznam editací provedených z této IP adresy",
        "tooltip-pt-login": "Doporučujeme vám přihlásit se, ovšem není to povinné.",
+       "tooltip-pt-login-private": "Pro používání této wiki se musíte přihlásit",
        "tooltip-pt-logout": "Odhlásit se",
        "tooltip-pt-createaccount": "Doporučujeme vytvořit si účet a přihlásit se, ovšem není to povinné",
        "tooltip-ca-talk": "Diskuse ke stránce",
        "anonymous": "{{PLURAL:$1|anonymního uživatele|anonymních uživatelů}} {{GRAMMAR:2sg|{{SITENAME}}}}",
        "siteuser": "{{GENDER:$2|uživatel|uživatelka}} {{GRAMMAR:2sg|{{SITENAME}}}} $1",
        "anonuser": "anonymní uživatel {{grammar:2sg|{{SITENAME}}}} $1",
-       "lastmodifiedatby": "Tuto stránku naposledy {{GENDER:$4|změnil|změnila|změnil}} $3 v $2, $1.",
+       "lastmodifiedatby": "Tuto stránku naposledy {{GENDER:$4|editoval|editoval(a)}} $3 v $2, $1.",
        "othercontribs": "Založeno na práci $1.",
        "others": "další",
        "siteusers": "{{PLURAL:$2|{{GENDER:$1|uživatele|uživatelky}}|uživatelů}} {{grammar:2sg|{{SITENAME}}}} $1",
        "confirmrecreate": "{{GENDER:$1|Uživatel|Uživatelka}} [[User:$1|$1]] ([[User talk:$1|diskuse]]) tuto stránku {{GENDER:$1|smazal|smazala}} poté, co jste {{GENDER:|začal|začala|začali}} editovat, s odůvodněním:\n: „$2“\nOpravdu si přejete znovu tuto stránku založit?",
        "confirmrecreate-noreason": "{{GENDER:$1|Uživatel|Uživatelka}} [[User:$1|$1]] ([[User talk:$1|diskuse]]) {{GENDER:$1|smazal|smazala}} tuto stránku poté, co jste {{GENDER:|začal|začala|začali}} s editací. Potvrďte, zda chcete stránku skutečně znovu založit.",
        "recreate": "Založit znovu",
+       "confirm-purge-title": "Vymazat cache této stránky",
        "confirm_purge_button": "OK",
        "confirm-purge-top": "Aktualizovat cachovanou verzi této stránky?",
        "confirm-purge-bottom": "Aktualizace stránky vymaže cache a vynutí zobrazení nejaktuálnější verze.",
        "htmlform-user-not-valid": "<strong>$1</strong> není platné uživatelské jméno.",
        "logentry-delete-delete": "$1 {{GENDER:$2|smazal|smazala}} stránku $3",
        "logentry-delete-delete_redir": "$1 {{GENDER:$2|smazal|smazala}} přesunem přesměrování $3",
-       "logentry-delete-restore": "$1 {{GENDER:$2|obnovil|obnovila}} stránku $3",
+       "logentry-delete-restore": "$1 {{GENDER:$2|obnovil|obnovila}} stránku $3 ($4)",
+       "logentry-delete-restore-nocount": "$1 {{GENDER:$2|obnovil|obnovila}} stránku $3",
+       "restore-count-revisions": "{{PLURAL:$1|jedna revize|$1 revize|$1 revizí}}",
+       "restore-count-files": "{{PLURAL:$1|jeden soubor|$1 soubory|$1 souborů}}",
        "logentry-delete-event": "$1 {{GENDER:$2|změnil|změnila}} viditelnost {{PLURAL:$5|protokolovacího záznamu|$5 protokolovacích záznamů}} ke stránce $3: $4",
        "logentry-delete-revision": "$1 {{GENDER:$2|změnil|změnila}} viditelnost {{PLURAL:$5|revize|$5 revizí}} stránky $3: $4",
        "logentry-delete-event-legacy": "$1 {{GENDER:$2|změnil|změnila}} viditelnost protokolovacích záznamů ke stránce $3",
        "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",
-       "rawhtml-notallowed": "Značky &lt;html&gt; nelze používat mimo běžné stránky."
+       "rawhtml-notallowed": "Značky &lt;html&gt; nelze používat mimo běžné stránky.",
+       "gotointerwiki": "Opustit {{GENDER:4sg|{{SITENAME}}}}",
+       "gotointerwiki-invalid": "Zadaný název byl neplatný.",
+       "gotointerwiki-external": "Chystáte se opustit {{GRAMMAR:4sg|{{SITENAME}}}} a navštívit [[$2]], což je jiná webová stránka.\n\n[$1 Kliknutím zde budete pokračovat na $1].",
+       "undelete-cantedit": "Tuto stránku nemůžete obnovit, protože ji nejste oprávněni editovat.",
+       "undelete-cantcreate": "Tuto stránku nemůžete obnovit, protože stránka s tímto názvem neexistuje a vy ji nejste oprávněni vytvořit."
 }
index 2c9f789..5aece04 100644 (file)
        "rcshowhidemine": "$1 mòje edicje",
        "rcshowhidemine-hide": "Zatacë",
        "rcshowhidecategorization": "$1 kategòrizacjã strón",
-       "rclinks": "Pòkażë slédnëch $1 zmianów zrobionëch òb slédné $2 dniów<br />$3",
+       "rclinks": "Pòkażë slédnëch $1 zmianów zrobionëch òb slédné $2 dniów",
        "diff": "jinosc",
        "hist": "hist.",
        "hide": "zatacë",
index 999ba58..8aab976 100644 (file)
        "rcshowhidemine": "$1 моѩ мѣнъ",
        "rcshowhidemine-show": "каꙁаниѥ",
        "rcshowhidemine-hide": "съкрꙑтиѥ",
-       "rclinks": "$1 послѣдьн҄ь  мѣнъ · ѩжє $2 послѣдьни дьни створѥнꙑ сѫтъ · каꙁаниѥ<br />$3",
+       "rclinks": "$1 послѣдьн҄ь  мѣнъ · ѩжє $2 послѣдьни дьни створѥнꙑ сѫтъ · каꙁаниѥ",
        "diff": "ра҃ꙁн",
        "hist": "їс҃т",
        "hide": "съкрꙑи",
index 7b44e84..5cbc556 100644 (file)
        "yourdomainname": "Сирĕн доменă:",
        "login": "Кĕрĕр",
        "nav-login-createaccount": "Сайта кĕр / регистрацилен",
-       "userlogin": "Кĕр / аккаунт ту",
-       "userloginnocreate": "Кĕмелли",
        "logout": "Сеансне пĕтерни",
        "userlogout": "Тухрăр",
        "notloggedin": "Кĕмен",
-       "nologin": "Аккаунт çук-и? $1.",
-       "nologinlink": "Çĕнĕ хутшăнакана регистрацилесси",
        "createaccount": "Аккаунт ту",
-       "gotaccount": "Аккаунт пур-и? $1.",
-       "gotaccountlink": "Кĕрĕр",
        "createaccountmail": "эл. почта тăрăх",
        "createacct-realname": "Чăн-чăн ят (пулсан)",
        "createacct-submit": "Аккаунт ту",
        "prefs-misc": "Ытти ĕнерлевсем",
        "saveprefs": "Çырса хур",
        "prefs-editing": "Тӳрлетни",
-       "rows": "Йĕркесем:",
-       "columns": "Юпасем:",
        "searchresultshead": "Шырамалли",
        "recentchangesdays": "Çак кунсен хушшинчи юлашки улшăнусене кăтартмалла:",
        "recentchangescount": "Списокра çакăн чухлĕ тӳрлетӳ кăтартмалла:",
        "rcshowhidemine-show": "кăтартмалла",
        "rcshowhidemine-hide": "кăтартмалла мар",
        "rcshowhidecategorization-show": "Кăтарт",
-       "rclinks": "Юлашки $2 кун хушшинче тунă $1 улшăнусене кăтартмалла<br />$3",
+       "rclinks": "Юлашки $2 кун хушшинче тунă $1 улшăнусене кăтартмалла",
        "diff": "танл.",
        "hist": "ист",
        "hide": "кăтартмалла мар",
        "undeleterevisions": "$1 {{PLURAL:$1|верси|версисене}} пăса утнă",
        "undeletebtn": "Каялла тавăр!",
        "undeleteviewlink": "пăх",
-       "undeletedrevisions": "{{PLURAL:$1|1 улăштарни|$1 улăштарнисене}} тавăрнă.",
-       "undeletedfiles": "{{PLURAL:$1|1 файл|$1 файлсене}} тавăрнă",
        "undelete-search-box": "Кăларса пăрахнă страницăсен хушшинчи шырав",
        "undelete-search-submit": "Шыра",
        "namespace": "Ят хушши:",
index 0ddeac0..6cb27d5 100644 (file)
        "right-editsemiprotected": "Golygu tudalennau sydd wedi eu diogelu, ond \"{{int:protect-level-autoconfirmed}}\"",
        "right-editcontentmodel": "Golygu cynnwys y ddalen",
        "right-editinterface": "Golygu'r rhyngwyneb",
-       "right-editusercssjs": "Golygu ffeiliau CSS a JS yn perthyn i ddefnyddwyr eraill",
        "right-editusercss": "Golygu ffeiliau CSS yn perthyn i ddefnyddwyr eraill",
        "right-edituserjs": "Golygu ffeiliau JS yn perthyn i ddefnyddwyr eraill",
        "right-editmyusercss": "Golygu eich ffeiliau defnyddiwr CSS eich hunan.",
        "rcshowhidecategorization": "Categoreiddio tudalen $1",
        "rcshowhidecategorization-show": "Dangos",
        "rcshowhidecategorization-hide": "Cuddio",
-       "rclinks": "Dangos y $1 newid diweddaraf yn ystod y(r) $2 diwrnod diwethaf<br />$3",
+       "rclinks": "Dangos y $1 newid diweddaraf yn ystod y(r) $2 diwrnod diwethaf",
        "diff": "gwahan",
        "hist": "hanes",
        "hide": "Cuddier",
        "undeleteviewlink": "gweld",
        "undeleteinvert": "Gwrthdroi'r dewis",
        "undeletecomment": "Rheswm:",
-       "undeletedrevisions": "wedi adfer $1 {{PLURAL:$1|diwygiad|diwygiad|ddiwygiad|diwygiad|diwygiad|diwygiad}}",
-       "undeletedrevisions-files": "Adferwyd $1 {{PLURAL:$1|fersiwn|fersiwn|fersiwn|fersiwn|fersiwn|fersiwn}} a $2 {{PLURAL:$2|ffeil|ffeil|ffeil|ffeil|ffeil|ffeil}}",
-       "undeletedfiles": "Adferwyd $1 {{PLURAL:$1|ffeil|ffeil|ffeil|ffeil|ffeil|ffeil}}",
        "cannotundelete": "Mae'r cais i ddad-ddileu wedi methu:\n$1",
        "undeletedpage": "'''Adferwyd $1'''\n\nCeir cofnod o'r tudalennau a ddilëwyd neu a adferwyd yn ddiweddar ar y [[Special:Log/delete|lòg ddileuon]].",
        "undelete-header": "Ewch i'r [[Special:Log/delete|lòg ddileuon]] i weld tudalennau a ddilëwyd yn ddiweddar.",
index 51d8ea3..64c38af 100644 (file)
        "right-editsemiprotected": "Rediger sider, der er beskyttet som \"{{int:protect-level-autoconfirmed}}\"",
        "right-editcontentmodel": "Redigere indholdsmodellen for en side",
        "right-editinterface": "Ændre brugergrænsefladens tekster",
-       "right-editusercssjs": "Ændre andre brugeres JS og CSS filer",
        "right-editusercss": "Ændre andre brugeres CSS filer",
        "right-edituserjs": "Ændre andre brugeres JS filer",
        "right-editmyusercss": "Redigere dine egne CSS-filer",
        "rcshowhidecategorization": "$1 kategorisering af sider",
        "rcshowhidecategorization-show": "Vis",
        "rcshowhidecategorization-hide": "Skjul",
-       "rclinks": "Vis seneste $1 ændringer i de sidste $2 dage<br />$3",
+       "rclinks": "Vis seneste $1 ændringer i de sidste $2 dage",
        "diff": "forskel",
        "hist": "historik",
        "hide": "Skjul",
        "undeleteviewlink": "vis",
        "undeleteinvert": "Omvend valget af versioner",
        "undeletecomment": "Begrundelse:",
-       "undeletedrevisions": "$1 {{PLURAL:$1|version|versioner}} gendannet",
-       "undeletedrevisions-files": "$1 {{PLURAL:$1|version|versioner}} og $2 {{PLURAL:$2|fil|filer}} gendannet",
-       "undeletedfiles": "$1 {{PLURAL:$1|fil|filer}} gendannet",
        "cannotundelete": "Gendannelse mislykkedes:\n$1",
        "undeletedpage": "'''$1''' blev gendannet.\n\nI [[Special:Log/delete|slette-loggen]] findes en oversigt over de nyligt slettede og gendannede sider.",
        "undelete-header": "Se [[Special:Log/delete|slette-loggen]] for nyligt slettede og gendannede sider.",
index d74b569..22facc5 100644 (file)
        "redirectedfrom": "(Weitergeleitet von $1)",
        "redirectpagesub": "Weiterleitung",
        "redirectto": "Weiterleitung nach:",
-       "lastmodifiedat": "Diese Seite wurde zuletzt am $1 um $2 Uhr geändert.",
+       "lastmodifiedat": "Diese Seite wurde zuletzt am $1 um $2 Uhr bearbeitet.",
        "viewcount": "Diese Seite wurde bisher {{PLURAL:$1|einmal|$1 mal}} abgerufen.",
        "protectedpage": "Geschützte Seite",
        "jumpto": "Wechseln zu:",
        "readonlywarning": "<strong>Achtung: Die Datenbank wurde für Wartungsarbeiten gesperrt, so dass deine Änderungen derzeit nicht gespeichert werden können.\nSichere den Text bitte lokal auf deinem Computer und versuche zu einem späteren Zeitpunkt, die Änderungen zu übertragen.</strong>\n\nGrund für die Sperre: $1",
        "protectedpagewarning": "<strong>Achtung: Diese Seite wurde geschützt. Nur Benutzer mit Administratorrechten können die Seite bearbeiten.</strong>\nZur Information folgt der aktuelle Logbucheintrag:",
        "semiprotectedpagewarning": "'''Halbsperrung:''' Die Seite wurde so geschützt, dass nur registrierte Benutzer diese ändern können.\nZur Information folgt der aktuelle Logbucheintrag:",
-       "cascadeprotectedwarning": "<strong>Achtung:</strong> Diese Seite wurde so geschützt, dass sie nur durch Benutzer mit Administratorrechten bearbeitet werden kann. Sie ist in die {{PLURAL:$1|folgende Seite|folgenden Seiten}} eingebunden, die mittels der Kaskadensperroption geschützt {{PLURAL:$1|ist|sind}}:",
+       "cascadeprotectedwarning": "<strong>Achtung:</strong> Diese Seite wurde so geschützt, dass sie nur durch Benutzer mit [[Special:ListGroupRights|besonderen Rechten]] bearbeitet werden kann. Sie ist in {{PLURAL:$1|der folgenden Seite|den folgenden Seiten}} eingebunden, die mittels der Kaskadensperroption geschützt {{PLURAL:$1|ist|sind}}:",
        "titleprotectedwarning": "'''Achtung: Die Seitenerstellung wurde so geschützt, dass nur Benutzer mit [[Special:ListGroupRights|speziellen Rechten]] diese Seite erstellen können.'''\nZur Information folgt der aktuelle Logbucheintrag:",
        "templatesused": "{{PLURAL:$1|Die folgende Vorlage wird|Folgende Vorlagen werden}} auf dieser Seite verwendet:",
        "templatesusedpreview": "{{PLURAL:$1|Die folgende Vorlage wird|Folgende Vorlagen werden}} von dieser Seitenvorschau verwendet:",
        "userrights-groupsmember": "Mitglied von:",
        "userrights-groupsmember-auto": "Automatisch Mitglied von:",
        "userrights-groupsmember-type": "$2",
-       "userrights-groups-help": "Du kannst die Gruppenzugehörigkeit {{GENDER:$1|dieses Benutzers|dieser Benutzerin}} ändern:\n* Ein markiertes Kästchen bedeutet, dass {{GENDER:$1|der Benutzer|die Benutzerin}} Mitglied dieser Gruppe ist.\n* Ein nicht markiertes Kästchen bedeutet, dass {{GENDER:$1|der Benutzer|die Benutzerin}} nicht Mitglied dieser Gruppe ist.\n* Ein * bedeutet, dass du das Benutzerrecht nach Erteilung nicht wieder zurücknehmen kannst (oder umgekehrt).\n* Ein # bedeutet, dass du den Zeitpunkt des Ablaufs dieser Gruppe nur nach hinten verschieben kannst. Du kannst ihn nicht vorverlegen.",
+       "userrights-groups-help": "Du kannst die Gruppenzugehörigkeit {{GENDER:$1|dieses Benutzers|dieser Benutzerin}} ändern:\n* Ein markiertes Kästchen bedeutet, dass {{GENDER:$1|der Benutzer|die Benutzerin}} Mitglied dieser Gruppe ist.\n* Ein nicht markiertes Kästchen bedeutet, dass {{GENDER:$1|der Benutzer|die Benutzerin}} nicht Mitglied dieser Gruppe ist.\n* Ein * bedeutet, dass du das Benutzerrecht nach Erteilung nicht wieder zurücknehmen kannst (oder umgekehrt).\n* Ein # bedeutet, dass du den Zeitpunkt des Ablaufs dieser Gruppenmitgliedschaft nur nach hinten verschieben kannst. Du kannst ihn nicht vorverlegen.",
        "userrights-reason": "Grund:",
        "userrights-no-interwiki": "Du hast nicht die erforderliche Berechtigung, um Benutzerrechte in anderen Wikis ändern zu können.",
        "userrights-nodatabase": "Die Datenbank $1 ist nicht vorhanden oder nicht lokal.",
        "userrights-expiry-options": "1 Tag:1 day,1 Woche:1 week,1 Monat:1 month,3 Monate:3 months,6 Monate:6 months,1 Jahr:1 year",
        "userrights-invalid-expiry": "Die Ablaufzeit für die Gruppe „$1“ ist ungültig.",
        "userrights-expiry-in-past": "Die Ablaufzeit für die Gruppe „$1“ liegt in der Vergangenheit.",
-       "userrights-cannot-shorten-expiry": "Du kannst den Ablauf der Gruppe „$1“ nicht vorverlegen. Nur Benutzer mit der Berechtigung, diese Gruppe hinzuzufügen und zu entfernen, können Ablaufzeiten vorverlegen.",
+       "userrights-cannot-shorten-expiry": "Du kannst den Ablauf der Mitgliedschaft in der Gruppe „$1“ nicht vorverlegen. Nur Benutzer mit der Berechtigung, diese Gruppe hinzuzufügen und zu entfernen, können Ablaufzeiten vorverlegen.",
        "userrights-conflict": "Benutzerrechteänderungskonflikt! Bitte überprüfe und bestätige deine Änderungen.",
        "group": "Gruppe:",
        "group-user": "Benutzer",
        "right-editsemiprotected": "Seiten bearbeiten, die als „{{int:protect-level-autoconfirmed}}“ geschützt sind",
        "right-editcontentmodel": "Das Inhaltsmodell einer Seite bearbeiten",
        "right-editinterface": "Systemnachrichten und Benutzeroberflächen bearbeiten",
-       "right-editusercssjs": "Fremde CSS- und JavaScript-Dateien bearbeiten",
        "right-editusercss": "Fremde CSS-Dateien bearbeiten",
        "right-edituserjs": "Fremde JavaScript-Dateien bearbeiten",
        "right-editmyusercss": "Eigene Benutzer-CSS-Dateien bearbeiten",
        "rcfilters-hideminor-conflicts-typeofchange": "Bestimmte Änderungstypen können nicht als „klein“ festgelegt werden, so dass dieser Filter mit den folgenden Änderungstypfiltern kollidiert: $1",
        "rcfilters-typeofchange-conflicts-hideminor": "Dieser Änderungstypfilter kollidiert mit dem Filter „Kleine Bearbeitungen“. Bestimmte Änderungstypen können nicht als „klein“ festgelegt werden.",
        "rcnotefrom": "Angezeigt {{PLURAL:$5|wird die Änderung|werden die Änderungen}} seit <strong>$3, $4</strong> (max. <strong>$1</strong> Einträge).",
+       "rclistfromreset": "Datumsauswahl zurücksetzen",
        "rclistfrom": "Nur Änderungen seit $3, $2 Uhr zeigen.",
        "rcshowhideminor": "Kleine Änderungen $1",
        "rcshowhideminor-show": "anzeigen",
        "rcshowhidecategorization": "Seitenkategorisierungen $1",
        "rcshowhidecategorization-show": "anzeigen",
        "rcshowhidecategorization-hide": "ausblenden",
-       "rclinks": "Zeige die letzten $1 Änderungen der letzten $2 Tage.<br />$3",
+       "rclinks": "Zeige die letzten $1 Änderungen der letzten $2 Tage.",
        "diff": "Unterschied",
        "hist": "Versionen",
        "hide": "ausblenden",
        "php-uploaddisabledtext": "Das Hochladen von Dateien wurde in PHP deaktiviert.\nBitte überprüfe die <code>file_uploads</code>-Einstellung.",
        "uploadscripted": "Diese Datei enthält HTML- oder Scriptcode, der irrtümlich von einem Webbrowser ausgeführt werden könnte.",
        "upload-scripted-pi-callback": "Es kann keine Datei hochgeladen werden, die XML-Stylesheet-Verarbeitungsbefehle enthält.",
+       "upload-scripted-dtd": "Es können keine SVG-Dateien hochgeladen werden, die keine Standard-DTD-Deklaration enthalten.",
        "uploaded-script-svg": "Skriptelement „$1“ in der hochgeladenen SVG-Datei gefunden.",
        "uploaded-hostile-svg": "Unsicheres CSS im Styleelement der hochgeladenen SVG-Datei gefunden.",
        "uploaded-event-handler-on-svg": "Das Festlegen von Ereignis-Handler-Attributen <code>$1=\"$2\"</code> ist in SVG-Dateien nicht erlaubt.",
        "undeleteviewlink": "ansehen",
        "undeleteinvert": "Auswahl umkehren",
        "undeletecomment": "Grund:",
-       "undeletedrevisions": "{{PLURAL:$1|1 Version wurde|$1 Versionen wurden}} wiederhergestellt",
-       "undeletedrevisions-files": "{{PLURAL:$1|1 Version|$1 Versionen}} und {{PLURAL:$2|1 Datei|$2 Dateien}} wurden wiederhergestellt",
-       "undeletedfiles": "{{PLURAL:$1|1 Datei wurde|$1 Dateien wurden}} wiederhergestellt",
        "cannotundelete": "Einige oder alle Wiederherstellungen sind fehlgeschlagen:\n$1",
        "undeletedpage": "'''„$1“''' wurde wiederhergestellt.\n\nIm [[Special:Log/delete|Lösch-Logbuch]] findest du eine Übersicht der gelöschten und wiederhergestellten Seiten.",
        "undelete-header": "Siehe das [[Special:Log/delete|Lösch-Logbuch]] für kürzlich gelöschte Seiten.",
        "sp-contributions-uploads": "Hochgeladene Dateien",
        "sp-contributions-logs": "Logbücher",
        "sp-contributions-talk": "Diskussion",
-       "sp-contributions-userrights": "Benutzerrechte­verwaltung",
+       "sp-contributions-userrights": "{{GENDER:$1|Benutzerrechte­verwaltung}}",
        "sp-contributions-blocked-notice": "{{GENDER:$1|Dieser Benutzer|Diese Benutzerin}} ist derzeit gesperrt. Es folgt der aktuelle Eintrag aus dem Benutzersperr-Logbuch:",
        "sp-contributions-blocked-notice-anon": "Diese IP-Adresse ist zurzeit gesperrt.\nZur Information folgt der aktuelle Auszug aus dem Sperr-Logbuch:",
        "sp-contributions-search": "Suche nach Benutzerbeiträgen",
        "unblocked-id": "Sperr-ID $1 wurde freigegeben",
        "unblocked-ip": "[[Special:Contributions/$1|$1]] wurde freigegeben.",
        "blocklist": "Gesperrte Benutzer",
+       "autoblocklist": "Automatische Sperren",
+       "autoblocklist-submit": "Suchen",
+       "autoblocklist-legend": "Automatische Sperren auflisten",
+       "autoblocklist-localblocks": "Lokale automatische {{PLURAL:$1|Sperre|Sperren}}",
+       "autoblocklist-empty": "Die Liste der automatischen Sperren ist leer.",
+       "autoblocklist-otherblocks": "Andere automatische {{PLURAL:$1|Sperre|Sperren}}",
        "ipblocklist": "Gesperrte Benutzer",
        "ipblocklist-legend": "Suche nach einem gesperrten Benutzer",
        "blocklist-userblocks": "Benutzersperren ausblenden",
        "tooltip-pt-mycontris": "Liste {{GENDER:|eigener}} Beiträge",
        "tooltip-pt-anoncontribs": "Eine Liste der Bearbeitungen, die von dieser IP-Adresse gemacht wurden",
        "tooltip-pt-login": "Sich anzumelden wird gerne gesehen, ist jedoch nicht zwingend erforderlich.",
+       "tooltip-pt-login-private": "Du musst dich anmelden, um dieses Wiki zu nutzen.",
        "tooltip-pt-logout": "Abmelden",
        "tooltip-pt-createaccount": "Wir ermutigen dich dazu, ein Benutzerkonto zu erstellen und dich anzumelden. Es ist jedoch nicht zwingend erforderlich.",
        "tooltip-ca-talk": "Diskussion zum Seiteninhalt",
        "anonymous": "{{PLURAL:$1|Unangemeldeter Benutzer|Unangemeldete Benutzer}} auf {{SITENAME}}",
        "siteuser": "{{SITENAME}}-{{GENDER:$2|Benutzer|Benutzerin}} $1",
        "anonuser": "Anonymer {{SITENAME}}-Benutzer $1",
-       "lastmodifiedatby": "Diese Seite wurde zuletzt am $1 um $2 Uhr von $3 geändert.",
+       "lastmodifiedatby": "Diese Seite wurde zuletzt am $1 um $2 Uhr von $3 bearbeitet.",
        "othercontribs": "Basierend auf der Arbeit von $1.",
        "others": "anderen",
        "siteusers": "{{SITENAME}}-{{PLURAL:$2|{{GENDER:$1|Benutzer|Benutzerin}}|Benutzer}} $1",
        "confirmrecreate": "{{GENDER:$1|Der Benutzer|Die Benutzerin}} [[User:$1|$1]] ([[User talk:$1|Diskussion]]) hat diese Seite gelöscht, nachdem du angefangen hast, sie zu bearbeiten. Die Begründung lautete:\n: <em>$2</em>\nBitte bestätige, dass du diese Seite wirklich neu erstellen möchtest.",
        "confirmrecreate-noreason": "{{GENDER:$1|Der Benutzer|Die Benutzerin}} [[User:$1|$1]] ([[User talk:$1|Diskussion]]) hat diese Seite gelöscht, nachdem du mit der Bearbeitung begonnen hast. Bitte bestätige, dass du die Seite wirklich erneut erstellen möchtest.",
        "recreate": "Neu erstellen",
+       "confirm-purge-title": "Diese Seite aktualisieren",
        "confirm_purge_button": "OK",
        "confirm-purge-top": "Diese Seite aus dem Server-Cache löschen?",
        "confirm-purge-bottom": "Leert den Cache einer Seite und erzwingt die Anzeige der aktuellen Version.",
        "table_pager_first": "Erste Seite",
        "table_pager_last": "Letzte Seite",
        "table_pager_limit": "Zeige $1 Einträge pro Seite",
-       "table_pager_limit_label": "Positionen pro Seite:",
+       "table_pager_limit_label": "Einträge pro Seite:",
        "table_pager_limit_submit": "Los",
        "table_pager_empty": "Keine Ergebnisse",
        "autosumm-blank": "Die Seite wurde geleert.",
        "htmlform-user-not-valid": "<strong>$1</strong> ist kein gültiger Benutzername.",
        "logentry-delete-delete": "$1 {{GENDER:$2|löschte}} Seite $3",
        "logentry-delete-delete_redir": "$1 {{GENDER:$2|löschte}} die Weiterleitung $3 durch Überschreiben",
-       "logentry-delete-restore": "$1 {{GENDER:$2|stellte}} Seite $3 wieder her",
+       "logentry-delete-restore": "$1 {{GENDER:$2|stellte}} die Seite „$3“ wieder her ($4)",
+       "logentry-delete-restore-nocount": "$1 {{GENDER:$2|stellte}} die Seite „$3“ wieder her",
+       "restore-count-revisions": "{{PLURAL:$1|Eine Version|$1 Versionen}}",
+       "restore-count-files": "{{PLURAL:$1|Eine Datei|$1 Dateien}}",
        "logentry-delete-event": "$1 {{GENDER:$2|änderte}} die Sichtbarkeit {{PLURAL:$5|eines Logbucheintrags|von $5 Logbucheinträgen}} auf $3: $4",
        "logentry-delete-revision": "$1 {{GENDER:$2|änderte}} die Sichtbarkeit {{PLURAL:$5|einer Version|von $5 Versionen}} der Seite $3: $4",
        "logentry-delete-event-legacy": "$1 {{GENDER:$2|änderte}} die Sichtbarkeit von Logbucheinträgen auf $3",
        "special-characters-group-thai": "Thailändisch",
        "special-characters-group-lao": "Laotisch",
        "special-characters-group-khmer": "Khmer",
+       "special-characters-group-canadianaboriginal": "Kanadische Silbenschrift",
        "special-characters-title-endash": "Halbgeviertstrich",
        "special-characters-title-emdash": "Geviertstrich",
        "special-characters-title-minus": "Minus",
        "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",
-       "rawhtml-notallowed": "&lt;html&gt;-Tags können nicht außerhalb von normalen Seiten verwendet werden."
+       "rawhtml-notallowed": "&lt;html&gt;-Tags können nicht außerhalb von normalen Seiten verwendet werden.",
+       "gotointerwiki": "{{SITENAME}} verlassen",
+       "gotointerwiki-invalid": "Der angegebene Titel war ungültig.",
+       "gotointerwiki-external": "Du bist dabei, {{SITENAME}} zu verlassen, um [[$2]] zu besuchen, was eine externe Website ist.\n\n[$1 Hier klicken, um auf $1 fortzufahren].",
+       "undelete-cantedit": "Du kannst diese Seite nicht wiederherstellen, da du nicht berechtigt bist, diese Seite zu bearbeiten.",
+       "undelete-cantcreate": "Du kannst diese Seite nicht wiederherstellen, da es keine vorhandene Seite mit diesem Namen gibt und du nicht berechtigt bist, diese Seite zu erstellen."
 }
index 9d77f90..b1a1fe5 100644 (file)
        "viewyourtext": "Na pela '''Vurnayışê ke kerdê''' re şıma şenê kopya kerê:",
        "protectedinterface": "Na pela qandê nusnerin destegê verri dana u kes xırabin nêqero deye kerda kılit.",
        "editinginterface": "'''İqaz:''' Şıma yew perra ke softwarei rê nuştey miyan-bestoği dana cı, aye vırnenê.\nVırnayışê ena perre do eno wiki sero asayışê miyan-bestoğê karberanê binan de bıaso.\n\nTadayışi (çarnayışi) rê , yardımê [https://translatewiki.net/wiki/Main_Page?setlang=diq translatewiki.net]i ra haydarê procêdoşkerdışi de vınderê.",
-       "cascadeprotected": "No pel de vurnayiş qedexe biyo, çunke şıma tuşa \"kademeyın\" aqtif kerdo u no {{PLURAL:$1|pele|pelo}} pawıteyo de xebıtyeno:\n$2",
+       "cascadeprotected": "Ena perre vırnayışan rê akerde niya, çunke a {{PLURAL:$1|perre|perranê}} bınênan de zi yew be yew ravêrdeya, gırweniyena:\n$2",
        "namespaceprotected": "No '''$1''' ca de icazetê şıma çino şıma pel rêz keri.",
-       "customcssprotected": "Mısadeyê şıma çıniyo ke na pela CSSi bıvurnên, çıke na pela xısusiye eyaranê karberan muhtewa kena.",
-       "customjsprotected": "Mısadeyê şıma çıniyo ke na pela Java Scripti bıvurnên, çıke na pela xısusiye eyaranê karberan muhtewa kena.",
+       "customcssprotected": "İzına şıma çıniya ke ena perra CSSi bıvırnên, çıke ena perra xısusiye eyaranê karberan gêna xo miyan.",
+       "customjsprotected": "İzına şıma çıniya ke ena perra Java Scripti bıvırnên, çıke ena perra xısusiye eyaranê karberan gêna xo miyan.",
        "mycustomcssprotected": "Desturê şıma çıniyo ke na pela CSSi bıvurnê.",
        "mycustomjsprotected": "Desturê şıma çıniyo ke na pela JavaScripti bıvurnê.",
        "myprivateinfoprotected": "Ğısusi malumatana ğo timar kerdışire icazeta şıma çıniya.",
        "userlogin-joinproject": "Cıkewe {{SITENAME}}",
        "createaccount": "Hesab vıraze",
        "userlogin-resetpassword-link": "Parola xo kerda xo vira?",
-       "userlogin-helplink2": "Heqa qeydbiyayışi de peşti bıgêrên",
+       "userlogin-helplink2": "Qeydbiyayışi sero peşti bıgêrên",
        "userlogin-loggedin": "Tı xora namey {{GENDER:$1|$1}} ra kewtê/kewtay cı.\nFormê cêrêni bıgureyne ke namey karberio bin ra cı kewê.",
        "userlogin-reauth": "Eger ke {{GENDER:$1|$1}} şımayê se xo araşt kerdışirê fına ronıştış akerê.",
        "userlogin-createanother": "Zewbi hesab vıraz",
        "permissionserrors": "İdari xeta",
        "permissionserrorstext": "Qey {{PLURAL:$1|sebeb|sebebê}} cêrini ra icazetê şıma çıniyo:",
        "permissionserrorstext-withaction": "{{PLURAL:$1|Sebebê|Sebebê}} cêri ra icazetê $2y çıniyo:",
-       "recreate-moveddeleted-warn": "'''Hişyari: no pel o ke şıma vırazeni vere cû vırazyayo.'''\n\nDiqet bıkeri no vurnayişê şıma re gerek esto:",
+       "recreate-moveddeleted-warn": "'''Hişyari: Şıma yew nuşteyo ke veri de esteriyao, ey vırazenê.'''\n\nHetê bınêni de qeydê esterıtışi u kırıştışi esto:",
        "moveddeleted-notice": "Ena pela esteriya ya.\nQeydé  esternayışi u wedarnayışi cér dé deya yo.",
        "log-fulllog": "Temamê rocaneyi bıvine",
        "edit-hook-aborted": "Vurnayiş vınderiya.\nYew sebeb beyan nibı.",
        "undo-success": "No vurnayiş tepeye geryeno. pêverronayişêyê cêrıni kontrol bıkeri.",
        "undo-failure": "Poxta pëverameyişa vurnayişan ra  peyd grotışë kari në bı",
        "undo-norev": "Vurnayiş tepêya nêgeryeno çunke ya vere cû hewna biyo ya zi ca ra çino.",
-       "undo-summary": "Vırnayışê $1'i [[Special:Contributions/$2|$2i]] ([[User talk:$2|Werênayış]]) peyser gırot",
+       "undo-summary": "Vırnayışê $1'i [[Special:Contributions/$2|$2i]] ([[User talk:$2|Werênayış]]) peyser gırewt",
        "undo-summary-username-hidden": "Rewizyona veri $1'i hewada",
        "cantcreateaccount-text": "Hesabvıraştışê na IP adrese ('''$1''') terefê [[User:$3|$3]] kılit biyo.\n\nSebebo ke terefê $3 ra diyao ''$2''",
        "viewpagelogs": "Qeydanê na perrer bımotne",
        "page_first": "verên",
        "page_last": "peyên",
        "histlegend": "Ferqê weçinayışi: Qutiya versiyonan qandé  têversanayış işaret ke u dest be ''enter''i ya zi gocega cêrêne rone.<br />\nCetwel: <strong>({{int:ferq}})</strong> = ferqê versiyonê peyêni, <strong>({{int:peyên}})</strong> = ferqê versiyonê verêni, <strong>{{int:q}}</strong> = vırnayışo werdiyo.",
-       "history-fieldset-title": "Çımberz verori",
+       "history-fieldset-title": "Çım ra viyarnayışan cı geyre",
        "history-show-deleted": "Tenya esterıtey",
        "histfirst": "Verênêr",
        "histlast": "Peyênêr",
        "notextmatches": "tekê (zewcê) nuştey pele çıniyê",
        "prevn": "{{PLURAL:$1|$1}} verên",
        "nextn": "{{PLURAL:$1|$1}} peyên",
-       "prev-page": "Pela verên",
+       "prev-page": "Perra verêne",
        "next-page": "Pela peyên",
        "prevn-title": "$1o verên  {{PLURAL:$1|netice|neticeyan}}",
        "nextn-title": "$1o ke yeno {{PLURAL:$1|netice|neticey}}",
        "shown-title": "Her pele sero $1 {{PLURAL:$1|netici|netica}} bımocne",
        "viewprevnext": "($1 {{int:pipe-separator}} $2) ($3) bıviné",
        "searchmenu-exists": "''Ena 'Wikipediya de ser \"[[:$1]]\" yew pel esto'''",
-       "searchmenu-new": "<strong>Na wiki de pela \"[[:$1]]\" vıraze!</strong> {{PLURAL:$2|0=|Sewbina pela ke şıma geyrayê cı aye bıvênê.|Yew zi neticanê cıgeyrayışê xo bıvênê.}}",
+       "searchmenu-new": "<strong>Ena wiki de perra \"[[:$1]]\" vıraze!</strong> {{PLURAL:$2|0=|Sewbina pela ke şıma geyrayê cı aye bıvênê.|Yew zi peyniyanê cıgeyrayışê xo bıvênê.}}",
        "searchprofile-articles": "Perrê zerreki",
        "searchprofile-images": "Multimedya",
        "searchprofile-everything": "Pêro çi",
        "right-editsemiprotected": "Xısusi pera timaryayış \"{{int:protect-level-autoconfirmed}}\"",
        "right-editcontentmodel": "Modelê zerrekê pele bıvurne",
        "right-editinterface": "Interfaceê karberi sero bıgureye",
-       "right-editusercssjs": "CSS u dosyanê JSiê karberanê binan sero bıgureye",
        "right-editusercss": "Dosyanê CSSiê karberanê binan sero bıgureye",
        "right-edituserjs": "Dosyanê JSiê karberanê binan sero bıgureye",
        "right-editmyusercss": "CSS dosyaya karberinda ğo timar ke",
        "action-mergehistory": "tarixê ena perre yew ke",
        "action-userrights": "heqqa karberanê hemî bivurne",
        "action-userrights-interwiki": "heqqa karberanê ke wikiyê binî de hemî bivurne",
-       "action-siteadmin": "database kilit bike ya zi a bike",
+       "action-siteadmin": "Databasei kılit ke ya zi a ke",
        "action-sendemail": "e-posta bırşe",
        "action-editmyoptions": "Tercihanê xo bıvurne",
        "action-editmywatchlist": "Lista xoya ewniyayışi bıvırnê",
        "recentchanges": "Vırnayışê peyêni",
        "recentchanges-legend": "Tercihê vırnayışanê peyênan",
        "recentchanges-summary": "Wiki sero vırnayışê peyêni asenê.",
-       "recentchanges-noresult": "Goreyê kriteranê kıfşkerdeyan ra qet yew vurnayış nêvêniya.",
+       "recentchanges-noresult": "Demê periyodi de vırnayış be enê kriteran çıniyo.",
        "recentchanges-feed-description": "Ena feed dı vurnayişanê tewr peniyan teqip bık.",
        "recentchanges-label-newpage": "Enê vırnayışi yew perra newiye vıraşta.",
        "recentchanges-label-minor": "No yew vırnayışo werdiyo",
        "undeleteviewlink": "bıvin",
        "undeleteinvert": "Weçinayışi dimlaşt ke",
        "undeletecomment": "Sebeb:",
-       "undeletedrevisions": "pêro piya{{PLURAL:$1|1 qeyd|$1 qeyd}} tepiya anciya.",
-       "undeletedrevisions-files": "{{PLURAL:$1|1 revizyon|$1 revizyon}} u {{PLURAL:$2|1 dosya|$2 dosya}} ameyê halê xo yê verıni",
-       "undeletedfiles": "{{PLURAL:$1|1 dosya|$1 dosya}} tepiya anciyayi.",
        "cannotundelete": "Besternayışonhemembyana tayno nêbeno:\n$1",
        "undeletedpage": "'''$1 pel tepiya anciya'''\n\nqey karê tepiya ardışi u qey karê hewn a kerdışê verıni bıewnê [[Special:Log/delete|qeydê hewn a kerdışi]].",
        "undelete-header": "Peleyê ke veror de besterneyayê êna bıvinê: [[Special:Log/delete|qeydê esterneya]].",
        "block": "Karberi vındarne",
        "unblock": "Hesabê karberi akerê",
        "blockip": "{{GENDER:$1|Karberi}} kılit ke",
-       "blockip-legend": "Karber blok bike",
+       "blockip-legend": "Karberi blok ke",
        "blockiptext": "pê şuxulnayişê formê cêrıni, şıma eşkeni verniyê vurnayişkerdışê yew karberi ya zi yew IPyi bıgêrî. No têna qey verni-gırewtışê vandalizmiyo u gani şıma [[{{MediaWiki:Policy-url}}|qaydeyan]] re diqqet bıkeri. cêr de muheqqeq sebebê verni-grewtışi bınusi. (mesela: -nê- pelani de vandalizm kerdo)",
        "ipaddressorusername": "Adresa IPy ya zi nameyê karberi:",
        "ipbexpiry": "Qedyayış:",
        "ipbsubmit": "Nê karberi kılit ke",
        "ipbother": "Waxtê bini:",
        "ipboptions": "2 saeti:2 hours,1 roce:1 day,3 roci:3 days,1 hefte:1 week,2 heftey:2 weeks,1 aşme:1 month,3 aşmi:3 months,6 aşmi:6 months,1 serre:1 year,ebedi:infinite",
-       "ipbhidename": "Nameyê karberî listeyan u vurnayîşan ra binumne",
-       "ipbwatchuser": "Pela miniqaşe u pela ena karberî seyr bike",
+       "ipbhidename": "Namey karberi vırnayış u listan ra bınımne",
+       "ipbwatchuser": "Perra karberanê karberi u werênayışi cı ewne.",
        "ipb-disableusertalk": "No karber wexto ke bloqedeyo wa pela da xodı vurnayış kerdışi rê izin medı",
-       "ipb-change-block": "Pê ena ayaran, karberî reyna bloke bike",
+       "ipb-change-block": "Karberi be enê eyaran reyna piya bloke ke.",
        "ipb-confirm": "Bloke kerdışi tesdik ke",
        "badipaddress": "Adresê IPî raşt niyo",
        "blockipsuccesssub": "Blok biyo",
        "ipb-confirmhideuser": "Wexto ke \"karberi bınımnê\" nışandeyo se şıma ye kenê karberi bloke kerê. No, Namey karberi lista pêron dı u dekewtışê rocekan dı aktiv bo.Şıma qayıli ney bıkerê?",
        "ipb-edit-dropdown": "Sebebê blokî bivurne",
        "ipb-unblock-addr": "$1 a bik",
-       "ipb-unblock": "Yew adresê IPî ya zi nameyê karberî blok bike",
+       "ipb-unblock": "Yew adresê IPy ya zi namey karberi bloke ke",
        "ipb-blocklist": "Blokî ke hama estê ey bivîne",
        "ipb-blocklist-contribs": "İştirakê {{GENDER:$1|$1}}`i",
        "ipb-blocklist-duration-left": "$1 vet",
-       "unblockip": "Hesabê karberî a bike",
+       "unblockip": "Hesabê karberi a ke",
        "unblockiptext": "Cıreştışê nuştışê IP ya zi karberio ke ver ra gêriyayo, seba peyser barkerdışi dey rê formê cêrêni bıgurenên.",
        "ipusubmit": "Enê kılit kerdışi wedarnê",
        "unblocked": "[[User:$1|$1]] blok biyo",
        "block-log-flags-nocreate": "akerdışê hesabi kılit bi",
        "block-log-flags-noautoblock": "Oto-wedariye terkneyayo",
        "block-log-flags-noemail": "e-poste kılit bi",
-       "block-log-flags-nousertalk": "pela werênayışê xo nêşeno ke bıvurno",
+       "block-log-flags-nousertalk": "perra werênayışê xo nêşeno ke bıvırno",
        "block-log-flags-angry-autoblock": "oto-wedariye amayen aktivo",
        "block-log-flags-hiddenname": "nameyê karberi nımteyo",
        "range_block_disabled": "Desturê administorî ke viraştişê blokê rangeyî kefiliyo.",
        "move-page": "$1 Bıkırış",
        "move-page-legend": "Pele bere",
        "movepagetext": "Pe form ki ho bın de, tı eşkeno name yew pele bıvurni u tarixê pele hemi ya zi pyeran beri.\nMa nameyê kıhanyeri keno pele redireksiyoni ser nameyê newe.\nTı eşkeno pele redireksiyoni ki şıno nameyê originali bıvurni.\nEg tı nıwazeno, ma tı ra rica keni tı [[Special:DoubleRedirects|double]] ya zi [[Special:BrokenRedirects|broken redirects]] qontrol bıki.\nTı gani qontrol bıki eg gıreyan şıno peleyanê raşti.\n\nTeme eka ser yew name de yew nuşte esti, sistemê ma '''nıeşkeno''' nuşte tı beri. Eka ser ena name de yew pele vengi esti, sistemê ma eşkeno nuşte tı beri.\nTı nıeşkeni name yew pele reyna bıvurni.\n\n'''Teme!'''\nEna transfer ser peleyanê populari zaf muhumo;\nMa tu ra rica keni, tı en verni dı qontrol bıki u bışıravi.",
-       "movepagetext-noredirectfixer": "Pe form ki ho bın de, tı eşkeno name yew pele bıvurni u tarixê pele hemi ya zi pyeran beri.\nMa nameyê kıhanyeri keno pele redireksiyoni ser nameyê newe.\nTı eşkeno pele redireksiyoni ki şıno nameyê originali bıvurni.\nEg tı nıwazeno, ma tı ra rica keni tı [[Special:DoubleRedirects|raçarnayışo dılet]] ya zi [[Special:BrokenRedirects|raçarnayışo xırab]]i qontrol bıke.\nTı gani qontrol bıki eg gıreyan şıno peleyanê raşti.\n\nTeme eka ser yew name de yew nuşte esti, sistemê ma '''nıeşkeno''' nuşte tı beri. Eka ser ena name de yew pele vengi esti, sistemê ma eşkeno nuşte tı beri.\nTı nıeşkeni name yew pele reyna bıvurni.\n\n'''İkaz!'''\nEna transfer ser peleyanê populari zaf muhumo;\nMa tu ra rica keni, tı en verni dı qontrol bıki u bışıravi.",
+       "movepagetext-noredirectfixer": " Gırwenayışê formê bınêni do namey perre newe vırazo, pêro vêrorê cı bıkırışo namey newe ser.\nMa namey kıhanêri keni perra serşıkıtışi ser nameyo newe.\nŞıma şenê perra serşıkıtışı zi berê namey raştıkên bıvırnên.\n\nEger şıma nêwazenê, ma şıma ra reca keni şıma [[Special:DoubleRedirects|açarnayışo (tadayışo) dılet]] ya zi [[Special:BrokenRedirects|açarnayışo (tadayışon) çewt]]i kontrol kerên.\nŞıma gani kontrol kerên eger linki şınê perranê raştan ser.\n\nTeme eger ser yew name de yew nuşte esto, sistemê wiki '''nêşeno''' nuştey şıma bıkırışo. Eger ser enê namey de yew perra venge esta, sistemê wiki şeno nuştey şıma bıkırışo.\nTı nıeşkeni name yew pele reyna bıvurni.\n\n'''İqaz!'''\nNo kırıştış şeno yew perra populere rê wışkên u nêpawiyay bo. Ma şıma ra reca kenime, kerdışê xo ra ver peyniyê cı bıvênên.",
        "movepagetalktext": "Ma peleyê mınaqeşeyê ena pele otomatik beno, '''ma nıeşken ber, eg:'''\n*Yew peleyê mınaqeşeyê ser ena name rona esto, ya zi\n*Tı quti check nıkerd.\n\nOturse, tı gani peleyê mınaqeşeyê manually beri.",
        "moveuserpage-warning": "'''Diqet:''' Ti eka yew pelê karberi beni. Diqet bike teyna pel beni feqat ena pele reyna nameyê newi \"nebeno''.",
        "movenologintext": "qey vurnayişê nameyê peli şıma gani qeyd kerde u cıkewteyê [[Special:UserLogin|sistemi]] bıbiy.",
        "unit-pixel": "px",
        "confirm_purge_button": "Temam",
        "confirm-purge-top": "Vervirê na pele bestere?",
-       "confirm-purge-bottom": "Purge kerdişê yew pel cacheyî estereno u revizyonê penîyî mucneno.",
+       "confirm-purge-bottom": "Pakkerdışê yew perre virê verêni estereno u çımraviyarnayışê peyêni gêno ver.",
        "confirm-watch-button": "TEMAM",
        "confirm-watch-top": "Ena pele lista xoya seyrkerdışi ke",
        "confirm-unwatch-button": "TEMAM",
        "htmlform-chosen-placeholder": "Opsiyon weçine",
        "htmlform-cloner-create": "Tayêna cı ke",
        "htmlform-cloner-delete": "Wedare",
-       "logentry-delete-delete": "$1 pela $3 {{GENDER:$2|esterıte}}",
+       "logentry-delete-delete": "$1 perra $3 {{GENDER:$2|esterıte}}",
        "logentry-delete-restore": "$1 pela $3 {{GENDER:$2|peyser arde}}",
        "logentry-delete-event": "$1 $3: $4 de asayışê {{PLURAL:$5|cıkerdışi|cıkerdışan}} {{GENDER:$2|vurna}}",
        "logentry-delete-revision": "$1 pela $3: $4 de asayışê {{PLURAL:$5|yew revizyoni|$5 revizyonan}} {{GENDER:$2|vurna}}",
        "revdelete-uname-unhid": "nameyê karberi nênımıteyo",
        "revdelete-restricted": "vergırewtışê ke xızmekaran rê biye",
        "revdelete-unrestricted": "vergırewtışê ke xızmekaran rê dariyê we",
-       "logentry-move-move": "{| style=\"border:1px solid skyblue; margin-bottom: 1em\" cellspacing=\"0\" cellpadding=\"2\" width=\"60%\"\n\t\n| style=\"font: 100% verdana; color:black\" align=\"center\" bgcolor=\"greenyellow\" | $1,  pera $3'i {{GENDER:$2|kırışt}} $4\n|}",
+       "logentry-move-move": "$1 perra $3 {{GENDER:$2|kırışt}} $4",
        "logentry-move-move-noredirect": "$1, pera $3'i bêhetenayış {{GENDER:$2|kırışt}} pera $4`i",
        "logentry-move-move_redir": "Hetenayışi sera karber $1 pera $3'i  {{GENDER:$2|kırışt}} pera $4",
        "logentry-move-move_redir-noredirect": "Hetenayışi sera pela $3 ra $1 {{GENDER:$2|berd}} pela $4",
index 00c1e20..0c99674 100644 (file)
        "externaldberror": "Abo jo wustupiła eksterna zmólka awtentifikacije datoweje banki, abo njesmějoš swójo eksterne wužywarske konto aktualizěrowaś.",
        "login": "Pśizjawiś se",
        "nav-login-createaccount": "Pśizjawiś se/Konto załožyś",
-       "userlogin": "Pśizjawiś se/Konto załožyś",
-       "userloginnocreate": "Pśizjawiś",
        "logout": "wótzjawiś se",
        "userlogout": "wótzjawiś se",
        "notloggedin": "Njepśizjawjony(a)",
        "userlogin-noaccount": "Njamaš wužywarske konto?",
        "userlogin-joinproject": "Konto za {{GRAMMAR:akuzatiw|{{SITENAME}}}} załožyś",
-       "nologin": "Njamaš wužywarske konto? $1.",
-       "nologinlink": "Nowe wužywarske konto załožyś",
        "createaccount": "Wužywarske konto załožyś",
-       "gotaccount": "Maš južo wužywarske konto? '''$1'''.",
-       "gotaccountlink": "Pśizjawiś se",
-       "userlogin-resetlink": "Sy pśizjawjeńske daty zabył?",
        "userlogin-resetpassword-link": "Sy swójo gronidło zabył?",
        "userlogin-helplink2": "Pomoc pśi pśizjawjenju",
        "userlogin-loggedin": "Sy južo ako {{GENDER:$1|$1 pśizjawjony|$1 pśizjawjona}}. Wužyj slědujucy formular, aby se ako drugi wužywaŕ pśizjawił.",
        "createacct-another-email-ph": "E-mailowu adresu zapódaś",
        "createaccountmail": "Nachylne pśipadne gronidło wužywaś a jo na pódanu e-mailowu adresu pósłaś",
        "createacct-realname": "Napšawdne mě (opcionalny)",
-       "createaccountreason": "Pśicyna:",
        "createacct-reason": "Pśicyna",
        "createacct-reason-ph": "Cogodla załožujoš druge konto?",
        "createacct-submit": "Twójo konto załožyś",
        "right-editprotected": "Boki wobźěłaś, kótarež su pśez \"{{int:protect-level-sysop}}\" šćitane",
        "right-editsemiprotected": "Boki wobźěłaś, kótarež su pśez \"{{int:protect-level-autoconfirmed}}\" šćitane",
        "right-editinterface": "Wužywański pówjerch wobźěłaś",
-       "right-editusercssjs": "Dataje CSS a JS drugich wužywarjow wobźěłaś",
        "right-editusercss": "Dataje CSS drugich wužywarjow wobźěłaś",
        "right-edituserjs": "Dataje JS drugich wužywarjow wobźěłaś",
        "right-editmyusercss": "Twóje swójske wužywarske CSS-dataje wobźěłaś",
        "rcshowhidemine": "móje pśinoski $1",
        "rcshowhidemine-show": "Pokazaś",
        "rcshowhidemine-hide": "Schowaś",
-       "rclinks": "Slědne $1 změny slědnych $2 dnjow pokazaś<br />$3",
+       "rclinks": "Slědne $1 změny slědnych $2 dnjow pokazaś",
        "diff": "rozdźěl",
        "hist": "wersije",
        "hide": "schowaś",
        "undeleteviewlink": "woglědaś se",
        "undeleteinvert": "Wuběrk pśewobrośiś",
        "undeletecomment": "Pśicyna:",
-       "undeletedrevisions": "{{PLURAL:$1|1 wersija jo se nawrośiła|$1 wersiji stej se nawrośiłej|$1 wersije su se nawrośili}}.",
-       "undeletedrevisions-files": "{{PLURAL:$1|1 wersija|$1 wersiji|$1 wersije}} a {{PLURAL:$2|1 dataja|$2 dataji|$2 dataje}} {{PLURAL:$2|jo se nawrośiła|stej se nawrośiłej|su se nawrośili}}.",
-       "undeletedfiles": "{{PLURAL:$1|1 dataja jo se nawrośiła|$1 dataji stej se nawrośiłej|$1 dataje su se nawrośili}}.",
        "cannotundelete": "Wótnowjenje njejo se raźiło:\n$1",
        "undeletedpage": "Bok '''$1''' jo se nawrośił.\n\nW [[Special:Log/delete|log-lisćinje wulašowanjow]] namakajoš pśeglěd wulašowanych a nawrośonych bokow.",
        "undelete-header": "Gano wulašowane boki wiźiš w [[Special:Log/delete|log-lisćinje wulašowanjow]].",
        "logentry-rights-rights-legacy": "$1 jo kupkowe cłonkojstwo za $3 {{GENDER:$2|změnił|změniła}}",
        "logentry-rights-autopromote": "$1 jo se awtomatiski wót $4 do $5 {{GENDER:$2|pśirědował|pśirědowała}}",
        "rightsnone": "(nic)",
-       "revdelete-summary": "Zespominanje wobźěłanja",
        "feedback-adding": "Komentar pśidawa se bokoju...",
        "feedback-bugcheck": "Wjelicnje! Pśekontrolěruj jano, lěc to njejo jadna z [$1 znatych zmólkow].",
        "feedback-bugnew": "Som pśekontrolěrował. Nowu zmólku k wěsći daś",
index 68ce13c..6f9ec7a 100644 (file)
        "externaldberror": "Haro nokosilap pongintutunan bingdata toi awu ko pasagaon monginwagu takaun poinsoliwannu.",
        "login": "Sumuang log",
        "nav-login-createaccount": "Sumuang log / pomonsoi  do takaun",
-       "userlogin": "Sumuang log / pomonsoi  do takaun",
-       "userloginnocreate": "Sumuang log",
        "logout": "Lumabus log",
        "userlogout": "Lumabus log",
        "notloggedin": "Amu nokolog sumuang",
        "userlogin-noaccount": "Ingaa poh takaun?",
        "userlogin-joinproject": "Tanud {{SITENAME}}",
-       "nologin": "Ingaa akaun? $1",
-       "nologinlink": "Pomonsoi do akaun",
        "createaccount": "Pomonsoi do takaun",
-       "gotaccount": "Kitakaun? $1",
-       "gotaccountlink": "Sumuang log",
-       "userlogin-resetlink": "Nolihuan ahal loginnu?",
        "userlogin-resetpassword-link": "Nolihuan borospanalibnu?",
        "userlogin-helplink2": "Sokodung do sumuang log",
        "createaccountmail": "Gunoo nunu nopo kaatalib om pootodo id surat-i ii poinsurat id siriba diti",
-       "createaccountreason": "Sabab:",
        "badretype": "Kaatalib pinosuang awu kopisangai.",
        "userexists": "Ngaranmoguno pinosuang noguno no.\nMaai alanai do suai ngaran.",
        "loginerror": "Nokosilap sumuang log",
        "passwordreset-disabled": "Pomudolian kawagu do kaatalib kitaantob id wiki diti.",
        "passwordreset-username": "Ngarandait:",
        "passwordreset-domain": "Sumanganu:",
-       "passwordreset-capture": "Intaai surat-i dii nowonsoi?",
-       "passwordreset-capture-help": "Nung goritannu id kutak diti, surat-i (ii ki-kaa-talib daamot) mangan pokitanai montok dia om nogi porikoton montok momomoguno diti.",
        "passwordreset-email": "Porikatan surat-i:",
        "passwordreset-emailtitle": "Kointalangan takaun id {{SITENAME}}",
        "passwordreset-emailelement": "Ngaranmoguno: \n$1\n\nKaatalib daamot: \n$2",
        "rcshowhideanons": "$1 momomoguno awu popointutun",
        "rcshowhidepatr": "$1 niditan nosimak",
        "rcshowhidemine": "$1 niditanku",
-       "rclinks": "Popokito soginumu $1 kaalanai id suang $2 tadau<br />$3",
+       "rclinks": "Popokito soginumu $1 kaalanai id suang $2 tadau",
        "diff": "pisuai",
        "hist": "susui",
        "hide": "Popolisok",
        "external_image_whitelist": " #Pologoson baris diti<pre>\n#Suangai do boros koubasanan (guas boros id pialatan //) ponongsiriba\n#Noputan di kaagal pojodion do toput poinsuang (toput koubasanan) do tangagambar\n#Toput di kaagal no silihon do gambar, nung awu nga okito o noputan sinuratan\n#Baris di kisimbol do # nopo nga ointutunan sobaagi do bolotok\n#Tumanud do pisuaian A om a\n\n#Posurato toinsanan id sawat do garis diti. Pologoson iti garis miagal diti</pre>",
        "tag-filter": "[[Special:Tags|Pananda]] gagan:",
        "revdelete-restricted": "pinokogos pogoduhan montok momuruan",
-       "revdelete-unrestricted": "pinoidu pogoduhan montok momuruan",
-       "revdelete-summary": "idito koinibaan"
+       "revdelete-unrestricted": "pinoidu pogoduhan montok momuruan"
 }
index b4faa3a..ba1bac3 100644 (file)
        "right-block": "अरु प्रयोगकर्तानलाई सम्पादन गद्दाकी ब्लक गर",
        "right-unblockself": "आफुलाई खुल्ला गर ।",
        "right-editprotected": "\"{{int:protect-level-sysop}}\" को हैसियतले सुरक्षित पानाहरू सम्पादन गद्या",
-       "right-editusercssjs": "अन्य प्रयोगकर्ताको सी.एस.एस. रे जाभास्क्रिप्ट फाइलहरू सम्पादन गद्या",
        "right-editusercss": "अन्य प्रयोगकर्ताको सी. एस. एस. फाइलहरू सम्पादन गद्या",
        "right-edituserjs": "अरु प्रयोकर्ताका जाभास्क्रिप्ट फाइलहरू सम्पादन गर्न्या",
        "right-rollback": "पछिल्लो प्रयोगकर्ताको सम्पादनहरूलाई छरितो रुपमी पछाडि पर्काउन्या",
        "rcshowhidemine-hide": "लुकाऽ",
        "rcshowhidecategorization-show": "धेकाउन्या",
        "rcshowhidecategorization-hide": "लुकाउन्या",
-       "rclinks": "पछिल्ला $1 परिवर्तनहरू पछाडिका $2 दिनहरूमी<br />$3",
+       "rclinks": "पछिल्ला $1 परिवर्तनहरू <br/> पछाडिका $2 दिनहरूमी",
        "diff": "फरक",
        "hist": "इतिहास",
        "hide": "लुकाइदिय",
        "filehist-user": "प्रयोगकर्ता",
        "filehist-dimensions": "आयाम",
        "filehist-comment": "टिप्पणी",
-       "imagelinks": "फाà¤\87लà¤\95à¥\8b à¤ªà¥\8dरयà¥\8bà¤\97हरà¥\81",
+       "imagelinks": "फाà¤\87लà¤\95à¥\8b à¤ªà¥\8dरयà¥\8bà¤\97हरà¥\82",
        "linkstoimage": "यै चित्रमी निम्न{{PLURAL:$1|पाना जोडिनान{{PLURAL:$1|}}|$1 पानाहरू जोडिनान्}}:",
        "nolinkstoimage": "यो चित्रसित लिंकभयाकि कोइ पाना नाइथी",
        "morelinkstoimage": "यै फाइलको [[Special:WhatLinksHere/$1|थप लिंकहरू]] हेर ।",
        "undeletehistory": "यदि कुनै पानालाई पुन: स्थापन गरायौ भण्या सम्पूर्ण संस्करणहरू इतिहासमी पुन:स्थापन हुन्याछन् ।\nयदि यै नामबठे  नयाँ पानो निर्माण भैसक्याको छ भण्या पुन: स्थापित संस्करणहरू पूर्व इतिहासको रुपमी स्थापित हुन्याछन् ।",
        "undeleterevdel": "यदि यो मल्लो पानो बणन्छ  या फाइल संस्करणहरू आंशिक मेटियाका छन् भण्या मेट्न्या काम रद्द गरिन्या छैन।\nत्यै अवस्थामी तमीले छनौटमी अन्तिम मेटियाको नयाँ संस्करण नलुकाउन्यामी चिनो लगाउनु पडन्छ ।",
        "undelete-revision": "$3द्वारा $1को ($4को  समय $5 मी) मेट्याका संशोधनहरू :",
-       "undeletedrevisions": "{{PLURAL:$1|एउटा संशोधन|$1 संशोधनहरू}} पुनर्स्थापित गरियो",
-       "undeletedrevisions-files": "{{PLURAL:$1|एउटा संशोधन|$1 संशोधनहरू}} र {{PLURAL:$2|एउटा फाइल|$2 फाइलहरू}} पुनर्स्थापित गरियो",
-       "undeletedfiles": "{{PLURAL:$1|१ फाइल|$1 फाइलहरू }} पूर्वस्थितिमी ल्याइयो",
        "undelete-header": "भर्खरै मेटायाका पानाहरू हेद्दाकीलाई [[Special:Log/delete|मेटायाका लग]]मी जाओ।",
        "undelete-search-prefix": "सुरुवाती शब्द अनुसार पानाहरू खोज",
        "undelete-no-results": "मेटियाका पानाहरूको अभिलेखमी क्वै पन मिल्दा पानाहरू नाइभेटिया ।",
        "tooltip-n-mainpage-description": "खास पन्नामी झाऽ",
        "tooltip-n-portal": "आयोजनाका बारेमी , तम कि अद्द सकन्छौ , समान काखाइ  भेटौन्या",
        "tooltip-n-currentevents": "हालैका घटनाको बारेमी पृष्ठभूमि जानकारी पत्ता लागाइदिय",
-       "tooltip-n-recentchanges": "विà¤\95िमà¥\80 à¤¹à¤¾à¤²à¥\88 à¤\85रियाà¤\95ा à¤«à¥\87रबदलà¥\88 à¤¶à¥\81à¤\9aि ।",
+       "tooltip-n-recentchanges": "विà¤\95िमà¥\80 à¤¹à¤¾à¤²à¥\88 à¤\85रियाà¤\95ा à¤«à¥\87रबदलà¥\88 à¤¸à¥\82à¤\9aà¥\80 ।",
        "tooltip-n-randompage": "क्रमरहित पन्ना खोलऽ",
        "tooltip-n-help": "खोज्जु पड्ड्या ठौर ।",
        "tooltip-t-whatlinkshere": "सप्पै विकि पन्नाअनै शुचि जो याँखाइ जोणीजान",
index 0c81529..a15fb87 100644 (file)
        "rcshowhideanons": "$1 མིང་མེད་ལག་ལེན་པ།",
        "rcshowhidepatr": "$1 པེ་ཌོལཊི་ཞུན་དག་ཚུ།",
        "rcshowhidemine": "$1 ངེ་གི་ཞུན་དག།",
-       "rclinks": "མཇུག་མཐའི་ $1 བསྒྱུར་བཅོས་ཚུ་ ཉིནམ་ $2 ནང་ལུ་སྟོན་<br />$3",
+       "rclinks": "མཇུག་མཐའི་ $1 བསྒྱུར་བཅོས་ཚུ་ ཉིནམ་ $2 ནང་ལུ་སྟོན་",
        "diff": "ཁྱད་པར།",
        "hist": "སྤྱོད་ཤུལ",
        "hide": "སྦ།",
index 6a9db68..613f8f5 100644 (file)
        "rcshowhideliu": "$1 ezãla siwo ŋlɔ ŋkɔ",
        "rcshowhideanons": "$1 ŋkɔ maŋlɔlawo",
        "rcshowhidemine": "$1 nyeƒe tɔtrɔwo",
-       "rclinks": "Fia tɔtrɔ $1 mamleawo le ŋkeke $2 siwo vayi me<br />$3",
+       "rclinks": "Fia tɔtrɔ $1 mamleawo le ŋkeke $2 siwo vayi me",
        "diff": "tɔtrɔ",
        "hist": "xoxo",
        "hide": "Ɣla",
index c22982f..72b1da5 100644 (file)
        "externaldberror": "È sucès un erōr cun al terminêl ed certificasiòun ed validitê d'ed fōra, opór an 's gh'à mìa al j autorişasiòun necesâri per arnuvêr l' ingrès d'ed fōra.",
        "login": "Và dèinter",
        "nav-login-createaccount": "Và dèinter / Fà la tó inscrisiòun",
-       "userlogin": "Và dèinter / Fà la tó inscrisiòun",
-       "userloginnocreate": "Và dèinter",
        "logout": "Và fōra",
        "userlogout": "Và fōra",
        "notloggedin": "An t'é mìa gnû dèinter",
        "userlogin-noaccount": "Ét mìa incòra fât la registrasiòun?",
        "userlogin-joinproject": "Da {{SITENAME}}",
-       "nologin": "An gh'èt mìa incòra un ingrès? $1",
-       "nologinlink": "Fà la tó inscrisiòun",
        "createaccount": "Fà la tó inscrisiòun",
-       "gotaccount": "Gh'èt bèle un ingrès? $1",
-       "gotaccountlink": "Và dèinter",
-       "userlogin-resetlink": "T'ét e-scurdê la cêva p'r al tó ingrès?",
        "userlogin-resetpassword-link": "T' ét scurdê la cêva 'd ingrès?",
        "userlogin-helplink2": "Ajót per l'ingrès",
        "userlogin-loggedin": "T'ét bèle coleghê {{GENDER:$1|$1}}. \nDrōva al mōdul ché sòta cme un êter utèint.",
        "createacct-another-email-ph": "Scrév l'indirés ed pôsta eletrônica",
        "createaccountmail": "Drōva 'na cêva 'd ingrès a chêş pruvişôria e spidésla a l'indirés ed pôsta eletrônica sgnê.",
        "createacct-realname": "Al nòm vèira (se 's vōl)",
-       "createaccountreason": "Mutîv:",
        "createacct-reason": "Mutîv",
        "createacct-reason-ph": "Perchè ét drē fêr 'n' êtra utèinsa",
        "createacct-submit": "Fà la tó utèinsa",
        "right-editsemiprotected": "Mudéfica 'l pàgini prutèti cun \"{{int:protect-level-autoconfirmed}}\"",
        "right-editcontentmodel": "Mudéfica al mudèl ed còl ché dèinter int 'na pàgina.",
        "right-editinterface": "Mudéfica al colegamèint tra sistēma e utèint",
-       "right-editusercssjs": "Mudéfica i file CSS e JS 'd êter utèint",
        "right-editusercss": "Mudéfica i file CSS 'd êter utèint",
        "right-edituserjs": "Mudéfica i file JS 'd êter utèint",
        "right-editmyusercss": "Mudéfica i file CSS dal só utèint",
        "rcshowhidemine": "$1 al mē mudéfichi",
        "rcshowhidemine-show": "Fà vèder",
        "rcshowhidemine-hide": "Lōga",
-       "rclinks": "Fà vèder al $1 ûltmi mudéfichi fâti int j ûltem $2 dé<br />$3",
+       "rclinks": "Fà vèder al $1 ûltmi mudéfichi fâti int j ûltem $2 dé",
        "diff": "dif",
        "hist": "stòria",
        "hide": "Lōga",
index ff0286c..6c4430b 100644 (file)
@@ -50,7 +50,8 @@
                        "Αντιγόνη",
                        "Matma Rex",
                        "Ανώνυμος Βικιπαιδιστής",
-                       "GR"
+                       "GR",
+                       "Thodoris"
                ]
        },
        "tog-underline": "Υπογράμμιση συνδέσμων:",
        "right-editsemiprotected": "Επεξεργασία προστατευμένων σελίδων ως \"{{int:protect-level-autoconfirmed}}\"",
        "right-editcontentmodel": "Επεξεργασίας του μοντέλου περιεχόμενου σελίδας",
        "right-editinterface": "Επεξεργασία της διασύνδεσης χρήστη",
-       "right-editusercssjs": "Μεταγραφή των αρχείων CSS και JS άλλων χρηστών",
        "right-editusercss": "Μεταγραφή των αρχείων CSS άλλων χρηστών",
        "right-edituserjs": "Μεταγραφή των αρχείων JS άλλων χρηστών",
        "right-editmyusercss": "Επεξεργασία των ιδιωτικών αρχείων CSS χρήστη",
        "rcshowhidecategorization": "$1 κατηγοριοποίησης σελίδας",
        "rcshowhidecategorization-show": "Εμφάνιση",
        "rcshowhidecategorization-hide": "Απόκρυψη",
-       "rclinks": "Εμφάνιση των τελευταίων $1 αλλαγών στο διάστημα των τελευταίων $2 ημερών<br />$3",
+       "rclinks": "Εμφάνιση των τελευταίων $1 αλλαγών στο διάστημα των τελευταίων $2 ημερών",
        "diff": "διαφορά",
        "hist": "ιστορικό",
        "hide": "Απόκρυψη",
        "undeleteviewlink": "προβολή",
        "undeleteinvert": "Ανατροπή επιλογής",
        "undeletecomment": "Αιτία:",
-       "undeletedrevisions": "{{PLURAL:$1|τροποποίηση|τροποποιήσεις}} αποκαταστάθηκαν",
-       "undeletedrevisions-files": "$1 {{PLURAL:$1|αναθεώρηση|αναθεωρήσεις}} και $2 {{PLURAL:$2|αρχείο|αρχεία}} επαναφέρθηκαν",
-       "undeletedfiles": "$1 {{PLURAL:$1|αρχείο|αρχεία}} επαναφέρθηκαν",
        "cannotundelete": "Μερικές ή όλες οι  αναιρέσεις διαγραφής απέτυχαν: $1",
        "undeletedpage": "'''Η $1 έχει επαναφερθεί'''\n\nΣυμβουλευτείτε το [[Special:Log/delete|αρχείο καταγραφής διαγραφών]] για ένα μητρώο των πρόσφατων διαγραφών και επαναφορών.",
        "undelete-header": "Δείτε [[Special:Log/delete|το αρχείο καταγραφής διαγραφών]] για πρόσφατα διαγεγραμμένες σελίδες.",
        "confirmrecreate": "{{GENDER:$1|Ο χρήστης|Η χρήστρια}} [[User:$1|$1]] ([[User talk:$1|συζήτηση]]) διέγραψε αυτήν τη σελίδα αφότου ξεκινήσατε την επεξεργασία με αιτιολόγηση:\n: <em>$2</em>\nΠαρακαλούμε επιβεβαιώστε ότι θέλετε πραγματικά να ξαναδημιουργήσετε αυτήν τη σελίδα.",
        "confirmrecreate-noreason": "{{GENDER:$1|Ο χρήστης|Η χρήστρια}} [[User:$1|$1]] ([[User talk:$1|συζήτηση]]) διέγραψε αυτήν τη σελίδα αφότου ξεκινήσατε την επεξεργασία.\nΠαρακαλούμε επιβεβαιώστε ότι θέλετε πραγματικά να ξαναδημιουργήσετε αυτήν τη σελίδα.",
        "recreate": "Αναδημιουργία",
+       "confirm-purge-title": "Καθάρισε αυτή την σελίδα",
        "confirm_purge_button": "Εντάξει",
        "confirm-purge-top": "Να απαλειφθεί η προσωρινή μνήμη αυτής της σελίδας;",
        "confirm-purge-bottom": "Ο καθαρισμός σελίδας απαλείφει την προσωρινή μνήμη και εξαναγκάζει την πλέον πρόσφατη αναθεώρηση να εμφανιστεί.",
index 23bfebe..53f98f9 100644 (file)
        "rclistfrom": "Show new changes starting from $2, $3",
        "rcshowhidebots": "$1 bots",
        "rcshowhideliu": "$1 registered users",
-       "rclinks": "Show last $1 changes in last $2 days<br />$3",
+       "rclinks": "Show last $1 changes in last $2 days",
        "diff": "diff",
        "hist": "hist",
        "minoreditletter": "m",
index e87b6fb..05c0241 100644 (file)
        "redirectpagesub": "Redirect page",
        "redirectto": "Redirect to:",
        "talkpageheader": "-",
-       "lastmodifiedat": "This page was last modified on $1, at $2.",
+       "lastmodifiedat": "This page was last edited on $1, at $2.",
        "viewcount": "This page has been accessed {{PLURAL:$1|once|$1 times}}.",
        "protectedpage": "Protected page",
        "jumpto": "Jump to:",
        "readonlywarning": "<strong>Warning: The database has been locked for maintenance, so you will not be able to save your edits right now.</strong>\nYou may wish to copy and paste your text into a text file and save it for later.\n\nThe system administrator who locked it offered this explanation: $1",
        "protectedpagewarning": "<strong>Warning: This page has been protected so that only users with administrator privileges can edit it.</strong>\nThe latest log entry is provided below for reference:",
        "semiprotectedpagewarning": "<strong>Note:</strong> This page has been protected so that only registered users can edit it.\nThe latest log entry is provided below for reference:",
-       "cascadeprotectedwarning": "<strong>Warning:</strong> This page has been protected so that only users with administrator privileges can edit it because it is transcluded in the following cascade-protected {{PLURAL:$1|page|pages}}:",
+       "cascadeprotectedwarning": "<strong>Warning:</strong> This page has been protected so that only users with [[Special:ListGroupRights|specific rights]] can edit it because it is transcluded in the following cascade-protected {{PLURAL:$1|page|pages}}:",
        "titleprotectedwarning": "<strong>Warning: This page has been protected so that [[Special:ListGroupRights|specific rights]] are needed to create it.</strong>\nThe latest log entry is provided below for reference:",
        "templatesused": "{{PLURAL:$1|Template|Templates}} used on this page:",
        "templatesusedpreview": "{{PLURAL:$1|Template|Templates}} used in this preview:",
        "userrights-groupsmember": "Member of:",
        "userrights-groupsmember-auto": "Implicit member of:",
        "userrights-groupsmember-type": "$1",
-       "userrights-groups-help": "You may alter the groups this user is in:\n* A checked box means the user is in that group.\n* An unchecked box means the user is not in that group.\n* A * indicates that you cannot remove the group once you have added it, or vice versa.\n* A # indicates that you can only put back the expiration time of this group; you cannot bring it forward.",
+       "userrights-groups-help": "You may alter the groups this user is in:\n* A checked box means the user is in that group.\n* An unchecked box means the user is not in that group.\n* A * indicates that you cannot remove the group once you have added it, or vice versa.\n* A # indicates that you can only put back the expiration time of this group membership; you cannot bring it forward.",
        "userrights-reason": "Reason:",
        "userrights-no-interwiki": "You do not have permission to edit user rights on other wikis.",
        "userrights-nodatabase": "Database $1 does not exist or is not local.",
        "userrights-expiry-options": "1 day:1 day,1 week:1 week,1 month:1 month,3 months:3 months,6 months:6 months,1 year:1 year",
        "userrights-invalid-expiry": "The expiry time for group \"$1\" is invalid.",
        "userrights-expiry-in-past": "The expiry time for group \"$1\" is in the past.",
-       "userrights-cannot-shorten-expiry": "You cannot bring forward the expiry of group \"$1\". Only users with permission to add and remove this group can bring forward expiry times.",
+       "userrights-cannot-shorten-expiry": "You cannot bring forward the expiry of membership in group \"$1\". Only users with permission to add and remove this group can bring forward expiry times.",
        "userrights-conflict": "Conflict of user rights changes! Please review and confirm your changes.",
        "group": "Group:",
        "group-user": "Users",
        "right-editsemiprotected": "Edit pages protected as \"{{int:protect-level-autoconfirmed}}\"",
        "right-editcontentmodel": "Edit the content model of a page",
        "right-editinterface": "Edit the user interface",
-       "right-editusercssjs": "Edit other users' CSS and JavaScript files",
        "right-editusercss": "Edit other users' CSS files",
        "right-edituserjs": "Edit other users' JavaScript files",
        "right-editmyusercss": "Edit your own user CSS files",
        "rcfilters-filter-unregistered-label": "Unregistered",
        "rcfilters-filter-unregistered-description": "Editors who aren’t logged in.",
        "rcfilters-filter-unregistered-conflicts-user-experience-level": "This filter conflicts with the following Experience {{PLURAL:$2|filter|filters}}, which {{PLURAL:$2|finds|find}} only registered users: $1",
-       "rcfilters-filtergroup-authorship": "Edit authorship",
-       "rcfilters-filter-editsbyself-label": "Your own edits",
-       "rcfilters-filter-editsbyself-description": "Edits by you.",
-       "rcfilters-filter-editsbyother-label": "Edits by others",
-       "rcfilters-filter-editsbyother-description": "Edits created by other users (not you).",
+       "rcfilters-filtergroup-authorship": "Contribution authorship",
+       "rcfilters-filter-editsbyself-label": "Changes by you",
+       "rcfilters-filter-editsbyself-description": "Your own contributions.",
+       "rcfilters-filter-editsbyother-label": "Changes by others",
+       "rcfilters-filter-editsbyother-description": "All changes except your own.",
        "rcfilters-filtergroup-userExpLevel": "Experience level (for registered users only)",
        "rcfilters-filtergroup-user-experience-level-conflicts-unregistered": "Experience filters find only registered users, so this filter conflicts with the “Unregistered” filter.",
        "rcfilters-filtergroup-user-experience-level-conflicts-unregistered-global": "The \"Unregistered\" filter conflicts with one or more Experience filters, which find registered users only. The conflicting filters are marked in the Active Filters area, above.",
        "rcfilters-hideminor-conflicts-typeofchange": "Certain types of change cannot be designated as \"minor,\" so this filter conflicts with the following Type of Change filters: $1",
        "rcfilters-typeofchange-conflicts-hideminor": "This Type of Change filter conflicts with the \"Minor Edits\" filter. Certain types of change cannot be designated as \"minor.\"",
        "rcnotefrom": "Below {{PLURAL:$5|is the change|are the changes}} since <strong>$3, $4</strong> (up to <strong>$1</strong> shown).",
+       "rclistfromreset": "Reset date selection",
        "rclistfrom": "Show new changes starting from $2, $3",
        "rcshowhideminor": "$1 minor edits",
        "rcshowhideminor-show": "Show",
        "rcshowhidecategorization": "$1 page categorization",
        "rcshowhidecategorization-show": "Show",
        "rcshowhidecategorization-hide": "Hide",
-       "rclinks": "Show last $1 changes in last $2 days<br />$3",
+       "rclinks": "Show last $1 changes in last $2 days",
        "diff": "diff",
        "hist": "hist",
        "hide": "Hide",
        "php-uploaddisabledtext": "File uploads are disabled in PHP.\nPlease check the file_uploads setting.",
        "uploadscripted": "This file contains HTML or script code that may be erroneously interpreted by a web browser.",
        "upload-scripted-pi-callback": "Cannot upload a file that contains XML-stylesheet processing instruction.",
+       "upload-scripted-dtd": "Cannot upload SVG files that contain a non-standard DTD declaration.",
        "uploaded-script-svg": "Found scriptable element \"$1\" in the uploaded SVG file.",
        "uploaded-hostile-svg": "Found unsafe CSS in the style element of uploaded SVG file.",
        "uploaded-event-handler-on-svg": "Setting event-handler attributes <code>$1=\"$2\"</code> is not allowed in SVG files.",
        "undeleteviewlink": "view",
        "undeleteinvert": "Invert selection",
        "undeletecomment": "Reason:",
-       "undeletedrevisions": "{{PLURAL:$1|1 revision|$1 revisions}} restored",
-       "undeletedrevisions-files": "{{PLURAL:$1|1 revision|$1 revisions}} and {{PLURAL:$2|1 file|$2 files}} restored",
-       "undeletedfiles": "{{PLURAL:$1|1 file|$1 files}} restored",
        "cannotundelete": "Some or all of the undeletion failed:\n$1",
        "undeletedpage": "<strong>$1 has been restored</strong>\n\nConsult the [[Special:Log/delete|deletion log]] for a record of recent deletions and restorations.",
        "undelete-header": "See [[Special:Log/delete|the deletion log]] for recently deleted pages.",
        "sp-contributions-uploads": "uploads",
        "sp-contributions-logs": "logs",
        "sp-contributions-talk": "talk",
-       "sp-contributions-userrights": "user rights management",
+       "sp-contributions-userrights": "{{GENDER:$1|user}} rights management",
        "sp-contributions-blocked-notice": "This user is currently blocked.\nThe latest block log entry is provided below for reference:",
        "sp-contributions-blocked-notice-anon": "This IP address is currently blocked.\nThe latest block log entry is provided below for reference:",
        "sp-contributions-search": "Search for contributions",
        "unblocked-id": "Block $1 has been removed.",
        "unblocked-ip": "[[Special:Contributions/$1|$1]] has been unblocked.",
        "blocklist": "Blocked users",
+       "autoblocklist": "Autoblocks",
+       "autoblocklist-submit": "Search",
+       "autoblocklist-legend": "List autoblocks",
+       "autoblocklist-localblocks": "Local {{PLURAL:$1|autoblock|autoblocks}}",
+       "autoblocklist-empty": "The autoblock list is empty.",
+       "autoblocklist-otherblocks": "Other {{PLURAL:$1|autoblock|autoblocks}}",
        "ipblocklist": "Blocked users",
        "ipblocklist-legend": "Find a blocked user",
        "blocklist-userblocks": "Hide account blocks",
        "accesskey-pt-mycontris": "y",
        "accesskey-pt-anoncontribs": "y",
        "accesskey-pt-login": "o",
+       "accesskey-pt-login-private": "o",
        "accesskey-pt-logout": "",
        "accesskey-pt-createaccount": "",
        "accesskey-ca-talk": "t",
        "tooltip-pt-mycontris": "A list of {{GENDER:|your}} contributions",
        "tooltip-pt-anoncontribs": "A list of edits made from this IP address",
        "tooltip-pt-login": "You are encouraged to log in; however, it is not mandatory",
+       "tooltip-pt-login-private": "You need to log in to use this wiki",
        "tooltip-pt-logout": "Log out",
        "tooltip-pt-createaccount": "You are encouraged to create an account and log in; however, it is not mandatory",
        "tooltip-ca-talk": "Discussion about the content page",
        "anonymous": "Anonymous {{PLURAL:$1|user|users}} of {{SITENAME}}",
        "siteuser": "{{SITENAME}} user $1",
        "anonuser": "{{SITENAME}} anonymous user $1",
-       "lastmodifiedatby": "This page was last modified $2, $1 by $3.",
+       "lastmodifiedatby": "This page was last edited $2, $1 by $3.",
        "othercontribs": "Based on work by $1.",
        "others": "others",
        "siteusers": "{{SITENAME}} {{PLURAL:$2|{{GENDER:$1|user}}|users}} $1",
        "confirmrecreate-noreason": "User [[User:$1|$1]] ([[User talk:$1|talk]]) {{GENDER:$1|deleted}} this page after you started editing. Please confirm that you really want to recreate this page.",
        "recreate": "Recreate",
        "unit-pixel": "px",
+       "confirm-purge-title": "Purge this page",
        "confirm_purge_button": "OK",
        "confirm-purge-top": "Clear the cache of this page?",
        "confirm-purge-bottom": "Purging a page clears the cache and forces the most current revision to appear.",
        "rawmessage": "$1",
        "logentry-delete-delete": "$1 {{GENDER:$2|deleted}} page $3",
        "logentry-delete-delete_redir": "$1 {{GENDER:$2|deleted}} redirect $3 by overwriting",
-       "logentry-delete-restore": "$1 {{GENDER:$2|restored}} page $3",
+       "logentry-delete-restore": "$1 {{GENDER:$2|restored}} page $3 ($4)",
+       "logentry-delete-restore-nocount": "$1 {{GENDER:$2|restored}} page $3",
+       "restore-count-revisions": "{{PLURAL:$1|1 revision|$1 revisions}}",
+       "restore-count-files": "{{PLURAL:$1|1 file|$1 files}}",
        "logentry-delete-event": "$1 {{GENDER:$2|changed}} visibility of {{PLURAL:$5|a log event|$5 log events}} on $3: $4",
        "logentry-delete-revision": "$1 {{GENDER:$2|changed}} visibility of {{PLURAL:$5|a revision|$5 revisions}} on page $3: $4",
        "logentry-delete-event-legacy": "$1 {{GENDER:$2|changed}} visibility of log events on $3",
        "special-characters-group-thai": "Thai",
        "special-characters-group-lao": "Lao",
        "special-characters-group-khmer": "Khmer",
+       "special-characters-group-canadianaboriginal": "Canadian Aboriginal",
        "special-characters-title-endash": "en dash",
        "special-characters-title-emdash": "em dash",
        "special-characters-title-minus": "minus sign",
        "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",
-       "rawhtml-notallowed": "&lt;html&gt; tags cannot be used outside of normal pages."
+       "rawhtml-notallowed": "&lt;html&gt; tags cannot be used outside of normal pages.",
+       "gotointerwiki": "Leaving {{SITENAME}}",
+       "gotointerwiki-invalid": "The specified title was invalid.",
+       "gotointerwiki-external": "You are about to leave {{SITENAME}} to visit [[$2]] which is a separate website.\n\n[$1 Click here to continue on to $1].",
+       "undelete-cantedit": "You cannot undelete this page as you are not allowed to edit this page.",
+       "undelete-cantcreate": "You cannot undelete this page as there is no existing page with this name and you are not allowed to create this page."
 }
index d50eb85..72ad285 100644 (file)
        "post-expand-template-argument-warning": "Averto: Ĉi tiu paĝo enhavas almenaŭ unu ŝablonan argumenton, kiu havas tro grandan etendan pezon.\nĈi tiuj argumentoj estis forlasitaj.",
        "post-expand-template-argument-category": "Paĝoj enhavantaj forlasitajn argumentojn de ŝablonoj",
        "parser-template-loop-warning": "Rekursiva ŝablono estis trovita: [[$1]]",
+       "template-loop-category": "Paĝoj kun ŝablonaj iteracioj",
        "parser-template-recursion-depth-warning": "Ŝablona profundeco transpasis limon ($1)",
        "language-converter-depth-warning": "Profundo de lingvo-konvertilo preterpasis limon ($1)",
        "node-count-exceeded-category": "Paĝoj kie la nombro da nodoj estas preterpasita",
        "right-editsemiprotected": "Redakti paĝojn protektitajn kiel \"{{int:protect-level-autoconfirmed}}\"",
        "right-editcontentmodel": "Redakti paĝan enhavmodelon",
        "right-editinterface": "Redakti la uzantointerfacon",
-       "right-editusercssjs": "Redaktu CSS- kaj JS-dosierojn de aliaj uzantoj",
        "right-editusercss": "Redaktu CSS-dosierojn de aliaj uzantoj",
        "right-edituserjs": "Redaktu JS-dosierojn de aliaj uzantoj",
        "right-editmyusercss": "Redakti viajn proprajn CSS-dosierojn",
        "rcshowhidecategorization": "$1 kategoriigon de paĝoj",
        "rcshowhidecategorization-show": "Montri",
        "rcshowhidecategorization-hide": "Kaŝi",
-       "rclinks": "Montri $1 lastajn ŝanĝojn dum la $2 lastaj tagoj.<br />$3",
+       "rclinks": "Montri $1 lastajn ŝanĝojn dum la $2 lastaj tagoj.",
        "diff": "malsamoj",
        "hist": "historio",
        "hide": "Kaŝi",
        "undeleteviewlink": "vidi",
        "undeleteinvert": "Inversigi selektaĵon",
        "undeletecomment": "Kialo:",
-       "undeletedrevisions": "{{PLURAL:$1|1 versio restarigita|$1 versioj restarigitaj}}",
-       "undeletedrevisions-files": "{{PLURAL:$1|1 versio|$1 versioj}} kaj {{PLURAL:$2|1 dosiero|$2 dosieroj}} restarigitaj",
-       "undeletedfiles": "{{PLURAL:$1|1 dosiero restarigita|$1 dosieroj restarigitaj}}",
        "cannotundelete": "Iu aŭ ĉiuj restarigoj malsukcesis: \n$1",
        "undeletedpage": "'''$1 estis restarigita'''\n\nKonsultu la [[Special:Log/delete|deletion log]] por protokolo pri la lastatempaj forigoj kaj restarigoj.",
        "undelete-header": "Konsulti la [[Special:Log/delete|protokolo de forigoj]] por lastatempaj forigoj.",
index 2505433..2b171e0 100644 (file)
        "redirectedfrom": "(Redirigido desde «$1»)",
        "redirectpagesub": "Página de redirección",
        "redirectto": "Redirige a:",
-       "lastmodifiedat": "Esta página fue modificada por última vez el $1 a las $2.",
+       "lastmodifiedat": "Se editó esta página por última vez el $1 a las $2.",
        "viewcount": "Esta página ha recibido {{PLURAL:$1|una visita|$1 visitas}}.",
        "protectedpage": "Página protegida",
        "jumpto": "Saltar a:",
        "saveusergroups": "Guardar grupos {{GENDER:$1|del usuario|de la usuaria}}",
        "userrights-groupsmember": "Miembro de:",
        "userrights-groupsmember-auto": "Miembro implícito de:",
-       "userrights-groups-help": "Usted puede alterar los grupos en que está este usuario:\n* Una casilla marcada significa que el usuario está en ese grupo.\n* Una casilla sin marcar significa que el usuario no está en ese grupo.\n* Un * indica que no se puede eliminar el grupo una vez que se han añadido o viceversa.\n* Un # indica que sólo se puede volver a poner la fecha de caducidad de este grupo; no se pueden llevar adelante.",
+       "userrights-groups-help": "Puedes cambiar los grupos en que está este usuario:\n* Una casilla marcada significa que el usuario está en ese grupo.\n* Una casilla sin marcar significa que el usuario no está en ese grupo.\n* Un * indica que no se puede eliminar el grupo una vez que se ha añadido o viceversa.\n* Un # indica que sólo se puede volver a poner la fecha de caducidad de membresía de este grupo; no se pueden llevar adelante.",
        "userrights-reason": "Motivo:",
        "userrights-no-interwiki": "No tienes permiso para editar permisos de usuario en otros wikis.",
        "userrights-nodatabase": "La base de datos $1 no existe o no es local.",
        "right-suppressredirect": "Trasladar páginas sin dejar redirección",
        "right-upload": "Subir archivos",
        "right-reupload": "Subir una nueva versión de un archivo existente",
-       "right-reupload-own": "Subir una nueva versión de un archivo creado por uno mismo",
+       "right-reupload-own": "Subir una nueva versión de un archivo propio",
        "right-reupload-shared": "Sobrescribir localmente archivos presentes en el repositorio multimedia compartido",
        "right-upload_by_url": "Subir un archivo a traves de un URL",
        "right-purge": "Purgar la caché en el servidor sin tener que dar confirmación",
        "right-editsemiprotected": "Editar páginas protegidas como «{{int:protect-level-autoconfirmed}}»",
        "right-editcontentmodel": "Editar el modelo de contenido de una página",
        "right-editinterface": "Editar la interfaz de usuario",
-       "right-editusercssjs": "Editar las páginas de CSS y JavaScript de otros usuarios",
        "right-editusercss": "Editar las páginas de CSS de otros usuarios",
        "right-edituserjs": "Editar las páginas de JavaScript de otros usuarios",
        "right-editmyusercss": "Editar tus archivos CSS",
        "right-editmyuserjs": "Editar tus archivos JavaScript",
-       "right-viewmywatchlist": "Ver tu lista de seguimiento",
-       "right-editmywatchlist": "Editar tu lista de seguimiento. Algunas acciones seguirán agregando páginas aun sin este permiso.",
-       "right-viewmyprivateinfo": "Ver tu información privada (ej. correo electrónico, nombre real)",
-       "right-editmyprivateinfo": "Editar tu información privada (ej: correo electrónico, nombre real)",
+       "right-viewmywatchlist": "Ver su propia lista de seguimiento",
+       "right-editmywatchlist": "Editar su propia lista de seguimiento (algunas acciones seguirán añadiendo páginas aun sin este permiso).",
+       "right-viewmyprivateinfo": "Ver su propia información privada (ej.: correo electrónico, nombre real)",
+       "right-editmyprivateinfo": "Editar su propia información privada (ej.: correo electrónico, nombre real)",
        "right-editmyoptions": "Editar tus preferencias",
        "right-rollback": "Revertir rápidamente las ediciones del último usuario que modificó una página en particular",
        "right-markbotedits": "Marcar ediciones revertidas como ediciones de bot",
        "rcfilters-filter-logactions-label": "Acciones registradas",
        "rcfilters-filter-logactions-description": "Acciones administrativas, creación de cuentas, borrados de páginas, subidas de archivos...",
        "rcnotefrom": "Debajo aparece{{PLURAL:$5| el cambio|n los cambios}} desde <strong>$3, $4</strong> (se muestran hasta <strong>$1</strong>).",
+       "rclistfromreset": "Reiniciar selección de fecha",
        "rclistfrom": "Mostrar cambios nuevos desde las $2 del $3",
        "rcshowhideminor": "$1 ediciones menores",
        "rcshowhideminor-show": "Mostrar",
        "rcshowhidecategorization": "$1 categorización de páginas",
        "rcshowhidecategorization-show": "Mostrar",
        "rcshowhidecategorization-hide": "Ocultar",
-       "rclinks": "Ver los últimos $1 cambios en los últimos $2 días.<br />$3",
+       "rclinks": "Ver los últimos $1 cambios en los últimos $2 días.",
        "diff": "dif",
        "hist": "hist",
        "hide": "Ocultar",
        "listgrouprights-removegroup": "Eliminar {{PLURAL:$2|grupo|grupos}}: $1",
        "listgrouprights-addgroup-all": "Agregar todos los grupos",
        "listgrouprights-removegroup-all": "Eliminar todos los grupos",
-       "listgrouprights-addgroup-self": "Agregar {{PLURAL:$2|grupo|grupos}} a tu propia cuenta: $1",
-       "listgrouprights-removegroup-self": "Eliminar {{PLURAL:$2|grupo|grupos}} de tu propia cuenta: $1",
+       "listgrouprights-addgroup-self": "Agregar {{PLURAL:$2|grupo|grupos}} a su propia cuenta: $1",
+       "listgrouprights-removegroup-self": "Eliminar {{PLURAL:$2|grupo|grupos}} de su propia cuenta: $1",
        "listgrouprights-addgroup-self-all": "Agregar todos los grupos a tu propia cuenta",
        "listgrouprights-removegroup-self-all": "Eliminar todos los grupos de tu propia cuenta",
        "listgrouprights-namespaceprotection-header": "Restricciones del espacio de nombres",
        "undeleteviewlink": "ver",
        "undeleteinvert": "Invertir selección",
        "undeletecomment": "Razón:",
-       "undeletedrevisions": "{{PLURAL:$1|Una revisión restaurada|$1 revisiones restauradas}}",
-       "undeletedrevisions-files": "{{PLURAL:$1|1 revisión|$1 revisiones}} y {{PLURAL:$2|1 archivo|$2 archivos}} restaurados",
-       "undeletedfiles": "$1 {{PLURAL:$1|archivo restaurado|archivos restaurados}}",
        "cannotundelete": "Hubo un error en la totalidad o en parte del proceso de la restauración:\n$1",
        "undeletedpage": "<strong>Se ha restaurado $1</strong>\n\nConsulta el [[Special:Log/delete|registro de borrados]] para ver una lista de los últimos borrados y restauraciones.",
        "undelete-header": "En el [[Special:Log/delete|registro de borrados]] se listan las páginas eliminadas.",
        "sp-contributions-uploads": "subidas",
        "sp-contributions-logs": "registros",
        "sp-contributions-talk": "discusión",
-       "sp-contributions-userrights": "gestión de permisos de usuario",
+       "sp-contributions-userrights": "gestión de permisos {{GENDER:$1|del usuario|de la usuaria}}",
        "sp-contributions-blocked-notice": "Este usuario está actualmente bloqueado. La última entrada del registro de bloqueos es presentada debajo para mayor referencia:",
        "sp-contributions-blocked-notice-anon": "Esta dirección IP se encuentra actualmente bloqueada.\nA continuación se muestra la última entrada del registro de bloqueos para mayor referencia.",
        "sp-contributions-search": "Buscar contribuciones",
        "unblocked-id": "Se ha eliminado el bloqueo $1",
        "unblocked-ip": "Se ha desbloqueado a [[Special:Contributions/$1|$1]].",
        "blocklist": "Usuarios bloqueados",
+       "autoblocklist-submit": "Buscar",
        "ipblocklist": "Usuarios bloqueados",
        "ipblocklist-legend": "Encontrar a un usuario bloqueado",
        "blocklist-userblocks": "Ocultar bloqueos de cuenta",
        "anonymous": "{{PLURAL:$1|Usuario anónimo|Usuarios anónimos}} de {{SITENAME}}",
        "siteuser": "{{GENDER:$1|el usuario|la usuaria}} $1 de {{SITENAME}}",
        "anonuser": "el usuario anónimo $1 de {{SITENAME}}",
-       "lastmodifiedatby": "Esta página fue modificada por última vez el $1 a las $2 por $3.",
+       "lastmodifiedatby": "$3 editó por última vez esta página el $1 a las $2.",
        "othercontribs": "Basado en el trabajo de $1.",
        "others": "otros",
        "siteusers": "{{PLURAL:$2|{{GENDER:$1|el usuario|la usuaria}}|los usuarios}} $1 de {{SITENAME}}",
        "htmlform-user-not-valid": "<strong>$1</strong> no es un nombre de usuario válido.",
        "logentry-delete-delete": "$1 {{GENDER:$2|borró}} la página $3",
        "logentry-delete-delete_redir": "$1 {{GENDER:$2|borró}} la redirección $3 con un traslado",
-       "logentry-delete-restore": "$1 restauró la página $3",
+       "logentry-delete-restore": "$1 {{GENDER:$2|restauró}} la página $3 ($4)",
+       "logentry-delete-restore-nocount": "$1 {{GENDER:$2|restauró}} la página $3",
+       "restore-count-revisions": "{{PLURAL:$1|1 revisión|$1 revisiones}}",
+       "restore-count-files": "{{PLURAL:$1|1 archivo|$1 archivos}}",
        "logentry-delete-event": "$1 {{GENDER:$2|modificó}} la visibilidad de {{PLURAL:$5|un evento|$5 eventos}} del registro en $3: $4",
        "logentry-delete-revision": "$1 {{GENDER:$2|modificó}} la visibilidad de {{PLURAL:$5|una revisión |$5 revisiones}} en la página  $3: $4",
        "logentry-delete-event-legacy": "$1 ha {{GENDER:$2|cambiado}} la visibilidad de eventos del registro en $3",
        "restrictionsfield-label": "Intervalos de IP permitidos:",
        "restrictionsfield-help": "Una dirección IP o intervalo de CIDR por renglón. Para activarlo todo, utiliza <pre>0.0.0.0/0\n::/0</pre>",
        "revid": "revisión $1",
-       "pageid": "ID de página $1"
+       "pageid": "ID de página $1",
+       "gotointerwiki": "Salir de {{SITENAME}}",
+       "gotointerwiki-invalid": "El título especificado no es válido."
 }
index 9daa40e..fabb374 100644 (file)
        "right-editsemiprotected": "Muuta lehekülgi kaitsetasemega \"{{int:protect-level-autoconfirmed}}\"",
        "right-editcontentmodel": "Muuta lehekülje sisumudelit",
        "right-editinterface": "Muuta kasutajaliidest",
-       "right-editusercssjs": "Redigeerida teiste kasutajate CSS- ja JS-faile",
        "right-editusercss": "Redigeerida teiste kasutajate CSS-faile",
        "right-edituserjs": "Redigeerida teiste kasutajate JS-faile",
        "right-editmyusercss": "Redigeerida oma CSS-kasutajafaile",
        "rcshowhidecategorization": "Kategoriseerimine ($1)",
        "rcshowhidecategorization-show": "näita",
        "rcshowhidecategorization-hide": "peida",
-       "rclinks": "Näita viimast $1 muudatust viimase $2 päeva jooksul<br />$3",
+       "rclinks": "Näita viimast $1 muudatust viimase $2 päeva jooksul",
        "diff": "erin",
        "hist": "ajal",
        "hide": "peida",
        "undeleteviewlink": "vaata",
        "undeleteinvert": "Pööra valik teistpidi",
        "undeletecomment": "Põhjus:",
-       "undeletedrevisions": "$1 {{PLURAL:$1|redaktsioon|redaktsiooni}} taastatud",
-       "undeletedrevisions-files": "{{PLURAL:$1|1 redaktsioon|$1 redaktsiooni}} ja {{PLURAL:$2|1 fail|$2 faili}} taastatud",
-       "undeletedfiles": "{{PLURAL:$1|1 fail|$1 faili}} taastatud",
        "cannotundelete": "Taastamine ebaõnnestus osaliselt või täielikult:\n$1",
        "undeletedpage": "'''$1 on taastatud'''\n\n[[Special:Log/delete|Kustutamise logist]] võib leida loendi viimastest kustutamistest ja taastamistest.",
        "undelete-header": "Hiljuti kustutatud leheküljed leiad [[Special:Log/delete|kustutamislogist]].",
index 63508b4..8d94599 100644 (file)
        "right-editprotected": "Babestutako orrialdeak aldatu (babes jauzirik gabe)",
        "right-editsemiprotected": "Aldatu \"{{int:protect-level-autoconfirmed}}\" babesa duten orrialdeak",
        "right-editinterface": "Erabiltzailearen interfazea aldatu",
-       "right-editusercssjs": "Beste lankideen CSS eta JS fitxategiak aldatu",
        "right-editusercss": "Beste lankideen CSS fitxategiak aldatu",
        "right-edituserjs": "Beste lankideen JS fitxategiak aldatu",
        "right-editmyusercss": "Aldatu zure CSS fitxategi propioak",
        "rcshowhidecategorization": "orrialde baten kategorizazioa $1",
        "rcshowhidecategorization-show": "Erakutsi",
        "rcshowhidecategorization-hide": "Ezkutatu",
-       "rclinks": "Erakutsi azken $2 egunetako $1 aldaketak<br />$3",
+       "rclinks": "Erakutsi azken $2 egunetako $1 aldaketak",
        "diff": "ezb",
        "hist": "hist",
        "hide": "Ezkutatu",
        "undeleteviewlink": "ikusi",
        "undeleteinvert": "Alderanztu aukera",
        "undeletecomment": "Arrazoia:",
-       "undeletedrevisions": "{{PLURAL:$1|Berrikuspen 1 leheneratu da|$1 berrikuspen leheneratu dira}}",
-       "undeletedrevisions-files": "{{PLURAL:$1|berrikuspen|berrikuspen}} eta {{PLURAL:$2|fitxategi|fitxategi}} leheneratu dira",
-       "undeletedfiles": "{{PLURAL:$1|fitxategi|fitxategi}} leheneratu dira",
        "cannotundelete": "Ezabatutako birgaitze betean edo hainbatetan akatsa: $1",
        "undeletedpage": "'''«$1» leheneratu da'''\n\nAzken ezabatze eta leheneratzeak ikusteko, jo ezazu [[Special:Log/delete|ezabaketa erregistrora]].",
        "undelete-header": "Berriki ezabatutako orriak ikusteko, jo ezazu [[Special:Log/delete|ezabaketa erregistrora]].",
        "htmlform-user-not-valid": "<strong>$1</strong> erabiltzaile izena ezin da erabili.",
        "logentry-delete-delete": "$1 {{GENDER:$2|wikilariak}} «$3» orria ezabatu du",
        "logentry-delete-restore": "$1 administratzaileak «$3» orria {{GENDER:$2|lehengoratu}} du",
-       "logentry-delete-event": "$1 wikilariak ikusgaitasuna {{{{GENDER:$2|}}|aldatu}} {{PLURAL:$5|dio erregistroko sarrera bati|die erregistroko $5 sarrerari}}, $3 orrian: $4",
+       "logentry-delete-event": "$1 wikilariak ikusgaitasuna {{GENDER:$2|aldatu}} {{PLURAL:$5|dio erregistroko sarrera bati|die erregistroko $5 sarrerari}}, $3 orrian: $4",
        "logentry-delete-revision": "$1 erabiltzaileak {{PLURAL:$5|berrikuste baten|$5 berrikusteren}} ikusgaitasuna aldatu du «$3» orrian: $4",
-       "logentry-suppress-delete": "$1 erabiltzaileak $3 orrialdea {{GENDER:$2|ezabatu}} du",
+       "logentry-suppress-delete": "$1 erabiltzaileak $3 orria {{GENDER:$2|ezabatu}} du",
        "logentry-suppress-event": "$1 wikilariak ezkutuan ikusgaitasuna aldatu {{PLURAL:$5|dio erregistroko sarrera bati|die erregistroko $5 sarrerari}}, «$3» orrian: $4",
        "revdelete-content-hid": "edukia ezkutatu da",
        "revdelete-summary-hid": "edizioaren laburpena ezkutatu da",
index 1953747..d51b5f3 100644 (file)
        "externaldberror": "Marru d'autentificación esterna e la basi e datus, u bien nu t'alcuentras autorizau p'atualizal la tu cuenta esterna.",
        "login": "Entral",
        "nav-login-createaccount": "Entral/Crial cuenta",
-       "userlogin": "Entral/Crial cuenta",
-       "userloginnocreate": "Entral",
        "logout": "Salil",
        "userlogout": "Salil",
        "notloggedin": "Nu t'alcuentras rustriu",
-       "nologin": "Entovia nu gastas una cuenta? $1.",
-       "nologinlink": "Cria una",
        "createaccount": "Crial cuenta",
-       "gotaccount": "Ya tiinis una cuenta? '''$1'''.",
-       "gotaccountlink": "Entral",
        "createaccountmail": "pol e-mail",
        "badretype": "Las consínias nu conciin.",
        "userexists": "El nombri d'usuáriu ya s'alcuentra rustriu, pol favol, escrebi otru nombri.",
        "rcshowhidepatr": "$1 eicionis patrullás",
        "rcshowhidemine": "$1 las mis eicionis",
        "rcshowhidemine-hide": "Açonchal",
-       "rclinks": "Muestral los $1 úrtimus chambus enus $2 úrtimus dias<br />$3",
+       "rclinks": "Muestral los $1 úrtimus chambus enus $2 úrtimus dias",
        "diff": "def",
        "hist": "estor",
        "hide": "Açonchal",
        "undeletebtn": "Restaural",
        "undeletelink": "Guipal/arrecuperal",
        "undeletecomment": "Comentáriu:",
-       "undeletedrevisions": "{{PLURAL:$1|1 revisión|$1 revisionis}} restaurás",
-       "undeletedrevisions-files": "{{PLURAL:$1|1 revisión|$1 revisionis}} i {{PLURAL:$2|1 archivu|$2 archivus}} restauraus",
-       "undeletedfiles": "{{PLURAL:$1|1 archivu|$1 archivus}} restauraus",
        "cannotundelete": "Marru arrecuperandu; es posibri qu´alguien ya aiga arrecuperau la páhina.",
        "undeletedpage": "'''S'á restaurau $1'''\n\nConsurta el [[Special:Log/delete|rustrihu d'esborrau]] pa visoreal los úrtimus esborraus i arrecuperacionis.",
        "undelete-header": "Vaiti pal [[Special:Log/delete|rustrihu d’esborrau]] pa vel las úrtimas páhinas esborrás.",
        "revdelete-restricted": "las restricionis a los çahorilis án siu apricás",
        "revdelete-unrestricted": "las restricionis a los çahorilis án siu esborrás",
        "rightsnone": "(dengunu)",
-       "revdelete-summary": "eital sumáriu",
        "searchsuggest-search": "Buscal",
        "expand_templates_preview": "Previsoreal"
 }
index 91a1790..56b95e1 100644 (file)
@@ -85,7 +85,7 @@
        "tog-enotifusertalkpages": "هنگامی که در صفحهٔ بحث کاربری‌ام تغییری صورت می‌گیرد به من ایمیلی فرستاده شود",
        "tog-enotifminoredits": "برای تغییرات جزئی در صفحه‌ها و پرونده‌ها هم به من ایمیلی فرستاده شود",
        "tog-enotifrevealaddr": "نشانی پست الکترونیکی من در ایمیل‌های اطلاع‌رسانی هویدا گردد",
-       "tog-shownumberswatching": "نمایشِ شمار کاربران پی‌گیری کننده",
+       "tog-shownumberswatching": "شمار کاربران پی‌گیری‌کننده نمایش داده شود",
        "tog-oldsig": "امضای کنونی شما:",
        "tog-fancysig": "امضا به صورت ویکی‌متن در نظر گرفته شود (بدون درج خودکار پیوند)",
        "tog-uselivepreview": "از پیش‌نمایش زنده استفاده شود",
        "qbbrowse": "مرور",
        "qbedit": "ویرایش",
        "qbpageoptions": "این صفحه",
-       "qbmyoptions": "صفحات من",
+       "qbmyoptions": "صفحه‌های من",
        "faq": "پرسش‌های متداول",
        "faqpage": "Project:پرسش‌های متداول",
        "actions": "عملکردها",
        "tagline": "از {{SITENAME}}",
        "help": "راهنما",
        "search": "جستجو",
-       "search-ignored-headings": "#<!-- این صفحه را درست همانطور که هست رها کنید --> <pre>\n#سر‌فصل‌هایی که توسط تحقیق نادیده گرفته خواهندشد.‌\n#به محض اینکه صفحه با سرفصل، فهرست شده‌است،تغییرات متاثر می‌شود.\n#شما می‌توانید با انجام یک ویرایش پوچ صفحه را وادار به دوباره فهرست کردن کنید.\n#نحو به شرح زیر است:\n#  *همه چیز از یک خصیصهٔ \"#\" گرفته تا آخر خط، یک نظر است\n#  *هر خط بدون فاصله، عنوان دقیق برای نادیده گرفتن،موضوع و همه چیز منابع است\nاتصالات خارجی\nهمچنین مشاهده کنید\n#</pre> <!-- leave this line exactly as it is -->",
+       "search-ignored-headings": "#<!-- این صفحه را درست همانطور که هست رها کنید --> <pre>\n# سر‌فصل‌هایی که توسط جستجو نادیده گرفته خواهندشد.‌\n# تأثیر تغییرات زمانی رخ می‌دهد که صفحهٔ حاوی آن سرفصل، نمایه شود.\n# شما می‌توانید با انجام یک ویرایش پوچ صفحه را وادار به دوباره نمایه‌شدن کنید.\n# نحو به شرح زیر است:\n#  *هر چه از یک نویسهٔ «#» تا آخر خط بیاید، یک توضیح است.\n#  *هر خط بدون فاصله، دقیقاً عنوانی است که نادیده گرفته می‌شود (با رعایت بزرگی و کوچکی حروف).\nمنابع\nپیوند به بیرون\nهمچنین ببینید\n#</pre> <!-- leave this line exactly as it is -->",
        "searchbutton": "جستجو",
        "go": "برو",
        "searcharticle": "برو",
        "redirectedfrom": "(تغییرمسیر از $1)",
        "redirectpagesub": "صفحهٔ تغییرمسیر",
        "redirectto": "تغییرمسیر به:",
-       "lastmodifiedat": "این صفحه آخرین‌بار در $1 ساعت $2 تغییر یافته‌است.",
+       "lastmodifiedat": "این صفحه آخرین‌بار در $1 ساعت $2 ویرایش شده‌است.",
        "viewcount": "از این صفحه {{PLURAL:$1|یک‌بار|$1بار}} بازدید شده‌است.",
        "protectedpage": "صفحهٔ محافظت‌شده",
        "jumpto": "پرش به:",
        "pool-timeout": "اتمام مهلت انتظار برای قفل",
        "pool-queuefull": "صف مخزن پر است",
        "pool-errorunknown": "خطای ناشناخته",
-       "pool-servererror": "پول سنتر سرویس در دسترس نیست ( $1 ).",
+       "pool-servererror": "سرویس شمارندهٔ انباره در دسترس نیست ($1).",
        "poolcounter-usage-error": "خطای استفاده: $1",
        "aboutsite": "دربارهٔ {{SITENAME}}",
        "aboutpage": "Project:درباره",
        "youhavenewmessages": "$1 دارید ($2).",
        "youhavenewmessagesfromusers": "شما از {{PLURAL:$3|یک کاربر دیگر|$3  کاربر}} $1 دارید ($2).",
        "youhavenewmessagesmanyusers": "شما از تعدادی کاربر $1 دارید ($2).",
-       "newmessageslinkplural": "{{PLURAL:$1|Ù¾Û\8cاÙ\85 Ø¬Ø¯Û\8cد|999=پیام‌های تازه}}",
-       "newmessagesdifflinkplural": "{{formatnum:$1}} {{PLURAL:$1|تغییر|999=تغییر}} اخیر",
+       "newmessageslinkplural": "{{PLURAL:$1|Ù¾Û\8cاÙ\85 ØªØ§Ø²Ù\87|999=پیام‌های تازه}}",
+       "newmessagesdifflinkplural": "{{PLURAL:$1|تغییر|999=تغییر}} اخیر",
        "youhavenewmessagesmulti": "پیام‌های جدیدی در $1 دارید.",
        "editsection": "ویرایش",
        "editold": "ویرایش",
        "hidetoc": "نهفتن",
        "collapsible-collapse": "نهفتن",
        "collapsible-expand": "گسترش",
-       "confirmable-confirm": "{{GENDER:$1|شما}} مطمئن هستید؟",
+       "confirmable-confirm": "آیا مطمئن {{GENDER:$1|هستید}}؟",
        "confirmable-yes": "بله",
        "confirmable-no": "خیر",
        "thisisdeleted": "نمایش یا احیای $1؟",
        "nospecialpagetext": "<strong>شما یک صفحهٔ ویژهٔ نامجاز را درخواست کرده‌اید.</strong>\n\nفهرستی از صفحه‌های ویژهٔ مجاز در [[Special:SpecialPages|{{int:specialpages}}]] وجود دارد.",
        "error": "خطا",
        "databaseerror": "خطای پایگاه داده",
-       "databaseerror-text": "مشکلی در پایگاه‌داده‌ها رخ داده است. \nاین ممکن است نشان‌دهندهٔ ایرادی در نرم‌افزار باشد.",
-       "databaseerror-textcl": "یک خطای پرس‌وجوی پایگاه داده‌های رخ داده است.",
-       "databaseerror-query": "پرس‌وجو: $1",
+       "databaseerror-text": "مشکلی در پایگاه‌داده‌ها رخ داد. \nاین ممکن است نشان‌دهندهٔ ایرادی در نرم‌افزار باشد.",
+       "databaseerror-textcl": "یک خطا در پرسمان پایگاه داده رخ داد.",
+       "databaseerror-query": "پرسمان: $1",
        "databaseerror-function": "تابع: $1",
        "databaseerror-error": "خطا: $1",
        "transaction-duration-limit-exceeded": "برای پرهیز از ایجاد تاخیر بالا در نسخه‌برداری، این تراکنش لغو شد چرا که مدت زمان نوشتن ($1) از حد $2 {{PLURAL:$2|ثانیه|ثانیه}} بیشتر بود.\nاگر در حال تغییر چیزهای زیادی به طور همزمان هستید، سعی کنید به جایش چند عمل را در گروه‌های کوچکتر انجام بدهید.",
        "nonwrite-api-promise-error": "سرآیند اچ‌تی‌تی‌پی 'Promise-Non-Write-API-Action' ارسال شد ولی درخواست به یک رابط برنامه‌نویسی پودمان نوشتن بود.",
        "internalerror": "خطای داخلی",
        "internalerror_info": "خطای داخلی: $1",
-       "internalerror-fatal-exception": "نوع استثنای مخرب \"$1\"",
+       "internalerror-fatal-exception": "استثنای مخرب از نوع «$1»",
        "filecopyerror": "نشد از پروندهٔ «$1» روی «$2» نسخه‌برداری شود.",
        "filerenameerror": "نشد پروندهٔ «$1» به «$2» تغییر نام یابد.",
        "filedeleteerror": "نشد پروندهٔ «$1» حذف شود.",
        "directorycreateerror": "نشد مسیر $1 را ایجاد کرد.",
-       "directoryreadonlyerror": "داÛ\8cرکتÙ\88رÛ\8c \"$1\" فقط خواندنی است.",
-       "directorynotreadableerror": "داÛ\8cرکتÙ\88رÛ\8c \"$1\" قابل خواندن نیست.",
+       "directoryreadonlyerror": "شاخÙ\87Ù\94 Â«$1» فقط خواندنی است.",
+       "directorynotreadableerror": "شاخÙ\87Ù\94 Â«$1» قابل خواندن نیست.",
        "filenotfound": "پروندهٔ «$1» یافت نشد.",
        "unexpected": "مقدار غیرمنتظره: «$1»=«$2».",
        "formerror": "خطا: نمی‌توان فرم را فرستاد.",
        "cannotdelete": "امکان حذف صفحه یا تصویر «$1» وجود ندارد.\nممکن است قبلاً فرد دیگری آن را حذف کرده باشد.",
        "cannotdelete-title": "نمی‌توان صفحهٔ «$1» را حذف کرد",
        "delete-hook-aborted": "حذف توسط قلاب لغو شد.\nتوضیحی در این مورد داده نشد.",
-       "no-null-revision": "امکان ایجاد نسخهٔ پوچ برای صفحهٔ «$1» وجود نداشت",
+       "no-null-revision": "اÙ\85کاÙ\86 Ø§Û\8cجاد Ù\86سخÙ\87Ù\94 Ù¾Ù\88Ú\86 ØªØ§Ø²Ù\87 Ø¨Ø±Ø§Û\8c ØµÙ\81Ø­Ù\87Ù\94 Â«$1» Ù\88جÙ\88د Ù\86داشت",
        "badtitle": "عنوان بد",
        "badtitletext": "عنوان درخواستی نامعتبر، خالی، یا عنوانی میان‌زبانی یا میان‌ویکی‌ای با پیوند نادرست بود.\nممکن است حاوی یک یا چند نویسه باشد که نمی‌توانند در عنوان‌ها استفاده شوند.",
-       "title-invalid-empty": "عنوان صفحهٔ مورد درخواست خالی است یا فقط عنوان فضای نام ذکر شده‌است.",
-       "title-invalid-utf8": "عنوان صفحهٔ مورد نظر دارای نویسهٔ نادرست یونیکد است.",
+       "title-invalid-empty": "عنوان صفحهٔ درخواست‌شده خالی است یا فقط عنوان فضای نام ذکر شده‌است.",
+       "title-invalid-utf8": "عنوان صفحهٔ درخواست‌شده دارای نویسهٔ نادرست یونیکد است.",
        "title-invalid-interwiki": "صفحهٔ درخواست شده دارای پیوند میان‌ویکی است که نمی‌تواند در عنوان‌ها استفاده شود.",
-       "title-invalid-talk-namespace": "صÙ\81Ø­Ù\87Ù\94 Ù\85Ù\88رد Ø¯Ø±Ø®Ù\88است Ø¨Ù\87 Ø¹Ù\86Ù\88اÙ\86 ØµÙ\81Ø­Ù\87Ù\94 Ø¨Ø­Ø«Û\8c Ú©Ù\87 Ù\88جÙ\88د Ù\86داردØ\8c Ø§Ø±Ø¬Ø§Ø¹ Ù\85Û\8câ\80\8cÚ©Ù\86د",
-       "title-invalid-characters": "عنوان صفحهٔ مورد درخواست نویسهٔ نادرست «$1» دارد.",
-       "title-invalid-relative": "عنوان دارای نشانی است. عنوان نشانی‌ها (./, ../) بی‌اعتبار هستند چون معمولاً توسط مرورگر کاربران غیرقابل دسترس هستند.",
-       "title-invalid-magic-tilde": "عنوان صفحهٔ مورد درخواست دارای عبارت جادوئی بی‌اعتبار است (<nowiki>~~~</nowiki>).",
-       "title-invalid-too-long": "عنوان صفحهٔ مورد درخواست خیلی طولانی است. نباید از $1 {{PLURAL:$1|بایت|بایت}} نویسهٔ یونیکد باشد.",
-       "title-invalid-leading-colon": "صÙ\81Ø­Ù\87Ù\94 Ø¯Ø±Ø®Ù\88استÛ\8c Ø¯Ø§Ø±Ø§Û\8c : Ø¨Û\8câ\80\8cاعتبار Ø¯Ø± Ø§Ø¨ØªØ¯Ø§Û\8c Ø¹Ù\86Ù\88اÙ\86ش است.",
+       "title-invalid-talk-namespace": "عÙ\86Ù\88اÙ\86 ØµÙ\81Ø­Ù\87Ù\94 Ø¯Ø±Ø®Ù\88استâ\80\8cشدÙ\87 Ø¨Ù\87 ØµÙ\81Ø­Ù\87Ù\94 Ø¨Ø­Ø«Û\8c Ú©Ù\87 Ù\88جÙ\88د Ù\86داردØ\8c Ø§Ø±Ø¬Ø§Ø¹ Ù\85Û\8câ\80\8cÚ©Ù\86د.",
+       "title-invalid-characters": "عنوان صفحهٔ درخواست‌شده نویسهٔ نامجاز دارد: «$1».",
+       "title-invalid-relative": "عنوان دارای نشانی است. عنوان‌های دارای نشانی نسبی (نظیر ‎./‎ یا ‎../‎) نامجاز هستند چون معمولاً توسط مرورگر کاربران غیرقابل دسترس هستند.",
+       "title-invalid-magic-tilde": "عنوان صفحهٔ درخواست‌شده دارای مدک‌های جادوئی نامجاز است (<nowiki>~~~</nowiki>).",
+       "title-invalid-too-long": "عنوان صفحهٔ درخواست‌شده خیلی طولانی است. نباید از $1 {{PLURAL:$1|بایت|بایت}} در رمزگذاری یوتی‌اف-۸ بیشتر باشد.",
+       "title-invalid-leading-colon": "عÙ\86Ù\88اÙ\86 ØµÙ\81Ø­Ù\87Ù\94 Ø¯Ø±Ø®Ù\88استÛ\8c Ø¯Ø§Ø±Ø§Û\8c Ø¯Ù\88Ù\86Ù\82Ø·Ù\87Ù\94 Ù\86اÙ\85جاز Ø¯Ø± Ø§Ø¨ØªØ¯Ø§Û\8cش است.",
        "perfcached": "داده‌های زیر از حافظهٔ نهانی فراخوانی شده‌اند و ممکن است کاملاً به‌روز نباشند. حداکثر {{PLURAL:$1|یک نتیجه| $1 نتیجه}} در حافظهٔ نهانی قابل دسترس است.",
        "perfcachedts": "داده‌های زیر از حافظهٔ نهانی فراخوانی شده‌اند و آخرین بار در $1 به‌روزرسانی شدند. حداکثر {{PLURAL:$4|یک نتیجه|$4 نتیجه}} در حافظهٔ نهانی قابل دسترس است.",
        "querypage-no-updates": "امکان به‌روزرسانی این صفحه فعلاً غیرفعال شده‌است.\nاطلاعات این صفحه ممکن است به‌روز نباشد.",
        "botpasswords-label-grants": "اعطاهای اجرا شدنی:",
        "botpasswords-help-grants": "هر اجازه به ربات اجازه دسترسی به اختیاراتی را که حساب شما دارد می‌دهد. فعال کردن یک اجازه در اینجا هیچ دسترسی جدیدی که حساب شما همینک دارا نیست را به آن نمی‌بخشد. [[Special:ListGrants|table of grants]] را برای اطلاعات بیشتر مشاهده کنید.",
        "botpasswords-label-grants-column": "اعطا شد",
-       "botpasswords-bad-appid": "نام ربات \"$1\" معتبر نیست.",
+       "botpasswords-bad-appid": "نام ربات «$1» معتبر نیست.",
        "botpasswords-insert-failed": "شکست در افزودن نام ربات «$1». در حال حاضر اضافه شده است؟",
        "botpasswords-update-failed": "شکست در به‌روزرسانی نام رباتی «$1». حذف شده است؟",
        "botpasswords-created-title": "گذرواژه ربات ایجاد شد",
        "botpasswords-newpassword": "<strong>$2</strong> گذرواژهٔ جدید برای ورود با حساب <strong>$1</strong> است. <em>لطفاً آن را برای ارجاع در آینده ذخیره کنید.</em> <br> (برای ربات‌های قدیمی که نیاز به نام کاربری مطابق با حساب کاربری‌شان دارد، شما می‌توانید از <strong>$3</strong> به عنوان نام کاربری و از <strong>$4</strong> به عنوان گذرواژه استفاده کنید.)",
        "botpasswords-no-provider": "BotPasswordsSessionProvider موجود نیست.",
        "botpasswords-restriction-failed": "محدودیت‌های گذرواژهٔ ربات از این ورود جلوگیری می‌کند.",
-       "botpasswords-invalid-name": "نام کاربری مشخص شده دارای جداکنندهٔ گذرواژهٔ رباتی نیست (\"$1\").",
+       "botpasswords-invalid-name": "نام کاربری مشخص شده دارای جداکنندهٔ گذرواژهٔ رباتی نیست («$1»).",
        "botpasswords-not-exist": "کاربر «$1» گذرواژهٔ رباتی نام‌دهی شدهٔ «$2» ندارد.",
        "resetpass_forbidden": "نمی‌توان گذرواژه‌ها را تغییر داد",
        "resetpass_forbidden-reason": "نمی‌توانید گذرواژه‌ها را تغییر داد: $1",
        "resetpass-temp-password": "گذرواژهٔ موقت:",
        "resetpass-abort-generic": "تغییر گذرواژه به دست یکی از افزونه‌ها لغو شده است.",
        "resetpass-expired": "رمز عبور شما منقضی شده‌است. لطفاً برای ورود رمز عبور جدیدی را تنظیم کنید.",
-       "resetpass-expired-soft": "رمز عبور شما منقضی شده‌است، و نیاز به تنظیم مجدد دارد. لطفاً اکنون رمز عبور جدیدی را انتخاب کنید، یا برای تنظیم مجدد آن بعدآً، دکمه \"{{int:authprovider-resetpass-skip-label}}\" را کلیک کنید.",
+       "resetpass-expired-soft": "رمز عبور شما منقضی شده‌است و نیاز به تنظیم مجدد دارد. لطفاً اکنون رمز عبور جدیدی را انتخاب کنید، یا برای تنظیم مجدد آن در آینده، دکمهٔ «{{int:authprovider-resetpass-skip-label}}» را کلیک کنید.",
        "resetpass-validity-soft": "گذرواهٔ شما صحیح نیست: $1\n\nلطفاً یک گذرواژهٔ تازه الآن انتخاب کنید یا بر «{{int:authprovider-resetpass-skip-label}}» کلیک کنید که دوباره آن را بعداً انتخاب کنید.",
        "passwordreset": "بازنشانی گذرواژه",
        "passwordreset-text-one": "برای بازنشانی گذرواژه‌تان این فرم را کامل کنید.",
        "anoneditwarning": "<strong>هشدار:</strong> شما وارد نشده‌اید. نشانی آی‌پی شما برای عموم قابل مشاهده خواهد بود اگر هر تغییری ایجاد کنید. اگر <strong>[$1 وارد شوید]</strong> یا <strong>[$2 یک حساب کاربری بسازید]</strong>، ویرایش‌هایتان به نام کاربری‌تان نسبت داده خواهد شد، همراه با مزایای دیگر.",
        "anonpreviewwarning": "''شما به سامانه وارد نشده‌اید. ذخیره کردن باعث می‌شود که نشانی آی‌پی شما در تاریخچهٔ این صفحه ثبت گردد.''",
        "missingsummary": "'''یادآوری:''' شما خلاصهٔ ویرایش ننوشته‌اید.\nاگر دوباره دکمهٔ «{{int:savearticle}}» را فشار دهید ویرایش شما بدون آن ذخیره خواهد شد.",
-       "selfredirect": "<strong>هشدار:</strong> شما در حال تغییرمسیر صفحه به خودش هستید.\nامکان دارد هدف اشتباهی را برای تغییرمسیر انتخاب کردید، یا ممکن است صفحهٔ اشتباهی را ویرایش می‌کنید.\n\nاگر بر روی \"{{int:savearticle}}\" دوباره کلیک کنید، تغییرمسیر ساخته خواهد شد.",
+       "selfredirect": "<strong>هشدار:</strong> شما در حال تغییرمسیر صفحه به خودش هستید.\nامکان دارد هدف اشتباهی را برای تغییرمسیر انتخاب کردید، یا ممکن است صفحهٔ اشتباهی را ویرایش می‌کنید.\n\nاگر بر روی «{{int:savearticle}}» دوباره کلیک کنید، تغییرمسیر ساخته خواهد شد.",
        "missingcommenttext": "لطفاً توضیحی در زیر بیفزایید.",
        "missingcommentheader": "<strong>یادآوری:</strong> شما موضوع/عنوان این یادداشت را مشخص نکرده‌اید.\nاگر دوباره دکمهٔ «{{int:savearticle}}» را فشار دهید ویرایش شما بدون آن ذخیره خواهد شد.",
        "summary-preview": "پیش‌نمایش خلاصه:",
        "readonlywarning": "<strong>هشدار: پایگاه داده برای نگهداری قفل شده‌است، به همین علت هم‌اکنون نمی‌توانید ویرایش‌هایتان را ذخیره کنید.</strong>\nاگر می‌خواهید متن را در یک پروندهٔ متنی کپی کنید و برای آینده ذخیره‌اش کنید.\n\nمدیری که آن را قفل کرده این توضیح را ارائه کرده‌است: $1",
        "protectedpagewarning": "'''هشدار: این صفحه قفل شده‌است تا فقط کاربران با دسترسی مدیریت بتوانند ویرایشش کنند.'''\nآخرین موارد سیاهه در زیر آمده‌است:",
        "semiprotectedpagewarning": "'''توجه:''' این صفحه قفل شده‌است تا تنها کاربران ثبت‌نام‌کرده قادر به ویرایش آن باشند.\nآخرین موارد سیاهه در زیر آمده‌است:",
-       "cascadeprotectedwarning": "<strong>هشدار:</strong> این صفحه به علت قرارگرفتن در {{PLURAL:$1|صفحهٔ|صفحه‌های}} آبشاری-محافظت‌شدهٔ زیر قفل شده‌است تا فقط مدیران بتوانند ویرایشش کنند.",
+       "cascadeprotectedwarning": "<strong>هشدار:</strong> این صفحه به علت قرارگرفتن در {{PLURAL:$1|صفحهٔ|صفحه‌های}} آبشاری-محافظت‌شدهٔ زیر قفل شده‌است تا فقط [[Special:ListGroupRights|گروه خاصی از کاربران]] بتوانند ویرایشش کنند.",
        "titleprotectedwarning": "'''هشدار: این صفحه به شکلی قفل شده‌است که برای ایجاد آن [[Special:ListGroupRights|اختیارات خاصی]] لازم است.'''\nآخرین موارد سیاهه در زیر آمده است:",
        "templatesused": "{{PLURAL:$1|الگوی|الگوهای}} به‌کاررفته در این صفحه:",
        "templatesusedpreview": "{{PLURAL:$1|الگوی|الگوهای}} استفاده شده در این پیش‌نمایش:",
        "content-model-css": "سی‌اس‌اس",
        "content-json-empty-object": "ابجکت خالی",
        "content-json-empty-array": "آرایهٔ خالی",
-       "deprecated-self-close-category": "صفحه از برچسب اچ‌تی‌ام‌ال self-closed غیرمجاز استفاده می‌کند",
+       "deprecated-self-close-category": "صفحه از برچسب اچ‌تی‌ام‌ال بسته‌شدهٔ نامجاز استفاده می‌کند",
        "deprecated-self-close-category-desc": "صفحه دارای برچسب اچ‌تی‌ام‌ال self-closed است مانند <code>&lt;b/></code> یا <code>&lt;span/></code>. عملکرد این برچسب‌ها در اچ‌تی‌ام‌ال۵ تغییر می‌کند در نتیجه استفاده از آنها در ویکی‌متن منسوخ و بی‌اثر است.",
        "duplicate-args-warning": "<strong>هشدار:</strong> [[:$1]] [[:$2]] را با بیش از یک مقدار برای پارامتر «$3» صدا می‌زند. فقط آخرین مقدار داده شده استفاده خواهد شد.",
        "duplicate-args-category": "صفحه‌های دارای آرگومان تکراری در فراخوانی الگو",
        "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-cannot-shorten-expiry": "امکان جلو آوردن تاریخ انقضای گروه  «$1» را ندارید. تنها کاربرانی که دسترسی اضافه و حذف این گروه را دارند می‌توانند تاریخ انقضا را جلو بیاورند.",
        "userrights-conflict": "تعارض دسترسی‌های کاربری! لطفاً بررسی کنید و تغییرات را تأیید کنید.",
        "group": "گروه:",
        "group-user": "کاربران",
        "right-autoconfirmed": "از محدودیت‌های سرعت آی‌پی‌-محور تاثیر نمی‌گیرد",
        "right-bot": "تلقی‌شده به عنوان یک فرآیند خودکار",
        "right-nominornewtalk": "ویرایش جزئی صفحه‌های بحث به شکلی که باعث اعلان پیغام تازه نشود",
-       "right-apihighlimits": "سÙ\82Ù\81 Ø¨Ø§Ù\84اتر Ø§Ø³ØªÙ\81ادÙ\87 Ø§Ø² API",
-       "right-writeapi": "استفاده از API مربوط به نوشتن",
+       "right-apihighlimits": "اÙ\81زاÛ\8cØ´ Ù\85حدÙ\88دÛ\8cتâ\80\8cÙ\87ا Ø¨Ø±Ø§Û\8c Ù¾Ø±Ø³Ù\85اÙ\86â\80\8cÙ\87اÛ\8c Ø±Ø§Ø¨Ø· Ø¨Ø±Ù\86اÙ\85Ù\87â\80\8cÙ\86Ù\88Û\8cسÛ\8c",
+       "right-writeapi": "استفاده از رابط برنامه‌نویسی نوشتن",
        "right-delete": "حذف صفحات",
        "right-bigdelete": "حذف صفحه‌های دارای تاریخچهٔ بزرگ",
        "right-deletelogentry": "حذف و احیای مدخل‌های خاصی از سیاهه",
        "right-unblockself": "بازکردن دسترسی خود",
        "right-protect": "تغییر میزان محافظت صفحات و ویرایش صفحات محافظت‌شده آبشاری",
        "right-editprotected": "ویرایش صفحه‌های محافظت‌شده به عنوان «{{int:protect-level-sysop}}»",
-       "right-editsemiprotected": "ویرایش صفحه حفاظت‌شده به عنوان \"{{int:protect-level-autoconfirmed}}\"",
+       "right-editsemiprotected": "ویرایش صفحه محافظت‌شده به عنوان «{{int:protect-level-autoconfirmed}}»",
        "right-editcontentmodel": "ویرایش مدل محتوای یک صفحه",
        "right-editinterface": "ویرایش واسط کاربری",
-       "right-editusercssjs": "ویرایش صفحه‌های CSS و JS دیگر کاربرها",
        "right-editusercss": "ویرایش صفحه‌های CSS دیگر کاربرها",
        "right-edituserjs": "ویرایش صفحه‌های JS دیگر کاربرها",
        "right-editmyusercss": "پرونده‌های سی‌اس‌اس کاربری خود را ویرایش کنید",
        "right-applychangetags": "تائید [[Special:Tags|برچسب]] بر روی تغییرات یک نفر",
        "right-changetags": "افزودن یا حذف [[Special:Tags|برچسب]] قراردادی بر روی نسخه یا سیاهه ورودی‌ها",
        "right-deletechangetags": "حذف [[Special:Tags|برچسب‌ها]] از پایگاه داده",
-       "grant-generic": "\" $1 \" حقوق بسته",
+       "grant-generic": "بستهٔ اختیارات «$1»",
        "grant-group-page-interaction": "تعامل با صفحات",
        "grant-group-file-interaction": "تعامل با رسانه",
        "grant-group-watchlist-interaction": "تعامل با فهرست پیگیری‌های شما",
        "grant-editmyoptions": "اولویت‌های کاربری را ویرایش کنید",
        "grant-editmywatchlist": "ویرایش فهرست پی‌گیری‌هایتان",
        "grant-editpage": "ویرایش صفحات موجود",
-       "grant-editprotected": "ویرایش صفحه حفاظت شده",
+       "grant-editprotected": "ویرایش صفحه محافظت شده",
        "grant-highvolume": "ویرایش با حجم بالا",
        "grant-oversight": "پنهان کردن ویرایش‌ها",
        "grant-patrol": "تغییرات گشت صفحات",
        "grant-privateinfo": "دسترسی به اطلاعات محرمانه",
-       "grant-protect": "حفاظت و عدم حفاظت صفحات",
-       "grant-rollback": "واگردانی  تغییرات صفحات",
+       "grant-protect": "محافظت و عدم محافظت صفحات",
+       "grant-rollback": "واگردانی تغییرات صفحه‌ها",
        "grant-sendemail": "ارسال ایمیل به دیگر کاربران",
        "grant-uploadeditmovefile": "بارگذاری، جایگزینی و انتقال پرونده‌ها",
-       "grant-uploadfile": "بازگذاری پرونده‌های جدید",
+       "grant-uploadfile": "بارگذاری پرونده‌های جدید",
        "grant-basic": "دسترسی‌های اولیه",
        "grant-viewdeleted": "مشاهدهٔ پرونده و صفحات حذف شده",
        "grant-viewmywatchlist": "مشاهدۀ فهرست پیگیری‌هایتان",
        "action-reupload": "نوشتن روی این پرونده موجود",
        "action-reupload-shared": "باطل کردن این پرونده روی یک مخزن مشترک",
        "action-upload_by_url": "بارگذاری این پرونده از یک نشانی اینترنتی",
-       "action-writeapi": "استفاده از API نوشتن",
+       "action-writeapi": "استفاده از رابط برنامه‌نویسی نوشتن",
        "action-delete": "حذف این صفحه",
        "action-deleterevision": "حذف نسخه‌ها",
        "action-deletelogentry": "حذف سیاههٔ ورودی‌ها",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (همچنین به [[Special:NewPages|فهرست صفحات تازه]] نگاه کنید)",
        "recentchanges-legend-plusminus": "(<em>±۱۲۳</em>)",
        "recentchanges-submit": "نمایش",
-       "rcfilters-activefilters": "Ù\81عاÙ\84â\80\8cکردÙ\86 Ù¾Ø§Ù\84اÛ\8cÙ\87â\80\8cÙ\87ا",
+       "rcfilters-activefilters": "پاÙ\84اÛ\8cÙ\87â\80\8cÙ\87اÛ\8c Ù\81عاÙ\84",
        "rcfilters-restore-default-filters": "بازگردانی پالایه‌های پیش‌فرض",
-       "rcfilters-clear-all-filters": "پاک‌کردن پالایش‌ها",
+       "rcfilters-clear-all-filters": "پاک‌کردن تمام پالایه‌ها",
        "rcfilters-search-placeholder": "پالایش تغییرات اخیر (جستجو یا شروع به تایپ)",
        "rcfilters-invalid-filter": "پالایهٔ نامعتبر",
        "rcfilters-empty-filter": "پالایه‌ای فعال نیست. همهٔ مشارکت‌های دیده می‌شوند.",
        "rcfilters-highlightmenu-title": "انتخاب رنگ",
        "rcfilters-highlightmenu-help": "یک رنگ انتخاب کنید تا این خصوصیت پر رنگ شود",
        "rcfilters-filterlist-noresults": "پالایه‌ای یافت نشد",
-       "rcfilters-noresults-conflict": "نتیجه‌ای یافت نشد چون محدوده جستجو دارای تداخل است",
-       "rcfilters-state-message-subset": "این پالایه تاثیری ندارد چون نتایج آن شامل موارد مرزی {{PLURAL:$2|پالایه|پالایه}} است (از پررنگ‌کننده برای تمایز استفاده کنید): $1",
-       "rcfilters-filtergroup-registration": "ثبت‌نام کاربر",
+       "rcfilters-noresults-conflict": "نتیجه‌ای یافت نشد چون محدودهٔ جستجو دارای تعارض است",
+       "rcfilters-state-message-subset": "این پالایه تاثیری ندارد چون نتایج آن توسط {{PLURAL:$2|پالایهٔ|پالایه‌های}} گسترده‌تری که در ادامه {{PLURAL:$2|آمده‌است|آمده‌اند}} شامل می‌شود (از پررنگ‌کننده برای تمایز استفاده کنید): $1",
+       "rcfilters-state-message-fullcoverage": "انتخاب تمام پالایه‌ها در یک گروه مثل این است که هیچ‌کدام را انتخاب نکنید، بنابراین پالایه‌ها اثری نداشتند. گروه شامل این موارد است: $1",
+       "rcfilters-filtergroup-registration": "ثبت نام کاربر",
        "rcfilters-filter-registered-label": "ثبت شده",
-       "rcfilters-filter-registered-description": "ورود ویرایشگران.",
+       "rcfilters-filter-registered-description": "ویرایشگران وارد شده به سامانه.",
        "rcfilters-filter-unregistered-label": "ثبت‌نام نکرده",
        "rcfilters-filter-unregistered-description": "ویرایشگرانی که به سامانه وارد نشده‌اند.",
-       "rcfilters-filter-unregistered-conflicts-user-experience-level": "پالایهٔ ثبت‌نشده غیرفعال می‌شود و تاثیرات آن توسط  {{PLURAL:$2|پالایه|پالایه‌های}} تجربه شده که فقط توسط کاربران ثبت‌نام شده {{PLURAL:$2|می‌یابد|می‌یابند}}:$1",
-       "rcfilters-filtergroup-authorship": "ویرایش نویسندگی",
-       "rcfilters-filter-editsbyself-label": "Ù\88Û\8cراÛ\8cØ´â\80\8cÙ\87اÛ\8c Ø´Ù\85ا",
-       "rcfilters-filter-editsbyself-description": "Ù\88Û\8cراÛ\8cØ´â\80\8cÙ\87اÛ\8c Ø§Ù\86جاÙ\85 Ø´Ø¯Ù\87 ØªÙ\88سط Ø´Ù\85ا.",
+       "rcfilters-filter-unregistered-conflicts-user-experience-level": "این پالایه با {{PLURAL:$2|پالایه|پالایه‌های}} تجربهٔ زیر که فقط کاربران ثبت‌نام شده را {{PLURAL:$2|می‌یابد|می‌یابند}} تعارض دارد: $1",
+       "rcfilters-filtergroup-authorship": "ویرایشگر",
+       "rcfilters-filter-editsbyself-label": "Ù\88Û\8cراÛ\8cØ´â\80\8cÙ\87اÛ\8c Ø®Ù\88دتاÙ\86",
+       "rcfilters-filter-editsbyself-description": "ویرایش‌های شما.",
        "rcfilters-filter-editsbyother-label": "ویرایش‌های دیگران",
-       "rcfilters-filter-editsbyother-description": "ویرایش‌های ایجاد شده توسط دیگران (نه شما).",
+       "rcfilters-filter-editsbyother-description": "ویرایش‌های ایجاد شده توسط دیگر کاربران (نه شما).",
        "rcfilters-filtergroup-userExpLevel": "درجهٔ تجربه (فقط برای کاربران ثبت‌نام کرده)",
-       "rcfilters-filtergroup-user-experience-level-conflicts-unregistered": "این پالایه غیرفعال شد چون فقط کاربران ثبت‌نام کرده را پیدا می کرد در نتیجه پالایه کاربران ثبت‌نام نکرده تاثیرات آن را لغو می‌کند.",
-       "rcfilters-filtergroup-user-experience-level-conflicts-unregistered-global": "پالایه کاربران ثبت‌نام نکرده با پالایه‌های دیگر در تعارض است. پالایه‌‌های دیگر فقط کاربران ثبت‌نام شده را می‌یابند. این پالایه‌های در تعارض در بالا غیرفعال شده‌اند.",
+       "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-learner-label": "آموزندگان",
-       "rcfilters-filter-user-experience-level-learner-description": "فعالیت و تعداد روز بیشتر از تازه‌وارد ولی کمتر از کاربر باتجریه.",
+       "rcfilters-filter-user-experience-level-learner-description": "حجم و مدت فعالیت بیشتر از تازه‌واردان ولی کمتر از کاربران باتجریه.",
        "rcfilters-filter-user-experience-level-experienced-label": "کاربران باتجربه",
        "rcfilters-filter-user-experience-level-experienced-description": "بیشتر از ۳۰ روز فعالیت و ۵۰۰ ویرایش.",
        "rcfilters-filtergroup-automated": "ویرایش‌های خودکار",
        "rcfilters-filter-humans-description": "ویرایش توسط انسان.",
        "rcfilters-filtergroup-reviewstatus": "وضعیت بازبینی",
        "rcfilters-filter-patrolled-label": "گشت‌خورده",
-       "rcfilters-filter-patrolled-description": "برچسب ویرایش به عنوان گشت‌خورده.",
+       "rcfilters-filter-patrolled-description": "ویرایش‌های گشت‌خورده.",
        "rcfilters-filter-unpatrolled-label": "گشت‌نخورده",
-       "rcfilters-filter-unpatrolled-description": "ویرایش‌ها به عنوان گشت‌نخورده.",
+       "rcfilters-filter-unpatrolled-description": "ویرایش‌های گشت‌نخورده.",
        "rcfilters-filtergroup-significance": "اهمیت",
        "rcfilters-filter-minor-label": "ویرایش‌های جزئی",
        "rcfilters-filter-minor-description": "ویرایش‌هایی که به عنوان جزئی برچسب خورده‌اند.",
        "rcfilters-filter-newpages-label": "ایجاد صفحه",
        "rcfilters-filter-newpages-description": "ویرایش‌هایی که منجر به ایجاد صفحه شده‌اند.",
        "rcfilters-filter-categorization-label": "تغییرات رده",
-       "rcfilters-filter-categorization-description": "سیاههٔ صفحاتی که به رده افزوده یا حذف شده‌اند.",
+       "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>$3, $4</strong> (تا <strong>$1</strong> {{PLURAL:$5|نشان داده شده‌است|نشان داده شده‌اند}}).",
+       "rclistfromreset": "از نو کردن انتخاب تاریخ",
        "rclistfrom": "نمایش تغییرات تازه با شروع از $3 $2",
        "rcshowhideminor": "$1 ویرایش‌های جزئی",
        "rcshowhideminor-show": "نمایش",
        "rcshowhidecategorization": "$1 رده‌بندی صفحه‌ها",
        "rcshowhidecategorization-show": "نمایش",
        "rcshowhidecategorization-hide": "نهفتن",
-       "rclinks": "نمایش آخرین $1 تغییر در $2 روز اخیر<br />$3",
+       "rclinks": "نمایش آخرین $1 تغییر در $2 روز اخیر",
        "diff": "تفاوت",
        "hist": "تاریخچه",
        "hide": "نهفتن",
        "php-uploaddisabledtext": "بارگذاری پرونده‌های پی‌اچ‌پی غیرفعال است.\nلطفاً تنظیمات file_uploads را بررسی کنید.",
        "uploadscripted": "این صفحه حاوی کد اچ‌تی‌ام‌ال یا اسکریپتی است که ممکن است به‌نادرست توسط مرورگر وب تفسیر شود.",
        "upload-scripted-pi-callback": "نمی‌توان یک پرونده شامل دستورالعمل پردازش استایل‌شیت اکس‌ام‌ال بارگذاری کرد.",
+       "upload-scripted-dtd": "امکان بارگذاری پرونده‌های اس‌وی‌جی که حاوی تعارف دی‌تی‌دی غیر استاندارد باشند وجود ندارد.",
        "uploaded-script-svg": "عنصر قابل برنامه‌ریزی «$1» در پرونده بارگذاری اس‌وی‌جی یافت شد.",
        "uploaded-hostile-svg": "سی‌اس‌اس نا امن در عنصر سبک پروندهٔ بارگذاری شدهٔ اس‌وی‌جی یافت شد.",
        "uploaded-event-handler-on-svg": "قرار دادن ویژگی‌های مدیریت رویداد <code>$1=\"$2\"</code> در پرونده‌های اس‌وی‌جی مجاز نیست.",
        "filejournal-fail-dbconnect": "امکان وصل شدن به پایگاه داده دفترخانه برای پشتیبان ذخیره‌سازی «$1» وجود نداشت.",
        "filejournal-fail-dbquery": "امکان به روز کردن پایگاه داده دفترخانه برای پشتیبان ذخیره‌سازی «$1» وجود نداشت.",
        "lockmanager-notlocked": "نمی‌توان قفل «$1» را گشود؛ چون قفل نشده‌است.",
-       "lockmanager-fail-closelock": "امکان بستن پرونده قفل شده \"$1\" وجود ندارد.",
-       "lockmanager-fail-deletelock": "امکان حذف پرونده قفل شده \"$1\" وجود ندارد.",
+       "lockmanager-fail-closelock": "امکان بستن پروندهٔ قفل‌شدهٔ «$1» وجود ندارد.",
+       "lockmanager-fail-deletelock": "امکان حذف پروندهٔ قفل‌شدهٔ «$1» وجود ندارد.",
        "lockmanager-fail-acquirelock": "نمی‌توان قفل «$1» را کسب کرد.",
-       "lockmanager-fail-openlock": "امکان باز کردن پرونده قفل شده \"$1\" وجود ندارد.",
+       "lockmanager-fail-openlock": "امکان باز کردن پروندهٔ قفل‌شدهٔ «$1» وجود ندارد.",
        "lockmanager-fail-releaselock": "نمی‌توان قفل «$1» را گشود.",
        "lockmanager-fail-db-bucket": "امکان ارتباط با تعداد کافی پایگاه داده قفل‌ها در محفظه $1 وجود نداشت.",
        "lockmanager-fail-db-release": "بازکردن قفل‌های پایگاه دادهٔ $1 ممکن نیست.",
        "protectedpages-timestamp": "برچسب زمان",
        "protectedpages-page": "صفحه",
        "protectedpages-expiry": "انقضا",
-       "protectedpages-performer": "کاربر حفاظت‌کننده",
-       "protectedpages-params": "پارامترهای حفاظت",
+       "protectedpages-performer": "کاربر محافظت‌کننده",
+       "protectedpages-params": "پارامترهای محافظت",
        "protectedpages-reason": "دلیل",
        "protectedpages-submit": "نمایش صفحه‌ها",
        "protectedpages-unknown-timestamp": "ناشناس",
        "pager-older-n": "{{PLURAL:$1|یک مورد قدیمی‌تر|$1 مورد قدیمی‌تر}}",
        "suppress": "سرکوب",
        "querypage-disabled": "این صفحه ویژه به دلایل عملکردی غیرفعال شده‌است.",
-       "apihelp": "راهنمای API",
-       "apihelp-no-such-module": "پودمان \" $1 \" یافت نشد.",
+       "apihelp": "راهنمای رابط برنامه‌نویسی",
+       "apihelp-no-such-module": "پودمان «$1» یافت نشد.",
        "apisandbox": "گودال ماسه‌بازی رابط برنامه‌نویسی",
-       "apisandbox-jsonly": "برای استفاده از صفحهٔ تمرین API به جاوااسکریپت نیاز دارید.",
+       "apisandbox-jsonly": "برای استفاده از صفحهٔ تمرین رابط برنامه‌نویسی به جاوااسکریپت نیاز دارید.",
        "apisandbox-api-disabled": "رابط برنامه‌نویسی در این تارنما غیرفعال شده‌است.",
-       "apisandbox-intro": "از این صفحه برای آزمایش <strong>خدمات وب API مدیاویکی</strong> استفاده کنید.\nبرای جزئیات بیشتر دربارهٔ نحوهٔ استفاده از API به [[mw:API:Main page|مستندات API]] رجوع کنید. مثال: [https://www.mediawiki.org/wiki/API#A_simple_example دریافت محتوای صفحهٔ اصلی]. برای دیدن مثال‌های بیشتر عملکردی را انتخاب کنید.",
+       "apisandbox-intro": "از این صفحه برای آزمایش <strong>خدمات وب رابط برنامه‌نویسی مدیاویکی</strong> استفاده کنید.\nبرای جزئیات بیشتر دربارهٔ نحوهٔ استفاده از رابط برنامه‌نویسی به [[mw:API:Main page|مستندات رابط برنامه‌نویسی]] رجوع کنید. مثال: [https://www.mediawiki.org/wiki/API#A_simple_example دریافت محتوای صفحهٔ اصلی]. برای دیدن مثال‌های بیشتر عملکردی را انتخاب کنید.",
        "apisandbox-fullscreen": "گسترش پنل",
        "apisandbox-fullscreen-tooltip": "بازکردن صفحهٔ تمرین برای پر کردن پنجرهٔ مرورگر.",
        "apisandbox-unfullscreen": "نمایش صفحه",
        "apisandbox-submit": "ایجاد درخواست",
        "apisandbox-reset": "پاک‌کردن",
        "apisandbox-retry": "تلاش مجدد",
-       "apisandbox-loading": "بارگÛ\8cرÛ\8c Ø§Ø·Ù\84اعات Ø¨Ø±Ø§Û\8c Ù\85اÚ\98Ù\88Ù\84 \"$1\" ...",
-       "apisandbox-load-error": "در Ø²Ù\85اÙ\86 Ø¨Ø§Ø±Ú¯Û\8cرÛ\8c Ø§Ø·Ù\84اعات Ø¨Ø±Ø§Û\8c Ù\85اÚ\98Ù\88Ù\84 \"$1\" Ø®Ø·Ø§Û\8cÛ\8c Ø±Ø® Ø¯Ø§Ø¯Ù\87â\80\8cاست: $2",
-       "apisandbox-no-parameters": "اÛ\8cÙ\86 Ù\85اÚ\98Ù\88Ù\84 API پارامتری ندارد.",
+       "apisandbox-loading": "بارگÛ\8cرÛ\8c Ø§Ø·Ù\84اعات Ø¨Ø±Ø§Û\8c Ù¾Ù\88دÙ\85اÙ\86 Ø±Ø§Ø¨Ø· Ø¨Ø±Ù\86اÙ\85Ù\87â\80\8cÙ\86Ù\88Û\8cسÛ\8c Â«$1» ...",
+       "apisandbox-load-error": "در Ø²Ù\85اÙ\86 Ø¨Ø§Ø±Ú¯Û\8cرÛ\8c Ø§Ø·Ù\84اعات Ø¨Ø±Ø§Û\8c Ù¾Ù\88دÙ\85اÙ\86 Ø±Ø§Ø¨Ø· Ø¨Ø±Ù\86اÙ\85Ù\87â\80\8cÙ\86Ù\88Û\8cسÛ\8c Â«$1» Ø®Ø·Ø§Û\8cÛ\8c Ø±Ø® Ø¯Ø§Ø¯: $2",
+       "apisandbox-no-parameters": "اÛ\8cÙ\86 Ù¾Ù\88دÙ\85اÙ\86 Ø±Ø§Ø¨Ø· Ø¨Ø±Ù\86اÙ\85Ù\87â\80\8cÙ\86Ù\88Û\8cسÛ\8c پارامتری ندارد.",
        "apisandbox-helpurls": "پیوندهای راهنمایی",
        "apisandbox-examples": "مثال‌ها",
        "apisandbox-dynamic-parameters": "پارامترهای بیشتر",
        "apisandbox-results": "نتیجه‌ها",
        "apisandbox-sending-request": "ارسال درخواست ای‌پی‌آی...",
        "apisandbox-loading-results": "دریافت درخواست‌های ای‌پی‌آی...",
-       "apisandbox-results-error": "در زمان بارگیری پاسخ کوئری API خطایی رخ داده‌است: $1.",
-       "apisandbox-request-selectformat-label": "نمایش داده‌های مورد درخواست به عنوان:",
+       "apisandbox-results-error": "در زمان بارگیری پاسخ پرسمان از رابط برنامه‌نویسی خطایی رخ داد: $1.",
+       "apisandbox-request-selectformat-label": "نمایش داده‌های درخواست به عنوان:",
        "apisandbox-request-format-url-label": "آدرس اینترنتی متن پرسمان",
        "apisandbox-request-url-label": "درخواست آدرس:",
        "apisandbox-request-json-label": "درخواست JSON:",
        "modifiedarticleprotection-comment": "سطح محاظفت «[[$1]]» را {{GENDER:$2|تغییر داد}}",
        "unprotectedarticle-comment": "«[[$1]]» را از محافظت {{GENDER:$2|در آورد}}",
        "protect-title": "تغییر وضعیت محافظت «$1»",
-       "protect-title-notallowed": "مشاهده سطح حفاظت  \" $1 \"",
+       "protect-title-notallowed": "مشاهدهٔ سطح محافظت «$1»",
        "prot_1movedto2": "[[$1]] به [[$2]] منتقل شد",
        "protect-badnamespace-title": "فضای نام بدون محافظت",
        "protect-badnamespace-text": "صفحه‌های موجود در این فضای نام، نمی‌توانند محافظت شوند.",
        "undeleteviewlink": "نمایش",
        "undeleteinvert": "وارونه کردن انتخاب",
        "undeletecomment": "دلیل:",
-       "undeletedrevisions": "$1 نسخه احیا {{PLURAL:$1|شد}}",
-       "undeletedrevisions-files": "$1 نسخه و $2 پرونده احیا {{PLURAL:$1|شد|شدند}}.",
-       "undeletedfiles": "$1 پرونده احیا {{PLURAL:$1|شد|شدند}}.",
        "cannotundelete": "تمام یا بخشی از احیا ناموفق بود:\n$1",
        "undeletedpage": "'''$1 احیا شد'''\n\nبرای دیدن سیاههٔ حذف‌ها و احیاهای اخیر به  [[Special:Log/delete|سیاههٔ حذف]] رجوع کنید.",
        "undelete-header": "برای دیدن صفحه‌های حذف‌شدهٔ اخیر [[Special:Log/delete|سیاههٔ حذف]] را ببینید.",
        "sp-contributions-uploads": "بارگذاری‌ها",
        "sp-contributions-logs": "سیاهه‌ها",
        "sp-contributions-talk": "بحث",
-       "sp-contributions-userrights": "مدیریت اختیارات کاربر",
+       "sp-contributions-userrights": "مدیریت اختیارات {{GENDER:$1|کاربر}}",
        "sp-contributions-blocked-notice": "این کاربر در حال حاضر بسته شده‌است.\nآخرین سیاههٔ بسته شدن در زیر آمده‌است:",
        "sp-contributions-blocked-notice-anon": "این نشانی آی‌پی در حال حاضر بسته است.\nآخرین سیاههٔ بسته شدن در زیر آمده‌است:",
        "sp-contributions-search": "جستجوی مشارکت‌ها",
        "unblocked-id": "قطع دسترسی شماره $1 خاتمه یافت",
        "unblocked-ip": "[[Special:Contributions/$1|$1]] رفع قطع دسترسی شد.",
        "blocklist": "کاربران بسته‌شده",
+       "autoblocklist": "قطع دسترسی‌های خودکار",
+       "autoblocklist-submit": "جستجو کن",
+       "autoblocklist-legend": "فهرست قطع دسترسی‌های خودکار",
+       "autoblocklist-localblocks": "{{PLURAL:$1|قطع دسترسی خودکار|قطع دسترسی‌های خودکار}} به صورت محلی",
+       "autoblocklist-empty": "فهرست قطع دسترسی‌های خودکار خالی‌ست.",
+       "autoblocklist-otherblocks": "سایر {{PLURAL:$1|قطع دسترسی خودکار|قطع دسترسی‌های خودکار}}",
        "ipblocklist": "کاربران بسته‌شده",
        "ipblocklist-legend": "جستجوی کاربر بسته شده",
        "blocklist-userblocks": "پنهان کردن بسته‌شدن‌های حساب",
        "pageinfo-not-current": "متأسفانه تهیه اطلاعات ویرایش‌های قدیمی غیرممکن است.",
        "pageinfo-header-basic": "اطلاعات اولیه",
        "pageinfo-header-edits": "ویرایش تاریخچه",
-       "pageinfo-header-restrictions": "حفاظت از صفحه",
+       "pageinfo-header-restrictions": "محافظت از صفحه",
        "pageinfo-header-properties": "ويژگی‌های صفحه",
        "pageinfo-display-title": "نمایش عنوان",
        "pageinfo-default-sort": "کلید مرتب‌سازی پیش‌فرض",
        "confirmrecreate": "کاربر [[User:$1|$1]] ([[User talk:$1|بحث]]) این مقاله را پس از اینکه شما آغاز به ویرایش آن نموده‌اید به دلیل زیر حذف کرده است :\n: ''$2'' \nلطفاً تأیید کنید که مجدداً می‌خواهید این مقاله را بسازید.",
        "confirmrecreate-noreason": "کاربر [[User:$1|$1]] ([[User talk:$1|بحث]]) این صفحه را پس از شروع ویرایش‌تان {{GENDER:$1|پاک}} کرده‌است.  لطفاً تأیید کنید که شما واقعاً می‌خواهید آن را دوباره ایجاد کنید.",
        "recreate": "باز ایجاد",
+       "confirm-purge-title": "خالی کردن کاشه این صفحه",
        "confirm_purge_button": "تأیید",
        "confirm-purge-top": "پاک کردن نسخهٔ حافظهٔ نهانی (Cache) این صفحه را تأیید می‌کنید؟",
        "confirm-purge-bottom": "خالی کردن میانگیر یک صفحه باعث می‌شود که آخرین نسخهٔ آن نمایش یابد.",
        "htmlform-user-not-valid": "حساب کاربری <strong>$1</strong> معتبر نیست.",
        "logentry-delete-delete": "$1 صفحهٔ $3 را {{GENDER:$2|حذف کرد}}",
        "logentry-delete-delete_redir": "$1 تغییرمسیر $3 را با رونویسی {{GENDER:$2|حذف کرد}}",
-       "logentry-delete-restore": "$1 صفحهٔ $3 را {{GENDER:$2|احیا کرد}}",
+       "logentry-delete-restore": "$1 صفحهٔ $3 را {{GENDER:$2|احیا کرد}} ($4)",
+       "logentry-delete-restore-nocount": "$1 صفحهٔ $3 را {{GENDER:$2|احیا کرد}}",
+       "restore-count-revisions": "{{PLURAL:$1|یک نسخه|$1 نسخه}}",
+       "restore-count-files": "{{PLURAL:$1|یک پرونده|$1 پرونده}}",
        "logentry-delete-event": "$1 پیدایی {{PLURAL:$5|یک مورد سیاهه|$5 مورد سیاهه}} را در $3 {{GENDER:$2|تغییر داد}}: $4",
        "logentry-delete-revision": "$1 پیدایی {{PLURAL:$5|یک نسخه|$5 نسخه}} صفحه $3 را {{GENDER:$2|تغییر داد}}: $4",
        "logentry-delete-event-legacy": "$1 پیدایی موارد سیاهه را در $3 {{GENDER:$2|تغییر داد}}",
        "logentry-protect-protect": "$1 $3 را {{GENDER:$2|محافظت کرد}} $4",
        "logentry-protect-protect-cascade": "$1 $3 $4 {{GENDER:$2|محافظت کرد}} [آبشاری]",
        "logentry-protect-modify": "$1 سطح محافظت $3 را {{GENDER:$2|تغییر داد}} $4",
-       "logentry-protect-modify-cascade": "$1 سطح حفاظت برای $3 $4 را {{GENDER:$2|تغییر داد}}[آبشاری]",
+       "logentry-protect-modify-cascade": "$1 سطح محافظت $3 را {{GENDER:$2|تغییر داد}} به $4 [آبشاری]",
        "logentry-rights-rights": "$1 دسترسی $3 را از گروه $4 به $5 تغییر داد",
        "logentry-rights-rights-legacy": "$1 گروه عضویت $3 را {{GENDER:$2|تغییر داد}}",
        "logentry-rights-autopromote": "$1 به طور خودکار از $4 به $5 {{GENDER:$2|ارتقاء یافت}}",
        "feedback-external-bug-report-button": "پرونده‌سازی یک عمل فنی",
        "feedback-dialog-title": "ارسال یک بازخورد",
        "feedback-dialog-intro": "شما می توانید از فرم زیر برای بازخورد استفاده کنید. متن شما همراه با نام کاربریتان به صفحهٔ \"$1\" افزوده خواهد شد.",
-       "feedback-error1": "خطا: پاسخ‌های ناشناخته از رابط برنامه‌نویسی نرم‌افزار",
+       "feedback-error1": "خطا: پاسخ‌های ناشناخته از رابط برنامه‌نویسی",
        "feedback-error2": "خطا: شکست در ویرایش",
-       "feedback-error3": "خطا: عدم پاسخ از رابط برنامه‌نویسی نرم‌افزار",
+       "feedback-error3": "خطا: عدم پاسخ از رابط برنامه‌نویسی",
        "feedback-error4": "خطا:امکان ارسال به عنوان بازخورد داده‌شده، نیست",
        "feedback-message": "پیغام:",
        "feedback-subject": "موضوع:",
        "special-characters-group-thai": "تایلندی",
        "special-characters-group-lao": "لائو",
        "special-characters-group-khmer": "خمر",
+       "special-characters-group-canadianaboriginal": "بومی کانادا",
        "special-characters-title-endash": "خط فاصله",
        "special-characters-title-emdash": "خط فاسله کشیده",
        "special-characters-title-minus": "علامت منفی",
        "log-action-filter-patrol-patrol": "گشت غیرخودکار",
        "log-action-filter-patrol-autopatrol": "گشت خودکار",
        "log-action-filter-protect-protect": "محافظت",
-       "log-action-filter-protect-modify": "اصلاح حفاظت",
+       "log-action-filter-protect-modify": "اصلاح محافظت",
        "log-action-filter-protect-unprotect": "خروج از محافظت",
        "log-action-filter-protect-move_prot": "حرکت محافظت شده",
        "log-action-filter-rights-rights": "تغیبر دستی",
        "restrictionsfield-label": "بازه‌های آی‌پی مجاز:",
        "restrictionsfield-help": "یک نشانی آی‌پی یا بازهٔ سی‌آی‌دی‌ار در هر خط وارد کنید. برای فعال کردن همه‌چیز، این مقدار را استفاده کنید: <code>0.0.0.0/0</code><br /><code>::/0</code>",
        "revid": "نسخهٔ $1",
-       "pageid": "شناسهٔ صفحهٔ $1"
+       "pageid": "شناسهٔ صفحهٔ $1",
+       "rawhtml-notallowed": "برچسب‌های &lt;html&gt; را نمی‌توان خارج از صفحه‌های معمولی استفاده کرد.",
+       "gotointerwiki": "در حال ترک {{SITENAME}}",
+       "gotointerwiki-invalid": "عنوان مشخص شده نامجاز بود.",
+       "gotointerwiki-external": "شما در حال ترک {{SITENAME}} هستید تا [[$2]] را ببینید که یک وب‌گاه مجزا است.\n\n[$1 اینجا کلیک کنید تا به $1 بروید]",
+       "undelete-cantedit": "شما نمی‌توانید این صفحه را احیا کنید چون مجاز به ویرایش این صفحه نیستید.",
+       "undelete-cantcreate": "شما نمی‌توانید این صفحه را احیا کنید چرا که صفحه‌ای به این نام همینک وجود ندارد و شما مجاز به ساختن آن نیستید."
 }
index 78fa818..fe362a7 100644 (file)
        "recentchanges-label-bot": "Ngoo taƴto waɗi ɗum ko botol",
        "recentchanges-label-unpatrolled": "Ngoo taƴto suwaa tawo ƴeewteede",
        "rclistfrom": "Hollu bayle kese puɗɗiiɗe gila $3 $2",
-       "rclinks": "Hollu bayle $1 cakkitiiɗe baɗaaɗe e balɗe $2 ɓannuɗe ɗee<br />$3",
+       "rclinks": "Hollu bayle $1 cakkitiiɗe baɗaaɗe e balɗe $2 ɓannuɗe ɗee",
        "diff": "ceer",
        "hist": "aslol",
        "hide": "Suuɗ",
index 5d3ca4f..514df7d 100644 (file)
        "readonlywarning": "<strong>Varoitus: Tietokanta on lukittu huoltoa varten, joten et pysty tallentamaan muokkauksiasi juuri nyt.</strong>\nSaattaa olla paras leikata ja liimata tekstisi omaan tekstitiedostoosi ja tallentaa se tänne myöhemmin.\n\nPalvelinjärjestelmän ylläpitäjä, joka lukitsi tietokannan, antoi seuraavan perustelun: $1",
        "protectedpagewarning": "'''Varoitus: Tämä sivu on suojattu niin, että vain ylläpitäjät voivat muokata sitä.'''\nAlla on viimeisin lokitapahtuma:",
        "semiprotectedpagewarning": "<strong>Huomaa:</strong> Tämä sivu on suojattu niin, että vain rekisteröityneet käyttäjät voivat muokata sitä.\nAlla on viimeisin lokitapahtuma:",
-       "cascadeprotectedwarning": "<strong>Varoitus:</strong> Vain ylläpitäjät voivat muokata tätä sivua, koska se on sisällytetty {{PLURAL:$1|seuraavaan tarttuvasti suojattuun sivuun|seuraaviin tarttuvasti suojattuihin sivuihin}}:",
+       "cascadeprotectedwarning": "<strong>Varoitus:</strong> Vain käyttäjät, joilla on [[Special:ListGroupRights|erityisoikeuksia]], voivat muokata tätä sivua, koska se on sisällytetty {{PLURAL:$1|seuraavaan tarttuvasti suojattuun sivuun|seuraaviin tarttuvasti suojattuihin sivuihin}}:",
        "titleprotectedwarning": "'''Varoitus: Tämä sivunimi on suojattu niin, että sivun luomiseen tarvitaan [[Special:ListGroupRights|erityisiä oikeuksia]].'''\nAlla on viimeisin lokitapahtuma:",
        "templatesused": "Tällä sivulla {{PLURAL:$1|käytetty malline|käytetyt mallineet}}:",
        "templatesusedpreview": "Esikatselussa mukana {{PLURAL:$1|oleva malline|olevat mallineet}}:",
        "page_first": "ensimmäinen sivu",
        "page_last": "viimeinen sivu",
        "histlegend": "Eroavaisuuksien valinta: Merkitse niiden versioiden valintaympyrät, joita haluat vertailla, ja paina enter tai alhaalla olevaa nappia.<br />\nSelitys: '''({{int:cur}})''' = eroavaisuudet uusimpaan versioon, '''({{int:last}})''' = eroavaisuudet edeltävään versioon, '''{{int:minoreditletter}}''' = pieni muutos.",
-       "history-fieldset-title": "Selaa muutoshistoriaa",
-       "history-show-deleted": "Vain poistetut",
+       "history-fieldset-title": "Etsi versioita",
+       "history-show-deleted": "Vain poistetut versiot",
        "histfirst": "vanhimmat",
        "histlast": "uusimmat",
        "historysize": "({{PLURAL:$1|1 tavu|$1 tavua}})",
        "saveusergroups": "Tallenna {{GENDER:$1|käyttäjän}} ryhmät",
        "userrights-groupsmember": "Jäsenenä ryhmissä:",
        "userrights-groupsmember-auto": "Automaattisesti jäsenenä ryhmissä:",
-       "userrights-groups-help": "Voit muuttaa ryhmiä, joissa tämä käyttäjä on.\n* Merkattu valintaruutu tarkoittaa, että käyttäjä on kyseisessä ryhmässä.\n* Merkkaamaton valintaruutu tarkoittaa, että käyttäjä ei ole kyseisessä ryhmässä.\n* <nowiki>*</nowiki> tarkoittaa, että et pysty poistamaan ryhmää, kun olet sen lisännyt tai päinvastoin.\n* # tarkoittaa että voit vain asettaa tämän ryhmän päättymisajan takaisin; et voi tuoda sitä eteenpäin.",
+       "userrights-groups-help": "Voit muuttaa ryhmiä, joissa tämä käyttäjä on.\n* Merkattu valintaruutu tarkoittaa, että käyttäjä on kyseisessä ryhmässä.\n* Merkkaamaton valintaruutu tarkoittaa, että käyttäjä ei ole kyseisessä ryhmässä.\n* <nowiki>*</nowiki> tarkoittaa, että et pysty poistamaan ryhmää, kun olet sen lisännyt tai päinvastoin.\n* # tarkoittaa että voit vain asettaa tämän ryhmän jäsenyyden päättymisajan takaisin; et voi tuoda sitä eteenpäin.",
        "userrights-reason": "Syy:",
        "userrights-no-interwiki": "Sinulla ei ole oikeutta muokata käyttöoikeuksia muissa wikeissä.",
        "userrights-nodatabase": "Tietokantaa $1 ei ole tai se ei ole paikallinen.",
        "right-editsemiprotected": "Muokata sivuja, jotka on suojattu tasolle \"{{int:protect-level-autoconfirmed}}\"",
        "right-editcontentmodel": "Muokata sivun sisältömallia (content model)",
        "right-editinterface": "Muokata käyttöliittymätekstejä",
-       "right-editusercssjs": "Muokata toisten käyttäjien CSS- ja JavaScript-tiedostoja",
        "right-editusercss": "Muokata toisten käyttäjien CSS-tiedostoja",
        "right-edituserjs": "Muokata toisten käyttäjien JavaScript-tiedostoja",
        "right-editmyusercss": "Muokata omia CSS-tiedostoja",
        "rcfilters-empty-filter": "Ei aktiivisia suodattimia. Kaikki muutokset näytetään.",
        "rcfilters-filterlist-title": "Suodattimet",
        "rcfilters-filterlist-whatsthis": "Mikä tämä on?",
+       "rcfilters-filterlist-feedbacklink": "Anna palautetta uusista (beta)suodattimista",
        "rcfilters-highlightbutton-title": "Korosta tulokset",
        "rcfilters-highlightmenu-title": "Valitse väri",
        "rcfilters-filterlist-noresults": "Ei löytynyt suodattimia",
        "rcfilters-filtergroup-registration": "Käyttäjän rekisteröinti",
        "rcfilters-filter-registered-label": "Rekisteröitynyt",
-       "rcfilters-filter-registered-description": "Kirjautuneet muokkaukset.",
+       "rcfilters-filter-registered-description": "Sisäänkirjautuneiden muokkaukset.",
        "rcfilters-filter-unregistered-label": "Rekisteröimätön",
        "rcfilters-filter-unregistered-description": "Muokkaajat, jotka eivät ole kirjautuneet sisään.",
+       "rcfilters-filtergroup-authorship": "Muokkausten tekijä",
        "rcfilters-filter-editsbyself-label": "Omat muokkauksesi",
-       "rcfilters-filter-editsbyself-description": "Muokkauksesi",
+       "rcfilters-filter-editsbyself-description": "Itse tekemäsi muokkaukset.",
        "rcfilters-filter-editsbyother-label": "Muiden muokkaukset",
-       "rcfilters-filter-editsbyother-description": "Muutokset jotka tehneet muut käyttäjät (et sinä).",
+       "rcfilters-filter-editsbyother-description": "Muiden käyttäjien tekemät muokkaukset.",
        "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-learner-description": "Useampi päivä aktiivisuutta ja muokkauksia kuin \"tulokkailla\", mutta vähemmän kuin \"kokeneilla käyttäjillä\".",
        "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-filter-user-experience-level-experienced-description": "Enemmän kuin 30 päivää aktiivisuutta ja 500 muokkausta.",
        "rcfilters-filtergroup-automated": "Automatisoidut muutokset",
        "rcfilters-filter-bots-label": "Botti",
-       "rcfilters-filter-bots-description": "Muokkaukset jotka tehty automaattisilla työkaluilla.",
+       "rcfilters-filter-bots-description": "Automaattisilla työkaluilla tehdyt muokkaukset.",
        "rcfilters-filter-humans-label": "Ihminen (ei botti)",
-       "rcfilters-filter-humans-description": "Muokkaukset, jotka tehnyt ihmismuokkaajat.",
+       "rcfilters-filter-humans-description": "Ihmisten tekemät muokkaukset.",
        "rcfilters-filtergroup-reviewstatus": "Tarkistuksen tila",
        "rcfilters-filtergroup-significance": "Merkitys",
        "rcfilters-filter-minor-label": "Pienet muutokset",
+       "rcfilters-filter-minor-description": "Muokkaukset, jotka on merkitty pieniksi.",
        "rcfilters-filter-major-label": "Ei-pienet muutokset",
-       "rcfilters-filter-major-description": "Muokkauksia ei ole merkitty kuin pieniksi.",
+       "rcfilters-filter-major-description": "Muokkauksia ei ole merkitty pieniksi.",
        "rcfilters-filtergroup-changetype": "Muutoksen tyyppi",
        "rcfilters-filter-pageedits-label": "Sivun muokkaukset",
        "rcfilters-filter-pageedits-description": "Muokkaukset wikin sisältöön, keskusteluihin, luokkakuvauksiin....",
        "rcshowhidecategorization": "$1 sivujen luokkien muutokset",
        "rcshowhidecategorization-show": "Näytä",
        "rcshowhidecategorization-hide": "Piilota",
-       "rclinks": "Näytä $1 tuoretta muutosta viimeisten $2 päivän ajalta.<br />$3",
+       "rclinks": "Näytä $1 tuoretta muutosta viimeisten $2 päivän ajalta.",
        "diff": "ero",
        "hist": "historia",
        "hide": "Piilota",
        "emailccsubject": "Kopio lähettämästäsi viestistä osoitteeseen $1: $2",
        "emailsent": "Sähköposti lähetetty",
        "emailsenttext": "Sähköpostiviestisi on lähetetty.",
-       "emailuserfooter": "Tämän sähköpostin {{GENDER:$1|lähetti}} $1 vastaanottajalle {{GENDER:$2|$2}} käyttämällä ”{{int:emailuser}}” -toimintoa {{GRAMMAR:inessive|{{SITENAME}}}}. Sähköpostisi lähetetään suoraan {{GENDER:$1|alkuperäiselle lähettäjälle}}, paljastaen {{GENDER:$2|sinun}} sähköpostiosoitteesi {{GENDER:$1|hänelle}}.",
+       "emailuserfooter": "Tämän sähköpostin {{GENDER:$1|lähetti}} $1 vastaanottajalle {{GENDER:$2|$2}} käyttämällä ”{{int:emailuser}}” -toimintoa {{GRAMMAR:inessive|{{SITENAME}}}}. Jos vastaat tähän sähköpostiin, sähköpostisi lähetetään suoraan {{GENDER:$1|alkuperäiselle lähettäjälle}}, paljastaen {{GENDER:$2|sinun}} sähköpostiosoitteesi {{GENDER:$1|hänelle}}.",
        "usermessage-summary": "Jätetään järjestelmäviesti.",
        "usermessage-editor": "Järjestelmäviestittäjä",
        "watchlist": "Tarkkailulista",
        "editcomment": "Muokkauksen yhteenveto oli: <em>$1</em>.",
        "revertpage": "Käyttäjän [[Special:Contributions/$2|$2]] ([[User talk:$2|keskustelu]]) muokkaukset kumottiin ja sivu palautettiin viimeisimpään käyttäjän [[User:$1|$1]] tekemään versioon.",
        "revertpage-nouser": "Käyttäjän (käyttäjänimi poistettu) muokkaukset kumottiin ja sivu palautettiin viimeisimpään käyttäjän {{GENDER:$1|[[User:$1|$1]]}} tekemään versioon",
-       "rollback-success": "Käyttäjän $1 tekemät muokkaukset kumottiin ja sivu palautettiin käyttäjän $2 versioon.",
+       "rollback-success": "Käyttäjän {{GENDER:$3|$1}} tekemät muokkaukset kumottiin ja sivu palautettiin käyttäjän {{GENDER:$4|$2}} versioon.",
        "rollback-success-notify": "Kumottiin käyttäjän $1 muokkaukset; palautettiin viimeiseen käyttäjän $2 versioon. [$3 Näytä muutokset]",
        "sessionfailure-title": "Istuntovirhe",
        "sessionfailure": "Istuntosi kanssa on ongelma. Muutosta ei toteutettu varotoimena istuntokaappauksien takia. Käytä selaimen paluutoimintoa ja päivitä sivu, jolta tulit, ja yritä uudelleen.",
        "changecontentmodel-emptymodels-title": "Mitään sisältömallia ei ole saatavilla",
        "changecontentmodel-emptymodels-text": "Sisältöä sivulla [[:$1]] ei voida muuntaa mihinkään muotoon.",
        "log-name-contentmodel": "Sisältömallin muutosloki",
-       "log-description-contentmodel": "Tapahtumat, jotka liittyvät sivun sisältömalleihin",
+       "log-description-contentmodel": "Tällä sivulla on lueteltu muutokset sivujen sisältömalliin, ja sivut, jotka on luotu muulla kuin oletussisältömallilla.",
        "logentry-contentmodel-new": "$1 {{GENDER:$2|loi}} sivun $3 käyttäen normaalista poikkeavaa sisältömallia \"$5\"",
        "logentry-contentmodel-change": "$1 {{GENDER:$2|muutti}} sivun $3 sisältömallia muodosta \"$4\" muotoon \"$5\"",
        "logentry-contentmodel-change-revertlink": "kumoa",
        "undeleteviewlink": "näytä",
        "undeleteinvert": "Käänteinen valinta",
        "undeletecomment": "Syy:",
-       "undeletedrevisions": "{{PLURAL:$1|Yksi versio|$1 versiota}} palautettiin",
-       "undeletedrevisions-files": "{{PLURAL:$1|Yksi versio|$1 versiota}} ja {{PLURAL:$2|yksi tiedosto|$2 tiedostoa}} palautettiin",
-       "undeletedfiles": "{{PLURAL:$1|1 tiedosto|$1 tiedostoa}} palautettiin",
        "cannotundelete": "Palauttaminen epäonnistui osittain tai kokonaan:\n$1",
        "undeletedpage": "'''$1 on palautettu.'''\n\n[[Special:Log/delete|Poistolokista]] löydät listan viimeisimmistä poistoista ja palautuksista.",
        "undelete-header": "[[Special:Log/delete|Poistolokissa]] on lista viimeisimmistä poistoista.",
        "unblocked-id": "Esto $1 on poistettu",
        "unblocked-ip": "Käyttäjän [[Special:Contributions/$1|$1]] esto on poistettu.",
        "blocklist": "Estetyt käyttäjät",
+       "autoblocklist": "Automaattiset estot",
+       "autoblocklist-submit": "Hae",
+       "autoblocklist-localblocks": "{{PLURAL:$1|Paikallinen automaattinen esto|Paikalliset automaattiset estot}}",
+       "autoblocklist-empty": "Automaattisten estojen lista on tyhjä.",
+       "autoblocklist-otherblocks": "{{PLURAL:$1|Muu automaattinen esto|Muut automaattiset estot}}",
        "ipblocklist": "Estetyt käyttäjät",
        "ipblocklist-legend": "Haku",
        "blocklist-userblocks": "Piilota tunnusten estot",
        "newimages-summary": "Tällä toimintosivulla on viimeisimmät tallennetut tiedostot.",
        "newimages-legend": "Suodatin",
        "newimages-label": "Tiedostonimi (tai osa siitä)",
+       "newimages-user": "IP-osoite tai käyttäjänimi:",
        "newimages-showbots": "Näytä bottien tekemät tallennukset",
        "newimages-hidepatrolled": "Piilota tarkastetut tiedostotallennukset",
        "noimages": "Ei uusia tiedostoja.",
        "htmlform-user-not-valid": "<strong>$1</strong> ei ole kelvollinen käyttäjänimi.",
        "logentry-delete-delete": "$1 {{GENDER:$2|poisti}} sivun $3",
        "logentry-delete-delete_redir": "$1 {{GENDER:$2|poisti}} ohjaussivun $3 korvaamalla",
-       "logentry-delete-restore": "$1 {{GENDER:$2|palautti}} sivun $3",
+       "logentry-delete-restore": "$1 {{GENDER:$2|palautti}} sivun $3 ($4)",
+       "logentry-delete-restore-nocount": "$1 {{GENDER:$2|palautti}} sivun $3",
+       "restore-count-revisions": "{{PLURAL:$1|1 versio|$1 versio}}",
+       "restore-count-files": "{{PLURAL:$1|1 tiedosto|$1 tiedostoa}}",
        "logentry-delete-event": "$1 {{GENDER:$2|muutti}} {{PLURAL:$5|lokitapahtuman|$5 lokitapahtuman}} näkyvyyttä kohteessa $3: $4",
        "logentry-delete-revision": "$1 {{GENDER:$2|muutti}} {{PLURAL:$5|version|$5 version}} näkyvyyttä sivulla $3: $4",
        "logentry-delete-event-legacy": "$1 {{GENDER:$2|muutti}} kohteen $3 lokitapahtumien näkyvyyttä",
        "pagelang-submit": "Lähetä",
        "pagelang-nonexistent-page": "Sivua $1 ei ole olemassa.",
        "pagelang-unchanged-language": "Sivu $1 on jo asetettu kielelle $2.",
+       "pagelang-unchanged-language-default": "Sivu $1 on jo asetettu wikin oletussisältökielelle.",
        "pagelang-db-failed": "Tietokanta epäonnistui vaihtamaan sivun kielen.",
        "right-pagelang": "Vaihtaa sivun kieli",
        "action-pagelang": "muuttaa sivun kieliasetuksia",
        "restrictionsfield-badip": "Virheellinen IP-osoite tai alue: $1",
        "restrictionsfield-label": "Sallitut IP-alueet:",
        "revid": "versio $1",
-       "pageid": "sivun tunnistenumero $1"
+       "pageid": "sivun tunnistenumero $1",
+       "gotointerwiki": "Lähdössä {{GRAMMAR:elative|{{SITENAME}}}}",
+       "gotointerwiki-external": "Olet lähdössä {{GRAMMAR:elative|{{SITENAME}}}} toiselle sivustolle [[$2]].\n\n[$1 Paina tästä jatkaaksesi osoitteeseen $1].",
+       "undelete-cantedit": "Et voi palauttaa tätä sivua, koska sinulla ei ole oikeutta muokata tätä sivua.",
+       "undelete-cantcreate": "Et voi palauttaa tätä sivua, koska tällä nimellä ei ole olemassaolevaa sivua, eikä sinulla ole oikeutta luoda tätä sivua."
 }
index 5006722..c3542c0 100644 (file)
        "rcshowhideanons": "$1 anonyymit käyttäjät",
        "rcshowhidepatr": "$1 tarkistetut muutokset",
        "rcshowhidemine": "$1 omat muutokset",
-       "rclinks": "Näytä $1 verestä muutosta viimisitten $2 päivitten aikana.<br />$3",
+       "rclinks": "Näytä $1 verestä muutosta viimisitten $2 päivitten aikana.",
        "diff": "ero",
        "hist": "histuuria",
        "hide": "Piilota",
index eaef8b2..6c77a59 100644 (file)
        "externaldberror": "Antin var talan um ein atgongd dátubasu feil, ella hevur tú ikki loyvi til at dagføra tína eksternu kontu.",
        "login": "Rita inn",
        "nav-login-createaccount": "Stovna kontu ella rita inn",
-       "userlogin": "Stovna kontu ella rita inn",
-       "userloginnocreate": "Rita inn",
        "logout": "Útrita",
        "userlogout": "Rita út",
        "notloggedin": "Ikki ritað inn",
        "userlogin-noaccount": "Hevur tú ikki nakra kontu?",
        "userlogin-joinproject": "Meldað teg til {{SITENAME}}",
-       "nologin": "Hevur tú ikki eina kontu? $1.",
-       "nologinlink": "Stovna eina kontu",
        "createaccount": "Stovna nýggja kontu",
-       "gotaccount": "Hevur tú longu eina kontu? '''$1'''.",
-       "gotaccountlink": "Rita inn",
-       "userlogin-resetlink": "Hevur tú gloymt tínar logg inn upplýsingar",
        "userlogin-resetpassword-link": "Hevur tú gloymt títt loyniorð?",
        "userlogin-helplink2": "Hjálp til innritan",
        "userlogin-loggedin": "Tú ert longu innritað/ur sum {{GENDER:$1|$1}}.\nNýt formularin niðanfyri fyri at rita inn sum ein annar brúkari.",
        "createacct-another-email-ph": "Skriva tína t-post adressu",
        "createaccountmail": "Nýt eitt fyribils tilvildarligt loyniorð og send tað til nevndu t-post adressuna",
        "createacct-realname": "Veruligt navn (valfrítt)",
-       "createaccountreason": "Orsøk:",
        "createacct-reason": "Orsøk",
        "createacct-reason-ph": "Hví upprættar tú eina nýggja kontu",
        "createacct-submit": "Upprætta tína kontu",
        "saveprefs": "Goym innstillingar",
        "restoreprefs": "Nullstilla alt til standard innstillingar (í øllum teigum)",
        "prefs-editing": "Broyting av greinum",
-       "rows": "Røð:",
-       "columns": "Teigar:",
        "searchresultshead": "Leita",
        "stub-threshold": "Avmarkað til stubba leinki formatering $1:",
        "stub-threshold-sample-link": "dømi",
        "right-editprotected": "Rætta síður sum eru vardar sum \"{{int:protect-level-sysop}}\"",
        "right-editsemiprotected": "Rætta síður sum er vardar sum \"{{int:protect-level-autoconfirmed}}\"",
        "right-editinterface": "Rætta brúkaramarkamótið",
-       "right-editusercssjs": "Rætta CSS og JavaScript fílur hjá øðrum brúkarum",
        "right-editusercss": "Rætta CSS fílur hjá øðrum brúkarum",
        "right-edituserjs": "Rætta JavaScript fílur hjá øðrum brúkarum",
        "right-editmyusercss": "Rætta tínar egnu brúkara CSS fílur",
        "rcshowhidemine": "$1 mínar rættingar",
        "rcshowhidemine-show": "Vís",
        "rcshowhidemine-hide": "Fjal",
-       "rclinks": "Sýn seinastu $1 broytingarnar seinastu $2 dagarnar<br />$3",
+       "rclinks": "Sýn seinastu $1 broytingarnar seinastu $2 dagarnar",
        "diff": "munur",
        "hist": "søga",
        "hide": "Goym",
        "undeleteviewlink": "Hygg",
        "undeleteinvert": "Umvent val",
        "undeletecomment": "Orsøk:",
-       "undeletedrevisions": "{{PLURAL:$1|1 versjón|$1 versjónir}} endurstovnað/ar",
-       "undeletedrevisions-files": "{{PLURAL:$1|1 versjón|$1 versjónir}} og {{PLURAL:$2|1 fíla|$2 fílur}} endurstovnað/ar",
-       "undeletedfiles": "{{PLURAL:$1|1 fíla endurstovna|$1 fílur endurstovnaðar}}",
        "cannotundelete": "Endurstovnan miseydnaðist:\n$1",
        "undeletedpage": "'''$1 er endurstovnað'''\n\nSí [[Special:Log/delete|slettingarloggin]] fyri at síggja seinastu strikingar og endurstovningar.",
        "undelete-header": "Far til [[Special:Log/delete|slettingarloggin]] fyri at síggja nýliga slettaðar síður.",
        "logentry-newusers-create": "Brúkarakonta $1 varð {{GENDER:$2|upprættað}}",
        "logentry-upload-upload": "$1 {{GENDER:$2|legði út}} $3",
        "rightsnone": "(ongin)",
-       "revdelete-summary": "yvirlit yvir broytingar",
        "searchsuggest-search": "Leita í {{SITENAME}}",
-       "api-error-empty-file": "Fílan sum tú sendi inn var tóm.",
-       "api-error-file-too-large": "Fílan sum tú sendi inn var óv stór.",
-       "api-error-http": "Internur feilur: Kann ikki fáa samband við servaran.",
-       "api-error-mustbeloggedin": "Tú mást vera innritað/ur fyri at tú kanst leggja fílur upp.",
-       "api-error-ok-but-empty": "Internur feilur: Onki svar frá servara.",
-       "api-error-unclassified": "Ein ókendur feilur hendi.",
-       "api-error-unknown-code": "Ókendur feilur: \"$1\"",
        "duration-seconds": "$1 {{PLURAL:$1|sekund}}",
        "duration-minutes": "$1 {{PLURAL:$1|minuttur|minuttir}}",
        "duration-hours": "$1 {{PLURAL:$1|tími|tímar}}",
index 1f2a034..9661a69 100644 (file)
        "redirectedfrom": "(Redirigé depuis $1)",
        "redirectpagesub": "Page de redirection",
        "redirectto": "Rediriger vers :",
-       "lastmodifiedat": "Dernière modification de cette page le $1, à $2.",
+       "lastmodifiedat": "Cette page a été modifiée pour la dernière fois le $1 à $2.",
        "viewcount": "Cette page {{PLURAL:$1|0=n’a jamais été consultée|1=a été consultée une seule fois|a été consultée $1 fois}}.",
        "protectedpage": "Page protégée",
        "jumpto": "Aller à :",
        "readonlywarning": "<strong>AVERTISSEMENT : la base de données a été verrouillée pour des opérations de maintenance. Vous ne pouvez donc pas publier vos modifications pour l’instant.</strong>\nVous pouvez copier et coller votre texte dans un fichier texte et l’enregistrer pour plus tard.\n\nL’administrateur système ayant verrouillé la base de données a donné l’explication suivante : $1",
        "protectedpagewarning": "<strong>AVERTISSEMENT : cette page est protégée afin que seuls les utilisateurs ayant le statut d'administrateur puissent la modifier.</strong>\nLa dernière entrée du journal est affichée ci-dessous pour référence :",
        "semiprotectedpagewarning": "<strong>Note :</strong>Cette page a été protégée de telle façon que seuls les contributeurs enregistrés puissent la modifier. \nLa dernière entrée du journal est affichée ci-dessous pour référence :",
-       "cascadeprotectedwarning": "'''ATTENTION :''' Cette page a été protégée de manière à ce que seuls les administrateurs puissent la modifier car elle est transcluse dans {{PLURAL:$1|la page protégée suivante, qui a|les pages protégées suivantes, qui ont}} la « protection en cascade » activée :",
+       "cascadeprotectedwarning": "<strong>ATTENTION :</strong> Cette page a été protégée de manière à ce que seuls les utilisateurs avec [[Special:ListGroupRights|des droits spécifiques]] puissent la modifier car elle est incluse dans {{PLURAL:$1|la page suivante, protégée en cascade|les pages suivantes, protégées en cascade}} :",
        "titleprotectedwarning": "<strong>ATTENTION : Cette page a été protégée de telle manière que des [[Special:ListGroupRights|droits spécifiques]] sont requis pour pouvoir la créer.</strong> \nLa dernière entrée du journal est affichée ci-dessous pour référence :",
        "templatesused": "{{PLURAL:$1|Modèle utilisé|Modèles utilisés}} par cette page :",
        "templatesusedpreview": "{{PLURAL:$1|Modèle utilisé|Modèles utilisés}} dans cette prévisualisation :",
        "expansion-depth-exceeded-category": "Pages dépassant la profondeur d'expansion maximale",
        "expansion-depth-exceeded-category-desc": "La page dépasse la profondeur d’expansion maximale.",
        "expansion-depth-exceeded-warning": "Page dépassant la profondeur d’expansion maximale",
-       "parser-unstrip-loop-warning": "Boucle non démontable détectée",
-       "parser-unstrip-recursion-limit": "Limite de récursion non démontable dépassée ($1)",
+       "parser-unstrip-loop-warning": "Boucle non dépilable détectée",
+       "parser-unstrip-recursion-limit": "Limite de récursion non dépilable dépassée ($1)",
        "converter-manual-rule-error": "Erreur détectée dans la règle manuelle de conversion de langue",
        "undo-success": "Cette modification va être annulée.\nVeuillez vérifier les différences ci-dessous, puis publier l’annulation si c’est bien ce que vous voulez faire.",
        "undo-failure": "Cette modification ne peut pas être défaite : cela entrerait en conflit avec les modifications intermédiaires.",
        "userrights-groupsmember": "Membre de :",
        "userrights-groupsmember-auto": "Membre implicite de :",
        "userrights-groupsmember-type": "$1",
-       "userrights-groups-help": "Vous pouvez modifier les groupes auxquels appartient {{GENDER:$1|cet utilisateur|cette utilisatrice}} :\n* Une case cochée signifie que l’utilisat{{GENDER:$1|eur|rice}} se trouve dans ce groupe.\n* Une case non cochée signifie qu’{{GENDER:$1|il|elle}} ne s’y trouve pas.\n* Un astérisque (*) indique que vous ne pouvez pas retirer ce groupe une fois que vous l’avez ajouté, ou vice-versa.\n* Un dièse (#) indique que vous ne pouvez que rallonger le délai d'expiration du groupe et non pas le raccourcir.",
+       "userrights-groups-help": "Vous pouvez modifier les groupes auxquels appartient {{GENDER:$1|cet utilisateur|cette utilisatrice}} :\n* Une case cochée signifie que {{GENDER:$1|l’utilisateur|l’utilisatrice}} se trouve dans ce groupe.\n* Une case non cochée signifie qu’{{GENDER:$1|il|elle}} ne s’y trouve pas.\n* Un astérisque (*) indique que vous ne pouvez pas retirer ce groupe une fois que vous l’avez ajouté, ou vice-versa.\n* Un dièse (#) indique que vous ne pouvez que rallonger le délai d’expiration de l’appartenance au groupe et non pas le raccourcir.",
        "userrights-reason": "Motif :",
        "userrights-no-interwiki": "Vous n'avez pas la permission de modifier les droits utilisateur sur d'autres wikis.",
        "userrights-nodatabase": "La base de données « $1 » n'existe pas ou n'est pas locale.",
        "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 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-cannot-shorten-expiry": "Vous ne pouvez pas raccourcir la durée d’expiration de l’appartenance au 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",
        "right-editsemiprotected": "Modifier les pages protégées avec « {{int:protect-level-autoconfirmed}} »",
        "right-editcontentmodel": "Modifier le modèle de contenu d’une page",
        "right-editinterface": "Modifier l'interface utilisateur",
-       "right-editusercssjs": "Modifier les fichiers CSS et JavaScript d'autres utilisateurs",
        "right-editusercss": "Modifier les fichiers CSS d'autres utilisateurs",
        "right-edituserjs": "Modifier les fichiers JavaScript d'autres utilisateurs",
        "right-editmyusercss": "Modifier vos propres fichiers CSS utilisateur",
        "rcfilters-filter-humans-description": "Modifications faites par des éditeurs humains.",
        "rcfilters-filtergroup-reviewstatus": "Etat de révision",
        "rcfilters-filter-patrolled-label": "Patrouillé",
-       "rcfilters-filter-patrolled-description": "Modifications marquées comme patrouillées.",
-       "rcfilters-filter-unpatrolled-label": "Non patrouillé",
-       "rcfilters-filter-unpatrolled-description": "Modifications non marquées comme patrouillées.",
+       "rcfilters-filter-patrolled-description": "Modifications marquées comme relues.",
+       "rcfilters-filter-unpatrolled-label": "Non relu",
+       "rcfilters-filter-unpatrolled-description": "Modifications non marquées comme étant relues.",
        "rcfilters-filtergroup-significance": "Signification",
        "rcfilters-filter-minor-label": "Modifications mineures",
        "rcfilters-filter-minor-description": "Modifications que l’auteur a marquées comme mineures.",
        "rcfilters-hideminor-conflicts-typeofchange": "Certains types de modification ne peuvent pas être qualifiés de « mineurs », donc ce filtre est en conflit avec les filtres de Type de modification suivants : $1",
        "rcfilters-typeofchange-conflicts-hideminor": "Ce filtre de Type de modification est en conflit avec le filtre « Modifications mineures ». Certains type sde modification ne peuvent pas être indiqués comme « mineurs ».",
        "rcnotefrom": "Ci-dessous {{PLURAL:$5|la modification effectuée|les modifications effectuées}} depuis le <strong>$3, $4</strong> (affichées jusqu’à <strong>$1</strong>).",
+       "rclistfromreset": "Réinitialiser la sélection de la date",
        "rclistfrom": "Afficher les nouvelles modifications depuis le $3 à $2",
        "rcshowhideminor": "$1 les modifications mineures",
        "rcshowhideminor-show": "Afficher",
        "rcshowhidecategorization": "$1 la catégorisation des pages",
        "rcshowhidecategorization-show": "Afficher",
        "rcshowhidecategorization-hide": "Cacher",
-       "rclinks": "Afficher les $1 dernières modifications effectuées au cours des $2 derniers jours<br />$3.",
+       "rclinks": "Afficher les $1 dernières modifications effectuées au cours des $2 derniers jours.",
        "diff": "diff",
        "hist": "hist",
        "hide": "Masquer",
        "php-uploaddisabledtext": "L'import de fichiers est désactivé en PHP. Vérifiez l'option de configuration file_uploads.",
        "uploadscripted": "Ce fichier contient du code HTML ou un script qui pourrait être interprété de façon incorrecte par un navigateur web.",
        "upload-scripted-pi-callback": "Impossible de charger un fichier qui contient des instructions de traitement de feuille de style XML.",
+       "upload-scripted-dtd": "Impossible de télécharger des fichiers SVG qui contiennent une déclaration de DTD non standard.",
        "uploaded-script-svg": "Élément scriptable « $1 » trouvé dans le fichier SVG téléchargé.",
        "uploaded-hostile-svg": "CSS non sûr trouvé dans l’élément style d’un fichier SVG téléversé.",
        "uploaded-event-handler-on-svg": "Fixer des attributs de gestionnaire d’événement <code>$1=\"$2\"</code> n’est pas autorisé dans les fichiers SVG.",
        "undeleteviewlink": "voir",
        "undeleteinvert": "Inverser la sélection",
        "undeletecomment": "Motif :",
-       "undeletedrevisions": "$1 {{PLURAL:$1|version restaurée|versions restaurées}}",
-       "undeletedrevisions-files": "$1 version{{PLURAL:$1||s}} et $2 fichier{{PLURAL:$2||s}} restauré{{PLURAL:$2||s}}",
-       "undeletedfiles": "$1 {{PLURAL:$1|fichier restauré|fichiers restaurés}}",
        "cannotundelete": "Certaines ou toutes les restaurations ont échoué :\n$1",
        "undeletedpage": "<strong>La page $1 a été restaurée.</strong>\n\nConsultez le [[Special:Log/delete|journal des suppressions]] pour obtenir la liste des récentes suppressions et restaurations.",
        "undelete-header": "Consultez le [[Special:Log/delete|journal des suppressions]] pour lister les pages récemment supprimées.",
        "sp-contributions-uploads": "imports",
        "sp-contributions-logs": "journaux",
        "sp-contributions-talk": "discuter",
-       "sp-contributions-userrights": "gérer les droits",
+       "sp-contributions-userrights": "gérer les droits {{GENDER:$1|utilisateur}}",
        "sp-contributions-blocked-notice": "Cet utilisateur est actuellement bloqué. \nLa dernière entrée du journal des blocages est affichée ci-dessous pour référence :",
        "sp-contributions-blocked-notice-anon": "Cette adresse IP est actuellement bloquée.\nLa dernière entrée du journal des blocages est affichée ci-dessous pour référence :",
        "sp-contributions-search": "Rechercher les contributions",
        "unblocked-id": "Le blocage $1 a été enlevé",
        "unblocked-ip": "[[Special:Contributions/$1|$1]] a été débloqué.",
        "blocklist": "Utilisateurs bloqués",
+       "autoblocklist": "Blocages automatiques",
+       "autoblocklist-submit": "Rechercher",
+       "autoblocklist-legend": "Lister les blocages automatiques",
+       "autoblocklist-localblocks": "{{PLURAL:$1|Blocage automatique local|Blocages automatiques locaux}}",
+       "autoblocklist-empty": "La liste des blocages automatiques est vide.",
+       "autoblocklist-otherblocks": "{{PLURAL:$1|Autre blocage automatique|Autres blocages automatiques}}",
        "ipblocklist": "Utilisateurs bloqués",
        "ipblocklist-legend": "Chercher un utilisateur bloqué",
        "blocklist-userblocks": "Masquer les blocages de comptes",
        "tooltip-pt-mycontris": "La liste de {{GENDER:|vos}} contributions",
        "tooltip-pt-anoncontribs": "Une liste des modifications effectuées depuis cette adresse IP",
        "tooltip-pt-login": "Il est recommandé de vous identifier ; ce n'est cependant pas obligatoire.",
+       "tooltip-pt-login-private": "Vous devez vous connecter pour utiliser ce wiki",
        "tooltip-pt-logout": "Se déconnecter",
        "tooltip-pt-createaccount": "Il vous est conseillé de créer un compte et de vous connecter ; cependant, ce n’est pas obligatoire",
        "tooltip-ca-talk": "Discussion au sujet de cette page de contenu",
        "confirmrecreate": "L’utilisat{{GENDER:$1|eur|rice}} [[User:$1|$1]] ([[User talk:$1|Discussion]]) a supprimé cette page, alors que vous aviez commencé à la modifier, pour le motif suivant :\n: <em>$2</em>\nVeuillez confirmer que vous désirez réellement recréer cette page.",
        "confirmrecreate-noreason": "L’utilisat{{GENDER:$1|eur|rice}} [[User:$1|$1]] ([[User talk:$1|Discussion]]) a supprimé cette page, alors que vous aviez commencé à la modifier. Veuillez confirmer que vous désirez réellement recréer cette page.",
        "recreate": "Recréer",
+       "confirm-purge-title": "Détruire cette page",
        "confirm_purge_button": "Confirmer",
        "confirm-purge-top": "Voulez-vous rafraîchir cette page (purger le cache) ?",
        "confirm-purge-bottom": "Purger une page l’efface du cache de rendu et force sa dernière version à être régénérée et affichée.",
        "htmlform-user-not-valid": "<strong>$1</strong> n’est pas un nom d’utilisateur valide.",
        "logentry-delete-delete": "$1 {{GENDER:$2|a supprimé}} la page $3",
        "logentry-delete-delete_redir": "$1 a {{GENDER:$2|supprimé}} la redirection vers $3 par écrasement",
-       "logentry-delete-restore": "$1 {{GENDER:$2|a restauré}} la page $3",
+       "logentry-delete-restore": "$1 {{GENDER:$2|a restauré}} la page $3 ($4)",
+       "logentry-delete-restore-nocount": "$1 {{GENDER:$2|a restauré}} la page $3",
+       "restore-count-revisions": "{{PLURAL:$1|1 révision|$1 révisions}}",
+       "restore-count-files": "{{PLURAL:$1|1 fichier|$1 fichiers}}",
        "logentry-delete-event": "$1 {{GENDER:$2|a modifié}} la visibilité {{PLURAL:$5|d'un événement du journal|de $5 événements du journal}} sur $3: $4",
        "logentry-delete-revision": "$1 {{GENDER:$2|a modifié}} la visibilité {{PLURAL:$5|d'une révision|de $5 révisions}} sur la page $3 : $4",
        "logentry-delete-event-legacy": "$1 {{GENDER:$2|a modifié}} la visibilité des événements du journal sur $3",
        "special-characters-group-thai": "thaï",
        "special-characters-group-lao": "laotien",
        "special-characters-group-khmer": "khmer",
+       "special-characters-group-canadianaboriginal": "Aborigène canadien",
        "special-characters-title-endash": "tiret demi-cadratin",
        "special-characters-title-emdash": "tiret cadratin",
        "special-characters-title-minus": "signe moins",
        "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",
-       "rawhtml-notallowed": "Les balises &lt;html&gt; ne peuvent pas être utilisées en dehors des pages normales."
+       "rawhtml-notallowed": "Les balises &lt;html&gt; ne peuvent pas être utilisées en dehors des pages normales.",
+       "gotointerwiki": "Quitter {{SITENAME}}",
+       "gotointerwiki-invalid": "Le titre spécifié n’est pas valide.",
+       "gotointerwiki-external": "Vous allez quitter {{SITENAME}} pour visiter [[$2]], qui est un site web distinct.\n\n[$1 Cliquer ici pour continuer vers $1].",
+       "undelete-cantedit": "Vous ne pouvez pas annuler la suppression de cette page car vous n’êtes pas autorisé à la modifier.",
+       "undelete-cantcreate": "Vous ne pouvez pas annuler la suppression de cette page car il n’existe pas de page avec ce nom, et vous n’êtes pas autorisé à la créer."
 }
index 23b5493..bda554a 100644 (file)
        "externaldberror": "Ou ben na fôta est arrevâye avouéc la bâsa de balyês d’ôtentificacion de defôr ou ben vos éte pas ôtorisâ{{GENDER:||ye}} a betar a jorn voutron comptio de defôr.",
        "login": "Branchement",
        "nav-login-createaccount": "Sè branchiér ou ben fâre un comptio",
-       "userlogin": "Sè branchiér ou ben fâre un comptio",
-       "userloginnocreate": "Sè branchiér",
        "logout": "Sè dèbranchiér",
        "userlogout": "Dèbranchement",
        "notloggedin": "Pas branchiê",
        "userlogin-noaccount": "Vos éd p’oncor un comptio ?",
        "userlogin-joinproject": "Rejuegnéd {{SITENAME}}",
-       "nologin": "Vos éd p’oncor un comptio ? $1.",
-       "nologinlink": "Féte un comptio",
        "createaccount": "Fâre un comptio",
-       "gotaccount": "Vos éd ja un comptio ? $1.",
-       "gotaccountlink": "Branchiéd-vos",
-       "userlogin-resetlink": "Vos éd oubliâ voutros dètalys de branchement ?",
        "userlogin-resetpassword-link": "Contresegno oubliâ ?",
        "userlogin-helplink2": "Éde u branchement",
        "userlogin-loggedin": "Vos éte ja branchiê{{GENDER:$1||e}} coment {{GENDER:$1|$1}}.\nEmpleyéd lo formulèro ce-desot por vos branchiér coment un ôtr’utilisator.",
        "createacct-another-email-ph": "Buchiéd l’adrèce èlèctronica",
        "createaccountmail": "Empleyér un contresegno temporèro pas de sûr et lo mandar a l’adrèce èlèctronica spècifiâye",
        "createacct-realname": "Veré nom (u chouèx)",
-       "createaccountreason": "Rêson :",
        "createacct-reason": "Rêson",
        "createacct-reason-ph": "Porquè vos féte un ôtro comptio",
        "createacct-submit": "Féte voutron comptio",
        "right-editsemiprotected": "Changiér les pâges protègiêes avouéc « {{int:protect-level-autoconfirmed}} »",
        "right-editcontentmodel": "Changiér lo modèlo de contegnu d’una pâge",
        "right-editinterface": "Changiér l’entredoux utilisator",
-       "right-editusercssjs": "Changiér los fichiérs CSS et JavaScript d’ôtros utilisators",
        "right-editusercss": "Changiér los fichiérs CSS d’ôtros utilisators",
        "right-edituserjs": "Changiér los fichiérs JavaScript d’ôtros utilisators",
        "right-editmyusercss": "Changiér los voutros fichiérs CSS utilisator",
        "rcshowhidecategorization": "$1 la catègorisacion de les pâges",
        "rcshowhidecategorization-show": "Montrar",
        "rcshowhidecategorization-hide": "Cachiér",
-       "rclinks": "Montrar los $1 dèrriérs changements fêts pendent los $2 jorns passâs<br />$3.",
+       "rclinks": "Montrar los $1 dèrriérs changements fêts pendent los $2 jorns passâs",
        "diff": "dif",
        "hist": "hist",
        "hide": "Cachiér",
        "undeleteviewlink": "vêre",
        "undeleteinvert": "Envèrsar lo chouèx",
        "undeletecomment": "Rêson :",
-       "undeletedrevisions": "$1 {{PLURAL:$1|vèrsion refêta|vèrsions refêtes}}",
-       "undeletedrevisions-files": "$1 vèrsion{{PLURAL:$1||s}} et $2 fichiér{{PLURAL:$2||s}} refêts",
-       "undeletedfiles": "$1 {{PLURAL:$1|fichiér refêt|fichiérs refêts}}",
        "cannotundelete": "Falyita de la rèstoracion :\n$1",
        "undeletedpage": "<strong>$1 est étâye refêta</strong>\n\nVêde lo [[Special:Log/delete|jornâl de les suprèssions]] por avêr na lista de les novèles suprèssions et rèstoracions.",
        "undelete-header": "Vêde lo [[Special:Log/delete|jornâl de les suprèssions]] por avêr les pâges suprimâyes dês pou.",
        "logentry-rights-autopromote": "$1 est étâ nomâ ôtomaticament de $4 a $5",
        "logentry-upload-upload": "$1 {{GENDER:$2|at tèlèchargiê}} $3",
        "rightsnone": "(nion)",
-       "revdelete-summary": "rèsumâ du changement",
        "feedback-adding": "Aponsa de voutros avis a la pâge...",
        "feedback-bugcheck": "Formidâblo ! Controlâd simplament qu’o est pas yona de les [$1 cofieries ja cognues].",
        "feedback-bugnew": "J’é controlâ. Signalar una cofierie novèla",
index db9be6f..d83b8ca 100644 (file)
        "right-editsemiprotected": "Sidjen bewerke, diar mä „{{int:protect-level-autoconfirmed}}“ seekert san.",
        "right-editcontentmodel": "Det model faan det sidj bewerke",
        "right-editinterface": "Brüker-skak bewerke",
-       "right-editusercssjs": "CSS- an JavaScript-datein faan ööder brükern bewerke",
        "right-editusercss": "CSS-datein faan ööder brükern bewerke",
        "right-edituserjs": "JavaScript-datein faan ööder brükern bewerke",
        "right-editmyusercss": "Aanj CSS-datein bewerke",
        "rcshowhidecategorization": "$1 kategorisiarang faan sidjen",
        "rcshowhidecategorization-show": "Wise",
        "rcshowhidecategorization-hide": "Fersteeg",
-       "rclinks": "Wise a leetst $1 feranrangen faan a leetst $2 daar.<br />$3",
+       "rclinks": "Wise a leetst $1 feranrangen faan a leetst $2 daar.",
        "diff": "ferskeel",
        "hist": "werjuunen",
        "hide": "Fersteeg",
        "undeleteviewlink": "Uunluke",
        "undeleteinvert": "Ütjwool amdrei",
        "undeletecomment": "Grünj:",
-       "undeletedrevisions": "{{PLURAL:$1|1 werjuun|$1 werjuunen}} weder iinsteld",
-       "undeletedrevisions-files": "{{PLURAL:$1|1 werjuun|$1 werjuunen}} an {{PLURAL:$2|1 datei|$2 datein}} weder iinsteld",
-       "undeletedfiles": "{{PLURAL:$1|1 datei|$1 datein }} weder iinsteld",
        "cannotundelete": "Weder iinstelen hää ei loket:\n$1",
        "undeletedpage": "'''„$1“''' as weder iinsteld wurden.\nUun't [[Special:Log/delete|logbuk faan stregen sidjen]] stun a stregen an weder iinsteld sidjen.",
        "undelete-header": "Luke uun't [[Special:Log/delete|logbuk för stregen sidjen]] efter stregen sidjen faan a leetst tidj.",
index 159834d..1b43b5b 100644 (file)
        "yourdomainname": "Il to domini",
        "login": "Jentre",
        "nav-login-createaccount": "Regjistriti o jentre",
-       "userlogin": "Regjistriti o jentre",
-       "userloginnocreate": "Jentre",
        "logout": "Jes",
        "userlogout": "Jes",
        "notloggedin": "No tu sês jentrât",
        "userlogin-noaccount": "No âstu ancjemò une identitât?",
        "userlogin-joinproject": "Regjstriti du {{SITENAME}}",
-       "nologin": "No âstu ancjemò une identitât par jentrâ? '''$1'''.",
-       "nologinlink": "Creile cumò",
        "createaccount": "Cree une gnove identitât",
-       "gotaccount": "Âstu za une identitât? '''$1'''.",
-       "gotaccountlink": "Jentre",
-       "userlogin-resetlink": "Dismenteât i detais par jentrâ?",
        "userlogin-resetpassword-link": "Password dismenteade?",
        "userlogin-helplink2": "Judimi a jentrâ",
        "createacct-emailoptional": "Direzion email (opzionâl)",
        "createacct-email-ph": "Scrîl la tô direzion email",
        "createaccountmail": "par pueste eletroniche",
-       "createaccountreason": "Reson:",
        "createacct-submit": "Cree il to profîl utent",
        "createacct-benefit-heading": "{{SITENAME}} al è fat di int come te",
        "createacct-benefit-body1": "$1 {{PLURAL:$1|contribût|contribûts}}",
        "saveprefs": "Salve lis preferencis",
        "restoreprefs": "Torne a lis impostazions predeterminadis",
        "prefs-editing": "Cambiament",
-       "rows": "Riis",
-       "columns": "Colonis:",
        "searchresultshead": "Ricercje",
        "stub-threshold": "Valôr minim pe formatazion dai <a href=\"#\" class=\"stub\">leams aboç</a> (bytes):",
        "recentchangesdays": "Numar di zornadis di mostrâ tai ultins cambiaments:",
        "rcshowhidemine": "$1 miei cambiaments",
        "rcshowhidemine-show": "Mostre",
        "rcshowhidemine-hide": "plate",
-       "rclinks": "Mostre i ultins $1 cambiaments tes ultimis $2 zornadis<br />$3",
+       "rclinks": "Mostre i ultins $1 cambiaments tes ultimis $2 zornadis",
        "diff": "difarencis",
        "hist": "stor",
        "hide": "plate",
        "logentry-upload-upload": "$1 {{GENDER:$2|al à tirât su}} $3",
        "searchsuggest-search": "Ricercje",
        "searchsuggest-containing": "che al à dentri...",
-       "api-error-unclassified": "Al è capitât un erôr no cognossût",
        "expandtemplates": "Espant i modei",
        "expand_templates_output": "Risultât",
        "expand_templates_ok": "Va ben",
index 85fee97..5c19a9f 100644 (file)
@@ -16,7 +16,8 @@
                        "Macofe",
                        "Xð",
                        "Robin van der Vliet",
-                       "PiefPafPier"
+                       "PiefPafPier",
+                       "Catrope"
                ]
        },
        "tog-underline": "Keppelings ûnderstreekje:",
        "right-protect": "Befeiligingsnivo's feroarje en beskerme siden bewurkje",
        "right-editprotected": "Befeilige siden bewurkje (sûnder cascading-befeiliging)",
        "right-editinterface": "Brûkersinterface bewurkje",
-       "right-editusercssjs": "De CSS- en JS-triemmen fan oare brûkers bewurkje",
        "right-editusercss": "De CSS-JS-triemmen fan oare brûkers bewurkje",
        "right-edituserjs": "De JS-triemmen fan oare brûkers bewurkje",
        "right-rollback": "Gau de lêste bewurking(s) fan in brûker fan in side tebekdraaie",
        "rcshowhidemine": "$1 eigen bewurkings",
        "rcshowhidemine-show": "werjaan",
        "rcshowhidemine-hide": "ferbergje",
-       "rclinks": "Jou $1 nije feroarings yn de lêste $2 dagen<br /> $3",
+       "rclinks": "Jou $1 nije feroarings yn de lêste $2 dagen",
        "diff": "ferskil",
        "hist": "skiednis",
        "hide": "gjin",
index 8509a8a..637bdfb 100644 (file)
        "externaldberror": "Bhí earráid bhunachair sonraí ann maidir le fíordheimhniú seachtrach, nóThere was either an external authentication database error or you are not allowed to update your external account.",
        "login": "Logáil isteach",
        "nav-login-createaccount": "Logáil isteach",
-       "userlogin": "Logáil isteach / cruthaigh cuntas",
-       "userloginnocreate": "Logáil isteach",
        "logout": "Logáil amach",
        "userlogout": "Logáil amach",
        "notloggedin": "Níl tú logáilte isteach",
        "userlogin-noaccount": "Níl cuntas agat?",
        "userlogin-joinproject": "Cláraigh le {{SITENAME}}",
-       "nologin": "Nach bhfuil logáil isteach agat? '''$1'''.",
-       "nologinlink": "Cruthaigh cuntas",
        "createaccount": "Cruthaigh cuntas nua",
-       "gotaccount": "An bhfuil cuntas agat cheana féin? '''$1'''.",
-       "gotaccountlink": "Logáil isteach",
-       "userlogin-resetlink": "Sonraí logála isteach dearmadta agat?",
        "userlogin-resetpassword-link": "Pasfhocal dearmadta?",
        "userlogin-helplink2": "Cabhair le logáil isteach",
        "createacct-emailrequired": "Seoladh ríomhphoist",
        "createacct-email-ph": "Iontráil do sheoladh ríomhphoist",
        "createacct-another-email-ph": "Iontráil seoladh ríomhphoist",
        "createaccountmail": "le ríomhphost",
-       "createaccountreason": "Fáth:",
        "createacct-reason": "Cúis",
        "createacct-submit": "Cruthaigh do chuntas",
        "createacct-another-submit": "Cruthaigh cuntas eile",
        "saveprefs": "Sábháil",
        "restoreprefs": "Cuir ar ais gach sainrogha réamhshocraithe",
        "prefs-editing": "Eagarthóireacht",
-       "rows": "Sraitheanna",
-       "columns": "Colúin",
        "searchresultshead": "Cuardaigh",
        "stub-threshold-disabled": "Díchumasaithe",
        "recentchangesdays": "Méid laethanta le taispeáint sna hathruithe is déanaí:",
        "saveusergroups": "Sabháil cnuasach úsáideora",
        "userrights-groupsmember": "Ball de:",
        "userrights-reason": "Fáth:",
-       "userrights-notallowed": "Níl cead ag do chuntas ceartanna úsáideora a athrú.",
        "group": "Grúpa:",
        "group-user": "Úsáideoirí",
        "group-bot": "Róbónna",
        "rcshowhidemine": "$1 mo chuid athruithe",
        "rcshowhidemine-show": "Taispeáin",
        "rcshowhidemine-hide": "Folaigh",
-       "rclinks": "Taispeáin an $1 athrú is déanaí sa $2 lá seo caite<br />$3",
+       "rclinks": "Taispeáin an $1 athrú is déanaí sa $2 lá seo caite",
        "diff": "difr",
        "hist": "stair",
        "hide": "Folaigh",
        "undeleteviewlink": "Amharc",
        "undeleteinvert": "Cuir an roghnú bun os cionn",
        "undeletecomment": "Tuairisc:",
-       "undeletedrevisions": "{{PLURAL:$1|Leagan amháin|$1 leagain}} díscriosta",
-       "undeletedrevisions-files": "{{PLURAL:$1|Leagan amháin|$1 leagain}} agus {{PLURAL:$2|comhad amháin|$2 comhaid}} a chur ar ais",
-       "undeletedfiles": "{{PLURAL:$1|Comhad amháin|$1 comhaid}} díscriosta",
        "undelete-search-box": "Cuardaigh leathanaigh scriosta",
        "undelete-search-submit": "Cuardaigh",
        "namespace": "Ainmspás:",
index 42b617f..004936f 100644 (file)
@@ -6,7 +6,8 @@
                        "Emperyan",
                        "Reedy",
                        "Meisam",
-                       "아라"
+                       "아라",
+                       "Stephanecbisson"
                ]
        },
        "tog-underline": "Baalantıların altını çiz",
        "yourdomainname": "Domen adınız",
        "login": "Gir",
        "nav-login-createaccount": "Gir / esap yarat",
-       "userlogin": "Gir / esap yarat",
        "logout": "Sessiyanı kapat",
        "userlogout": "Oturmaa kapat",
        "notloggedin": "Sessiya diil açık",
-       "nologin": "Henez aza olmadınız? '''$1'''.",
-       "nologinlink": "Esap yarat",
        "createaccount": "Eni esap aç",
-       "gotaccount": "Taa ilerdä esap açtınızmı? '''$1'''.",
-       "gotaccountlink": "Herliim ilerdän esap açtıysanız girin bu baalantıdan.",
        "createaccountmail": "e-maillan",
        "badretype": "Parollar angılarını girdiniz uymêêr.",
        "userexists": "Kullanıcı adı ani girdiniz kullanılêr. Yalvarêrız farklı bir kullanıcı adı seçin.",
        "rcshowhideanons": "anonim kullanıcıları $1",
        "rcshowhidepatr": "bakılmış diişmäkleri $1",
        "rcshowhidemine": "diişmäklerimi $1",
-       "rclinks": "Göster bitki $1 diişmäklii ani yapıldı $2 gündä;<br /> $3",
+       "rclinks": "Göster bitki $1 diişmäklii ani yapıldı $2 gündä;",
        "diff": "fark",
        "hist": "geçmiş",
        "hide": "sakla",
index e3a2daf..3eed46d 100644 (file)
        "externaldberror": "外部验证数据库出错,或倷更新伓正倷𠮶外部帐户。",
        "login": "登入",
        "nav-login-createaccount": "登入/新开只帐户",
-       "userlogin": "登入/新开只帐户",
-       "userloginnocreate": "登入",
        "logout": "退出",
        "userlogout": "退出",
        "notloggedin": "冇登入",
-       "nologin": "倷冇得帐户啊? '''$1'''。",
-       "nologinlink": "新开只帐户",
        "createaccount": "新开只帐户",
-       "gotaccount": "有喽帐户? '''$1'''.",
-       "gotaccountlink": "登入",
-       "userlogin-resetlink": "𫍧记汝𠮶登录信息?",
        "createaccountmail": "通过email",
-       "createaccountreason": "原因:",
        "badretype": "倷输𠮶密码伓合。",
        "userexists": "汝输𠮶用户名系人家𠮶,拣过只啰!",
        "loginerror": "登入错误",
        "prefs-misc": "杂项",
        "saveprefs": "存到参数",
        "prefs-editing": "编写",
-       "rows": "横:",
-       "columns": "竖:",
        "searchresultshead": "设置寻到𠮶结果",
        "stub-threshold": "<a href=\"#\" class=\"stub\">细文链接</a>格式门槛:",
        "recentchangesdays": "最近更改中𠮶显示日数:",
        "rcshowhideanons": "$1匿名用户𠮶编辑",
        "rcshowhidepatr": "$1检查过𠮶编辑",
        "rcshowhidemine": "$1偶𠮶编辑",
-       "rclinks": "显示最晏$2日之内最新𠮶$1回改动。<br />$3",
+       "rclinks": "显示最晏$2日之内最新𠮶$1回改动。",
        "diff": "差异",
        "hist": "历史",
        "hide": "弆到",
        "undeletelink": "还原",
        "undeleteviewlink": "望吖",
        "undeletecomment": "评论:",
-       "undeletedrevisions": "$1只修改版本恢复正嘞",
-       "undeletedrevisions-files": "$1只修改版本同$2只档案恢复正嘞",
-       "undeletedfiles": "$1只档案恢复正嘞",
        "cannotundelete": "反删除伓正;话伓定别𠮶人先倷恢复嘞个只页面。",
        "undeletedpage": "'''$1恢复正嘞'''\n\n望吖[[Special:Log/delete|删除日志]]𠮶删除同恢复记录。",
        "undelete-header": "要查最晏𠮶记录𠮶话请望[[Special:Log/delete|删除日志]]。",
index 3a58c92..e5947fe 100644 (file)
        "externaldberror": "外部驗證資料庫出錯,或倷更新伓正倷嗰外部帳戶。",
        "login": "登入",
        "nav-login-createaccount": "登入/新開隻帳戶",
-       "userlogin": "登入/新開隻帳戶",
-       "userloginnocreate": "登入",
        "logout": "退出",
        "userlogout": "退出",
        "notloggedin": "冇登入",
-       "nologin": "汝冇帳戶嘎? '''$1'''。",
-       "nologinlink": "新開隻帳戶",
        "createaccount": "新開隻帳戶",
-       "gotaccount": "有帳戶哩? '''$1'''。",
-       "gotaccountlink": "登入",
-       "userlogin-resetlink": "誺記汝嗰登錄信息?",
        "createaccountmail": "通過email",
-       "createaccountreason": "原因:",
        "badretype": "汝捺嗰密碼伓合。",
        "userexists": "汝輸嗰用戶名係人家嗰,揀過隻囉!",
        "loginerror": "登入錯誤",
        "prefs-misc": "雜項",
        "saveprefs": "存到參數",
        "prefs-editing": "編寫",
-       "rows": "橫:",
-       "columns": "豎:",
        "searchresultshead": "設置尋到嗰結果",
        "stub-threshold": "<a href=\"#\" class=\"stub\">細文連結</a>格式門檻:",
        "recentchangesdays": "頂晏嗰改動嗰顯示日數:",
        "rcshowhideanons": "$1匿名用戶嗰編輯",
        "rcshowhidepatr": "$1檢查過嗰編輯",
        "rcshowhidemine": "$1我嗰編輯",
-       "rclinks": "顯示頂晏$2日之內頂新嗰$1回改動。<br />$3",
+       "rclinks": "顯示頂晏$2日之內頂新嗰$1回改動。",
        "diff": "差異",
        "hist": "歷史",
        "hide": "弆到",
        "undeletelink": "還原",
        "undeleteviewlink": "望吖",
        "undeletecomment": "評論:",
-       "undeletedrevisions": "$1隻修改版本還原正哩",
-       "undeletedrevisions-files": "$1隻修改版本同$2隻檔案還原正哩",
-       "undeletedfiles": "$1隻檔案還原正哩",
        "cannotundelete": "反刪除伓正;話伓定別嗰人先倷恢復嘞箇隻頁面。",
        "undeletedpage": "'''$1還原正哩'''\n\n望吖[[Special:Log/delete|刪除日誌]]嗰刪除同恢復記錄。",
        "undelete-header": "要查頂晏嗰記錄嗰話請望[[Special:Log/delete|刪除日誌]]。",
index 5bd8f3b..eac2c50 100644 (file)
        "externaldberror": "Thachair mearachd le dearbhadh an stòir-dhàta air neo chan eil cead agad an cunntas agad air an taobh a-muigh ùrachadh.",
        "login": "Log a-steach",
        "nav-login-createaccount": "Log a-steach / cruthaich cunntas",
-       "userlogin": "Log a-steach / cruthaich cunntas",
-       "userloginnocreate": "Log a-steach",
        "logout": "Log a-mach",
        "userlogout": "Log a-mach",
        "notloggedin": "Chan eil thu air logadh a-steach",
        "userlogin-noaccount": "Nach eil cunntas agad?",
        "userlogin-joinproject": "Gabh pàirt ann an {{SITENAME}}",
-       "nologin": "Nach eil cunntas agad fhathast? $1.",
-       "nologinlink": "Cruthaich cunntas",
        "createaccount": "Cruthaich cunntas ùr",
-       "gotaccount": "A bheil cunntas agad mu thràth? $1.",
-       "gotaccountlink": "Log a-steach",
-       "userlogin-resetlink": "Na dhìochuimhnich thu d' ainm is facal-faire?",
        "userlogin-resetpassword-link": "Na dhìochuimhnich thu am facal-faire agad?",
        "userlogin-helplink2": "Taic le logadh a-steach",
        "userlogin-loggedin": "Chaidh do logadh a-steach mar $1 mu thràth.\nCleachd am foirm gu h-ìosal airson logadh a-steach mar chleachdaiche eile.",
        "createacct-another-email-ph": "Cuir a-steach seòladh puist-d",
        "createaccountmail": "Cleachd facal-faire sealach air thuaiream agus cuir e dhan phost-d a tha 'ga shònrachadh gu h-ìosal",
        "createacct-realname": "Fìor-ainm (roghainneil)",
-       "createaccountreason": "Adhbhar:",
        "createacct-reason": "Adhbhar",
        "createacct-reason-ph": "Carson a tha thu a' cruthachadh cunntas eile?",
        "createacct-submit": "Cruthaich an cunntas agad",
        "right-editsemiprotected": "Cead gus duilleagan le dìon \"{{int:protect-level-autoconfirmed}}\" a dheasachadh",
        "right-editcontentmodel": "Deasaich modail susbaint duilleige",
        "right-editinterface": "Cead gus eadar-aghaidh nan cleachdaichean a dheasachadh",
-       "right-editusercssjs": "Cead gus faidhlichean CSS 's JavaScript càich a dheasachadh",
        "right-editusercss": "Cead gus faidhlichean CSS càich a dheasachadh",
        "right-edituserjs": "Cead gus faidhlichean JavaScript càich a dheasachadh",
        "right-editmyusercss": "Cead gus faidhlichean CSS agad fhèin a dheasachadh",
        "rcshowhidemine": "$1 na mùthaidhean agam",
        "rcshowhidemine-show": "Seall",
        "rcshowhidemine-hide": "Falaich",
-       "rclinks": "Seall {{PLURAL:$1|an $1 mhùthadh|an $1 mhùthadh|na $1 mùthaidhean|am $1 mùthadh}} mu dheireadh thairis air {{PLURAL:$2|an $2 latha|an $2 latha|na $2 làithean|am $2 latha}} mu dheireadh<br />$3",
+       "rclinks": "Seall {{PLURAL:$1|an $1 mhùthadh|an $1 mhùthadh|na $1 mùthaidhean|am $1 mùthadh}} mu dheireadh thairis air {{PLURAL:$2|an $2 latha|an $2 latha|na $2 làithean|am $2 latha}} mu dheireadh",
        "diff": "diofar",
        "hist": "eachdr",
        "hide": "Falaich",
        "undeleteviewlink": "seall",
        "undeleteinvert": "Ais-thionndaidh na thagh thu",
        "undeletecomment": "Adhbhar:",
-       "undeletedrevisions": "Chaidh $1 {{PLURAL:$1|mhùthadh|mhùthadh|mùthaidhean|mùthadh}} aiseag",
-       "undeletedrevisions-files": "Chaidh $1 {{PLURAL:$1|mhùthadh|mhùthadh|mùthaidhean|mùthadh}} agus $2 {{PLURAL:$2|fhaidhle|fhaidhle|faidhlichean|faidhle}} aiseag",
-       "undeletedfiles": "Chaidh $1 {{PLURAL:$1|fhaidhle|fhaidhle|faidhlichean|faidhle}} aiseag",
        "cannotundelete": "Dh’fhàillig neo-dhèanamh an sguabaidh às no co-dhiù cuid dheth:\n$1",
        "undeletedpage": "<strong>Chaidh $1 aiseag</strong>\n\nThoir sùil air [[Special:Log/delete|loga an sguabaidh às]] airson clàr air na chaidh a sguabadh às no aiseag o chionn goirid.",
        "undelete-header": "Faic [[Special:Log/delete|loga an sguabaidh às]] airson duilleagan a chaidh a sguabadh às o chionn goirid.",
        "logentry-upload-overwrite": "Luchdaich $1 tionndadh ùr de $3 suas",
        "logentry-upload-revert": "Luchdaich $1 $3 suas",
        "rightsnone": "(chan eil gin)",
-       "revdelete-summary": "gearr-chunntas an deasachaidh",
        "feedback-adding": "A' cur beachd ri duilleag...",
        "feedback-bugcheck": "Taghta! Dearbhaich nach eil e air [$1 liosta nam bugaichean air a bheil sinn eòlach] mar-thà.",
        "feedback-bugnew": "Dhearbh mi seo. Dèan aithris air buga ur",
index e79e839..bcc0820 100644 (file)
        "index-category": "Páxinas indexadas",
        "noindex-category": "Páxinas non indexadas",
        "broken-file-category": "Páxinas con ligazóns rotas cara a ficheiros",
+       "categoryviewer-pagedlinks": "($1) ($2)",
+       "category-header-numerals": "$1–$2",
        "about": "Acerca de",
        "article": "Páxina de contido",
        "newwindow": "(abre unha ventá nova)",
        "redirectedfrom": "(Redirixido desde \"$1\")",
        "redirectpagesub": "Páxina de redirección",
        "redirectto": "Redirixir cara a:",
-       "lastmodifiedat": "A última modificación desta páxina foi o $1 ás $2.",
+       "lastmodifiedat": "A última edición desta páxina foi o $1 ás $2.",
        "viewcount": "Esta páxina foi visitada {{PLURAL:$1|unha vez|$1 veces}}.",
        "protectedpage": "Páxina protexida",
        "jumpto": "Ir a:",
        "versionrequired": "Necesítase a versión $1 de MediaWiki",
        "versionrequiredtext": "Necesítase a versión $1 de MediaWiki para utilizar esta páxina. Vexa [[Special:Version|a páxina da versión]].",
        "ok": "Aceptar",
+       "pagetitle": "$1 - {{SITENAME}}",
+       "pagetitle-view-mainpage": "{{SITENAME}}",
+       "backlinksubtitle": "← $1",
        "retrievedfrom": "Traído desde \"$1\"",
        "youhavenewmessages": "{{PLURAL:$3|Ten}} $1 ($2).",
        "youhavenewmessagesfromusers": "{{PLURAL:$4|Ten}} $1 {{PLURAL:$3|doutro usuario|de $3 usuarios}} ($2).",
        "site-atom-feed": "Fonte de novas Atom de $1",
        "page-rss-feed": "Fonte de novas RSS de \"$1\"",
        "page-atom-feed": "Fonte de novas Atom de \"$1\"",
+       "feed-atom": "Atom",
+       "feed-rss": "RSS",
        "red-link-title": "$1 (a páxina aínda non existe)",
        "sort-descending": "Orde descendente",
        "sort-ascending": "Orde ascendente",
        "nocookiesnew": "A conta de usuario foi creada, pero non accedeu ao sistema.\n{{SITENAME}} para rexistrar os usuarios.\nVostede ten as cookies deshabilitadas.\nPor favor, habilíteas e logo acceda ao sistema co seu novo nome de usuario e contrasinal.",
        "nocookieslogin": "{{SITENAME}} usa cookies para rexistrar os usuarios.\nVostede ten as cookies deshabilitadas.\nPor favor, habilíteas e inténteo de novo.",
        "nocookiesfornew": "Non se creou a conta de usuario porque non puidemos confirmar a súa orixe.\nAsegúrese de que ten as cookies habilitadas, volva cargar a páxina e inténteo de novo.",
+       "nocookiesforlogin": "{{int:nocookieslogin}}",
        "createacct-loginerror": "A conta creouse correctamente, pero non se puido conectar automaticamente. Vaia ao [[Special:UserLogin|acceso manual]].",
        "noname": "Non especificou un nome de usuario válido.",
        "loginsuccesstitle": "Accedeu ao sistema",
        "readonlywarning": "<strong>Atención: Pechouse a base de datos para facer mantemento, polo que non vai poder gardar as súas edicións polo de agora.</strong>\nSe cadra, pode cortar e pegar o texto nun ficheiro de texto e gardalo para despois.\n\nO administrador do sistema que a pechou deu esta explicación: $1",
        "protectedpagewarning": "'''Aviso: Esta páxina foi protexida de xeito que só os usuarios con privilexios de administrador a poidan editar.'''\nVelaquí está a última entrada no rexistro, por se quere consultala:",
        "semiprotectedpagewarning": "'''Nota:''' Esta páxina foi protexida de xeito que só os usuarios rexistrados a poidan editar.\nVelaquí está a última entrada no rexistro, por se quere consultala:",
-       "cascadeprotectedwarning": "<strong>Atención:</strong> Protexeuse esta páxina de xeito que só a poden editar os usuarios con privilexios de administrador debido a que está transcluída {{PLURAL:$1|na seguinte páxina protexida|nas seguintes páxinas protexidas}} coa opción \"protección en serie\" activada:",
+       "cascadeprotectedwarning": "<strong>Atención:</strong> Protexeuse esta páxina de xeito que só a poden editar os usuarios con [[Special:ListGroupRights|privilexios específicos]] debido a que está transcluída {{PLURAL:$1|na seguinte páxina protexida|nas seguintes páxinas protexidas}} coa opción \"protección en serie\" activada:",
        "titleprotectedwarning": "'''Aviso: Esta páxina foi protexida de xeito que [[Special:ListGroupRights|só algúns usuarios]] a poidan crear.'''\nVelaquí está a última entrada no rexistro, por se quere consultala:",
        "templatesused": "{{PLURAL:$1|Modelo usado|Modelos usados}} nesta páxina:",
        "templatesusedpreview": "{{PLURAL:$1|Modelo usado|Modelos usados}} nesta vista previa:",
        "template-semiprotected": "(semiprotexido)",
        "hiddencategories": "Esta páxina forma parte {{PLURAL:$1|dunha categoría oculta|de $1 categorías ocultas}}:",
        "edittools": "<!-- O texto que apareza aquí mostrarase por debaixo dos formularios de edición e envío. -->",
+       "edittools-upload": "-",
        "nocreatetext": "{{SITENAME}} ten restrinxida a posibilidade de crear páxinas novas.\nPode volver e editar unha páxina que xa existe ou ben [[Special:UserLogin|acceder ao sistema ou crear unha conta]].",
        "nocreate-loggedin": "Non ten os permisos necesarios para crear páxinas novas.",
        "sectioneditnotsupported-title": "A edición de seccións non está soportada",
        "content-model-text": "texto simple",
        "content-model-javascript": "JavaScript",
        "content-model-css": "CSS",
+       "content-model-json": "JSON",
        "content-json-empty-object": "Obxecto baleiro",
        "content-json-empty-array": "Matriz baleira",
        "deprecated-self-close-category": "Páxinas que usan etiquetas HTML de auto-pechado non válidas",
        "mergehistory-comment": "\"[[:$1]]\" fusionouse con \"[[:$2]]\": $3",
        "mergehistory-same-destination": "A páxina de orixe e a páxina de destino non poden ser a mesma",
        "mergehistory-reason": "Motivo:",
+       "mergehistory-revisionrow": "$1 ($2) $3 . . $4 $5 $6",
        "mergelog": "Rexistro de fusións",
        "revertmerge": "Desfacer a fusión",
        "mergelogpagetext": "A continuación hai unha lista coas fusións máis recentes do historial dunha páxina co doutra.",
        "youremail": "Correo electrónico:",
        "username": "Nome de {{GENDER:$1|usuario|usuaria}}:",
        "prefs-memberingroups": "{{GENDER:$2|Membro}} {{PLURAL:$1|do grupo|dos grupos}}:",
+       "prefs-memberingroups-type": "$1",
        "group-membership-link-with-expiry": "$1 (ata $2)",
        "prefs-registration": "Data e hora de rexistro:",
+       "prefs-registration-date-time": "$1",
        "yourrealname": "Nome real:",
        "yourlanguage": "Lingua:",
        "yourvariant": "Variante de lingua para os contidos:",
        "saveusergroups": "Gardar os grupos {{GENDER:$1|do usuario|da usuaria}}",
        "userrights-groupsmember": "Membro de:",
        "userrights-groupsmember-auto": "Membro implícito de:",
-       "userrights-groups-help": "Pode cambiar os grupos aos que {{GENDER:$1|o usuario|a usuaria}} pertence:\n* Se a caixa ten un sinal (✓) significa que {{GENDER:$1|o usuario|a usuaria}} pertence a ese grupo.\n* Se, pola contra, non o ten, significa que non pertence.\n* Un asterisco (*) indica que non pode eliminar o grupo unha vez que o engadiu, e viceversa.\n* Un # indica que só se pode atrasar a data de caducidade deste grupo; non se pode adiantar.",
+       "userrights-groupsmember-type": "$1",
+       "userrights-groups-help": "Pode cambiar os grupos aos que {{GENDER:$1|o usuario|a usuaria}} pertence:\n* Se a caixa ten un sinal (✓) significa que {{GENDER:$1|o usuario|a usuaria}} pertence a ese grupo.\n* Se, pola contra, non o ten, significa que non pertence.\n* Un asterisco (*) indica que non pode eliminar o grupo unha vez que o engadiu, e viceversa.\n* Un # indica que só se pode atrasar a data de caducidade de pertenza a este grupo; non se pode adiantar.",
        "userrights-reason": "Motivo:",
        "userrights-no-interwiki": "Non ten os permisos necesarios para editar os dereitos de usuario noutros wikis.",
        "userrights-nodatabase": "A base de datos \"$1\" non existe ou non é local.",
        "userrights-changeable-col": "Os grupos que pode cambiar",
        "userrights-unchangeable-col": "Os grupos que non pode cambiar",
+       "userrights-irreversible-marker": "$1*",
+       "userrights-no-shorten-expiry-marker": "$1#",
        "userrights-expiry-current": "Caduca o $1",
        "userrights-expiry-none": "Non caduca",
        "userrights-expiry": "Caduca:",
        "userrights-expiry-options": "1 día:1 día,1 semana:1 semana,1 mes:1 mes,3 meses:3 meses,6 meses:6 meses,1 ano:1 ano",
        "userrights-invalid-expiry": "O tempo de caducidade para o grupo \"$1\" non é válido.",
        "userrights-expiry-in-past": "O tempo de caducidade para o grupo \"$1\" está no pasado.",
-       "userrights-cannot-shorten-expiry": "Non pode adiantar a data de caducidade do grupo \"$1\". Só os usuarios con permisos para engadir e eliminar este grupo poden adiantar datas de caducidade.",
+       "userrights-cannot-shorten-expiry": "Non pode adiantar a data de caducidade de pertenza ó grupo \"$1\". Só os usuarios con permisos para engadir e eliminar este grupo poden adiantar datas de caducidade.",
        "userrights-conflict": "Hai un conflito na modificación dos dereitos de usuario! Por favor, revíseo e confirme os seus cambios.",
        "group": "Grupo:",
        "group-user": "Usuarios",
        "right-editsemiprotected": "Editar páxinas protexidas con \"{{int:protect-level-autoconfirmed}}\"",
        "right-editcontentmodel": "Editar o modelo de contido dunha páxina",
        "right-editinterface": "Editar a interface de usuario",
-       "right-editusercssjs": "Editar os ficheiros CSS e JavaScript doutros usuarios",
        "right-editusercss": "Editar os ficheiros CSS doutros usuarios",
        "right-edituserjs": "Editar os ficheiros JavaScript doutros usuarios",
        "right-editmyusercss": "Editar os ficheiros CSS propios",
        "rcfilters-highlightmenu-help": "Seleccione unha cor para resaltar esta propiedade",
        "rcfilters-filterlist-noresults": "Non se atoparon filtros",
        "rcfilters-noresults-conflict": "Non se atoparon resultados porque os criterios de busca están en conflito.",
+       "rcfilters-state-message-subset": "Este filtro non ten efecto porque os seus resultados están incluídos dentro da seguinte procura, {{PLURAL:$2|filtro máis amplo|filtros máis amplos}} (probe a destacalo para distinguilo): $1",
        "rcfilters-state-message-fullcoverage": "Seleccionar tódolos filtros dun grupo é o mesmo que non seleccionar ningún, polo que este filtro non ten efecto. O grupo inclúeː $1",
        "rcfilters-filtergroup-registration": "Rexistro de usuario",
        "rcfilters-filter-registered-label": "Rexistrado",
        "rcfilters-filter-categorization-description": "Rexistros de páxinas engadidas ou borradas de categorías.",
        "rcfilters-filter-logactions-label": "Accións rexistradas",
        "rcfilters-filter-logactions-description": "Accións administrativas, creacións de conta, borrados de páxinas, subas de ficheiros....",
+       "rcfilters-hideminor-conflicts-typeofchange-global": "O filtro \"edicións menores\" está en conflito con un ou máis filtros Tipo de modificación, porque certos tipos de modificación non poden designarse como \"menores\". Os filtros en conflito están marcados na zona Filtros activos, arriba.",
+       "rcfilters-hideminor-conflicts-typeofchange": "Certos tipos de modificación non poden designarse como \"menores\", polo que este filtro entra en conflito cos seguintes filtros Tipo de modificaciónː $1",
+       "rcfilters-typeofchange-conflicts-hideminor": "Este filtro Tipo de modificación entra en conflito co filtro \"Modificacións menores\". Certos tipos de modificación non poden designarse como \"menores\".",
        "rcnotefrom": "A continuación {{PLURAL:$5|móstrase o cambio feito|móstranse os cambios feitos}} desde o <strong>$3</strong> ás <strong>$4</strong> (móstranse <strong>$1</strong> como máximo).",
+       "rclistfromreset": "Reinicializar a selección da data",
        "rclistfrom": "Mostrar os cambios novos desde o $3 ás $2",
        "rcshowhideminor": "$1 as edicións pequenas",
        "rcshowhideminor-show": "Mostrar",
        "rcshowhidecategorization": "$1 a categorización de páxinas",
        "rcshowhidecategorization-show": "Mostrar",
        "rcshowhidecategorization-hide": "Agochar",
-       "rclinks": "Mostrar os últimos $1 cambios nos últimos $2 días.<br />$3",
+       "rclinks": "Mostrar os últimos $1 cambios nos últimos $2 días.",
        "diff": "dif",
        "hist": "hist",
        "hide": "Agochar",
        "minoreditletter": "m",
        "newpageletter": "N",
        "boteditletter": "b",
+       "unpatrolledletter": "!",
        "number_of_watching_users_pageview": "[$1 {{PLURAL:$1|usuario|usuarios}} vixiando]",
        "rc_categories": "Limitar ás categorías (separadas por \"|\"):",
        "rc_categories_any": "Calquera das elixidas",
+       "rc-change-size": "$1",
        "rc-change-size-new": "$1 {{PLURAL:$1|byte|bytes}} despois da modificación",
        "newsectionsummary": "Nova sección: /* $1 */",
        "rc-enhanced-expand": "Mostrar os detalles",
        "php-uploaddisabledtext": "As cargas de ficheiros PHP están desactivadas. Por favor, comprobe a característica file_uploads.",
        "uploadscripted": "Este ficheiro contén código HTML ou script que pode producir erros ao ser interpretado polo navegador.",
        "upload-scripted-pi-callback": "Non se pode subir un ficheiro que conteña instrucións de procesamento de follas de estilo XML.",
+       "upload-scripted-dtd": "Non pode subir ficheiros SVG que conteñen unha declaración de DTD non estándar.",
        "uploaded-script-svg": "Atopouse un elemento de comandos \"$1\" no ficheiro SVG subido.",
        "uploaded-hostile-svg": "Atopouse CSS non seguro no elemento de estilo do ficheiro SVG subido.",
        "uploaded-event-handler-on-svg": "Non está permitido fixar atributos de xestión de eventos <code>$1=\"$2\"</code> nos ficheiros SVG.",
        "uploadnewversion-linktext": "Cargar unha nova versión deste ficheiro",
        "shared-repo-from": "de $1",
        "shared-repo": "repositorio compartido",
+       "shared-repo-name-wikimediacommons": "Wikimedia Commons",
        "filepage.css": "/** O CSS que se coloque aquí será incluído na páxina de descrición do ficheiro, así como nos wikis de clientes estranxeiros */",
        "upload-disallowed-here": "Non pode sobrescribir este ficheiro.",
        "filerevert": "Reverter \"$1\"",
        "apisandbox-request-selectformat-label": "Mostrar os datos da petición como:",
        "apisandbox-request-format-url-label": "Cadea de consulta da URL",
        "apisandbox-request-url-label": "URL da solicitude:",
+       "apisandbox-request-format-json-label": "JSON",
        "apisandbox-request-json-label": "Solicitude do JSONː",
        "apisandbox-request-time": "Duración da solicitude: {{PLURAL:$1|$1 ms}}",
        "apisandbox-results-fixtoken": "Corrixir o identificador e reenviar",
        "apisandbox-multivalue-all-values": "$1 (Tódolos valores)",
        "booksources": "Fontes bibliográficas",
        "booksources-search-legend": "Procurar fontes bibliográficas",
+       "booksources-isbn": "ISBN:",
        "booksources-search": "Procurar",
        "booksources-text": "A continuación aparece unha lista de ligazóns cara a outros sitios web que venden libros novos e usados; neles tamén pode obter máis información sobre as obras que está a buscar:",
        "booksources-invalid-isbn": "O ISBN inserido semella non ser válido; comprobe que non se producisen erros ao copialo da fonte orixinal.",
        "listgrouprights-rights": "Dereitos",
        "listgrouprights-helppage": "Help:Dereitos do grupo",
        "listgrouprights-members": "(lista de membros)",
+       "listgrouprights-right-display": "<span class=\"listgrouprights-granted\">$1 <code>($2)</code></span>",
+       "listgrouprights-right-revoked": "<span class=\"listgrouprights-revoked\">$1 <code>($2)</code></span>",
        "listgrouprights-addgroup": "Pode engadir {{PLURAL:$2|o grupo|os grupos}}: $1",
        "listgrouprights-removegroup": "Pode eliminar {{PLURAL:$2|o grupo|os grupos}}: $1",
        "listgrouprights-addgroup-all": "Pode engadir todos os grupos",
        "listgrants-summary": "Esta é unha lista de permisos cos seus accesos asociados aos permisos de usuario. Os usuarios poden autorizar aplicacións para que usen a súa conta, pero con acceso limitado en función dos permisos que o usuario concede á aplicación. Porén, unha aplicación que actúa no nome dun usuario non pode empregar permisos que o propio usuario non posúe.\nPode obter máis información sobre os dereitos individuais [[{{MediaWiki:Listgrouprights-helppage}}|nesta páxina]].",
        "listgrants-grant": "Outorgar",
        "listgrants-rights": "Dereitos",
+       "listgrants-grant-display": "$1 <code>($2)</code>",
        "trackingcategories": "Categorías de seguimento",
        "trackingcategories-summary": "Esta páxina lista as categorías de seguimento que o software de MediaWiki enche automaticamente. Pódense alterar os seus nomes modificando as correspondentes mensaxes do sistema no espazo de nomes \"{{ns:8}}\".",
        "trackingcategories-msg": "Categoría de seguimento",
        "protect-fallback": "Permitir só aos usuarios con permisos de \"$1\"",
        "protect-level-autoconfirmed": "Permitir só aos usuarios autoconfirmados",
        "protect-level-sysop": "Permitir só aos administradores",
+       "protect-summary-desc": "[$1=$2] ($3)",
        "protect-summary-cascade": "protección en serie",
        "protect-expiring": "remata o $2 ás $3 (UTC)",
        "protect-expiring-local": "caduca o $1",
        "undeleteviewlink": "ver",
        "undeleteinvert": "Inverter a selección",
        "undeletecomment": "Motivo:",
-       "undeletedrevisions": "{{PLURAL:$1|Restaurouse $1 revisión|Restauráronse $1 revisións}}",
-       "undeletedrevisions-files": "Restauráronse $1 {{PLURAL:$1|revisión|revisións}} e $2 {{PLURAL:$2|ficheiro|ficheiros}}",
-       "undeletedfiles": "{{PLURAL:$1|Restaurouse $1 ficheiro|Restauráronse $1 ficheiros}}",
        "cannotundelete": "Algunhas ou todas as restauracións fallaronː\n$1",
        "undeletedpage": "'''A páxina \"$1\" foi restaurada'''\n\nComprobe o [[Special:Log/delete|rexistro de borrados]] para ver as entradas recentes no rexistro de páxinas eliminadas e restauradas.",
        "undelete-header": "Consulte [[Special:Log/delete|no rexistro de borrados]] as páxinas borradas recentemente.",
        "undelete-error-long": "Atopáronse erros ao desfacer a eliminación do ficheiro:\n\n$1",
        "undelete-show-file-confirm": "Está seguro de querer ver unha revisión borrada do ficheiro \"<nowiki>$1</nowiki>\" do día $2 ás $3?",
        "undelete-show-file-submit": "Si",
+       "undelete-revision-row2": "$1 ($2) $3 . . $4 $5 $6 $7 $8",
        "namespace": "Espazo de nomes:",
        "invert": "Inverter a selección",
        "tooltip-invert": "Marque esta caixa para agochar os cambios nas páxinas pertencentes ao espazo de nomes seleccionado (e o espazo de nomes asociado, se escolleu a opción)",
        "sp-contributions-uploads": "cargas",
        "sp-contributions-logs": "rexistros",
        "sp-contributions-talk": "conversa",
-       "sp-contributions-userrights": "xestión dos dereitos do usuario",
+       "sp-contributions-userrights": "xestión dos dereitos {{GENDER:$1|do usuario|da usuaria}}",
        "sp-contributions-blocked-notice": "Este usuario está bloqueado. Velaquí está a última entrada do rexistro de bloqueos, por se quere consultala:",
        "sp-contributions-blocked-notice-anon": "Este enderezo IP está bloqueado.\nVelaquí está a última entrada do rexistro de bloqueos, por se quere consultala:",
        "sp-contributions-search": "Busca de contribucións",
        "unblocked-id": "O bloqueo $1 foi eliminado.",
        "unblocked-ip": "[[Special:Contributions/$1|$1]] foi desbloqueado.",
        "blocklist": "Usuarios bloqueados",
+       "autoblocklist": "Autobloqueos",
+       "autoblocklist-submit": "Procura",
+       "autoblocklist-legend": "Listar autobloqueos",
+       "autoblocklist-localblocks": "{{PLURAL:$1|Autobloqueo local|Autobloqueos locais}}",
+       "autoblocklist-empty": "A lista de autobloqueos está baleira.",
+       "autoblocklist-otherblocks": "{{PLURAL:$1|Outro autobloqueo|Outros autobloqueos}}",
        "ipblocklist": "Usuarios bloqueados",
        "ipblocklist-legend": "Buscar un usuario bloqueado",
        "blocklist-userblocks": "Agochar os bloqueos de contas",
        "tooltip-pt-mycontris": "Lista das súas contribucións",
        "tooltip-pt-anoncontribs": "Unha lista das modificacións feitas desde este enderezo IP",
        "tooltip-pt-login": "Recoméndaselle rexistrarse, se ben non é obrigatorio",
+       "tooltip-pt-login-private": "Precisa conectarse para usa esta wiki",
        "tooltip-pt-logout": "Saír ao anonimato",
        "tooltip-pt-createaccount": "Recoméndaselle crear unha conta e acceder ao sistema, se ben non é obrigatorio",
        "tooltip-ca-talk": "Conversa acerca do contido desta páxina",
        "tooltip-preferences-save": "Gardar as preferencias",
        "tooltip-summary": "Escriba un breve resumo",
        "interlanguage-link-title": "$1 – $2",
+       "interlanguage-link-title-nonlang": "$1 – $2",
        "common.css": "/** O CSS que se coloque aquí será aplicado a todas as aparencias */",
        "print.css": "/* O CSS que se coloque aquí afectará ás impresións */",
        "noscript.css": "/* O CSS que se coloque aquí afectará aos usuarios co JavaScript desactivado */",
        "group-autoconfirmed.css": "/* O CSS que se coloque aquí afectará soamente aos usuarios autoconfirmados */",
+       "group-user.css": "/* Os estilos CSS colocados aquí aplicaranse a tódolos usuarios rexistrados */",
        "group-bot.css": "/* O CSS que se coloque aquí afectará soamente aos bots */",
        "group-sysop.css": "/* O CSS que se coloque aquí afectará soamente aos administradores */",
        "group-bureaucrat.css": "/* O CSS que se coloque aquí afectará soamente aos burócratas */",
        "common.js": "/* Calquera JavaScript que haxa aquí será cargado para todos os usuarios en cada páxina que vexan. */",
        "group-autoconfirmed.js": "/* Calquera JavaScript que haxa aquí será cargado soamente para os usuarios autoconfirmados */",
+       "group-user.js": "/* Calquera código JavaScript escrito aquí cargarase para tódolos usuarios rexistrados */",
        "group-bot.js": "/* Calquera JavaScript que haxa aquí será cargado soamente para os bots */",
        "group-sysop.js": "/* Calquera JavaScript que haxa aquí será cargado soamente para os administradores */",
        "group-bureaucrat.js": "/* Calquera JavaScript que haxa aquí será cargado soamente para os burócratas */",
        "anonymous": "{{PLURAL:$1|Usuario anónimo|Usuarios anónimos}} de {{SITENAME}}",
        "siteuser": "$1 de {{SITENAME}}",
        "anonuser": "o usuario anónimo $1 de {{SITENAME}}",
-       "lastmodifiedatby": "A última modificación desta páxina foi o $1 ás $2 por $3.",
+       "lastmodifiedatby": "A última edición desta páxina foi o $1 ás $2 por $3.",
        "othercontribs": "Baseado no traballo feito por $1.",
        "others": "outros",
        "siteusers": "{{PLURAL:$2|{{GENDER:$1|o usuario|a usuaria}}|os usuarios}} $1 de {{SITENAME}}",
        "pageinfo-few-watchers": "Menos de $1 {{PLURAL:$1|vixiante|vixiantes}}",
        "pageinfo-few-visiting-watchers": "Pode haber, ou non, un usuario que vixía páxinas visitando as edicións recentes",
        "pageinfo-redirects-name": "Número de redireccións cara a esta páxina",
+       "pageinfo-redirects-value": "$1",
        "pageinfo-subpages-name": "Subpáxinas desta páxina",
        "pageinfo-subpages-value": "$1 ($2 {{PLURAL:$2|redirección|redireccións}}; $3 {{PLURAL:$3|non-redirección|non-redireccións}})",
        "pageinfo-firstuser": "Creador da páxina",
        "mediawarning": "'''Aviso:''' Este tipo de ficheiro pode conter código malicioso.\nO seu sistema pode quedar comprometido se o executa.",
        "imagemaxsize": "Límite de tamaño das imaxes:<br />''(nas páxinas de descrición de ficheiros)''",
        "thumbsize": "Tamaño da miniatura:",
+       "widthheight": "$1 × $2",
        "widthheightpage": "$1 × $2, $3 {{PLURAL:$3|páxina|páxinas}}",
        "file-info": "tamaño do ficheiro: $1; tipo MIME: $2",
        "file-info-size": "$1 × $2 píxeles; tamaño do ficheiro: $3; tipo MIME: $4",
        "ilsubmit": "Procurar",
        "bydate": "por data",
        "sp-newimages-showfrom": "Mostrar os novos ficheiros comezando polo $1 ás $2",
+       "video-dims": "$1, $2 × $3",
+       "seconds-abbrev": "$1 s",
        "minutes-abbrev": "$1 min",
+       "hours-abbrev": "$1 h",
+       "days-abbrev": "$1 d",
        "seconds": "{{PLURAL:$1|$1 segundo|$1 segundos}}",
        "minutes": "{{PLURAL:$1|$1 minuto|$1 minutos}}",
        "hours": "{{PLURAL:$1|$1 hora|$1 horas}}",
        "metadata-expand": "Mostrar os detalles",
        "metadata-collapse": "Agochar os detalles",
        "metadata-fields": "Os campos de metadatos listados nesta mensaxe incluiranse na páxina da imaxe ao contraer a táboa dos metadatos.\nOs demais agocharanse por omisió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-langitem": "<strong>$2:</strong> $1",
+       "metadata-langitem-default": "$1",
        "exif-imagewidth": "Ancho",
        "exif-imagelength": "Alto",
        "exif-bitspersample": "Bits por compoñente",
        "exif-exposuretime": "Tempo de exposición",
        "exif-exposuretime-format": "$1 segundos ($2)",
        "exif-fnumber": "Número f",
+       "exif-fnumber-format": "f/$1",
        "exif-exposureprogram": "Programa de exposición",
        "exif-spectralsensitivity": "Sensibilidade espectral",
        "exif-isospeedratings": "Relación de velocidade ISO",
        "exif-lightsource": "Fonte da luz",
        "exif-flash": "Flash",
        "exif-focallength": "Lonxitude focal",
+       "exif-focallength-format": "$1 mm",
        "exif-subjectarea": "Área do suxeito",
        "exif-flashenergy": "Enerxía do flash",
        "exif-focalplanexresolution": "Resolución X do plano focal",
        "exif-gpsareainformation": "Nome da área GPS",
        "exif-gpsdatestamp": "Data do GPS",
        "exif-gpsdifferential": "Corrección diferencial do GPS",
+       "exif-coordinate-format": "$1° $2′ $3″ $4",
        "exif-jpegfilecomment": "Comentario do ficheiro JPEG",
        "exif-keywords": "Palabras clave",
        "exif-worldregioncreated": "Rexión do mundo onde se tirou a foto",
        "exif-personinimage": "Persoa retratada",
        "exif-originalimageheight": "Altura da imaxe antes de ser cortada",
        "exif-originalimagewidth": "Ancho da imaxe antes de ser cortada",
+       "exif-contact-value": "$1\n\n$2\n<div class=\"adr\">\n$3\n\n$4, $5, $6 $7\n</div>\n$8",
+       "exif-subjectnewscode-value": "$2 ($1)",
        "exif-compression-1": "Sen comprimir",
        "exif-compression-2": "CCITT Grupo 3 Lonxitude de codificación unidimensional Huffman modificada",
        "exif-compression-3": "CCITT Grupo 3 codificación de fax",
        "exif-compression-4": "CCITT Grupo 4 codificación de fax",
        "exif-compression-6": "JPEG (vello)",
+       "exif-compression-7": "JPEG",
+       "exif-compression-34712": "JPEG2000",
        "exif-copyrighted-true": "Con dereitos de autoría",
        "exif-copyrighted-false": "Dereitos de autoría non definidos",
+       "exif-photometricinterpretation-0": "Branco e negro (branco é 0)",
        "exif-photometricinterpretation-1": "Negro e branco (negro é 0)",
+       "exif-photometricinterpretation-2": "RGB",
+       "exif-photometricinterpretation-4": "Máscara de transparencia",
+       "exif-photometricinterpretation-5": "Separados (Probablemente CMYK)",
+       "exif-photometricinterpretation-32803": "Matriz de filtro de cor",
        "exif-unknowndate": "Data descoñecida",
        "exif-orientation-1": "Normal",
        "exif-orientation-2": "Volteada horizontalmente",
        "exif-orientation-8": "Rotada 90° en sentido horario",
        "exif-planarconfiguration-1": "formato de paquete de píxeles",
        "exif-planarconfiguration-2": "formato de planos",
+       "exif-xyresolution-i": "$1 ppp",
        "exif-colorspace-65535": "Sen calibrar",
        "exif-componentsconfiguration-0": "non existe",
        "exif-exposureprogram-0": "Sen definir",
        "confirmrecreate": "O usuario [[User:$1|$1]] ([[User talk:$1|conversa]]) {{GENDER:$1|borrou}} esta páxina despois de que vostede comezase a editala, achegando o seguinte motivo:\n: <em>$2</em>\nPor favor, confirme que realmente quere recrear esta páxina.",
        "confirmrecreate-noreason": "O usuario [[User:$1|$1]] ([[User talk:$1|conversa]]) {{GENDER:$1|borrou}} esta páxina despois de que vostede comezase a editala. Por favor, confirme que realmente quere recrear esta páxina.",
        "recreate": "Recrear",
+       "confirm-purge-title": "Purgar esta páxina",
        "confirm_purge_button": "Aceptar",
        "confirm-purge-top": "Quere limpar a memoria caché desta páxina?",
        "confirm-purge-bottom": "Ao purgar unha páxina, límpase a memoria caché e isto obriga tamén a que apareza a versión máis recente da páxina.",
        "confirm-unwatch-top": "Quere eliminar esta páxina da lista de vixilancia?",
        "confirm-rollback-button": "Aceptar",
        "confirm-rollback-top": "Quere reverter as edicións desta páxina?",
+       "semicolon-separator": ";&#32;",
+       "comma-separator": ",&#32;",
        "colon-separator": ":&#32;",
+       "pipe-separator": "&#32;|&#32;",
+       "word-separator": "&#32;",
+       "ellipsis": "...",
+       "percent": "$1%",
+       "parentheses": "($1)",
+       "brackets": "[$1]",
        "quotation-marks": "\"$1\"",
        "imgmultipageprev": "← páxina anterior",
        "imgmultipagenext": "páxina seguinte →",
        "imgmultigo": "Ir!",
        "imgmultigoto": "Ir á páxina $1",
+       "img-lang-opt": "$2 ($1)",
        "img-lang-default": "(lingua por defecto)",
        "img-lang-info": "Renderizar esta imaxe en $1. $2",
        "img-lang-go": "Mostrar",
        "autoredircomment": "Redirixida cara a \"[[$1]]\"",
        "autosumm-new": "Nova páxina: \"$1\"",
        "autosumm-newblank": "A páxina creouse sen contido",
+       "size-bytes": "$1 {{PLURAL:$1|byte|bytes}}",
        "size-kilobytes": "$1 kB",
+       "size-megabytes": "$1 MB",
+       "size-gigabytes": "$1 GB",
+       "size-terabytes": "$1 TB",
+       "size-petabytes": "$1 PB",
+       "size-exabytes": "$1 EB",
+       "size-zetabytes": "$1 ZB",
+       "size-yottabytes": "$1 YB",
+       "size-pixel": "$1 {{PLURAL:$1|píxel|píxeles}}",
+       "bitrate-bits": "$1 bps",
+       "bitrate-kilobits": "$1 kbps",
+       "bitrate-megabits": "$1 Mbps",
+       "bitrate-gigabits": "$1 Gbps",
+       "bitrate-terabits": "$1 Tbps",
+       "bitrate-petabits": "$1 Pbps",
+       "bitrate-exabits": "$1 Ebps",
+       "bitrate-zetabits": "$1 Zbps",
+       "bitrate-yottabits": "$1 Ybps",
        "lag-warn-normal": "Pode que os cambios feitos {{PLURAL:$1|no último segundo|nos últimos $1 segundos}} non aparezan nesta lista.",
        "lag-warn-high": "Debido a unha gran demora do servidor da base de datos, pode que nesta lista non aparezan os cambios feitos {{PLURAL:$1|no último segundo|nos últimos $1 segundos}}.",
        "watchlistedit-normal-title": "Editar a lista de vixilancia",
        "watchlisttools-view": "Ver as modificacións relevantes",
        "watchlisttools-edit": "Ver e editar a lista de vixilancia",
        "watchlisttools-raw": "Editar a lista de vixilancia simple",
+       "iranian-calendar-m1": "Farvardin",
+       "iranian-calendar-m2": "Ordibehesht",
        "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|conversa]])",
        "timezone-local": "Local",
        "duplicate-defaultsort": "<strong>Aviso:</strong> A clave de ordenación por defecto \"$2\" anula a clave de ordenación anterior por defecto \"$1\".",
        "htmlform-user-not-valid": "\"<strong>$1</strong>\" non é un nome de usuario válido.",
        "logentry-delete-delete": "$1 {{GENDER:$2|borrou}} a páxina \"$3\"",
        "logentry-delete-delete_redir": "$1 {{GENDER:$2|eliminou}} a redirección $3 sobreescribíndoa",
-       "logentry-delete-restore": "$1 {{GENDER:$2|restaurou}} a páxina \"$3\"",
+       "logentry-delete-restore": "$1 {{GENDER:$2|restaurou}} a páxina \"$3\" ($4)",
+       "logentry-delete-restore-nocount": "$1 {{GENDER:$2|restaurou}} a páxina $3",
+       "restore-count-revisions": "{{PLURAL:$1|1 revisión|$1 revisións}}",
+       "restore-count-files": "{{PLURAL:$1|1 ficheiro|$1 ficheiros}}",
        "logentry-delete-event": "$1 {{GENDER:$2|mudou}} a visibilidade {{PLURAL:$5|dunha entrada|de $5 entradas}} do rexistro de $3: $4",
        "logentry-delete-revision": "$1 {{GENDER:$2|mudou}} a visibilidade {{PLURAL:$5|dunha revisión|de $5 revisións}} da páxina \"$3\": $4",
        "logentry-delete-event-legacy": "$1 {{GENDER:$2|mudou}} a visibilidade de entradas do rexistro de $3",
        "special-characters-group-thai": "Tailandés",
        "special-characters-group-lao": "Laosiano",
        "special-characters-group-khmer": "Camboxano",
+       "special-characters-group-canadianaboriginal": "Aborixe canadense",
        "special-characters-title-endash": "guión",
        "special-characters-title-emdash": "raia",
        "special-characters-title-minus": "signo menos",
        "restrictionsfield-label": "Rangos de IP permitidos:",
        "restrictionsfield-help": "Un único enderezo IP ou rango CIDR por liña. Para habilitalos todos, utiliceː\n<pre>0.0.0.0/0\n::/0</pre>",
        "revid": "revisión $1",
-       "pageid": "identificador de páxina $1"
+       "pageid": "identificador de páxina $1",
+       "rawhtml-notallowed": "As marcas &lt;html&gt; non poden usarse fóra das páxinas normais.",
+       "gotointerwiki": "Deixando {{SITENAME}}",
+       "gotointerwiki-invalid": "O título especificado non era válido.",
+       "gotointerwiki-external": "Vai sair de {{SITENAME}} para visitar [[$2]], que é un sitio web externo.\n\n[$1 Prema aquí para continuar a $1]",
+       "undelete-cantedit": "Non pode anular o borrado desta páxina porque non ten permisos para editar esta páxina.",
+       "undelete-cantcreate": "Non pode anular o borrado desta páxina xa que non hai ningunha páxina con ese nome e non ten permisos para creala."
 }
index bb6c4bc..e42ae97 100644 (file)
@@ -30,6 +30,9 @@
        "tog-watchlisthideliu": "ديرين بمأ کارگيرؤنˇ دچينواچينؤنه، پىگيتنؤنˇ ليستˇ مئن دۊخۊسان",
        "tog-ccmeonemails": "اۊ ايمىلˇ جي که ديگرؤن ئبه اۊسئه کؤنم ىک نؤسخه کؤپي مئبه روانه بۊبۊن",
        "tog-norollbackdiff": "پساوگردانئنˇ پسي، تؤفير نۊشؤن بدأ نۊبۊن",
+       "underline-always": "هميشک",
+       "underline-never": "هرگيز",
+       "editfont-serif": "ديمه‌دار قلم",
        "sunday": "ىکشمبه",
        "monday": "دۊشمبه",
        "tuesday": "سۊشمبه",
        "category-article-count-limited": "جيرˇ{{PLURAL:$1|ولگ|$1 ولگ}} هي جرگه مئن دره.",
        "category-file-count": "{{PLURAL:$2|اي جرگه مئن خالي اي فاىل دره.|{{PLURAL:$1|اي فاىل|اي $1ته فاىل}} اي جرگه مئن {{PLURAL:$1|دره|درن}}؛ اي جرگه مئن در کؤل $2ته فاىل دره.}}",
        "listingcontinuesabbrev": "(ايدامه)",
+       "about": "راجع به",
+       "article": "دله ولگ",
        "newwindow": "(تازه پنجره ميئن بازأبۊنه)",
        "cancel": "لغو",
        "moredotdotdot": "ویشتر...",
+       "morenotlisted": "اي ليست مۊمکنه کامل نبي.",
        "mypage": "ولگ",
        "mytalk": "گب",
        "anontalk": "گب",
        "qbfind": "ىاتن",
        "qbedit": "دچینواچین",
        "qbpageoptions": "اي ولگ",
+       "faq": "رايج سۊالؤن",
+       "faqpage": "Project:رايج سۊالؤن",
+       "actions": "کۊنۊشؤن",
        "namespaces": "نؤمفضاؤن",
        "variants": "گۊىشؤن",
        "navigation-heading": "گرأخؤر منؤ",
+       "errorpagetitle": "سأب",
        "returnto": "$1 وگرد.",
        "tagline": "{{SITENAME}} جي",
        "help": "رانما",
        "searcharticle": "بۊشۊ",
        "history": "ولگˇ تاريخ",
        "history_short": "تاريخ",
+       "history_small": "تاريخ",
        "printableversion": "وؤته چاپ گۊدن",
        "permalink": "داىمي خال",
+       "print": "چاپ",
        "view": "دئن",
        "view-foreign": "دئن $1ˇ ميئن",
        "edit": "دچينواچين",
+       "create": "چاگۊدن",
        "editthispage": "اي ولگه دچينواچين بکۊن",
        "create-this-page": "اي ولگه چاکۊن",
        "delete": "حذف",
        "deletethispage": "اي ولگه پاکأ کۊن.",
+       "undeletethispage": "اي ولگه احيا بکۊن.",
        "protect": "پأسن",
+       "protect_change": "تغيير",
        "protectthispage": "اي ولگه بپا",
        "unprotect": "پأسنه عوضأؤدن",
        "unprotectthispage": "اي ولگˇ پأسنه عوضأکۊن",
        "views": "بدئرؤن",
        "toolbox": "أبزارؤن",
        "userpage": "کارگيرˇ ولگه دئن",
+       "imagepage": "فايلˇ ولگه دئن",
        "categorypage": "جرگه ولگه دئن",
        "otherlanguages": "باخي زوانؤنˇ جي",
        "redirectedfrom": "(مسير عوضاؤدن $1 أجي)",
+       "redirectto": "تغييرمسير به:",
        "lastmodifiedat": "اي ولگ آخري گرش $1ˇ ميئن ساعت $2 دچينواچين بۊبؤ.",
        "protectedpage": "بپأسه ولگ",
        "jumpto": "بوؤز:",
        "disclaimers": "ردنامهٰ‌ن",
        "disclaimerpage": "Project:عۊمۊمي ردنامه",
        "edithelp": "دچينواچينˇ رانما",
+       "helppage-top-gethelp": "رانما",
        "mainpage": "گتˇ ولگ",
        "mainpage-description": "گتˇ ولگ",
+       "policy-url": "Project:سياستؤن",
        "portal": "أمي جیگا",
        "portal-url": "Project:کارگيرؤنˇ ديرينگه",
        "privacy": "خۊصۊصي حریمˇ سیاست",
        "privacypage": "Project:حريمˇ سیاست",
+       "badaccess": "دسبرسي سأب",
        "badaccess-groups": "کاري که شمه خأنين، فقط {{PLURAL:$2|اي پأره|اي پأره'ن}} کارگيرؤنˇ شئه: $1.",
+       "ok": "خؤ",
        "retrievedfrom": "«$1» جي وأىته",
        "youhavenewmessagesfromusers": "شمه {{PLURAL:$4|ىکته دئه کارگير|$3 کارگير}} جي $1 دأنين ($2).",
        "editsection": "دچينواچين",
        "viewsourcelink": "سربسه دئن",
        "editsectionhint": "وابينˇ دچينواچين: $1",
        "toc": "دله",
+       "showtoc": "نۊشؤن دأن",
+       "hidetoc": "دۊخۊسان",
+       "confirmable-yes": "أهأ",
+       "confirmable-no": "نأ",
+       "viewdeleted": "$1ˇ دئن؟",
+       "feedlinks": "خبرخؤن:",
        "site-atom-feed": "أتؤمˇ خۊراک $1 ئبه",
        "page-atom-feed": "أتؤمˇ خۊراک $1 ئبه",
        "red-link-title": "$1 (ولگ دننه)",
        "nstab-special": "خاصˇ ولگ",
        "nstab-project": "پؤرؤژه ولگ",
        "nstab-image": "فاىل",
+       "nstab-mediawiki": "پيغؤم",
        "nstab-template": "قالب",
+       "nstab-help": "رانما ولگ",
        "nstab-category": "جرگه",
        "mainpage-nstab": "گتˇ ولگ",
        "error": "سأب",
        "cannotloginnow-text": "وختي $1 کاردره، نشأنه دۊيرين أمأن.",
        "yourdomainname": "تي پره",
        "login": "ديرين بأىن",
-       "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أگه خأ ىکته دئه کارگيرˇ تأهأت ديرن بأىن، جيري فؤرمه کاراگيرين.",
        "userlogin-createanother": "ىکته دئه کارگيري حيساب چاکۊن",
        "createacct-emailrequired": "ايمىلˇ آدرس",
        "createacct-email-ph": "تي ايمىلˇ آدرسه بنويس",
        "createacct-another-email-ph": "ايمىلˇ آدرسه بنويس",
        "createacct-realname": "واقعي نؤم (ديلبخا)",
-       "createaccountreason": "دليل:",
        "createacct-reason": "دليل",
        "createacct-reason-ph": "چره ىکته دئه کارگيري حساب چاکأدري؟",
        "createacct-submit": "تي کارگيري حيسابه چاکۊن",
        "password-name-match": "شيمئه رمز وا شيمئه کارگيري نؤمˇ أمرأ تؤفير بدأره.",
        "mailmypassword": "هندئه رمز چاگۊدن",
        "passwordremindertext": "ىک نفر (شاىد خۊدˇ شمه، $1 آى.پي نۊشؤني جي) {{SITENAME}} مئن شيمئه کارگيري حساب ئبه تازه رمز بخأسته ($4).\nىکته مؤوقتي رمز چاگۊده بۊبؤ \"$2\" کارگير ئبه ؤ ائره نأ: \"$3\". \nأگه هينه خأستين، هسأ وأ وبجيگه' ديرين بشين ؤ تازه رمز چاکۊنين.\nشيمئه مؤوقتي رمز {{PLURAL:$5|ىک رۊز|$5 رۊز}} مئن باطل بۊنه.\n\nأگه ىک نفر ديگه همچين چيزي بخأسته ىا أگه شمه شيمئه قديمي رمزه ىاد بأردين ؤ دئه نخأنين اۊنه عوضأکۊنين، اي پىغامه ندئه بگيرين ؤ هۊ قديمي رمزه کاراگيرين.",
+       "emailconfirmlink": "تي ايميلˇ آدرسه تأييد بکۊن",
        "accountcreated": "حيساب چاگۊده-بۊبؤ!",
        "accountcreatedtext": "[[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|گب]]) واسي کارگيري حيساب چاگۊده بۊبؤ.",
        "login-migrated-generic": "شيمئه کارگيري حيساب جابجا بۊبؤ ؤ شيمئه کارگيري نؤم ديگه اي ويکي ميئن دننه.",
        "retypenew": "رمزه دۊمارته بنويس",
        "resetpass_submit": "رمزه عوضأکۊن ؤ دۊيرين بشۊ",
        "changepassword-success": "تي رمز عوضأبؤ!",
+       "botpasswords-label-appid": "رۊباتˇ نؤم:",
        "botpasswords-label-create": "چاگۊدن",
        "botpasswords-label-update": "برۊزأگۊدن",
        "botpasswords-label-cancel": "لغو",
        "resetpass-submit-cancel": "لغو",
        "passwordreset": "هندئه رمز چاگۊدن",
        "passwordreset-username": "کارگيري نؤم:",
+       "passwordreset-domain": "پره:",
+       "passwordreset-email": "ايمىلˇ آدرس:",
        "passwordreset-emailelement": "کارگيري نؤم: \n$1\n\nمؤوقتي رمز: \n$2",
+       "changeemail-newemail": "تازه ايميلˇ آدرس:",
+       "changeemail-none": "(هيچ)",
        "bold_sample": "پۊررنگˇ وؤت",
        "bold_tip": "پۊررنگˇ وؤت",
        "italic_sample": "کجˇ وؤت",
        "minoredit": "اي نيميزگره دچينواچينه",
        "watchthis": "اي ولگه پى بگير",
        "savearticle": "ولگه ذخيره گۊدن",
+       "publishpage": "ولگه مۊنتشرأگۊدن",
+       "publishchanges": "تغييرؤنه مۊنتشرأگۊدن",
        "preview": "پيشادئن",
        "showpreview": "پيشادئن",
        "showdiff": "تغىيرؤنه نۊشؤن دأن",
-       "summary-preview": "پيشادئنˇفيچالسه:",
+       "summary-preview": "فيچالسه پيشادئن:",
+       "subject-preview": "مؤضۊعˇ پيشادئن:",
        "blockedtitle": "کارگير دبۊسته بۊبؤ",
        "loginreqtitle": "خأ أول ديرين بأى",
        "loginreqlink": "ديرين بئه",
-       "noarticletext": "اي ولگˇ مئن ألؤنى هيچ وؤتي دننئه. شۊمۊ تؤنين باخيˇ ولگؤنˇ مئن [[Special:Search/{{PAGENAME}}|اي ولگˇ تيتره وامجين]]،\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} مۊرتبط سياه'نه وامجين]،\nىا [{{fullurl:{{FULLPAGENAME}}|action=edit}} اي ولگه دچينواچين بکۊنين]</span>.",
+       "newarticle": "(تازه)",
+       "noarticletext": "اي ولگˇ مئن ألؤنى هيچ وؤتي دننئه. شۊمۊ تؤنين باخيˇ ولگؤنˇ مئن [[Special:Search/{{PAGENAME}}|اي ولگˇ تيتره وامجين]]،\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} مۊرتبط سياه'نه وامجين]،\nىا [{{fullurl:{{FULLPAGENAME}}|action=edit}} اي ولگه چاکۊنين]</span>.",
        "editing": "$1 دچينواچين گۊدن",
+       "creating": "$1ˇ چأگۊدن",
        "editingsection": "دچيواچينˇ مئن $1 (وابين)",
+       "yourtext": "تي وؤت",
+       "yourdiff": "تفاوۊتؤن",
        "templatesused": "اي ولگˇ مينˇ {{PLURAL:$1|قالب|قالبؤن}}",
        "template-protected": "(بپأسه)",
        "template-semiprotected": "(نيمه بپأسه)",
        "hiddencategories": "اي ولگ {{PLURAL:$1|ىکته جخۊته جرگه|$1 جخۊته جرگه}} مئن دره:",
+       "moveddeleted-notice": "اي ولگ حذفأبؤکه.\nحذف ؤ اينتقالˇ سياهه اي ولگˇ ويسين اي بۊن نۊشؤن بدأکه.",
+       "viewpagelogs": "اي ولگˇ سياهه'نه دئن",
        "currentrev-asof": "هسأىي نۊسخه تا $1",
        "revisionasof": "نۊسخه $1",
        "previousrevision": "→ قديميترˇ نۊسخه",
+       "nextrevision": "تازه‌ترˇ نۊسخه ←",
        "currentrevisionlink": "هسأىى نۊسخهٰ نۊشؤن دأن",
        "cur": "ألؤن",
        "last": "دأميشکي",
        "rev-delundel": "نۊشؤن دأن/جۊخۊسانئن",
        "revdelete-hide-user": "کارگيري نؤم/آى.پي",
        "revdelete-reason-dropdown": "*حذفˇ هرماله دليلؤن\n** چاکۊدنحقه نقض گۊدن\n** نظر ىا اطلاعاتي که مؤناسب نيه\n** کارگيري نؤمي که مؤناسب نيه\n** اطلاعاتي که اۊنˇ مئن تؤهمت دره",
+       "history-title": "\"$1\"ˇ واگرداني تارئخ",
        "difference-title": "$1: نۊسخه'نˇ تؤفير",
        "lineno": "رچ $1:",
        "editundo": "وگردانئن",
        "searchresults-title": "وامتنˇ نتيجه'ن، \"$1\"ˇ واسی",
        "prevn": "داميشکˇ {{PLURAL:$1|$1}}",
        "nextn": "بعدي {{PLURAL:$1|$1}}",
+       "nextn-title": "$1ˇ بعدي {{PLURAL:$1|نتيجه|نتيجه}}",
        "shown-title": "$1هر ىکته ولگˇ مئن {{PLURAL:$1|نتيجه'|نتيجه'ن}} نۊشؤن بدي.",
        "viewprevnext": "نۊشؤن دأن ($1 {{int:pipe-separator}} $2) ($3)",
        "searchprofile-articles": "دله ولگؤن",
        "rcshowhidemine": "$1 مي دچينواچينؤن",
        "rcshowhidemine-show": "نۊشؤن دأن",
        "rcshowhidemine-hide": "دۊخۊسان",
+       "rclinks": "آخري $1ته تغییره آخري $2 رۊزˇ ميئن نۊشؤن دأن",
        "diff": "تؤفير",
        "hist": "تاريخ",
        "hide": "دۊخۊسان",
        "rc-change-size-new": "$1 {{PLURAL:$1|باىت}} تغييرˇ پسي",
        "recentchangeslinked": "مۊرتبطˇ تغىيرؤن",
        "recentchangeslinked-toolbox": "مۊرتبطˇ تغىيرؤن",
+       "recentchangeslinked-title": "\"$1\"ˇ مۊرتبط تغييرؤن",
        "recentchangeslinked-summary": "اي جير، ىکته ليسته تينين بىنين آخري تغييرؤن أجي اۊ ولگؤنˇ مئن کي اي ولگˇ جي خال ببؤن (ىا جرگهٔ مؤردˇ نظرˇ جي). اۊ ولگؤني که [[Special:Watchlist|شيمئه پىگيري ليست]]۱ميئن دبۊن پۊررنگ نۊشؤن بدأبۊنن.",
        "recentchangeslinked-page": "ولگˇ نؤم:",
        "upload": "فاىله جؤراکشئن",
        "filehist-comment": "نظر",
        "imagelinks": "فاىله کارأىتن",
        "linkstoimage": "اي {{PLURAL:$1|ولگ|ولگؤن}} اي تاتاىئه خال بدأ {{PLURAL:$1|دأنه|دأنن}}:",
+       "nolinkstoimage": "اي فايل هيته ولگˇ ميئن کأرأگيته نۊبؤ.",
        "sharedupload-desc-here": "اي فاىل $1 مئن دره ؤ شاىد باخيˇ پؤرؤژه'نˇ مئنأني کاراىته بۊبۊن.\n[$2 فاىلˇ تؤضيحاتˇ ولگ، اؤره]ˇ مئنˇ تؤضيحات اي جير نۊشؤن بدأره.",
        "randompage": "کترئي ولگ",
        "randomincategory": "جرگه مئنˇ کترئي ولگ",
        "statistics-users": "[[Special:ListUsers|کارگيرؤن]] ثبتˇ نام بؤده",
        "nbytes": "$1 {{PLURAL:$1|باىت|باىتؤن}}",
        "ncategories": "{{PLURAL:$1|جرگه|جرگهٰ‌ن}}",
+       "nmembers": "$1 {{PLURAL:$1|عۊضو|عۊضو}}",
        "protectedpages": "بپأسه ولگؤن",
        "protectedpages-performer": "پأسن کارگير",
        "protectedpages-unknown-performer": "ناشيناس کارگير",
        "tooltip-namespace_association": "ائره' تيک بزنين تا گبˇ نؤمفضا ىا مؤرتبط مؤضۊع ىا دؤجين بۊبؤ نؤمفضا ني شامل بۊبۊن.",
        "blanknamespace": "گت",
        "contributions": "{{GENDER:$1|کارگير}}ˇ مۊشارکتؤن",
+       "mycontris": "مۊشارکتؤن",
+       "anoncontribs": "مۊشارکتؤن",
        "month": "اي ماه مئن (ؤ دأميشک):",
        "year": "اي سالˇ مئن (ؤ دأميشک):",
        "sp-contributions-talk": "گب",
        "whatlinkshere": "هرچي خال ببؤ ائره",
+       "whatlinkshere-title": "ولگؤني گه «$1»ˇ أمرأ خال دأنن",
        "whatlinkshere-page": "ولگ:",
+       "linkshere": "جيري ولگؤن '''[[:$1]]'''ˇ أمرأ خال دأنن:",
+       "isredirect": "تغييرمسيرˇ ولگ",
        "isimage": "فاىلˇ خال",
+       "whatlinkshere-prev": "{{PLURAL:$1|قبلي|$1 قبلي مؤرد}}",
+       "whatlinkshere-next": "{{PLURAL:$1|بعدي|$1 بعدي مؤرد}}",
        "whatlinkshere-links": "→ خالؤن",
+       "whatlinkshere-hideredirs": "$1ˇ تغيير مسير",
        "whatlinkshere-hidelinks": "$1 خالؤن",
        "whatlinkshere-filters": "فيلترؤن",
        "blocklist-by": "دبۊدگر کيا",
        "tooltip-pt-userpage": "{{جنس:|شيمي کارگير}} ولگ",
        "tooltip-pt-mytalk": "{{جنس:|شيمي}} گبˇ ولگ",
        "tooltip-pt-preferences": "{{جنس:|شيمي}} ترجيحات",
+       "tooltip-pt-watchlist": "ولگؤنˇ ليستي گه شۊمۊ ايشؤنˇ تغييرؤنه پى گينين",
+       "tooltip-pt-mycontris": "{{GENDER:|شيمي}} مۊشارکتؤنˇ ليست",
        "tooltip-pt-login": "بئتره ديرين بشين؛ بسچی گه ايجباری نیه.",
        "tooltip-pt-logout": "بيرين شؤن",
        "tooltip-pt-createaccount": "بئتره کارگیري حساب چاکۊنين ؤ ديرين بشين؛ بسچي که حساب چاؤدن ايجباری نیه.",
        "tooltip-ca-nstab-main": "مۊحتوياتˇ ولگه دئن",
        "tooltip-ca-nstab-user": "کارگيرˇ ولگه دئن",
        "tooltip-ca-nstab-special": "اي ىکته خاصˇ ولگه ؤ نشأنه دچينواچين گۊدن.",
+       "tooltip-ca-nstab-project": "پؤرؤژه ولگه دئن",
        "tooltip-ca-nstab-image": "فاىلˇ ولگه دئن",
        "tooltip-ca-nstab-template": "قالبه دئن",
        "tooltip-ca-nstab-category": "جرگه ولگه دئن",
        "pageinfo-hidden-categories": "جخۊته {{PLURAL:$1| جرگه|جرگه}} ( $1 )",
        "pageinfo-toolboxlink": "ولگˇ اطلاعات",
        "pageinfo-category-info": "جرگه اطلاعات",
+       "previousdiff": "→ قديمي‌ترˇ دچينواچين",
+       "nextdiff": "تازه‌ترˇ دچينواچين ←",
        "file-info-size": "<span dir=\"ltr\">$1 × $2</span> پیکسل، فاىلˇ واويراز: $3، نوع MIME فاىل: $4",
        "show-big-image": "أصلˇ فاىل",
        "show-big-image-preview": "اي پيشأدئنˇ واويراز: $1.",
        "exif-orientation": "سۊ",
        "exif-model": "دۊربينˇ مؤدل",
        "exif-software": "کارىته-بۊبؤ نرمبزار",
+       "exif-exifversion": "ائگزيفˇ نۊسخه",
        "exif-colorspace": "رنگي فضا",
        "exif-iimcategory": "جرگه",
        "exif-orientation-1": "عادي",
        "namespacesall": "همه",
        "monthsall": "همه",
+       "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|گب]])",
        "specialpages": "خاصˇ ولگؤن",
        "specialpages-group-login": "ديرين/ثبتˇ نؤم",
        "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|تگ|تگؤن}}]]: $2)",
+       "logentry-move-move": "$1 $3ˇ ولگه به $4 {{GENDER:$2|مۊنتقل بؤده}}",
        "logentry-newusers-create": "کارگيري حساب $1 {{GENDER:$2|چاگۊده-بۊبؤ}}",
+       "logentry-upload-upload": "$1 $3 {{GENDER:$2|جؤرأکشئه}}",
        "searchsuggest-search": "{{SITENAME}} مئن وامج",
        "expand_templates_preview": "پيشادئن",
        "default-skin-not-found": "اؤخ! پيشفرضˇ قالبي که شيمه ويکي ئبه <code dir=\"ltr\"<$wgDefaultSkin</code> مئن تعريف ببؤ به عنوانˇ <code>$1</code>، دسفرس نيه.\n\nبه نظر می‌آید نصب شما شامل پوسته‌های زیر می‌شود. [https://www.mediawiki.org/wiki/Manual:Skin_configuration راهنما: تنظیمات پوسته] را برای کسب اطلاعات در باره چگونگی فعال‌ساختن آن‌ها و انتخاب پیش‌فرض ببینید.\n\n$2\n\n; اگر اخیراً مدیاویکی را نصب کرده‌اید:\n: احتمالاً از گیت، یا به طور مستقیم از کد مبدأ که از چند متد دیگر استفاده می‌کند نصب کردید. انتظار می‌رود. چند {{PLURAL:$4|پوسته|پوسته}} از [https://www.mediawiki.org/wiki/Category:All_skins فهرست پوسته mediawiki.org] نصب کنید، که همراه چندین پوسته و افزونه هستند. شما می‌توانید شاخه <code>skins/</code> را از آن نسخه‌برداری کرده و بچسبانید.\n\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins استفاده از گیت برای دریافت پوسته‌ها].\n: انجام این کار با مخزن گیت‌تان تداخل نمی‌کند اگر توسعه‌دهنده مدیاویکی هستید.\n\n; اگر اخیراً مدیاویکی را ارتقاء دادید:\n: مدیاویکی ۱٫۲۴ و تازه‌تر دیگر به طور خودکار پوسته‌های نصب‌شده را فعال نمی‌کند ([https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery راهنما: کشف خودکار پوسته] را ببینید). شما می‌توانید خطوط زیر را به داخل <code>LocalSettings.php</code> بچسبانید تا {{PLURAL:$5|همه|همه}} پوسته‌های نصب‌شده را فعال کنید:\n\n<pre dir=\"ltr\">$3</pre>\n\n; اگر اخیراً <code>LocalSettings.php</code> را تغییر دادید:\n: نام پوسته‌ها را برای غلط املایی دوباره بررسی کنید."
index b9e8b50..3bf56e7 100644 (file)
        "rcshowhideliu": "$1 puruhára ohejáva teraguapy",
        "rcshowhideanons": "$1 puruhára ojekuaa'ỹva",
        "rcshowhidemine": "$1 che jehaijey",
-       "rclinks": "Ápe ojehechakuaa umi $1 oñemoambue pyahúva $2 ára ohasava'ekuépe.<br />$3",
+       "rclinks": "Ápe ojehechakuaa umi $1 oñemoambue pyahúva $2 ára ohasava'ekuépe.",
        "hide": "toñemi",
        "show": "hechauka",
        "newsectionsummary": "Pyahuvore: /* $1 */",
index a12ef51..eb67204 100644 (file)
        "password-change-forbidden": "ह्या विकीचेर गुपीत उतरां बदलूंक शकनात",
        "login": "सत्रारंभ करात",
        "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-email-ph": "तुमचो इमेल पत्तो घालात",
        "createacct-another-email-ph": "तुमचो इमेल पत्तो घालात",
        "createacct-realname": "खरें नांव (पर्यायी)",
-       "createaccountreason": "कारण:",
        "createacct-reason": "कारण",
        "createacct-reason-ph": "तूं दुसरें खातें कित्याक उगडटात",
        "createacct-submit": "तुमचे खातें रोचात",
        "rcshowhidemine": "$1 म्हजें संपादन आंकडे",
        "rcshowhidemine-show": "दाखयात",
        "rcshowhidemine-hide": "लिपयात",
-       "rclinks": "फाटल्या $2 दिसांनी जाल्लो $1 बदल दाखयात<br />$3",
+       "rclinks": "फाटल्या $2 दिसांनी जाल्लो $1 बदल दाखयात",
        "diff": "फरक",
        "hist": "इति",
        "hide": "लिपयात",
index 9283234..3ce34b0 100644 (file)
        "password-change-forbidden": "Tujean hea wikicher gupitutor bodlunk zaina.",
        "login": "Sotroromb kor",
        "nav-login-createaccount": "Sotrrombh kor / khatem roch",
-       "userlogin": "Sotrrombh kor / khatem roch",
-       "userloginnocreate": "Sotrorombh",
        "logout": "Bhair podd",
        "userlogout": "Sotracho xevott",
        "notloggedin": "Sotrorombh korunk nai",
        "userlogin-noaccount": "Tuje kode khatem na?",
        "userlogin-joinproject": "{{SITENAME}}-hacho vangdi za",
-       "nologin": "Tuje kodde khatem na? $1.",
-       "nologinlink": "Novem khatem ughodd",
        "createaccount": "Khatem roch",
-       "gotaccount": "Tuje kodem khatem asa? $1.",
-       "gotaccountlink": "Sotrorombh kor",
-       "userlogin-resetlink": "Sotrorombh korpacheo bariksai visorlai?",
        "userlogin-resetpassword-link": "Gupitutor visorlo?",
        "userlogin-helplink2": "Sotrorombh korunk adar",
        "userlogin-createanother": "Dusrem khatem roch",
        "createacct-email-ph": "Tuzo email potto boroi",
        "createacct-another-email-ph": "Email potto boroi",
        "createacct-realname": "Khorem nanv (Soktichem nhoi)",
-       "createaccountreason": "Karonn:",
        "createacct-reason": "Karonn",
        "createacct-reason-ph": "Tum dusrem khatem kiteak rochtai",
        "createacct-submit": "Tujem khatem roch",
        "rcshowhidemine": "Mhojeo bodlopam $1",
        "rcshowhidemine-show": "Dakhoi",
        "rcshowhidemine-hide": "Lipoi",
-       "rclinks": "Xevtiche $2 disanim zal'le $1 bodlopam dakhoi<br />$3",
+       "rclinks": "Xevtiche $2 disanim zal'le $1 bodlopam dakhoi",
        "diff": "frk",
        "hist": "iti",
        "hide": "Lipoi",
index 7983c95..269cb93 100644 (file)
@@ -10,9 +10,9 @@
                        "Amire80"
                ]
        },
-       "tog-underline": "Garisiyi totibawa pranala",
-       "tog-hideminor": "Wanto'a u iluba ngo'idi to'u bohu",
-       "tog-hidepatrolled": "Wanto'a u iluba patroli to'u bohu",
+       "tog-underline": "Garisiyi totibawa wumbuta",
+       "tog-hideminor": "Wanto'a u biloli'a ngo'idi to'u lobohuwa",
+       "tog-hidepatrolled": "Wanto'a u biloli'a lo patroli to'u lobohuwa",
        "tog-newpageshidepatrolled": "Wanto'a halaamani patroli lonto daputari halaamani bohu",
        "tog-hidecategorization": "Wanto'a tayadu halaamani",
        "tog-extendwatchlist": "Duhengi daputari he'awasiyalo u mopobilohu nga'amila ulo ubawa, dila bo ubohu",
        "redirectedfrom": "Pilobale lonto $1",
        "redirectpagesub": "Halaman pilobaleyalo",
        "redirectto": "Mobale ode",
-       "lastmodifiedat": "Halaman botiye biloli'o pulitiyo $1, $2.",
+       "lastmodifiedat": "Halaman botiye biloli'a pulitiyo $1,to $2.",
        "viewcount": "Halaman botiye ma hilu'o {{PLURAL:$1|$1 kali}}.<br />",
        "protectedpage": "Halaman udaha-daha",
        "jumpto": "Lumanti'a ode:",
        "nstab-template": "Templat",
        "nstab-help": "Halaman tulungi",
        "nstab-category": "Kategori",
-       "mainpage-nstab": "Halaman Bungaliyo",
+       "mainpage-nstab": "Halaman bungaliyo",
        "nosuchaction": "Diya'a huhutu boyito",
        "nosuchactiontext": "Huhutu u hepohile lo URL ja valid.\nYi'o lotalawa lopomaso lo URL, meyalo lodudu'a pranala u ja banari.\nUtiye olo kira-kira tuwotiyo woluwo bug to pilaakasi u hepomake {{SITENAME}}",
        "nosuchspecialpage": "Diya'a halaman istimewa boyito",
        "login": "Tumuwoto log",
        "login-security": "Po'opatata tita yi'o",
        "nav-login-createaccount": "Tumuwoto log / mohutu akun",
-       "userlogin": "Tumuwoto log / mohutu akun",
-       "userloginnocreate": "Tumuwoto log",
        "logout": "Lumuwalo log",
        "userlogout": "Lumuwalo log",
        "notloggedin": "Diipo tilumuwoto log",
        "userlogin-noaccount": "Diipo o akun",
        "userlogin-joinproject": "Motiwayito {{SITENAME}}",
-       "nologin": "Diipo o akun? $1",
-       "nologinlink": "Mohutu akun bohu",
        "createaccount": "Mohutu akun",
-       "gotaccount": "Ma yilohutu akun? $1",
-       "gotaccountlink": "Tumuwoto log",
-       "userlogin-resetlink": "Ilolipata detail habari tumuwotumu?",
        "userlogin-resetpassword-link": "Ilolipata tahe u'unti?",
        "userlogin-helplink2": "Wubodu tumuwoto log",
        "userlogin-loggedin": "Yi'o ma tilumuwoto odelo {{GENDER:$1|$1}}\nPopohunawa formulir formulir to tibawa botiye odelo pengguna uweewo.",
        "createacct-another-email-ph": "Tuwanga alamat tuladu email",
        "createaccountmail": "Popohunawa tahu u'unti ja kakali wawu lawola ode tuladu elektronik u pilohile",
        "createacct-realname": "Tanggula banari (tulawoto)",
-       "createaccountreason": "Alaasani",
        "createacct-reason": "Alaasani",
        "createacct-reason-ph": "Longola Y'io mohutu akun uweewo.",
        "createacct-reason-help": "Tahuli u pilopobilohu to delomo log mohutu akun",
        "rcshowhidemine": "$1 biloli'u'u",
        "rcshowhidemine-show": "Popobilohe",
        "rcshowhidemine-hide": "Wanto'a",
-       "rclinks": "Popobilohe $1 u yilo'boli'a pulitiyo to delomo $2 dulahu pulitiyo<br />$3",
+       "rclinks": "Popobilohe $1 u yilo'boli'a pulitiyo to delomo $2 dulahu pulitiyo",
        "diff": "ngopohiya",
        "hist": "riwayati",
        "hide": "Wanto'a",
index 6220a07..fd90bda 100644 (file)
                        "Gothicspeaker"
                ]
        },
+       "tog-previewontop": "𐌰𐌽𐌳𐌷𐌿𐌻𐌴𐌹 𐍆𐌰𐌿𐍂𐌰𐍃𐌹𐌿𐌽 𐍆𐌰𐌿𐍂𐌰 𐌹𐌽𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐌹𐌰𐍂𐌺𐌰",
        "tog-previewonfirst": "𐌰𐍄𐌰𐌿𐌲𐌴𐌹 𐍆𐌰𐌿𐍂𐌰𐍃𐌹𐌿𐌽 𐌰𐍄 𐍆𐍂𐌿𐌼𐌹𐍃𐍄𐌰 𐌹𐌽𐌼𐌰𐌹𐌳𐌴𐌹𐌽",
+       "tog-enotifusertalkpages": "𐍃𐌰𐌽𐌳𐌴𐌹 𐌼𐌹𐌺 𐌴-𐌱𐍉𐌺𐍉𐍃 𐌾𐌰𐌱𐌰𐌹 𐌼𐌴𐌹𐌽𐍃 𐌻𐌰𐌿𐍆𐍃 𐌲𐌰𐍅𐌰𐌿𐍂𐌳𐌾𐌹𐍃 𐌹𐌽𐌼𐌰𐌹𐌳𐌾𐌰𐌳𐌰",
+       "tog-shownumberswatching": "𐌰𐌽𐌳𐌷𐌿𐌻𐌴𐌹 𐍂𐌰𐌸𐌾𐍉𐌽 𐍅𐌹𐍄𐌰𐌽𐌳𐌰𐌹𐌶𐌴 𐌱𐍂𐌿𐌺𐌾𐌰𐌽𐌴",
+       "tog-oldsig": "𐌸𐌴𐌹𐌽𐌰 𐍅𐌹𐍃𐌰𐌽𐌳𐌴𐌹 𐌿𐍆𐌼𐌴𐌻𐌴𐌹𐌽𐍃",
        "underline-always": "𐍃𐌹𐌽𐍄𐌴𐌹𐌽𐍉",
        "underline-never": "𐌽𐌹 𐌰𐌹𐍅",
        "sunday": "𐌰𐍆𐌰𐍂𐍃𐌰𐌱𐌱𐌰𐍄𐍉",
        "badtitle": "𐌿𐌽𐍂𐌰𐌹𐌷𐍄𐌰𐍄𐌰 𐌿𐍆𐌰𐍂𐌼𐌴𐌻𐌹",
        "badtitletext": "𐍆𐍂𐌰𐌹𐌷𐌰𐌽𐍃 𐌻𐌰𐌿𐍆𐍃 𐍅𐌰𐍃 𐌿𐌽𐌲𐌰𐌼𐌰𐌲𐌰𐌽𐌳𐍃, 𐌻𐌰𐌿𐍃, 𐌰𐌹𐌸𐌸𐌰𐌿 𐌿𐌽𐍂𐌰𐌹𐌷𐍄𐌰𐌱𐌰 𐌲𐌰𐍅𐌹𐌳𐌰𐌽𐍃 𐌼𐌹𐌸𐍂𐌰𐌶𐌳𐌰 𐌸𐌰𐌿 𐌼𐌹𐌸-𐍅𐌹𐌺𐌹 𐌿𐍆𐌰𐍂𐌼𐌴𐌻𐌹. 𐌼𐌰𐌲𐌹 𐌷𐌰𐌱𐌰𐌽 𐌰𐌹𐌽𐌰 𐌸𐌰𐌿 𐌼𐌰𐌽𐌰𐌲𐌹𐌶𐍉𐍃 𐌱𐍉𐌺𐍉𐍃 𐌱𐍂𐌿𐌺𐌹𐌳𐍉𐍃 𐌹𐌽 𐌿𐍆𐌰𐍂𐌼𐌴𐌻𐌾𐌰𐌼.",
        "viewsource": "𐍃𐌰𐌹𐍈 𐌱𐍂𐌿𐌽𐌽𐌰𐌽",
+       "protectedpagetext": "𐍃𐌰 𐌻𐌰𐌿𐍆𐍃 𐌷𐌰𐌱𐌰𐌹𐌸 𐌼𐌿𐌽𐌳, 𐌴𐌹 𐌽𐌹 𐍅𐌰𐌹𐍂𐌸𐌴𐌹𐌽𐌰 𐌹𐌽𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐍉𐍃 𐌸𐌰𐌿 𐌰𐌽𐌸𐌰𐍂𐍉𐍃 𐍅𐌰𐌹𐌷𐍄𐍃 𐌹𐌽 𐌸𐌰𐌼𐌼𐌰 𐌻𐌰𐌿𐌱𐌰",
        "mycustomjsprotected": "𐌽𐌹 𐌷𐌰𐌱𐌰𐌹𐍃 𐌰𐌽𐌳𐌻𐌴𐍄 𐌳𐌿 𐌹𐌽𐌼𐌰𐌹𐌳𐌾𐌰𐌽 𐌸𐌰𐌽𐌰 JavaScript 𐌻𐌰𐌿𐍆.",
        "yourname": "𐌰𐍄𐌲𐌰𐌲𐌲𐌰𐌽𐌰𐌼𐍉:",
        "userlogin-yourname": "𐌰𐍄𐌲𐌰𐌲𐌲𐌰𐌽𐌰𐌼𐍉",
        "cannotloginnow-title": "𐌽𐌿 𐌽𐌹 𐌼𐌰𐌲𐍄 𐌰𐍄𐌲𐌰𐌲𐌲𐌰𐌽",
        "login": "𐌰𐍄𐌲𐌰𐌲𐌲",
        "nav-login-createaccount": "𐌰𐍄𐌲𐌰𐌲𐌲 / 𐍃𐌺𐌰𐍀𐌴𐌹 𐌺𐌰𐍅𐍄𐍃𐌾𐍉𐌽",
-       "userlogin": "𐌰𐍄𐌲𐌰𐌲𐌲 / 𐍃𐌺𐌰𐍀𐌴𐌹 𐌺𐌰𐍅𐍄𐍃𐌾𐍉𐌽",
-       "userloginnocreate": "𐌰𐍄𐌲𐌰𐌲𐌲",
        "logout": "𐌰𐍆𐌻𐌴𐌹𐌸",
        "userlogout": "𐌰𐍆𐌻𐌴𐌹𐌸",
        "userlogin-noaccount": "𐌽𐌹 𐌷𐌰𐌱𐌰𐌹𐍃 𐌺𐌰𐍅𐍄𐍃𐌾𐍉𐌽?",
        "userlogin-joinproject": "𐌲𐌰𐌳𐌰𐌹𐌻𐌴𐌹 𐌹𐌽 𐌽𐌰𐍄𐌾𐌰𐍃𐍄𐌰𐌳𐌰 {{SITENAME}}",
-       "nologinlink": "𐍃𐌺𐌰𐍀𐌴𐌹 𐌺𐌰𐍅𐍄𐍃𐌾𐍉𐌽",
        "createaccount": "𐍃𐌺𐌰𐍀𐌴𐌹 𐌺𐌰𐍅𐍄𐍃𐌾𐍉𐌽",
-       "gotaccount": "𐌾𐌿 𐌺𐌰𐍅𐍄𐍃𐌾𐍉𐌽 𐌷𐌰𐌱𐌰𐌹𐍃? $1.",
-       "gotaccountlink": "𐌰𐍄𐌲𐌰𐌲𐌲",
        "userlogin-resetpassword-link": "𐌿𐍆𐌰𐍂𐌼𐌿𐌽𐌽𐍉𐌳𐌴𐍃 𐌸𐌴𐌹𐌽𐌰𐌼𐌼𐌰 𐌲𐌰𐌼𐍉𐍄𐌰𐍅𐌰𐌿𐍂𐌳𐌰?",
        "userlogin-helplink2": "𐌷𐌹𐌻𐍀𐌰 𐌼𐌹𐌸 𐌰𐍄𐌲𐌰𐌲𐌲𐌰",
        "createacct-emailoptional": "𐌴-𐌱𐍉𐌺𐍉𐍃 (𐌼𐌰𐌷𐍄𐌴𐌹𐌲𐍉𐍃)",
        "createacct-email-ph": "𐌼𐌴𐌻𐌴𐌹 𐌸𐌴𐌹𐌽𐍉𐍃 𐌴-𐌱𐍉𐌺𐍉𐍃",
-       "createaccountreason": "𐌲𐍂𐌿𐌽𐌳𐌿𐍃:",
        "createacct-reason": "𐌲𐍂𐌿𐌽𐌳𐌿𐍃",
        "createacct-submit": "𐍃𐌺𐌰𐍀𐌴𐌹 𐌸𐌴𐌹𐌽𐌰 𐌺𐌰𐍅𐍄𐍃𐌾𐍉𐌽",
        "createacct-benefit-heading": "{{SITENAME}} 𐍄𐌰𐍅𐌹𐌸 𐌹𐍃𐍄 𐍆𐍂𐌰𐌼 𐌼𐌰𐌽𐌽𐌰𐌼 𐍃𐍅𐌴 𐌸𐌿𐌺.",
        "minoredit": "𐌸𐌰𐍄𐌰 𐌹𐍃𐍄 𐌼𐌹𐌽𐌽𐌹𐌶𐌴𐌹 𐌹𐌽𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐍃",
        "watchthis": "𐌰𐍄𐍅𐌹𐍄 𐌻𐌰𐌿𐌱𐌰",
        "savearticle": "𐌲𐌰𐍆𐌰𐍃𐍄 𐌻𐌰𐌿𐍆",
+       "publishpage": "𐌼𐌴𐍂𐌴𐌹 𐌻𐌰𐌿𐍆",
        "preview": "𐍆𐌰𐌿𐍂𐌰𐍃𐌹𐌿𐌽𐍃",
        "showpreview": "𐌰𐍄𐌰𐌿𐌲𐌴𐌹 𐍆𐌰𐌿𐍂𐌰𐍃𐌹𐌿𐌽",
        "showdiff": "𐌰𐍄𐌰𐌿𐌲𐌴𐌹 𐌹𐌽𐌼𐌰𐌹𐌳𐌹𐌽𐌹𐌽𐍃",
        "rcshowhidemine": "$1 𐌼𐌴𐌹𐌽𐍉𐍃 𐌹𐌽𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐍉𐍃",
        "rcshowhidemine-show": "𐌰𐍄𐌰𐌿𐌲𐌴𐌹",
        "rcshowhidemine-hide": "𐌰𐍆𐍆𐌹𐌻𐌷",
-       "rclinks": "𐌰𐍄𐌰𐌿𐌲𐌴𐌹 𐌰𐍆𐍄𐌿𐌼𐌹𐍃𐍄𐍉𐍃 $1 𐌹𐌽𐌼𐌰𐌹𐌳𐌹𐌽𐌹𐌽𐍃 𐌹𐌽 𐌰𐍆𐍄𐌿𐌼𐌹𐍃𐍄𐌰𐌹𐌼 $2 𐌳𐌰𐌲𐌰𐌼 <br />$3",
+       "rclinks": "𐌰𐍄𐌰𐌿𐌲𐌴𐌹 𐌰𐍆𐍄𐌿𐌼𐌹𐍃𐍄𐍉𐍃 $1 𐌹𐌽𐌼𐌰𐌹𐌳𐌹𐌽𐌹𐌽𐍃 𐌹𐌽 𐌰𐍆𐍄𐌿𐌼𐌹𐍃𐍄𐌰𐌹𐌼 $2 𐌳𐌰𐌲𐌰𐌼",
        "diff": "𐌼𐌹𐍃𐍃",
        "hist": "𐍃𐍀𐌹𐌻𐌻",
        "hide": "𐌰𐍆𐍆𐌹𐌻𐌷",
index 99c0a74..ff33cf2 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-resetpassword-link": "Λανθάνεσαι σήμα σοι;",
        "userlogin-helplink2": "Βοήθεια δια σύνδεσιν",
        "createacct-emailoptional": "Ἠλεκτρονική ἀλληλογραφίαν (προαιρετικόν)",
        "createacct-email-ph": "Παρέχειν διεύθυνσην ἤλεκτρονικής ἀλληλογραφίας σου",
        "createaccountmail": "ἠλεκτρονικῇ ἐπιστολῇ",
-       "createaccountreason": "Αἰτία",
        "createacct-submit": "Λογισμὸν ποιεῖν",
        "createacct-benefit-heading": "{{SITENAME}} ποιούται ὐπό ἀνθρώπων ἐσού ώς.",
        "createacct-benefit-body1": "{{PLURAL:$1|μεταγραφή|μεταγραφαί}}",
        "saveprefs": "Γράφειν",
        "restoreprefs": "Ἐπανιστάναι ἁπάσας τὰς προκαθωρισμένας ῥυθμίσεις",
        "prefs-editing": "Τὸ μεταγράφειν",
-       "rows": "Σειραί:",
-       "columns": "Στῆλαι:",
        "searchresultshead": "Ζητεῖν",
        "stub-threshold": "Ἄνω φράγμα διὰ τοῦς <a href=\"#\" class=\"stub\">συνδέσμους πρὸς λείμματα</a> (δυφία):",
        "stub-threshold-disabled": "Ἀπενεργηθέν",
        "userrights-reason": "Αἰτία:",
        "userrights-no-interwiki": "Οὐ κατέχεις τὴν ἄδειαν μεταγραφῆς τῶν δικαιωμάτων χρωμένου ἐν ἄλλοις βίκι.",
        "userrights-nodatabase": "Ἡ βάσις δεδομένων $1 οὐχ ὑπάρχει ἢ οὐκ ἔστι τοπική.",
-       "userrights-nologin": "Δεῖ σε [[Special:UserLogin|συνδεῖσθαι]] μετὰ ἐπιτρόπου λογισμοῦ τινὸς πρὸ τοῦ μεταγράφειν τὰ δικαιώματα χρωμένου.",
-       "userrights-notallowed": "Ὁ λογισμός σου οὐκ ἔχει ἄδειαν τοῦ ὁρίσειν δικαιώματα χρωμένων.",
        "userrights-changeable-col": "Μεταβλητέαι ὁμάδες",
        "userrights-unchangeable-col": "Μὴ μεταβλητέαι ὁμάδες",
        "group": "Ὁμάς:",
        "right-protect": "Ἀλλάττειν κλίμακα προστασίας καὶ μεταγράφειν τὰς φυλαττομένας δέλτους",
        "right-editprotected": "Μεταγράφειν φυλαττομένας δέλτους (ἄνευ διαδοχικῆς προστασίας)",
        "right-editinterface": "Μεταγράφειν τὸ τοῦ χρωμένου περιβάλλον ἀλληλεπιδράσεως",
-       "right-editusercssjs": "Μεταγράφειν ἑτέρων χρωμένων CSS- καὶ JS-ἀρχεῖα",
        "right-editusercss": "Μεταγράφειν ἑτέρων χρωμένων CSS-ἀρχεῖα",
        "right-edituserjs": "Μεταγράφειν ἑτέρων χρωμένων JS-ἀρχεῖα",
        "right-markbotedits": "Σήμανσις μεταγραφῶν οἵπερ ἐπαναφέρθησαν ὡς μεταγραφῶν ὑπ' αὐτομάτων",
        "rcshowhidemine": "$1 μεταγραφαί ἐμού",
        "rcshowhidemine-show": "Δεικνύναι",
        "rcshowhidemine-hide": "Κρύπτειν",
-       "rclinks": "Ἐμφάνισις τῶν τελευταίων $1 ἀλλαγῶν τῷ χρονικῷ διαστήματι τῶν τελευταίων $2 ἡμερῶν <br />$3",
+       "rclinks": "Ἐμφάνισις τῶν τελευταίων $1 ἀλλαγῶν τῷ χρονικῷ διαστήματι τῶν τελευταίων $2 ἡμερῶν",
        "diff": "διαφ.",
        "hist": "Ἰστ.",
        "hide": "Κρύπτειν",
        "undeleteviewlink": "ὁρᾶν",
        "undeleteinvert": "Ἀναστρέφειν τὴν ἐπιλογήν",
        "undeletecomment": "Αἰτία:",
-       "undeletedrevisions": "{{PLURAL:$1|1 ἀναθεωρήσις|$1 ἀναθεωρήσεις}} ἀποκατεστάθησαν",
-       "undeletedrevisions-files": "{{PLURAL:$1|1 ἀναθεωρήσις|$1 ἀναθεωρήσεις}} καὶ {{PLURAL:$2|1 ἀρχεῖον|$2 ἀρχεῖα}} ἀποκατεστάθησαν",
-       "undeletedfiles": "{{PLURAL:$1|1 ἀρχεῖον|$1 ἀρχεῖα}} ἀποκατεστάθησαν",
        "cannotundelete": "Ἡ ἐκδιαγραφὴ ἀπετεύχθη·\nἕτερός τις ἐνδέχεται πρῶτος ἐκδιαγεγραφέναι τὴν δέλτον.",
        "undelete-search-box": "Ζητεῖν διαγεγραμμένας δέλτους",
        "undelete-search-prefix": "Δεικνύναι δέλτους· ἐκκινεῖν ἐκ:",
        "logentry-newusers-create": "Ὀ λογισμός χρώμενου $1 {{GENDER:$2|created}} ἐποιεῖθηκε",
        "logentry-upload-upload": "$1 {{GENDER:$2|μεταφόρτωσε}} $3",
        "rightsnone": "(Οὐδέν)",
-       "revdelete-summary": "σύνοψις μεταγραφῶν",
        "feedback-cancel": "Ἀκυροῦν",
        "searchsuggest-search": "Ζητεῖν",
        "searchsuggest-containing": "περιέχον...",
index 0a398af..ea5c761 100644 (file)
@@ -46,7 +46,7 @@
        "tog-previewontop": "Vorschou oberhalb vom Editierfänschter aazeige",
        "tog-previewonfirst": "Vorschou scho bim ersten Editieren azeige",
        "tog-enotifwatchlistpages": "Schick mer e Mail, wänn e Syte oder e Datei gänderet wird, wun i beobachte due",
-       "tog-enotifusertalkpages": "Schick mer es Mail, we öpper myni Benutzerdiskussionssyte het gänderet",
+       "tog-enotifusertalkpages": "Schick mer es Mail, we öpper myni Benutzerdiskussionssyte het gänderet",
        "tog-enotifminoredits": "Au bi chlaine Änderige an Syte oder Dateie ne Mail schicke",
        "tog-enotifrevealaddr": "Dyni E-Mail-Adrässe wird i Benachrichtigungsmails zeigt",
        "tog-shownumberswatching": "Aazahl Benutzer aazeige, wo ne Syten am Aaluege sy (i den Artikelsyte, i de «letschten Änderigen» und i der Beobachtigslischte)",
        "prefs-tokenwatchlist": "Schlüssel für persönleche Webfeed",
        "prefs-diffs": "Versionsverglych",
        "prefs-help-prefershttps": "Die Ystellig würkt sech uus, we du di ds nächste Mal amäldisch.",
-       "prefswarning-warning": "Du hesch Ystellige gänderet wo no nid gspycheret sy.\nWe du die Syte verlasch, ohni uf «$1» z drücke, de gö die Änderige verlore.",
+       "prefswarning-warning": "Du hesch Ystellige gänderet wo no nid gspycheret sy.\nWe du die Syte verlasch, ohni uf «$1» z drücke, de gö die Änderige verlore.",
        "prefs-tabs-navigation-hint": "Tipp: Mit der linggen u der rächte Pfyltaste chasch zwüsche de Tabs wächsle.",
        "userrights": "Benutzerrächtsverwaltig",
        "userrights-lookup-user": "Verwalt d Gruppezuegherigkeit",
        "right-editsemiprotected": "Mit «{{protect-level-autoconfirmed}}» gschützti Syten ändere",
        "right-editcontentmodel": "Inhaltsmodäll vo’re Syten ändere",
        "right-editinterface": "Benutzerinterface bearbeite",
-       "right-editusercssjs": "Bearbeite vu CSS- und JS-Dateie vu andere Benutzer",
        "right-editusercss": "Bearbeite vu CSS-Dateie vu andere Benutzer",
        "right-edituserjs": "Bearbeite vu JS-Dateie vu andere Benutzer",
        "right-editmyusercss": "Dyni eigete CSS-Dateien ändere",
        "rcshowhidecategorization": "Sytekategorisierige $1",
        "rcshowhidecategorization-show": "zeige",
        "rcshowhidecategorization-hide": "nid zeige",
-       "rclinks": "Zeig di letschte $1 Änderige vo de vergangene $2 Täg.<br />$3",
+       "rclinks": "Zeig di letschte $1 Änderige vo de vergangene $2 Täg.",
        "diff": "Unterschid",
        "hist": "Versione",
        "hide": "usblände",
        "notvisiblerev": "Version isch glescht wore",
        "watchlist-details": "{{PLURAL:$1|1 Syte wird|$1 Syte wärde}} beobachtet (Diskussionssyte nid zelt, aber ou beobachtet).",
        "wlheader-enotif": "E-Mail-Benachrichtigung isch aktiviert.",
-       "wlheader-showupdated": "Syte, wo syt em letste Bsuech hei gänderet, sy <strong>fett</strong> dargstellt.",
+       "wlheader-showupdated": "Syte, wo syt em letste Bsuech hei gänderet, sy <strong>fett</strong> dargstellt.",
        "wlnote": "Unde {{PLURAL:$1|steit di letsti Änderig|stöh di letste <strong>$1</strong> Änderigen}} us {{PLURAL:$2|der letste Stund|de letste <strong>$2</strong> Stunde}}. Stand: $3, $4 Uhr.",
        "wlshowlast": "Zeig di letste $1 Stunden und $2 Täg",
        "watchlist-options": "Aazeigoptione",
        "changecontentmodel-title-label": "Sytetitel",
        "changecontentmodel-model-label": "Nöüs Inhaltsmodäll",
        "changecontentmodel-reason-label": "Grund:",
-       "changecontentmodel-success-title": "Ds Inhaltsmodäll het gänderet",
-       "changecontentmodel-success-text": "Der Inhaltstyp vo [[:$1]] het gänderet.",
+       "changecontentmodel-success-title": "Ds Inhaltsmodäll het gänderet",
+       "changecontentmodel-success-text": "Der Inhaltstyp vo [[:$1]] het gänderet.",
        "changecontentmodel-cannot-convert": "Der Inhalt vo [[:$1]] lat sech nid zum Typ $2 la konvertiere.",
        "changecontentmodel-nodirectediting": "Ds Inhaltsmodäll «$1» lat ds diräkte Bearbeite nid zue",
        "log-name-contentmodel": "Protokoll vo Inhaltsmodälländerige",
        "log-description-contentmodel": "Ereignis, wo mit em Inhaltsmodäll von ere Syte z tüe hei",
-       "logentry-contentmodel-change": "{{GENDER:$2|Der $1|D $1|$1}} het ds Inhaltsmodäll vor Syte $3 gänderet vo «$4» uf «$5»",
+       "logentry-contentmodel-change": "{{GENDER:$2|Der $1|D $1|$1}} het ds Inhaltsmodäll vor Syte $3 gänderet vo «$4» uf «$5»",
        "logentry-contentmodel-change-revertlink": "zrüggsetze",
        "logentry-contentmodel-change-revert": "zrüggsetze",
        "protectlogpage": "Syteschutz-Logbuech",
        "undeleteviewlink": "aaluege",
        "undeleteinvert": "Uswahl umchehre",
        "undeletecomment": "Grund:",
-       "undeletedrevisions": "{{PLURAL:$1|ei Revision|$1 Revisione}} wider zruckgholt.",
-       "undeletedrevisions-files": "{{PLURAL:$1|1 Version|$1 Versione}} un {{PLURAL:$2|1 Datei|$2 Dateie}} sin widerhärgstellt wore",
-       "undeletedfiles": "{{PLURAL:$1|1 Datei isch|$1 Dateie sin}} widerhärgstellt wore",
        "cannotundelete": "D Widerhärstellig isch nit gange:\n\n$1",
        "undeletedpage": "'''„$1“''' isch widerhärgstellt wore.\n\nIm [[Special:Log/delete|Lesch-Logbuech]] findsch e Ibersicht vu dr gleschte un widerhärgstellte Syte.",
        "undelete-header": "Lueg im [[Special:Log/delete|Lesch-Logbuech]] no Syte, wu in dr letschte Zyt glescht wore sin.",
        "logentry-block-unblock": "{{GENDER:$2|Der $1|D $1|$1}} het {{GENDER:$4|der $3|d $3|$3}} entsperrt",
        "logentry-block-reblock": "{{GENDER:$2|Der $1|D $1|$1}} het {{GENDER:$4|der $3|d $3|$3}} bis $5 gsperrt $6",
        "logentry-suppress-block": "{{GENDER:$2|Der $1|D $1|$1}} het {{GENDER:$4|der $3|d $3|$3}} bis $5 gsperrt $6",
-       "logentry-suppress-reblock": "{{GENDER:$2|Der $1|D $1|$1}} het d Sperrystellige {{GENDER:$4|füre $3|für d $3|für $3}} bis $5 gänderet $6",
+       "logentry-suppress-reblock": "{{GENDER:$2|Der $1|D $1|$1}} het d Sperrystellige {{GENDER:$4|füre $3|für d $3|für $3}} bis $5 gänderet $6",
        "logentry-import-upload": "{{GENDER:$2|Der $1|D $1|$1}} het $3 importiert per Datei-Ufelade",
        "logentry-import-interwiki": "{{GENDER:$2|Der $1|D $1|$1}} het $3 vomenen andere Wiki importiert",
        "logentry-merge-merge": "{{GENDER:$2|Der $1|D $1|$1}} het $3 i $4 zämegfüert (Versione bis $5)",
        "logentry-protect-unprotect": "{{GENDER:$2|Der $1|D $1|$1}} het der Schutz vor Syte $3 furtgnoh.",
        "logentry-protect-protect": "{{GENDER:$2|Der $1|D $1|$1}} het d Syte $3 gschützt $4",
        "logentry-protect-protect-cascade": "{{GENDER:$2|Der $1|D $1|$1}} het d Syte $3 gschützt $4 [mit Kaskade]",
-       "logentry-protect-modify": "{{GENDER:$2|Der $1|D $1|$1}} het ds Schutzniveau vor Syte $3 gänderet $4",
-       "logentry-protect-modify-cascade": "{{GENDER:$2|Der $1|D $1|$1}} het ds Schutzniveau vor Syte $3 gänderet $4 [mit Kaskade]",
+       "logentry-protect-modify": "{{GENDER:$2|Der $1|D $1|$1}} het ds Schutzniveau vor Syte $3 gänderet $4",
+       "logentry-protect-modify-cascade": "{{GENDER:$2|Der $1|D $1|$1}} het ds Schutzniveau vor Syte $3 gänderet $4 [mit Kaskade]",
        "logentry-rights-rights": "{{GENDER:$2|Der $1|D $1|$1}} het d Gruppezuegherigkeit fir $3 vu $4 uf $5 gänderet",
        "logentry-rights-rights-legacy": "{{GENDER:$2|Der $1|D $1|$1}} het d Gruppezuegherigkeit fir $3 gänderet",
        "logentry-rights-autopromote": "{{GENDER:$2|Der $1|D $1|$1}} isch automatisch vo $4 uf $5 beförderet worde",
        "log-name-pagelang": "Sprachänderigs-Logbuech",
        "log-description-pagelang": "Das isch es Logbuech für Änderige vo Sytesprache.",
        "logentry-pagelang-pagelang": "{{GENDER:$2|Der $1|D $1|$1}} het d Sytesprach vo $3 vo $4 uf $5 g’änderet.",
-       "default-skin-not-found": "He nu so de! Di vorygstellti Benutzeroberflächi für dys Wiki – definiert under <code dir=\"ltr\">$wgDefaultSkin</code> als <code>$1</code> – steit nid zur Verfüegig.\n\nI dyren Installation het’s schynt’s di {{PLURAL:$4|folgendi Benutzeroberflächi|folgende Benutzeroberflächine}}:\n\n$2\n\nLueg under [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: Skin configuration] für Information drüber, wie d’se chasch {{PLURAL:$4|aktiviere|aktivieren und eini dervo chasch vorystelle}}.\n\n; Falls du MediaWiki grad installiert hesch:\n: Müglecherwys hesch es ab git installiert oder mit eren andere Methode diräkt ab em Quellcode. De isch es z erwarte. Probier [https://www.mediawiki.org/wiki/Category:All_skins Benutzeroberflächine us em Verzeichnis vo mediawiki.org] z installiere. Es git mehreri Müglechkeite derzue:\n:* Der [https://www.mediawiki.org/wiki/Download Installierer als tar.gz-Datei] abelade. Är het mehreri Benutzeroberflächinen und Erwyterige derby. Du chasch ds Benutzeroberflächine-Verzeichnis <code>skins/</code> druus use kopiere.\n:* tar.gz-Dateie für einzelni Benutzeroberflächine vo [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org] abelade.\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins Git zum Abelade vo MediaWiki-Benutzeroberflächine bruuche].\n: We du e MediaWiki-Entwickler/in bisch, söt’s derby nid zu Konflikte mit dym git repository cho.\n\n; Falls du MediaWiki grad ufe nöüst Stand hesch ’bracht:\n: MediaWiki ab 1.24 aktiviert di installierte Benutzeroberflächine nümm automatisch (lueg [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual: Skin autodiscovery]). Für di {{PLURAL:$5|installierti Benutzeroberflächi|installierte Benutzeroberflächine}} z aktiviere, chasch di {{PLURAL:$5|folgendi Zyle|folgende Zyle}} i d Datei <code>LocalSettings.php</code> kopiere:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Falls du grad d Datei <code>LocalSettings.php</code> hesch g’änderet:\n: Lueg genau nache, öb’s vilech Tippfähler het i de Näme vo de Benutzeroberflächine.",
-       "default-skin-not-found-no-skins": "He nu so de! Di vorygstellti Benutzeroberflächi für dys Wiki – definiert under <code dir=\"ltr\">$wgDefaultSkin</code> als <code>$1</code> – steit nid zur Verfüegig.\n\nDu hesch kener Benutzeroberflächinen installiert.\n\n; Falls du MediaWiki grad installiert oder ufe nöüst Stand ’bracht hesch:\n: Müglecherwys hesch es ab git installiert oder mit eren andere Methode diräkt ab em Quellcode. De isch es z erwarte. MediaWiki ab 1.24 het kener Benutzeroberflächinen im Houpt-Repository derby. Probier [https://www.mediawiki.org/wiki/Category:All_skins Benutzeroberflächine us em Verzeichnis vo mediawiki.org] z installiere. Es git mehreri Müglechkeite derzue:\n:* Der [https://www.mediawiki.org/wiki/Download Installierer als tar.gz-Datei] abelade. Är het mehreri Benutzeroberflächinen und Erwyterige derby. Du chasch ds Benutzeroberflächine-Verzeichnis <code>skins/</code> druus use kopiere.\n:* tar.gz-Dateie für einzelni Benutzeroberflächine vo [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org] abelade.\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins Git zum Abelade vo MediaWiki-Benutzeroberflächine bruuche].\n: We du e MediaWiki-Entwickler/in bisch, söt’s derby nid zu Konflikte mit dym Git-Repository cho. Lueg under [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: Skin configuration] für Information drüber, wie du Benutzeroberflächi chasch aktivieren und vorystelle.",
+       "default-skin-not-found": "He nu so de! Di vorygstellti Benutzeroberflächi für dys Wiki – definiert under <code dir=\"ltr\">$wgDefaultSkin</code> als <code>$1</code> – steit nid zur Verfüegig.\n\nI dyren Installation het’s schynt’s di {{PLURAL:$4|folgendi Benutzeroberflächi|folgende Benutzeroberflächine}}:\n\n$2\n\nLueg under [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: Skin configuration] für Information drüber, wie d se chasch {{PLURAL:$4|aktiviere|aktivieren und eini dervo chasch vorystelle}}.\n\n; Falls du MediaWiki grad installiert hesch:\n: Müglecherwys hesch es ab git installiert oder mit eren andere Methode diräkt ab em Quellcode. De isch es z erwarte. Probier [https://www.mediawiki.org/wiki/Category:All_skins Benutzeroberflächine us em Verzeichnis vo mediawiki.org] z installiere. Es git mehreri Müglechkeite derzue:\n:* Der [https://www.mediawiki.org/wiki/Download Installierer als tar.gz-Datei] abelade. Är het mehreri Benutzeroberflächinen und Erwyterige derby. Du chasch ds Benutzeroberflächine-Verzeichnis <code>skins/</code> druus use kopiere.\n:* tar.gz-Dateie für einzelni Benutzeroberflächine vo [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org] abelade.\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins Git zum Abelade vo MediaWiki-Benutzeroberflächine bruuche].\n: We du e MediaWiki-Entwickler/in bisch, söt s derby nid zu Konflikte mit dym git Repositorium cho.\n\n; Falls du MediaWiki grad ufe nöüst Stand hesch bbracht:\n: MediaWiki ab 1.24 aktiviert di installierte Benutzeroberflächine nümm automatisch (lueg [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual: Skin autodiscovery]). Für di {{PLURAL:$5|installierti Benutzeroberflächi|installierte Benutzeroberflächine}} z aktiviere, chasch di {{PLURAL:$5|folgendi Zyle|folgende Zyle}} i d Datei <code>LocalSettings.php</code> kopiere:\n\n<pre dir=\"ltr\">$3</pre>\n\n; Falls du grad d Datei <code>LocalSettings.php</code> hesch gänderet:\n: Lueg genau nache, öb s vilech Tippfähler het i de Näme vo de Benutzeroberflächine.",
+       "default-skin-not-found-no-skins": "He nu so de! Di vorygstellti Benutzeroberflächi für dys Wiki – definiert under <code dir=\"ltr\">$wgDefaultSkin</code> als <code>$1</code> – steit nid zur Verfüegig.\n\nDu hesch kener Benutzeroberflächinen installiert.\n\n; Falls du MediaWiki grad installiert oder ufe nöüst Stand bracht hesch:\n: Müglecherwys hesch es ab git installiert oder mit eren andere Methode diräkt ab em Quellcode. De isch es z erwarte. MediaWiki ab 1.24 het kener Benutzeroberflächinen im Houpt-Repository derby. Probier [https://www.mediawiki.org/wiki/Category:All_skins Benutzeroberflächine us em Verzeichnis vo mediawiki.org] z installiere. Es git mehreri Müglechkeite derzue:\n:* Der [https://www.mediawiki.org/wiki/Download Installierer als tar.gz-Datei] abelade. Är het mehreri Benutzeroberflächinen und Erwyterige derby. Du chasch ds Benutzeroberflächine-Verzeichnis <code>skins/</code> druus use kopiere.\n:* tar.gz-Dateie für einzelni Benutzeroberflächine vo [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org] abelade.\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins Git zum Abelade vo MediaWiki-Benutzeroberflächine bruuche].\n: We du e MediaWiki-Entwickler/in bisch, söt s derby nid zu Konflikte mit dym Git-Repositorium cho. Lueg under [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: Skin configuration] für Information drüber, wie du Benutzeroberflächi chasch aktivieren und vorystelle.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (aktiviert)",
        "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 (<strong>deaktiviert</strong>)",
        "mediastatistics": "Statistike zu Dateitype",
index 30e2574..0982bf4 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": "પોતાની પ્રવેશ માહિતી ભૂલી ગયા છો?",
        "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-submit": "તમારું ખાતું બનાવો",
        "saveprefs": "સાચવો",
        "restoreprefs": "મૂળ વિકલ્પો ફરી ગોઠવો (બધાં વિભાગોમાં)",
        "prefs-editing": "સંપાદન",
-       "rows": "પંક્તિઓ",
-       "columns": "સ્તંભ",
        "searchresultshead": "શોધો",
        "stub-threshold": "<a href=\"#\" class=\"stub\">stub link</a>નાફોર્મમેટિંગ માટે શરૂઆતિ પગથિયું  (બાઈટ્સ):",
        "stub-threshold-disabled": "નિષ્ક્રિય કરેલ",
        "right-protect": "સંરક્ષણ સ્તર બદલો અને ધોધાકાર-સંરક્ષિત પાનાઓમાં ફેરફાર કરો.",
        "right-editprotected": "પાનામાં \"{{int:protect-level-sysop}}\" તરીકે ફેરફાર કરો",
        "right-editinterface": "સભ્ય સંભાષણ પટલમાં ફેરફાર કરો",
-       "right-editusercssjs": "અન્ય સભ્યોની CSS અને JavaScript ફાઇલમાં ફેરફાર કરો",
        "right-editusercss": "અન્ય સભ્યોની CSS ફાઇલમાં ફેરફાર કરો",
        "right-edituserjs": "અન્ય સભ્યોની JavaScript ફાઇલમાં ફેરફાર કરો",
        "right-editmyusercss": "તમારી પોતાની CSS ફાઇલોમાં ફેરફાર કરો",
        "rcshowhidemine": "મારા ફેરફારો $1",
        "rcshowhidemine-show": "બતાવો",
        "rcshowhidemine-hide": "છુપાવો",
-       "rclinks": "છેલ્લાં $2 દિવસમાં થયેલા છેલ્લાં $1 ફેરફારો દર્શાવો<br />$3",
+       "rclinks": "છેલ્લાં $2 દિવસમાં થયેલા છેલ્લાં $1 ફેરફારો દર્શાવો",
        "diff": "ભેદ",
        "hist": "ઇતિહાસ",
        "hide": "છુપાવો",
        "undeleteviewlink": "જુઓ",
        "undeleteinvert": "પસંદગી ઉલટાવો",
        "undeletecomment": "કારણ:",
-       "undeletedrevisions": "{{PLURAL:$1|૧ સંપાદન|$1 સંપાદનો}} પુન સ્થાપિત કરાયા",
-       "undeletedrevisions-files": "{{PLURAL:$1|1 ફેરફાર|$1 ફેરફારો}} અને {{PLURAL:$2|1 ફાઈલા|$2 ફાઈલો}} પુનઃસ્થાપિત",
-       "undeletedfiles": "{{PLURAL:$1|1 ફાઇલ|$1 ફાઇલો}} પુનઃસ્થાપિત",
        "cannotundelete": "પુનર્જીવિત કરવાનું કાર્ય અસફળ:\n$1",
        "undeletedpage": "'''$1 પુનઃસ્થાપિત કરાયા'''\n\nતાજેતરમાં હટાવેલા કે પુનઃસ્થાપિત થયેલા ફેરફારની નોંધ નો સંદર્ભ અહીં ઉપ્લબ્ધ [[Special:Log/delete|deletion log]].",
        "undelete-header": "હાલમાં હટાવેલ પાનાનો  [[Special:Log/delete|the deletion log]]  જુઓ",
        "logentry-newusers-autocreate": "વપરાશકર્તા ખાતું $1 આપમેળે {{GENDER:$2|બનાવવામાં આવ્યું હતું}}",
        "logentry-upload-upload": "$1 {{GENDER:$2|દ્વારા ચડાવેલ}} $3",
        "rightsnone": "(કંઈ નહી)",
-       "revdelete-summary": "સંપાદનનો સંક્ષિપ્ત અહેવાલ",
        "feedback-adding": "પ્રતિભાવ આ પાના પર ઉમેરાઈ રહ્યો છે.",
        "feedback-bugcheck": "સરસ! જરા જોઈ લેશો કે આ  પહેલેથી જ હાજર [$1 known bugs] નથીને?",
        "feedback-bugnew": "મેં તપાસ્યું.  નવી ત્રુટીની જાણ કરો.",
        "feedback-thanks-title": "આભાર !",
        "searchsuggest-search": "{{SITENAME}} શોધો",
        "searchsuggest-containing": "આ શબ્દ ધરાવતા...",
-       "api-error-badaccess-groups": "આ વિકિ પર ફાઈલ ચઢાવવાની પરવાનગી તમને નથી.",
        "api-error-badtoken": "આંતરીક ત્રુટી: ખરાબ ટોકન",
-       "api-error-copyuploaddisabled": "આ સર્વર પર URL દ્વારા માહિતી ચઢાવવા પર પ્રતિબંધ",
-       "api-error-duplicate": "સમાન માહિતી ધરાવતી {{PLURAL:$1|બીજી ફાઇલ|બીજી અન્ય ફાઇલ્સ}} સાઇટ પર હાજર છે જ.",
-       "api-error-duplicate-archive": "ત્યાં {{PLURAL:$1|was another file|were some other files}} તે જ મહિતી સાથે મોજૂદ છે , પણ {{PLURAL:$1|it was|they were}} હટાવી દો.",
-       "api-error-empty-file": "તમે ચડાવેલ ફાઈલ ખાલી છે",
        "api-error-emptypage": "નવા ખાલી પાનાં બનાવવાની પરવાનગી નથી.",
-       "api-error-fetchfileerror": "આંતરીક ત્રુટી: ફાઈલ લાવતી વખતે અમુક ગડબડ થઈ",
-       "api-error-fileexists-forbidden": "\"$1\" નામે ફાઇલ અસ્તિત્વમાં છે, અને તે અધિલેખિત થઈ શકશે નહિ.",
-       "api-error-file-too-large": "તમે ચડાવેલી ફાઈલ ખૂબ મોટી છે",
-       "api-error-filename-tooshort": "ફાઇલ નામ ખૂબ ટૂંકું છે",
-       "api-error-filetype-banned": "આ પ્રકારની ફાઈલ પ્રતિબંધિત છે.",
-       "api-error-filetype-banned-type": "$1 {{PLURAL:$4| માન્ય ફાઇલ પ્રકાર નથી| માન્ય ફાઇલ પ્રકારો નથી }}. માન્ય {{PLURAL:$3|ફાઇલ પ્રકાર છે|ફાઇલ પ્રકારો  છે}} $2.",
-       "api-error-filetype-missing": "ફાઈલને ઍક્સટેન્શન નથી",
-       "api-error-hookaborted": "તમે કરેલ ફેરફારો વિસ્તારીત ખૂંટા દ્વારા રોકી દેવાયા.",
-       "api-error-http": "આંતરીક ક્ષતિ: સર્વસનો સંપર્ક કરવામાં નિષ્ફળતા",
-       "api-error-illegal-filename": "ફાઈલા નામને પરવાનગી નથી",
-       "api-error-internal-error": "આંતરીક ત્રુટિ : વિકિ પર ફાઈલ ચડાવતા કાંઈક ગડબડ થઈ",
-       "api-error-invalid-file-key": "આંતરીક ક્ષતિ: હંગામી સંગ્રહ સ્થળ પર ફાઈન ન મળી",
-       "api-error-missingparam": "આંતરીક ત્રુટી: અરજીમાં માહિતી ખુટે છે",
-       "api-error-missingresult": "આંતરીક ત્રુટી:  નકલ સફળ રહી કે કેમ તેની ખાત્રી ન કરી શકાઈ.",
-       "api-error-mustbeloggedin": "ફાઈલ ચઢાવવા તમારે લોગીન કરેલું હોવું જોઈએ.",
-       "api-error-mustbeposted": "આંતરીક ત્રુટી: તમારી વિનંતિમાં HTTP POST હોવી જોઈએ",
-       "api-error-noimageinfo": "ફાઈલ સફળતા પૂર્વક ચઢાવાઈ, પણ  ફાઈલ વિષે સર્વરે પૂરી માહિતી ન આપી",
-       "api-error-nomodule": "આંતરીક ક્ષતિ: ફાઈલ ચઢાવવાનું મોડ્યુલ સેટ નથી",
-       "api-error-ok-but-empty": "આંતરીક ત્રુટી: સર્વર તરફથી કોઈ પ્રત્યુત્તર નથી",
-       "api-error-overwrite": "વિહરમાન ફાઇલ પર પુનર્લેખન કરવાની પરવાનગી નથી",
-       "api-error-stashfailed": "આંતરીક ક્ષતિ: હંગામી ફાઈલ સંચયમાં સર્વર નિષ્ફળ",
        "api-error-publishfailed": "આંતરીક ક્ષતિ: હંગામી ફાઈલ સંચયમાં સર્વર નિષ્ફળ.",
-       "api-error-timeout": "અપેક્ષિત સમય સુધી સર્વરે પ્રત્યુત્તર ન આપ્યો.",
-       "api-error-unclassified": "અજ્ઞાત ચૂક થઈ.",
-       "api-error-unknown-code": "અજ્ઞાત ક્ષતિ: \"$1\".",
-       "api-error-unknown-error": "આંતરીક ત્રુટિ : તમારી ફાઈલ ચડાવાતા કાંઈક ગડબડ થઈ.",
+       "api-error-stashfailed": "આંતરીક ક્ષતિ: હંગામી ફાઈલ સંચયમાં સર્વર નિષ્ફળ",
        "api-error-unknown-warning": "અજ્ઞાત ચેતચણી: \"$1\".",
        "api-error-unknownerror": "અજ્ઞાત ક્ષતિ: \"$1\".",
-       "api-error-uploaddisabled": "આ વીકી પર અપલોડ નિષ્ક્રિય કરવામાં આવેલ છે",
-       "api-error-verification-error": "ફાઈલ યાતો ખરાબ થઈ ગઈ છે યાતો તેનું ઍક્સટેન્શન (વિસ્તરક) ખોટો છે.",
        "duration-seconds": "$1 {{PLURAL:$1|સેકંડ|સેકંડો}}",
        "duration-minutes": "$1 {{PLURAL:$1|મિનિટ|મિનિટો}}",
        "duration-hours": "$1 {{PLURAL:$1|કલાક|કલાકો}}",
index 7c47068..efda525 100644 (file)
        "yourpasswordagain": "Aascreeu dt'ockle arrey:",
        "login": "Log stiagh",
        "nav-login-createaccount": "Log stiagh / croo coontys",
-       "userlogin": "Log stiagh / croo coontys",
-       "userloginnocreate": "Log stiagh",
        "logout": "Log magh",
        "userlogout": "Log magh",
        "notloggedin": "Cha nel ou loggit stiagh",
-       "nologin": "Nagh vel loggal stiagh ayd? '''$1'''.",
-       "nologinlink": "Croo coontys",
        "createaccount": "Croo coontys",
-       "gotaccount": "Vel coontys ayd hannah? '''$1'''.",
-       "gotaccountlink": "Log stiagh",
        "createaccountmail": "Croo fockle arrey shallidagh gyn tort as cur eh da'n post-l reiht ayd",
-       "createaccountreason": "Fa:",
        "loginerror": "Marranys loggal stiagh",
        "createaccounterror": "Cha nod shin croo coontys: $1",
        "noname": "Cha honree uss ennym ymmydeyr fondagh.",
        "prefs-rendering": "Cummey",
        "saveprefs": "Sauail",
        "prefs-editing": "Reaghey",
-       "columns": "Collooyn:",
        "searchresultshead": "Ronsee",
        "recentchangesdays": "Laaghyn y haishbyney ayns caghlaaghyn s'noa:",
        "savedprefs": "Ta dty hosheeaghtyn sauailt.",
        "rcshowhideanons": "{{PLURAL:$1|$1 ymmydeyr|$1 ymmydeyr|$1 ymmydeyr|$1 ymmydeyryn}} neuenmyssit",
        "rcshowhidepatr": "$1 arraghyn patrolit",
        "rcshowhidemine": "$1 m'arraghyn",
-       "rclinks": "Soilshee {{PLURAL:$1|ny $1 caghlaa|yn $1 chaghlaa|ny $1 chaghlaa|ny $1 caghlaaghyn}} s'jerree ayns {{PLURAL:$2|ny $2 laa|yn $2 laa|ny $2 laa|ny $2 laaghyn}} s'jerree<br />$3",
+       "rclinks": "Soilshee {{PLURAL:$1|ny $1 caghlaa|yn $1 chaghlaa|ny $1 chaghlaa|ny $1 caghlaaghyn}} s'jerree ayns {{PLURAL:$2|ny $2 laa|yn $2 laa|ny $2 laa|ny $2 laaghyn}} s'jerree",
        "diff": "anch",
        "hist": "shen",
        "hide": "Follee",
        "specialpages-group-users": "Ymmydeyryn as kiartyn",
        "tags-edit": "reaghey",
        "rightsnone": "(veg)",
-       "revdelete-summary": "giare-choontey yn reaghey",
        "searchsuggest-search": "Ronsaghey",
        "searchsuggest-containing": "goaill stiagh...",
        "expand_templates_ok": "OK",
index 7afcfaf..7d42e81 100644 (file)
        "rcshowhideliu": "$1 Ma'aikata logaggi",
        "rcshowhideanons": "$1 ma'aikata masu ɓoyayye suna",
        "rcshowhidemine": "$1 sauye-sauyena",
-       "rclinks": "Nuna sauye-sauye $1 na ƙarshe a cikin kwanaki $2 na baya<br />$3",
+       "rclinks": "Nuna sauye-sauye $1 na ƙarshe a cikin kwanaki $2 na baya",
        "diff": "bamban",
        "hist": "Tarihi",
        "hide": "Ɓoye",
index 93ba9a2..5973c0c 100644 (file)
        "externaldberror": "Liá khó-nèn he yù-yî ngiam-chṳn sú-kí-khù chhâ-chho fe̍t-chá ngì fûn hì-thúng kim-chṳ́ kiên-sîn ngì ke ngoi-phu fu-thèu.",
        "login": "Tên-ngi̍p",
        "nav-login-createaccount": "Tên-ngi̍p / khôi sîn fu-thèu",
-       "userlogin": "Tên-ngi̍p / khôi sîn fu-thèu",
-       "userloginnocreate": "Tên-ngi̍p",
        "logout": "Tên-chhut",
        "userlogout": "Tên-chhut",
        "notloggedin": "Hàn-mò tên-ngi̍p",
        "userlogin-noaccount": "Hàn-mò fu-thèu he mò?",
        "userlogin-joinproject": "Chhâm-yi  {{SITENAME}}",
-       "nologin": "Hàn-mò fu-thèu he-mò? $1.",
-       "nologinlink": "Khôi fu-thèu",
        "createaccount": "Khôi fu-thèu",
-       "gotaccount": "Yí-kîn yû fu-thèu he-mò? $1.",
-       "gotaccountlink": "Tên-ngi̍p",
-       "userlogin-resetlink": "M̀-ki-tet ngì-ke tên-ngi̍p sin-sit?",
        "userlogin-resetpassword-link": "Thiâm mong-ki ngì ke me̍t-ma?",
        "userlogin-helplink2": "Tên-ngi̍p hia̍p-chhu",
        "userlogin-loggedin": "汝已作為{{GENDER:$1|$1}}登錄。\n利用以下表單以作為另一賬戶登錄。",
        "createacct-another-email-ph": "輸入電郵地址",
        "createaccountmail": "Sṳ́-yung yit-chak lìm-sṳ̀ ke sùi-kî me̍t-ma, pin chiông khì fat-sung to chṳ́-thin ke thien-chṳ́ yù-khien thi-chí",
        "createacct-realname": "實名(可選)",
-       "createaccountreason": "Ngièn-yîn:",
        "createacct-reason": "Ngièn-yîn:",
        "createacct-reason-ph": "汝做麽嘅愛創建另一隻帳號",
        "createacct-submit": "Khôi fu-thèu",
        "passwordreset-emaildisabled": "電子郵件功能在此 wiki 上已禁用。",
        "passwordreset-username": "Yung-fu-miàng:",
        "passwordreset-domain": "Vet-miàng:",
-       "passwordreset-capture": "查看生成嘅電子郵件係無?",
-       "passwordreset-capture-help": "係講汝選中邇隻框,電子郵件(包括臨時密碼)將顯示,並發送分用戶。",
        "passwordreset-email": "Thien-yù thi-chí:",
        "passwordreset-emailtitle": "在{{SITENAME}}上嘅詳細信息",
        "passwordreset-emailsentemail": "密碼重置電子郵件已發送。",
        "saveprefs": "保存",
        "restoreprefs": "Fî-fu̍k só-yû me̍t-ngin sat-thin (só-yû hong-muk)",
        "prefs-editing": "編寫緊",
-       "rows": "行数:",
-       "columns": "列:",
        "searchresultshead": "搜尋",
        "stub-threshold": "<a href=\"#\" class=\"stub\">短頁面鏈接</a>格式門檻值(字節):",
        "recentchangesdays": "Chui-khiûn kiên-kói tú ke hién-sṳ ngit-sú:",
        "rcshowhidemine": "$1 ngài-ke phiên-siá",
        "rcshowhidemine-show": "Hien",
        "rcshowhidemine-hide": "Ám",
-       "rclinks": "Chán-sṳ chui-khiûn $2-ngit nui chui-sîn ke $1 chhṳ kói-thûng. <br />$3",
+       "rclinks": "Chán-sṳ chui-khiûn $2-ngit nui chui-sîn ke $1 chhṳ kói-thûng.",
        "diff": "chhâ-phe̍t",
        "hist": "li̍t-sṳ́",
        "hide": "Ám",
        "undeletelink": "查看/恢復",
        "undeleteviewlink": "查看",
        "undeletecomment": "Ngièn-yîn:",
-       "undeletedrevisions": "$1-chak siû-thin pán-pún yí-kîn fî-fu̍k",
-       "undeletedrevisions-files": "$1-chak pán-pún lâu $2-chak vùn-khien fûn fî-fu̍k",
-       "undeletedfiles": "$1-chak vùn-khien fûn fî-fu̍k",
        "cannotundelete": "Fî-fu̍k sṳt-phai; khó-nèn chṳ̂-chhièn yí-kîn pûn khì-thâ-ngìn fî-fu̍k.",
        "undeletedpage": "<strong>$1 yí-kîn fûn fî-fu̍k</strong>\n\nChhiáng chhâm-kháu [[Special:Log/delete|san-chhù ngit-chì]] lòi chhà-sûn san-chhù lâu fî-fu̍k ki-liu̍k.",
        "undelete-header": "Ká-sṳ́ oi chhà-sûn chui-khiûn ke ki-liu̍k chhiáng chhâm-khon [[Special:Log/delete|san-chhù ngit-chì]].",
        "logentry-newusers-create": "Yí-kîn {{GENDER:$2|khôi}} yung-fu fu-thèu $1",
        "logentry-upload-upload": "$1 {{GENDER:$2|yí-kîn sông-chhòn}} $3",
        "rightsnone": "(無)",
-       "revdelete-summary": "piên-sip tsak-yêu",
        "searchsuggest-search": "Chhìm"
 }
index 5dcfbd5..e96b8c2 100644 (file)
        "userlogin-remembermypassword": "Hoʻomanaʻo iaʻu",
        "login": "ʻEʻe",
        "nav-login-createaccount": "ʻEʻe / Kāinoa",
-       "userlogin": "ʻEʻe / Kāinoa",
-       "userloginnocreate": "ʻEʻe",
        "logout": "Haʻalele",
        "userlogout": "Haʻalele",
        "notloggedin": "ʻE‘e ʻole",
        "userlogin-noaccount": "ʻAʻohe āu moʻokāki?",
        "userlogin-joinproject": "E komo mai iā {{SITENAME}}",
-       "nologin": "ʻAʻohe āu moʻokāki? '''$1'''.",
-       "nologinlink": "E Kāinoa",
        "createaccount": "E Kāinoa",
-       "gotaccount": "He moʻokāki kāu? '''$1'''.",
-       "gotaccountlink": "ʻEʻe",
-       "userlogin-resetlink": "Ua poina i kāu ʻike ʻeʻe?",
        "userlogin-resetpassword-link": "Ua poina i kāu ʻōlelo hūnā?",
        "userlogin-helplink2": "Ke kōkua ʻana me ka ʻeʻe ʻana",
        "userlogin-loggedin": "Ua ʻeʻe ʻē ʻoe penei: {{GENDER:$1|$1}}.\nHana i ke kahua i lalo no ka ʻeʻe ʻana i kekahi mea hoʻohana ʻē aʻe.",
        "createacct-another-email-ph": "E kikokiko i ka wahinoho lekauila",
        "createaccountmail": "Hana i kekahi ʻōlelo hūnā ponokoho kūikawā a hoʻouna ia i ka wahinoho lekauila i kikokiko ʻia",
        "createacct-realname": "Inoa ʻoiaʻiʻo (kāpae)",
-       "createaccountreason": "Kumu:",
        "createacct-reason": "Kumu",
        "createacct-reason-ph": "No ke aha mai ke kāinoa nei i kekahi moʻokāki ʻē aʻe",
        "createacct-submit": "Kāinoa",
        "saveprefs": "Mālama",
        "restoreprefs": "Hōʻala i nā makemake paʻamau (apau)",
        "prefs-editing": "Hoʻololi",
-       "rows": "Lālani:",
-       "columns": "Koloma:",
        "searchresultshead": "Huli",
        "savedprefs": "Ua mālama ‘ia kāu makemake",
        "timezonelegend": "Kāʻei hola:",
        "rcshowhidemine": "$1 i ka‘u mau hoʻololi",
        "rcshowhidemine-show": "Hōʻike",
        "rcshowhidemine-hide": "Hoʻohūnā",
-       "rclinks": "E hōʻike i nā loli $1 hou, mai $2 (mau) lā aku nei<br />$3",
+       "rclinks": "E hōʻike i nā loli $1 hou, mai $2 (mau) lā aku nei",
        "diff": "ʻokoʻa",
        "hist": "mōkala",
        "hide": "Hoʻohūnā",
        "feedback-subject": "Kumunui:",
        "feedback-submit": "Waiho",
        "searchsuggest-search": "Huli",
-       "api-error-unknown-code": "Hewa ʻikeʻole: \"$1\".",
        "api-error-unknown-warning": "Akahele ʻikeʻole: \"$1\".",
        "api-error-unknownerror": "Hewa ʻikeʻole: \"$1\".",
        "duration-seconds": "$1 {{PLURAL:$1|kekona|mau kekona}}",
index 1168639..8552886 100644 (file)
        "redirectedfrom": "(הופנה מהדף $1)",
        "redirectpagesub": "דף הפניה",
        "redirectto": "הפניה ל:",
-       "lastmodifiedat": "×\93×£ ×\96×\94 ×©×\95Ö¼× ×\94 לאחרונה ב־$1, בשעה $2.",
+       "lastmodifiedat": "×\93×£ ×\96×\94 × ×¢×¨×\9a לאחרונה ב־$1, בשעה $2.",
        "viewcount": "דף זה נצפה {{PLURAL:$1|פעם אחת|פעמיים|$1 פעמים}}.",
        "protectedpage": "דף מוגן",
        "jumpto": "קפיצה אל:",
        "readonlywarning": "'''אזהרה: בסיס הנתונים ננעל לצורך תחזוקה. בזמן זה לא ניתן לשמור את הטקסט הערוך.'''\nבאפשרותך להעתיק ולהדביק את הטקסט לתוך קובץ טקסט ולשמור אותו למועד מאוחר יותר.\n\nמנהל המערכת שנעל את בסיס הנתונים סיפק את ההסבר הבא: $1",
        "protectedpagewarning": "'''אזהרה: דף זה מוגן כך שרק מפעילי מערכת יכולים לערוך אותו.'''\nפעולת היומן האחרונה מוצגת להלן:",
        "semiprotectedpagewarning": "'''הערה:''' דף זה מוגן כך שרק משתמשים רשומים יכולים לערוך אותו.\nפעולת היומן האחרונה מוצגת להלן:",
-       "cascadeprotectedwarning": "<strong>×\90×\96×\94ר×\94:</strong> ×\93×£ ×\96×\94 ×\9e×\95×\92×\9f ×\9b×\9a ×©×¨×§ ×\9eפע×\99×\9c×\99 ×\9eער×\9bת יכולים לערוך אותו, כי הוא מוכלל {{PLURAL:$1|בדף הבא, שמופעלת עליו|בדפים הבאים, שמופעלת עליהם}} הגנה מדורגת:",
+       "cascadeprotectedwarning": "<strong>×\90×\96×\94ר×\94:</strong> ×\93×£ ×\96×\94 ×\9e×\95×\92×\9f ×\9b×\9a ×©×¨×§ ×\9eשת×\9eש×\99×\9d ×¢×\9d [[Special:ListGroupRights|×\94רש×\90×\95ת ×\9eס×\95×\99×\9e×\95ת]] יכולים לערוך אותו, כי הוא מוכלל {{PLURAL:$1|בדף הבא, שמופעלת עליו|בדפים הבאים, שמופעלת עליהם}} הגנה מדורגת:",
        "titleprotectedwarning": "'''אזהרה: דף זה מוגן כך שדרושות [[Special:ListGroupRights|הרשאות מסוימות]] כדי ליצור אותו.'''\nפעולת היומן האחרונה מוצגת להלן:",
        "templatesused": "{{PLURAL:$1|תבנית המופיעה|תבניות המופיעות}} בדף זה:",
        "templatesusedpreview": "{{PLURAL:$1|תבנית המופיעה|תבניות המופיעות}} בתצוגה המקדימה הזאת:",
        "saveusergroups": "שמירת הקבוצות של ה{{GENDER:$1|משתמש|משתמשת}}",
        "userrights-groupsmember": "{{GENDER:$2|חבר|חברה}} ב{{PLURAL:$1|קבוצה|קבוצות}}:",
        "userrights-groupsmember-auto": "{{GENDER:$2|חבר|חברה}} אוטומטית ב{{PLURAL:$1|קבוצה|קבוצות}}:",
-       "userrights-groups-help": "באפשרותך לשנות את הקבוצות ש{{GENDER:$1|משתמש זה חבר|משתמשת זו חברה}} בהן:\n* תיבה מסומנת פירושה שה{{GENDER:$1|משתמש כבר חבר|משתמשת כבר חברה}} בקבוצה.\n* תיבה בלתי מסומנת פירושה שה{{GENDER:$1|משתמש אינו חבר|משתמשת אינה חברה}} בקבוצה.\n* סימון * פירושו שלא יהיה באפשרותך להסיר את ה{{GENDER:$1|משתמש|משתמשת}} מהקבוצה לאחר שהוספת {{GENDER:$1|אותו|אותה}} אליה, או להפך.\n* סימון # פירושו שבאפשרותך רק לאחר את זמן הפקיעה של קבוצה זו; אין באפשרותך להקדימו.",
+       "userrights-groups-help": "×\91×\90פשר×\95ת×\9a ×\9cשנ×\95ת ×\90ת ×\94ק×\91×\95צ×\95ת ×©{{GENDER:$1|×\9eשת×\9eש ×\96×\94 ×\97×\91ר|×\9eשת×\9eשת ×\96×\95 ×\97×\91ר×\94}} ×\91×\94×\9f:\n* ×ª×\99×\91×\94 ×\9eס×\95×\9eנת ×¤×\99ר×\95ש×\94 ×©×\94{{GENDER:$1|×\9eשת×\9eש ×\9b×\91ר ×\97×\91ר|×\9eשת×\9eשת ×\9b×\91ר ×\97×\91ר×\94}} ×\91ק×\91×\95צ×\94.\n* ×ª×\99×\91×\94 ×\91×\9cת×\99 ×\9eס×\95×\9eנת ×¤×\99ר×\95ש×\94 ×©×\94{{GENDER:$1|×\9eשת×\9eש ×\90×\99× ×\95 ×\97×\91ר|×\9eשת×\9eשת ×\90×\99× ×\94 ×\97×\91ר×\94}} ×\91ק×\91×\95צ×\94.\n* ×¡×\99×\9e×\95×\9f * ×¤×\99ר×\95ש×\95 ×©×\9c×\90 ×\99×\94×\99×\94 ×\91×\90פשר×\95ת×\9a ×\9c×\94ס×\99ר ×\90ת ×\94{{GENDER:$1|×\9eשת×\9eש|×\9eשת×\9eשת}} ×\9e×\94ק×\91×\95צ×\94 ×\9c×\90×\97ר ×©×\94×\95ספת {{GENDER:$1|×\90×\95ת×\95\90×\95ת×\94}} ×\90×\9c×\99×\94, ×\90×\95 ×\9c×\94פ×\9a.\n* ×¡×\99×\9e×\95×\9f # ×¤×\99ר×\95ש×\95 ×©×\91×\90פשר×\95ת×\9a ×¨×§ ×\9c×\90×\97ר ×\90ת ×\96×\9e×\9f ×\94פק×\99×¢×\94 ×©×\9c ×\94×\97×\91ר×\95ת ×\91ק×\91×\95צ×\94 ×\96×\95; ×\90×\99×\9f ×\91×\90פשר×\95ת×\9a ×\9c×\94ק×\93×\99×\9e×\95.",
        "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-cannot-shorten-expiry": "×\90×\99×\9f ×\91×\90פשר×\95ת×\9a ×\9c×\94ק×\93×\99×\9d ×\90ת ×\96×\9e×\9f ×\94פק×\99×¢×\94 ×©×\9c ×\94×\97×\91ר×\95ת ×\91ק×\91×\95צ×\94 \"$1\". ×¨×§ ×\9eשת×\9eש×\99×\9d ×\91×¢×\9c×\99 ×\94רש×\90×\94 ×\9c×\94×\95ס×\99×£ ×\95×\9c×\94ס×\99ר ×\90ת ×\94ק×\91×\95צ×\94 ×\99×\9b×\95×\9c×\99×\9d ×\9c×\94ק×\93×\99×\9d ×\90ת ×\96×\9e×\9f ×\94פק×\99×¢×\94.",
        "userrights-conflict": "התנגשות בין שינויי הרשאות משתמש! אנא בִּדקו את השינויים שלכם ואשרו אותם.",
        "group": "קבוצה:",
        "group-user": "משתמשים",
        "right-editsemiprotected": "עריכת דפים המוגנים ברמת ההגנה \"{{int:protect-level-autoconfirmed}}\"",
        "right-editcontentmodel": "שינוי מודל התוכן של דפים",
        "right-editinterface": "עריכת ממשק המשתמש",
-       "right-editusercssjs": "עריכת קובצי CSS ו־JavaScript של משתמשים אחרים",
        "right-editusercss": "עריכת קובצי CSS של משתמשים אחרים",
        "right-edituserjs": "עריכת קובצי JavaScript של משתמשים אחרים",
        "right-editmyusercss": "עריכת קובצי CSS של המשתמש עצמו",
        "rcfilters-hideminor-conflicts-typeofchange": "סוגים מסוימים של שינויים אינם יכולים להיות מסווגים כ\"משניים\", כך שמסנן זה מתנגש עם מסנן סוג השינויים הבא: $1",
        "rcfilters-typeofchange-conflicts-hideminor": "מסנן סוג השינויים הזה מתנגש עם מסנן \"עריכות משניות\". סוגים מסוימים של שינויים אינם יכולים מסווגים כ\"משניים\".",
        "rcnotefrom": "להלן {{PLURAL:$5|השינוי שבוצע|השינויים שבוצעו}} מאז <strong>$3, $4</strong> (מוצגים עד <strong>$1</strong>).",
+       "rclistfromreset": "איפוס בחירת התאריך",
        "rclistfrom": "הצגת שינויים חדשים החל מ־$2, $3",
        "rcshowhideminor": "$1 עריכות משניות",
        "rcshowhideminor-show": "הצגת",
        "rcshowhidecategorization": "$1 שינויים בקטגוריות",
        "rcshowhidecategorization-show": "הצגת",
        "rcshowhidecategorization-hide": "הסתרת",
-       "rclinks": "הצגת $1 השינויים האחרונים ב־$2 הימים האחרונים<br />$3",
+       "rclinks": "הצגת $1 השינויים האחרונים ב־$2 הימים האחרונים",
        "diff": "הבדל",
        "hist": "היסטוריה",
        "hide": "הסתרת",
        "php-uploaddisabledtext": "אפשרות העלאת הקבצים מבוטלת ברמת PHP. אנא בדקו את ההגדרה file_uploads.",
        "uploadscripted": "הקובץ כולל קוד סקריפט או HTML שעשוי להתפרש או להתבצע בטעות על־ידי הדפדפן.",
        "upload-scripted-pi-callback": "לא ניתן להעלות קובץ שמכיל את הוראת העיבוד XML-stylesheet.",
+       "upload-scripted-dtd": "לא ניתן להעלות קבצי SVG שכוללים הכרזת DTD לא־סטנדרטית.",
        "uploaded-script-svg": "נמצא אלמנט שאפשר לכתוב בו תסריט \"$1\" בקובץ ה־SVG שהועלה.",
        "uploaded-hostile-svg": "נמצא CSS בלתי־מאובטח באלמנט style בקובץ ה־SVG שהועלה.",
        "uploaded-event-handler-on-svg": "אסור להגדיר מאפייני טיפול באירועים <code dir=\"ltr\">$1=\"$2\"</code> בקובצי SVG.",
        "log": "יומנים",
        "logeventslist-submit": "הצגה",
        "all-logs-page": "כל היומנים הציבוריים",
-       "alllogstext": "תצ×\95×\92×\94 ×\9eש×\95×\9c×\91ת ×©×\9c ×\9b×\9c ×¡×\95×\92×\99 ×\94×\99×\95×\9e× ×\99×\9d ×\94×\96×\9e×\99× ×\99×\9d ×\91{{grammar:ת×\97×\99×\9c×\99ת|{{SITENAME}}}}.\n× ×\99ת×\9f ×\9cצ×\9eצ×\9d ×\90ת ×\94תצ×\95×\92×\94 ×¢×\9cÖ¾ידי בחירת סוג היומן, שם המשתמש (תלוי רישיות) או הדף המושפע (גם כן תלוי רישיות).",
+       "alllogstext": "×\96×\95×\94×\99 ×ª×¦×\95×\92×\94 ×\9eש×\95×\9c×\91ת ×©×\9c ×\9b×\9c ×¡×\95×\92×\99 ×\94×\99×\95×\9e× ×\99×\9d ×\94×\96×\9e×\99× ×\99×\9d ×\91{{grammar:ת×\97×\99×\9c×\99ת|{{SITENAME}}}}.\n× ×\99ת×\9f ×\9cצ×\9eצ×\9d ×\90ת ×\94תצ×\95×\92×\94 ×¢×\9c ידי בחירת סוג היומן, שם המשתמש (תלוי רישיות) או הדף המושפע (גם כן תלוי רישיות).",
        "logempty": "אין פריטים תואמים ביומן.",
        "log-title-wildcard": "חיפוש כותרות המתחילות באותיות אלה",
        "showhideselectedlogentries": "שינוי מצב התצוגה של פעולות היומן שנבחרו",
        "undeleteviewlink": "הצגה",
        "undeleteinvert": "הפיכת הבחירה",
        "undeletecomment": "סיבה:",
-       "undeletedrevisions": "{{PLURAL:$1|שוחזרה גרסה אחת|שוחזרו $1 גרסאות}}",
-       "undeletedrevisions-files": "{{PLURAL:$1|גרסה אחת|$1 גרסאות}} ו{{PLURAL:$2|קובץ אחד|־$2 קבצים}} שוחזרו",
-       "undeletedfiles": "{{PLURAL:$1|שוחזר קובץ אחד|שוחזרו $1 קבצים}}",
        "cannotundelete": "השחזור (או חלק ממנו) נכשל:\n$1",
        "undeletedpage": "<strong>הדף $1 שוחזר</strong>\n\nראו את [[Special:Log/delete|יומן המחיקות]] לרשימה של המחיקות והשחזורים שבוצעו לאחרונה.",
        "undelete-header": "{{GENDER:|ראה|ראי|ראו}} את [[Special:Log/delete|יומן המחיקות]] לרשימה של דפים שנמחקו לאחרונה.",
        "sp-contributions-uploads": "העלאות",
        "sp-contributions-logs": "יומנים",
        "sp-contributions-talk": "שיחה",
-       "sp-contributions-userrights": "ניהול הרשאות משתמש",
+       "sp-contributions-userrights": "ניהול הרשאות {{GENDER:$1|משתמש|משתמשת}}",
        "sp-contributions-blocked-notice": "{{GENDER:$1|המשתמש הזה חסום|המשתמשת הזו חסומה}} כרגע.\nהפעולה האחרונה ביומן החסימות מוצגת להלן:",
        "sp-contributions-blocked-notice-anon": "כתובת IP זו חסומה כרגע.\nהפעולה האחרונה ביומן החסימות מוצגת להלן:",
        "sp-contributions-search": "חיפוש תרומות",
        "unblocked-id": "חסימה מספר $1 שוחררה.",
        "unblocked-ip": "[[Special:Contributions/$1|$1]] שוחררה מחסימתה.",
        "blocklist": "משתמשים חסומים",
+       "autoblocklist": "חסימות אוטומטיות",
+       "autoblocklist-submit": "חיפוש",
+       "autoblocklist-legend": "רשימת חסימות אוטומטיות",
+       "autoblocklist-localblocks": "{{PLURAL:$1|חסימה אוטומטית מקומית|חסימות אוטומטיות מקומיות}}",
+       "autoblocklist-empty": "רשימת החסימות האוטומטיות ריקה.",
+       "autoblocklist-otherblocks": "{{PLURAL:$1|חסימה אוטומטית אחרת|חסימות אוטומטיות אחרות}}",
        "ipblocklist": "משתמשים חסומים",
        "ipblocklist-legend": "מציאת משתמש חסום",
        "blocklist-userblocks": "הסתרת חסימות של משתמשים רשומים",
        "ipb_expiry_temp": "חסימות הכוללות הסתרת שם משתמש חייבות להיות לזמן בלתי מוגבל.",
        "ipb_hide_invalid": "לא ניתן להעלים את החשבון הזה; {{PLURAL:$1|בוצעה ממנו יותר מעריכה אחת|בוצעו ממנו יותר מ‏‏֫־$1 עריכות}}.",
        "ipb_already_blocked": "המשתמש \"$1\" כבר נחסם.",
-       "ipb-needreblock": "ה{{GENDER:$1|משתמש|משתמשת}} \"$1\" כבר {{GENDER:$1|חסום|חסומה}}. האם ברצונך לשנות את הגדרות החסימה?",
+       "ipb-needreblock": "$1 כבר {{GENDER:$1|חסום|חסומה}}. האם ברצונך לשנות את הגדרות החסימה?",
        "ipb-otherblocks-header": "{{PLURAL:$1|חסימה אחרת|חסימות אחרות}}",
        "unblock-hideuser": "אין באפשרותך לשחרר את החסימה של המשתמש הזה, כיוון ששם המשתמש שלו הוסתר.",
        "ipb_cant_unblock": "שגיאה: חסימה מספר $1 לא נמצאה. ייתכן שהיא כבר שוחררה.",
        "tooltip-pt-mytalk": "דף השיחה שלך",
        "tooltip-pt-anontalk": "דיון על העריכות שנעשו מכתובת ה־IP הזאת",
        "tooltip-pt-preferences": "ההעדפות שלך",
-       "tooltip-pt-watchlist": "רשימת הדפים ש{{GENDER:|אתה עוקב|את עוקבת}} אחרי השינויים בהם",
+       "tooltip-pt-watchlist": "רשימת הדפים {{GENDER:|שאתה עוקב|שאת עוקבת}} אחרי השינויים בהם",
        "tooltip-pt-mycontris": "רשימת העריכות שביצעת",
        "tooltip-pt-anoncontribs": "רשימת העריכות שנעשו מכתובת ה־IP הזאת",
        "tooltip-pt-login": "מומלץ להיכנס לחשבון, אך אין חובה לעשות זאת",
+       "tooltip-pt-login-private": "יש להיכנס לחשבון כדי להשתמש באתר הוויקי הזה",
        "tooltip-pt-logout": "יציאה מהחשבון",
        "tooltip-pt-createaccount": "מומלץ ליצור חשבון ולהיכנס אליו, אך אין חובה לעשות זאת",
        "tooltip-ca-talk": "שיחה על דף זה",
        "anonymous": "{{PLURAL:$1|משתמש אנונימי|משתמשים אנונימיים}} של {{SITENAME}}",
        "siteuser": "משתמש {{SITENAME}} $1",
        "anonuser": "משתמש אנונימי של {{SITENAME}} $1",
-       "lastmodifiedatby": "×\93×£ ×\96×\94 ×©×\95Ö¼× ×\94 לאחרונה ב־$2, $1 על־ידי $3.",
+       "lastmodifiedatby": "×\93×£ ×\96×\94 × ×¢×¨×\9a לאחרונה ב־$2, $1 על־ידי $3.",
        "othercontribs": "מבוסס על העבודה של $1.",
        "others": "אחרים",
        "siteusers": "{{PLURAL:$2|{{GENDER:$1|משתמש}}|משתמשי}} {{SITENAME}} $1",
        "confirmrecreate": "ה{{GENDER:$1|משתמש|משתמשת}} [[User:$1|$1]] ([[User talk:$1|שיחה]]) {{GENDER:$1|מחק|מחקה}} את הדף הזה לאחר שהתחלת לערוך אותו, מהסיבה הבאה:\n: <em>$2</em>\nיש לאשר שאכן ברצונך ליצור מחדש את הדף.",
        "confirmrecreate-noreason": "ה{{GENDER:$1|משתמש|משתמשת}} [[User:$1|$1]] ([[User talk:$1|שיחה]]) {{GENDER:$1|מחק|מחקה}} את הדף הזה לאחר שהתחלת לערוך אותו. יש לאשר שאכן ברצונך ליצור מחדש את הדף.",
        "recreate": "יצירה מחדש",
+       "confirm-purge-title": "ניקוי המטמון של דף זה",
        "confirm_purge_button": "אישור",
        "confirm-purge-top": "לנקות את המטמון של דף זה?",
        "confirm-purge-bottom": "ניקוי המטמון של דף גורם לגרסה החדשה ביותר להופיע.",
        "htmlform-user-not-valid": "<strong>$1</strong> אינו שם משתמש תקין.",
        "logentry-delete-delete": "$1 {{GENDER:$2|מחק|מחקה}} את הדף $3",
        "logentry-delete-delete_redir": "$1 {{GENDER:$2|מחק|מחקה}} את ההפניה $3 באמצעות דריסה",
-       "logentry-delete-restore": "$1 {{GENDER:$2|שחזר|שחזרה}} את הדף $3",
+       "logentry-delete-restore": "$1 {{GENDER:$2|שחזר|שחזרה}} את הדף $3 ($4)",
+       "logentry-delete-restore-nocount": "$1 {{GENDER:$2|שחזר|שחזרה}} את הדף $3",
+       "restore-count-revisions": "{{PLURAL:$1|גרסה אחת|$1 גרסאות}}",
+       "restore-count-files": "{{PLURAL:$1|קובץ אחד|$1 קבצים}}",
        "logentry-delete-event": "$1 {{GENDER:$2|שינה|שינתה}} את מצב התצוגה של {{PLURAL:$5|פעולת יומן|$5 פעולות יומן}} של $3: $4",
        "logentry-delete-revision": "$1 {{GENDER:$2|שינה|שינתה}} את מצב התצוגה של {{PLURAL:$5|גרסה|$5 גרסאות}} בדף $3: $4",
        "logentry-delete-event-legacy": "$1 {{GENDER:$2|שינה|שינתה}} את מצב התצוגה של פעולות יומן של $3",
        "special-characters-group-thai": "תאית",
        "special-characters-group-lao": "לאו",
        "special-characters-group-khmer": "קמרית",
+       "special-characters-group-canadianaboriginal": "לשונות ילידיות קנדיות",
        "special-characters-title-endash": "קו מפריד",
        "special-characters-title-emdash": "קו מפריד ארוך",
        "special-characters-title-minus": "מינוס",
        "restrictionsfield-help": "כתובת IP אחת או טווח CIDR אחד בשורה. כדי לאפשר את הכול, ניתן להשתמש ב:<pre>0.0.0.0/0\n::/0</pre>",
        "revid": "גרסה $1",
        "pageid": "מזהה דף $1",
-       "rawhtml-notallowed": "לא ניתן להשתמש בתגיות &lt;html&gt; מחוץ לדפים רגילים."
+       "rawhtml-notallowed": "לא ניתן להשתמש בתגיות &lt;html&gt; מחוץ לדפים רגילים.",
+       "gotointerwiki": "עזיבת {{SITENAME}}",
+       "gotointerwiki-invalid": "הכותרת שצוינה אינה תקינה.",
+       "gotointerwiki-external": "{{GENDER:|אתה עומד|את עומדת|אתם עומדים}} לעזוב את {{SITENAME}} כדי לבקר באתר הנפרד \"[[$2]]\".\n\n[$1 {{GENDER:|לחץ|לחצי|לחצו}} כאן כדי להמשיך לכתובת $1].",
+       "undelete-cantedit": "אין באפשרותך לשחזר דף זה, כי אין באפשרותך לערוך אותו.",
+       "undelete-cantcreate": "אין באפשרותך לשחזר דף זה, כי אין דף קיים בשם זה ואין באפשרותך ליצור אותו."
 }
index 140645b..e7d1ccc 100644 (file)
        "databaseerror-query": "अनुरोध: $1",
        "databaseerror-function": "फ़ंक्शन: $1",
        "databaseerror-error": "त्रुटि: $1",
-       "transaction-duration-limit-exceeded": "à¤\85तà¥\8dयधिà¤\95 à¤¬à¥\8bà¤\9d à¤\95à¥\8b à¤\95म à¤\95रनà¥\87 à¤²à¤¿à¤\8f à¤¯à¤¹ à¤\95ारà¥\8dय à¤°à¥\8bà¤\95 à¤¦à¤¿à¤¯à¤¾ à¤\97या à¤¹à¥\88, à¤\95à¥\8dयà¥\8bà¤\82à¤\95ि à¤¯à¤¹ à¤²à¤¿à¤\96नà¥\87 à¤\95à¥\80 à¤\85वधि ($1) à¤¸à¥\87 à¤¬à¤¢à¤¼ à¤\95र $2 {{PLURAL:$2|सà¥\87à¤\95à¤\82ड|सà¥\87à¤\95à¤\82ड}} à¤\95à¥\8b à¤ªà¤¾à¤° à¤\95र à¤\97या।\nIf à¤¯à¤¦à¤¿ à¤\86प  à¤¬à¤¹à¥\81त à¤¸à¤¾à¤°à¥\87 à¤µà¤¸à¥\8dतà¥\81 à¤\95à¥\8b à¤\8fà¤\95 à¤¸à¤¾à¤¥ à¤¬à¤¦à¤² à¤°à¤¹à¥\87 à¤¹à¥\88à¤\82, à¤¤à¥\8b à¤\95à¥\83पया à¤\9bà¥\8bà¤\9fà¥\87 à¤¹à¥\8bतà¥\87 à¤°à¥\82प à¤®à¥\87à¤\82 à¤¬à¤¦à¤²ें।",
+       "transaction-duration-limit-exceeded": "à¤\89à¤\9aà¥\8dà¤\9a à¤ªà¥\8dरतिà¤\95à¥\83ति à¤\85à¤\82तराल à¤¨à¤¿à¤°à¥\8dमाण à¤¸à¥\87 à¤¬à¤\9aनà¥\87 à¤\95à¥\87 à¤²à¤¿à¤\8f, à¤¯à¤¹ à¤®à¤¸à¥\8cदा à¤¨à¤¿à¤°à¤¸à¥\8dत à¤\95िया à¤\97या à¤\95à¥\8dयà¥\8bà¤\82à¤\95ि à¤²à¥\87à¤\96न à¤\95ाल ($1) à¤¦à¥\82सरà¥\80 à¤¸à¥\80मा $2 à¤\95à¥\8b à¤ªà¤¾à¤° à¤\95र à¤\97या।\nयदि à¤\86प à¤\95à¤\88 à¤\86यà¤\9fमà¥\8bà¤\82 à¤\95à¥\8b à¤\8fà¤\95 à¤¸à¤¾à¤¥ à¤ªà¤°à¤¿à¤µà¤°à¥\8dतित à¤\95र à¤°à¤¹à¥\87 à¤¹à¥\88à¤\82 à¤¤à¥\8b à¤\87सà¤\95à¥\87 à¤¸à¥\8dथान à¤ªà¤° à¤\85धिà¤\95 à¤¸à¤\82à¤\96à¥\8dया à¤®à¥\87à¤\82 à¤\9bà¥\8bà¤\9fà¥\80 à¤¸à¤\82à¤\95à¥\8dरियायà¥\87à¤\82 à¤\95रें।",
        "laggedslavemode": "'''चेतावनी:''' यह पृष्ठ अद्यतनीत जानकारी-युक्त ना होने की आशंका है।",
        "readonly": "डाटाबेस लॉक किया हुआ है",
        "enterlockreason": "लॉक करने का कारण दीजिए, साथ ही लॉक खुलने के समय का लगभग आकलन दीजिये।",
        "nocookiesnew": "आपका खाता खोल दिया गया है, पर आप लॉग इन नहीं हुए हैं।\n{{SITENAME}} पर लॉग इन करने के लिये कुकीज़ का प्रयोग होता है।\nआपने कुकीज़ अक्षम कर रखी हैं।\nकृपया अपने ब्राउज़र में कुकीज़ सक्षम करें, और फिर अपने सदस्यनाम एवं कूटशब्द से लॉग इन करें।",
        "nocookieslogin": "{{SITENAME}} पर लॉग इन करने के लिये कुकीज़ का प्रयोग होता है।\nआपने कुकीज़ अक्षम कर रखी हैं।\nकृपया अपने ब्राउज़र में कुकीज़ सक्षम करें और फिर पुनः कोशिश करें।",
        "nocookiesfornew": "स्रोत की पुष्टि ना हो पाने के कारण यह खाता निर्मित नहीं किया गया। \nसुनिश्चित करें कि आपने कुकीज़ सक्षम की हैं, पृष्ठ को पुनः लोड करें और पुनः प्रयास करें।",
+       "createacct-loginerror": "खाता सफलतापूर्वक निर्मित किया गया लेकिन आप स्वतः लॉग-इन नहीं कर सके। कृपया [[Special:UserLogin|हाथ से]] लॉग-इन करें।",
        "noname": "आपने वैध सदस्यनाम नहीं दिया है।",
        "loginsuccesstitle": "प्रवेश हुआ",
        "loginsuccess": "'''आप {{SITENAME}} में \"$1\" सदस्यनाम से लॉग इन हो {{GENDER:$1|चुके|चुकी|चुके}} हैं।'''",
        "eauthentsent": "दर्ज किये हुए ई-मेल पते पर एक सत्यापन ई-मेल भेजा दिया गया है।\nआपको उस ई-मेल में दिये हुए निर्देशों के अनुसार ई-मेल पते का सत्यापन करना होगा, उसके पश्चात ही यहाँ से कोई दूसरा ई-मेल भेजा जाएगा।",
        "throttled-mailpassword": "पिछले {{PLURAL:$1|एक घंटे|$1 घंटों}} के दरमियान एक कूटशब्द स्मरण-पत्र भेजा जा चुका है।\nदुरुपयोग से बचाव के लिए हर {{PLURAL:$1|एक घंटे|$1 घंटों}} में एक कूटशब्द स्मरण-पत्र ही भेजा जाता है।",
        "mailerror": "ई-मेल भेजने में त्रुटि: $1",
-       "acct_creation_throttle_hit": "à¤\86पà¤\95à¥\87 à¤\86à¤\87॰पà¥\80 à¤ªà¤¤à¥\87 à¤¸à¥\87 à¤\86à¤\8f à¤\86à¤\97à¤\82तà¥\81à¤\95 à¤ªà¤¿à¤\9bलà¥\87 à¤\9aà¥\8cबà¥\80स à¤\98à¤\82à¤\9fà¥\8bà¤\82 à¤®à¥\87à¤\82 à¤\87स à¤µà¤¿à¤\95ि à¤ªà¤° {{PLURAL:$1|à¤\8fà¤\95 à¤\96ाता|$1 à¤\96ातà¥\87}} à¤¬à¤¨à¤¾ à¤\9aà¥\81à¤\95à¥\87 à¤¹à¥\88à¤\82, à¤\87स à¤¸à¤®à¤¯à¤¾à¤µà¤§à¤¿ à¤®à¥\87à¤\82 à¤¯à¤¹à¥\80 à¤\85धिà¤\95तम à¤¸à¥\80मा à¤¹à¥\88।\nà¤\85तà¤\83 à¤\87स à¤¸à¤®à¤¯ à¤\87स à¤\86à¤\87॰पà¥\80 à¤ªà¤¤à¥\87 à¤\95ा à¤ªà¥\8dरयà¥\8bà¤\97 à¤\95रनà¥\87 à¤µà¤¾à¤²à¥\87 à¤\86à¤\97à¤\82तà¥\81à¤\95 à¤\94र à¤\96ातà¥\87 à¤¨à¤¹à¥\80à¤\82 à¤\96à¥\8bल à¤¸à¤\95à¥\87à¤\82à¤\97े।",
+       "acct_creation_throttle_hit": "à¤\87स à¤µà¤¿à¤\95ि à¤\95à¥\87 à¤\86à¤\97à¤\82तà¥\81à¤\95 à¤\87स à¤\86à¤\87॰पà¥\80॰ à¤\95à¥\8b à¤\95ाम à¤®à¥\87à¤\82 à¤²à¥\87तà¥\87 à¤¹à¥\81यà¥\87 à¤ªà¤¿à¤\9bलà¥\87 $2 à¤®à¥\87à¤\82 {{PLURAL:$1|१ à¤\96ाता à¤¨à¤¿à¤°à¥\8dमित à¤\95िया|$1 à¤\96ातà¥\87 à¤¨à¤¿à¤°à¥\8dमित à¤\95र à¤\9aà¥\81à¤\95à¥\87 à¤¹à¥\88à¤\82}} à¤\9cà¥\8b à¤\95ि à¤\87स à¤¸à¤®à¤¯ à¤®à¥\87à¤\82 à¤\85धिà¤\95तम à¤\85नà¥\81मत à¤¸à¥\80मा à¤¹à¥\88।\nà¤\87सà¤\95à¥\87 à¤ªà¤°à¤¿à¤£à¤¾à¤®à¤¸à¥\8dवरà¥\82प, à¤\87स à¤\86à¤\87॰पà¥\80॰ à¤\95à¥\8b à¤ªà¥\8dरयà¥\8bà¤\97 à¤\95रनà¥\87 à¤µà¤¾à¤²à¥\87 à¤¸à¤¦à¤¸à¥\8dय à¤\87स à¤¸à¤®à¤¯ à¤\94र à¤\96ातà¥\87 à¤¨à¤¿à¤°à¥\8dमित à¤¨à¤¹à¥\80à¤\82 à¤\95र à¤¸à¤\95ते।",
        "emailauthenticated": "आपका ई-मेल पता $2 को $3 बजे सत्यापित किया गया।",
        "emailnotauthenticated": "आपके ई-मेल पते की पुष्टि नहीं हुई है।\nनीचे दी किसी भी सुविधा के लिये आपको ई-मेल नहीं भेजा जाएगा।",
        "noemailprefs": "इन सुविधाओं का प्रयोग करने के लिये अपनी वरीयताओं में ई-मेल पता दें।",
        "content-json-empty-object": "रिक्त ऑब्जेक्ट",
        "content-json-empty-array": "रिक्त ऐरे",
        "deprecated-self-close-category": "अवैध एचटीएमएल टैग का उपयोग कर रहे पृष्ठ",
+       "deprecated-self-close-category-desc": "इस पृष्ठ में स्वयं-बंद ऍचटीएमएल चिप्पियाँ समाहित हैं जैसे <code>&lt;b/></code> अथवा <code>&lt;span/></code> आदि। इनका व्यवहार जल्दी ही ऍचटीएमएल५ विनिर्देशों के अनुरूप परिवर्तित हो जायेगा अतः विकि-पाठ में इनके प्रयोग को न करने की सलाह दी जाती है।",
        "duplicate-args-warning": "<strong>चेतावनी:</strong> [[:$1]] प्राचल \"$3\" के लिए [[:$2]] को एक से अधिक बार काम में ले रहा है। केवल अन्त में दिया गया मान ही काम में लिया जायेगा।",
        "duplicate-args-category": "टेम्पलेट कॉल में डुप्लिकेट तर्क का उपयोग करते हुए पन्ने",
        "duplicate-args-category-desc": "पेज जैसे तर्कों के डुप्लिकेट का उपयोग करने वाले टेम्पलेट कॉल, जैसे <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> और <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
        "saveusergroups": "{{GENDER:$1|सदस्य}} समूह सहेजें",
        "userrights-groupsmember": "निम्न {{PLURAL:$1|समूह|समूहों}} का सदस्य:",
        "userrights-groupsmember-auto": "निम्न {{PLURAL:$1|समूह|समूहों}} का अंतर्निहित सदस्य:",
-       "userrights-groups-help": "आप इस सदस्य की समूह-सदस्यता बदल सकते हैं:\n* बक्से पर सही का निशान लगे होने का अर्थ है कि सदस्य उस समूह में है।\n* बक्से पर सही का निशान न लगे होने का अर्थ है कि सदस्य उस समूह में नहीं है।\n* एक * का अर्थ है कि एक बार जोड़ने के बाद वह समूह हटा नहीं सकते हैं, और हटाने के बाद जोड़ नहीं सकते हैं।\n* एक # सूचित करता है कि आप केवल इस समूह के समाप्ति समय को वापस रख सकते हैं; आप इसे आगे नहीं बढ़ा सकते हैं",
+       "userrights-groups-help": "à¤\86प à¤\87स à¤¸à¤¦à¤¸à¥\8dय à¤\95à¥\80 à¤¸à¤®à¥\82ह-सदसà¥\8dयता à¤¬à¤¦à¤² à¤¸à¤\95तà¥\87 à¤¹à¥\88à¤\82:\n* à¤¬à¤\95à¥\8dसà¥\87 à¤ªà¤° à¤¸à¤¹à¥\80 à¤\95ा à¤¨à¤¿à¤¶à¤¾à¤¨ à¤²à¤\97à¥\87 à¤¹à¥\8bनà¥\87 à¤\95ा à¤\85रà¥\8dथ à¤¹à¥\88 à¤\95ि à¤¸à¤¦à¤¸à¥\8dय à¤\89स à¤¸à¤®à¥\82ह à¤®à¥\87à¤\82 à¤¹à¥\88।\n* à¤¬à¤\95à¥\8dसà¥\87 à¤ªà¤° à¤¸à¤¹à¥\80 à¤\95ा à¤¨à¤¿à¤¶à¤¾à¤¨ à¤¨ à¤²à¤\97à¥\87 à¤¹à¥\8bनà¥\87 à¤\95ा à¤\85रà¥\8dथ à¤¹à¥\88 à¤\95ि à¤¸à¤¦à¤¸à¥\8dय à¤\89स à¤¸à¤®à¥\82ह à¤®à¥\87à¤\82 à¤¨à¤¹à¥\80à¤\82 à¤¹à¥\88।\n* à¤\8fà¤\95 * à¤\95ा à¤\85रà¥\8dथ à¤¹à¥\88 à¤\95ि à¤\8fà¤\95 à¤¬à¤¾à¤° à¤\9cà¥\8bड़नà¥\87 à¤\95à¥\87 à¤¬à¤¾à¤¦ à¤µà¤¹ à¤¸à¤®à¥\82ह à¤¹à¤\9fा à¤¨à¤¹à¥\80à¤\82 à¤¸à¤\95तà¥\87 à¤¹à¥\88à¤\82, à¤\94र à¤¹à¤\9fानà¥\87 à¤\95à¥\87 à¤¬à¤¾à¤¦ à¤\9cà¥\8bड़ à¤¨à¤¹à¥\80à¤\82 à¤¸à¤\95तà¥\87 à¤¹à¥\88à¤\82।\n* à¤\8fà¤\95 # à¤¸à¥\82à¤\9aित à¤\95रता à¤¹à¥\88 à¤\95ि à¤\86प à¤\95à¥\87वल à¤\87स à¤¸à¤®à¥\82ह à¤¸à¤¦à¤¸à¥\8dयता à¤\95à¥\87 à¤¸à¤®à¤¾à¤ªà¥\8dति à¤¸à¤®à¤¯ à¤\95à¥\8b à¤µà¤¾à¤ªà¤¸ à¤°à¤\96 à¤¸à¤\95तà¥\87 à¤¹à¥\88à¤\82; à¤\86प à¤\87सà¥\87 à¤\86à¤\97à¥\87 à¤¨à¤¹à¥\80à¤\82 à¤¬à¤¢à¤¼à¤¾ à¤¸à¤\95तà¥\87 à¤¹à¥\88à¤\82",
        "userrights-reason": "कारण:",
        "userrights-no-interwiki": "आपको अन्य विकियों पर सदस्य अधिकार बदलने की अनुमति नहीं हैं।",
        "userrights-nodatabase": "डाटाबेस $1 या तो मौजूद नहीं है या फिर स्थानीय नहीं है।",
        "right-editsemiprotected": "उन पृष्ठों को सम्पादित करें जिनका सुरक्षा स्तर है \"{{int:protect-level-autoconfirmed}}\"",
        "right-editcontentmodel": "एक पेज की सामग्री मॉडल को संपादित।",
        "right-editinterface": "सॉफ़्टवेयर इंटरफ़ेस सम्पादित करें",
-       "right-editusercssjs": "अन्य सदस्यों के सी॰एस॰एस और जावास्क्रिप्ट पृष्ठ सम्पादित करें",
        "right-editusercss": "अन्य सदस्यों के सी॰एस॰एस पृष्ठ सम्पादित करें",
        "right-edituserjs": "अन्य सदस्यों के जावास्क्रिप्ट पृष्ठ सम्पादित करें",
        "right-editmyusercss": "अपनी सदस्य स्तर की सी॰एस॰एस फ़ाइलें सम्पादित करें",
        "rcshowhidecategorization": "$1 पृष्ठ श्रेणीकरण",
        "rcshowhidecategorization-show": "दिखाएँ",
        "rcshowhidecategorization-hide": "छुपाएँ",
-       "rclinks": "पिछले $2 दिनों में हुए $1 बदलाव दिखाएँ<br />$3",
+       "rclinks": "पिछले $2 दिनों में हुए $1 बदलाव दिखाएँ",
        "diff": "अंतर",
        "hist": "इतिहास",
        "hide": "छुपाएँ",
        "editcomment": "संपादन सारांश था: <em>$1</em>।",
        "revertpage": "[[Special:Contributions/$2|$2]] ([[User talk:$2|Talk]]) के संपादनों को हटाकर [[User:$1|$1]] के अन्तिम अवतरण को पूर्ववत किया",
        "revertpage-nouser": "(सदस्य नाम हटाया गया है) के संपादनों को हटाकर {{GENDER:$1|[[User:$1|$1]]}} के अन्तिम अवतरण को पूर्ववत किया।",
-       "rollback-success": "$1 के संपादन हटाए;\n$2 द्वारा संपादित अन्तिम अवतरण को पुनर्स्थापित किया।",
+       "rollback-success": "{{GENDER:$3|$1}} के संपादन हटाए;\n{{GENDER:$4|$2}} द्वारा संपादित अन्तिम अवतरण को पुनर्स्थापित किया।",
        "sessionfailure-title": "सत्र विफलता",
        "sessionfailure": "ऐसा प्रतीत होता है कि आपके लॉगिन सत्र के साथ कोई समस्या है।\nसत्र अपहरण से बचाने के लिए सावधानी के तौर पर आपका यह क्रियाकलाप रद्द कर दिया गया है।\nकृपया पीछे जाएँ और पृष्ठ को पुनः लोड करें, तब दुबारा कोशिश करें।",
        "changecontentmodel": "पेज कि सामगरिि मोदल को बदलिये",
        "changecontentmodel-emptymodels-title": "कोई सामग्री प्रारूप उपलब्ध नहीं",
        "changecontentmodel-emptymodels-text": "[[:$1]] में सामग्री किसी और प्रकार में परिवर्तित नहीं हो सकती।",
        "log-name-contentmodel": "सामाग्री परिवर्तन लॉग",
-       "log-description-contentmodel": "à¤\86यà¥\8bà¤\9cन à¤\9cà¥\8b à¤\87स à¤ªà¥\83षà¥\8dठ à¤\95à¥\87 à¤¸à¤¾à¤®à¤\97à¥\8dरà¥\80 à¤¸à¥\87 à¤®à¤¿à¤²à¤¤à¥\87 à¤\9cà¥\81लतà¥\87 à¤¹à¥\88à¤\82",
+       "log-description-contentmodel": "यह à¤ªà¥\83षà¥\8dठ, à¤ªà¥\83षà¥\8dठà¥\8bà¤\82 à¤\95à¥\87 à¤¸à¤¾à¤®à¤\97à¥\8dरà¥\80 à¤®à¥\89डल à¤\94र à¤ªà¥\8dरारमà¥\8dभिà¤\95 à¤\95à¥\87 à¤\85तिरिà¤\95à¥\8dत à¤¸à¤¾à¤®à¤\97à¥\8dरà¥\80 à¤®à¥\89डल à¤¦à¥\8dवारा à¤¨à¤¿à¤°à¥\8dमित à¤ªà¥\83षà¥\8dठà¥\8bà¤\82 à¤\95à¥\87 à¤ªà¤°à¤¿à¤µà¤°à¥\8dतनà¥\8bà¤\82 à¤\95à¥\80 à¤¸à¥\82à¤\9aà¥\80 à¤°à¤\96ता à¤¹à¥\88।",
        "logentry-contentmodel-new": "$1 ने  $3 पृष्ठ का {{GENDER:$2|निर्माण}} किया बिना मूल सामग्री प्रारूप के \"$5\"",
        "logentry-contentmodel-change": "$1 ने $3 पृष्ठ का सामग्री \"$4\" से \"$5\" {{GENDER:$2|परिवर्तित किया}}",
        "logentry-contentmodel-change-revertlink": "पूर्ववत करें",
        "modifiedarticleprotection": "\"[[$1]]\" के सुरक्षा-स्तर को बदला",
        "unprotectedarticle": "\"[[$1]]\" से सुरक्षा हटा दी गई",
        "movedarticleprotection": "सुरक्षा स्तर \"[[$2]]\" से बदल कर  \"[[$1]]\" कर दिया गया है",
-       "protectedarticle-comment": "\"[[$1]]\" को सुरक्षित किया।",
+       "protectedarticle-comment": "\"[[$1]]\" {{GENDER:$2|सुरक्षित किया गया।}}",
        "modifiedarticleprotection-comment": "\"[[$1]]\" हेतु {{GENDER:$2|सुरक्षा स्तर बदला गया}}",
        "unprotectedarticle-comment": "\"[[$1]]\" से {{GENDER:$2|सुरक्षा हटाया गया}}",
        "protect-title": "\"$1\" का सुरक्षा स्तर बदलें",
        "protect-summary-cascade": "सीढ़ी",
        "protect-expiring": "समाप्ती $1 (UTC)",
        "protect-expiring-local": "समाप्ती $1",
-       "protect-expiry-indefinite": "à¤\85निशà¥\8dà¤\9aितà¤\95ालà¥\80न",
+       "protect-expiry-indefinite": "हमà¥\87शा",
        "protect-cascade": "इस पृष्ठ से जुड़े हुए पृष्ठ सुरक्षित करें (सुरक्षा-सीढ़ी)",
        "protect-cantedit": "आप इस पृष्ठ का सुरक्षा-स्तर बदल नहीं सकते क्योंकि आपको ऐसा करने का अधिकार नहीं है।",
        "protect-othertime": "अन्य समय:",
        "undeletepagetext": "निम्न {{PLURAL:$1|$1 पृष्ठ|$1 पृष्ठों}} को हटा दिया गया है, लेकिन अभी ये लेखागार में हैं और पुनर्स्थापित किये जा सकते हैं।\nलेखागार समय-समय पर साफ किये जाते हैं।",
        "undelete-fieldset-title": "अवतरण पुरानी स्थिति पर लाएँ",
        "undeleteextrahelp": "पृष्ठ का संपूर्ण इतिहास वापस लाने के लिए सभी बक्सों से सही का निशान हटा दें और '''''{{int:undeletebtn}}''''' पर क्लिक करें।\nचुनिंदा इतिहास को वापस लाने के लिए उन अवतरणों के बगल के बक्सों पर सही का निशान लगाएँ और '''''{{int:undeletebtn}}''''' पर क्लिक करें।",
-       "undeleterevisions": "$1 अवतरण लेखागार में {{PLURAL:$1|है|हैं}}",
+       "undeleterevisions": "$1 अवतरण {{PLURAL:$1|हटाया गया|हटाये गये}}",
        "undeletehistory": "यदि आप पृष्ठ को पुनर्स्थापित करते हैं तो सभी अवतरण इतिहास में पुनर्स्थापित हो जायेंगे।\nहटाने के बाद यदि एक नया पृष्ठ उसी नाम से बनाया गया है तो पुनर्स्थापित अवतरण पिछले इतिहास में दर्शित होंगे।",
        "undeleterevdel": "यदि पुनर्स्थापन के फलस्वरूप शीर्ष पृष्ठ या फ़ाइल अवतरण आंशिक रूप से मिट सकता है, तो इसे नहीं किया जायेगा।\nऐसी स्थिति में, आपको नवीनतम मिटाए गए अवतरण को बिना सही के निशान लगाये हुए या बिना छुपाये रखना होगा।",
        "undeletehistorynoadmin": "यह पृष्ठ हटा दिया गया है।\nहटाए जाने का कारन नीचे सारांश में दिया गया है, और साथ ही उन सदस्यों के बारे में विस्तार भी दिया गया है, जिन्होंने हटाए जाने से पहले इस पृष्ठ को संपादित किया था।\nइन हटाये गए अवतरणों का पाठ केवल प्रबंधकों को ही उपलब्ध है।",
        "undeleteviewlink": "देखें",
        "undeleteinvert": "चुनाव उलटें",
        "undeletecomment": "कारण:",
-       "undeletedrevisions": "{{PLURAL:$1|एक अवतरण पुनर्स्थापित किया|$1 अवतरण पुनर्स्थापित किये}}",
-       "undeletedrevisions-files": "{{PLURAL:$1|1 अवतरण|$1 अवतरण}} और {{PLURAL:$2|1 फ़ाइल|$2 फ़ाइलें}} पुनर्स्थापित कर दीं",
-       "undeletedfiles": "{{PLURAL:$1|1 फ़ाइल|$1 फ़ाइलें}} पुनर्स्थापित",
-       "cannotundelete": "पुनर्स्थापित नहीं कर सके:\n$1",
+       "cannotundelete": "कुछ अथवा सभी पुनर्स्थापित नहीं कर सके:\n$1",
        "undeletedpage": "'''$1 को पुनर्स्थापित कर दिया गया है'''\n\nहाल में हटाये गये तथा पुनर्स्थापित किये गए पन्नों की जानकारी के लिये [[Special:Log/delete|हटाने की लॉग]] देखें।",
        "undelete-header": "हाल में हटाये गये पृष्ठ देखने के लिये [[Special:Log/delete|हटाने का लॉग]] देखें।",
        "undelete-search-title": "हटाये गये पृष्ठ खोजें",
        "sp-contributions-newbies-sub": "नये सदस्योंके लिये",
        "sp-contributions-newbies-title": "नए सदस्यों द्वारा योगदान",
        "sp-contributions-blocklog": "अवरोध सूची",
-       "sp-contributions-suppresslog": "छुपाए गए उपयोगकर्ता के योगदान",
+       "sp-contributions-suppresslog": "छुपाए गए {{GENDER:$1|सदस्य}} के योगदान",
        "sp-contributions-deleted": "हटाए गए {{GENDER:$1|सदस्य}} योगदान",
        "sp-contributions-uploads": "अपलोड",
        "sp-contributions-logs": "लॉग",
        "unblocked-id": "अवरोध $1 निकाल दिया गया है",
        "unblocked-ip": "[[Special:Contributions/$1|$1]] पर से प्रतिरोध हटाया गया है।",
        "blocklist": "अवरोधित उपयोक्ता",
+       "autoblocklist-submit": "खोजें",
        "ipblocklist": "अवरोधित आईपी पते व सदस्यनाम",
        "ipblocklist-legend": "अवरोधित सदस्य को खोजें",
        "blocklist-userblocks": "खाते के अवरोध छिपाएं",
        "lockedbyandtime": "(द्वारा {{GENDER:$1|$1}} पर $2 यहां $3)",
        "move-page": "$1 ले जाएं",
        "move-page-legend": "पृष्ठ स्थानांतरण",
-       "movepagetext": "नà¥\80à¤\9aà¥\87 à¤¦à¤¿à¤¯à¤¾ à¤¹à¥\81à¤\86 à¤«à¤¼à¥\89रà¥\8dम à¤ªà¥\83षà¥\8dठ à¤\95ा à¤¨à¤¾à¤® à¤¬à¤¦à¤² à¤¦à¥\87à¤\97ा, à¤\89सà¤\95ा à¤¸à¤¾à¤°à¤¾ à¤\87तिहास à¤­à¥\80 à¤¨à¤\8f à¤¨à¤¾à¤® à¤¸à¥\87 à¤¦à¤¿à¤\96ना à¤¶à¥\81रà¥\82 à¤¹à¥\8b à¤\9cाà¤\8fà¤\97ा।\nपà¥\81राना à¤¶à¥\80रà¥\8dषà¤\95 à¤¨à¤¯à¥\87 à¤¨à¤¾à¤® à¤\95à¥\8b à¤ªà¥\81नरà¥\8dनिरà¥\8dदà¥\87शित à¤\95र à¤¦à¤¿à¤¯à¤¾ à¤\9cाà¤\8fà¤\97ा।\nमà¥\82ल à¤¶à¥\80रà¥\8dषà¤\95 à¤\95à¥\80 à¤\93र à¤²à¥\87 à¤\9cानà¥\87 à¤µà¤¾à¤²à¥\87 à¤ªà¥\81नारà¥\8dनिरà¥\8dदà¥\87शà¥\8bà¤\82 à¤\95à¥\8b à¤\86प à¤¸à¥\8dवà¤\9aालित à¤°à¥\82प à¤¸à¥\87 à¤¬à¤¦à¤² à¤¸à¤\95तà¥\87 à¤¹à¥\88à¤\82।\nयदि à¤\86प à¤\90सा à¤¨à¤¹à¥\80à¤\82 à¤\95रतà¥\87 à¤¹à¥\88à¤\82 à¤¤à¥\8b à¤\95à¥\83पया [[Special:DoubleRedirects|दà¥\8bहरà¥\87 à¤ªà¥\81नरà¥\8dनिरà¥\8dदà¥\87शन]] à¤¯à¤¾ [[Special:BrokenRedirects|à¤\9fà¥\82à¤\9fà¥\87 à¤ªà¥\81नरà¥\8dनिरà¥\8dदà¥\87शन]] à¤\95à¥\87 à¤²à¤¿à¤\8f à¤\9c़रà¥\82र à¤\9cाà¤\81à¤\9a à¤\95रà¥\87à¤\82।\nà¤\95ड़ियाà¤\81 à¤¸à¤¹à¥\80 à¤\9cà¤\97ह à¤\87à¤\82à¤\97ित à¤\95रतà¥\80 à¤°à¤¹à¥\87à¤\82, à¤¯à¤¹ à¤¸à¥\81निशà¥\8dà¤\9aित à¤\95रना à¤\86पà¤\95à¥\80 à¤\9c़िमà¥\8dमà¥\87दारà¥\80 à¤¹à¥\88।\n\nà¤\85à¤\97र à¤¨à¤¯à¥\87 à¤¶à¥\80रà¥\8dषà¤\95 à¤\95ा à¤²à¥\87à¤\96 à¤ªà¤¹à¤²à¥\87 à¤¸à¥\87 à¤¹à¥\88 à¤¤à¥\8b à¤¸à¥\8dथानाà¤\82तरण '''नहà¥\80à¤\82''' à¤¹à¥\8bà¤\97ा। à¤ªà¤° à¤\85à¤\97र à¤¨à¤¯à¥\87 à¤¶à¥\80रà¥\8dषà¤\95 à¤µà¤¾à¤²à¤¾ à¤²à¥\87à¤\96 à¤\95हà¥\80à¤\82 à¤\94र à¤\85नà¥\81पà¥\8dरà¥\87षित à¤\95रता à¤¹à¥\88 à¤\94र à¤¸à¤¾à¤¥ à¤¹à¥\80 à¤\89सà¤\95à¥\87 à¤ªà¥\81रानà¥\87 à¤¸à¤\82सà¥\8dà¤\95रण à¤¨à¤¹à¥\80à¤\82 à¤¹à¥\88à¤\82 à¤¤à¥\8b à¤¸à¥\8dथानाà¤\82तरण à¤¹à¥\8b à¤\9cायà¥\87à¤\97ा।\nà¤\87सà¤\95ा à¤®à¤¤à¤²à¤¬ à¤\95ि à¤¯à¤¦à¤¿ à¤\86पसà¥\87 à¤\97लतà¥\80 à¤¹à¥\8b à¤\9cाà¤\8f à¤¤à¥\8b à¤\86प à¤µà¤¾à¤ªà¤¸ à¤ªà¥\81रानà¥\87 à¤¨à¤¾à¤® à¤ªà¤° à¤\87स à¤ªà¥\83षà¥\8dठ à¤\95ा à¤¸à¥\8dथानाà¤\82तरण à¤\95र à¤¸à¤\95à¥\87à¤\82à¤\97à¥\87, à¤\94र à¤¸à¤¾à¤¥ à¤¹à¥\80 à¤\86प à¤\95िसà¥\80 à¤®à¥\8cà¤\9cà¥\82दा à¤ªà¥\83षà¥\8dठ à¤\95à¥\87 à¤¬à¤¦à¤²à¥\87 à¤¯à¤¹ à¤¸à¥\8dथानाà¤\82तरण à¤¨à¤¹à¥\80à¤\82 à¤\95र à¤¸à¤\95तà¥\87 à¤¹à¥\88à¤\82।\n\n'''à¤\9aà¥\87तावनà¥\80!'''\nयदि à¤ªà¥\83षà¥\8dठ à¤\95ाफ़à¥\80 à¤²à¥\8bà¤\95पà¥\8dरिय à¤¹à¥\88 à¤¤à¥\8b à¤\89सà¤\95à¥\87 à¤²à¤¿à¤\8f à¤¯à¤¹ à¤\8fà¤\95 à¤¬à¤¹à¥\81त à¤¬à¤¡à¤¼à¤¾ à¤µ à¤\85à¤\95सà¥\8dमातà¥\8d à¤ªà¤°à¤¿à¤µà¤°à¥\8dतन à¤¹à¥\8b à¤¸à¤\95ता à¤¹à¥\88;\nà¤\86à¤\97à¥\87 à¤¬à¤¢à¤¼à¤¨à¥\87 à¤¸à¥\87 à¤ªà¤¹à¤²à¥\87 à¤\87सà¤\95ा à¤\85à¤\82à¤\9cाम à¤\85à¤\9aà¥\8dà¤\9bà¥\80 à¤¤à¤°à¤¹ समझ लें।",
-       "movepagetext-noredirectfixer": "नीचे दिया हुआ पर्चा पृष्ठ का नाम बदल देगा, उसका सारा इतिहास भी नए नाम से दिखना शुरू हो जाएगा।\nपुराना शीर्षक नये नाम को अनुप्रेषित करेगा ।\nमूल शीर्षक की ओर ले जाने वाले अग्रेषणों को आप स्वचालित रूप से बदल सकते हैं।\nयदि आप ऐसा नहीं करते हैं तो कृपया [[Special:DoubleRedirects|दोहरे]] पुनर्निर्देशण या [[Special:BrokenRedirects|टूटे पुनर्निर्देशन]] के लिए ज़रूर जाँच करें।\nकड़ियाँ सही जगह इंगित करती रहें, यह सुनिश्चित करना आपकी जिम्मेदारी है।\n\nअगर नये शीर्षक का लेख पहले से है तो स्थानांतरण '''नहीं''' होगा। पर अगर नये शीर्षक वाला लेख खाली है अथवा कहीं और अनुप्रेषित करता है और साथ ही उसके पुराने संस्करण नहीं हैं तो स्थानांतरण हो जायेगा ।\nइसका मतलब कि यदि आपसे गलती हो जाए तो आप वापस पुराने नाम पर इस पृष्ठ का स्थानांतरण कर सकेंगे, और साथ ही आप किसी मौजूदा पृष्ठ के बदले यह स्थानांतरण नहीं कर सकते हैं।\n\n'''चेतावनी!'''\nयदि पृष्ठ काफ़ी लोकप्रिय है तो उसके लिए यह एक बहुत बड़ा व अकस्मात् परिवर्तन हो सकता है;\nआगे बढ़ने से पहले इसका अंजाम अच्छी तरह समझ लें।\n\n'''सूचना!'''\nस्थानांतरण करनेसे कोई भी महत्वपूर्ण लेख में अनपेक्षित बदलाव हो सकते है ।\nआपसे अनुरोध है कि आप इसके परिणाम जान लें ।",
+       "movepagetext": "निमà¥\8dनलिà¤\96ित à¤ªà¥\8dरारà¥\82प à¤\95à¥\8b à¤\95ाम à¤®à¥\87à¤\82 à¤²à¥\87नà¥\87 à¤ªà¤° à¤ªà¥\83षà¥\8dठ à¤\95ा à¤¨à¤¾à¤® à¤ªà¤°à¤¿à¤µà¤°à¥\8dतित à¤¹à¥\8b à¤\9cायà¥\87à¤\97ा, à¤\87सà¤\95ा à¤¸à¤®à¥\8dपà¥\82रà¥\8dण à¤\87तिहास à¤¨à¤¯à¥\87 à¤¨à¤¾à¤® à¤ªà¤° à¤¸à¥\8dथानानà¥\8dतरित à¤¹à¥\8b à¤\9cायà¥\87à¤\97ा।\nपà¥\81राना à¤¶à¥\80रà¥\8dषà¤\95 à¤¨à¤¯à¥\87 à¤¶à¥\80रà¥\8dषà¤\95 à¤ªà¤° à¤\8fà¤\95 à¤\85नà¥\81पà¥\8dरà¥\87षण à¤ªà¥\83षà¥\8dठ à¤¬à¤¨ à¤\9cायà¥\87à¤\97ा।\nà¤\86प à¤®à¥\82ल à¤¶à¥\80रà¥\8dषà¤\95 à¤ªà¤° à¤\85नà¥\81पà¥\8dरà¥\87षिणà¥\8bà¤\82 à¤\95à¥\8b à¤¸à¥\8dवतà¤\83 à¤\85दà¥\8dयतन à¤\95र à¤¸à¤\95तà¥\87 à¤¹à¥\88à¤\82।\nयदि à¤\86प à¤\90सा à¤¨à¤¹à¥\80à¤\82 à¤\95रतà¥\87 à¤¹à¥\88à¤\82 à¤¤à¥\8b [[Special:DoubleRedirects|दà¥\8dवि-à¤\85नà¥\81पà¥\8dरà¥\87षण]] à¤\94र [[Special:BrokenRedirects|à¤\9fà¥\82à¤\9fà¥\87 à¤¹à¥\81यà¥\87 à¤\85नà¥\81पà¥\8dरà¥\87षणà¥\8bà¤\82]] à¤\95à¥\80 à¤\9cाà¤\81à¤\9a à¤\95रà¥\87à¤\82।\nà¤\95ड़ियà¥\8bà¤\82 à¤\95à¥\87 à¤\86वशà¥\8dयà¤\95 à¤°à¥\82प à¤¸à¥\87 à¤¸à¤¹à¥\80 à¤¸à¥\8dथान à¤ªà¤° à¤\9cà¥\8bड़नà¥\87 à¤\95à¥\87 à¤²à¤¿à¤\8f à¤\86प à¤\89तà¥\8dतरदायà¥\80 à¤¹à¥\88à¤\82।\n\nयदि à¤¨à¤¯à¥\87 à¤¶à¥\80रà¥\8dषà¤\95 à¤ªà¤° à¤ªà¤¹à¤²à¥\87 à¤¸à¥\87 à¤\95à¥\8bà¤\88 à¤ªà¥\83षà¥\8dठ à¤\89पलबà¥\8dध à¤¹à¥\88 à¤¤à¥\8b à¤ªà¥\83षà¥\8dठ à¤\95ा à¤¸à¥\8dथानानà¥\8dतरण <strong>नहà¥\80à¤\82</strong> à¤¹à¥\8bà¤\97ा à¤\9cबà¤\95ि à¤¬à¤¾à¤¦ à¤µà¤¾à¤²à¤¾ à¤\87तिहास à¤°à¤¹à¤¿à¤¤ à¤\85नà¥\81पà¥\8dरà¥\87षण à¤¨à¤¹à¥\80à¤\82 à¤¹à¥\88।\nà¤\87सà¤\95ा à¤\85रà¥\8dथ à¤¯à¤¹ à¤¹à¥\81à¤\86 à¤\95ि à¤\86प à¤\95िसà¥\80 à¤ªà¥\83षà¥\8dठ à¤\95ा à¤ªà¥\81नà¤\83 à¤¨à¤¾à¤®à¤\95रण à¤µà¤¹à¤¾à¤\81 à¤\95र à¤¸à¤\95तà¥\87 à¤¹à¥\88à¤\82 à¤\9cहाà¤\81 à¤¸à¥\87 à¤\87सà¤\95à¥\8b à¤\97लतà¥\80 à¤¸à¥\87 à¤¯à¤¹à¤¾à¤\81 à¤¸à¥\8dथानानà¥\8dतरित à¤\95िया à¤\97या à¤¹à¥\88 à¤\94र à¤\86प à¤ªà¤¹à¤²à¥\87 à¤¸à¥\87 à¤¬à¤¨à¥\87 à¤¹à¥\81यà¥\87 à¤ªà¥\83षà¥\8dठ à¤\95à¥\8b à¤ªà¥\81नà¤\83 à¤¨à¤¹à¥\80à¤\82 à¤²à¤¿à¤\96 à¤¸à¤\95तà¥\87।\n\n<strong>à¤\9fिपà¥\8dपणà¥\80:</strong>\nयह à¤\95िसà¥\80 à¤²à¥\8bà¤\95पà¥\8dरिय à¤ªà¥\83षà¥\8dठ à¤\95à¥\87 à¤²à¤¿à¤\8f à¤\95ठà¥\8bर à¤\94र à¤\85पà¥\8dरतà¥\8dयासित à¤ªà¤°à¤¿à¤µà¤°à¥\8dतन à¤¹à¥\8b à¤¸à¤\95ता à¤¹à¥\88;\nà¤\95à¥\83पया à¤\86à¤\97à¥\87 à¤¬à¤¢à¤¼à¤¨à¥\87 à¤¸à¥\87 à¤ªà¤¹à¤²à¥\87 à¤\87सà¤\95à¥\87 à¤ªà¤°à¤¿à¤£à¤¾à¤®à¥\8bà¤\82 à¤\95à¥\8b à¤\85à¤\9aà¥\8dà¤\9bà¥\87 à¤¸à¥\87 समझ लें।",
+       "movepagetext-noredirectfixer": "नीचे दिया हुआ पर्चा पृष्ठ का नाम बदल देगा, उसका सारा इतिहास भी नए नाम से दिखना शुरू हो जाएगा।\nपुराना शीर्षक नये नाम को अनुप्रेषित करेगा ।\nमूल शीर्षक की ओर ले जाने वाले अग्रेषणों को आप स्वचालित रूप से बदल सकते हैं।\nयदि आप ऐसा नहीं करते हैं तो कृपया [[Special:DoubleRedirects|दोहरे]] पुनर्निर्देशण या [[Special:BrokenRedirects|टूटे पुनर्निर्देशन]] के लिए ज़रूर जाँच करें।\nकड़ियाँ सही जगह इंगित करती रहें, यह सुनिश्चित करना आपकी जिम्मेदारी है।\n\nअगर नये शीर्षक का लेख पहले से है तो स्थानांतरण <strong>नहीं</strong> होगा। पर अगर नये शीर्षक वाला लेख खाली है अथवा कहीं और अनुप्रेषित करता है और साथ ही उसके पुराने संस्करण नहीं हैं तो स्थानांतरण हो जायेगा ।\nइसका मतलब कि यदि आपसे गलती हो जाए तो आप वापस पुराने नाम पर इस पृष्ठ का स्थानांतरण कर सकेंगे, और साथ ही आप किसी मौजूदा पृष्ठ के बदले यह स्थानांतरण नहीं कर सकते हैं।\n\n<strong>चेतावनी!</strong>\nयदि पृष्ठ काफ़ी लोकप्रिय है तो उसके लिए यह एक बहुत बड़ा व अकस्मात् परिवर्तन हो सकता है;\nआगे बढ़ने से पहले इसका अंजाम अच्छी तरह समझ लें।\n\n<strong>सूचना!</strong>\nस्थानांतरण करनेसे कोई भी महत्वपूर्ण लेख में अनपेक्षित बदलाव हो सकते है ।\nआपसे अनुरोध है कि आप इसके परिणाम जान लें ।",
        "movepagetalktext": "संबंधित वार्ता पृष्ठ इसके साथ स्थानांतरीत नहीं होगा '''अगर:'''\n* आप पृष्ठ दुसरे नामस्थान में स्थानांतरीत कर रहें है\n* इस नाम का वार्ता पृष्ठ पहलेसे बना हुवा है, या\n* नीचे दिया हुआ चेक बॉक्स आपने निकाल दिया है ।\n\nइन मामलोंमे आपको स्वयं यह पृष्ठ जोडने पड़ सकते है ।",
        "moveuserpage-warning": "<strong>चेतावनी:</strong> आप एक सदस्य पृष्ठ स्थानांतरित करने जा रहे हैं। कृपया ध्यान दें कि केवल पृष्ठ का नाम बदला जाएगा और सदस्यनाम <em>नहीं</em> बदलेगा।",
        "movecategorypage-warning": "<strong>चेतावनी:</strong> आप एक श्रेणी पृष्ठ को स्थानांतरित करने जा रहे हैं। याद रखिए कि केवल वह पृष्ठ स्थानांतरित होगा और पुरानी श्रेणी में शामिल पृष्ठ नई श्रेणी के अंतरगत <em>नहीं</em> आएँगे।",
        "movenosubpage": "इस पृष्ठ के कोई उपपृष्ठ नहीं हैं।",
        "movereason": "कारण:",
        "revertmove": "पुराने अवतरण पर ले जाएं",
-       "delete_and_move_text": "==हटाने की ज़रूरत==\nलक्ष्य पृष्ठ \"[[:$1]]\" पहले से मौजूद है।\nनाम बदलने के लिये क्या आप इसे हटाना चाहते हैं?",
+       "delete_and_move_text": "लक्ष्य पृष्ठ \"[[:$1]]\" पहले से मौजूद है।\nनाम बदलने के लिये क्या आप इसे हटाना चाहते हैं?",
        "delete_and_move_confirm": "जी हाँ, पृष्ठ हटाएँ",
        "delete_and_move_reason": "\"[[$1]]\" से स्थानांतरण करने के लिये जगह बनाई गयी है",
        "selfmove": "स्रोत और लक्ष्य शीर्षक समान हैं;\nपृष्ठ अपने ही जगह पर स्थानांतरित नहीं हो सकता।",
        "move-leave-redirect": "एक पुनर्निर्देशन पीछे छोड़ते जाएँ",
        "protectedpagemovewarning": "'''चेतावनी:''' यह पृष्ठ तालाबंद है अतः केवल वही सदस्य इनका स्थानांतरण कर सकते हैं जो प्रबंधक हों।\nनिम्न् तलिका मे ताजा सदस्यो कि जानकारी दि गयि है:",
        "semiprotectedpagemovewarning": "'''सूचना:''' यह पृष्ठ सुरक्षित कर दिया गया है और इसे केवल पंजीकृत सदस्य ही स्थानांतरित कर सकते हैं।\nनवीनतम लॉग प्रविष्टि संदर्भ के लिये नीचे दी है:",
-       "move-over-sharedrepo": "== फ़ाइल मौजूद है ==\n[[:$1]] एक साझे भंडार पर मौजूद है। इस नाम पर स्थानांतरण से नई फ़ाइल साझा फ़ाइल को ओवरराइड करेगी।",
+       "move-over-sharedrepo": "[[:$1]] एक साझे भंडार पर मौजूद है। इस नाम पर स्थानांतरण से नई फ़ाइल साझा फ़ाइल को ओवरराइड करेगी।",
        "file-exists-sharedrepo": "चयनित फ़ाइल नाम पहले ही एक साझा भण्डार में प्रयुक्त है।\nकृपया अन्य नाम चुनें।",
        "export": "पन्नों का निर्यात करें",
        "exporttext": "आप विशिष्ठ पृष्ठ के विषय वस्तु और संपादन इतिहास को निर्यात कर सकते हैं अथवा पृष्ठों के समूह को कुछ XML में लपेट सकते हैं।\nयह [[Special:Import|आयात पृष्ठ]] की सहायता से मीडियाविकी का प्रयोग करके दूसरी विकी से आयात किया जा सकता है।\n\nपृष्ठों को निर्यात करने के लिए, नीचे विषय वस्तु संदूक में शीर्षक प्रवेश करें, एक शीर्षक प्रति पंक्ति, और चुने कि आप वर्त्तमान अवतरण के साथ पुराने अवतरण भी चाहते हैं कि नहीं, या पिछले संपादन के बारे में जानकारी के साथ केवल वर्त्तमान अवतरण चाहते हैं।\n\nबाद वाली स्थिति के लिए आप एक सम्पर्क भी प्रयोग कर सकते हैं, उदाहरण के लिए, \"[[{{MediaWiki:Mainpage}}]]\" पृष्ठ के लिए [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]]।",
        "import-nonewrevisions": "कोई अवतरण आयात नहीं किये गये (या तो सभी अवतरण पहले से मौजूद हैं, या त्रुटियों के कारण छोड़े गये)।",
        "xml-error-string": "$1 पंक्ति $2 में, कॉलम $3 (बाईट $4): $5",
        "import-upload": "XML डाटा अपलोड करें",
-       "import-token-mismatch": "सत्र सामग्री खो गई है। \nकृपया पुनः प्रयास करें।",
+       "import-token-mismatch": "सत्र सामग्री खो गई है।\n\nशायद आपने सत्रान्त कर दिया। <strong>कृपया इसकी पुष्टि करें कि आप अब तक लॉग-इन हैं और पुनः प्रयास करें</strong>।\nयदि यह अब भी कार्य नहीं करता है, [[Special:UserLogout|सत्रान्त]] करें और पुनः लॉग-इन करें एवं यह जाँचें की आपका ब्राउज़र इस साइट के लिए कुकीज़ को अनुमत करता है।",
        "import-invalid-interwiki": "इस विकि से आयात नहीं हो सकता है।",
        "import-error-edit": "पृष्ठ \"$1\" आयात नहीं किया गया है क्योंकि आपको उसे संपादित करने की अनुमति नहीं हैं।",
        "import-error-create": "पृष्ठ \"$1\" आयात नहीं किया गया है क्योंकि आपको उसे बनाने की अनुमति नहीं हैं।",
        "scarytranscludefailed-httpstatus": "[$1 के लिये साँचा मँगा नहीं पाए, त्रुटि: HTTP $2]",
        "scarytranscludetoolong": "[यूआरएल बहुत लंबा है]",
        "deletedwhileediting": "'''Warning''': आपने जब से संपादन शुरू किया है, उसके बाद से यह पृष्ठ ही मिटा दिया गया है!",
-       "confirmrecreate": "सदस्य [[User:$1|$1]] ([[User talk:$1|वार्ता]]) ने आपके द्वारा संपादन शुरू होने के बाद यह पृष्ठ निम्नलिखित कारण देकर हटाया हैं:\n: ''$2''\nक्या आप इसे फिरसे बनाना चाहतें हैं, इसकी निश्चिती करें।",
+       "confirmrecreate": "सदस्य [[User:$1|$1]] ([[User talk:$1|वार्ता]]) ने आपके द्वारा संपादन शुरू होने के बाद यह पृष्ठ निम्नलिखित कारण देकर हटाया हैं:\n: <em>$2</em>\nक्या आप इसे फिरसे बनाना चाहतें हैं, इसकी निश्चिती करें।",
        "confirmrecreate-noreason": "जब आपने इस पृष्ठ का सम्पादन शुरू किया था, उसके बाद से सदस्य [[User:$1|$1]] ([[User talk:$1|talk]]) ने इसे हटा दिया है।  कृपया पुष्टि करें कि आप इस पृष्ठ को पुनः बनाना चाहते हैं।",
        "recreate": "फिरसे बनायें",
        "unit-pixel": "px",
        "version-libraries-description": "विवरण",
        "version-libraries-authors": "लेखक",
        "redirect": "फ़ाइल, सदस्य, पृष्ठ, अवतरण या लॉग आईडी द्वारा अनुप्रेषित",
-       "redirect-summary": "यह à¤µà¤¿à¤¶à¥\87ष à¤ªà¥\83षà¥\8dठ à¤«à¤¼à¤¾à¤\87लनाम à¤ªà¥\8dरदान à¤\95रनà¥\87 à¤ªà¤° à¤«à¤¼à¤¾à¤\87ल à¤¨à¤¾à¤® à¤\95à¥\8b, à¤ªà¥\83षà¥\8dठ à¤\86à¤\87॰दà¥\80 à¤\85थवा à¤\85वतरण à¤\86à¤\87॰दà¥\80 à¤¦à¥\87नà¥\87 à¤ªà¤° à¤ªà¥\83षà¥\8dठ à¤\95à¥\8b, à¤\94र à¤¸à¤¦à¤¸à¥\8dय à¤\86à¤\87॰दà¥\80 à¤¦à¥\87नà¥\87 à¤ªà¤° à¤¸à¤¦à¤¸à¥\8dय à¤ªà¥\83षà¥\8dठ à¤\95à¥\8b à¤ªà¥\81नरà¥\8dपà¥\8dरà¥\87षित à¤\95रता à¤¹à¥\88। à¤\89दाहरण: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], à¤¯à¤¾ [[{{#Special:Redirect}}/user/101]]।",
+       "redirect-summary": "यह à¤µà¤¿à¤¶à¥\87ष à¤ªà¥\83षà¥\8dठ à¤\8fà¤\95 à¤«à¤¾à¤\87ल (फाà¤\87ल à¤¨à¤¾à¤® à¤¦à¤¿à¤¯à¤¾ à¤\97या), à¤\8fà¤\95 à¤ªà¥\83षà¥\8dठ (à¤\8fà¤\95 à¤\85वतरण à¤ªà¤¤à¤¾ à¤\85थवा à¤ªà¥\83षà¥\8dठ à¤ªà¤¤à¤¾ à¤¦à¤¿à¤¯à¤¾ à¤\97या), à¤\8fà¤\95 à¤¸à¤¦à¤¸à¥\8dय à¤ªà¥\83षà¥\8dठ (à¤\8fà¤\95 à¤¸à¤\82à¤\96à¥\8dयातà¥\8dमà¤\95 à¤¸à¤¦à¤¸à¥\8dय à¤ªà¤¤à¤¾) à¤\85थवा à¤\8fà¤\95 à¤²à¥\89à¤\97 à¤ªà¥\8dरविषà¥\8dà¤\9fि (लà¥\89à¤\97 à¤ªà¤¤à¤¾ à¤¦à¤¿à¤¯à¤¾ à¤\97या) à¤ªà¤° à¤\85नà¥\81पà¥\8dरà¥\87षित à¤¹à¥\8bता à¤¹à¥\88। à¤\89पयà¥\8bà¤\97: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], [[{{#Special:Redirect}}/user/101]], à¤\85थवा [[{{#Special:Redirect}}/logid/186]].",
        "redirect-submit": "जायें",
        "redirect-lookup": "ढूँढें:",
        "redirect-value": "मूल्य:",
        "tags-deactivate": "निष्क्रिय करें",
        "tags-hitcount": "$1 {{PLURAL:$1|बदलाव|बदलाव}}",
        "tags-manage-no-permission": "आपको बदलाव टैग के प्रबंधन की अनुमति नहीं है।",
-       "tags-manage-blocked": "आप प्रतिबंधित रहते समय टैग में कोई जोड़ना या हटाने का कार्य नहीं कर सकते हैं।",
+       "tags-manage-blocked": "आप प्रतिबंधित रहते समय टैग में कोई जोड़ना या हटाने का कार्य नहीं कर {{GENDER:$1|सकते|सकती}} हैं।",
        "tags-create-heading": "नया टैग बनाएँ",
        "tags-create-explanation": "पुनः निर्धारित रूप से, नवनिर्मित टैग उपयोगकर्ताओं और बॉट के लिए मौजूद रहेंगे।",
        "tags-create-tag-name": "चिप्पी का नाम",
        "tags-deactivate-not-allowed": "टैग \"$1\" को असक्रिय करना सम्भव नहीं है।",
        "tags-deactivate-submit": "निष्क्रिय करें",
        "tags-apply-no-permission": "आपको अनुमति नहीं है कि बदलाव टैगों को अपने बदलावों से जोड़ें।",
-       "tags-apply-blocked": "आप प्रतिबंधित रहते समय टैग में कोई बदलाव नहीं कर सकते हैं।",
+       "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": "आप प्रतिबंधित रहते समय टैग में कोई जोड़ना या हटाने का कार्य नहीं कर सकते हैं।",
+       "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\" को हटाए जाने की अनुमति नहीं है।",
        "htmlform-user-not-valid": "<strong>$1</strong> मान्य प्रयोक्ता नाम नहीं है।",
        "logentry-delete-delete": "$1 ने पृष्ठ $3 {{GENDER:$2|हटा}} दिया",
        "logentry-delete-delete_redir": "$1 ने $3 से पुनर्निर्देशन {{GENDER:$2|हटाकर}} अन्य जानकारी डाल दी।",
-       "logentry-delete-restore": "$1 ने पृष्ठ $3 को {{GENDER:$2|पुनर्स्थापित}} कर दिया",
+       "logentry-delete-restore": "$1 ने पृष्ठ $3 ($4) को {{GENDER:$2|पुनर्स्थापित}} कर दिया",
        "logentry-delete-event": "$1 ने $3 पृष्ठ की लॉग {{PLURAL:$5|प्रविष्टि|प्रविष्टियों}} की दृश्यता {{GENDER:$2|बदली}}: $4",
        "logentry-delete-revision": "$1 ने $3 पृष्ठ के {{PLURAL:$5|एक अवतरण|$5 अवतरणों}} की दृश्यता {{GENDER:$2|बदली}}: $4",
        "logentry-delete-event-legacy": "$1 ने $3 पृष्ठ पर लॉग क्रियाओं की दृश्यता {{GENDER:$2|बदली}}",
        "logentry-protect-protect-cascade": "$1 ने $3 $4 {{GENDER:$2|सुरक्षित किया}} [व्यापक]",
        "logentry-protect-modify": "$1 ने $3 $4 का सुरक्षा स्तर {{GENDER:$2|परिवर्तित किया}}",
        "logentry-protect-modify-cascade": "$1 ने $3 $4 का सुरक्षा स्तर {{GENDER:$2|परिवर्तित किया}} [व्यापक]",
-       "logentry-rights-rights": "$1 ने $3 के सदस्य समूह $4 से बदलकर $5 {{GENDER:$2|किये}}",
+       "logentry-rights-rights": "$1 ने {{GENDER:$6|$3}} के सदस्य समूह $4 से बदलकर $5 {{GENDER:$2|किये}}",
        "logentry-rights-rights-legacy": "$1 ने $3 के सदस्य समूह {{GENDER:$2|बदले}}",
        "logentry-rights-autopromote": "$1 के सदस्य समूह स्वतः $4 से बदलकर $5 {{GENDER:$2|किये}} गए",
        "logentry-upload-upload": "$1 {{GENDER:$2|ने}} $3 अपलोड किया",
        "expand_templates_generate_xml": "XML का पार्स (parse) वृक्ष दर्शायें",
        "expand_templates_generate_rawhtml": "सीधे-साधा एचटीएमएल दिखाएँ",
        "expand_templates_preview": "झलक",
-       "expand_templates_preview_fail_html": "<strong>à¤\85à¤\97र à¤¯à¤¹ à¤µà¥\88ध à¤ªà¥\82रà¥\8dववावलà¥\8bà¤\95न à¤ªà¥\8dरयास à¤¹à¥\88, à¤¤à¥\8b à¤«à¤¿à¤° à¤¸à¥\87 à¤ªà¥\8dरयास à¤\95à¥\80à¤\9cिà¤\8f।</strong>\nà¤\85à¤\97र à¤\87ससà¥\87 à¤\95ाम à¤¨ à¤¬à¤¨à¥\87 à¤¤à¥\8b [[Special:UserLogout|लà¥\89à¤\97 à¤\86à¤\89à¤\9f à¤¹à¥\8bà¤\95र]] à¤«à¤¿à¤° à¤¸à¥\87 à¤²à¥\89à¤\97 à¤\87न à¤¹à¥\8b à¤\9cाà¤\87यà¥\87।",
+       "expand_templates_preview_fail_html": "<strong>à¤\85à¤\97र à¤¯à¤¹ à¤µà¥\88ध à¤ªà¥\82रà¥\8dववावलà¥\8bà¤\95न à¤ªà¥\8dरयास à¤¹à¥\88, à¤¤à¥\8b à¤«à¤¿à¤° à¤¸à¥\87 à¤ªà¥\8dरयास à¤\95à¥\80à¤\9cिà¤\8f।</strong>\nà¤\85à¤\97र à¤\87ससà¥\87 à¤\95ाम à¤¨ à¤¬à¤¨à¥\87 à¤¤à¥\8b [[Special:UserLogout|सतà¥\8dराà¤\82त à¤¹à¥\8bà¤\95र]] à¤ªà¥\81नà¤\83 à¤¸à¥\87 à¤²à¥\89à¤\97 à¤\87न à¤\95रà¥\87à¤\82 à¤\94र à¤\9cाà¤\81à¤\9a à¤\95रà¥\87à¤\82 à¤\95à¥\80 à¤\86पà¤\95ा à¤¬à¥\8dराà¤\89à¤\9c़र à¤\87स à¤¸à¤¾à¤\87à¤\9f à¤ªà¤° à¤\95à¥\81à¤\95à¥\80à¤\9c à¤\95à¥\8b à¤\85नà¥\81मत à¤\95रता à¤¹à¥\88।",
        "expand_templates_preview_fail_html_anon": "<em>चूँकि {{SITENAME}} सीधे-साधे रूप से एचटीएमएल-सक्षम है और आप लॉग्ड इन नहीं है, पूर्वावलोकन छिपा हुआ है ताकि सम्भावित जावास्क्रिप्ट हमले को रोका सके।</em>\n\n<strong>अगर यह वैध पूर्वावलोकन प्रयास है तो कृपया [[Special:UserLogin|लॉग इन करके]] फिर से प्रयास कीजिए।</strong>",
        "expand_templates_input_missing": "आपको कम से कम कुछ पाठ्य प्रदान करने पड़ेंगे।",
        "pagelanguage": "पृष्ठ भाषा बदलें",
        "log-action-filter-newusers": "खाता निर्माण के प्रकार:",
        "log-action-filter-patrol": "परीक्षण के प्रकार:",
        "log-action-filter-protect": "सुरक्षा के प्रकार:",
-       "log-action-filter-rights": "अधिकार बदलाव के प्रकार",
+       "log-action-filter-rights": "अधिकार बदलाव के प्रकार:",
        "log-action-filter-upload": "अपलोड के प्रकार:",
        "log-action-filter-all": "सभी",
        "log-action-filter-block-block": "अवरोध",
        "log-action-filter-protect-modify": "सुरक्षा परिवर्तन",
        "log-action-filter-protect-unprotect": "असुरक्षा",
        "log-action-filter-protect-move_prot": "सुरक्षा स्थानांतरण",
+       "log-action-filter-rights-rights": "मैनुअल परिवर्तन",
        "log-action-filter-rights-autopromote": "स्वतः परिवर्तन",
+       "log-action-filter-suppress-event": "लॉग अवरोध",
+       "log-action-filter-suppress-revision": "संशोधन अवरोध",
+       "log-action-filter-suppress-delete": "पृष्ठ अवरोध",
+       "log-action-filter-suppress-block": "ब्लॉक द्वारा युजर अवरोध",
+       "log-action-filter-suppress-reblock": "पुन: ब्लॉक द्वारा युजर अवरोध",
        "log-action-filter-upload-upload": "नया अपलोड",
        "log-action-filter-upload-overwrite": "फिर से अपलोड",
        "authmanager-create-disabled": "खाता निर्माण निष्क्रिय है।",
        "restrictionsfield-badip": "अमान्य आईपी पते या सीमा: $1",
        "restrictionsfield-label": "अनुमत आईपी सीमा:",
        "revid": "अवतरण $1",
-       "pageid": "पेज आईडी"
+       "pageid": "पेज आईडी $1"
 }
index 12ea679..73e2480 100644 (file)
        "login": "Log in karo",
        "login-security": "Aapan account ke verify karo",
        "nav-login-createaccount": "Log in karo/ nawaa account banao",
-       "userlogin": "Log in karo/ nawaa account banao",
-       "userloginnocreate": "Log in karo",
        "logout": "Log out",
        "userlogout": "Sadasya logout",
        "notloggedin": "Aap logged in nai hai",
        "userlogin-noaccount": "Aap ke lage account hae?",
        "userlogin-joinproject": "{{SITENAME}} ke join karo",
-       "nologin": "Account nai hai? '''$1'''.",
-       "nologinlink": "Nawaa account banao",
        "createaccount": "Nawaa account banao",
-       "gotaccount": "Aap ke pas pahile se account hai ki nai? '''$1'''.",
-       "gotaccountlink": "Log in",
-       "userlogin-resetlink": "Ka aap aapan login kare waala jaankari ke bhulae gaya hae?",
        "userlogin-resetpassword-link": "Aapan password ke bhool gayaa?",
        "userlogin-helplink2": "Log in kare ke khatir madat.",
        "userlogin-loggedin": "Aap {{GENDER:$1|$1}} ke naam ke niche login bhayaa hae.\nNiche ke form ke kaam me laae ke duusra naam ke niche login ho.",
        "createaccountmail": "Ek temporary password ke kaam me laao aur iske batawa gais Email pe bhej do",
        "createaccountmail-help": "Binaa password ke jaane iske duusra jan ke khaatir account banae me use karaa jaae sake hai.",
        "createacct-realname": "Aslii naam (jaruri nai hae)",
-       "createaccountreason": "Kaaran:",
        "createacct-reason": "Kaaran",
        "createacct-reason-ph": "Aap ke ii account ke banae ke kaaran",
        "createacct-reason-help": "Ii sandes ke account creation log me dekhaawa jaae hai",
        "right-editsemiprotected": "Badla gais panna ke \"{{int:protect-level-autoconfirmed}}\" ke rakam bachawa gais hae",
        "right-editcontentmodel": "Panna ke content model ke badlo",
        "right-editinterface": "User interface ke badlo",
-       "right-editusercssjs": "Duusra sadsya ke CSS aur JS files ke badlo",
        "right-editusercss": "Duusra sadsya ke CSS files ke badlo",
        "right-edituserjs": "Duusra sadsya ke JS files ke badlo",
        "right-editmyusercss": "Aapan CSS files ke badlo",
        "rcfilters-filter-editsbyother-label": "Duusra jan ke karaa gais badlao",
        "rcfilters-filter-editsbyother-description": "Badlao jiske duusraa jan karin hai (aap nai)",
        "rcfilters-filtergroup-userExpLevel": "User experience level (registered sadasya ke khaatir)",
-       "rcfilters-filter-userExpLevel-newcomer-label": "Newcomers",
-       "rcfilters-filter-userExpLevel-newcomer-description": "10 se kamtii badlao aur 4 din se kamtii activity.",
-       "rcfilters-filter-userExpLevel-learner-label": "Sikhe waala",
-       "rcfilters-filter-userExpLevel-learner-description": "More days of activity and edits than 'Newcomers' but fewer than 'Experienced users.'",
-       "rcfilters-filter-userExpLevel-experienced-label": "Experienced users",
-       "rcfilters-filter-userExpLevel-experienced-description": "30 din se jaada activity aur 500 se jaada badlao",
+       "rcfilters-filter-user-experience-level-newcomer-label": "Newcomers",
+       "rcfilters-filter-user-experience-level-newcomer-description": "10 se kamtii badlao aur 4 din se kamtii activity.",
+       "rcfilters-filter-user-experience-level-learner-label": "Sikhe waala",
+       "rcfilters-filter-user-experience-level-learner-description": "More days of activity and edits than 'Newcomers' but fewer than 'Experienced users.'",
+       "rcfilters-filter-user-experience-level-experienced-label": "Experienced users",
+       "rcfilters-filter-user-experience-level-experienced-description": "30 din se jaada activity aur 500 se jaada badlao",
        "rcfilters-filtergroup-automated": "Automated contributions",
        "rcfilters-filter-bots-label": "Bot",
        "rcfilters-filter-bots-description": "Edits made by automated tools.",
        "rcshowhidecategorization": "$1 page categorization",
        "rcshowhidecategorization-show": "Dekhao",
        "rcshowhidecategorization-hide": "Lukao",
-       "rclinks": "Pichhla $1 badlao pichle $2 din me dekhao <br />$3",
+       "rclinks": "Pichhla $1 badlao pichle $2 din me dekhao",
        "diff": "farka",
        "hist": "itihaas",
        "hide": "Chhupao",
        "undeleteviewlink": "dekho",
        "undeleteinvert": "Selection ke ulta karo",
        "undeletecomment": "Kaaran::",
-       "undeletedrevisions": "{{PLURAL:$1|1 badlao|$1 badlao}} ke pahile jaise kar dewa gais hai",
-       "undeletedrevisions-files": "{{PLURAL:$1|1 badlao|$1 badlao}} aur {{PLURAL:$2|1 file|$2 files}} ke pahile jaise kar dewa gais hai",
-       "undeletedfiles": "{{PLURAL:$1|1 file|$1 files}} ke pahile jaise kar dewa gais hai",
        "cannotundelete": "Kuchh, nai to sab undelete fail hoe gais hai:\n$1",
        "undeletedpage": "'''$1 ke pahile jaise kar dewa gais hai'''\n\nNawaa mitawa gais aur badlao ke ulta karaa gais panna ke dekhe ke khatir [[Special:Log/delete|deletion log]] ke dekho.",
        "undelete-header": "Nawaa mitawa gais panna ke dekhe ke khatir [[Special:Log/delete|the deletion log]] ke dekho.",
        "logentry-tag-update-revision": "$1 {{GENDER:$2|updated}} tags on revision $4 of page $3 ({{PLURAL:$7|added}} $6; {{PLURAL:$9|removed}} $8)",
        "logentry-tag-update-logentry": "$1 {{GENDER:$2|updated}} tags on log entry $5 of page $3 ({{PLURAL:$7|added}} $6; {{PLURAL:$9|removed}} $8)",
        "rightsnone": "(koi nai hai)",
-       "revdelete-summary": "summary ke badlo",
        "rightslogentry-temporary-group": "$1 (temporary, until $2)",
        "feedback-adding": "Panna me subject jorra jaawe hae...",
        "feedback-back": "Piichhe",
index 59ff3f2..285efca 100644 (file)
        "externaldberror": "Mahimo nga may ara sang sala sa pagpamatood sang database ukon wala ka sa lugar nga magbag-o sang imo pang-guha nga akawnt.",
        "login": "Mag sulod",
        "nav-login-createaccount": "Magsulod / maghimo account",
-       "userlogin": "Mag sulod / maghimo account",
-       "userloginnocreate": "Magsulod",
        "logout": "Mag guha",
        "userlogout": "Mag guha",
        "notloggedin": "Wala naka-sulod",
-       "nologin": "Wala ka sang imo akawnt? $1.",
-       "nologinlink": "Maghimo account",
        "createaccount": "Maghimo Account",
-       "gotaccount": "May yara ka na sang akawnt? $1.",
-       "gotaccountlink": "Mag sulod",
-       "userlogin-resetlink": "Nalipatan mo bala ang mga detalye sang imo pagsulod?",
        "userlogin-createanother": "Maghimo sing panibag-o nga account",
        "createaccountmail": "Paagi sa e-mail",
-       "createaccountreason": "Rason:",
        "createacct-submit": "Maghimo sing imo account",
        "createacct-another-submit": "Maghimo sing panibag-o nga account",
        "badretype": "Ang mga pasword nga imo gintum-ok wala naga-santo.",
        "passwordreset-disabled": "Ang mga pagliwat sang pasword gin-untat sa sini nga wiki.",
        "passwordreset-username": "Ngalan sang Manog-gamit\"",
        "passwordreset-domain": "Domeyn:",
-       "passwordreset-capture": "Lantawon ang nagresuta nga e-mail?",
-       "passwordreset-capture-help": "Kon butangan mo sang tsek ang ini nga kahon, ang e-mail (nga may temporaryo nga pasword) igapakita sa imo kag amo man ipadala sa manuggamit.",
        "passwordreset-email": "Adres sang e-mail:",
        "passwordreset-emailtitle": "Ang mga detalye sang akawnt sa {{SITENAME}}",
        "passwordreset-emailtext-ip": "May tawo nga (mahimo ikaw, halin sa IP adres nga $1) nagpangabay sang pahanumdom sang mga detalye\nsang imo akawnt para sa {{SITENAME}} ($4). Ang masunod nga {{PLURAL:$3|akawnt|mga akawnt}} sang manuggamit\nmay kabahin sa sini nga adres sang e-mail:\n\n$2\n\n{{PLURAL:$3|Ang ini nga temporaryo nga pasword|Ang mga ini nga temporaryo nga pasword}} indi na magamit sa {{PLURAL:$5|isa ka adlaw|$5 ka adlaw}}.\nKinahanglan mo nga magsulod kag magpili sang bag-o nga pasword subong. Kon lain nga tawo ang nagbuhat sini\nnga pagpangabay, ukon nadumduman mo na ang imo pasword, kag indi mo na kinahanglan nga ini\npaga-ilisan, mahimo mo nga pabay-an ang ini nga pahanumdom kag magpadayon sa paggamit sang imo daan nga pasword.",
        "saveprefs": "Itipunon",
        "restoreprefs": "Ibalik ang tanan nga default settings",
        "prefs-editing": "Pag-ilis",
-       "rows": "Mga linya:",
-       "columns": "Mga kulumna:",
        "searchresultshead": "Pangita-a",
        "stub-threshold": "Suludlan sang <a href=\"#\" class=\"stub\">stub sang link</a> nga pagkay-o (bytes):",
        "stub-threshold-disabled": "Gin-untat",
        "userrights-reason": "Rason:",
        "userrights-no-interwiki": "Wala ka permiso nga lainon ang layi sang tiggamit sa iban nga mga wiki.",
        "userrights-nodatabase": "Wala nagagwa ang datos $1 ukon indi ini lokal.",
-       "userrights-nologin": "Kinahanglang [[Special:UserLogin|log in]] pinaagi sa isa account nga tagdumala para matagaan sang derecho sang tiggamit.",
-       "userrights-notallowed": "Ang imo nga account waay sing permiso para magdugang ukon magpanas sang kinamatarong sang mga naga-usar.",
        "userrights-changeable-col": "Mga grupo nga pwede mong baguhon.",
        "userrights-unchangeable-col": "Mga grupo nga indi mo pwede baguhon.",
        "group": "Grupo:",
        "right-protect": "Islan ang grado sang proteksyon kag baguhon ang mga ginprotektar nga mga panid",
        "right-editprotected": "Baguhon ang mga panid nga ginprotekta (waay sing proteksyon nga de-grado)",
        "right-editinterface": "Baguhon ang user interface.",
-       "right-editusercssjs": "Baguhon ang mga CSS kag Javascript nga files sang iban nga naga-usar.",
        "right-editusercss": "Baguhon ang mga CSS files sang iban nga naga-usar.",
        "right-edituserjs": "Baguhon ang mga Javascript files sang iban nga mga naga-usar.",
        "right-rollback": "Dasigay nga ibalik sa nahauna nga estado ang mga pagbag-o sang ulihi nga naga-usar nga nabag-o sa isa ka partikular nga panid.",
        "right-siteadmin": "Isira kag abrihan ang bulutangan sang mga impormasyon",
        "right-override-export-depth": "Ipagwa ang mga panid kaupod ang mga sugpon nga mga panid tubtub isa idalum nga 5.",
        "right-sendemail": "Magpadala sang email sa iban nga naga-usar",
-       "right-passwordreset": "Tan-awa ang mga email sang password reset",
        "right-managechangetags": "Maghimo kag magdula sing [[Special:Tags|mga tag]] halin sa database.",
        "newuserlogpage": "Pagkitan sang paghimo sang taggamit",
        "newuserlogpagetext": "Ini ang isa ka log sang mga ginhimo sang naga-usar",
        "rcshowhidepatr": "$1 ginabantyan nga pagbag-o",
        "rcshowhidemine": "$1 ang akon mga pagliwat",
        "rcshowhidemine-hide": "Itaguon",
-       "rclinks": "Ipakita ang ulihi nga $1 ka mga gin-ilisan sa sulod sang $2 ka adlaw<br />$3",
+       "rclinks": "Ipakita ang ulihi nga $1 ka mga gin-ilisan sa sulod sang $2 ka adlaw",
        "diff": "knln",
        "hist": "ngkltb",
        "hide": "Tago",
        "revdelete-restricted": "ginapatuman nga pagbawal sa mga administrador",
        "revdelete-unrestricted": "ginkakas nga pagbawal sa mga administrador",
        "rightsnone": "(wala)",
-       "revdelete-summary": "liwaton ang kabilogan",
        "searchsuggest-search": "Pangitaa",
        "expand_templates_preview": "Ipakita subong"
 }
index 85173c5..4930e6d 100644 (file)
        "prefs-watchlist-days-max": "Najviše $1 {{PLURAL:$1|dan|dana}}",
        "prefs-watchlist-edits": "Broj uređivanja koji će se prikazati na proširenom popisu praćenja:",
        "prefs-watchlist-edits-max": "Maksimalni broj: 1000",
-       "prefs-watchlist-token": "Token popisa praćenja:",
+       "prefs-watchlist-token": "Tajni ključ popisa praćenja:",
        "prefs-misc": "Razno",
        "prefs-resetpass": "promijeni zaporku",
        "prefs-changeemail": "promijeni ili ukloni adresu e-pošte",
        "prefs-advancedwatchlist": "Napredne mogućnosti",
        "prefs-displayrc": "Mogućnosti prikaza",
        "prefs-displaywatchlist": "Mogućnosti prikaza",
+       "prefs-tokenwatchlist": "Tajni ključ",
        "prefs-diffs": "Razlike između inačica uređivanja",
        "prefs-help-prefershttps": "Ova mogućnost će stupiti na snagu kod sljedeće prijave.",
        "prefswarning-warning": "Napravili ste promjene u Vašim postavkama koje još nisu snimljene.\nAko napustite ovu stranicu bez pritiska na \"$1\", postavke neće biti ažurirane.",
        "right-editsemiprotected": "Uređivanje stranica zaštićenih kao \"{{int:protect-level-autoconfirmed}}\"",
        "right-editcontentmodel": "Odredi modela sadržaja stranice",
        "right-editinterface": "Uređivanje suradničkog sučelja",
-       "right-editusercssjs": "Uređivanje CSS i JS stranica drugih suradnika",
        "right-editusercss": "Uređivanje CSS stranica drugih suradnika",
        "right-edituserjs": "Uređivanje JS stranica drugih suradnika",
        "right-editmyusercss": "Uređivanje vlastitih CSS stranica",
        "rcshowhidecategorization": "$1 kategorizaciju stranica",
        "rcshowhidecategorization-show": "prikaži",
        "rcshowhidecategorization-hide": "Sakrij",
-       "rclinks": "Prikaži posljednjih $1 promjena {{PLURAL:$2|prethodni dan|u posljednja $2 dana|u posljednjih $2 dana}}<br />$3",
+       "rclinks": "Prikaži posljednjih $1 promjena {{PLURAL:$2|prethodni dan|u posljednja $2 dana|u posljednjih $2 dana}}",
        "diff": "razl",
        "hist": "pov",
        "hide": "sakrij",
        "undeleteviewlink": "pregled",
        "undeleteinvert": "Obrni odabir",
        "undeletecomment": "Razlog:",
-       "undeletedrevisions": "{{PLURAL:$1|$1 inačica vraćena|$1 inačice vraćene|$1 inačica vraćeno}}",
-       "undeletedrevisions-files": "{{PLURAL:$1|$1 promjena|$1 promjene|$1 promjena}} i {{PLURAL:$2|$2 datoteka vraćena|$2 datototeke vraćene|$2 datoteka vraćeno}}",
-       "undeletedfiles": "{{PLURAL:$1|1 datoteka vraćena|$1 datoteke vraćene|$1 datoteka vraćeno}}",
        "cannotundelete": "Vraćanje obrisane inačice nije uspjelo:\n$1",
        "undeletedpage": "'''$1 je vraćena'''\n\nPogledajte [[Special:Log/delete|evidenciju brisanja]] za zapise nedavnih brisanja i vraćanja.",
        "undelete-header": "Pogledaj [[Special:Log/delete|evidenciju brisanja]] za nedavno obrisane stranice.",
        "pageinfo-header-properties": "Svojstva stranice",
        "pageinfo-display-title": "Naslov stranice",
        "pageinfo-default-sort": "Podrazumijevano sortiranje",
-       "pageinfo-length": "Dužina stranice (u bajtovima)",
+       "pageinfo-length": "Veličina stranice (u bajtovima)",
        "pageinfo-article-id": "ID stranice",
        "pageinfo-language": "Jezik stranice",
        "pageinfo-content-model": "Tip podataka na stranici",
        "newimages-summary": "Ova posebna stranica pokazuje posljednje nedavno postavljene datoteke.",
        "newimages-legend": "Filtar",
        "newimages-label": "Naziv datoteke (ili njen dio):",
+       "newimages-user": "IP adresa ili suradničko ime",
        "newimages-showbots": "Prikaži datoteke koje su postavili botovi",
        "newimages-hidepatrolled": "Sakrij pregledana postavljanja",
        "noimages": "Nema slika.",
index 85192b1..264ee9e 100644 (file)
        "externaldberror": "Entweder es lieht en Fehler bei der externe Authentifizierung voar orrer du därrefst dein externes Benutzerkonto net aktualisiere.",
        "login": "Oonmelde",
        "nav-login-createaccount": "Oonmelde / Benutzerkonto erstelle",
-       "userlogin": "Oonmelde / Benutzerkonto erstelle",
-       "userloginnocreate": "Oonmelde",
        "logout": "Abmelde",
        "userlogout": "Abmelde",
        "notloggedin": "Nicht oongemeldt",
        "userlogin-noaccount": "Du host noch ken Benutzerkonto?",
        "userlogin-joinproject": "{{SITENAME}} beitrete",
-       "nologin": "Du host ken Benutzerkonto? '''$1'''.",
-       "nologinlink": "En neie Benutzerkonto erstelle",
        "createaccount": "Benutzerkonto erstelle",
-       "gotaccount": "Du host schon en Benutzerkonto? '''$1'''.",
-       "gotaccountlink": "Oonmelde",
-       "userlogin-resetlink": "Die Oonmelddate vergess?",
        "userlogin-resetpassword-link": "Passwort vergesse?",
        "userlogin-helplink2": "Hellef bei der Oonmeldung",
        "userlogin-loggedin": "Du bist schon als {{GENDER:$1|$1}} oongemeldt.\nBenutz das unne stehnd Formular, um dich unner enem annren Benutzername oonzumelde.",
        "createacct-another-email-ph": "E-Mail-Adress",
        "createaccountmail": "En temporäres Zufallspasswort verwenne und an die oongebne E-Mail-Adress verschicke",
        "createacct-realname": "Registrierte Noome (optional)",
-       "createaccountreason": "Grund:",
        "createacct-reason": "Begründung",
        "createacct-reason-ph": "Waroom erstellst du en annres Benutzerkonto?",
        "createacct-submit": "Dein Benutzerkonto erstelle",
        "right-editprotected": "Seite bearbeite, wo als \"{{int:protect-level-sysop}}\" geschützt sind",
        "right-editsemiprotected": "Seite beoorbeite, wo als \"{{int:protect-level-autoconfirmed}}\" geschützt sind",
        "right-editinterface": "Benutzeroberfläche beoorbeite",
-       "right-editusercssjs": "Fremde CSS- und JavaScript-Dateie beoorbeite",
        "right-editusercss": "Fremde CSS-Dateie bearbeite",
        "right-edituserjs": "Fremde JavaScript-Dateie boobeite",
        "right-editmyusercss": "Eichne Benutzer-CSS-Dateie beoorbeite",
        "rcshowhidemine": "Eichne Beiträche $1",
        "rcshowhidemine-show": "Zeich",
        "rcshowhidemine-hide": "Versteck",
-       "rclinks": "Zeich die letzte $1 Ännrunge von der letzte $2 Tooche.<br />$3",
+       "rclinks": "Zeich die letzte $1 Ännrunge von der letzte $2 Tooche.",
        "diff": "Unnerschied",
        "hist": "Versione",
        "hide": "Versteck",
        "undeleteviewlink": "oongucke",
        "undeleteinvert": "Auswahl umkehre",
        "undeletecomment": "Grund:",
-       "undeletedrevisions": "{{PLURAL:$1|1 Version woard|$1 Versione woorre}} wiederheargestellt",
-       "undeletedrevisions-files": "{{PLURAL:$1|1 Version|$1 Versione}} und {{PLURAL:$2|1 Datei|$2 Dateie}} woorre wiederheargestellt",
-       "undeletedfiles": "{{PLURAL:$1|1 Datei woard|$1 Dateie worre}} wiederhergestellt",
        "cannotundelete": "Die Wiederhearstellung ist fehlgeschlooht:\n$1",
        "undeletedpage": "'''\"$1\"''' woorre wiederhergestellt.\n\nIm [[Special:Log/delete|Abwischung-Logbuch]] finnst du en Üwersicht von der gelöschte und wiederheargestellte Seite.",
        "undelete-header": "Sieh das [[Special:Log/delete|Abwischung-Logbuch]] für keerzlich abgewischte Seite.",
index 9012602..ae5f419 100644 (file)
        "externaldberror": "Běše pak eksterny zmylk awtentifikacije datoweje banki, pak njesměš swoje eksterne konto aktualizować.",
        "login": "Přizjewić",
        "nav-login-createaccount": "Konto wutworić abo so přizjewić",
-       "userlogin": "Załožće konto abo přizjewće so",
-       "userloginnocreate": "Přizjewić",
        "logout": "wotzjewić",
        "userlogout": "wotzjewić",
        "notloggedin": "Njepřizjewjeny",
        "userlogin-noaccount": "Nimaš žane konto?",
        "userlogin-joinproject": "Konto za {{GRAMMAR:akuzatiw|{{SITENAME}}}} załožić",
-       "nologin": "Nimaš žane konto? $1.",
-       "nologinlink": "Konto załožić",
        "createaccount": "Konto załožić",
-       "gotaccount": "Maš hižo wužiwarske konto? $1.",
-       "gotaccountlink": "Přizjewić",
-       "userlogin-resetlink": "Přizjewjenske daty zabył?",
        "userlogin-resetpassword-link": "Sy swoje hesło zabył?",
        "userlogin-helplink2": "Pomoc při přizjewjenju",
        "userlogin-loggedin": "Sy hižo jako {{GENDER:$1|$1 přizjewjeny|$1 přizjewjena}}. Wužij slědowacy formular, zo by so jako druhi wužiwar přizjewił.",
        "createacct-another-email-ph": "E-mejlowu adresu zapodać",
        "createaccountmail": "Nachwilne připadne hesło wužiwać a jo na slědowacu e-mejlowu adresu pósłać",
        "createacct-realname": "Woprawdźite mjeno (opcionalny)",
-       "createaccountreason": "Přičina:",
        "createacct-reason": "Přičina",
        "createacct-reason-ph": "Čehodla załožuješ druhe konto?",
        "createacct-submit": "Twoje konto załožić",
        "right-editsemiprotected": "Strony wobdźěłać, kotrež su přez \"{{int:protect-level-autoconfirmed}}\" škitane",
        "right-editcontentmodel": "Wobsahowy model strony wobdźěłać",
        "right-editinterface": "Wužiwarski powjerch wobdźěłać",
-       "right-editusercssjs": "Dataje CSS a JS druhich wužiwarjow wobdźěłać",
        "right-editusercss": "Dataje CSS druhich wužiwarjow wobdźěłać",
        "right-edituserjs": "Dataje JS druhich wužiwarjow wobdźěłać",
        "right-editmyusercss": "Twoje swójske wužiwarske CSS-dataje wobdźěłać",
        "rcshowhidemine-hide": "schować",
        "rcshowhidecategorization-show": "Pokazać",
        "rcshowhidecategorization-hide": "Schować",
-       "rclinks": "Pokazuj poslednje $1 změny poslednich $2 dnjow.<br />$3",
+       "rclinks": "Pokazuj poslednje $1 změny poslednich $2 dnjow.",
        "diff": "rozdźěl",
        "hist": "wersije",
        "hide": "schować",
        "undeleteviewlink": "wobhladać sej",
        "undeleteinvert": "Wuběr wobroćić",
        "undeletecomment": "Přičina:",
-       "undeletedrevisions": "$1 {{PLURAL:$1|wersija|wersiji|wersije|wersijow}} {{PLURAL:$1|wobnowjena|wobnowjenej|wobnowjene|wobnowjene}}",
-       "undeletedrevisions-files": "$1 {{PLURAL:$1|wersija|wersiji|wersije|wersijow}} a $2 {{PLURAL:$2|dataja|dataji|dataje|datajow}} {{PLURAL:$2|wobnowjena|wobnowjenej|wobnowjene|wobnowjene}}",
-       "undeletedfiles": "$1 {{PLURAL:$1|dataja|dataji|dataje|datajow}} {{PLURAL:$1|wobnowjena|wobnowjenej|wobnowjene|wobnowjene}}.",
        "cannotundelete": "Wobnowjenje zwrěšćiło:\n$1",
        "undeletedpage": "'''Strona $1 bu z wuspěchom wobnowjena.'''\n\nHlej [[Special:Log/delete|protokol]] za lisćinu aktualnych wušmórnjenjow a wobnowjenjow.",
        "undelete-header": "Hlej [[Special:Log/delete|protokol wušmórnjenjow]] za njedawno wušmórnjene strony.",
        "patrol-log-header": "To je protokol dohladowanych wersijow.",
        "log-show-hide-patrol": "Protokol dohladowanja $1",
        "log-show-hide-tag": "Protokol markěrowanjow $1",
+       "confirm-markpatrolled-button": "W porjadku",
+       "confirm-markpatrolled-top": "Wersiju $3 strony $2 jako přehladowanu markěrować?",
        "deletedrevision": "Stara wersija $1 wušmórnjena",
        "filedeleteerror-short": "Zmylk při zničenju dataje: $1",
        "filedeleteerror-long": "Buchu zmylki při zničenju dataje zwěsćene:\n\n$1",
        "confirm-watch-top": "Tutu stronu wobkedźbowankam přidać?",
        "confirm-unwatch-button": "W porjadku",
        "confirm-unwatch-top": "Tutu stronu z wobkedźbowankow wotstronić?",
+       "confirm-rollback-button": "W porjadku",
        "quotation-marks": "\"$1\"",
        "imgmultipageprev": "← předchadna strona",
        "imgmultipagenext": "přichodna strona →",
        "logentry-upload-overwrite": "$1 je nowu wersiju $3 {{GENDER:$2|nahrał|nahrała}}",
        "logentry-upload-revert": "$1 je $3 {{GENDER:$2|nahrał|nahrała}}",
        "rightsnone": "(ničo)",
-       "revdelete-summary": "zjeće wobdźěłać",
        "feedback-adding": "Komentar so stronje přidawa...",
        "feedback-back": "Wróćo",
        "feedback-bugcheck": "Wulkotnje! Skontroluj jenož, hač to jedyn z [$1 znatych zmylkow] njeje.",
index edb8a7c..6c6c2ac 100644 (file)
@@ -17,6 +17,7 @@
        "tog-hideminor": "Kache tout modifikasyon resan yo ki tou piti",
        "tog-hidepatrolled": "Kache modifikasyon yo ki fèk fèt pou moun ki ap veye yo",
        "tog-newpageshidepatrolled": "Kache paj ki siveye yo nan mitan lis nouvo paj yo",
+       "tog-hidecategorization": "Kache kategori ki nan paj la",
        "tog-extendwatchlist": "Etann lis swivi pou ou kapab wè tout chanjman yo, pa sèlman sa ki fèk fèt yo",
        "tog-usenewrc": "Sanble modifikasyon pou chak paj nan chanjman resan ak paj an vèy",
        "tog-numberheadings": "Nimewote otomatikman tit yo",
@@ -27,6 +28,7 @@
        "tog-watchdefault": "Ajoute paj mwen chanje yo nan lis swivi mwen",
        "tog-watchmoves": "Ajoute paj mwen deplase yo nan lis swivi mwen",
        "tog-watchdeletion": "Ajoute paj mwen efase yo nan lis swivi mwen",
+       "tog-watchuploads": "Ajoute paj nouvo nan favori m'",
        "tog-watchrollback": "Ajoute paj kote mwen ranvèse chanjman yo nan lis swivi mwen",
        "tog-minordefault": "Make tout modifikasyon kòm «&nbsp;tou piti&nbsp;» pa defo",
        "tog-previewontop": "Montre kout je anvan zòn modifikasyon",
@@ -36,7 +38,7 @@
        "tog-enotifminoredits": "Voye yon imèl ban mwen pou ti chanjman paj ak fichye",
        "tog-enotifrevealaddr": "Montre adrès imèl mwen nan kominikasyon notifikasyon yo",
        "tog-shownumberswatching": "Montre kantite itlizatè k’ap swiv",
-       "tog-oldsig": "Siyati ki la deja a:",
+       "tog-oldsig": "Siyati ki egziste deja ou",
        "tog-fancysig": "Konsidere siyati sa tankou yon wikitèks (san lyen ki ta otomatik)",
        "tog-uselivepreview": "Sèvi ak vizyònman dirèk",
        "tog-forceeditsummary": "Notifye m lè m ap antre yon somè modifikasyon vid",
@@ -67,8 +69,8 @@
        "thursday": "jedi",
        "friday": "vandredi",
        "saturday": "samdi",
-       "sun": "dim",
-       "mon": "len",
+       "sun": "dimanch",
+       "mon": "lendi",
        "tue": "mad",
        "wed": "mèk",
        "thu": "jed",
        "searcharticle": "Ale",
        "history": "Istorik paj la",
        "history_short": "Istorik",
+       "history_small": "Istwa",
        "updatedmarker": "Aktyalize depi dènyè visit mwen",
        "printableversion": "Vèsyon ou kapab enprime",
        "permalink": "Lyen pou tout tan",
        "nstab-template": "Modèl",
        "nstab-help": "Paj èd",
        "nstab-category": "Kategori",
+       "mainpage-nstab": "paj prensipal",
        "nosuchaction": "Pa gen bagay konsa",
        "nosuchactiontext": "Wiki a pa rekonèt aksyon ki espesifye pa URL la.\nOu gendwa mal ekri URL la oubyen ou te swiv yon movè lyen.\nSa kapab di tou gen yon erè nan lojisyèl ki itilize nan sit {{SITENAME}}.",
        "nosuchspecialpage": "Pa gen paj especial konsa",
        "yourname": "Non itilizatè ou an :",
        "userlogin-yourname": "Non itilizatè",
        "userlogin-yourname-ph": "Rantre non itilizatè w",
+       "createacct-another-username-ph": "Antre non itilizatè a",
        "yourpassword": "Mopas ou an :",
        "userlogin-yourpassword": "Modpas",
        "userlogin-yourpassword-ph": "Rantre modpas ou",
        "createacct-yourpasswordagain-ph": "Rantre modpas la ankò",
        "userlogin-remembermypassword": "Pa dekonekte m",
        "userlogin-signwithsecure": "Sèvi ak yon koneksyon sekirize",
+       "cannotloginnow-title": "Ou pa ka siyen nan kounye a",
        "yourdomainname": "Domèn ou an",
        "password-change-forbidden": "Ou pa ka chanje modpas sou wiki sa a.",
        "externaldberror": "Li sanble ke yon erè pwodui ak bazdone a pou idantifikasyon ki pa nan sistèm an, oubyen ou pa otorize pou mete a jou kont ou genyen nan lòt sistèm yo.",
        "login": "Konekte ou",
        "nav-login-createaccount": "Kreye yon kont oubyen konekte ou",
-       "userlogin": "Kreye yon kont oubyen konekte ou",
-       "userloginnocreate": "Konekte ou",
        "logout": "Dekonekte ou",
        "userlogout": "Dekoneksyon",
        "notloggedin": "Ou pa konekte",
        "userlogin-noaccount": "Ou pa gen yon kont?",
        "userlogin-joinproject": "Enskri nan {{SITENAME}}",
-       "nologin": "Ou pa genyen yon kont ? '''$1'''.",
-       "nologinlink": "Kreye yon kont",
        "createaccount": "Kreye yon kont",
-       "gotaccount": "Ou deja genyen yon kont ? '''$1'''.",
-       "gotaccountlink": "Idantifye ou",
        "userlogin-resetpassword-link": "Ou bliye modpas ou?",
        "userlogin-helplink2": "Èd pou konekte",
+       "createacct-emailrequired": "adrès imel ou",
        "createacct-emailoptional": "Adrès imèl (fakiltatif)",
        "createacct-email-ph": "Rantre adrès imèl ou",
-       "createaccountmail": "pa imèl",
-       "createaccountreason": "Rezon:",
+       "createacct-another-email-ph": "Antre nan adrès imel ou",
+       "createaccountmail": "Sèvi ak yon modpas pou yon ti tan ak o aza lè sa a, voye li nan adrès imel la espesifye",
        "createacct-reason": "Rezon",
        "createacct-reason-ph": "Poukisa w ap ouvri yon lòt kont?",
        "createacct-submit": "Ouvri kont ou",
        "rcshowhidemine": "$1 kontribisyon mwen yo",
        "rcshowhidemine-show": "Montre",
        "rcshowhidemine-hide": "Kache",
-       "rclinks": "Afiche dènye $1 modifikasyon ki fèt nan $2 dènye jou sa yo<br />$3.",
+       "rclinks": "Afiche dènye $1 modifikasyon ki fèt nan $2 dènye jou sa yo",
        "diff": "diferans",
        "hist": "istorik",
        "hide": "Kache",
        "htmlform-reset": "Revoke chanjman yo",
        "revdelete-restricted": "aplike restriksyon sa yo pou administratè yo",
        "logentry-newusers-create": "Kont itilizatè $1 a kreye",
-       "revdelete-summary": "somè pou modifikasyon",
        "searchsuggest-search": "Chèche"
 }
index 78d16e3..e5d6ba2 100644 (file)
        "botpasswords-insert-failed": "A(z) „$1” botnév hozzáadása sikertelen. Nem lehet, hogy már hozzá lett adva?",
        "botpasswords-update-failed": "A(z) „$1” nevű botfiók frissítése sikertelen. Lehet, hogy törölted?",
        "botpasswords-created-title": "Botjelszó létrehozva",
-       "botpasswords-created-body": "\"$2\" felhasználó \"$1\" bot jelszava létrehozva.",
+       "botpasswords-created-body": "„$2” felhasználó „$1” botjának jelszava létrehozva.",
        "botpasswords-updated-title": "Botjelszó frissítve",
-       "botpasswords-updated-body": "\"$2\" felhasználó \"$1\" bot jelszava módosítva.",
+       "botpasswords-updated-body": "„$2” felhasználó „$1” botjának jelszava módosítva.",
        "botpasswords-deleted-title": "Botjelszó törölve",
-       "botpasswords-deleted-body": "\"$2\" felhasználó \"$1\" bot jelszava törölve.",
+       "botpasswords-deleted-body": "„$2” felhasználó „$1” botjának jelszava törölve.",
        "botpasswords-newpassword": "A bejelentkezéshez használható új felhasználóneved <strong>$1</strong>, jelszavad <strong>$2</strong>. <em>Ezeket jegyezd fel a későbbiekre.</em> <br> (Régebbi botoknál, amik megkövetelhetik, hogy a bejelentkezési név megegyezzen magával a felhasználónévvel, használhatod a(z) <strong>$3</strong> felhasználónevet is <strong>$4</strong> jelszóval.)",
        "botpasswords-no-provider": "A BotPasswordsSessionProvider nem áll rendelkezésre.",
        "botpasswords-restriction-failed": "A botjelszó-korlátozások megakadályozzák ezt a bejelentkezést.",
        "readonlywarning": "<strong>FIGYELMEZTETÉS: A wiki adatbázisát karbantartás miatt zárolták, ezért most nem fogod tudni elmenteni a szerkesztéseidet!</strong>\nA lap szövegét másold egy szövegfájlba, amit később felhasználhatsz!\n\nAz adatbázist lezáró rendszeradminisztrátor az alábbi magyarázatot adta: $1",
        "protectedpagewarning": "<strong>Figyelem: Ez a lap védett, így csak adminisztrátori jogosultságokkal rendelkező szerkesztők módosíthatják.</strong>\nA legutolsó ide vonatkozó naplóbejegyzés alább látható:",
        "semiprotectedpagewarning": "'''Megjegyzés:''' ez a lap védett, így regisztrálatlan vagy újonnan regisztrált szerkesztők nem módosíthatják.",
-       "cascadeprotectedwarning": "<strong>Figyelem:</strong> ez a lap le van zárva, csak adminisztrátorok szerkeszthetik, mert a következő kaszkádvédelemmel ellátott {{PLURAL:$1|lapon|lapokon}} be van illesztve:",
+       "cascadeprotectedwarning": "<strong>Figyelem:</strong> ez a lap le van zárva, csak [[Special:ListGroupRights|megfelelő jogosultságú]] felhasználók szerkeszthetik, mert a következő kaszkádvédelemmel ellátott {{PLURAL:$1|lapon|lapokon}} be van illesztve:",
        "titleprotectedwarning": "'''Figyelem: Ez a lap le van védve, így csak a [[Special:ListGroupRights|megfelelő jogosultságokkal]] rendelkező szerkesztők hozhatják létre.'''\nA legutolsó ide vonatkozó naplóbejegyzés alább látható:",
        "templatesused": "A lapon használt {{PLURAL:$1|sablon|sablonok}}:",
        "templatesusedpreview": "Az előnézet megjelenítésekor használt {{PLURAL:$1|sablon|sablonok}}:",
        "saveusergroups": "{{GENDER:$1|Szerkesztőcsoportok}} mentése",
        "userrights-groupsmember": "Csoporttag:",
        "userrights-groupsmember-auto": "Alapértelmezetten tagja:",
-       "userrights-groups-help": "Beállíthatod, hogy a szerkesztő mely csoportokba tartozik.\n* A bepipált doboz azt jelenti, hogy a szerkesztő benne van a csoportban\n* Az üres azt, hogy nincs.\n* A * az olyan csoportokat jelöli, amelyeket ha egyszer hozzáadtál, nem távolíthatod el, vagy nem adhatod hozzá.\n* A # azt jelöli, hogy a csoport lejárati idejét csak csökkenteni tudod, növelni nem.",
+       "userrights-groups-help": "Beállíthatod, hogy a szerkesztő mely csoportokba tartozik.\n* A bepipált doboz azt jelenti, hogy a szerkesztő benne van a csoportban\n* Az üres azt, hogy nincs.\n* A * az olyan csoportokat jelöli, amelyeket ha egyszer hozzáadtál, nem távolíthatod el, vagy nem adhatod hozzá.\n* A # azt jelöli, hogy a csoporttagság lejárati idejét csak csökkenteni tudod, növelni nem.",
        "userrights-reason": "Ok:",
        "userrights-no-interwiki": "Nincs jogod a szerkesztők jogainak módosításához más wikiken.",
        "userrights-nodatabase": "$1 adatbázis nem létezik vagy nem helyi.",
        "right-editsemiprotected": "„{{int:protect-level-autoconfirmed}}” védelmi szintű lapok szerkesztése",
        "right-editcontentmodel": "A lap tartalom modelljének szerkesztése",
        "right-editinterface": "felhasználói felület szerkesztése",
-       "right-editusercssjs": "más felhasználók CSS és JS fájljainak szerkesztése",
        "right-editusercss": "más felhasználók CSS fájljainak szerkesztése",
        "right-edituserjs": "más felhasználók JS fájljainak szerkesztése",
        "right-editmyusercss": "Saját szerkesztői CSS-fájlok szerkesztése",
        "rcshowhidecategorization": "lapok kategorizálásának $1",
        "rcshowhidecategorization-show": "megjelenítése",
        "rcshowhidecategorization-hide": "elrejtése",
-       "rclinks": "Az elmúlt $2 nap utolsó $1 változtatása legyen látható<br />$3",
+       "rclinks": "Az elmúlt $2 nap utolsó $1 változtatása legyen látható",
        "diff": "eltér",
        "hist": "történet",
        "hide": "elrejtése",
        "undeleteviewlink": "megtekintés",
        "undeleteinvert": "Kijelölés megfordítása",
        "undeletecomment": "Ok:",
-       "undeletedrevisions": "$1 változat helyreállítva",
-       "undeletedrevisions-files": "{{PLURAL:$1|egy|$1}} változat és {{PLURAL:$2|egy|$2}} fájl visszaállítva",
-       "undeletedfiles": "{{PLURAL:$1|egy|$1}} fájl visszaállítva",
        "cannotundelete": "Egy vagy több visszaállítás sikertelen:\n$1",
        "undeletedpage": "'''$1 helyreállítva'''\n\nLásd a [[Special:Log/delete|törlési naplót]] a legutóbbi törlések és helyreállítások listájához.",
        "undelete-header": "A legutoljára törölt lapokat lásd a [[Special:Log/delete|törlési naplóban]].",
index 1bceb36..0942f76 100644 (file)
@@ -73,7 +73,7 @@
        "tog-showhiddencats": "Ցուցադրել թաքնված կատեգորիաները",
        "tog-norollbackdiff": "Չցուցադրել տարբերությունները հետ գլորելուց հետո",
        "tog-useeditwarning": "Զգուշացնել ինձ, երբ ես լքում եմ խմբագրման էջը առանց կատարած փոփոխությունները հիշելու։",
-       "tog-prefershttps": "Õ\84Õ«Õ·Õ¿ Ö\85Õ£Õ¿Õ¡Õ£Õ¸Ö\80Õ®Õ¥Ö\84 Õ¡Õ¶Õ¾Õ¿Õ¡Õ¶Õ£ Õ´Õ«Õ¡Ö\81Õ¸Ö\82Õ´ Õ°Õ¡Õ´Õ¡Õ¯Õ¡Ö\80Õ£Õ¸Ö\82Õ´ Õ¶Õ¥Ö\80Õ¯Õ¡ÕµÕ¡Ö\81Õ¶Õ¥Õ¬Õ¸Ö\82Ö\81 Õ°Õ¥Õ¿Õ¸",
+       "tog-prefershttps": "Õ\84Õ¸Ö\82Õ¿Ö\84 Õ£Õ¸Ö\80Õ®Õ¥Õ¬Õ¸Ö\82Ö\81 Õ°Õ¥Õ¿Õ¸, Õ´Õ«Õ·Õ¿ Õ£Õ¸Ö\80Õ®Õ¡Õ®Õ¥Õ¬ Õ¡Õ¶Õ¾Õ¶Õ¿Õ¡Õ¶Õ£ Õ´Õ«Õ¡Ö\81Õ¸Ö\82Õ´Õ«Ö\81 (HTTPS)",
        "underline-always": "Միշտ",
        "underline-never": "Երբեք",
        "underline-default": "Դիտարկչի կամ թեմայի լռելյայն ոճով",
        "newwindow": "(բացվում է նոր պատուհանում)",
        "cancel": "Չեղարկել",
        "moredotdotdot": "Ավելին...",
-       "morenotlisted": "Ô±ÕµÕ½ Ö\81Õ¸Ö\82Ö\81Õ¡Õ¯Õ¨ Õ¯Õ¡Ö\80Õ¸Õ² Õ§ Õ¬Õ«Õ¶Õ¥Õ¬ Õ©Õ¥Ö\80Õ«",
+       "morenotlisted": "Ô±ÕµÕ½ Ö\81Õ¡Õ¶Õ¯Õ¨ Õ¯Õ¡Ö\80Õ¸Õ² Õ§ Õ¸Õ¹ Õ¡Õ´Õ¢Õ¸Õ²Õ»Õ¡Õ¯Õ¡Õ¶ Õ¬Õ«Õ¶Õ¥Õ¬Ö\89",
        "mypage": "Էջ",
        "mytalk": "Քննարկում",
        "anontalk": "Քննարկում",
        "badarticleerror": "Տվյալ գործողությունը չի կարող կատարվել այս էջում։",
        "cannotdelete": "Չհաջողվեց ջնջել «$1» էջը կամ ֆայլը։\nՀավանաբար այն արդեն ջնջվել է մեկ այլ մասնակցի կողմից։",
        "cannotdelete-title": "Հնարավոր չէ ջնջել $1 էջը",
-       "delete-hook-aborted": "Ô½Õ´Õ¢Õ¡Õ£Ö\80Õ¥Õ¬ Õ¹Õ¥Õ²ÕµÕ¡Õ¬ Õ§.\nÔ¼Ö\80Õ¡Ö\81Õ¸Ö\82Ö\81Õ«Õ¹ ÕºÕ¡Ö\80Õ¦Õ¡Õ¢Õ¡Õ¶Õ¸Ö\82Õ´Õ¶Õ¥Ö\80 Õ¹Õ« Õ¤Ö\80Õ¾Õ¥Õ¬.",
-       "no-null-revision": "Õ\89Õ« Õ°Õ¡Õ»Õ¸Õ²Õ¾Õ¥Õ¬ Õ½Õ¿Õ¥Õ²Õ®Õ¥Õ¬ Õ¶Õ¸Ö\80 Õ¦Ö\80Õ¸ÕµÕ¡Õ¯Õ¡Õ¶ Õ­Õ´Õ¢Õ¡Õ£Ö\80Õ¸Ö\82Õ´ Õ§Õ»Õ« Õ°Õ¡Õ´Õ¡Ö\80 \"$1\"",
+       "delete-hook-aborted": "Ô¸Õ¶Õ¤Õ¬Õ¡ÕµÕ¶Õ¸Ö\82Õ´Õ¨ (hookâ\80\93Õ« Õ´Õ«Õ»Õ¸Ö\81Õ¸Õ¾) Õ­Õ¸Õ¹Õ¨Õ¶Õ¤Õ¸Õ¿Õ¥Õ¬ Õ§ Õ»Õ¶Õ»Õ´Õ¡Õ¶Õ¨Ö\89\nÔ¼Ö\80Õ¡Ö\81Õ¸Ö\82Ö\81Õ«Õ¹ ÕºÕ¡Õ¿Õ³Õ¡Õ¼Õ¶Õ¥Ö\80 Õ¹Õ¥Õ¶ Õ¶Õ·Õ¾Õ¥Õ¬Ö\89",
+       "no-null-revision": "Õ\80Õ¶Õ¡Ö\80Õ¡Õ¾Õ¸Ö\80 Õ¹Õ§Ö\80 Õ½Õ¿Õ¥Õ²Õ®Õ¥Õ¬ Â«$1» Õ§Õ»Õ« Õ¶Õ¸Ö\80 Õ¦Ö\80Õ¸ÕµÕ¡Õ¯Õ¡Õ¶ Õ­Õ´Õ¢Õ¡Õ£Ö\80Õ¸Ö\82Õ´",
        "badtitle": "Անընդունելի անվանում",
        "badtitletext": "Հարցված էջի անվանումը անընդունելի է, դատարկ է կամ սխալ միջ-լեզվական կամ ինտերվիքի անվանում է։ Հնարավոր է, որ այն պարունակում է անթույլատրելի սիմվոլներ։",
        "title-invalid-empty": "Էջի հայցվող վերնագիրը դատարկ է կամ պարունակում է միայն անվանատարածքի անունը։",
-       "title-invalid-utf8": "Õ\80Õ¡Ö\80Ö\81Õ¸Ö\82Õ´Õ¶ Õ½Õ¿Õ¡Ö\81Õ¡Õ® Õ¡Õ¶Õ¸Ö\82Õ¶Õ¨ Õ§Õ»Õ¨ ÕºÕ¡Ö\80Õ¸Ö\82Õ¶Õ¡Õ¯Õ¸Ö\82Õ´ Õ§ Õ¯Ö\80Õ¸Ö\82Õ´ Õ½Õ­Õ¡Õ¬ Õ°Õ¡Õ»Õ¸Ö\80Õ¤Õ¡Õ¯Õ¡Õ¶Õ¸Ö\82Õ©ÕµÕ¸Ö\82Õ¶Õ¨ Õ¶Õ«Õ· UTF-8.",
+       "title-invalid-utf8": "Õ\80Õ¡Ö\80Ö\81Õ¾Õ¸Õ² Õ§Õ»Õ« Õ¾Õ¥Ö\80Õ¶Õ¡Õ£Õ«Ö\80Õ¨ ÕºÕ¡Ö\80Õ¸Ö\82Õ¶Õ¡Õ¯Õ¸Ö\82Õ´ Õ§ Õ¡Õ¶Õ¾Õ¡Õ¾Õ¥Ö\80 UTF-8 Õ¶Õ·Õ¡Õ¶Õ¶Õ¥Ö\80Õ« Õ·Õ¡Ö\80Ö\84Ö\89",
        "perfcached": "Ստորև տվյալները պահուստավորված են և հնարավոր է չարտացոլեն վերջին փոփոխությունները։ Առավելագույն {{PLURAL:$1|արդյունք|$1 արդյունք}} է հասանելի քեշում։",
        "perfcachedts": "Հետևյալ տվյալները վերցված են քեշից և վերջին անգամ թարմացվել են $1։ A maximum of {{PLURAL:$4|one result is|$4 results are}} available in the cache.",
        "querypage-no-updates": "Այս էջի փոփոխությունները ներկայումս արգելված են։ Այստեղի տվյալները այժմ չեն թարմացվի։",
        "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-submit": "Ստեղծել ձեր հաշիվը",
        "newarticle": "(Նոր)",
        "newarticletext": "Դուք հղվել եք դեռևս գոյություն չունեցող էջի։ \nՆոր էջ ստեղծելու համար ստորև գտնվող խմբագրման դաշտում ավելացրեք տեքստ, այնուհետև սեղմեք '''Հիշել էջը''' (այցելեք [$1 օգնության էջը]՝ մանրամասն տեղեկությունների համար)։ \n\nԵթե դուք սխալմամբ եք այստեղ հայտնվել, ապա սեղմեք ձեր դիտարկչի '''հետ''' (back) կոճակը։",
        "anontalkpagetext": "----\n''Այս քննարկման էջը պատկանում է անանուն մասնակցին, որը դեռ չի ստեղծել մասնակցային հաշիվ կամ չի մտել համակարգ մասնակցի անունով։''\nԱյդ իսկ պատճառով օգտագործվում է թվային IP-հասցեն։\nՆման IP-հասցեից կարող են օգտվել մի քանի մասնակիցներ։\nԵթե դուք անանուն մասնակից եք, բայց կարծում եք, որ ուրիշներին վերաբերող դիտողությունները արվում են ձեր հասցեով, ապա խնդրում ենք պարզապես [[Special:CreateAccount|գրանցվել]] կամ [[Special:UserLogin|մտնել համակարգ]], որպեսզի հետագայում ձեզ չշփոթեն այլ անանուն մասնակիցների հետ։",
-       "noarticletext": "Այս պահին տեքստը: այս էջում բացակայում է:\nԴուք կարող եք [[Special:Search/{{PAGENAME}}|գտնել հիշատակում այս անվանումը]] այլ էջերում,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} գտնել համապատասխան գրառումներ տեղեկամատյանները]\nկամ'[{{fullurl:{{FULLPAGENAME}}|action=edit}} ստեղծել էջ այս անվանմամբ]\"'</span>.",
+       "noarticletext": "Ներկայումս այս էջում որևէ տեքստ չկա։\nԴուք կարող եք [[Special:Search/{{PAGENAME}}|որոնել այս անվանումը]] այլ էջերում, <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} որոնել համապատասխան տեղեկամատյանները] կամ [{{fullurl:{{FULLPAGENAME}}|action=edit}} ստեղծել նոր էջ այս անվանմամբ]</span>։",
        "noarticletext-nopermission": "Ներկայումս այս էջում որևէ տեքստ չկա։\nԴուք կարող եք [[Special:Search/{{PAGENAME}}|որոնել այս անվանունը]] այլ էջերում կամ <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} որոնել այն տեղեկամատյաններում]</span>։ Դուք չունեք թույլտվություն ստեղծել այս էջը։",
        "userpage-userdoesnotexist": "«<nowiki>$1</nowiki>» անվանմամբ մասնակից գոյություն չունի։\nԽնդրում ենք հավաստիանալ նրանում, թե արդյոք ուզում եք ստեղծել/խմբագրել այս էջը։",
        "userpage-userdoesnotexist-view": "«$1» անվանմամբ գրանցված մասնակից չկա։",
        "searchprofile-advanced-tooltip": "Որոնել նշված անվանատարածքներում",
        "search-result-size": "$1 ({{PLURAL:$2|1 բառ|$2 բառ}})",
        "search-result-category-size": "{{PLURAL:$1|անդամ}} ({{PLURAL:$2|ենթակատեգորիա}}, {{PLURAL:$3|նիշք}})",
-       "search-redirect": "(վերահղում $1-ից)",
+       "search-redirect": "(վերահղում $1 էջից)",
        "search-section": "(բաժին $1)",
        "search-suggest": "Գուցե նկատի ունե՞ք՝ $1",
        "search-interwiki-caption": "Կից նախագծեր",
        "rcshowhidecategorization": "$1 էջերի կատեգորիզացիա",
        "rcshowhidecategorization-show": "Ցուցադրել",
        "rcshowhidecategorization-hide": "Թաքցնել",
-       "rclinks": "Ցույց տալ վերջին $1 փոփոխությունները վերջին $2 օրվա ընթացքում<br />$3",
+       "rclinks": "Ցույց տալ վերջին $1 փոփոխությունները վերջին $2 օրվա ընթացքում",
        "diff": "տարբ",
        "hist": "պատմ",
        "hide": "Թաքցնել",
        "undeleteviewlink": "դիտել",
        "undeleteinvert": "Շրջել ընտրությունը",
        "undeletecomment": "Մեկնաբանություն.",
-       "undeletedrevisions": "վերականգնվեց $1 տարբերակ",
-       "undeletedrevisions-files": "վերականգնվեց $1 {{PLURAL:$1|տարբերակ}} և  $2 {{PLURAL:$2|նիշք}}",
-       "undeletedfiles": "վերականգնվեց $1 {{PLURAL:$1|նիշք}}",
        "cannotundelete": "Վերականգնումը ձախողվեց։ Հնարավոր է մեկ ուրիշն արդեն վերականգնել է այս էջը։",
        "undeletedpage": "'''«$1» էջը վերականգնված է։'''\n\nՏես [[Special:Log/delete|ջնջման տեղեկամատյանը]]` վերջին ջնջումների և վերականգնումների համար։",
        "undelete-header": "Տես [[Special:Log/delete|ջնջման տեղեկամատյանը]]՝ վերջին ջնջումների և վերականգնումների համար։",
        "whatlinkshere-prev": "{{PLURAL:$1|նախորդ|նախորդ $1}}",
        "whatlinkshere-next": "{{PLURAL:$1|հաջորդ|հաջորդ $1}}",
        "whatlinkshere-links": "← հղումներ",
-       "whatlinkshere-hideredirs": "$1 վերահղումներ",
-       "whatlinkshere-hidetrans": "$1 Õ¶Õ¥Ö\80Õ¡Õ¼Õ¥Õ¬Õ¸Ö\82",
-       "whatlinkshere-hidelinks": "$1 հղումներ",
+       "whatlinkshere-hideredirs": "$1 վերահղումները",
+       "whatlinkshere-hidetrans": "$1 Õ¶Õ¥Ö\80Õ¡Õ¼Õ¸Ö\82Õ´Õ¶Õ¥Ö\80Õ¨",
+       "whatlinkshere-hidelinks": "$1 հղումները",
        "whatlinkshere-hideimages": "$1 նիշքային հղումներ",
        "whatlinkshere-filters": "Զտիչներ",
        "whatlinkshere-submit": "Գնալ առաջ",
index 28f44ed..4632e13 100644 (file)
        "saveusergroups": "Salveguardar gruppos de {{GENDER:$1|usator}}",
        "userrights-groupsmember": "Membro de:",
        "userrights-groupsmember-auto": "Membro implicite de:",
-       "userrights-groups-help": "Tu pote alterar le gruppos al quales iste usator pertine:\n* Un quadrato marcate significa que le usator es in le gruppo.\n* Un non marcate significa que ille non lo es.\n* Un * indica que tu non pote remover le gruppo post adder lo, o vice versa.\n* Un # indica que tu pote solmente reducer le tempore de expiration del gruppo e non extender lo.",
+       "userrights-groups-help": "Tu pote alterar le gruppos al quales iste usator pertine:\n* Un quadrato marcate significa que le usator es in le gruppo.\n* Un non marcate significa que ille non lo es.\n* Un * indica que tu non pote remover le gruppo post adder lo, o vice versa.\n* Un # indica que tu pote solmente prolongar le pertinentia a iste gruppo e non accurtar lo.",
        "userrights-reason": "Motivo:",
        "userrights-no-interwiki": "Tu non ha le permission de modificar le derectos de usatores in altere wikis.",
        "userrights-nodatabase": "Le base de datos $1 non existe o non es local.",
        "right-editsemiprotected": "Modificar paginas protegite como \"{{int:protect-level-autoconfirmed}}\"",
        "right-editcontentmodel": "Modificar le modello de contento de un pagina",
        "right-editinterface": "Modificar le interfacie de usator",
-       "right-editusercssjs": "Modificar le files CSS e JS de altere usatores",
        "right-editusercss": "Modificar le files CSS de altere usatores",
        "right-edituserjs": "Modificar le files JS de altere usatores",
        "right-editmyusercss": "Modificar le proprie files CSS de usator",
        "rcshowhidecategorization": "$1 le categorisation de paginas",
        "rcshowhidecategorization-show": "Monstrar",
        "rcshowhidecategorization-hide": "Celar",
-       "rclinks": "Monstrar le $1 ultime modificationes in le $2 ultime dies<br />$3",
+       "rclinks": "Monstrar le $1 ultime modificationes in le $2 ultime dies",
        "diff": "diff",
        "hist": "hist",
        "hide": "Celar",
        "undeleteviewlink": "vider",
        "undeleteinvert": "Inverter selection",
        "undeletecomment": "Motivo:",
-       "undeletedrevisions": "{{PLURAL:$1|1 version|$1 versiones}} restaurate",
-       "undeletedrevisions-files": "{{PLURAL:$1|1 version|$1 versiones}} e {{PLURAL:$2|1 file|$2 files}} restaurate",
-       "undeletedfiles": "$1 {{PLURAL:$1|file|files}} restaurate",
        "cannotundelete": "Le restauration ha partial- o totalmente fallite:\n$1",
        "undeletedpage": "'''$1 ha essite restaurate'''\n\nConsulta le [[Special:Log/delete|registro de deletiones]] pro un lista de deletiones e restaurationes recente.",
        "undelete-header": "Vide [[Special:Log/delete|le registro de deletiones]] pro un lista de paginas recentemente delite.",
        "ipbexpiry": "Expiration:",
        "ipbreason": "Motivo:",
        "ipbreason-dropdown": "*Motivos frequente pro blocar\n** Insertion de informationes false\n** Elimination de contento de paginas\n** Ligamines ''spam'' verso sitos externe\n** Insertion de nonsenso/absurditates in paginas\n** Comportamento intimidatori/molestation\n** Abuso de contos multiple\n** Nomine de usator inacceptabile",
-       "ipb-hardblock": "Impedir le usatores authenticate de facer modificationes ab iste adresse IP",
+       "ipb-hardblock": "Impedir que usatores authenticate face modificationes ab iste adresse IP",
        "ipbcreateaccount": "Impedir creation de contos",
        "ipbemailban": "Impedir que le usator invia e-mail",
        "ipbenableautoblock": "Blocar automaticamente le adresse IP usate le plus recentemente per iste usator, e omne IPs successive desde le quales ille/-a tenta facer modificationes",
        "ipboptions": "2 horas:2 hours,1 die:1 day,3 dies:3 days,1 septimana:1 week,2 septimanas:2 weeks,1 mense:1 month,3 menses:3 months,6 menses:6 months,1 anno:1 year,infinite:infinite",
        "ipbhidename": "Celar le nomine del usator del modificationes e del listas",
        "ipbwatchuser": "Observar le paginas de usator e de discussion de iste usator",
-       "ipb-disableusertalk": "Impedir iste usator de modificar su proprie pagina de discussion durante que ille es blocate",
+       "ipb-disableusertalk": "Impedir que iste usator modifica su proprie pagina de discussion durante que ille es blocate",
        "ipb-change-block": "Reblocar le usator con iste configurationes",
        "ipb-confirm": "Confirmar blocada",
        "badipaddress": "Adresse IP mal formate.",
index 2395d94..b171192 100644 (file)
        "right-editsemiprotected": "Sunting halaman yang dilindungi sebagai \"{{int:protect-level-autoconfirmed}}\"",
        "right-editcontentmodel": "Edit model konten halaman",
        "right-editinterface": "Menyunting antarmuka pengguna",
-       "right-editusercssjs": "Menyunting arsip CSS dan JS pengguna lain",
        "right-editusercss": "Menyunting berkas CSS pengguna lain",
        "right-edituserjs": "Menyunting berkas JS pengguna lain",
        "right-editmyusercss": "Sunting berkas CSS pengguna Anda",
        "rcshowhidecategorization": "$1 kategorisasi halaman",
        "rcshowhidecategorization-show": "Tampilkan",
        "rcshowhidecategorization-hide": "Sembunyikan",
-       "rclinks": "Perlihatkan $1 perubahan terbaru dalam $2 hari terakhir<br />$3",
+       "rclinks": "Perlihatkan $1 perubahan terbaru dalam $2 hari terakhir",
        "diff": "beda",
        "hist": "versi",
        "hide": "Sembunyikan",
        "undeleteviewlink": "lihat",
        "undeleteinvert": "Balikkan pilihan",
        "undeletecomment": "Alasan:",
-       "undeletedrevisions": "$1 {{PLURAL:$1|revisi|revisi}} telah dikembalikan",
-       "undeletedrevisions-files": "$1 {{PLURAL:$1|revisi|revisi}} and $2 berkas dikembalikan",
-       "undeletedfiles": "$1 {{PLURAL:$1|berkas|berkas}} dikembalikan",
        "cannotundelete": "Beberapa pembatalan penghapusan gagal:\n$1",
        "undeletedpage": "'''$1 berhasil dikembalikan'''\n\nLihat [[Special:Log/delete|log penghapusan]] untuk data penghapusan dan pengembalian.",
        "undelete-header": "Lihat [[Special:Log/delete|log penghapusan]] untuk daftar halaman yang baru dihapus.",
index 476af2b..832a5a7 100644 (file)
        "login": "Aperter session",
        "login-security": "Verifica vor identitá",
        "nav-login-createaccount": "Crear un conto o intrar",
-       "userlogin": "Crear un conto o intrar",
-       "userloginnocreate": "Intrar",
        "logout": "Surtida",
        "userlogout": "Surtir",
        "notloggedin": "Vu ne ha intrat",
        "userlogin-noaccount": "Ne have un conto?",
        "userlogin-joinproject": "Adherer a {{SITENAME}}",
-       "nologin": "Ne have un conto? $1.",
-       "nologinlink": "Crear un conto",
        "createaccount": "Crear un conto",
-       "gotaccount": "Ja have un conto? $1.",
-       "gotaccountlink": "Intrar",
-       "userlogin-resetlink": "Obliviat tui detallies de registre?",
        "createacct-reason": "Motive",
        "createacct-benefit-body1": "{{PLURAL:$1|redaction|redactiones}}",
        "createacct-benefit-body2": "{{PLURAL:$1|págine|págines}}",
        "rcshowhidepatr-hide": "Ocultar",
        "rcshowhidemine": "$1 mi redactiones",
        "rcshowhidemine-show": "Monstrar",
-       "rclinks": "Monstrar li $1 ultim modificationes fat durante li $2 ultim dies<br />$3.",
+       "rclinks": "Monstrar li $1 ultim modificationes fat durante li $2 ultim dies",
        "diff": "dif",
        "hist": "hist",
        "hide": "Celar",
        "undeleteviewlink": "vider",
        "undeleteinvert": "Inverter selection",
        "undeletecomment": "Motive:",
-       "undeletedrevisions": "{{PLURAL:$1|1 revision|$1 revisiones}} restaurat",
-       "undeletedrevisions-files": "{{PLURAL:$1|1 revision|$1 revisiones}} e {{PLURAL:$2|1 file|$2 files}} restaurat",
-       "undeletedfiles": "{{PLURAL:$1|1 file|$1 files}} restaurat",
        "undeletedpage": "'''$1 ha esset restaurat'''\n\nConsulta li [[Special:Log/delete|diarium de deletion]] por un registre de deletiones nov e restaurationes.",
        "undelete-header": "Vider [[Special:Log/delete|li diarium de deletion]] por págines deletet currentmen.",
        "undelete-search-box": "Serchar págines deletet",
index 81b98c5..369a4f0 100644 (file)
        "yourdomainname": "Obí gi:",
        "login": "Banyé",
        "nav-login-createaccount": "Banyé / ké buwá",
-       "userlogin": "Banyé / ké buwá",
-       "userloginnocreate": "Banyé",
        "logout": "Fwuör",
        "userlogout": "Fwuör",
        "notloggedin": "I bátà bò",
-       "nologin": "I nwegị buwa? $1.",
-       "nologinlink": "ké otụ buwa",
        "createaccount": "Ké otụ buwa",
-       "gotaccount": "I nwerecha buwa? $1.",
-       "gotaccountlink": "Banyé",
        "createaccountmail": "na e-mail",
-       "createaccountreason": "Mgbaghaputa:",
        "badretype": "Mkpurụ okwu ejị a gafẹ é jëghị.",
        "userexists": "Áhè ọ'bànifé tírí di na áká onye ozor.\nBíkó nwèré áhà nke ozor.",
        "loginerror": "Nsogbu ngbe I choro I bata",
        "prefs-rendering": "Ọdịdị",
        "saveprefs": "Domá",
        "prefs-editing": "Írüwa",
-       "rows": "Ǹdịlị:",
-       "columns": "Ogìdì:",
        "searchresultshead": "Chọwa",
        "stub-threshold-disabled": "Ápụgị òkò",
        "timezonelegend": "Nkeji ogẹ:",
        "rcshowhideanons": "$1 ndi ọ'bànifé nke amághị",
        "rcshowhidepatr": "$1 orü hä lèrè",
        "rcshowhidemine": "$1 ihe m rürü",
-       "rclinks": "Zí nke mbu $1 gbawere na ubochi gárá nke $2<br />$3",
+       "rclinks": "Zí nke mbu $1 gbawere na ubochi gárá nke $2",
        "diff": "Íchè",
        "hist": "akíkómbu",
        "hide": "Zonari",
        "htmlform-selectorother-other": "Nke ozor",
        "revdelete-content-hid": "ihe zọ̀nàri",
        "rightsnone": "(efù)",
-       "revdelete-summary": "mmẹkotá orü",
        "feedback-close": "Ọméchá.",
        "feedback-message": "Ozi:",
        "searchsuggest-search": "Chọwa",
index fbadb16..5562b52 100644 (file)
@@ -35,7 +35,7 @@
        "tog-enotifwatchlistpages": "Esuratannak no mabaliwan ti panid wenno ti papeles iti listaan dagiti bambantayak",
        "tog-enotifusertalkpages": "Esuratannak no mabaliwan ti panid ti tungtungak",
        "tog-enotifminoredits": "Esuratannak pay para kadagiti bassit a panagurnos kadagiti panid ken papeles",
-       "tog-enotifrevealaddr": "Iparang ti pagtaengan ti esuratko iti panagipakaaammo kadagiti esurat",
+       "tog-enotifrevealaddr": "Iparang ti adres ti esuratko iti panagipakaaammo kadagiti esurat",
        "tog-shownumberswatching": "Ipakita ti bilang dagiti agbuybuya nga agar-aramat",
        "tog-oldsig": "Ti adda a pirmam:",
        "tog-fancysig": "Tratuen ti pirma a kas wikitext (awanan iti automatiko a silpo)",
        "returnto": "Agsubli iti $1.",
        "tagline": "Manipud iti {{SITENAME}}",
        "help": "Tulong",
-       "search": "Biruken",
+       "search": "Agbiruk",
        "search-ignored-headings": " #<!-- saan a kutkutien daytoy a linia --> <pre>\n# Dagiti paulo a saanto nga ikaskaso babaen ti panagbiruk.\n# Dagiti panagbalbaliw mabalinton intono ti panid nga addaan ti paulo ket maipasurotan.\n# Mabalinmo a piliten ti panangisurot manen iti panid babaen ti awan linaon a panagurnos.\n# Ti eskritu ket kasla dagiti sumaganad:\n#   * Amin manipud ti karater ti \"#\" aginggana ti gibus ti linia ket komentario.\n#   * Amin a saan a blanko a linia ket eksakto a titulo a saan nga maikaskaso, kadakkel ti letra ken amin.\nDagiti reperensia\nDagiti silpo ti ruar\nKitaen pay\n #</pre> <!-- saan a kutkutien daytoy a linia -->",
-       "searchbutton": "Biruken",
+       "searchbutton": "Agbiruk",
        "go": "Inkan",
        "searcharticle": "Inkan",
        "history": "Pakasaritaan ti panid",
        "redirectedfrom": "(Naibaw-ing manipud iti $1)",
        "redirectpagesub": "Baw-ing a panid",
        "redirectto": "Naibaw-ing iti:",
-       "lastmodifiedat": "Daytoy a panid ket naudi a nabaliwan idi $1, $2.",
+       "lastmodifiedat": "Daytoy a panid ket naudi a naurnos idi $1, $2.",
        "viewcount": "Naserrekanen daytoy a panid {{PLURAL:$1|iti naminsan|kadagiti $1 a beses}}.",
        "protectedpage": "Nasalakniban a panid",
        "jumpto": "Lumaktaw idiay:",
        "jumptonavigation": "pagdaliasatan",
-       "jumptosearch": "biruken",
+       "jumptosearch": "agbiruk",
        "view-pool-error": "Pasensian, dagiti server ket nadagsenan unay iti agdama.\nAdu unay dagiti agar-aramat nga agpadpadas nga agbuya iti daytoy a panid.\nPangngaasi nga agurayka bassit sakbay a padasem manen a serrekan daytoy a panid.\n\n$1",
        "generic-pool-error": "Pasensian, dagiti server ket agdama a nadagsenan iti agdama.\nAdu unay dagiti agar-aramat nga agpadpadas nga agbuya iti daytoy a rekurso.\nPangngaasi nga agurayka bassit sakbay a padasem manen a serrekan daytoy a rekurso.",
        "pool-timeout": "Madamdama agur-uray para iti kandado",
        "readonly": "Narikepan ti database",
        "enterlockreason": "Agikabil ti rason para iti pannakarikep, mangiraman ti maysa a karkulo no kaanonto a malukatan",
        "readonlytext": "Ti database ket agdama a narikpan kadagiti baro a panagikabil ken panagbaliw, mabalin a gapu dagiti kadawyan a pagsimpa, kalpasanna a normalto nga agsubli.\n\nTi administrador ti sistema a nangrikep ket nangited iti daytoy a palawag: $1",
-       "missing-article": "Ti database ket saan a nakabiruk ti testo ti panid a mabirukanna koma, a nanaganan ti \"$1\" $2.\n\nDaytoy ket kadawyan a gapuanan babaen ti sumaganad a baak a paggiddiatan wenno silpo ti pakasaritaan ti maysa panid a dati a naikkat.\n\nNo saan a kasta, mabalin a nakasarakka ti parikut ti sopwer.\n\nPangngaasi nga ipadamagmo kadagiti [[Special:ListUsers/sysop|administrador]], isuratmo ti pakaammo dayta nga URL.",
+       "missing-article": "Ti database ket saan a nakabiruk ti teksto ti panid a mabirukanna koma, a nanaganan ti \"$1\" $2.\n\nDaytoy ket kadawyan a gapuanan babaen ti sumaganad a baak a paggiddiatan wenno silpo ti pakasaritaan ti maysa panid a dati a naikkat.\n\nNo saan a kasta, mabalin a nakasarakka ti parikut ti sopwer.\n\nPangngaasi nga ipadamagmo kadagiti [[Special:ListUsers/sysop|administrador]], isuratmo ti pakaammo dayta nga URL.",
        "missingarticle-rev": "(rebision#: $1)",
        "missingarticle-diff": "(Dip: $1, $2)",
        "readonly_lag": "Automatiko a narikpan ti database kabayatan a dagiti tagabu a server ti database ket kumamakam iti agturay",
        "userlogin-loggedin": "Nakastrekkan a kas ni {{GENDER:$1|$1}}.\nUsaren ti porma dita baba tapno sumrek a kas sabali nga agar-aramat.",
        "userlogin-reauth": "Nasken a sumrekka manen tapno mapasingkedan a sika ni {{GENDER:$1|$1}}.",
        "userlogin-createanother": "Agpartuat iti sabali a pakabilangan",
-       "createacct-emailrequired": "Esurat a pagtaengan",
-       "createacct-emailoptional": "Esurat a pagtaengan (pagpilian)",
+       "createacct-emailrequired": "Adres ti esurat",
+       "createacct-emailoptional": "Adres ti esurat (pagpilian)",
        "createacct-email-ph": "Ikabil ti esurat a pagtaengam",
-       "createacct-another-email-ph": "Ikabil ti esurat a pagtaengan",
-       "createaccountmail": "Agusar iti pugto a temporario a kontrasenias ken ipatulod iti naisangayan nga esurat a pagtaengan",
+       "createacct-another-email-ph": "Ikabil ti adres ti esurat",
+       "createaccountmail": "Agusar iti pugto a temporario a kontrasenias ken ipatulod iti nainaganan nga adres ti esurat",
        "createaccountmail-help": "Mabalin a mausar a panagpartuat ti pakabilangan para iti sabali a tao a saan a makaammo iti kontrasenias.",
        "createacct-realname": "Pudno a nagan (pagpilian)",
        "createacct-reason": "Rason",
        "passwordtooshort": "Dagiti kontrasenias ket nasken a saan a basbasit ngem {{PLURAL:$1|1 a karakter|$1 a karkarakter}}.",
        "passwordtoolong": "Dagiti kontrasenias ket nasken a saan nga at-atiddog ngem {{PLURAL:$1|1 a karakter|$1 a karkarakter}}.",
        "passwordtoopopular": "Saan a mabalin a mausar dagiti kadawyan a mapilpili a kontrasenias. Pangngaasi nga agpili iti naisangsangayan a kontrasenias.",
-       "password-name-match": "Nasken a ti kontrasenias ket maigiddiat manipud ti naganmo.",
+       "password-name-match": "Nasken a ti kontrasenias ket maigiddiat manipud iti naganmo.",
        "password-login-forbidden": "Naipariten ti panagusar iti daytoy a nagan ti agar-aramat ken kontrasenias.",
        "mailmypassword": "Isaad manen ti kontrasenias",
        "passwordremindertitle": "Baro a temporario a kontrasenias para iti {{SITENAME}}",
-       "passwordremindertext": "Adda maysa a tao (mabalin a sika met laeng, manipud iti IP a pagtaengan a $1) ket nagkiddaw iti baro a kontrasenias para iti {{SITENAME}} ($4). Ti temporario a kontrasenias para kenni agar-aramat \"$2\" ket napartuaten ken naisaad iti \"$3\". No kastan ti kinayatmo, nasken itan a sumrekka ken agpili iti baro a kontrasenias.\nTi temporario a kontraseniasmo ket agpaso {{PLURAL:$5|iti maysa nga aldaw|kadagiti $5 nga aldaw}}.\n\nNo sabali ti nagkiddaw, wenno nalagipmon ti kontraseniasmo,\nken dimo kayaten a sukatan daytoy, mabalinmo a di ikaskaso daytoy a mensahe ken agtuloy nga usaren ti daan a kontraseniasmo.",
-       "noemail": "Awan ti esurat a pagtaengan a nairehistro para kenni agar-aramat \"$1\".",
-       "noemailcreate": "Nasken a mangitedka ti pudno nga esurat a pagtaengan.",
-       "passwordsent": "Naipatuloden ti baro a kontrasenias iti esurat a pagtaengan a nairehistro kenni \"$1\".\nPangngaasi a sumrekka manen kalpasan ti pannakaawatmo.",
+       "passwordremindertext": "Adda maysa a tao (mabalin a sika met laeng, manipud iti adres ti IP ti $1) ket nagkiddaw iti baro a kontrasenias para iti {{SITENAME}} ($4). Ti temporario a kontrasenias para kenni agar-aramat \"$2\" ket napartuaten ken naisaad iti \"$3\". No kastan ti kinayatmo, nasken itan a sumrekka ken agpili iti baro a kontrasenias.\nTi temporario a kontraseniasmo ket agpaso {{PLURAL:$5|iti maysa nga aldaw|kadagiti $5 nga aldaw}}.\n\nNo sabali ti nagkiddaw, wenno nalagipmon ti kontraseniasmo,\nken dimo kayaten a sukatan daytoy, mabalinmo a di ikaskaso daytoy a mensahe ken agtuloy nga usaren ti daan a kontraseniasmo.",
+       "noemail": "Awan ti adres ti esurat a nairehistro para kenni agar-aramat \"$1\".",
+       "noemailcreate": "Nasken a mangitedka iti umiso nga adres ti esurat.",
+       "passwordsent": "Naipatuloden ti baro a kontrasenias iti adres ti esurat a nairehistro kenni \"$1\".\nPangngaasi a sumrekka manen kalpasan iti pannakaawatmo.",
        "blocked-mailpassword": "Ti adresmo ti IP ket naserraan manipud iti panagurnos. Tapno mapawilan ti panagabuso, saan a maipalubos ti agusar ti panagipulang ti kontrasenias manipud iti daytoy nga adres ti IP.",
-       "eauthentsent": "Naipatuloden ti pammatalged nga esurat iti naikeddeng nga esurat a pagtaengan.\nSakbay a maipatulod ti ania man nga esurat iti pakabilangan, masapul a surotem dagiti maibagbaga iti esurat, tapno mapatalgedan ti pakabilangan ket agpayso a kukuam.",
+       "eauthentsent": "Naipatuloden ti pammatalged nga esurat iti naikeddeng nga adres ti esurat.\nSakbay a maipatulod ti ania man nga esurat iti pakabilangan, masapul a surotem dagiti maibagbaga iti esurat, tapno mapatalgedan ti pakabilangan ket agpayso a kukuam.",
        "throttled-mailpassword": "Ti panangisaad manen ti kontrasenias ket naipatuloden, iti kaunegan ti napalabas  {{PLURAL:$1|nga oras|a $1 nga or-oras}}.\nTapno maipawilan ti panagabuso, maysa laeng a panangisaad manen ti kontrasenias ti maipatulod iti tunggal {{PLURAL:$1|maysa nga oras|$1 nga or-oras}}.",
        "mailerror": "Biddut iti panangipatulod ti surat: $1",
-       "acct_creation_throttle_hit": "Dagiti sumarungkar iti daytoy a wiki nga agus-usar ti IP a pagtaengan ket nakapartuat {{PLURAL:$1|iti 1 a pakabilangan|kadagiti $1 a pakabilangan}} iti nasakbayan nga aldaw, nga isu laeng ti kaadu a maipalubos iti daytoy a paset ti panawen.\nA kas ti nagbanagan, dagiti agsarsarungkar nga agus-usar ti IP a pagtaengan ket agdama a saanda a mabalin a makapartuat kadagiti pakabilangan.",
+       "acct_creation_throttle_hit": "Dagiti sumarungkar iti daytoy a wiki nga agus-usar iti adres ti IP ket nakapartuat {{PLURAL:$1|iti 1 a pakabilangan|kadagiti $1 a pakabilangan}} iti nasakbayan nga $2 nga isu laeng ti kaadu a maipalubos iti daytoy a paset ti panawen.\nA kas ti nagbanagan, dagiti agsarsarungkar nga agus-usar iti adres ti IP ket agdama a saanda a mabalin a makapartuat kadagiti pakabilangan.",
        "emailauthenticated": "Ti esurat a pagtaengam ket napatalgedan idi $2, $3.",
-       "emailnotauthenticated": "Saan pay a napatalgedan ti esuratmo a pagtaengan.\nAwanto ti esurat a maipatulod para kadagiti sumaganad a langa.",
-       "noemailprefs": "Ipanaganan ti esurat a pagtaengan tapno agbalin dagitoy a langa.",
+       "emailnotauthenticated": "Saan pay a napatalgedan ti adres ti esuratmo.\nAwanto ti esurat a maipatulod para kadagiti sumaganad a langa.",
+       "noemailprefs": "Manginagan iti maysa nga adres ti esurat tapno agbalin dagitoy a langa.",
        "emailconfirmlink": "Pasingkedam ti esurat a pagtaengam",
-       "invalidemailaddress": "Ti esurat a pagtaengan ket saan a maawat ngamin ket kasla adda ti saan a napudno a porma.\nPangngaasi nga agikabil ti nasayaat a porma ti pagtaengan wenno ikkaten amin a naikabil.",
-       "cannotchangeemail": "Dagiti pakabilangan nga esurat a pagtaengan ket saan a mabaliwan iti daytoy a wiki.",
+       "invalidemailaddress": "Ti adres ti esurat ket saan a maawat ngamin ket kasla adda ti saan a napudno a pormat.\nPangngaasi nga agikabil ti nasayaat a pormat ti adres wenno ikkaten amin a naikabil.",
+       "cannotchangeemail": "Dagiti pakabilangan nga adres ti esurat ket saan a mabaliwan iti daytoy a wiki.",
        "emaildisabled": "Daytoy a sitio ket saan a makaipatulod kadagiti esurat.",
        "accountcreated": "Napartuaten ti pakabilangan",
        "accountcreatedtext": "Ti pakabilangan ti agar-aramat para kenni [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|tungtungan]]) ket napartuaten.",
        "pt-createaccount": "Agpartuat iti pakabilangan",
        "pt-userlogout": "Rummuar",
        "php-mail-error-unknown": "Di ammo a biddut iti surat ti annong ti PHP().",
-       "user-mail-no-addy": "Pinadas nga inpatulod ti esurat nga awan ti maysa nga esurat a pagtaengan.",
+       "user-mail-no-addy": "Pinadas nga inpatulod ti esurat nga awan ti maysa nga adres ti esurat.",
        "user-mail-no-body": "Pinadas nga inpatulod ti esurat nga awan ti maysa a linaonna wenno ababa unay a bagi.",
        "changepassword": "Baliwan ti kontrasenias",
        "resetpass_announce": "Tapno malpas ti panagserrek, nasken a mangisaadka iti baro a kontrasenias.",
        "changepassword-success": "Nasukatanen ti kontraseniasmo!",
        "changepassword-throttled": "Nakaaramidka kadagiti adu unay a nabiit a panangipadas ti panagserrek.\nPangngaasi nga aguray iti $1 sakbay a padasen manen.",
        "botpasswords": "Dagiti kontrasenias ti bot",
-       "botpasswords-summary": "<em>Dagiti kontrasenias ti bot</em> ket mangpalubos a maserrekan ti pakabilangan ti agar-aramat babaen ti API a saan nga agusar kadagiti nangruna a kredensial ti pakabilangan. Dagiti magun-od a karbengan ti agar-aramat no nakastrek iti kontrasenias ti bot ket mabalin a nagawidan.\n\nNo saanmo nga ammo no apay a kayatmo nga aramiden daytoy, mabalin a saanmo koma nga aramiden daytoy. Awan koma ti mangdamag kaniam iti agpataud iti maysa kadagitoy ken itedmo kaniada.",
+       "botpasswords-summary": "<em>Dagiti kontrasenias ti bot</em> ket mangipalubos a maserrekan ti pakabilangan ti agar-aramat babaen ti API a saan nga agusar kadagiti nangruna a kredensial ti pakabilangan. Dagiti magun-od a karbengan ti agar-aramat no nakastrek iti kontrasenias ti bot ket mabalin a nagawidan.\n\nNo saanmo nga ammo no apay a kayatmo nga aramiden daytoy, mabalin a saanmo koma nga aramiden daytoy. Awan koma ti mangdamag kaniam iti agpataud iti maysa kadagitoy ken itedmo kaniada.",
        "botpasswords-disabled": "Nabaldado dagiti kontrasenias ti bot.",
        "botpasswords-no-central-id": "Ti agusar kadagiti kontrasenias ti bot, nasken a nakastrekka iti sentralisado a pakabilangan.",
        "botpasswords-existing": "Dagiti adda a kontrasenias ti bot",
        "passwordreset-emaildisabled": "Dagiti langa ti esurat ket nabaldado iti daytoy a wiki.",
        "passwordreset-username": "Nagan ti agar-aramat:",
        "passwordreset-domain": "Dominio:",
-       "passwordreset-email": "Esurat a pagtaengan:",
+       "passwordreset-email": "Adres ti esurat:",
        "passwordreset-emailtitle": "Dagiti salaysay ti pakabilangan iti {{SITENAME}}",
-       "passwordreset-emailtext-ip": "Adda (baka sika, ti naggapuan ti IP a pagtaengan $1) a nagkiddaw ti maysa a panangisaad manen ti kontrasenias para iti {{SITNAME}} ($4) . {{PLURAL:$3|Ti |Dagiti}} sumaganad a pakabilangan ti agar-aramat ket\nmainaig iti daytoy nga esurat a pagtaengan:\n\n$2\n\n{{PLURAL:$3|Daytoy temporario a kontrasenias|Dagitoy temporario a kontrasenias}} ket agpaso {{PLURAL:$5|iti maysa nga aldaw|kadagiti $5 nga aldaw}}.\nSumrekka koman tapno agpilika ti baro a kontraseniasmo tattan. No adda met sabali a nagaramid daytoy a \npanagkiddaw, wenno malagipmo ti dati a kontraseniasmo, ket saanmo a kayaten a sukatan, saanmo nga ikaskaso daytoy a mensahe ken \nagtuloyka nga agusar ti daan a kontrasenias.",
-       "passwordreset-emailtext-user": "Daytoy nga agar-aramat $1 iti {{SITENAME}} ket nagkiddaw ti maysa a panangisaad manen ti bukod a kontrasenias para iti {{SITENAME}}\n($4) . {{PLURAL:$3|Ti|Dagiti}} sumaganad a pakabilangan ti agar-aramat ket\nmainaig iti daytoy nga esurat a pagtaengan:\n\n$2\n\n{{PLURAL:$3|Daytoy temporario a kontrasenias|Dagitoy temporario a kontrasenias}} ket agpaso {{PLURAL:$5|iti maysa nga aldaw|kadagiti $5 nga aldaw}}.\nSumrekka koman tapno agpilika ti baro a kontraseniasmo tattan. No adda met sabali a nagaramid daytoy a \npanagkiddaw, wenno malagipmo ti dati a kontraseniasmo, ken saanmo a kayaten a sukatan, saanmo nga ikaskaso daytoy a mensahe ken \nagtuloykan nga agusar ti daan a kontraseniasmo.",
+       "passwordreset-emailtext-ip": "Adda (baka sika, ti naggapuan ti adres ti IP ti $1) a nagkiddaw iti maysa a panangisaad manen ti kontrasenias para iti {{SITENAME}} ($4) . {{PLURAL:$3|Ti|Dagiti}} sumaganad a pakabilangan ti agar-aramat ket\nmainaig iti daytoy nga adres ti esurat:\n\n$2\n\n{{PLURAL:$3|Daytoy temporario a kontrasenias|Dagitoy temporario a kontrasenias}} ket agpaso {{PLURAL:$5|iti maysa nga aldaw|kadagiti $5 nga aldaw}}.\nSumrekka koman tapno agpilika iti baro a kontraseniasmo tattan. No adda met sabali a nagaramid daytoy a \npanagkiddaw, wenno malagipmo ti dati a kontraseniasmo, ket saanmo a kayaten a sukatan, saanmo nga ikaskaso daytoy a mensahe ken \nagtuloyka nga agusar iti daan a kontrasenias.",
+       "passwordreset-emailtext-user": "Daytoy nga agar-aramat $1 iti {{SITENAME}} ket nagkiddaw ti maysa a panangisaad manen ti bukod a kontrasenias para iti {{SITENAME}}\n($4) . {{PLURAL:$3|Ti|Dagiti}} sumaganad a pakabilangan ti agar-aramat ket\nmainaig iti daytoy nga adres ti esurat:\n\n$2\n\n{{PLURAL:$3|Daytoy temporario a kontrasenias|Dagitoy temporario a kontrasenias}} ket agpaso {{PLURAL:$5|iti maysa nga aldaw|kadagiti $5 nga aldaw}}.\nSumrekka koman tapno agpilika ti baro a kontraseniasmo tattan. No adda met sabali a nagaramid daytoy a \npanagkiddaw, wenno malagipmo ti dati a kontraseniasmo, ken saanmo a kayaten a sukatan, saanmo nga ikaskaso daytoy a mensahe ken \nagtuloykan nga agusar ti daan a kontraseniasmo.",
        "passwordreset-emailelement": "Nagan ti agar-aramat: \n$1\n\nTemporario a kontrasenias: \n$2",
        "passwordreset-emailsentemail": "No daytoy nga adres ti esurat ket mainaig iti pakabilangam, maipatulodto ti maysa nga esurat iti panangisaad manen ti kontrasenias.",
        "passwordreset-emailsentusername": "No adda adres ti esurat a mainaig iti daytoy a nagan ti agar-aramat, addanto maipatulod nga esurat iti panangisaad manen ti kontrasenia.",
        "changeemail": "Sukatan wenno ikkaten ti adres ti esurat",
        "changeemail-header": "Kompletuen daytoy a porma tapno masukatan ti adres ti esuratmo. No kayatmo a maikkat ti pannakainaig iti ania man nga adres ti esurat manipud iti pakabilangam, ibati a blanko ti baro nga adres ti esurat no ited ti porma.",
        "changeemail-no-info": "Masapul a nakastrekka tapno dagus a makapan iti ditoy a panid.",
-       "changeemail-oldemail": "Agdama nga esurat a pagtaengan:",
-       "changeemail-newemail": "Baro nga esurat a pagtaengan:",
+       "changeemail-oldemail": "Agdama nga adres ti esurat:",
+       "changeemail-newemail": "Baro nga adres ti esurat:",
        "changeemail-newemail-help": "Daytoy a pagikabilan ket nasken a blanko no kayatmo a maikkat ti adres ti esuratmo. Saanmonto a mabalin ti mangisaad manen ti nalipatan a kontrasenias ken saankanto a makaawat kadagiti esurat manipud iti daytoy a wiki no maikkat ti adres ti esurat.",
        "changeemail-none": "(awan)",
        "changeemail-password": "Ti bukodmo a kontrasenias ti {{SITENAME}}:",
        "changeemail-throttled": "Adu unay ti panagpadasmo a sumrek.\nPangngaasi nga aguray ti $1 sakbay a padasen manen.",
        "changeemail-nochange": "Pangngaasi nga agikabil iti sabali a baro nga adres ti esurat.",
        "resettokens": "Isaad manen dagiti tandaan",
-       "resettokens-text": "Mabalinmo nga isaad manen dagiti tandaan a mangpalubos ti panagserrek ti naisangayan a pribado datos a mainaig ti pakabilangam ditoy.\n\nAramidem daytoy no aksidente nga inbingaymo dagitoy iti sabali wenno ti pakabilangam ket nakomprimiso.",
+       "resettokens-text": "Mabalinmo nga isaad manen dagiti tandaan a mangipalubos ti panagserrek iti naisangayan a pribado datos a mainaig iti pakabilangam ditoy.\n\nAramidem daytoy no aksidente nga inbingaymo dagitoy iti sabali wenno ti pakabilangam ket nakomprimiso.",
        "resettokens-no-tokens": "Awan dagiti maisaad manen a tandaan.",
        "resettokens-tokens": "Dagiti tandaan:",
        "resettokens-token-label": "$1 (agdama a pateg: $2)",
        "showpreview": "Ipakita ti ipadas",
        "showdiff": "Ipakita dagiti binaliwan",
        "blankarticle": "<strong>Ballaag:</strong> Ti panid a parpatuatem ket blanko.\nNo pindutem manen ti \"{{int:savearticle}}\", ti panid ket mapartuatto nga awan ti ania man a linaon.",
-       "anoneditwarning": "<strong>Ballaag:</strong> Saanka a nakastrek. Ti IP a pagtaengan ket publikonto a makita nga agaramidka iti ania man a panagurnos. No <strong>[$1 sumrekka]</strong> wenno <strong>[$2 agpartuatka iti pakabilangan]</strong>, dagiti inurnosmo ket maitunosto iti naganmo nga agar-aramat, ken dagiti dadduma pay a pagimbagan.",
+       "anoneditwarning": "<strong>Ballaag:</strong> Saanka a nakastrek. Ti adres ti IP ket publikonto a makita nga agaramidka kadagiti ania man a panagurnos. No <strong>[$1 sumrekka]</strong> wenno <strong>[$2 agpartuatka iti pakabilangan]</strong>, dagiti inurnosmo ket maitunosto iti naganmo nga agar-aramat, ken dagiti dadduma pay a pagimbagan.",
        "anonpreviewwarning": "<em>Saanka a nakastrek. Ti panagidulin ket agirehistro ti IP a pagtaengam kadagitoy a pakasaritaan ti panagurnos iti daytoy a panid.</em>",
        "missingsummary": "<strong>Palagip:</strong> Saanka a nakaited iti pakabuklan ti panagurnos.\nNo pindutem manen ti \"{{int:savearticle}}\", maidulin ti inurnosmo nga awan ti pakabuklanna.",
        "selfredirect": "<strong>Ballaag:</strong> Ibawbaw-ingmo daytoy a panid iti isu met laeng a panid.\nMabalinmo nga innaganan ti kamali a puntaan para iti baw-ing, wenno mabalin nga ur-urnosem ti kamali a panid.\nNo pindutem manen ti \"{{int:savearticle}}\" , mapartuatto lattan ti baw-ing.",
        "subject-preview": "Panangipadas ti suheto:",
        "previewerrortext": "Adda napasamak a maysa a biddut bayat a nagpadpadas kadagiti binawbaliwam.",
        "blockedtitle": "Naseraan ti agar-aramat",
-       "blockedtext": "<strong>Naseraan ti naganmo nga agar-aramat wenno ti IP a pagtaengam.</strong>\n\nTi serra ket inaramid babaen ni $1. \nTi rason a naited ket <em>$2</em>.\n\n* Rugi ti serra: $8\n* Panagpaso ti serra: $6\n* Naikeddeng a serraanna: $7\n\nMabalinmo a kontaken ni $1 wenno sabali pay nga [[{{MediaWiki:Grouppage-sysop}}|administrador]] no kayatmo a maipalawag daytoy a panagserra.\nDimo mabalin nga aramaten ti ramit nga esuratan daytoy nga agar-aramat malaksid no adda napudno nga esurat a pagtaengan a nainaganan iti [[Special:Preferences|pakabilangan ti kakaykayatm]] ken no saanka a naparitan nga agaramat iti daytoy.\nTi agdama nga IP a pagtaengam ket $3, ti naserraan nga ID ket #$5. \nPangngaasi nga iramanmo amin dagiti salaysay dita ngato kadagiti ania man nga aramidem nga usisa.",
-       "autoblockedtext": "Ti IP a pagtaengam ket automatiko a naserraan ngamin ket inusar ti sabali nga agar-aramat, a sinerraan ni $1.\nTi rason nga inted ket:\n\n:<em>$2</em>\n\n* Rugi ti serra: $8\n* Panagpaso ti serra: $6\n* Naikeddenga a serraanna: $7\n\nMabalinmo a kontaken ni $1 wenno maysa kadagiti [[{{MediaWiki:Grouppage-sysop}}|administrador]] tapno maipalawag daytoy a panagserra.\n\nLaglagipem a saanmo a mabalin nga usaren ti \"esuratan daytoy nga agar-aramat\" a langa malaksid no addaanka ti napudno nga esurat a pagtaengan a nakarehistro iti [[Special:Preferences|kakaykayatam]] ken saanka a naserraan manipud ti panagusar daytoy.\n\nTi tatta nga IP a pagtaengam ket $3, ken ti ID ti naserraan ket #$5.\nPangngaasi nga iramanmo amin dagiti salaysay dita ngato kadagiti ania man nga aramidem nga usisa.",
+       "blockedtext": "<strong>Naseraan ti naganmo nga agar-aramat wenno ti adres ti IP.</strong>\n\nTi serra ket inaramid babaen ni $1. \nTi rason a naited ket <em>$2</em>.\n\n* Rugi ti serra: $8\n* Panagpaso ti serra: $6\n* Naikeddeng a serraanna: $7\n\nMabalinmo a kontaken ni $1 wenno sabali pay nga [[{{MediaWiki:Grouppage-sysop}}|administrador]] no kayatmo a maipalawag daytoy a panagserra.\nDimo mabalin nga aramaten ti ramit nga esuratan daytoy nga agar-aramat malaksid no adda napudno nga adres ti esurat a nainaganan iti [[Special:Preferences|pakabilangan ti kakaykayatm]] ken no saanka a naparitan nga agaramat iti daytoy.\nTi agdama nga adres ti IP ket $3, ti naserraan nga ID ket #$5. \nPangngaasi nga iramanmo amin dagiti salaysay dita ngato kadagiti ania man nga aramidem nga usisa.",
+       "autoblockedtext": "Ti bukodmo nga adres ti IP ket automatiko a naserraan ngamin ket inusar ti sabali nga agar-aramat, a sinerraan ni $1.\nTi rason nga inted ket:\n\n:<em>$2</em>\n\n* Rugi ti serra: $8\n* Panagpaso ti serra: $6\n* Naikeddenga a serraanna: $7\n\nMabalinmo a kontaken ni $1 wenno maysa kadagiti [[{{MediaWiki:Grouppage-sysop}}|administrador]] tapno maipalawag daytoy a panagserra.\n\nLaglagipem a saanmo a mabalin nga usaren ti \"esuratan daytoy nga agar-aramat\" a langa malaksid no addaanka ti napudno nga adres ti esurat a nakarehistro iti [[Special:Preferences|kakaykayatam]] ken saanka a naserraan manipud ti panagusar daytoy.\n\nTi agdama a bukodmo nga adres ti IP ket $3, ken ti ID ti naserraan ket #$5.\nPangngaasi nga iramanmo amin dagiti salaysay dita ngato kadagiti ania man nga aramidem nga usisa.",
        "blockednoreason": "awan ti naited a rason",
        "whitelistedittext": "Pangngaasi a $1 tapno makaurnos kadagiti panid.",
        "confirmedittext": "Masapul a pasingkedam ti esurat sakbay a makaurnos kadagitoy a panid.\nPangngaasi nga isaad ken ipapudnom ti esuratmo babaen ti [[Special:Preferences|kakaykayatan ti agar-aramat]].",
        "accmailtext": "Ti pugto a napartuat a kontrasenias para kenni [[User talk:$1|$1]] ket naipatuloden iti $2. Mabalin a masukatan iti\n<em>[[Special:ChangePassword|pagsukatan ti kontrasenias]]</em> a panid no sumrekka.",
        "newarticle": "(Baro)",
        "newarticletext": "Nasurotmo ti silpo ti awan pay a panid. \nTi mangpartuat ti panid, rugiamon ti agmakinilia iti kahon dita baba (kitaen ti [$1 panid ti tulong] para iti adu pay a pakaammo). \nNo addaka ditoy babaen ti biddut, pindutem ti buton ti <strong>back</strong> ti pagbasabasam.",
-       "anontalkpagetext": "----\n<em>Daytoy ti pakitungtungan a panid para iti di ammo nga agar-aramat a saan pay a nakapartuat iti pakabilangan, wenno saanna nga us-usaren.</em>\nIsu nga agusarkami ti numero nga IP a pagtaengan tapno mailasin isuda a lalaki/babai.\nTi kastoy nga IP a pagtaengan ket us-usaren a bingayan babaen ti nadumaduma nga agar-aramat.\nNo sika ket maysa a di ammo nga agar-aramat ken dagiti awan ti pategna a komentario ket napaitudo kenka, pangngaasi nga [[Special:CreateAccount|agpartuatka iti pakabilangam]] wenno [[Special:UserLogin|sumrekka]] \ntapno maliklikan ti pannakaiyallilaw kadagiti sabali a di ammo nga agar-aramat.",
+       "anontalkpagetext": "----\n<em>Daytoy ti pakitungtungan a panid para iti di ammo nga agar-aramat a saan pay a nakapartuat iti pakabilangan, wenno saanna nga us-usaren.</em>\nIsu nga agusarkami ti numero ti adres ti IP tapno mailasin isuda a lalaki/babai.\nTi kastoy nga adres ti IP ket us-usaren a pagbibingayan babaen ti nadumaduma nga agar-aramat.\nNo sika ket maysa a di ammo nga agar-aramat ken dagiti awan ti pategna a komentario ket napaitudo kenka, pangngaasi nga [[Special:CreateAccount|agpartuatka iti pakabilangam]] wenno [[Special:UserLogin|sumrekka]] \ntapno maliklikan ti pannakaiyallilaw kadagiti sabali a di ammo nga agar-aramat.",
        "noarticletext": "Awan ti agdama a teksto iti daytoy a panid.\nMabalinmo ti [[Special:Search/{{PAGENAME}}|agbiruk iti kastoy a titulo ti panid]] kadagiti sabali a panid,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} agbiruk kadagiti mainaig a listaan],\nwenno [{{fullurl:{{NAMESPACE}}:{{PAGENAME}}|action=edit}} partuaten daytoy a panid]</span>.",
        "noarticletext-nopermission": "Awan ti agdama  a linaon daytoy a panid.\nMabalinmo ti [[Special:Search/{{PAGENAME}}|agbiruk para iti titulo ti daytoy a panid]] kadagiti sabali a panid, wenno <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} agbiruk kadagiti mainaig a listaan]</span>, ngem awan ti pammalubosmo a mangpartuat iti daytoy a panid.",
        "missing-revision": "Ti panagbalbaliw ti #$1 iti daytoy a panid a nanaganan ti \"{{FULLPAGENAME}}\" ket awan.\n\nDaytoy ket kadawyan a gapuanan babaen ti sumaganad a silpo ti baak a pakasaritaan iti maysa a naikkaten a panid.\nDagiti salaysay ket mabalin a mabirukan idiay [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} listaan ti panagikkat].",
        "previewnote": "<strong>Laglagipem a daytoy ket panagipadas laeng.</strong>\nDagiti sinukatam ket saan pay a naidulin!",
        "continue-editing": "Mapan idiay pagurnosan a lugar",
        "previewconflict": "Daytoy a panagpadas ket mangipakita ti teksto iti lugar ti akinngato a pangurnosan ti teksto a kasla agparang no piliem nga idulin.",
-       "session_fail_preview": "Pasensia! Saanmi a maproseso ti panagurnosmo gapu ta naawanan ti sesion ti datos.\n\nMabalin a nakaruarka. <strong>Pangngaasi a pasingkedan a nakastrekka pay laeng ken padasen manen</strong>.\n \t\nNo saan pay a mabalin, padasen ti [[Special:UserLogout|rummuar]] ken sumrek manen, ken kitaen no ti pagbasabasam ket mangpalubos kadagiti galieta manipud iti daytoy a sitio.",
-       "session_fail_preview_html": "Pasensia! Saanmi a maproseso ti panagurnosmo gapu ta naawanan ti sesion ti datos.\n\n<em>Gapu ta ti {{SITENAME}} ket addaan iti naata a HTML a nakapabaelan, ti panagpadas ket nailemmeng a kas pagan-annadan kadagiti panagraut iti dakes a JavaScript.</em>\n\n<strong>No daytoy ket pudno a panagurnos, pangngaasi a padasem manen.</strong>\nNo saan pay a mabalin, padasen ti [[Special:UserLogout|rummuar]] ken sumrek manen, ken kitaen no ti pagbasabasam ket mangpalubos kadagiti galieta manipud iti daytoy a sitio.",
+       "session_fail_preview": "Pasensia! Saanmi a maproseso ti panagurnosmo gapu ta naawanan ti sesion ti datos.\n\nMabalin a nakaruarka. <strong>Pangngaasi a pasingkedan a nakastrekka pay laeng ken padasen manen</strong>.\n \t\nNo saan pay a mabalin, padasen ti [[Special:UserLogout|rummuar]] ken sumrek manen, ken kitaen no ti pagbasabasam ket mangipalubos kadagiti galieta manipud iti daytoy a sitio.",
+       "session_fail_preview_html": "Pasensia! Saanmi a maproseso ti panagurnosmo gapu ta naawanan ti sesion ti datos.\n\n<em>Gapu ta ti {{SITENAME}} ket addaan iti naata a HTML a nakapabaelan, ti panagpadas ket nailemmeng a kas pagan-annadan kadagiti panagraut iti dakes a JavaScript.</em>\n\n<strong>No daytoy ket pudno a panagurnos, pangngaasi a padasem manen.</strong>\nNo saan pay a mabalin, padasen ti [[Special:UserLogout|rummuar]] ken sumrek manen, ken kitaen no ti pagbasabasam ket mangipalubos kadagiti galieta manipud iti daytoy a sitio.",
        "token_suffix_mismatch": "<strong>Ti panagurnosmo ket saan a naawat ngamin ket ti klientem ket dinadaelna dagiti karakter ti tuldek iti tandaan ti panagurnos.</strong>\nTi panagurnos ket saan a naawat tapno mapawilan ti pannakadadael ti teksto ti panid.\nSagpaminsan a mapasamak daytoy no agus-usarka ti saan a nasayaat a naibatay ti web ti di ammo a pannakbagi a serbisio.",
        "edit_form_incomplete": "<strong>Adda dagiti paset ti pagurnosan a porma a saan a nakadanon dita server; mamindua a kitaen dagiti panagurnosmo ket sibubukel ken padasen manen.</strong>",
        "editing": "Ur-urnosen ti $1",
        "copyrightwarning2": "Pangngaasi a laglagipen nga amin a kontribusion iti {{SITENAME}} ket mabalin a maurnos, mabaliwan, wenno ikkaten dagiti sabali a kontributor.\nNo dimo kayat a ti sinuratmo ket maurnos nga awanan-asi ken maiwaras nga awan sungsungbatan kenka, saanmon nga ited ditoy.<br />\nIkarkarim pay kadakami a bukodmo a sinurat daytoy, wenno kinopia manipud iti publiko a dominio wenno ti kapadpadana a nawaya a nagtaudan. (kitaen ti $1 para kadagiti salaysay).\n<strong>Saan a mangited ti nakarbengan ti kopia nga obra no awan iti pammalubos!</strong>",
        "editpage-cannot-use-custom-model": "Saan a mabaliwan ti modelo ti linaon iti daytoy a panid.",
        "longpageerror": "<strong>Biddut: Ti teksto nga intedmo ket {{PLURAL:$1|maysa a kilobyte|$1 kilkilobyte}} ti katiddogna, nga at-atiddog ngem ti kangatuan iti  {{PLURAL:$2|maysa a kilobyte|$2 kilkilobyte}}.</strong>\nSaan a mabalin a maidulin.",
-       "readonlywarning": "<strong>Ballaag: Narikepan ti database tapno mataripato, isu a saanmo a mabalin nga idulin dagita inurnosmo tattan.</strong>\nMabalinmo ti agkopia ken agipegket ti testom iti papeles ti testo ken idulinmo daytoy intono madamdama.\n\nTi administrador ti sistema a nangrikep ket nangited iti daytoy a palawag: $1",
+       "readonlywarning": "<strong>Ballaag: Narikepan ti database tapno mataripato, isu a saanmo a mabalin nga idulin dagita inurnosmo tattan.</strong>\nMabalinmo ti agkopia ken agipegket ti tekstom iti papeles ti teksto ken idulinmo daytoy intono madamdama.\n\nTi administrador ti sistema a nangrikep ket nangited iti daytoy a palawag: $1",
        "protectedpagewarning": "<strong>Ballaag: Daytoy a panid ket nasalakniban tapno dagiti laeng agar-aramat nga addaan iti gundaway nga administrador ti makaurnos ditoy.</strong>\nTi naudi a naikabil iti listaan ket naited dita baba para iti reperensia:",
        "semiprotectedpagewarning": "<strong>Nota:</strong> Nasalakniban daytoy a panid tapno dagiti laeng nakarehistro nga agar-aramat ti makaurnos ditoy.\nTi naudi a naikabil iti listaan ket naited dita baba para iti reperensia:",
        "cascadeprotectedwarning": "<strong>Ballaag:</strong> Daytoy a panid ket nasalakniban tapno dagiti laeng agar-aramat nga addaan iti gundaway nga administrador ti makaurnos gapu ta nailak-am {{PLURAL:$1|iti sumaganad a panid|kadagiti sumaganad a panid}} a nasalakniban iti sariap:",
        "post-expand-template-argument-warning": "<strong>Ballaag:</strong> Daytoy a panid ket aglaon ti saan a basbasit ngem maysa a panangipalawag ti plantilia a dakkel unay ti panagpadakkelna.\nDagitoy nga argumento ket saanen a nairaman.",
        "post-expand-template-argument-category": "Pampanid a naglaon kadagiti saan a nairaman nga argumento ti plantilia",
        "parser-template-loop-warning": "Nakaduktal iti silo ti plantilia: [[$1]]",
+       "template-loop-category": "Pampanid nga agraman kadagiti silo ti plantilia",
        "parser-template-recursion-depth-warning": "Nalabsan ti patingga ti panagdullit ti kinauneg ti plantilia ($1)",
        "language-converter-depth-warning": "Nalabsan ti patingga ti pagbaliwen a kinauneg ti pagsasao ($1)",
        "node-count-exceeded-category": "Dagiti panid a nakasurokan ti bilang ti nodo",
        "parser-unstrip-loop-warning": "Nakaduktal ti di-naukisan a silo",
        "parser-unstrip-recursion-limit": "Nalabsan ti patingga ti panagdullit ti di-naukisan ($1)",
        "converter-manual-rule-error": "Adda biddut a naduktalan iti manual nga alagaden ti panagbalbaliw ti pagsasao",
-       "undo-success": "Ti panag-urnos ket saan a maisubli.\nPangngaasi a kitaen ti panangipada dita baba tapno maammuan no daytoy ti kayatmo nga aramiden, ken kalpasanna idulin dagiti sinukatan dita baba tapno malpas ti panagsubli ti inurnos.",
+       "undo-success": "Mabalin a maisubli ti panagurnos.\nPangngaasi a kitaen ti panangiyasping dita baba tapno maammuan no daytoy ti kayatmo nga aramiden, ken kalpasanna idulin dagiti sinukatan dita baba tapno malpas ti panangisubli ti inurnos.",
        "undo-failure": "Ti inurnos ket saan a maipasubli gapu ta adda dagiti nakisinnungat a patingnga a naurnos.",
        "undo-norev": "Saan a maibabawi ti naurnos ngamin ket awan daytoy wenno mabalin a naikkaten.",
        "undo-nochange": "Ti inurnos ket kasla naibabawin.",
        "undo-summary": "Ibabawi ti $1 a binaliwan babaen ni [[Special:Contributions/$2|$2]] ([[User talk:$2|tungtungan]])",
        "undo-summary-username-hidden": "Isubli ti $1 a binaliwan babaen ti nailemmeng nga agar-aramat",
-       "cantcreateaccount-text": "Ti panagpartuat iti pakabilangan manipud ti daytoy nga IP a pagtaengan (<strong>$1</strong>) ket sinerraan babaen ni [[User:$3|$3]].\n\nTi inted a rason babaen ni $3 ket <em>$2</em>",
-       "cantcreateaccount-range-text": "Ti panagpartuat iti pakabilangan manipud kadagiti pagtaengan ti IP iti sakop ti <strong>$1</strong>, a mairaman ti IP a pagtaengam (<strong>$4</strong>), ket sinerraan babaen ni [[User:$3|$3]].\n\nTi inted a rason babaen ni $3 ket <em>$2</em>",
+       "cantcreateaccount-text": "Ti panagpartuat iti pakabilangan manipud iti daytoy nga adres ti IP (<strong>$1</strong>) ket sinerraan babaen ni [[User:$3|$3]].\n\nTi inted a rason babaen ni $3 ket <em>$2</em>",
+       "cantcreateaccount-range-text": "Ti panagpartuat iti pakabilangan manipud kadagiti adres ti IP iti sakop ti <strong>$1</strong>, a mairaman ti adres ti IP (<strong>$4</strong>), ket sinerraan babaen ni [[User:$3|$3]].\n\nTi inted a rason babaen ni $3 ket <em>$2</em>",
        "viewpagelogs": "Kitaen dagiti listaan para iti daytoy a panid",
        "nohistory": "Awan ti pakasaritaan ti panagurnos iti daytoy a panid.",
        "currentrev": "Kinaudi a rebision",
        "page_first": "umuna",
        "page_last": "naudi",
        "histlegend": "Panagpili ti diperensia: Markaan dagiti kahon ti radio kadagiti rebision tapno maipada ken pinduten ti enter wenno ti buton dita baba.<br />\nLeyenda: <strong>({{int:cur}})</strong> = naggidiatan ti kinaudi a rebision, <strong>({{int:last}})</strong> = naggidiatan ti sarsarunuen a rebision, <strong>{{int:minoreditletter}}</strong> = bassit nga urnos.",
-       "history-fieldset-title": "Agbasabasa iti pakasaritaan",
-       "history-show-deleted": "Naikkat laeng",
+       "history-fieldset-title": "Agbiruk para kadagiti rebision",
+       "history-show-deleted": "Naikkat laeng ti rebision",
        "histfirst": "kadaanan",
        "histlast": "kabaruan",
        "historysize": "({{PLURAL:$1|1 byte|dagiti $1 a byte}})",
        "rev-deleted-comment": "(naikkat ti pakabuklan ti inurnos)",
        "rev-deleted-user": "(naikkat ti nagan ti agar-aramat)",
        "rev-deleted-event": "(naikkat ti listaan dagiti salaysay)",
-       "rev-deleted-user-contribs": "[naikkat ti nagan ti agar-aramat wenno IP a pagtaengan - ti inurnos ket nailemmeng manipud kadagiti kontribusion]",
+       "rev-deleted-user-contribs": "[naikkat ti nagan ti agar-aramat wenno adres ti IP - nailemmeng ti inurnos manipud kadagiti kontribusion]",
        "rev-deleted-text-permission": "Ti rebision daytoy a panid ket <strong>naikkaten</strong>.\nDagiti salaysay ket mabirukan iti [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} listaan ti panagikkat].",
        "rev-suppressed-text-permission": "Ti rebision daytoy a panid ket <strong>napasardeng</strong>.\nDagiti salaysay ket mabalin a mabirukan iti [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} listaan ti panagpasardeng].",
        "rev-deleted-text-unhide": "Ti rebision daytoy a panid ket <strong>naikkaten</strong>.\nDagiti salaysay ket mabirukan iti [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} listaan ti panagikkat].\nMabalinmo pay a [$1 makita daytoy a rebision] no kayatmo ti agtuloy.",
        "revdelete-hide-image": "Ilemmeng ti linaon ti papeles",
        "revdelete-hide-name": "Ilemmeng ti puntaan ken dagiti parametro",
        "revdelete-hide-comment": "Pakabuklan ti inurnos",
-       "revdelete-hide-user": "Nagan ti agar-amat/IP a pagtaengan ti editor",
+       "revdelete-hide-user": "Nagan ti agar-amat/adres ti IP ti editor",
        "revdelete-hide-restricted": "Depdepen ti datos manipud kadagiti administrador ken dagiti pay sabali",
        "revdelete-radio-same": "(saan a sukatan)",
        "revdelete-radio-set": "Nailemmeng",
        "prefs-misc": "Sabsabali",
        "prefs-resetpass": "Sukatan ti kontrasenias",
        "prefs-changeemail": "Sukatan wenno ikkaten ti adres ti esurat",
-       "prefs-setemail": "Isaad ti esurat a pagtaengan",
+       "prefs-setemail": "Isaad ti maysa nga adres ti esurat",
        "prefs-email": "Dagiti pagpilian ti esurat",
        "prefs-rendering": "Tabas",
        "saveprefs": "Idulin",
        "restoreprefs": "Isubli amin dagiti kasisigud a pannakaisaad (kadagiti amin a seksion)",
        "prefs-editing": "Ur-urnosen",
-       "searchresultshead": "Biruken",
+       "searchresultshead": "Agbiruk",
        "stub-threshold": "Pagpatinggaan para iti panagpormat iti silpo ti pungol ($1):",
        "stub-threshold-sample-link": "wadan",
        "stub-threshold-disabled": "Nabaldado",
        "timezoneuseserverdefault": "Usaren ti kasisigud ti wiki ($1)",
        "timezoneuseoffset": "Sabali (inaganan ti timbengan)",
        "servertime": "Oras ti server:",
-       "guesstimezone": "Punuen manipud ti pagbasabasa",
+       "guesstimezone": "Punuen manipud iti pagbasabasa",
        "timezoneregion-africa": "Aprika",
        "timezoneregion-america": "Amerika",
        "timezoneregion-antarctica": "Antartika",
        "timezoneregion-indian": "Taaw Indiano",
        "timezoneregion-pacific": "Taaw Pasipiko",
        "allowemail": "Pakabaelam ti esurat a naggapo kadagiti sabali nga agar-aramat",
-       "prefs-searchoptions": "Biruken",
+       "prefs-searchoptions": "Agbiruk",
        "prefs-namespaces": "Dagiti nagan ti espasio",
        "default": "kasisigud",
        "prefs-files": "Dagiti papeles",
        "prefs-help-gender": "Ti panangisaad daytoy a kakaykayatan ket saan a nasken.\nTi sopwer ket agus-usar iti pategna tapno tawagannaka ken ibaganaka kadagiti sabali nga agus-usar iti maitunos gramatika ti henero.\nDaytoy a pakaammo ket makitanto iti publiko.",
        "email": "Esurat",
        "prefs-help-realname": "Saan a nasken ti pudno a nagan.\nNo maited, mabalin a maaramatto a panangited iti pammadayaw kenka iti obram.",
-       "prefs-help-email": "Ti esurat a pagtaengan ket saan a masapul, ngem masapul kadagiti panangisaad manen ti kontrasenias, no malipatam ti kontraseniasmo.",
+       "prefs-help-email": "Ti adres ti esurat ket saan a masapul, ngem masapul kadagiti panangisaad manen ti kontrasenias, no malipatam ti kontraseniasmo.",
        "prefs-help-email-others": "Mabalinmo pay ti agpili tapno dagiti sabali nga agar-aramat ket mabalin nga esuratandaka babaen ti silpo ti panidmo wenno ti panid ti tungtungam.\nTi esurat a pagtaengam ket saan a maipakita no agkontak kenka dagiti agar-aramat.",
-       "prefs-help-email-required": "Masapul ti esurat a pagtaengan.",
+       "prefs-help-email-required": "Masapul ti adres ti esurat.",
        "prefs-info": "Kangrunaan a pakaammo",
        "prefs-i18n": "Internasionalisasion",
        "prefs-signature": "Pirma",
        "prefs-help-prefershttps": "Daytoy a kakaykayatan ket mapakabaelanto iti sumaruno nga iseserrekmo.",
        "prefswarning-warning": "Nagaramikka kadagiti panagbalbaliw kadagiti kakaykayatam a saan pay a naidulin.\nNo panawan daytoy a panid a saan nga agpindut iti \"$1\" dagiti kakaykayatam ket saanto a mapabaro.",
        "prefs-tabs-navigation-hint": "Pakaammo: Mabalinmo nga usaren dagiti kanigid ken kanawan a tekla ti pana tapno madaliasat ti baetan dagiti etiketa iti listaan dagiti etiketa.",
-       "userrights": "Panagtaripato kadagiti karbengan ti agar-aramat",
+       "userrights": "Dagiti karbengan ti agar-aramat",
        "userrights-lookup-user": "Agpili iti agar-aramat",
        "userrights-user-editname": "Mangiserrek iti nagan ti agar-aramat:",
        "editusergroup": "Ikarga dagiti grupo ti agar-aramat",
        "right-move-rootuserpages": "Agiyalis kadagiti ramut a panid ti agar-aramat",
        "right-move-categorypages": "Agiyalis iti pampanid ti kategoria",
        "right-movefile": "Agiyalis kadagiti papeles",
-       "right-suppressredirect": "Saan nga agpartuat kadagiti baw-ing manipud ti taudan ti pampanid no agiyalis kadagiti panid",
+       "right-suppressredirect": "Saan nga agpartuat kadagiti baw-ing manipud iti taudan ti pampanid no agiyalis kadagiti panid",
        "right-upload": "Agikarga kadagiti papeles",
        "right-reupload": "Agisurat manen kadagiti addan a papeles",
        "right-reupload-own": "Agisurat manen kadagiti addan a papeles a bukod nga inkarga",
        "right-editsemiprotected": "Agurnos kadagiti panid a nasalakniban a kas \"{{int:protect-level-autoconfirmed}}\"",
        "right-editcontentmodel": "Urnosen ti modelo ti linaon iti panid",
        "right-editinterface": "Agurnos iti interface ti agar-aramat",
-       "right-editusercssjs": "Agurnos kadagiti papales ti CSS ken JavaScript dagiti sabali nga agar-aramat",
        "right-editusercss": "Agurnos kadagiti papeles ti CSS dagiti sabali nga agar-aramat",
        "right-edituserjs": "Agurnos kadagiti papales ti JavaScript dagiti sabali nga agar-aramat",
        "right-editmyusercss": "Agurnos kadagiti bukodmo a papeles ti CSS ti agar-aramat",
        "right-editmyuserjs": "Agurnos kadagiti bukodmo a papeles ti JavaScript ti agar-aramat",
        "right-viewmywatchlist": "Agkita iti bukodmo a listaan ti bambantayan",
        "right-editmywatchlist": "Agurnos iti bukodmo a listaan ti bambantayan. Laglagipen nga adda dagiti tignay a mangnayonto pay laeng ti pampanid urayno awan daytoy a karbengan.",
-       "right-viewmyprivateinfo": "Agkita iti bukodmo a pribado a datos (kasla ti esurat a pagtaengan, pudno a nagan)",
-       "right-editmyprivateinfo": "Agurnos iti bukodmo a pribado a datos (kasla ti esurat a pagtaengan, pudno a nagan)",
+       "right-viewmyprivateinfo": "Agkita iti bukodmo a pribado a datos (kasla ti adres ti esurat, pudno a nagan)",
+       "right-editmyprivateinfo": "Agurnos iti bukodmo a pribado a datos (kasla ti adres ti esurat, pudno a nagan)",
        "right-editmyoptions": "Agurnos kadagiti bukodmo a kakaykayatan",
        "right-rollback": "Napardas a mangisubli kadagiti inurnos ti naudi nga agar-aramat a nagurnos iti naisangayan a panid",
        "right-markbotedits": "Agmarka kadagiti naipasubli nga urnos a kas inurnos dagiti bot",
        "right-noratelimit": "Saan a maaringan babaen dagiti patingga ti gatad",
        "right-import": "Agala ti pampanid manipud kadagiti sabali a wiki",
-       "right-importupload": "Agala kadagiti panid manipud ti naikarga a papeles",
+       "right-importupload": "Agala kadagiti panid manipud iti naikarga a papeles",
        "right-patrol": "Markaanna dagiti inurnos ti dadduma a kas napatruliaan",
        "right-autopatrol": "Automatiko a mamarkaanna ti bukod nga inurnos a kas napatruliaan",
        "right-patrolmarks": "Agkita kadagiti kaudian a binaliwan dagiti marka ti napatruliaan",
        "grant-blockusers": "Serraan ken ikkaten ti serra dagiti agar-aramat",
        "grant-createaccount": "Agpartuat kadagiti pakabilangan",
        "grant-createeditmovepage": "Agpartuat, agurnos, ken agiyalis kadagiti panid",
-       "grant-delete": "Agikkat kadagiti panid, dagit irebision, ken dagiti naikabil iti listaan",
+       "grant-delete": "Agikkat kadagiti panid, dagitrebision, ken dagiti naikabil iti listaan",
        "grant-editinterface": "Urnosen ti nagan ti espasio ti MediaWiki ken ti CSS/JavaScript ti agar-aramat",
        "grant-editmycssjs": "Urnosen ti bukodmo a CSS/JavaScript ti agar-aramat",
        "grant-editmyoptions": "Urnosem ti bukodmo a kakaykayatan ti agar-aramat",
        "rcfilters-invalid-filter": "Imbalido a sagat",
        "rcfilters-empty-filter": "Awan dagiti aktibo a sagat. Naipakita amin dagiti kontribusion.",
        "rcfilters-filterlist-title": "Dagiti sagat",
+       "rcfilters-filterlist-whatsthis": "Ania daytoy?",
        "rcfilters-highlightmenu-title": "Agpili iti maris",
        "rcfilters-filterlist-noresults": "Awan dagiti nabirukan a sagat",
        "rcfilters-filter-registered-label": "Nakarehistro",
        "rcfilters-filter-registered-description": "Dagiti nakastrek nga editor.",
        "rcfilters-filter-unregistered-label": "Saan a nakarehistro",
        "rcfilters-filter-unregistered-description": "Dagiti editor a saan a nakastrek.",
+       "rcfilters-filter-editsbyself-label": "Dagiti bukodmo nga inurnos",
+       "rcfilters-filter-editsbyself-description": "Dagiti inurnosmo.",
+       "rcfilters-filter-editsbyother-label": "Dagiti inurnos ti sabali",
+       "rcfilters-filter-editsbyother-description": "Dagiti inurnos a pinartuat babaen dagiti sabali nga agar-aramat (saan a sika).",
        "rcfilters-filter-user-experience-level-newcomer-label": "Dagiti agdadamo",
        "rcfilters-filter-user-experience-level-newcomer-description": "Basbassit ngem 10 nga inur-urnos ken 4 nga aldaw iti aktibidad.",
        "rcfilters-filter-user-experience-level-learner-label": "Dagiti agad-adal",
        "rcfilters-filter-patrolled-description": "Dagiti inurnos a namarkaan a kas napatruliaan.",
        "rcfilters-filter-unpatrolled-label": "Di napatruliaan",
        "rcfilters-filter-unpatrolled-description": "Dagiti inurnos a saan a namarkaan a kas napatruliaan.",
+       "rcfilters-filter-minor-label": "Dagiti bassit a panagurnos",
+       "rcfilters-filter-minor-description": "Dagiti panagurnos a minarkaan ti mannurat a kas bassit.",
+       "rcfilters-filter-major-label": "Dagiti saan a bassit a panagurnos",
+       "rcfilters-filter-major-description": "Dagiti panagurnos a saan a namarkaan a kas bassit.",
        "rcfilters-filtergroup-changetype": "Kita ti panagbaliw",
+       "rcfilters-filter-pageedits-label": "Dagiti panagurnos ti panid",
+       "rcfilters-filter-pageedits-description": "Dagiti panagurnos iti linaon ti wiki, tungtungan, dagiti deskripsion ti kategoria....",
+       "rcfilters-filter-newpages-label": "Dagiti panagpartuat ti panid",
+       "rcfilters-filter-newpages-description": "Dagiti panagurnos a nakaaramid kadagiti baro a panid.",
+       "rcfilters-filter-categorization-label": "Dagiti panagbaliw ti kategoria",
+       "rcfilters-filter-categorization-description": "Dagiti rekord ti pampanid a mainaynayon wenno maik-ikkat manipud kadagiti kategoria.",
+       "rcfilters-filter-logactions-label": "Dagiti aksion a nailista",
+       "rcfilters-filter-logactions-description": "Dagiti aksion nga administratibo, dagiti panagpartuat iti pakabilangan, dagiti panagikkat iti panid, dagiti panangikarga....",
        "rcnotefrom": "Dita baba ket {{PLURAL:$5|ti sinukatan|dagiti sinukatan}} manipud idi <strong>$3, $4</strong> (aginggana iti <strong>$1</strong> a naipakita).",
        "rclistfrom": "Ipakita dagiti kabarbaro a sinukatan a mangrugi manipud idi $2, $3",
        "rcshowhideminor": "$1 dagiti bassit a panagurnos",
        "rcshowhidecategorization": "$1 ti pannakaikategoria ti panid",
        "rcshowhidecategorization-show": "Ipakita",
        "rcshowhidecategorization-hide": "Ilemmeng",
-       "rclinks": "Ipakita dagiti naudi a $1 a sinukatan iti kallabes a $2 nga al-aldaw<br />$3",
+       "rclinks": "Ipakita dagiti naudi a $1 a sinukatan iti kallabes a $2 nga al-aldaw",
        "diff": "dip",
        "hist": "hist",
        "hide": "Ilemmeng",
        "upload-form-label-infoform-categories": "Katkategoria",
        "upload-form-label-infoform-date": "Petsa",
        "upload-form-label-own-work-message-generic-local": "Pasingkedak nga ikarkargak daytoy a papeles a sumursurot kadagiti termino ti serbisio ken dagiti annuroten ti lisensia iti {{SITENAME}}.",
-       "upload-form-label-not-own-work-message-generic-local": "No saanka a makaikarga iti daytoy a papeles babaen dagiti annuroten iti {{SITENAME}}, pangngaasi nga irekep daytoy a dialogo ken padasen ti sabali a pamay-an.",
+       "upload-form-label-not-own-work-message-generic-local": "No saanka a makaikarga iti daytoy a papeles babaen dagiti annuroten iti {{SITENAME}}, pangngaasi nga irikep daytoy a dialogo ken padasen ti sabali a pamay-an.",
        "upload-form-label-not-own-work-local-generic-local": "Mabalinmo pay a padasen [[Special:Upload|ti kasisigud a pagikargaan a panid]].",
        "upload-form-label-own-work-message-generic-foreign": "Maawatak nga agikarkargaak iti daytoy a papeles iti pagbibingayan a repositorio. Pasingkedak nga ar-aramidek a sumursurot kadagiti termino ti serbisio ken dagiti annuroten ti lisensia idiay.",
-       "upload-form-label-not-own-work-message-generic-foreign": "No saanka a makaikarga iti daytoy a papeles babaen dagiti annuroten iti pagbibingayan a repositorio, pangngaasi nga irekep daytoy a dialogo ken padasen ti sabali a pamay-an.",
+       "upload-form-label-not-own-work-message-generic-foreign": "No saanka a makaikarga iti daytoy a papeles babaen dagiti annuroten iti pagbibingayan a repositorio, pangngaasi nga irikep daytoy a dialogo ken padasen ti sabali a pamay-an.",
        "upload-form-label-not-own-work-local-generic-foreign": "Malinmo pay a padasen ti panagusar [[Special:Upload|ti panid a pagikargaan iti {{SITENAME}}]], no daytoy a panid ket mabalin a maikarga idiay babaen dagiti bukodda nga annuroten.",
        "backend-fail-stream": "Saan a maipan ti papeles $1.",
        "backend-fail-backup": "Saan a makaidulin ti kapada ti papeles ti $1.",
        "img-auth-accessdenied": "Nalibak ti iseserrek",
        "img-auth-nopathinfo": "Ti servermo ket saan a naisaad nga agipasa iti daytoy a pakaammo.\nMabalin a naibatay iti CGI ken saan a makasuporta ti img_auth.\nKitaen ti https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization .",
        "img-auth-notindir": "Ti kiniddaw a dalan ket saan nga adda iti naaramid a direktorio ti pagikargaan",
-       "img-auth-badtitle": "Saan a makaaramid ti umisu a titulo manipud ti \"$1\".",
+       "img-auth-badtitle": "Saan a makaaramid ti umisu a titulo manipud iti \"$1\".",
        "img-auth-nologinnWL": "Saanka a nakastrek ken ti \"$1\" ket awan idiay mabalin a listaan.",
        "img-auth-nofile": "Awan ti papeles ti \"$1\".",
        "img-auth-isdir": "Padpadasem ti mangserrek ti direktorio ti \"$1\".\nTi laeng panagserrek ti papeles ti maipalubos.",
        "nolicense": "Awan ti napili",
        "licenses-edit": "Urnosen dagiti pagpilian ti lisensia",
        "license-nopreview": "(Saan a magun-od ti panagipadas)",
-       "upload_source_url": "(ti pinilim a papeles manipud ti umisu, ken publiko a maserrekan nga URL)",
-       "upload_source_file": "(ti pinilim a papeles manipud ti kompiutermo)",
+       "upload_source_url": "(ti pinilim a papeles manipud iti umisu, ken publiko a maserrekan nga URL)",
+       "upload_source_file": "(ti pinilim a papeles manipud iti kompiutermo)",
        "listfiles-delete": "ikkaten",
        "listfiles-summary": "Daytoy nga espesial a panid ket agiparang kadagiti amin a naikarga a papeles.",
        "listfiles_search_for": "Agbiruk para iti nagan ti midia:",
        "doubleredirects": "Dagiti namindua a naibaw-ing",
        "doubleredirectstext": "Daytoy a panid ket ilistana dagiti panid nga agbaw-ing kadagiti sabali a baw-ing a pampanid.\nIti tunggal maysa nga aray ket aglaon kadagiti silpo iti umuna ken maikadua a baw-ing, ken ti pay puntaan ti maikadua a baw-ing, nga isu ti \"pudno\" a puntaan ti panid, nga ti umuna a baw-ing ket isu koma ti pakaituduanna.\nNasolbaren dagiti <del>nakurosan</del> a naikabil.",
        "double-redirect-fixed-move": "Naiyalisen ti [[$1]].\nAutomatiko idi a napabaro ken naibaw-ing tattan iti [[$2]].",
-       "double-redirect-fixed-maintenance": "Automatiko nga agsimsimpa ti doble a baw-ing manipud ti [[$1]] iti [[$2]] iti panagtaripato nga obra.",
+       "double-redirect-fixed-maintenance": "Automatiko nga agsimsimpa ti doble a baw-ing manipud iti [[$1]] iti [[$2]] iti panagtaripato nga obra.",
        "double-redirect-fixer": "Panagsimpa ti baw-ing",
        "brokenredirects": "Dagiti naputed a baw-ing",
        "brokenredirectstext": "Dagiti sumaganad a baw-ing ket nakasilpo kadagiti awan a panid:",
        "mostinterwikis": "Dagiti panid a kaaduan kadagiti interwiki",
        "mostrevisions": "Dagiti panid a kaaduan kadagiti rebision",
        "prefixindex": "Amin a pampanid nga addaan iti pasakbay",
-       "prefixindex-namespace": "Amin a pampanid nga addaan iti pasaruno (nagan ti espasio ti $1)",
+       "prefixindex-namespace": "Amin a pampanid nga agraman iti pasakbay (nagan ti espasio ti $1)",
        "prefixindex-submit": "Ipakita",
        "prefixindex-strip": "Ikkaten ti pasakbay iti listaan",
        "shortpages": "Dagiti ababa a panid",
        "ancientpages": "Dagiti kadaanan a panid",
        "move": "Iyalis",
        "movethispage": "Iyalis daytoy a panid",
-       "unusedimagestext": "Adda dagiti sumaganad a papeles ngem saanda a naikabil iti aniaman a panid.\nPangngaasi a laglagipen a dagiti sabali a sitio ti web ket mabalin a nakasilpoda iti papeles iti dagus a URL, ken mabalin pay a nailista ditoy urayno saanda nga aktibo a maus-usar.",
+       "unusedimagestext": "Adda dagiti sumaganad a papeles ngem saanda a naikabil iti ania man a panid.\nPangngaasi a laglagipen a dagiti sabali a sitio ti web ket mabalin a nakasilpoda iti papeles iti dagus a URL, ken mabalin pay a nailista ditoy urayno saanda nga aktibo a maus-usar.",
        "unusedcategoriestext": "Ti sumaganad a kategoria ti pampanid ket adda,urayno awan ti sabali a panid wenno kategoria ti agus-usar kaniada.",
        "notargettitle": "Awan ti puntaan",
        "notargettext": "Saanmo a nainagan ti puntaan a panid wenno agar-aramat ti mangtungpal iti daytoy nga annong.",
        "apisandbox-multivalue-all-values": "$1 (Amin a patpateg)",
        "booksources": "Dagiti taudan ti libro",
        "booksources-search-legend": "Agbiruk para kadagiti taudan ti libro",
-       "booksources-search": "Biruken",
+       "booksources-search": "Agbiruk",
        "booksources-text": "Dita baba ket listaan dagiti silpo ti sabali a sitio nga aglaklako ti baro ken saan a nausar a liblibro, ken mabalin nga addaan pay iti adu a pakaammo a maipanggep kadagiti libro a birbirukem:",
-       "booksources-invalid-isbn": "Ti naited nga ISBN ket kasla saan nga umisu; kitaen dagiti biddut ti panagtulad manipud ti kasisigud a taudan.",
+       "booksources-invalid-isbn": "Ti naited nga ISBN ket kasla saan nga umisu; kitaen dagiti biddut ti panagtulad manipud iti kasisigud a taudan.",
        "magiclink-tracking-rfc": "Pampanid nga agus-usar kadagiti salamangka a silpo ti RFC",
        "magiclink-tracking-rfc-desc": "Daytoy a panid ket agus-usar kadagiti salamangka a silpo ti RFC. Kitaen ti [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Magic_links mediawiki.org] no kasano iti mangiyakar.",
        "magiclink-tracking-pmid": "Pampanid nga agus-usar kadagiti salamangka a silpo ti PMID",
        "all-logs-page": "Amin a listaan a publiko",
        "alllogstext": "Naikaykaysa a panagiparang kadagiti amin a magun-od a listaan iti {{SITENAME}}.\nMapabassitmo ti panagkita babaen ti panagpili ti kita ti listaan, ti nagan ti agar-aramat (sensitibo ti kadakkel ti letra), wenno ti naapektaran a panid (sensitibo pay ti kadakkel ti letra).",
        "logempty": "Awan dagiti maipada a banag iti listaan.",
-       "log-title-wildcard": "Agbiruk kadagiti titulo a mangrugi iti daytoy a testo",
+       "log-title-wildcard": "Agbiruk kadagiti titulo a mangrugi iti daytoy a teksto",
        "showhideselectedlogentries": "Baliwan ti panagkita kadagiti napili a naikabil iti listaan",
        "log-edit-tags": "Urnosen dagiti etiketa iti napili a listaan ti naikabkabil",
        "checkbox-select": "Agpili: $1",
        "linksearch": "Panagbiruk kadagiti akinruar a silpo",
        "linksearch-pat": "Tabas ti panagbiruk:",
        "linksearch-ns": "Nagan ti espasio:",
-       "linksearch-ok": "Biruken",
+       "linksearch-ok": "Agbiruk",
        "linksearch-text": "Dagiti naatap a tarheta a kas ti \"*.wikipedia.org\" ket mabalin nga usaren.\nMasapul ti saan a basbassit ngem kangatuan a dominio, kas pagarigan \"*.org\".<br />\n{{PLURAL:$2|Ti protokol|Dagiti protokol}} a nasuportaran: $1 (kasisigud iti http:// no awan ti nainaganan a protokol).",
-       "linksearch-line": "Ti $1 ket naisilpo manipud ti $2",
+       "linksearch-line": "Ti $1 ket naisilpo manipud iti $2",
        "linksearch-error": "Ti naatap a tarheta ket mabalin nga agparang laeng iti rugi ti nagan ti agsangaili.",
        "listusersfrom": "Iparang dagiti agar-aramat a mangrugi iti:",
        "listusers-submit": "Ipakita",
        "listgrouprights-addgroup-self": "Agnayon {{PLURAL:$2|iti grupo|kadagiti grupo}} iti bukod a pakabilangan: $1",
        "listgrouprights-removegroup-self": "Agikkat {{PLURAL:$2|iti grupo|kadagiti grupo}} manipud ti bukod a pakabilangan: $1",
        "listgrouprights-addgroup-self-all": "Inayon amin dagiti grupo iti bukod a pakabilangan",
-       "listgrouprights-removegroup-self-all": "Ikkatem amin dagiti grupo manipud ti bukod a pakabilangan",
+       "listgrouprights-removegroup-self-all": "Ikkatem amin dagiti grupo manipud iti bukod a pakabilangan",
        "listgrouprights-namespaceprotection-header": "Dagiti panangigawid ti nagan ti espasio",
        "listgrouprights-namespaceprotection-namespace": "Nagan ti espasio",
-       "listgrouprights-namespaceprotection-restrictedto": "Karbengan wenno karkarbengan a mangpalubos nga agurnos ti agar-aramat",
+       "listgrouprights-namespaceprotection-restrictedto": "Karbengan wenno karkarbengan a mangipalubos nga agurnos ti agar-aramat",
        "listgrants": "Dagiti sagut",
        "listgrants-summary": "Ti sumagand ket listaan dagiti sagut nga agraman kadagiti mainaig a panagserrek kadagiti karbengan ti agar-aramat. Dagiti agar-aramat ket mabalinda ti mangipalubos kadagiti aplikasion a mausarda iti bukodda a pakabilangan, ngem addaan iti limitado a pammalubos a naibatay kadagiti sagut nga inted ti agar-aramat iti aplikasion. Nupay kasta ti maysa nga aplikasion nga agtigtignay para iti agar-aramat ket saan a pudno a makausar kadagiti karbengan nga awanan iti agar-aramat.\nMabalin nga adda iti [[{{MediaWiki:Listgrouprights-helppage}}|maipatinayon a pakaammo]] a maipanggep kadagiti indibidual a karbengan.",
        "listgrants-grant": "Sagut",
        "hidden-category-category-desc": "Ti kategoria ket aglaon ti <code><nowiki>__HIDDENCAT__</nowiki></code> iti panid a linaonna, a mangpawil daytoy nga agparang kadagiti silpo ti kahon ti kategoria kadagiti panid babaen ti kasisigud.",
        "trackingcategories-nodesc": "Awan ti magun-od a deskripsion.",
        "trackingcategories-disabled": "Nabaldado ti kategoria",
-       "mailnologin": "Awan ti pagipatulodan a pagtaengan",
-       "mailnologintext": "Masapul a [[Special:UserLogin|nakastrekka]] ken adda umisu nga esurat a pagtaengan idiay [[Special:Preferences|kaykayatam]] tapno makaipatulod iti esurat kadagiti sabali nga agar-aramat.",
+       "mailnologin": "Awan ti pagipatulodan nga adres",
+       "mailnologintext": "Masapul a [[Special:UserLogin|nakastrekka]] ken adda umisu nga adres ti esurat iti [[Special:Preferences|kaykayatam]] tapno makaipatulod iti esurat kadagiti sabali nga agar-aramat.",
        "emailuser": "Esuratan daytoy nga agar-aramat",
        "emailuser-title-target": "Esuratam daytoy nga {{GENDER:$1|agar-aramat}}",
        "emailuser-title-notarget": "Esuratan ti agar-aramat",
-       "emailpagetext": "Mabalinmo nga usaren ti porma dita baba tapno makaipatulod iti esurat a mensahe iti daytoy nga {{GENDER:$1|agar-aramat}}.\nTi esurat nga inkabilmo iti [[Special:Preferences|kakaykayatam]] ket agparang a kas \"Naggapo\" a pagtaengan ti esurat, tapno ti nagipatulodam ket makasungbat kenka.",
+       "emailpagetext": "Mabalinmo nga usaren ti porma dita baba tapno makaipatulod iti mensahe ti esurat iti daytoy nga {{GENDER:$1|agar-aramat}}.\nTi esurat nga inkabilmo iti [[Special:Preferences|kakaykayatam]] ket agparang a kas \"Naggapo\" nga adres ti esurat, tapno ti nagipatulodam ket makasungbat kenka.",
        "defemailsubject": "Esurat ti {{SITENAME}} a naggapo kenni \"$1\"",
        "usermaildisabled": "Saanmo a mabalin ti agipatulod ti esurat",
        "usermaildisabledtext": "Saanmo a mabalin ti agipatulod ti esurat kadagiti sabali nga agar-aramat iti daytoy a wiki",
-       "noemailtitle": "Awan ti esurat a pagtaengan",
-       "noemailtext": "Ti agar-aramat ket saan a nanginagan ti umisu nga esurat a pagtaengan.",
+       "noemailtitle": "Awan ti adres ti esurat",
+       "noemailtext": "Daytoy nga agar-aramat ket saan a nanginagan ti umisu nga adres ti esurat.",
        "nowikiemailtext": "Ti agar-aramat ket mabalinna ti agpili a saan nga umawat iti esurat kadagiti sabali nga agar-aramat.",
        "emailnotarget": "Awan wenno saan nga umisu a nagan ti agar-aramat para iti nagipatulodan.",
        "emailtarget": "Ikabil ti nagan ti agar-aramat a pangitulodam",
        "addedwatchtext": "Ti \"[[:$1]]\" ken ti tungtunganna a panid ket nainayonen iti [[Special:Watchlist|listaan ti bambantayam]].",
        "addedwatchtext-talk": "Ti \"[[:$1]]\" ken ti mainaig a panidna ket nainayoen iti [[Special:Watchlist|bambantayam]].",
        "addedwatchtext-short": "Ti panid ti \"$1\" ket nainayonen iti listaan ti bambantayam.",
-       "removewatch": "Ikkaten manipud ti listaan ti bambantayan",
+       "removewatch": "Ikkaten manipud iti listaan ti bambantayan",
        "removedwatchtext": "Ti \"[[:$1]]\" ken ti tungtunganna a panid ket naikkaten manipud iti [[Special:Watchlist|listaan ti bambantayam]].",
        "removedwatchtext-talk": "Ti \"[[:$1]]\" ken ti mainaig a panidna ket naikkaten manipud iti [[Special:Watchlist|bambantayam]].",
-       "removedwatchtext-short": "Ti panid ti \"$1\" ket naikkaten manipud ti listaan ti bambantayam.",
+       "removedwatchtext-short": "Ti panid ti \"$1\" ket naikkaten manipud iti listaan ti bambantayam.",
        "watch": "Bantayan",
        "watchthispage": "Bantayan daytoy a panid",
        "unwatch": "Saanen a bantayan",
        "log-name-contentmodel": "Listaan ti panagbaliw ti modelo ti linaon",
        "log-description-contentmodel": "Dagiti pasamak a mainaig kadagiti modelo ti linaon ti panid",
        "logentry-contentmodel-new": "{{GENDER:$2|Pinartuat}} ni $1 ti panid ti $3 a nagusar ti saan a kasisigud a modelo ti linaon ti \"$5\"",
-       "logentry-contentmodel-change": "{{GENDER:$2|Binaliwan}} ni $1 ti modelo ti panid ti $3 manipud ti \"$4\" iti \"$5\"",
+       "logentry-contentmodel-change": "{{GENDER:$2|Binaliwan}} ni $1 ti modelo ti panid ti $3 manipud iti \"$4\" iti \"$5\"",
        "logentry-contentmodel-change-revertlink": "isubli",
        "logentry-contentmodel-change-revert": "isubli",
        "protectlogpage": "Listaan ti panagsalaknib",
        "protectlogtext": "Dita baba ket adda listaan dagiti sinukatan a salaknib ti panid.\nKitaen ti [[Special:ProtectedPages|listaan kadagiti nasalakniban a panid]] ti listaan kadagiti agdama a panagpataray a panagsalaknib ti panid.",
        "protectedarticle": "nasalakniban ti \"[[$1]]\"",
        "modifiedarticleprotection": "nasukatan ti agpang ti salaknib para iti \"[[$1]]\"",
-       "unprotectedarticle": "naikkat ti salaknib manipud ti \"[[$1]]\"",
-       "movedarticleprotection": "iyalis ti kasasaad ti salaknib manipud ti \"[[$2]]\" iti \"[[$1]]\"",
+       "unprotectedarticle": "naikkat ti salaknib manipud iti \"[[$1]]\"",
+       "movedarticleprotection": "iyalis ti kasasaad ti salaknib manipud iti \"[[$2]]\" iti \"[[$1]]\"",
        "protect-title": "Sukatan ti agpang ti salaknib para iti \"$1\"",
        "protect-title-notallowed": "Kitaen ti agpang ti salaknib ti \"$1\"",
        "prot_1movedto2": "[[$1]] naiyalis iti [[$2]]",
        "restriction-upload": "Agikarga",
        "restriction-level-sysop": "napno a nasalakniban",
        "restriction-level-autoconfirmed": "nasalakniban-bassit",
-       "restriction-level-all": "aniaman nga agpang",
+       "restriction-level-all": "ania man nga agpang",
        "undelete": "Kitaen dagiti naikkat a panid",
        "undeletepage": "Kitaen ken isubli dagiti naikkat a panid",
        "undeletepagetitle": "<strong>Ti sumaganad ket buklen dagiti naikkat a rebision ti [[:$1|$1]]</strong>.",
        "undeleterevisions": "$1 {{PLURAL:$1|a rebision|kadagiti rebision}} ti naikkat",
        "undeletehistory": "No ipasublim daytoy a panid, amin dagiti rebision ket maipasubli iti pakasaritaan.\nKet no adda baro a panid a kanagnaganna a naaramid ti napalabas a panagikkat, dagiti naipasubli a rebision ket agparang iti napalabas a pakasaritaan.",
        "undeleterevdel": "Ti panagikkat ket saan a maaramid no agbanag iti rabaw ti panid, wenno ti rebision ti papeles ket maikkatan ti bassit.\nIti kastoy a kaso, masapul nga ikkatem ti kur-it wenno ikkatem ti lemmeng dagiti kabarbaro a naikkat a rebision.",
-       "undeletehistorynoadmin": "Daytoy a panid ket naikkaten.\nTi rason ti panagikkat ket naipakita iti pakabuklan dita baba, ken dagita a salaysay ti agar-aramat a nagurnos iti daytoy a panid sakbay a naikkat.\nTi husto a testo dagitoy a naikat a rebision ket magun-od laeng dagiti administrador.",
+       "undeletehistorynoadmin": "Daytoy a panid ket naikkaten.\nTi rason ti panagikkat ket naipakita iti pakabuklan dita baba, ken dagita a salaysay ti agar-aramat a nagurnos iti daytoy a panid sakbay a naikkat.\nTi husto a teksto dagitoy a naikat a rebision ket magun-od laeng dagiti administrador.",
        "undelete-revision": "Naikkat ti rebision ti $1 (manipud idi $4, $5) babaen ni $3:",
        "undeleterevision-missing": "Imbalido wenno napukaw a rebision.\nAddaanka ngata ti madi a silpo, wenno ti rebision ket mabalin a naipasubli wenno naikkat manipud ti arkibo.",
        "undeleterevision-duplicate-revid": "Saan a maisubli {{PLURAL:$1|ti maysa a rebision|dagiti $1 a rebision}}, gapu ta {{PLURAL:$1|ti bukona|dagiti bukodda}} nga <code>rev_id</code> ket naus-usaren.",
        "undeleteviewlink": "kitaen",
        "undeleteinvert": "Baliktaden ti napili",
        "undeletecomment": "Rason:",
-       "undeletedrevisions": "{{PLURAL:$1|1 a rebision|dagiti $1 a rebision}} ti naisubli",
-       "undeletedrevisions-files": "{{PLURAL:$1|1 a rebision|dagiti $1 a rebision}} ken {{PLURAL:$2|1 a papeles|dagiti $2 a papeles}} ti naisubli",
-       "undeletedfiles": "{{PLURAL:$1|1 a papeles|dagiti $1 a papeles}} ti naisubli",
        "cannotundelete": "Napaay ti sangkabassit wenno amin iti panagisubli ti panagikkat:\n$1",
        "undeletedpage": "<strong>Naisublin ti $1</strong>\n\nBinsiren ti [[Special:Log/delete|listaan ti panagikkat]] para iti rehistro dagiti kaudian panagikkat ken naisubsubli.",
        "undelete-header": "Kitaen [[Special:Log/delete|ti listaan ti panagikkat]] kadagiti kaudian a naikkat a panid.",
-       "undelete-search-title": "Biruken dagiti naikkat a panid",
-       "undelete-search-box": "Biruken dagiti naikkat a panid",
+       "undelete-search-title": "Agbiruk kadagiti naikkat a panid",
+       "undelete-search-box": "Agbiruk kadagiti naikkat a panid",
        "undelete-search-prefix": "Ipakita dagiti panid a mangrugi iti:",
-       "undelete-search-submit": "Biruken",
+       "undelete-search-submit": "Agbiruk",
        "undelete-no-results": "Awan dagiti kapada ti panid a nasarakan idiay arkibo ti panagikkat.",
        "undelete-filename-mismatch": "Saan maisubli ti panagikkat ti rebision ti papeles nga adda oras ket petsana a $1: Saan nga agpada ti nagan ti papeles.",
        "undelete-bad-store-key": "Saan a maisubli ti pinagikkat ti rebision ti papeles nga adda oras ket petsana a $1: Ti papeles ket napukaw sakbay a naikkat.",
        "contributions-userdoesnotexist": "Ti pakabilangan ti agar-aramat ni \"$1\" ket saan a nakarehistro.",
        "nocontribs": "Awan ti nasarakan a nasukatan a kapada dagitoy a kriteria.",
        "uctop": "(agdama)",
-       "month": "Manipud ti bulan (ken nasapsapa):",
-       "year": "Manipud ti tawen (ken nasapsapa):",
+       "month": "Manipud iti bulan (ken nasapsapa):",
+       "year": "Manipud iti tawen (ken nasapsapa):",
        "sp-contributions-newbies": "Iparang dagiti kontribusion dagiti kabarbaro a pakabilangan laeng",
        "sp-contributions-newbies-sub": "Para kadagiti kabarbaro a pakabilangan",
        "sp-contributions-newbies-title": "Dagiti kontribusion para kadagiti baro a pakabilangan",
        "sp-contributions-talk": "tungtungan",
        "sp-contributions-userrights": "panagtaripato kadagiti karbengan ti agar-aramat",
        "sp-contributions-blocked-notice": "Agdama a naserraan daytoy nga agar-aramat.\nTi naudi a naikabil iti listaan ti pannakaserra ket naited dita baba para iti reperensia:",
-       "sp-contributions-blocked-notice-anon": "Daytoy nga IP a pagtaengan ket agdama a naserraan.\nTi naudi a naikabil iti listaan ti pannakaserra ket adda dita baba para iti reperensia:",
+       "sp-contributions-blocked-notice-anon": "Daytoy nga adres ti IP ket agdama a naserraan.\nTi naudi a naikabil iti listaan ti pannakaserra ket adda dita baba para iti reperensia:",
        "sp-contributions-search": "Agbiruk para kadagiti kontribusion",
-       "sp-contributions-username": "IP a pagtaengan wenno nagan ti agar-aramat:",
+       "sp-contributions-username": "Adres ti IP wenno nagan ti agar-aramat:",
        "sp-contributions-toponly": "Ipakita laeng dagiti inurnos dagiti kaudian a rebision",
        "sp-contributions-newonly": "Ipakita laeng dagiti inurnos a pannakapartuat ti pampanid",
        "sp-contributions-hideminor": "Ilemmeng dagiti bassit a panagurnos",
-       "sp-contributions-submit": "Biruken",
+       "sp-contributions-submit": "Agbiruk",
        "whatlinkshere": "Dagiti nakasilpo ditoy",
        "whatlinkshere-title": "Pampanid a nakasilpo iti \"$1\"",
        "whatlinkshere-page": "Panid:",
        "whatlinkshere-filters": "Dagiti sagat",
        "whatlinkshere-submit": "Inkan",
        "autoblockid": "Auto a panagserra #$1",
-       "block": "Seraan ti agar-aramat",
+       "block": "Serraan ti agar-aramat",
        "unblock": "Ikkaten ti serra ti agar-aramat",
        "blockip": "Serraan ti {{GENDER:$1|agar-aramat}}",
        "blockip-legend": "Serraan ti agar-aramat",
        "blockiptext": "Usaren ti porma dita baba tapno maserraan ti panagserrek ti panagsurat manipud iti naisangayan nga adres ti IP wenno nagan ti agar-aramat.\nDaytoy ket nasken laeng a maaramid tapno mapawilan ti bandalismo, ken segun iti [[{{MediaWiki:Policy-url}}|annuroten]].\nIkabil ti naisangayan a rason dita baba (kas pagarigan, ti panagdakamat kadagiti naisangayan a panid a nabandalismo).\nMabalinmo a serraan dagiti sakup ti adres ti IP babaen ti panagusar ti sintaksis ti [https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing CIDR]; ti kadakkelan a maipalubos a sakup ket /$1 para iti IPv4 ken /$2 para iti IPv6.",
-       "ipaddressorusername": "IP a pagtaengan wenno nagan ti agar-aramat:",
+       "ipaddressorusername": "Adres ti IP wenno nagan ti agar-aramat:",
        "ipbexpiry": "Agpaso:",
        "ipbreason": "Rason:",
        "ipbreason-dropdown": "*Dagiti kadawyan a rason ti panagserra\n** Agikabil kadagiti  madi a pakaammo\n** Agikkat kadagiti linaon ti pampanid\n** Agikabil ti spam a silpo iti ruar\n** Agikabil ti minamaag/saan a maawatan a pampanid\n** Mangbutbuteng a panagkukua /mangriribok\n** Agab-abuso kadagiti nadumaduma a pakabilangan\n** Saan a maawat a nagan ti agar-aramat",
-       "ipb-hardblock": "Iparit dagiti nakastrek nga agar-aramat manipud ti panagurnos manipud ti daytoy nga IP a pagtaengan",
+       "ipb-hardblock": "Iparit dagiti nakastrek nga agar-aramat manipud iti panagurnos manipud iti daytoy nga adres ti IP",
        "ipbcreateaccount": "Pawilan ti panagpartuat iti pakabilangan",
        "ipbemailban": "Pawilan ti agar-aramat nga agipatulod iti esurat",
-       "ipbenableautoblock": "Automatiko a mangserra ti naudi nga IP a pagtaengan nga inusar daytoy nga agar-aramat, ken dagiti sumaruno nga IP a pagtaengan nga ayan ti pangipadasanda nga agurnos",
+       "ipbenableautoblock": "Automatiko a mangserra ti naudi nga adres ti IP nga inusar daytoy nga agar-aramat, ken dagiti sumaruno nga adres ti IP nga ayan ti pangipadasanda nga agurnos",
        "ipbsubmit": "Serraan daytoy nga agar-aramat",
        "ipbother": "Sabali nga oras:",
        "ipboptions": "2 nga oras:2 hours,1 nga aldaw:1 day,3 nga aldaw:3 days,1 a lawas:1 week,2 a lawas:2 weeks,1 a bulan:1 month,3 a bulan:3 months,6 a bulan:6 months,1 a tawen:1 year,awan inggana:infinite",
        "ipb-disableusertalk": "Pawilan daytoy nga agar-aramat nga agurnos kadagiti bukodda a tungtungan a panid bayat a naserraan",
        "ipb-change-block": "Serraan manen ti agar-aramat kadagitoy a pannakaisaad",
        "ipb-confirm": "Pasingkedan ti serra",
-       "badipaddress": "Imbalido nga IP a pagtaengan",
+       "badipaddress": "Imbalido nga adres ti IP",
        "blockipsuccesssub": "Balligi ti panangserra",
        "blockipsuccesstext": "Ni [[Special:Contributions/$1|$1]] ket naserraanen.<br />\nKitaen ti [[Special:BlockList|listaan ti serra]] tapno marepaso dagiti serra.",
        "ipb-blockingself": "Mangrugrugika nga agserra kenka! Sigurado a kayatmo nga aramiden daytoy?",
        "ipb-confirmaction": "No sigurado a kayatmo nga aramiden daytoy, pangngaasi a kitaen ti \"{{int:ipb-confirm}}\" a pagikabilan dita baba.",
        "ipb-edit-dropdown": "Urnosen dagiti rason ti panagserra",
        "ipb-unblock-addr": "Lukatan ti serra ni $1",
-       "ipb-unblock": "Lukatan ti serra ti nagan ti agar-aramat wenno IP a pagtaengan",
+       "ipb-unblock": "Lukatan ti serra ti nagan ti agar-aramat wenno adres ti IP",
        "ipb-blocklist": "Kitaen dagiti adda a serra",
        "ipb-blocklist-contribs": "Dagiti kontribusion para kenni {{GENDER:$1|$1}}",
        "ipb-blocklist-duration-left": "$1 ti nabati",
        "unblockip": "Lukatan ti serra ti agar-aramat",
-       "unblockiptext": "Usaren ti porma dita baba tapno maisubli ti panagserrek ti panagsurat ti dati a naserran nga IP a pagtaengan wenno nagan ti agar-aramat.",
+       "unblockiptext": "Usaren ti porma dita baba tapno maisubli ti panagserrek ti panagsurat ti dati a naserran nga adres ti IP wenno nagan ti agar-aramat.",
        "ipusubmit": "Ikkaten daytoy a serra",
        "unblocked": "Naikkat ti pannakaserra ni [[User:$1|$1]].",
        "unblocked-range": "Naikkaten ti serra ti $1.",
        "unblocked-id": "Naikkaten ti serra ti $1.",
        "unblocked-ip": "Naikkaten ti serra ni [[Special:Contributions/$1|$1]] .",
        "blocklist": "Dagiti naserraan nga agar-aramat",
+       "autoblocklist-submit": "Agbiruk",
        "ipblocklist": "Dagiti naserraan nga agar-aramat",
        "ipblocklist-legend": "Agbiruk ti naserraan nga agar-aramat",
        "blocklist-userblocks": "Ilemmeng dagiti serra ti pakabilangan",
        "blocklist-by": "Ti nagserra nga admin",
        "blocklist-params": "Dagiti parametro ti serra",
        "blocklist-reason": "Rason",
-       "ipblocklist-submit": "Biruken",
+       "ipblocklist-submit": "Agbiruk",
        "ipblocklist-localblock": "Lokal a serra",
        "ipblocklist-otherblocks": "Sabali {{PLURAL:$1|a serra|kadagiti serra}}",
        "infiniteblock": "inggana't inggana",
        "emailblock": "nabaldado ti esurat",
        "blocklist-nousertalk": "saan a mabalin nga agurnos ti bukod a tungtungan a panid",
        "ipblocklist-empty": "Awan linaon ti listaan ti serra.",
-       "ipblocklist-no-results": "Ti kiniddaw nga IP a pagtaengan wenno nagan ti agar-aramat ket saan a naserraan.",
+       "ipblocklist-no-results": "Ti kiniddaw nga adres ti IP wenno nagan ti agar-aramat ket saan a naserraan.",
        "blocklink": "serraan",
        "unblocklink": "ikkaten ti serra",
        "change-blocklink": "baliwan ti serra",
        "blocklog-showsuppresslog": "Daytoy nga agar-aramat ket dati a naserraan ken nailemmeng.\nTi listaan ti panagpasardeng ket naikabil dita baba para iti reperensia:",
        "blocklogentry": "naserraan ni [[$1]] nga adda ti oras a panagpaso iti $2 $3",
        "reblock-logentry": "sinukatan ti pannakaserra para kenni [[$1]] nga adda ti oras a panagpaso iti $2 $3",
-       "blocklogtext": "Daytoy ket listaan ti agar-aramat kadagiti panagserra ken panaglukat ti serra\nDagiti automatiko a panakaserra ti IP a pagtaengan ket saan a nailista.\nKitaen ti [[Special:BlockList|listaan ti serra]] para iti listaan kadagiti agdama a naiparit a pagpataray ken dagiti serra.",
+       "blocklogtext": "Daytoy ket listaan ti agar-aramat kadagiti panagserra ken panaglukat ti serra\nDagiti automatiko a pannakaserra ti adres ti IP ket saan a nailista.\nKitaen ti [[Special:BlockList|listaan ti serra]] para iti listaan kadagiti agdama a panangiparit ti pagpataray ken dagiti serra.",
        "unblocklogentry": "lukatan ti serra ni $1",
        "block-log-flags-anononly": "dagiti di ammo nga agar-aramat laeng",
        "block-log-flags-nocreate": "nabaldado ti panagpartuat ti pakabilangan",
        "ipb-otherblocks-header": "Sabali {{PLURAL:$1|a naserraan|kadagiti naserraan}}",
        "unblock-hideuser": "Saanmo a maisubli ti serra daytoy nga agar-aramat, nailemmengen ti nagan daytoy nga agar-aramat.",
        "ipb_cant_unblock": "Biddut: San a nabirukan ti ID $1 ti serra. Mabalin a nalukatanen ti serrana.",
-       "ipb_blocked_as_range": "Biddut: Ti IP a pagtaengan ti $1 ket saan a dagus a naserraan ken saan a malukatan ti serrana.\nNgem, nupay kasta, naserran a kas paset ti sakop ti $2, a mabalin a malukatan ti serrana.",
+       "ipb_blocked_as_range": "Biddut: Ti adres ti IP ti $1 ket saan a dagus a naserraan ken saan a malukatan ti serrana.\nNgem, nupay kasta, naserran a kas paset ti sakop ti $2, a mabalin a malukatan ti serrana.",
        "ip_range_invalid": "Imbalido a sakop ti IP.",
        "ip_range_toolarge": "Dagiti serra a nasakop a dakdakkel ngem /$1 ket saan a maipalubos.",
        "proxyblocker": "Pannakbagi a panagserra",
        "proxyblockreason": "Ti IP a pagtaengam ket naserraan ngamin ket daytoy ket nakalukat a panakbagi.\nPangngaasi a kontakem ti agit-ited ti serbisio ti Internetmo wenno teknikal a suporta ti gunglom ken ibagam kaniada ti nakaro a parikut ti seguridad.",
        "sorbsreason": "Ti IP a pagtaengam ket nailista a kasla \"nalukatan a pannakbagi\" iti DNSBL nga inusar babaen ti {{SITNAME}}.",
        "sorbs_create_account_reason": "Ti IP a pagtaengam ket nailista a kasla \"nalukatan a pannakbagi\" iti DNSBL nga inusar babaen ti {{SITNAME}}.\nSaanka a makapartuat ti pakabilangan.",
-       "xffblockreason": "Ti maysa nga IP a pagtaengan nga adda iti X-Forwarded-For header, mabalin a kukuam wenno ti pannakbagi a server nga us-usarem, ket naserraan. Ti kasisigud a rason ti pannakaserra idi ket: $1",
+       "xffblockreason": "Ti maysa nga adres ti IP nga adda iti paulo ti X-Forwarded-For, mabalin a kukuam wenno ti pannakbagi a server nga us-usarem, ket naserraan. Ti kasisigud a rason ti pannakaserra idi ket: $1",
        "cant-see-hidden-user": "Ti agar-aramat a kayatmo a serraan ket naserraanen ken nailemmeng.\nGapu ta awan met ti karbengam nga agilemming ti agar-aramat, saanmo a makita wenno maurnos ti serra ti agar-aramat.",
        "ipbblocked": "Saanmo a mabalin ti agserra wenno agikkat ti serra ti sabali nga agar-aramat, ngamin ket naserraanka met.",
        "ipbnounblockself": "Saanmo a mabalin a lukatan ti serram.",
        "movepagetext-noredirectfixer": "Ti panagusar ti kinabuklan dita baba, ket panaganan ti panid, iyalisna amin ti pakasaritaanna iti baro a nagan.\nTi daan a titulo ket agbalin baw-ing a panid idiay baro a titulo.\nSiguraduem a kitaen ti [[Special:DoubleRedirects|doble]] wenno [[Special:BrokenRedirects|nadadael a baw-ing]].\nRebbengem ti mangpatalged nga amin a silpo ket agtultuloy a nakatudo iti nasken a papananda.\n\nLaglagipen a ti panid ket <strong>saan</strong> a maiyalis no addaan iti sigud a panid iti baro a titulo, malaksid no awan linaonna wenno no maysa a baw-ing a panid ken awan ti panagbaliw iti pakasaritaan ti napalabas. \nKayat a sawen daytoy a mabalinmo a sukatan ti nagan ti maysa a panid manipud iti punto ti pannakasukat ti nagan no nagbiddutka, ken saanmo a mabalin a suratan manen ti addaan a panid.\n\n<strong>Nota:</strong>\nMabalin a maysa daytoy a nakaro ken saan a bigla a panagbaliw iti maysa a nasikat a panid;\npangngaasim ta pasingkedam a maawatam ti ibunga daytoy sakbay nga agtuloyka a mangbaliw.",
        "movepagetalktext": "No kur-item daytoy a kahon, automatikonto a maiyalis ti mainaig a tungtungan a panid, malaksid no addanto idiay iti adda linaon a tungtungan a panid.\n\nIti daytoy a kaso, masapul nga iyalis wenno manual nga itiponmo ti panid no kayatmo.",
        "moveuserpage-warning": "<strong>Ballaag:</strong> Mangrugrugika nga agiyalis ti panid ti agar-aramat. Pangngaasi a laglapipen a ti panid ket isu laeng ti maiyalis ken ti agar-aramat ket <em>saanto</em> a managanan.",
-       "movecategorypage-warning": "<strong>Ballaag:</strong> Mangiyal-aliskan iti panid ti kategoria. Pangngaasi a laglagipen a ti maiyalisto laeng ket ti panid ken ti aniaman a pampanid iti daan a kategoria ket <em>saanto</em> a maikategoria iti baro.",
+       "movecategorypage-warning": "<strong>Ballaag:</strong> Mangiyal-aliskan iti panid ti kategoria. Pangngaasi a laglagipen a ti maiyalisto laeng ket ti panid ken ti ania man a pampanid iti daan a kategoria ket <em>saanto</em> a maikategoria iti baro.",
        "movenologintext": "Masapul a nakarehistroka nga agar-aramat ken [[Special:UserLogin|nakastrek]] tapno makaiyalis iti panid.",
        "movenotallowed": "Awan ti pammalubosmo nga agiyalis kadagiti panid.",
        "movenotallowedfile": "Awan ti pammalubosmo nga agiyalis kadagiti papeles.",
        "cant-move-to-user-page": "Awan ti pammalubosmo nga agiyalis ti panid iti panid ti agar-aramat (malaksid kadagiti subpanid ti agar-aramat).",
        "cant-move-category-page": "Awan ti pammalubosmo nga agiyalis kadagiti panid ti kategoria.",
        "cant-move-to-category-page": "Awan ti pammalubosmo nga agiyalis ti panid iti panid ti kategoria.",
+       "cant-move-subpages": "Awan pammalubosmo nga agiyalis kadagiti subpanid.",
+       "namespace-nosubpages": "Saan a mangipalubos kadagiti subpanid ti nagan ti espasio ti \"$1\".",
        "newtitle": "Baro a titulo:",
        "move-watch": "Bantayan ti taudan a panid ken puntaan a panid",
        "movepagebtn": "Iyalis ti panid",
        "movepage-moved-redirect": "Napartuaten ti maysa a baw-ing.",
        "movepage-moved-noredirect": "Napasardeng ti pannakapartuat ti baw-ing.",
        "articleexists": "Adda panid nga adda ti kastan a nagan, wenno ti nagan a pinilim ket saan a mabalin.\nPangngaasi nga agpili ti sabali a nagan.",
-       "cantmove-titleprotected": "Saanmo a maiyalis ti panid iti daytoy a lokasion ngamin ket ti baro a titulo ket nasalakniban manipud ti pannakapartuat",
+       "cantmove-titleprotected": "Saanmo a maiyalis ti panid iti daytoy a lokasion ngamin ket ti baro a titulo ket nasalakniban manipud iti pannakapartuat",
        "movetalk": "Iyalis ti mainaig a panid ti tungtungan",
        "move-subpages": "Iyalis dagiti subpanid (aginggana iti $1)",
        "move-talk-subpages": "Iyalis dagiti subpanid ti tungtungan ti panid (aginggana iti $1)",
        "revertmove": "isubli",
        "delete_and_move_text": "Addan ti pangipanan a panid ti \"[[:$1]]\".\nKayatmo nga ikkaten daytoy tapno makaiyaliska?",
        "delete_and_move_confirm": "Wen, ikkaten ti panid",
-       "delete_and_move_reason": "Naikkat tapno mawayaan ti pannaka-iyalis manipud ti \"[[$1]]\"",
+       "delete_and_move_reason": "Naikkat tapno mawayaan ti pannaka-iyalis manipud iti \"[[$1]]\"",
        "selfmove": "Ti titulo ti taudan ken ti pangipanan ket agpadpada;\nsaanmo a maiyalis ti panid ti isu met laeng a panid.",
        "immobile-source-namespace": "Saan a maiyalis dagiti panid iti nagan ti espasio ti \"$1\"",
        "immobile-target-namespace": "Saan a maiyalis dagiti panid iti nagan ti espasio ti \"$1\"",
        "immobile-target-namespace-iw": "Ti silpo nga interwiki ket saan nga umiso a puntaan para iti panagiyalis ti panid.",
        "immobile-source-page": "Saan a mabalin nga iyalis daytoy a panid.",
        "immobile-target-page": "Saan a maiyalis iti dayta a pangipanan a titulo.",
-       "bad-target-model": "Ti kinaykayat a pangipanan ket agus-usar ti sabali a modelo ti linaon. Saan a mapagbaliwen manipud ti $1 iti $2.",
+       "bad-target-model": "Ti kinaykayat a pangipanan ket agus-usar ti sabali a modelo ti linaon. Saan a mapagbaliwen manipud iti $1 iti $2.",
        "imagenocrossnamespace": "Saan a maiyalis ti papeles iti saan nagan ti espasio ti papeles",
        "nonfile-cannot-move-to-file": "Saan a maiyalis ti saan a papeles iti nagan ti espasio ti papeles",
        "imagetypemismatch": "Ti baro a pagpaatiddog ti papeles ket saan a maipada iti bukodna a kita",
        "imageinvalidfilename": "Ti puntaan a nagan ti papeles ket imbalido",
-       "fix-double-redirects": "Agpabaro kadagiti aniaman a baw-ing a mangipatudo ti kasisigud a titulo",
+       "fix-double-redirects": "Agpabaro kadagiti ania man a baw-ing a mangipatudo ti kasisigud a titulo",
        "move-leave-redirect": "Mangibati ti baw-ing",
        "protectedpagemovewarning": "<strong>Balaag:</strong> Daytoy a panid ket nasalakniban tapno dagiti laeng agar-aramat nga addaan ti gundaway nga administrador ti makaiyalis.\nTi naudi a naikabil iti listaan ket naited dita baba para iti reperensia:",
        "semiprotectedpagemovewarning": "<strong>Nota:</strong> Nasalakniban daytoy a panid tapno dagiti laeng nakarehistro nga agar-aramat ti makaiyalis daytoy.\nTi naudi a naikabil iti listaan ket naited dita baba para iti reperensia:",
        "move-over-sharedrepo": "Addan ti [[:$1]] iti pagbingayan a repositorio. Ti panagiyalis ti papeles iti daytoy a titulo ket tuonenna ti pagbingayan a papeles.",
        "file-exists-sharedrepo": "Ti napilim a nagan ti papeles ket naususaren iti pagbingayan a repositorio.\nPangngaasi nga agpilika ti sabali a nagan.",
        "export": "Agipan kadagiti panid",
-       "exporttext": "Maipanmo ti testo ken pakasaritaan ti inurnos iti maysa a panid wenno pampanid a nabalkut ti XML.\nDaytoy ket mabalin a maikabil iti sabali a wiki nga agususar ti MediaWiki nga usaren ti [[Special:Import|pinagala ti panid]].\n\nTi pinagipan ti panid, ikabil ti titulo dita kahon ti testo dita baba, maysa a titulo iti maysa a linia, ken agpili ka no ti kayatmo ket ti agdama a pinagbaliw ken amin nga daan a panagbalbaliw, nga addaan ti linia ti pakasaritaan ti pampanid, wenno ti agdama a panagbaliw nga addaan ti pakaammo a maipapan ti kinaudi a panagurnos.\n\nNo iti kinaudi a kaso mabalinmo nga usaren ti silpo, a kas pagarigan [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] para iti panid \"[[{{MediaWiki:Mainpage}}]]\".",
+       "exporttext": "Maipanmo ti teksto ken pakasaritaan ti inurnos iti maysa a panid wenno pampanid a nabalkut ti XML.\nDaytoy ket mabalin a maikabil iti sabali a wiki nga agus-usar ti MediaWiki nga usaren ti [[Special:Import|pinagala ti panid]].\n\nTi pinagipan ti panid, ikabil ti titulo dita kahon ti teksto dita baba, maysa a titulo iti maysa a linia, ken agpilika no ti kayatmo ket ti agdama a panagbaliw ken amin nga daan a panagbalbaliw, nga addaan ti linia ti pakasaritaan ti pampanid, wenno ti agdama a panagbaliw nga addaan ti pakaammo a maipapan ti kinaudi a panagurnos.\n\nNo iti kinaudi a kaso mabalinmo nga usaren ti silpo, a kas pagarigan [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] para iti panid \"[[{{MediaWiki:Mainpage}}]]\".",
        "exportall": "Ipan amin a pampanid",
        "exportcuronly": "Iraman laeng ti kinaudi a panagbaliw, saan a ti napno a pakasaritaan",
        "exportnohistory": "----\n<strong>Nota:</strong> Ti pagipapan dagiti napno a pakasaritaan dagiti panid iti daytoy a kinabuklan ket nabaldado gapu dagiti pannakalaing ti panagandar a rason.",
        "exportlistauthors": "Iraman ti amin a listaan kadagiti nagaramid iti tunggal a maysa a panid",
        "export-submit": "Agipan",
-       "export-addcattext": "Agnayon kadagiti panid manipud ti kategoria:",
+       "export-addcattext": "Agnayon kadagiti panid manipud iti kategoria:",
        "export-addcat": "Inayon",
-       "export-addnstext": "Agnayon kadagiti panid manipud ti nagan ti espasio:",
+       "export-addnstext": "Agnayon kadagiti panid manipud iti nagan ti espasio:",
        "export-addns": "Inayon",
        "export-download": "Idulin a kas papeles",
        "export-templates": "Mangiraman kadagiti plantilia",
        "export-manual": "Manual nga inayon dagiti panid:",
        "allmessages": "Dagiti mensahe ti sistema",
        "allmessagesname": "Nagan",
-       "allmessagesdefault": "Kasisigud a testo ti mensahe",
-       "allmessagescurrent": "Agdama a testo ti mensahe",
+       "allmessagesdefault": "Kasisigud a teksto ti mensahe",
+       "allmessagescurrent": "Agdama a teksto ti mensahe",
        "allmessagestext": "Daytoy ti listaan dagiti mensahe ti sistema a magun-od iti nagan ti espasio ti MediaWiki.\nPangngaasi a bisitaen ti [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation Lokalisasion ti MediaWiki] ken [https://translatewiki.net translatewiki.net] no kayatmo ti agparawad kadagiti sapasap a panagipatarus ti MediaWiki.",
        "allmessagesnotsupportedDB": "Daytoy a panid ket saan a musar gapu ta nabaldado ti <strong>$wgUseDatabaseMessages</strong>.",
        "allmessages-filter-legend": "Sagat",
        "allmessages-filter-unmodified": "Saan a nabaliwan",
        "allmessages-filter-all": "Amin",
        "allmessages-filter-modified": "Nabaliwan",
-       "allmessages-prefix": "Sagaten babaen ti pasaruno:",
+       "allmessages-prefix": "Sagaten babaen ti pasakbay:",
        "allmessages-language": "Pagsasao:",
        "allmessages-filter-submit": "Inkan",
        "allmessages-filter-translate": "Ipatarus",
        "thumbnail-more": "Padakkelen",
        "filemissing": "Awan ti papeles",
        "thumbnail_error": "Biddut ti panagpartuat ti bassit a ladawan: $1",
-       "thumbnail_error_remote": "Biddut a mensahe manipud ti $1: \n$2",
+       "thumbnail_error_remote": "Biddut a mensahe manipud iti $1: \n$2",
        "djvu_page_error": "Ti DjVu a panid ket saan a masakop",
        "djvu_no_xml": "Saan a naala ti XML iti DjVu a papeles",
        "thumbnail-temp-create": "Saan a makapartuat ti temporario a bassit a ladawan ti papeles",
        "import-mapping-subpage": "Alaen a kas dagiti subpanid ti sumaganad a panid:",
        "import-upload-filename": "Nagan ti papeles:",
        "import-comment": "Komentario:",
-       "importtext": "Pangngaasi nga ipanmo ti papeles manipud ti nagtaudan a wiki nga agusar ti [[Special:Export|ramit ti panagipan]].\nIdulinmo iti bukodmo a kompiuter ken ikarga ditoy.",
+       "importtext": "Pangngaasi nga ipanmo ti papeles manipud iti nagtaudan a wiki nga agusar ti [[Special:Export|ramit ti panagipan]].\nIdulinmo iti bukodmo a kompiuter ken ikarga ditoy.",
        "importstart": "Agal-ala kadagiti panid...",
        "import-revision-count": "$1 {{PLURAL:$1|a rebision|kadagiti rebision}}",
        "importnopages": "Awan dagiti maala a panid.",
        "xml-error-string": "$1 iti linia $2, tukol $3 (byte $4): $5",
        "import-upload": "Ikarga ti datos ti XML",
        "import-token-mismatch": "Pannakapukaw ti sesion ti datos.\n\nMabalin a nakaruarka. <strong>Pangngaasi a pasingkedan a nakastrekka pay laeng ken padasem manen</strong>.\nNo saan pay a mabalin, padasem ti [[Special:UserLogout|rummuar]] ken sumrek manen, ken kitaen no ti pagpasabasam ket mangipalubos kadagiti galieta manipud iti daytoy a sitio.",
-       "import-invalid-interwiki": "Saan a makaala manipud ti nainaganan a wiki.",
+       "import-invalid-interwiki": "Saan a makaala manipud iti nainaganan a wiki.",
        "import-error-edit": "Ti panid ti \"$1\" ket saan idi a naala ngamin ket saanmo a mabalin nga urnosen.",
        "import-error-create": "Ti panid ti \"$1\" ket saan idi a naala ngamin ket saanmo a mabalin a partuaten.",
        "import-error-interwiki": "Ti panid ti \"$1\" ket saan idi a naala ngamin ket ti nagan ket naireserba para iti ruar a panagsilpo (interwiki).",
        "import-error-bad-location": "Ti rebision ti $2 nga agus-usar ti modelo a linaon ti $3 ket saan a maipenpen iti \"$1\" iti daytoy a wiki, gapu ta dayta a modelo ket saan a nasuportaran iti dayta a panid.",
        "import-options-wrong": "Saan a husto {{PLURAL:$2|a pagpilian|a pagpilpilian}}: <nowiki>$1</nowiki>",
        "import-rootpage-invalid": "Ti naited a ramut ti panid ket imbalido a titulo.",
-       "import-rootpage-nosubpage": "Ti nagan ti espasio ti \"$1\" iti ramut ti panid ket saan a mangpalubos kadagiti subpanid.",
+       "import-rootpage-nosubpage": "Ti nagan ti espasio ti \"$1\" iti ramut ti panid ket saan a mangipalubos kadagiti subpanid.",
        "importlogpage": "Listaan ti panagala",
-       "importlogpagetext": "Dagiti administratibo a panagala kadagiti panid nga addaan iti pakasaritaan ti panag-urnos manipud kadagiti sabali a wiki.",
+       "importlogpagetext": "Dagiti administratibo a panagala kadagiti panid nga addaan iti pakasaritaan ti panagurnos manipud kadagiti sabali a wiki.",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|a rebision|kadagiti rebision}} ti naala",
-       "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|rebision|dagiti rebision}} ti naala manipud ti $2",
+       "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|rebision|dagiti rebision}} ti naala manipud iti $2",
        "javascripttest": "Panagsubok ti JavaScript",
        "javascripttest-pagetext-unknownaction": "Di ammo a tignay ti \"$1\".",
        "javascripttest-qunit-intro": "Kitaen ti [ $1 dukomentasion ti panagsubok] idiay mediawiki.org.",
        "tooltip-pt-userpage": "Panidmo nga agar-aramat",
-       "tooltip-pt-anonuserpage": "Ti panid ti agar-aramat para iti daytoy nga IP a pagtaengan a kas ur-urnosem",
+       "tooltip-pt-anonuserpage": "Ti panid ti agar-aramat para iti daytoy nga adres ti IP a kas ur-urnosem",
        "tooltip-pt-mytalk": "Tungtungam a panid",
        "tooltip-pt-anontalk": "Pakitungtungan a maipanggep kadagiti panagurnos manipud iti daytoy nga adres ti IP",
        "tooltip-pt-preferences": "Dagiti kakaykayatam",
        "tooltip-ca-undelete": "Isubli dagiti inurnos a naaramid iti daytoy a panid sakbay idi naikkat",
        "tooltip-ca-move": "Iyalis daytoy a panid",
        "tooltip-ca-watch": "Inayon daytoy a panid iti listaan ti bambantayam",
-       "tooltip-ca-unwatch": "Ikkaten daytoy a panid manipud ti listan ti bambantayam",
+       "tooltip-ca-unwatch": "Ikkaten daytoy a panid manipud iti listan ti bambantayam",
        "tooltip-search": "Agbiruk iti {{SITENAME}}",
        "tooltip-search-go": "Inka idiay panid nga adda kastoy a naganna no adda",
-       "tooltip-search-fulltext": "Biruken dagiti panid para iti daytoy a testo",
+       "tooltip-search-fulltext": "Agbiruk kadagiti panid para iti daytoy a teksto",
        "tooltip-p-logo": "Sarungkaran ti umuna a panid",
        "tooltip-n-mainpage": "Sarungkaran ti umuna a panid",
        "tooltip-n-mainpage-description": "Sarungkaran ti umuna a panid",
        "tooltip-recreate": "Partuaten manen ti panid urayno dati a naikkat.",
        "tooltip-upload": "Irugi ti panagikarga",
        "tooltip-rollback": "\"Baliktaden\"  isubli ti inurnos (dagiti inurnos) iti daytoy a panid iti naudi a kontributor iti maysa a pindut",
-       "tooltip-undo": "\"Ibabawi\" ipasubli daytoy nga urnos ken lukatanna ti porma ti pagurnosan iti panagpadas a moda. Mangpalubos daytoy ti agikabil ti rason iti pakabuklan.",
+       "tooltip-undo": "\"Ibabawi\" isubli daytoy nga urnos ken lukatanna ti porma ti pagurnosan iti moda ti panagpadas. Mangipalubos daytoy ti agikabil ti rason iti pakabuklan.",
        "tooltip-preferences-save": "Idulin dagiti kakaykayatam",
        "tooltip-summary": "Agikabil ti bassit a pakabuklan",
        "anonymous": "Di ammo {{PLURAL:$1|nga agar-aramat|kadagiti agar-aramat}} iti {{SITENAME}}",
        "creditspage": "Dagiti pammadayaw ti panid",
        "nocredits": "Awan dagiti pakaammo ti pammadayaw a magun-od para iti daytoy a panid.",
        "spamprotectiontitle": "Panagsalaknib a sagat para iti spam",
-       "spamprotectiontext": "Ti testo a kayatmo nga idulin ket sinerraan babaen ti sagat ti spam.\nDaytoy ket mabalin a gapuanan babaen ti silpo a naiparit ti akin ruar a sitio.",
-       "spamprotectionmatch": "Ti sumaganad a testo ket isu ti nangkalbit ti sagat ti spam: $1",
+       "spamprotectiontext": "Ti teksto a kayatmo nga idulin ket sinerraan babaen ti sagat ti spam.\nDaytoy ket mabalin a gapuanan babaen ti silpo a naiparit ti akinruar a sitio.",
+       "spamprotectionmatch": "Ti sumaganad a teksto ket isu ti nangkalbit ti sagat ti spam: $1",
        "spambot_username": "Panagdalus iti spam ti MediaWiki",
        "spam_reverting": "Ipasubli ti naudi a rebision nga awan dagiti linaon a silpo iti $1",
        "spam_blanking": "Amin dagiti rebision ket aglaon kadagiti silpo iti $1, iblanko",
        "newimages-showbots": "Ipakita dagiti naikarga babaen dagiti bot",
        "newimages-hidepatrolled": "Ilemmeng dagiti panangikarga a napatruliaan",
        "noimages": "Awan ti makita.",
-       "ilsubmit": "Biruken",
+       "ilsubmit": "Agbiruk",
        "bydate": "babaen ti petsa",
        "sp-newimages-showfrom": "Iparang dagiti baro a papeles a mangrugi manipud idi $2, $1",
        "seconds": "{{PLURAL:$1|$1 a segundo|$1 a segsegundo}}",
        "confirmemail_needlogin": "Masapulmo ti $1 tapno mapasingkedan ti esurat a pagtaengam.",
        "confirmemail_success": "Napasingkedanen ti esurat a pagtaengam.\nMabalinmo tattan ti [[Special:UserLogin|sumrek]] ken nanamen ti wiki.",
        "confirmemail_loggedin": "Napasingkedanen ti esurat a pagtaengam.",
-       "confirmemail_subject": "Pammasingked ti esurat a pagtaengan ti {{SITENAME}}",
-       "confirmemail_body": "Addaan, baka sika, ti naggapu ti IP a pagtaengan $1,\nket nagrehistro ti pakabilangan \"$2\" iti daytoy nga esurat a pagtaengan idiay {{SITENAME}}\n\nTapno mapasingkedan a daytoy a pakabilangan ket kukuam ken ti \npinagpabalin ti esurat a kita idiay {{SITENAME}}, lukatam daytoy a panilpo dita pabasabasam:\n\n$3\n\nNo *saanmo* nga inrehistro ti pakabilangam, surotem daytoy a panilpo\nta pasardengem ti pinakasingkedan ti esurat a  pagtaengam:\n\n$5\n\nDaytoy a pammasingked a kodigo ket agpaso iti $4.",
-       "confirmemail_body_changed": "Addaan, baka sika, ti naggapu ti IP a pagtaengam $1,\nket nangsukat ti esurat a pagtaengan ti pakabilangan \"$2\" iti daytoy a pagtaengan idiay {{SITENAME}}\n\nTapno mapasingkedan daytoy a pakabilangan ket kukuam ken ti \npanagpabalin ti esurat a kita idiay {{SITENAME}}, lukatam daytoy a panilpo dita pabasabasam:\n\n$3\n\nNo *saanmo* nga inrehistro ti pakabilangam, surutem daytoy a panilpo\nta pasardengem ti pinakasingkedan ti esurat a pagtaengam:\n\n$5\n\nDaytoy a kodigo a pasingkedan ket agpaso iti $4.",
-       "confirmemail_body_set": "Addaan, baka sika met laeng, manipud ti IP a pagtaengan ti $1,\nket nangikabil ti esurat a pagtaengan ti pakabilangan ti \"$2\" iti daytoy a pagtaengan idiay {{SITENAME}}\n\nTapno mapasingkedan daytoy a pakabilangan ket agpayso a kukuam ken \npakabaelan dagiti esurat a langa idiay {{SITENAME}}, lukatam daytoy a silpo idiay pabasabasam:\n\n$3\n\nNo daytoy a pakabilangan ket *saanmo* a kukua, surutem daytoy a silpo\ntapno ukasen ti panagpasingked ti esurat a pagtaengan:\n\n$5\n\nDaytoy a panagpasingked ti kodigo ket agpaso intono $4.",
+       "confirmemail_subject": "Pammasingked ti adres ti esurat ti {{SITENAME}}",
+       "confirmemail_body": "Addaan, baka sika, ti naggapu ti adres ti IP ti $1,\nket nagrehistro ti pakabilangan \"$2\" iti daytoy nga adres ti esurat iti {{SITENAME}}\n\nTapno mapasingkedan a daytoy a pakabilangan ket kukuam ken ti \npinagpabalin ti esurat a kita iti {{SITENAME}}, lukatam daytoy a silpo dita pabasabasam:\n\n$3\n\nNo *saanmo* nga inrehistro ti pakabilangam, surotem daytoy a silpo\nta pasardengem ti panagpasingked ti adres ti esuratmo:\n\n$5\n\nDaytoy a kodigo ti pammasingked ket agpaso intono $4.",
+       "confirmemail_body_changed": "Addaan, baka sika, ti naggapu ti adres ti IP ti $1,\nket nangsukat ti adres ti esurat ti pakabilangan \"$2\" iti daytoy ngaadres iti {{SITENAME}}\n\nTapno mapasingkedan daytoy a pakabilangan ket kukuam ken ti \npanagpabalin ti esurat a kita idiay {{SITENAME}}, lukatam daytoy a panilpo dita pabasabasam:\n\n$3\n\nNo *saanmo* nga inrehistro ti pakabilangam, surutem daytoy a silpo\nta pasardengem ti panagpasingked ti adres ti esuratmo:\n\n$5\n\nDaytoy a kodigo a pammasingked ket agpaso intono $4.",
+       "confirmemail_body_set": "Addaan, baka sika met laeng, manipud iti adres ti IP ti $1,\nket nangikabil ti adres ti esurat ti pakabilangan ti \"$2\" iti daytoy nga adres iti {{SITENAME}}\n\nTapno mapasingkedan daytoy a pakabilangan ket agpayso a kukuam ken \npakabaelan dagiti esurat a langa iti {{SITENAME}}, lukatam daytoy a silpo iti pabasabasam:\n\n$3\n\nNo daytoy a pakabilangan ket *saanmo* a kukua, surutem daytoy a silpo\ntapno ukasen ti panagpasingked ti adres ti esurat:\n\n$5\n\nDaytoy a panagpasingked ti kodigo ket agpaso intono $4.",
        "confirmemail_invalidated": "Naukas ti pammasingked ti esurat a pagtaengam",
        "invalidateemail": "Ukasen ti pammasingked ti esurat",
        "notificationemail_subject_changed": "Nabaliwanen ti nairehistro nga adres ti esurat ti {{SITENAME}}",
        "confirmrecreate": "{{GENDER:$1|Inikkat}} ni agar-aramat [[User:$1|$1]] ([[User talk:$1|tungtungan]])  daytoy a panid kalpasan idi nangrugika nga agurnos iti rason a:\n: <em>$2</em>\nPangngaasi a pasingkedan no agpayso a kayatmo a partuaten manen daytoy a panid",
        "confirmrecreate-noreason": "{{GENDER:$1|Inikkat}} ni agar-aramat [[User:$1|$1]] ([[User talk:$1|tungtungan]]) daytoy a panid kalpasan idi nangrugika nga agurnos. Pangngaasi a pasingkedan no agpayso a kayatmo a partuaten manen daytoy a panid.",
        "recreate": "Partuaten manen",
+       "confirm-purge-title": "Purgaen daytoy a panid",
        "confirm_purge_button": "Sige",
        "confirm-purge-top": "Dalusan ti cache daytoy a panid?",
        "confirm-purge-bottom": "Ti panagpurga ti panid ket dalusanna ti cache ken pursaranna nga iparang dagiti agdama rebision.",
        "confirm-watch-button": "Sige",
        "confirm-watch-top": "Inayon daytoy a panid iti listaan ti bambantayam?",
        "confirm-unwatch-button": "Sige",
-       "confirm-unwatch-top": "Ikkatem daytoy a panid manipud ti listaan ti bambantayam?",
+       "confirm-unwatch-top": "Ikkatem daytoy a panid manipud iti listaan ti bambantayam?",
        "confirm-rollback-button": "Sige",
        "confirm-rollback-top": "Isubli dagiti panagurnos iti daytoy a panid?",
        "quotation-marks": "\"$1\"",
        "lag-warn-normal": "Dagiti panangbalbaliw a nabarbaro ngem $1 {{PLURAL:$1|a segundo|a segsegundo}} ket mabalin a saan a maiparang iti daytoy a listaan.",
        "lag-warn-high": "Gapu ti kinabuntog ti database server, dagiti nasukatan a barbaro ngem $1 {{PLURAL:$1|a segundo|a segegundo}} ket mabalin a saan nga agparang iti daytoy a listaan.",
        "watchlistedit-normal-title": "Urnosen ti listaan ti bambantayan",
-       "watchlistedit-normal-legend": "Ikkaten dagiti titulo manipud ti listaan ti bambantayam",
+       "watchlistedit-normal-legend": "Ikkaten dagiti titulo manipud iti listaan ti bambantayam",
        "watchlistedit-normal-explain": "Dagiti titulo ti listaan ti bambantayam ket naipakita dita baba.\nTi mangikkat ti titulo, ikur-it ti kaaripingna a kahon, ken pinduten ti \"{{int:Watchlistedit-normal-submit}}\".\nMabalinmo pay nga [[Special:EditWatchlist/raw|urnosen ti naata a listaan]].",
        "watchlistedit-normal-submit": "Ikkaten dagiti titulo",
-       "watchlistedit-normal-done": "{{PLURAL:$1|1 ti titulo|$1 dagiti titulo}} a naikkat manipud ti listaan ti bambantayam:",
+       "watchlistedit-normal-done": "{{PLURAL:$1|Ti bugbugtong a titulo|Dagiti $1 a titulo}} ket naikkat manipud iti listaan ti bambantayam:",
        "watchlistedit-raw-title": "Urnosen ti naata a listaan ti bambantayan",
        "watchlistedit-raw-legend": "Urnosen ti naata a listaan ti bambantayan",
        "watchlistedit-raw-explain": "Dagiti titulo ti listaan ti bambantayam ket naipakita dita baba, ken mabaliwam nga urnosen babaen ti panagnayon ken panagkissay manipud ti listaan;\nmaysa a titulo tunggal maysa a linia.\nNo malpaska, pinduten ti \"{{int:Watchlistedit-raw-submit}}\".\nMabalinmo pay nga [[Special:EditWatchlist|usaren ti pagalagadan nga editor]].",
        "watchlistedit-raw-removed": "{{PLURAL:$1|1 a titulo|$1 kadagiti titulo}} ti naikkat:",
        "watchlistedit-clear-title": "Dalusan ti listaan ti bambantayan",
        "watchlistedit-clear-legend": "Dalusan ti listaan ti bambantayan",
-       "watchlistedit-clear-explain": "Amin dagiti titulo ket maikkatto manipud ti listaan ti bambantayam",
+       "watchlistedit-clear-explain": "Amin dagiti titulo ket maikkatto manipud iti listaan ti bambantayam",
        "watchlistedit-clear-titles": "Dagiti titulo:",
        "watchlistedit-clear-submit": "Dalusan ti listaan ti bambantayan (Daytoy ket permanente!)",
        "watchlistedit-clear-done": "Nadalusanen ti bambantayam.",
        "version-poweredby-others": "dadduma pay",
        "version-poweredby-translators": "dagiti agipatpatarus iti translatewiki.net",
        "version-credits-summary": "Kayatmi koma a pammadayawan dagiti sumaganad a tao para kadagiti kontribusonda iti [[Special:Version|MediaWiki]].",
-       "version-license-info": "Ti MediaWiki ket nawaya a sopwer; mabalinmo nga iwaras ken/wenno baliwan babaen kadagiti termino ti GNU General Public License a naipablaak babaen ti Free Software Foundation; wenno bersion 2 iti Lisensia, wenno (ti panagpilim) ti  aniaman a naudi a bersion.\n\nTi MediaWiki ket naiwarwaras iti namnama a makatulongto, ngem AWAN TI ANIA MAN A GARANTIA; nga awan pay ti naibagbaga a PANNAKAILAKO wenno KALAINGANNA ITI DAYTOY A PANGGEP. Kitaen ti GNU General Public License para kadagiti adu pay a salaysay.\n\nNaka-awatka koman ti [{{SERVER}}{{SCRIPTPATH}}/COPYING kopia iti GNU General Public License] a nairaman iti daytoy a programa; no saan, agsuratka idiay Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA wenno [//www.gnu.org/licenses/old-licenses/gpl-2.0.html basaem iti online].",
+       "version-license-info": "Ti MediaWiki ket nawaya a sopwer; mabalinmo nga iwaras ken/wenno baliwan babaen kadagiti termino ti GNU General Public License a naipablaak babaen ti Free Software Foundation; wenno bersion 2 iti Lisensia, wenno (ti panagpilim) ti  ania man a naudi a bersion.\n\nTi MediaWiki ket naiwarwaras iti namnama a makatulongto, ngem AWAN TI ANIA MAN A GARANTIA; nga awan pay ti naibagbaga a PANNAKAILAKO wenno KALAINGANNA ITI DAYTOY A PANGGEP. Kitaen ti GNU General Public License para kadagiti adu pay a salaysay.\n\nNaka-awatka koman ti [{{SERVER}}{{SCRIPTPATH}}/COPYING kopia iti GNU General Public License] a nairaman iti daytoy a programa; no saan, agsuratka idiay Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA wenno [//www.gnu.org/licenses/old-licenses/gpl-2.0.html basaem iti online].",
        "version-software": "Naisaad a sopwer",
        "version-software-product": "Produkto",
        "version-software-version": "Bersion",
        "fileduplicatesearch": "Agbiruk kadagiti duplikado a papeles",
        "fileduplicatesearch-summary": "Agbiruk kadagiti duplikado a papeles a naibatay kadagiti pateg ti hash.",
        "fileduplicatesearch-filename": "Nagan ti papeles:",
-       "fileduplicatesearch-submit": "Biruken",
+       "fileduplicatesearch-submit": "Agbiruk",
        "fileduplicatesearch-info": "$1 × $2 a piksel<br />Rukod ti papeles: $3<br />Kita ti MIME: $4",
        "fileduplicatesearch-result-1": "Awan ti kapadpadana a duplikado ti papeles ti \"$1\".",
        "fileduplicatesearch-result-n": "Ti papeles ti \"$1\" ket addaan {{PLURAL:$2|iti 1 nga agpadpada a duplikado|kadagiti $2 nga agpadpada a duplikado}}.",
        "tags-create-warnings-above": "Nakasarak {{PLURAL:$2|iti sumaganad a ballaag|kadagiti sumaganad a ballaag}} idi nagpadas a nagpartuat iti etiketa ti \"$1\":",
        "tags-create-warnings-below": "Kayatmo kadi ti agtuloy nga agpartuat iti etiketa?",
        "tags-delete-title": "Ikkaten ti etiketa",
-       "tags-delete-explanation-initial": "Ik-ikkatemon ti etiketa ti \"$1\" manipud ti database.",
+       "tags-delete-explanation-initial": "Ik-ikkatemon ti etiketa ti \"$1\" manipud iti database.",
        "tags-delete-explanation-in-use": "Daytoy ket maikkatto manipud {{PLURAL:$2|kadagiti $2 a rebision wenno naikabil iti listaan|kadagiti amin a $2 a rebision/wenno naikabil iti listaan}} iti agdama  a nakaipakatanna.",
        "tags-delete-explanation-warning": "Daytoy nga aksion ket <strong>saan a maipasubli</strong> ken <strong>saan a mabalin nga ibabawi</strong>, urayno babaen dagiti administradore ti database. Siguraduem a daytoy ti etiketa a kayatmo nga ikkaten.",
        "tags-delete-explanation-active": "<strong>Aktibo pay laeng ti etiketa ti \"$1\", ken agtuloy a maipakat iti masakbayan.</strong> Tapno mangpasardeng daytoy a mapasamak, mapan iti lugar wenno luglugar nga ayan a pakaipakatanto ti etiketa, ken ibaldado idiay.",
        "feedback-bugornote": "No sisasagakan nga agibaga ti teknikal a pakirut a naisalaysay pangngaasi nga [$1 ireporta ti parikut].\nNupay kasta, mausarmo ti nalaka a porma dita baba. Ti komentario nga itedmo ket mainayon iti panid \"[$3 $2], a mairaman ti naganmo nga agar-aramat ken no ania ti pagbasabasa nga us-sarem.",
        "feedback-cancel": "Ukasen",
        "feedback-close": "Nalpasen",
-       "feedback-error1": "Biddut: Saan a malasin dagiti nagbanagan manipud ti API",
+       "feedback-error1": "Biddut: Saan a malasin dagiti nagbanagan manipud iti API",
        "feedback-error2": "Biddut: Napaay ti panagurnos",
-       "feedback-error3": "Biddut: Awan ti sungbat manipud ti API",
+       "feedback-error3": "Biddut: Awan ti sungbat manipud iti API",
        "feedback-error4": "Biddut:Saan a naipablak iti naited a titulo ti feedback",
        "feedback-message": "Mensahe:",
        "feedback-subject": "Suheto:",
        "pagelang-select-lang": "Agpili iti pagsasao",
        "pagelang-reason": "Rason",
        "pagelang-submit": "Ited",
+       "pagelang-nonexistent-page": "Awan ti panid ti $1.",
        "right-pagelang": "Baliwan ti pagsasao ti panid",
        "action-pagelang": "baliwan ti pagsasao ti panid",
        "log-name-pagelang": "Listaan ti panagbaliw ti pagsasao",
        "restrictionsfield-badip": "Imbalido nga adres ti IP wenno sakup: $1",
        "restrictionsfield-label": "Dagiti mapalubosan a sakup ti IP:",
        "revid": "rebision $1",
-       "pageid": "ID ti panid $1"
+       "pageid": "ID ti panid $1",
+       "gotointerwiki": "Pumanpanaw iti {{SITENAME}}"
 }
index 4f3d944..4feb7b8 100644 (file)
        "rcshowhidemine": "$1 хьа нийсдараш",
        "rcshowhidemine-show": "Хьахьокха",
        "rcshowhidemine-hide": "Къайладаккха",
-       "rclinks": "Хьахьокха $2 дийнахь даь хинна тIеххьара $1 хувцамаш\n<br />$3",
+       "rclinks": "Хьахьокха $2 дийнахь даь хинна тIеххьара $1 хувцамаш",
        "diff": "башхало",
        "hist": "истори",
        "hide": "Къайладаккха",
index 1814b46..716525a 100644 (file)
        "login": "Enirar",
        "login-security": "Kontrolez vua identeso.",
        "nav-login-createaccount": "Enirar / Krear konto",
-       "userlogin": "Enirar / krear konto",
-       "userloginnocreate": "Enirar",
        "logout": "Ekirar",
        "userlogout": "Ekirar",
        "notloggedin": "Sesiono ne esas iniciata",
        "userlogin-noaccount": "Ka vu ne havas konto?",
        "userlogin-joinproject": "Enirez la {{SITENAME}}",
-       "nologin": "Ka vu ne havas konto? $1.",
-       "nologinlink": "Kreez konto",
        "createaccount": "Krear nova konto",
-       "gotaccount": "Ka vu ja havas konto? '''$1'''.",
-       "gotaccountlink": "Enirar",
-       "userlogin-resetlink": "Ka tu obliviis la detalii pri tua konekto?",
        "userlogin-resetpassword-link": "Ka tu obliviis tua pasovorto?",
        "userlogin-helplink2": "Helpo pri quale enirar",
        "userlogin-loggedin": "Tu ja eniris, kun la nomo {{GENDER:$1|$1}}\n\nUsez la formulario infre por enirar quale altra uzero.",
        "createacct-another-email-ph": "Prizentez vua e-postal adreso",
        "createaccountmail": "Uzez provizora pasovorto, ed ad adresizez ol a la korespondanta e-posto",
        "createacct-realname": "Vera nomo (fakultativa)",
-       "createaccountreason": "Motivo:",
        "createacct-reason": "Motivo",
        "createacct-reason-ph": "Pro quo tu kreas nova konto",
        "createacct-submit": "Kreez konto",
        "recentchanges-label-unpatrolled": "Ica modifiko ne patroliesas ankore.",
        "recentchanges-label-plusminus": "La pagino modifikesis segun ica quanto di *bicoki",
        "recentchanges-legend-newpage": "$1 - nova pagino",
-       "rcfilters-filter-userExpLevel-experienced-description": "Plu kam 30 dii di agemeso e 500 redakti.",
+       "rcfilters-filter-user-experience-level-experienced-description": "Plu kam 30 dii di agemeso e 500 redakti.",
        "rcnotefrom": "Infre esas la lasta chanji depos '''$2''' (montrita til '''$1''').",
        "rclistfrom": "Montrar nova chanji startante de $3 $2",
        "rcshowhideminor": "$1 mikra redakti",
        "rcshowhidemine": "$1 mea redakti",
        "rcshowhidemine-show": "Montrar",
        "rcshowhidemine-hide": "Celar",
-       "rclinks": "Montrar la lasta $1 chanji dum la lasta $2 dii<br />$3",
+       "rclinks": "Montrar la lasta $1 chanji dum la lasta $2 dii",
        "diff": "dif",
        "hist": "vers",
        "hide": "Celar",
        "logentry-newusers-create": "La konto dil uzero $1 kreesis.",
        "logentry-upload-upload": "$1 {{GENDER:$2|uploaded}} $3",
        "rightsnone": "(nula)",
-       "revdelete-summary": "redakto-rezumo",
        "searchsuggest-search": "Serchez en {{SITENAME}}",
        "searchsuggest-containing": "quan kontenas...",
        "expand_templates_output": "Rezulto",
index d2487dd..381ee4b 100644 (file)
        "right-editprotected": "Breyta síðum vernduðum sem „{{int:protect-level-sysop}}“",
        "right-editsemiprotected": "Breyta síðum vernduðum sem „{{int:protect-level-autoconfirmed}}“",
        "right-editinterface": "Breyta notandaviðmótinu",
-       "right-editusercssjs": "Breyta CSS- og JS-skrám annarra",
        "right-editusercss": "Breyta CSS-skrám annarra",
        "right-edituserjs": "Breyta JS-skrám annarra",
        "right-editmyusercss": "Breyta þinni eigin CSS-notandaskrá",
        "rcshowhidecategorization": "$1 flokkun síðna",
        "rcshowhidecategorization-show": "Birta",
        "rcshowhidecategorization-hide": "Fela",
-       "rclinks": "Sýna síðustu $1 breytingar síðustu $2 daga<br />$3",
+       "rclinks": "Sýna síðustu $1 breytingar síðustu $2 daga",
        "diff": "breyting",
        "hist": "breytingaskrá",
        "hide": "Fela",
        "undeleteviewlink": "skoða",
        "undeleteinvert": "Snúa vali við",
        "undeletecomment": "Ástæða:",
-       "undeletedrevisions": "$1 {{PLURAL:$1|breyting endurvakin|breytingar endurvaktar}}",
-       "undeletedrevisions-files": "$1 {{PLURAL:$1|breyting|breytingar}} og $2 {{PLURAL:$2|skrá|skrár}} endurvaktar",
-       "undeletedfiles": "$1 {{PLURAL:$1|skrá endurvakin|skrár endurvaktar}}",
        "cannotundelete": "Afturköllun eyðingar mistókst að hluta eða í heild: \n$1",
        "undeletedpage": "'''$1 var endurvakin'''\n\nSkoðaðu [[Special:Log/delete|eyðingaskrána]] til að skoða eyðingar og endurvakningar.",
        "undelete-header": "Sjá [[Special:Log/delete|eyðingarskrá]] fyrir síður sem nýlega hefur verið eytt.",
index 5600743..d14c1af 100644 (file)
                        "Tosky",
                        "Selven",
                        "Margherita.mignanelli",
-                       "Redredsonia"
+                       "Redredsonia",
+                       "Luigi.delia",
+                       "Samuele2002"
                ]
        },
        "tog-underline": "Sottolinea i collegamenti:",
        "readonlywarning": "<strong>Attenzione</strong>: il database è bloccato per manutenzione, non è momentaneamente possibile salvare le modifiche effettuate.\nPer non perderle, copiale in un file di testo e salvalo in attesa dello sblocco del database.\n\nL'amministratore di sistema che impostato il blocco ha fornito questa spiegazione: $1.",
        "protectedpagewarning": "'''Attenzione: questa pagina è stata bloccata in modo che solo gli utenti con privilegi di amministratore possano modificarla.'''\nL'ultimo elemento del registro è riportato di seguito per informazione:",
        "semiprotectedpagewarning": "'''Nota:''' Questa pagina è stata bloccata in modo che solo gli utenti registrati possano modificarla.\nL'ultimo elemento del registro è riportato di seguito per informazione:",
-       "cascadeprotectedwarning": "<strong>Attenzione:</strong> Questa pagina è stata bloccata in modo che solo gli utenti con privilegi di amministratore possano modificarla poiché è inclusa selezionando la protezione \"ricorsiva\" {{PLURAL:$1|nella pagina|nelle pagine}}:",
+       "cascadeprotectedwarning": "<strong>Attenzione:</strong> questa pagina è stata bloccata in modo che solo gli utenti con [[Special:ListGroupRights|diritti specifici]] possano modificarla poiché è inclusa, selezionando la protezione \"ricorsiva\", {{PLURAL:$1|nella pagina|nelle pagine}}:",
        "titleprotectedwarning": "'''Attenzione: questa pagina è stata bloccata in modo che siano necessari [[Special:ListGroupRights|diritti specifici]] per crearla.'''\nL'ultimo elemento del registro è riportato di seguito per informazione:",
        "templatesused": "{{PLURAL:$1|Template utilizzato|Template utilizzati}} in questa pagina:",
        "templatesusedpreview": "{{PLURAL:$1|Template utilizzato|Template utilizzati}} in questa anteprima:",
        "saveusergroups": "Salva gruppi {{GENDER:$1|utente}}",
        "userrights-groupsmember": "Appartiene {{PLURAL:$1|al gruppo|ai gruppi}}:",
        "userrights-groupsmember-auto": "Membro implicito di:",
-       "userrights-groups-help": "È possibile modificare i gruppi cui è assegnato l'utente.\n* Una casella di spunta selezionata indica l'appartenenza dell'utente al gruppo\n* Una casella di spunta deselezionata indica la sua mancata appartenenza al gruppo.\n* Il simbolo * indica che non è possibile eliminare l'appartenenza al gruppo dopo averla aggiunta (o viceversa).\n* Il simbolo # indica che puoi solo mettere indietro la data di scadenza di questo gruppo; non è possibile portare avanti.",
+       "userrights-groups-help": "È possibile modificare i gruppi cui è assegnato l'utente.\n* Una casella di spunta selezionata indica l'appartenenza dell'utente al gruppo\n* Una casella di spunta deselezionata indica la sua mancata appartenenza al gruppo\n* Il simbolo * indica che non è possibile eliminare l'appartenenza al gruppo dopo averla aggiunta (o viceversa)\n* Il simbolo # indica che puoi solo mettere indietro la data di scadenza di appartenenza a questo gruppo; non è possibile portarla avanti",
        "userrights-reason": "Motivo:",
        "userrights-no-interwiki": "Non si dispone dei permessi necessari per modificare i diritti degli utenti su altri siti.",
        "userrights-nodatabase": "Il database $1 non esiste o non è un database locale.",
        "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-cannot-shorten-expiry": "Non puoi anticipare la scadenza dell'appartenenza al 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",
        "right-editsemiprotected": "Modifica pagine protette con \"{{int:protect-level-autoconfirmed}}\"",
        "right-editcontentmodel": "Modifica il modello di contenuto di una pagina",
        "right-editinterface": "Modifica l'interfaccia utente",
-       "right-editusercssjs": "Modifica i file CSS e JS di altri utenti",
        "right-editusercss": "Modifica i file CSS di altri utenti",
        "right-edituserjs": "Modifica i file JS di altri utenti",
        "right-editmyusercss": "Modifica il file CSS del proprio utente",
        "rcfilters-noresults-conflict": "Nessun risultato trovato, perché i criteri di ricerca sono in conflitto",
        "rcfilters-filtergroup-registration": "Registrazione utente",
        "rcfilters-filter-registered-label": "Registrato",
+       "rcfilters-filter-unregistered-label": "Non registrato",
        "rcfilters-filtergroup-authorship": "Modifica paternità",
+       "rcfilters-filter-editsbyself-description": "Proprie modifiche.",
+       "rcfilters-filter-editsbyother-label": "Modifiche di altri",
+       "rcfilters-filter-editsbyother-description": "Modifiche create da altri utenti (non tu).",
+       "rcfilters-filtergroup-automated": "Contributi automatici",
        "rcfilters-filter-bots-label": "Bot",
+       "rcfilters-filter-humans-label": "Umani (non bot)",
        "rcfilters-filter-patrolled-label": "Verificate",
        "rcfilters-filter-patrolled-description": "Modifiche contrassegnate come verificate.",
        "rcfilters-filter-unpatrolled-label": "Non verificate",
        "rcshowhidecategorization": "$1 categorizzazione della pagina",
        "rcshowhidecategorization-show": "Mostra",
        "rcshowhidecategorization-hide": "Nascondi",
-       "rclinks": "Mostra le $1 modifiche più recenti apportate negli ultimi $2 giorni<br />$3",
+       "rclinks": "Mostra le $1 modifiche più recenti apportate negli ultimi $2 giorni",
        "diff": "diff",
        "hist": "cron",
        "hide": "Nascondi",
        "undeleteviewlink": "visualizza",
        "undeleteinvert": "Inverti selezione",
        "undeletecomment": "Motivo:",
-       "undeletedrevisions": "{{PLURAL:$1|Una versione recuperata|$1 versioni recuperate}}",
-       "undeletedrevisions-files": "{{PLURAL:$1|Una versione|$1 versioni}} e $2 file recuperati",
-       "undeletedfiles": "{{PLURAL:$1|Un file recuperato|$1 file recuperati}}",
        "cannotundelete": "Alcuni o tutti i ripristini non riusciti:\n$1",
        "undeletedpage": "'''La pagina $1 è stata recuperata'''\n\nConsulta il [[Special:Log/delete|registro delle cancellazioni]] per vedere le cancellazioni e i recuperi più recenti.",
        "undelete-header": "Consulta il [[Special:Log/delete|registro delle cancellazioni]] per vedere le cancellazioni più recenti.",
        "sp-contributions-uploads": "file caricati",
        "sp-contributions-logs": "registri",
        "sp-contributions-talk": "discussione",
-       "sp-contributions-userrights": "gestione dei permessi",
+       "sp-contributions-userrights": "gestione permessi {{GENDER:$1|utente}}",
        "sp-contributions-blocked-notice": "Questo utente è attualmente bloccato.\nL'ultimo elemento del registro dei blocchi è riportato di seguito per informazione:",
        "sp-contributions-blocked-notice-anon": "Questo indirizzo IP è attualmente bloccato.\nL'ultimo elemento del registro dei blocchi è riportato di seguito per informazione:",
        "sp-contributions-search": "Ricerca contributi",
        "unblocked-id": "Il blocco $1 è stato rimosso",
        "unblocked-ip": "[[Special:Contributions/$1|$1]] è stato sbloccato.",
        "blocklist": "Utenti bloccati",
+       "autoblocklist": "Autoblocchi",
+       "autoblocklist-submit": "Ricerca",
+       "autoblocklist-legend": "Elenca autoblocchi",
+       "autoblocklist-localblocks": "{{PLURAL:$1|Autoblocco locale|Autoblocchi locali}}",
+       "autoblocklist-empty": "L'elenco dei autoblocchi è vuoto.",
+       "autoblocklist-otherblocks": "{{PLURAL:$1|Altro autoblocco|Altri autoblocchi}}",
        "ipblocklist": "Utenti bloccati",
        "ipblocklist-legend": "Cerca un utente bloccato",
        "blocklist-userblocks": "Nascondi i blocchi degli utenti registrati",
        "tooltip-pt-mycontris": "La lista dei {{GENDER:|tuoi}} contributi",
        "tooltip-pt-anoncontribs": "Un elenco delle modifiche fatte da questo indirizzo IP",
        "tooltip-pt-login": "Si consiglia di effettuare l'accesso, anche se non è obbligatorio",
+       "tooltip-pt-login-private": "Devi accedere per utilizzare questo wiki",
        "tooltip-pt-logout": "Uscita (logout)",
        "tooltip-pt-createaccount": "Si consiglia di registrarsi e di effettuare l'accesso, anche se non è obbligatorio",
        "tooltip-ca-talk": "Vedi le discussioni relative a questa pagina",
        "htmlform-user-not-exists": "<strong>$1</strong> non esiste.",
        "htmlform-user-not-valid": "<strong>$1</strong> non è un nome utente valido.",
        "logentry-delete-delete": "$1 {{GENDER:$2|ha cancellato}} la pagina $3",
-       "logentry-delete-restore": "$1 {{GENDER:$2|ha ripristinato}} la pagina \"$3\"",
+       "logentry-delete-restore": "$1 {{GENDER:$2|ha ripristinato}} la pagina $3 ($4)",
+       "logentry-delete-restore-nocount": "$1 {{GENDER:$2|ha ripristinato}} la pagina $3",
+       "restore-count-revisions": "{{PLURAL:$1|1 versione|$1 versioni}}",
+       "restore-count-files": "{{PLURAL:$1|1 file|$1 file}}",
        "logentry-delete-event": "$1 {{GENDER:$2|ha modificato}} la visibilità di {{PLURAL:$5|un'azione del registro|$5 azioni del registro}} di \"$3\": $4",
        "logentry-delete-revision": "$1 {{GENDER:$2|ha modificato}} la visibilità per {{PLURAL:$5|una versione|$5 versioni}} della pagina $3: $4",
        "logentry-delete-event-legacy": "$1 {{GENDER:$2|ha modificato}} la visibilità di alcune azioni del registro di $3",
        "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",
-       "rawhtml-notallowed": "I tag &lt;html&gt; non possono essere utilizzati al di fuori delle normali pagine."
+       "rawhtml-notallowed": "I tag &lt;html&gt; non possono essere utilizzati al di fuori delle normali pagine.",
+       "gotointerwiki": "Stai per lasciare {{SITENAME}}",
+       "gotointerwiki-invalid": "Il titolo specificato non è valido.",
+       "gotointerwiki-external": "Stai per lasciare {{SITENAME}} per visitare [[$2]] che è un diverso sito web.\n\n[$1 Clicca qui per continuare su $1].",
+       "undelete-cantedit": "Non puoi ripristinare questa pagina poiché non hai sufficienti permessi per modificarla.",
+       "undelete-cantcreate": "Non puoi ripristinare questa pagina poiché la pagina con questo nome non è ancora inesistente e non hai sufficienti permessi per crearla."
 }
index bfa4829..508d59a 100644 (file)
        "readonlywarning": "<strong>警告: データベースがメンテナンスのためロックされており、現在は編集内容を保存できません。</strong>\n必要であれば文章をコピー&amp;ペーストしてテキストファイルとして保存し、後ほど保存をやり直してください。\n\nデータベースをロックしたシステム管理者による説明は以下の通りです: $1",
        "protectedpagewarning": "<strong>警告: このページは保護されているため、管理者権限を持つ利用者のみが編集できます。</strong>\n参考として以下に最後の記録を表示します:",
        "semiprotectedpagewarning": "<strong>注意:</strong> このページは保護されているため、登録利用者のみが編集できます。\n参考として以下に最後の記録を表示します:",
-       "cascadeprotectedwarning": "<strong>警告:</strong> このページはカスケード保護されている以下の{{PLURAL:$1|ページ|ページ群}}からトランスクルードのため読み込まれているので、管理者権限を持つ利用者のみが編集できるように保護されています:",
+       "cascadeprotectedwarning": "<strong>警告:</strong> このページはカスケード保護されている以下の{{PLURAL:$1|ページ|ページ群}}からトランスクルードのため読み込まれているので、[[Special:ListGroupRights|特定の権限]]を持つ利用者のみが編集できるように保護されています:",
        "titleprotectedwarning": "<strong>警告: このページは保護されているため、作成には[[Special:ListGroupRights|特定の権限]]が必要です。</strong>\n参考として以下に最後の記録を表示します:",
        "templatesused": "このページで使用されている{{PLURAL:$1|テンプレート}}:",
        "templatesusedpreview": "このプレビューで使用されている{{PLURAL:$1|テンプレート}}:",
        "right-editsemiprotected": "「{{int:protect-level-autoconfirmed}}」の保護を設定されたページを編集",
        "right-editcontentmodel": "ページのコンテンツモデルを編集",
        "right-editinterface": "ユーザーインターフェースを編集",
-       "right-editusercssjs": "他の利用者のCSSファイル/JavaScriptファイルを編集",
        "right-editusercss": "他の利用者のCSSファイルを編集",
        "right-edituserjs": "他の利用者のJavaScriptファイルを編集",
        "right-editmyusercss": "自身のCSSファイルを編集",
        "rcshowhidecategorization": "ページのカテゴリー追加・除去を$1",
        "rcshowhidecategorization-show": "表示する",
        "rcshowhidecategorization-hide": "非表示にする",
-       "rclinks": "最近 $2 日間の更新を最大 $1 件表示<br />$3",
+       "rclinks": "最近 $2 日間の更新を最大 $1 件表示",
        "diff": "差分",
        "hist": "履歴",
        "hide": "非表示",
        "activeusers-intro": "これは過去 $1 {{PLURAL:$1|日|日間}}に何らかの活動をした利用者の一覧です。",
        "activeusers-count": "過去 {{PLURAL:$3|1 日|$3 日間}}に $1 {{PLURAL:$1|回の操作}}",
        "activeusers-from": "最初に表示する利用者:",
+       "activeusers-groups": "選択した利用者グループに属する利用者を表示:",
+       "activeusers-excludegroups": "選択した利用者グループに属する利用者を非表示:",
        "activeusers-noresult": "利用者が見つかりませんでした。",
        "activeusers-submit": "活動中の利用者を表示",
        "listgrouprights": "利用者グループの権限",
        "undeleteviewlink": "閲覧",
        "undeleteinvert": "選択を反転",
        "undeletecomment": "理由:",
-       "undeletedrevisions": "{{PLURAL:$1|$1版}}を復元しました",
-       "undeletedrevisions-files": "{{PLURAL:$1|$1版}}と{{PLURAL:$2|$2ファイル}}を復元しました",
-       "undeletedfiles": "{{PLURAL:$1|$1ファイル}}を復元しました",
        "cannotundelete": "復元に一部またはすべて失敗しました:\n$1",
        "undeletedpage": "<strong>$1 を復元しました。</strong>\n\n最近の削除と復元は[[Special:Log/delete|削除記録]]で参照できます。",
        "undelete-header": "最近削除されたページは[[Special:Log/delete|削除記録]]で確認できます。",
        "unblocked-id": "ブロック$1を除去しました。",
        "unblocked-ip": "[[Special:Contributions/$1|$1]]のブロックを解除しました。",
        "blocklist": "ブロックされている利用者",
+       "autoblocklist": "自動ブロック",
+       "autoblocklist-submit": "検索",
+       "autoblocklist-legend": "自動ブロックの一覧",
+       "autoblocklist-localblocks": "ローカルの{{PLURAL:$1|自動ブロック|自動ブロック}}",
+       "autoblocklist-empty": "自動ブロック一覧は空です。",
+       "autoblocklist-otherblocks": "他の{{PLURAL:$1|自動ブロック|自動ブロック}}",
        "ipblocklist": "ブロックされている利用者",
        "ipblocklist-legend": "ブロックされている利用者の検索",
        "blocklist-userblocks": "アカウントのブロックを非表示",
index 2b14bfc..67c81c0 100644 (file)
        "externaldberror": "Aida aatentikieshan dietabies era okor ar yu no lou fi opdiet yu extoernal akount.",
        "login": "Lag iin",
        "nav-login-createaccount": "Lag iin / kriet akount",
-       "userlogin": "Lag iin / kriet akount",
-       "userloginnocreate": "Lag iin",
        "logout": "Lag out",
        "userlogout": "Lag out",
        "notloggedin": "No lag iin",
        "userlogin-noaccount": "No gat no akount?‎",
        "userlogin-joinproject": "Jain {{SITENAME}}‎",
-       "nologin": "Naa no akount? $1.",
-       "nologinlink": "Kriet a akount",
        "createaccount": "Kriet akount",
-       "gotaccount": "Aredi gat akount? $1.",
-       "gotaccountlink": "Lag iin",
-       "userlogin-resetlink": "Figet yu lagin detail dem?",
        "userlogin-resetpassword-link": "Figat yu paaswod?‎",
        "userlogin-helplink2": "Elp wid lagiin‎",
        "createacct-emailoptional": "Iimiel ajres (apshanal)",
        "createacct-email-ph": "Enta yu iimiel ajres",
        "createaccountmail": "Bai e-miel",
-       "createaccountreason": "Riizn:",
        "createacct-submit": "Kriet yu akount",
        "createacct-benefit-heading": "{{SITENAME}} mek bai smadi laka yu.",
        "createacct-benefit-body1": "{{PLURAL:$1|edit|edits}}",
        "rcshowhidemine": "$1 mi editdem",
        "rcshowhidemine-show": "Shuo",
        "rcshowhidemine-hide": "Aid",
-       "rclinks": "Shuo laas $1 chienj ina laas $2 die<br />$3",
+       "rclinks": "Shuo laas $1 chienj ina laas $2 die",
        "diff": "dif",
        "hist": "isch",
        "hide": "Aid",
index c57d440..fa6dc1c 100644 (file)
        "recentchanges-summary": "liste loi nu puzi stika le uitki",
        "rcshowhidebots": "$1 lo zmiku",
        "rcshowhideliu": "$1 lo se jaspu pilno",
-       "rclinks": "zgana $1 lo romoi nu stika ca $2 lo romoi djedi<br />$3",
+       "rclinks": "zgana $1 lo romoi nu stika ca $2 lo romoi djedi",
        "diff": "te frica",
        "hist": "galfi plivei",
        "hide": "cancygau",
index 48cf4aa..0b6225e 100644 (file)
        "externaldberror": "Där ä opstotj en fejl i i ekstern adgångsdatabase, elle du hår ett rettihede te å opdatiir denn.",
        "login": "Logg på",
        "nav-login-createaccount": "Oprett e konto ellerlogg på",
-       "userlogin": "Oprett e konto elle logg på",
-       "userloginnocreate": "Logg på",
        "logout": "Logg å",
        "userlogout": "Logg å",
        "notloggedin": "Ikke loggen på",
        "userlogin-noaccount": "Hår du ett e konto?",
        "userlogin-joinproject": "Slut dej te {{SITENAME}}",
-       "nologin": "Du hår iet kronto? $1.",
-       "nologinlink": "Oprett e ny brugekonto",
        "createaccount": "Oprett e ny brugekonto",
-       "gotaccount": "Hår du ållried e konto? '''$1'''.",
-       "gotaccountlink": "Logg på",
-       "userlogin-resetlink": "Hår du glommen din login-oplysnenge?",
        "userlogin-resetpassword-link": "Glommen din adgångskode?",
        "userlogin-helplink2": "Hjälp mä å logg på",
        "userlogin-loggedin": "Du ä ållried loggen på som {{GENDER:$1|$1}}. Brug formulari nierfor te å logg på som i ånj bruge.",
        "createacct-emailoptional": "E-mailadress (walgfri)",
        "createacct-email-ph": "Intast dej e-mailadress",
        "createacct-another-email-ph": "Intast e-mailadress",
-       "createaccountreason": "Begrunjels:",
        "createacct-submit": "Oprett det konto",
        "createacct-another-submit": "Oprett konto",
        "createacct-benefit-heading": "{{SITENAME}} laws å menske som du.",
        "saveprefs": "Djiem instellenge",
        "restoreprefs": "Djensätt åll standardinstellenge (i åll seksjone)",
        "prefs-editing": "Redigiireng",
-       "rows": "Räkke:",
-       "columns": "Kolonne:",
        "searchresultshead": "Syegresultate",
        "stub-threshold": "Græns for stumplinkformatiireng ($1):",
        "stub-threshold-sample-link": "eksempel",
        "rcshowhidemine-hide": "Sjul",
        "rcshowhidecategorization-show": "Wis",
        "rcshowhidecategorization-hide": "Sjul",
-       "rclinks": "Wis siensti $1 øndrenge i di sisti $2 daw<br />$3",
+       "rclinks": "Wis siensti $1 øndrenge i di sisti $2 daw",
        "diff": "forskell",
        "hist": "historik",
        "hide": "Sjul",
index e1472af..9e7dc60 100644 (file)
        "accmailtitle": "Tembung sandi wis kinirim",
        "accmailtext": "Tembung sandi sembarang kanggo [[User talk:$1|$1]] wis dikirim menyang $2.\n\nTembung sandi iki bisa diganti ing kaca <em>[[Special:ChangePassword|salin tembung sandi]]</em> sawisé mlebu log.",
        "newarticle": "(Anyar)",
-       "newarticletext": "Katonané panjenengan ngetutaké pranala artikel sing durung ana.\nManawa kersa manulis artikel iki, manggaa. (Mangga mirsani [$1 Pitulung] kanggo informasi sabanjuré).\nYèn ora sengaja tekan kéné, bisa ngeklik pencètan '''back''' waé ing panjlajah wèb panjenengan.",
+       "newarticletext": "Panjenengan ngetuti pranala sing durung ana.\nKanggo nggawé kaca, gagéa ngetik ing kothak ngisor iki (deleng [$1 kaca pitulung] ngenani katerangané).\nManawa panjenengan tekan kéné awit ora sengaja, kliken tumbul <strong>balik</strong> ana ing pangluruné panjenengan.",
        "anontalkpagetext": "---- ''Iki yaiku kaca dhiskusi sawijining panganggo anonim sing durung kagungan akun utawa ora nganggo akuné, dadi kita keeksa kudu nganggo alamat IP-né kanggo nepangi. Alamat IP kaya mengkéné iki bisa dienggo déning panganggo sing séjé-séjé. Yèn panjenengan pancèn panganggo anonim lan olèh komentar-komentar miring, mangga [[Special:CreateAccount|nggawé akun]] utawa [[Special:UserLogin|log mlebu]] supaya ora rancu karo panganggo anonim liyané ing mangsa ngarep.''",
        "noarticletext": "Kala saiki kaca iki durung ana tulisané.\nSampéyan bisa [[Special:Search/{{PAGENAME}}|nggolèki sesirahing kaca iki]] sajeroning kaca liya,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} nggolèki log sing magepokan],\nutawa [{{fullurl:{{FULLPAGENAME}}|action=edit}} nggawé kaca iki]</span>.",
        "noarticletext-nopermission": "Saiki ora ana tèks ing kaca iki. \nSampéyan bisa [[Special:Search/{{PAGENAME}}|nggolèki judhul kaca iki]] nèng kaca liya, \nutawa <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|kaca={{urlencode:{{FULLPAGENAME}}}}}} nggolèki log sing kaitan]</span>, nanging Sampéyan ora nduwèni idin nggawé kaca iki.",
        "right-editprotected": "Owah kaca-kaca sing direksa (tanpa pangreksan runtun)",
        "right-editsemiprotected": "Owah kaca-kaca sing direksa dadi \"{{int:protect-level-autoconfirmed}}\"",
        "right-editinterface": "Besut antarmuka panganggo",
-       "right-editusercssjs": "Besut barkas-barkas CSS lan JavaScript panganggo liya",
        "right-editusercss": "Besut barkas-barkas CSS panganggo liya",
        "right-edituserjs": "Besut barkas-barkas JavaScript panganggo liya",
        "right-editmyusercss": "Owahi berkas CSS panganggo sampeyan",
        "rcshowhidecategorization": "$1 kategorisasi kaca",
        "rcshowhidecategorization-show": "Tuduhaké",
        "rcshowhidecategorization-hide": "Dhelikaké",
-       "rclinks": "Tuduhaké $1 owahan kawit $2 dina kapungkur.<br />$3",
+       "rclinks": "Tuduhaké $1 owahan kawit $2 dina kapungkur.",
        "diff": "béd",
        "hist": "saj",
        "hide": "Dhelikaké",
        "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é",
        "undeleteviewlink": "pirsani",
        "undeleteinvert": "Walik pilihan",
        "undeletecomment": "Alesan:",
-       "undeletedrevisions": "$1 {{PLURAL:$1|révisi|révisi}} wis dibalèkaké",
-       "undeletedrevisions-files": "$1 {{PLURAL:$1|révisi|révisi}} lan $2 berkas dibalèkaké",
-       "undeletedfiles": "$1 {{PLURAL:$1|berkas|berkas}} dibalèkaké",
        "cannotundelete": "Olèhé mbatalaké pambusakan gagal;\n$1",
        "undeletedpage": "'''$1 bisa dibalèkaké'''\n\nDelengen [[Special:Log/delete|log pambusakan]] kanggo data pambusakan lan pambalèkan.",
        "undelete-header": "Mangga mirsani [[Special:Log/delete|log pambusakan]] kanggo daftar kaca sing lagi waé dibusak.",
        "sp-contributions-newbies": "Namung panganggo-panganggo anyar",
        "sp-contributions-newbies-sub": "Kanggo panganggo anyar",
        "sp-contributions-newbies-title": "Sumbanganing para panganggo anyar",
-       "sp-contributions-blocklog": "Log pemblokiran",
+       "sp-contributions-blocklog": "Log blokir",
        "sp-contributions-deleted": "sumbanganing panganggo sing dibusak",
        "sp-contributions-uploads": "unggahan",
        "sp-contributions-logs": "log",
        "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 3f7fd96..57e041d 100644 (file)
        "savearticle": "გვერდის შენახვა",
        "savechanges": "ცვლილებების შენახვა",
        "publishpage": "გვერდის გამოქვეყნება",
-       "publishchanges": "á\83ªá\83\95á\83\9aá\83\98á\83\9aá\83\94á\83\91á\83\94á\83\91á\83\98á\83¡ á\83\92á\83\90á\83\9bá\83\9dá\83¥á\83\95á\83\94á\83§á\83\9cá\83\94á\83\91ა",
+       "publishchanges": "á\83ªá\83\95á\83\9aá\83\98á\83\9aá\83\94á\83\91á\83\94á\83\91á\83\98á\83¡ á\83¨á\83\94á\83\9cá\83\90á\83®á\83\95ა",
        "preview": "წინასწარი გადახედვა",
        "showpreview": "წინასწარი გადახედვის ჩვენება",
        "showdiff": "ცვლილებების ჩვენება",
        "right-editsemiprotected": "გვერდების რედაქტირება რომლებიც დაცულია როგორც „{{int:protect-level-autoconfirmed}}“",
        "right-editcontentmodel": "გვერდის კონტენტური მოდელის რედაქტირება",
        "right-editinterface": "მომხმარებლის ინტერფეისის შეცვლა",
-       "right-editusercssjs": "სხვა მომხმარებლების CSS- и JS- ფაილების შესწორება",
        "right-editusercss": "სხვა მომხმარებლების CSS- ფაილების შესწორება",
        "right-edituserjs": "სხვა მომხმარებლების JS- ფაილების შესწორება",
        "right-editmyusercss": "თქვენი საკუთარი CSS-ფაილების რედაქტირება",
        "rcshowhidecategorization": "გვერდის კატეგორიზაციის $1",
        "rcshowhidecategorization-show": "ჩვენება",
        "rcshowhidecategorization-hide": "დამალვა",
-       "rclinks": "ბოლო $1 ცვლილების ჩვენება უკანასკნელი $2 დღის მანძილზე<br />$3",
+       "rclinks": "ბოლო $1 ცვლილების ჩვენება უკანასკნელი $2 დღის მანძილზე",
        "diff": "განსხ.",
        "hist": "ისტ.",
        "hide": "დამალვა",
        "undeleteviewlink": "იხილე",
        "undeleteinvert": "გააუქმეთ გამოყოფა",
        "undeletecomment": "მიზეზი:",
-       "undeletedrevisions": "$1 ვერსია აღდგენილია",
-       "undeletedrevisions-files": "$1 ვერსია და $2 ფაილი აღდგენილია",
-       "undeletedfiles": "$1 ფაილი აღდგენილია",
        "cannotundelete": "ზოგიერთი ან ყველა წაშლის გაუქმება ვერ განხორციელდა:\n$1",
        "undeletedpage": "'''$1 აღდგენილია'''\n\nუკანასკნელი წაშლილთა და აღდგენის სია შეგიძლიათ ნახოთ [[Special:Log/delete|წაშლილთა სიაში]].",
        "undelete-header": "ბოლოს წაშლილი გვერდების სიის ნახვა შეიძლება [[Special:Log/delete|წაშლათა ჟურნალში]].",
index 3397906..44750bc 100644 (file)
        "yourdomainname": "Sizin' domen:",
        "login": "Kiriw",
        "nav-login-createaccount": "Kiriw / akkaunt jaratıw",
-       "userlogin": "Kiriw / akkaunt jaratıw",
        "logout": "Shıg'ıw",
        "userlogout": "Shıg'ıw",
        "notloggedin": "Kirilmegen",
-       "nologin": "Akkauntın'ız joqpa? '''$1'''.",
-       "nologinlink": "Akkaunt jaratın'",
        "createaccount": "Akkaunt jarat",
-       "gotaccount": "Akkauntın'ız barma? '''$1'''.",
-       "gotaccountlink": "Kir",
        "createaccountmail": "Waqtınshalıq parol jaratıw ha'm onı ko'rsetilgen e-mail adresin jiber",
        "badretype": "Siz kiritken parol tuwra kelmedi.",
        "userexists": "Kiritken paydalanıwshı atı ba'nt. \nİltimas, basqa at saylan'.",
        "prefs-resetpass": "Paroldi o'zgertiw",
        "saveprefs": "Saqla",
        "prefs-editing": "O'zgertiw",
-       "rows": "Qatarlar:",
-       "columns": "Bag'analar:",
        "searchresultshead": "İzlew",
        "recentchangesdays": "Aqırg'ı o'zgerislerde ko'rsetiletug'ın ku'nler:",
        "recentchangesdays-max": "(maksimum $1 {{PLURAL:$1|ku'n|ku'n}})",
        "userrights-groupsmember": "Ag'zalıq toparı:",
        "userrights-reason": "Sebep:",
        "userrights-nodatabase": "$1 mag'lıwmatlar bazası ele jaratılmag'an yamasa jergilikli emes.",
-       "userrights-nologin": "Paydalanıwshılar huquqların belgilew ushın administrator akkauntı menen [[Special:UserLogin|kiriwin'iz]] kerek.",
-       "userrights-notallowed": "Sizin' akkauntın'ızda paydalanıwshılardın' huquqın belgilew imka'niyatı joq.",
        "userrights-changeable-col": "O'zgerte alatug'ın toparların'ız",
        "userrights-unchangeable-col": "O'zgerte almaytug'ın toparların'ız",
        "group": "Topar:",
        "right-protect": "Qorg'aw da'relelerin o'zgertiw ha'm qorg'alg'an betlerdi o'zgertiw",
        "right-editprotected": "Qorg'alg'an betlerdi o'zgertiw (kaskadlı qorg'awsız)",
        "right-editinterface": "Paydalanıwshı interfeysin o'zgertiw",
-       "right-editusercssjs": "Basqa paydalanıwshılardın' CSS ha'm JS faylların o'zgertiw",
        "right-editusercss": "Basqa paydalanıwshılardın' CSS faylların o'zgertiw",
        "right-edituserjs": "Basqa paydalanıwshılardın' JS faylların o'zgertiw",
        "right-markbotedits": "Qaytarılg'an o'zgerislerdi botlardiki dep belgilew",
        "rcshowhideanons": "Anonim paydalanıwshılardı $1",
        "rcshowhidepatr": "Tekserilgen o'zgerislerdi $1",
        "rcshowhidemine": "O'zgertiwlerimdi $1",
-       "rclinks": "Aqırg'ı $2 ku'ndegi aqırg'ı $1 o'zgeristi ko'rset<br />$3",
+       "rclinks": "Aqırg'ı $2 ku'ndegi aqırg'ı $1 o'zgeristi ko'rset",
        "diff": "parq",
        "hist": "tar.",
        "hide": "jasır",
        "undeletebtn": "Qayta tiklew",
        "undeletelink": "ko'riw/qayta tiklew",
        "undeletecomment": "Sebep:",
-       "undeletedrevisions": "{{PLURAL:$1|1 nusqa|$1 nusqa}} qayta tiklendi",
-       "undeletedrevisions-files": "{{PLURAL:$1|1 nusqa|$1 nusqa}} ha'm {{PLURAL:$2|1 fayl|$2 fayl}} qayta tiklendi",
-       "undeletedfiles": "{{PLURAL:$1|1 fayl|$1 fayl}} qayta tiklendi",
        "undelete-search-box": "O'shirilgen betlerdi izlew",
        "undelete-search-prefix": "Mınadan baslag'an betlerdi ko'rsetiw:",
        "undelete-search-submit": "İzle",
        "specialpages-group-users": "Paydalanıwshılar ha'm olardın' huqıqları",
        "revdelete-restricted": "administratorlarg'a qollanılg'an sheklewler",
        "revdelete-unrestricted": "administratorlardan alıp taslang'an sheklewler",
-       "rightsnone": "(hesh qanday)",
-       "revdelete-summary": "o'zgerislerdin' qısqasha mazmunı"
+       "rightsnone": "(hesh qanday)"
 }
index 3faa3a8..76149d4 100644 (file)
        "externaldberror": "Yella ugul aberrani n database neɣ ur tettalaseḍ ara ad tbeddleḍ isem an wemseqdac aberrani inek.",
        "login": "Kcem",
        "nav-login-createaccount": "Kcem / Xleq isem n wemseqdac",
-       "userlogin": "Kcem / Xleq isem n wemseqdac",
-       "userloginnocreate": "Qqen",
        "logout": "Ffeɣ",
        "userlogout": "Ffeɣ",
        "notloggedin": "Ur tekcimeḍ ara",
        "userlogin-noaccount": "Ur tesɛiḍ ara amiḍan ?",
        "userlogin-joinproject": "Ddukkel ar {{SITENAME}}",
-       "nologin": "Ur tesɛiḍ ara isem n umseqdac? '''$1'''.",
-       "nologinlink": "Xleq isem n wemseqdac",
        "createaccount": "Xleq isem n wemseqdac",
-       "gotaccount": "Tesɛiḍ yagi isem n wemseqdac? '''$1'''.",
-       "gotaccountlink": "Kcem",
-       "userlogin-resetlink": "Ettuḍ tilɣa n tuqqna ?",
        "userlogin-resetpassword-link": "Ettuḍ awal n uɛaddi ?",
        "userlogin-loggedin": "Teqqneḍ yakan am {{GENDER:$1|$1}}. Seqdec tiferkit ddaw-agi iwakken ad teqqneḍ s umiḍan nniḍen.",
        "userlogin-createanother": "Snulfud amiḍan nniḍen",
        "createacct-another-email-ph": "Sekcem tansa email",
        "createaccountmail": "Seqdec awal n uɛaddi agacuran akudan dɣa ceggeε-it ar tansa email yemlen",
        "createacct-realname": "Isem n tidets (axetṛan)",
-       "createaccountreason": "Ayɣer",
        "createacct-reason": "Taɣẓint",
        "createacct-reason-ph": "Ayɣer ad snulfuḍ amiḍan nniḍen",
        "createacct-submit": "Snulfud amiḍan inek(m)",
        "passwordreset-emaildisabled": "Tiseɣnin email nsant ɣef wiki agi.",
        "passwordreset-username": "Isem n useqdac",
        "passwordreset-domain": "Talɣut :",
-       "passwordreset-capture": "Ẓeṛ tirawt ?",
-       "passwordreset-capture-help": "Lukan ad tekkiḍ ɣef texxamt agi, tirawt (deg-es awal n uɛaddi akudan) att beqqeḍ dɣa ad tetwetceggaɛ i useqdac.",
        "passwordreset-email": "Tansa e-mail :",
        "passwordreset-emailtitle": "Tilɣa n umiḍan ɣef {{SITENAME}}",
        "passwordreset-emailtext-ip": "Yiwen (Ahat kečč/kem, seg tansa IP $1) yessutered awennez n awal n uɛaddi i {{SITENAME}} ($4). {{PLURAL:$3|Amiḍan n useqdac agi yeqqen|imiḍanen n iseqdacen agi qqenen}} s tansa e-mail agi :\n\n$2\n\n{{PLURAL:$3|Awal n uɛaddi uɛḍil agi ad i aff tasewti-s|Awalen n uɛaddi uɛḍilen agi ad affen taseweti nsen}} deg {{PLURAL:$5|yiwen ass|$5 ussan}}. Ilaq tura ad qqeneḍ dɣa ad freneḍ awal n uɛaddi amaynut. Lukan mačči d kečč/kem i xedmen asuter agi, naɣ tecfiḍ tura i awal n uɛaddi inek/inem, tzemreḍ ad eǧǧeḍ izen agi.",
        "saveprefs": "Smekti",
        "restoreprefs": "Err akkw iɣewwaren s lexṣas (deg akkw tigezmiwin)",
        "prefs-editing": "Abedddil",
-       "rows": "Ijerriḍen:",
-       "columns": "Tigejda:",
        "searchresultshead": "Anadi",
        "stub-threshold": "Talast timinegt i <a href=\"#\" class=\"stub\">izdayen ɣer ibegzan</a> (itamḍanen) :",
        "stub-threshold-disabled": "Yensa",
        "userrights-reason": "Ayɣer",
        "userrights-no-interwiki": "Ur tesɛiḍ ara turagt iwakken ad beddeleḍ izerfan n iseqdacen ɣef wiki nniḍen.",
        "userrights-nodatabase": "Taffa n isefka « $1 » ulac itt naɣ mačči d tadigant.",
-       "userrights-nologin": "Ilaq ad [[Special:UserLogin|qqeneḍ]] s yiwen umiḍan anedbal iwakken ad beddeleḍ izerfan n useqdac.",
-       "userrights-notallowed": "Ur tesɛiḍ ara turagt ad rnuḍ neɣ ad ekkeseḍ izerfan n umseqdac.",
        "userrights-changeable-col": "Igrawen i tzemreḍ ad beddeleḍ",
        "userrights-unchangeable-col": "Igrawen ur tzemreḍ ara ad beddeleḍ",
        "userrights-conflict": "Ccwal n ubeddel n izerfan n umseqdac ! Ilaq ad ɛzemeḍ tikelt nniḍen dɣa ad sergegeḍ ibeddilen.",
-       "userrights-removed-self": "Tekkeseḍ s lerbaḥ izerfan inek/inem. Tura ur tzemreḍ ara ad kecmeḍ ar usebtar agi.",
        "group": "Adrum:",
        "group-user": "Iseqdacen",
        "group-autoconfirmed": "Iseqdacen i rgegen",
        "right-editprotected": "Beddel isebtar i gdelen s « {{int:protect-level-sysop}} »",
        "right-editsemiprotected": "Beddel isebtar i gdelen s « {{int:protect-level-autoconfirmed}} »",
        "right-editinterface": "Beddel agrudem n useqdac",
-       "right-editusercssjs": "Beddel ifuyla CSS d JavaScript n iseqdacen nniḍen",
        "right-editusercss": "Beddel ifuyla CSS n iseqdacen nniḍen",
        "right-edituserjs": "Beddel ifuyla JavaScript n iseqdacen nniḍen",
        "right-editmyusercss": "Beddel ifuyla CSS n umseqdac inek/inem",
        "right-siteadmin": "Sekkweṛ naɣ kkes aseḍru i taffa n isefka",
        "right-override-export-depth": "Sifeḍ isebtar akkw d isebtar iqqenen alama tadrut n 5 iswiren",
        "right-sendemail": "Ceggaɛ tirawt i iseqdacen nniḍen",
-       "right-passwordreset": "Ẓeṛ tira n uwennez n awalen uɛaddi",
        "newuserlogpage": "Aɣmis n isnulfan n  imiḍanen n imseqdacen",
        "newuserlogpagetext": "Asebter agi yebeqqeḍ amezruy n usnulfu n imiḍanen n iseqdacen.",
        "rightslog": "Aɣmis n yizerfan n wemseqdac",
        "rcshowhideanons": "$1 n yimseqdacen udrigen",
        "rcshowhidepatr": "$1 n yibeddlen yettwassenqden",
        "rcshowhidemine": "$1 ibeddlen inu",
-       "rclinks": "Ssken $1 n yibeddlen ineggura di $2 n wussan ineggura<br />$3",
+       "rclinks": "Ssken $1 n yibeddlen ineggura di $2 n wussan ineggura",
        "diff": "amgirred",
        "hist": "Amezruy",
        "hide": "Ffer",
        "undeleteviewlink": "ẓeṛ",
        "undeleteinvert": "Snegdam ayen textareḍ",
        "undeletecomment": "Taɣẓint :",
-       "undeletedrevisions": "$1 {{PLURAL:$1|lqem yetwerren|ileqman yetwerren}}",
-       "undeletedrevisions-files": "$1 {{PLURAL:$1|lqem|ileqman}} d $2 {{PLURAL:$2|afaylu|ifuyla}} {{PLURAL:$2|yetwerr|twerren}}",
-       "undeletedfiles": "$1 {{PLURAL:$1|afaylu yetwerr|ifuyla twerren}}",
        "cannotundelete": "Abrir n tiririt :\n$1",
        "undeletedpage": "'''Asebtar $1 yetwerr.'''\n\nZeṛ [[Special:Log/delete|aɣmis n tukksiwin]] iwakken ad zṛeḍ umuɣ n tukksiwin d tiririyin timaynutin.",
        "undelete-header": "Ẓer [[Special:Log/delete|aɣmis n umḥay]] i isebtar ttumḥan tura.",
        "feedback-thanks": "Tanemmirt ! Awennit inek/inem yeffeɣ-d ɣef usebtar \"[$2 $1]\".",
        "searchsuggest-search": "Nadi",
        "searchsuggest-containing": "yesɛan...",
-       "api-error-badaccess-groups": "Ur tesɛiḍ ara turagt ad smireḍ ifuyla ɣef wiki agi.",
        "api-error-badtoken": "Tuccḍa tagensit : yir « tiddest ».",
-       "api-error-copyuploaddisabled": "Issenɣal seg URL nsan ɣef aqeddac agi.",
-       "api-error-duplicate": "{{PLURAL:$1|Yella yakan $2 afaylu nniḍen|Llan yakan $2 ifuyla nniḍen}} ɣef asmel agi s ugbur am winna.",
-       "api-error-duplicate-archive": "{{PLURAL:$1|Yella yakan afaylu nniḍen|Llan yakan ifuyla nniḍen}} ɣef asmel agi s ugbur am winna, maca {{PLURAL:$1|yetwekkes|tetwekksen}}.",
-       "api-error-empty-file": "Afaylu id ceggɛeḍ d-ilem.",
        "api-error-emptypage": "Asnulfu n isebtar ilemawen ur yareg ara.",
-       "api-error-fetchfileerror": "Tuccḍa tagensit : Yella kra ur yaɛeddan ara s luwqem deg tiririt n ufaylu.",
-       "api-error-fileexists-forbidden": "Afaylu s isem \"$1\" yella yakan, dɣa ur nezmer ara at n-mzey.",
-       "api-error-fileexists-shared-forbidden": "Afaylu s isem \"$1\" yella yakan deg ukaram n ifuyla yettwacerken, dɣa ur nezmer ara at n-mzey.",
-       "api-error-file-too-large": "Afaylu id cegɛed d-ameqqṛan aṭas.",
-       "api-error-filename-tooshort": "Isem n ufaylu d-awezzlan aṭas.",
-       "api-error-filetype-banned": "Tawsit agi n ufaylu d-tazanbagt.",
-       "api-error-filetype-banned-type": "''' « .$1 » '''mačči d {{PLURAL:$4|tawit n ufaylu yesɛan turagt|tiwsatin n ufaylu yesɛan turagt}}. \n{{PLURAL:$3|Tawit n ufaylu yesɛan turagt d-wagi :|Tiwsatin n ufaylu yesɛan turagt d-wigi :}} $2.",
-       "api-error-filetype-missing": "Asiɣzef n ufaylu agi ulac-it.",
-       "api-error-hookaborted": "Abeddel i ɛerdeḍ ad xedmeḍ yetweḥbes s tamdeyt n usiɣzef.",
-       "api-error-http": "Tuccḍa tagensit : ur yezmer ara ad yeqqen ar uqeddac.",
-       "api-error-illegal-filename": "Isem n ufaylu agi ur yeɣbel ara.",
-       "api-error-internal-error": "Tuccḍa tagensit : Yella kra ur yelḥa ara s luwqem deg usekker n taktert inek/inem ɣef wiki agi.",
-       "api-error-invalid-file-key": "Tuccḍa tagensit : ulac afaylu deg uḥraz akudan.",
-       "api-error-missingparam": "Tuccḍa tagensit : Xuṣṣen iɣewwaren deg tuttra inek/inem.",
-       "api-error-missingresult": "Tuccḍa tagensit : Ur nezmer ara ad n-ini ma anɣel yetwaxeddem.",
-       "api-error-mustbeloggedin": "Ilaq ad qqeneḍ iwakken ad zdemeḍ ifuyla.",
-       "api-error-mustbeposted": "Tuccḍa tagensit : Tuttra agi teḥwaǧ tarrayt HTTP POST.",
-       "api-error-noimageinfo": "Azdam yetwaxdam, maca aqeddac ur d-yefka ara tilɣa ɣef ufaylu.",
-       "api-error-nomodule": "Tuccḍa tagensit : Ulac azegrir n ussenɣel.",
-       "api-error-ok-but-empty": "Tuccḍa tagensit : Ulac tamrarut seg uqeddac.",
-       "api-error-overwrite": "Asefxes n ufaylu yellan ur yeɣbel ara.",
-       "api-error-stashfailed": "Tuccḍa tagensit : aqeddac ur yezmer ara ad yekles afaylu uɛḍil.",
        "api-error-publishfailed": "Tuccḍa tagensit : Aqeddac yexṣer imi yebɣa ad yessuffeɣ afaylu akudan.",
-       "api-error-stasherror": "Tella tuccḍa imi d-zdemeḍ afaylu iwakken ad yetweffer.",
-       "api-error-timeout": "Aqeddac ur d-yerra ara awal deg ukud yeḥeṛṛen.",
-       "api-error-unclassified": "Yefkad anezri warisem.",
-       "api-error-unknown-code": "Tuccḍa warisem : « $1 »",
-       "api-error-unknown-error": "Tuccḍa tagensit : Yella kra yexṣren deg ussenɣel n ufaylu inek.",
+       "api-error-stashfailed": "Tuccḍa tagensit : aqeddac ur yezmer ara ad yekles afaylu uɛḍil.",
        "api-error-unknown-warning": "Alɣu warisem : \"$1\".",
        "api-error-unknownerror": "Tuccḍa warisem : « $1 »",
-       "api-error-uploaddisabled": "Azdam yensa ɣef wiki agi.",
-       "api-error-verification-error": "Ahat afaylu agi yefsed, neɣ asiɣzef ines ur yeɣbel ara.",
        "duration-seconds": "$1 {{PLURAL:$1|tasint|tisinin}}",
        "duration-minutes": "$1 {{PLURAL:$1|tamrect|timercin}}",
        "duration-hours": "$1 {{PLURAL:$1|asrag|isragen}}",
index 9dd1e0d..8af865a 100644 (file)
        "externaldberror": "Щэуэгъуэ хъуа, аутентификациэ щекӀуэкӀым иэ апхуэдиз пӀалъэ уиӀу щыткъым, уи нэкугъуэ аккаунтыр зэпхъуэкӀын.",
        "login": "Системэм зыкъегъэцIыхуын",
        "nav-login-createaccount": "Ихьэн/щӀэуэ зитхэн",
-       "userlogin": "Ихьэн/зыхэтхэн",
-       "userloginnocreate": "Системэм зыкъегъэцӀыхуын",
        "logout": "ИкӀыжын",
        "userlogout": "ИкӀыжын",
        "notloggedin": "Системэм зэкъебгъэцӀыхуакъым",
-       "nologin": "Аккаунт щыӀэкъэ? '''$1'''.",
-       "nologinlink": "Аккаунт щІын",
        "createaccount": "Аккаун щӀэуэ щӀын",
-       "gotaccount": "Аккаунт щыӀу щыт?  '''$1'''.",
-       "gotaccountlink": "Системэм зыкъегъэцӀыху",
        "createaccountmail": "Электронэ почтэмкӀэ",
-       "createaccountreason": "Щхьэусыгъуэ:",
        "badretype": "Парол иптхахэр зэтеху щытхэкъым.",
        "userexists": "ЦыхухэтыцӀэ иптхар пэмыкӀ гуэрэм къегъэсэбэп.\nПэмыкӀ цӀэ къыхэх.",
        "loginerror": "Логиныр тэрэзкъым",
        "rcshowhideliu": "ЦӀыхухэту, ихьахэр $1",
        "rcshowhideanons": "$1 анонимну",
        "rcshowhidemine": "$1 сгъэтэрэзахэр",
-       "rclinks": "ЗэхъуэкӀыгъуэхэр яужырейхэр $1 гъэлъэгъуэн $2 махуэ<br />$3",
+       "rclinks": "ЗэхъуэкӀыгъуэхэр яужырейхэр $1 гъэлъэгъуэн $2 махуэ",
        "diff": "зэмылI.",
        "hist": "тхыдэ",
        "hide": "ГъэпшкӀун",
        "version-specialpages": "Лэжыгъэ напэкӀуэцӀ",
        "specialpages": "СпецнапэкӀуэцӀхэр",
        "revdelete-restricted": "теубыдыгъуэхэр тхьэмадэхэм ятохуэ",
-       "revdelete-unrestricted": "теубыдыгъуэхэр тхьэмадэхэм ятеха",
-       "revdelete-summary": "зэхъуэкӀыгъуэхэм я тепсэлъыхьыгъуэ"
+       "revdelete-unrestricted": "теубыдыгъуэхэр тхьэмадэхэм ятеха"
 }
index 2f4c06a..5674812 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": "آوا داخل بیکو بچے تان تفصیلاتن روخڅی اسوم",
        "userlogin-resetpassword-link": "کلمہء شناختو روخڅیتام؟",
        "userlogin-helplink2": "لاگن کوراوا مدد کورے",
        "userlogin-createanother": "کھاتہ ساوزاوے",
        "createacct-another-email-ph": "تان ای میلو داخل کورے",
        "createaccountmail": "عارضی پاسورڈ استعمال کورے وا ھورو ای میلا انزاوے",
        "createacct-realname": "اصلی نام (اختیاری)",
-       "createaccountreason": "وجہ:",
        "createacct-reason": "وجہ",
        "createacct-reason-ph": "تو ڈبل کھاتہ کھیوتے ساوزیسان؟",
        "createacct-submit": "کھاتہ ساوزاوے",
        "rcshowhidemine": "ذاتی ترامیم $1",
        "rcshowhidemine-show": "پشاوے",
        "rcshowhidemine-hide": "کھوشتاوے",
-       "rclinks": "آخری $2 آنوسو بیرو $1 تبدیلیان مشاہدہ کورے<br />$3",
+       "rclinks": "آخری $2 آنوسو بیرو $1 تبدیلیان مشاہدہ کورے",
        "diff": "فرق",
        "hist": "تاریخچہ",
        "hide": "مو پشاوے",
index b05a9b6..f04c00a 100644 (file)
        "rcshowhideanons": "$1 karberê anonimi",
        "rcshowhidepatr": "Vırnayışê cıyê vênıtey $1",
        "rcshowhidemine": "Vurnayisanê mı $1",
-       "rclinks": "Peyniya $2 rozu de $1 vurnayisu bıasne <br />$3",
+       "rclinks": "Peyniya $2 rozu de $1 vurnayisu bıasne",
        "diff": "ferq",
        "hist": "ver",
        "hide": "Bınımne",
index 5f62837..d640781 100644 (file)
        "externaldberror": "وسى ارادا نە شەتتىك راستاۋ دەرەكقورىندا قاتە بولدى, نەمەسە شەتتىك تىركەلگىڭىزدى جاڭالاۋ رۇقساتى جوق.",
        "login": "كىرۋ",
        "nav-login-createaccount": "كىرۋ / تىركەلگى جاساۋ",
-       "userlogin": "كىرۋ / تىركەلگى جاساۋ",
        "logout": "شىعۋ",
        "userlogout": "شىعۋ",
        "notloggedin": "كىرمەگەنسىز",
-       "nologin": "كىرمەگەنسىز بە? '''$1'''.",
-       "nologinlink": "تىركەلگى جاساڭىز",
        "createaccount": "جاڭا تىركەلگى",
-       "gotaccount": "الداقاشان تىركەلگىىڭىز بار ما? '''$1'''.",
-       "gotaccountlink": "كىرىڭىز",
        "createaccountmail": "ە-پوشتامەن",
        "badretype": "ەنگىزگەن قۇپىييا سوزدەرىڭىز ٴبىر بىرىنە سايكەس ەمەس.",
        "userexists": "ەنگىزگەن قاتىسۋشى اتىڭىز الداقاشان پايدالانۋدا.\nوزگە اتاۋدى تاڭداڭىز.",
        "prefs-misc": "ارقىيلى",
        "saveprefs": "ساقتا",
        "prefs-editing": "وڭدەۋ",
-       "rows": "جولدار:",
-       "columns": "باعاندار:",
        "searchresultshead": "ىزدەۋ",
        "stub-threshold": "<a href=\"#\" class=\"stub\">بىتەمە سىلتەمەسىن</a> پىشىمدەۋ تابالدىرىعى (بايت):",
        "recentchangesdays": "جۇىقتاعى وزگەرىستەرىندە كورسەتپەك كۇن سانى:",
        "userrights-reason": "سەبەبى:",
        "userrights-no-interwiki": "باسقا ۋىيكىيلەردەگى پايدالانۋشى قۇقىقتارىن وڭدەۋگە رۇقساتىڭىز جوق.",
        "userrights-nodatabase": "$1 دەرەكقورى جوق نە جەرگىلىكتى ەمەس.",
-       "userrights-nologin": "قاتىسۋشى قۇقىقتارىن تاعايىنداۋ ٴۇشىن اكىمشى تىركەلگىسىمەن [[{{#special:Userlogin}}|كىرۋىڭىز]] ٴجون.",
-       "userrights-notallowed": "قاتىسۋشى قۇقىقتارىن تاعايىنداۋ ٴۇشىن تىركەلگىڭىزدە رۇقسات جوق.",
        "userrights-changeable-col": "وزگەرتە الاتىن توپتار",
        "userrights-unchangeable-col": "وزگەرتە المايتىن توپتار",
        "group": "توپ:",
        "right-protect": "قورعاۋ دەڭگەيلەرىن وزگەرتۋ جانە قورعالعان بەتتەردى وڭدەۋ",
        "right-editprotected": "قورعالعان بەتتەردى وڭدەۋ (باۋلى قورعاۋلارسىز)",
        "right-editinterface": "پايدالانۋشىلىق تىلدەسىۋىن وڭدەۋ",
-       "right-editusercssjs": "باسقا قاتىسۋشىلاردىڭ CSS جانە JS فايلدارىن وڭدەۋ",
        "right-editusercss": "باسقا قاتىسۋشىلاردىڭ CSS فايلدارىن وڭدەۋ",
        "right-edituserjs": "باسقا قاتىسۋشىلاردىڭ JS فايلدارىن وڭدەۋ",
        "right-rollback": "بەلگىلى بەتتى وڭدەگەن سوڭعى قاتىسۋشىنىڭ وڭدەمەلەرىنەن جىلدام شەگىندىرۋ",
        "rcshowhideanons": "تىركەلگىسىزدەردى $1",
        "rcshowhidepatr": "زەرتتەلگەن وڭدەمەلەردى $1",
        "rcshowhidemine": "وڭدەمەلەرىمدى $1",
-       "rclinks": "سوڭعى $2 كۇندە بولعان, سوڭعى $1 وزگەرىستى كورسەت<br />$3",
+       "rclinks": "سوڭعى $2 كۇندە بولعان, سوڭعى $1 وزگەرىستى كورسەت",
        "diff": "ايىرم.",
        "hist": "تار.",
        "hide": "جاسىر",
        "undeletebtn": "قالپىنا كەلتىر!",
        "undeletelink": "قالپىنا كەلتىرۋ",
        "undeletecomment": "ماندەمەسى:",
-       "undeletedrevisions": "$1 تۇزەتۋ قالپىنا كەلتىرىلدى",
-       "undeletedrevisions-files": "$1 تۇزەتۋ جانە $2 فايل قالپىنا كەلتىرىلدى",
-       "undeletedfiles": "$1 فايل قالپىنا كەلتىرىلدى",
        "cannotundelete": "جويۋ بولدىرماۋى ٴساتسىز ٴبىتتى;\nباسقا بىرەۋ العاشىندا بەتتىڭ جويۋدىڭ بولدىرماۋى مۇمكىن.",
        "undeletedpage": "'''$1 قالپىنا كەلتىرىلدى'''\n\nجۋىقتاعى جويۋلار مەن قالپىنا كەلتىرۋلەر جونىندە [[{{#special:Log}}/delete|جويۋ جۋرنالىن]] قاراڭىز.",
        "undelete-header": "جۋىقتاعى جويىلعان بەتتەر جونىندە [[{{#special:Log}}/delete|جويۋ جۋرنالىن]] قاراڭىز.",
        "revdelete-restricted": "اكىمشىلەرگە تىيىمدار قولدادى",
        "revdelete-unrestricted": "اكىمشىلەردەن تىيىمداردى الاستادى",
        "rightsnone": "(ەشقانداي)",
-       "revdelete-summary": "وڭدەمەنىڭ قىسقاشا مازمۇنداماسى",
        "expandtemplates": "ۇلگىلەردى ۇلعايتۋ",
        "expand_templates_intro": "وسى قۇرال ارنايى بەتى الدەبىر ٴماتىندى الادى دا,\nبۇنىڭ ىشىندەگى بارلىق كىرىكتەلگەن ۇلگىلەردى مەيلىنشە ۇلعايتادى.\nمىنا <nowiki>{{#language:...}} سىيياقتى جوڭدەتۋ فۋنكتسىييالارىن دا, جانە {{CURRENTDAY}}\nسىيياقتى اينامالىلارىن دا ۇلعايتادى (ناقتى ايتقاندا, قوس قابات ساداق جاقشالار اراسىنداعى بارلىعىن).\nبۇنى ٴوز MediaWiki باعدارلاماسىنان قاتىستى جوڭدەتۋ ساتىن شاقىرىپ ىستەلىنەدى.",
        "expand_templates_title": "ٴماتىن ارالىق اتاۋى ({{FULLPAGENAME}} ت.ب. بەتتەر ٴۇشىن):",
index 5829ad7..5e0b044 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": "Қатысушы атын не құпия сөзді ұмыттыңыз ба?",
        "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-submit": "Тіркеліңіз",
        "right-editsemiprotected": "Қорғалған беттерді өңдеу \"{{int:protect-level-autoconfirmed}}\"",
        "right-editcontentmodel": "Беттің контент моделін өңдеу",
        "right-editinterface": "Қатысушы тілдесіуін өңдеу",
-       "right-editusercssjs": "Басқа қатысушылардың CSS және JS файлдарын өңдеу",
        "right-editusercss": "Басқа қатысушылардың CSS файлдарын өңдеу",
        "right-edituserjs": "Басқа қатысушылардың JavaScript файлдарын өңдеу",
        "right-editmyusercss": "Өзіңіздің қатысушы CSS файлдарыңызды өңдеу",
        "rcshowhidecategorization": "Бет санаттауларын $1",
        "rcshowhidecategorization-show": "көрсету",
        "rcshowhidecategorization-hide": "жасыру",
-       "rclinks": "Соңғы $2 күнде болған соңғы $1 өзгерісті көрсет<br />$3",
+       "rclinks": "Соңғы $2 күнде болған соңғы $1 өзгерісті көрсет",
        "diff": "айырм",
        "hist": "тарихы",
        "hide": "жасыру",
        "undeleteviewlink": "қарау",
        "undeleteinvert": "Таңдалғанды жасыру",
        "undeletecomment": "Себебі:",
-       "undeletedrevisions": "{{PLURAL:$1|1 түзету|$1 түзету}} қалпына келтірілді",
-       "undeletedrevisions-files": "{{PLURAL:$1|1 түзету|$1 түзету}} және {{PLURAL:$2|1 файл|$2 файл}} қалпына келтірілді",
-       "undeletedfiles": "{{PLURAL:$1|1 файл|$1 файл}} қалпына келтірілді",
        "cannotundelete": "Жою болдырмауы сәтсіз бітті;\n$1",
        "undeletedpage": "'''$1 дегенді қалпына келтірді'''\n\nЖуықтағы жоюлар мен қалпына келтірулер жөнінде  [[Special:Log/delete|жою журналын]] қараңыз.",
        "undelete-header": "Жуықтағы жойылған беттер жөнінде  [[Special:Log/delete|жою журналын]] қараңыз.",
        "logentry-tag-update-revision": "$1 $3 беттегі $4 нұсқасына тегті ({{PLURAL:$7|қосты}} $6; {{GENDER:$2|жаңартты}} {{PLURAL:$9|аластатты}} $8)",
        "logentry-tag-update-logentry": "$1 $3 бетіндегі $5 енгізілім журналындағы тегті {{GENDER:$2|жаңартты}} ({{PLURAL:$7|қосты}} $6; {{PLURAL:$9|аластады}} $8)",
        "rightsnone": "(ешқандай)",
-       "revdelete-summary": "өңдеменің қысқаша мазмұндамасы",
        "feedback-adding": "Бетке кері байланыс қосуда...",
        "feedback-back": "Кері",
        "feedback-bugcheck": "Керемет! [$1 белгілі қате] тізімінде сәйкес жазбалар жоқ екендігін тексеріңіз.",
index 7ea4dfd..67ad4ae 100644 (file)
        "externaldberror": "Osı arada ne şettik rastaw derekqorında qate boldı, nemese şettik tirkelgiñizdi jañalaw ruqsatı joq.",
        "login": "Kirw",
        "nav-login-createaccount": "Kirw / Tirkelgi jasaw",
-       "userlogin": "Kirw / Tirkelgi jasaw",
        "logout": "Şığw",
        "userlogout": "Şığw",
        "notloggedin": "Kirmegensiz",
-       "nologin": "Kirmegensiz be? '''$1'''.",
-       "nologinlink": "Tirkelgi jasañız",
        "createaccount": "Jaña tirkelgi",
-       "gotaccount": "Aldaqaşan tirkelgiiñiz bar ma? '''$1'''.",
-       "gotaccountlink": "Kiriñiz",
        "createaccountmail": "e-poştamen",
        "badretype": "Engizgen qupïya sözderiñiz bir birine säýkes emes.",
        "userexists": "Engizgen qatıswşı atıñız aldaqaşan paýdalanwda.\nÖzge atawdı tañdañız.",
        "prefs-misc": "Ärqïlı",
        "saveprefs": "Saqta",
        "prefs-editing": "Öñdew",
-       "rows": "Joldar:",
-       "columns": "Bağandar:",
        "searchresultshead": "İzdew",
        "stub-threshold": "<a href=\"#\" class=\"stub\">Biteme siltemesin</a> pişimdew tabaldırığı (baýt):",
        "recentchangesdays": "Jüıqtağı özgeristerinde körsetpek kün sanı:",
        "right-protect": "Qorğaw deñgeýlerin özgertw jäne qorğalğan betterdi öñdew",
        "right-editprotected": "Qorğalğan betterdi öñdew (bawlı qorğawlarsız)",
        "right-editinterface": "Paýdalanwşılıq tildesiwin öñdew",
-       "right-editusercssjs": "Basqa qatıswşılardıñ CSS jäne JS faýldarın öñdew",
        "right-editusercss": "Basqa qatıswşılardıñ CSS faýldarın öñdew",
        "right-edituserjs": "Basqa qatıswşılardıñ JS faýldarın öñdew",
        "right-rollback": "Belgili betti öñdegen soñğı qatıswşınıñ öñdemelerinen jıldam şegindirw",
        "rcshowhideanons": "Tirkelgisizderdi $1",
        "rcshowhidepatr": "Zerttelgen öñdemelerdi $1",
        "rcshowhidemine": "Öñdemelerimdi $1",
-       "rclinks": "Soñğı $2 künde bolğan, soñğı $1 özgeristi körset<br />$3",
+       "rclinks": "Soñğı $2 künde bolğan, soñğı $1 özgeristi körset",
        "diff": "aýırm.",
        "hist": "tar.",
        "hide": "jasır",
        "undeletebtn": "Qalpına keltir!",
        "undeletelink": "qalpına keltirw",
        "undeletecomment": "Mändemesi:",
-       "undeletedrevisions": "$1 tüzetw qalpına keltirildi",
-       "undeletedrevisions-files": "$1 tüzetw jäne $2 faýl qalpına keltirildi",
-       "undeletedfiles": "$1 faýl qalpına keltirildi",
        "cannotundelete": "Joyw boldırmawı sätsiz bitti;\nbasqa birew alğaşında bettiñ joywdıñ boldırmawı mümkin.",
        "undeletedpage": "'''$1 qalpına keltirildi'''\n\nJwıqtağı joywlar men qalpına keltirwler jöninde [[{{#special:Log}}/delete|joyw jwrnalın]] qarañız.",
        "undelete-header": "Jwıqtağı joýılğan better jöninde [[{{#special:Log}}/delete|joyw jwrnalın]] qarañız.",
        "revdelete-restricted": "äkimşilerge tïımdar qoldadı",
        "revdelete-unrestricted": "äkimşilerden tïımdardı alastadı",
        "rightsnone": "(eşqandaý)",
-       "revdelete-summary": "öñdemeniñ qısqaşa mazmundaması",
        "expandtemplates": "Ülgilerdi ulğaýtw",
        "expand_templates_intro": "Osı qural arnaýı beti äldebir mätindi aladı da,\nbunıñ işindegi barlıq kiriktelgen ülgilerdi meýlinşe ulğaýtadı.\nMına <nowiki>{{</nowiki>#language:...}} sïyaqtı jöñdetw fwnkcïyaların da, jäne <nowiki>{{</nowiki>CURRENTDAY}}\nsïyaqtı aýnamalıların da ulğaýtadı (naqtı aýtqanda, qos qabat sadaq jaqşalar arasındağı barlığın).\nBunı öz MediaWiki bağdarlamasınan qatıstı jöñdetw satın şaqırıp istelinedi.",
        "expand_templates_title": "Mätin aralıq atawı ({{FULLPAGENAME}} t.b. better üşin):",
index dd10a35..4b89a56 100644 (file)
        "rcshowhideanons": "$1 atuisut anonymejusut",
        "rcshowhidepatr": "$1 allannguutit misissorneqarsimasut",
        "rcshowhidemine": "$1 nammineq tapit",
-       "rclinks": "Takutikkit $1 -it allannguutit kingulliit ulluni kingullerni $2 -ni<br />$3",
+       "rclinks": "Takutikkit $1 -it allannguutit kingulliit ulluni kingullerni $2 -ni",
        "diff": "assigiinng",
        "hist": "oqalutt",
        "hide": "Assequt",
index 7cfa046..f357015 100644 (file)
        "right-editsemiprotected": "កែប្រែទំព័រដែលបានការពារដោយ \"{{int:protect-level-autoconfirmed}}\"",
        "right-editcontentmodel": "កែប្រែខ្លឹមសារគំរូរបស់ទំព័រមួយ",
        "right-editinterface": "កែប្រែអន្តរមុខអ្នកប្រើប្រាស់",
-       "right-editusercssjs": "កែប្រែឯកសារ CSS និង JS របស់អ្នកប្រើប្រាស់ផ្សេងទៀត",
        "right-editusercss": "កែប្រែឯកសារ CSS របស់អ្នកប្រើប្រាស់ផ្សេងទៀត",
        "right-edituserjs": "កែប្រែឯកសារ JavaScript របស់អ្នកប្រើប្រាស់ផ្សេងទៀត",
        "right-editmyusercss": "កែប្រែឯកសារ CSS របស់ខ្លួនអ្នកផ្ទាល់",
        "rcshowhidemine-hide": "លាក់",
        "rcshowhidecategorization-show": "បង្ហាញ​",
        "rcshowhidecategorization-hide": "លាក់",
-       "rclinks": "បង្ហាញបន្លាស់ប្ដូរ$1ចុងក្រោយធ្វើឡើងក្នុងរយៈពេល$2ថ្ងៃចុងក្រោយ<br />$3",
+       "rclinks": "បង្ហាញបន្លាស់ប្ដូរ$1ចុងក្រោយធ្វើឡើងក្នុងរយៈពេល$2ថ្ងៃចុងក្រោយ",
        "diff": "ប្រៀបធៀប",
        "hist": "ប្រវត្តិ",
        "hide": "លាក់",
        "undeleteviewlink": "មើល",
        "undeleteinvert": "ក្រៅពីនោះ",
        "undeletecomment": "មូលហេតុ៖",
-       "undeletedrevisions": "បានស្តារឡើងវិញនូវ{{PLURAL:$1|១កំណែ|$1កំណែ}}",
-       "undeletedrevisions-files": "បានស្តារឡើងវិញនូវ{{PLURAL:$1|១កំណែ|$1កំណែ}}និង{{PLURAL:$2|១ឯកសារ|$2ឯកសារ}}",
-       "undeletedfiles": "{{PLURAL:$1|១ ឯកសារ|$1 ឯកសារ}} ត្រូវបានស្ដារឡើងវិញ",
        "cannotundelete": "ឈប់លុបមិនសម្រេច៖​$1",
        "undeletedpage": "'''$1 ត្រូវបានស្តារឡើងវិញហើយ'''\n\nសូម​ចូល​ទៅ [[Special:Log/delete|កំណត់ហេតុ​នៃ​ការលុប]] ដើម្បី​ពិនិត្យ​មើល​កំណត់ត្រា​នៃ​ការលុប​និង​ការ​ស្ដារ​ឡើង​វិញ​។",
        "undelete-header": "មើលទំព័រដែលត្រូវបានលុបចោលថ្មីៗក្នុង[[Special:Log/delete|កំណត់ហេតុនៃការលុបចោល]]។",
index c3926de..71c52a4 100644 (file)
        "password-change-forbidden": "ನೀವು ಈ ವಿಕಿಯಲ್ಲಿ ಪ್ರವೇಶಪದವನ್ನು ಬದಲಾಯಿಸಲು ಸಾದ್ಯವಿಲ್ಲ.",
        "login": "ಲಾಗ್ ಇನ್",
        "nav-login-createaccount": "ಲಾಗ್ ಇನ್ - log in",
-       "userlogin": "ಲಾಗ್ ಇನ್ - log in",
-       "userloginnocreate": "ಲಾಗ್ ಇನ್",
        "logout": "ಲಾಗ್ ಔಟ್",
        "userlogout": "ಲಾಗ್ ಔಟ್",
        "notloggedin": "ಲಾಗಿನ್ ಆಗಿಲ್ಲ",
        "userlogin-noaccount": "ಖಾತೆ ಇಲ್ಲವೇ?",
        "userlogin-joinproject": "{{SITENAME}} ಸೇರಿ",
-       "nologin": "ಖಾತೆ ಇಲ್ಲವೇ? '''$1'''.",
-       "nologinlink": "ಖಾತೆಯನ್ನು ಸೃಷ್ಟಿಸಿ",
        "createaccount": "ಹೊಸ ಖಾತೆ ತೆರೆಯಿರಿ",
-       "gotaccount": "ಈಗಾಗಲೇ ಖಾತೆಯಿದೆಯೇ? '''$1'''.",
-       "gotaccountlink": "ಲಾಗ್ ಇನ್",
-       "userlogin-resetlink": "ನಿಮ್ಮ ಲಾಗಿನ್ ವಿವರಗಳನ್ನು ಮರೆತಿದ್ದೀರಾ?",
        "userlogin-resetpassword-link": "ನಿಮ್ಮ ಪ್ರವೇಶಪದ ಮರೆತಿರೇ?",
        "userlogin-helplink2": "ಲಾಗಿನ್ ಆಗಲು ಸಹಾಯ",
        "userlogin-reauth": "ನೀವು {{GENDER:$1|$1}} ಎಂದು ಖಾತ್ರಿ ಮಾಡಲು ಮತ್ತೆ ಲಾಗ್ ಇನ್ ಆಗಬೇಕು.",
        "createacct-another-email-ph": "ನಿಮ್ಮ ಇ-ಅಂಚೆ ವಿಳಾಸವನ್ನು ನಮೂದಿಸಿ",
        "createaccountmail": "(ರಾಂಡಮ್) ತಾತ್ಕಾಲಿಕವಾಗಿ ಯಾದೃಚ್ಛಿಕ ಪಾಸ್ವರ್ಡ್ ಆಯ್ಕೆಮಾಡಿ ಮತ್ತು ಇಮೇಲ್ ವಿಳಾಸವನ್ನು ಸೂಚಿಸಿ: ಕಳುಹಿಸಿ",
        "createacct-realname": "ನಿಜವಾದ ಹೆಸರು (ಐಚ್ಛಿಕ)",
-       "createaccountreason": "ಕಾರಣ:",
        "createacct-reason": "ಕಾರಣ",
        "createacct-reason-ph": "ನೀವು ಯಾಕೆ ಇನ್ನೊಂದು ಖಾತೆ ತೆರೆಯುತ್ತಿದ್ದೀರಿ",
        "createacct-submit": "ಖಾತೆಯನ್ನು ಸೃಷ್ಟಿಸಿ",
        "prefs-rendering": "ಗೋಚರ",
        "saveprefs": "ಉಳಿಸಿ",
        "prefs-editing": "ಸಂಪಾದನೆ",
-       "rows": "ಸಾಲುಗಳು:",
-       "columns": "ಸಾಲುಗಳು:",
        "searchresultshead": "ಹುಡುಕು",
        "stub-threshold-disabled": "ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ.",
        "recentchangesdays": "ಇತ್ತೀಚಿನ ಬದಲಾವಣೆಗಳಲ್ಲಿ ತೋರಿಸಬೇಕಾದ ದಿನಗಳು:",
        "userrights-reason": "ಕಾರಣ:",
        "userrights-no-interwiki": "ಇತರ ವಿಕಿಗಳಲ್ಲಿ ನಿಮಗೆ ಬಳಕೆದಾರ ಹಕ್ಕುಗಳನ್ನು ಬದಲಾಯಿಸುವ ಅನುಮತಿಯಿಲ್ಲ.",
        "userrights-nodatabase": "ಡೇಟಾಬೇಸ್ $1 ಅಸ್ಥಿತ್ವದಲ್ಲಿಲ್ಲ ಅಥವ ಸ್ಥಳೀಯವಾದುದಲ್ಲ.",
-       "userrights-nologin": "ಬಳಕೆದಾರ ಹಕ್ಕುಗಳನ್ನು ನೇಮಿಸಲು ನೀವು ನಿರ್ವಾಹಕ ಖಾತೆಯೊಂದಕ್ಕೆ [[Special:UserLogin|ಲಾಗ್ ಇನ್]] ಆಗಬೇಕು.",
-       "userrights-notallowed": "ಬಳಕೆದಾರ ಹಕ್ಕುಗಳನ್ನು ನೇಮಿಸಲು ನಿಮ್ಮ ಖಾತೆಗೆ ಅನುಮತಿಯಿಲ್ಲ.",
        "userrights-changeable-col": "ನೀವು ಬದಲಾಯಿಸಬಲ್ಲ ಗುಂಪುಗಳು",
        "userrights-unchangeable-col": "ನೀವು ಬದಲಾಯಿಸಲಾಗದಂತಹ ಗುಂಪುಗಳು",
        "group": "ಗುಂಪು:",
        "right-userrights-interwiki": "ಬೇರೆ ವಿಕಿಗಳ ಮೇಲೆ  ಎಲ್ಲಾ ಬಳಕೆದಾರ ಹಕ್ಕುಗಳನ್ನು ತಿದ್ದುಪಡಿಸಿ",
        "right-siteadmin": "ಡೇಟಾಬೇಸ್ ನ್ನು ಬೀಗ ಹಾಕಿ ತೆಗೆಯಿರಿ",
        "right-sendemail": "ಇತರ ಬಳಕೆದಾರರಿಗೆ ಇಮೇಲ್ ಕಳುಹಿಸಿ",
-       "right-passwordreset": "ಪಾಸ್ವರ್ಡ್ ಮತ್ತೆ ಜೋಡಿಸಲ್ಪಟ್ಟ  ಇಮೇಲ್ ಗಳನ್ನು ವೀಕ್ಷಿಸಿ",
        "newuserlogpage": "ಸದಸ್ಯತ್ವ ಸೃಷ್ಟಿಗಳ ದಾಖಲೆ",
        "rightslog": "ಸದಸ್ಯರ ಹಕ್ಕುಗಳ ದಾಖಲೆಗಳು",
        "rightslogtext": "ಇದು ಬಳಕೆದಾರ ಹಕ್ಕುಗಳ ಬದಲಾವಣೆಗಳ ದಾಖಲೆ.",
        "rcshowhidemine": "ನನ್ನ ಸಂಪಾದನೆಗಳನ್ನು $1",
        "rcshowhidemine-show": "ತೊರಿಸಿ",
        "rcshowhidemine-hide": "ಮರೆ ಮಾಡಿ",
-       "rclinks": "ಕೊನೆಯ $2 ದಿನಗಳಲ್ಲಿ ಮಾಡಿದ $1 ಕೊನೆಯ ಬದಲಾವಣೆಗಳನ್ನು ನೋಡಿ <br />$3",
+       "rclinks": "ಕೊನೆಯ $2 ದಿನಗಳಲ್ಲಿ ಮಾಡಿದ $1 ಕೊನೆಯ ಬದಲಾವಣೆಗಳನ್ನು ನೋಡಿ",
        "diff": "ವ್ಯತ್ಯಾಸ",
        "hist": "ಇತಿಹಾಸ",
        "hide": "ಅಡಗಿಸು",
        "logentry-newusers-create": "ಬಳಕೆದಾರ ಖಾತೆ $1 ನ್ನು {{GENDER:$2|ಸೃಷ್ಟಿಸಲಾಯಿತು}}",
        "logentry-upload-upload": "$1 {{GENDER:$2|ಅಪ್ಲೋಡ್ ಮಾಡಿದ್ದಾರೆ}} $3",
        "rightsnone": "(ಯಾವೂ ಇಲ್ಲ)",
-       "revdelete-summary": "ಸಂಪಾದನೆಯ ತಾತ್ಪರ್ಯ",
        "feedback-message": "ಸಂದೇಶ:",
        "feedback-subject": "ವಿಷಯ:",
        "searchsuggest-search": "{{SITENAME}} ಅನ್ನು ಹುಡುಕಿ",
index b62a93d..260ade8 100644 (file)
        "redirectedfrom": "($1에서 넘어옴)",
        "redirectpagesub": "넘겨주기 문서",
        "redirectto": "넘겨줄 대상:",
-       "lastmodifiedat": "이 문서는 $1 $2에 마지막으로 바뀌었습니다.",
+       "lastmodifiedat": "이 문서는 $1 $2에 마지막으로 편집되었습니다.",
        "viewcount": "이 문서는 {{PLURAL:$1|한 번|$1번}} 읽혔습니다.",
        "protectedpage": "보호된 문서",
        "jumpto": "이동:",
        "readonlywarning": "<strong>경고: 데이터베이스가 관리를 위해 잠겨 있습니다. 따라서 문서를 편집한 내용을 지금 저장할 수 없습니다.</strong>\n편집 내용을 복사하여 붙여넣기 등을 사용하여 일단 다른 곳에 저장한 후, 나중에 다시 시도해 주세요.\n\n데이터베이스를 잠근 시스템 관리자가 남긴 설명은 다음과 같습니다: $1",
        "protectedpagewarning": "<strong>경고: 이 문서는 관리자 권한이 있는 사용자만 편집할 수 있도록 보호되어 있습니다.</strong>\n이 문서의 최근 기록을 참조하십시오:",
        "semiprotectedpagewarning": "<strong>참고:</strong> 이 문서는 계정을 등록한 사용자만이 편집할 수 있도록 보호되어 있습니다.\n이 문서의 최근 기록을 참조하십시오:",
-       "cascadeprotectedwarning": "<strong>경고:</strong> 이 문서는 보호되어 있어 관리자 권한이 있는 사용자만 편집할 수 있습니다. 연쇄적 보호가 걸린 다음 {{PLURAL:$1|문서}}에서 이 문서를 사용하고 있습니다:",
+       "cascadeprotectedwarning": "<strong>경고:</strong> 이 문서는 보호되어 있어 [[Special:ListGroupRights|특정 권한]]이 있는 사용자만 편집할 수 있습니다. 연쇄적 보호가 걸린 다음 {{PLURAL:$1|문서}}에서 이 문서를 사용하고 있습니다:",
        "titleprotectedwarning": "<strong>경고: 이 문서는 보호되어 있어, 문서를 만드려면 [[Special:ListGroupRights|특정한 권한]]이 필요합니다.</strong>\n아래 문서의 최근 기록을 참조하십시오:",
        "templatesused": "이 문서에서 사용한 {{PLURAL:$1|틀}}:",
        "templatesusedpreview": "이 미리 보기에서 사용하고 있는 {{PLURAL:$1|틀}}:",
        "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": "노드 횟수를 초과한 문서",
        "saveusergroups": "{{GENDER:$1|사용자}} 권한 저장",
        "userrights-groupsmember": "현재 권한:",
        "userrights-groupsmember-auto": "자동으로 부여된 권한:",
-       "userrights-groups-help": "이 사용자의 권한을 바꿀 수 있습니다.\n* 사용자는 체크 표시가 있는 권한을 갖습니다.\n* 사용자는 체크 표시가 없는 권한을 갖지 않습니다.\n* <nowiki>*</nowiki>표시는 권한을 주거나 거두는 것 중 하나만 할 수 있다는 뜻입니다.\n* <nowiki>#</nowiki> 표시는 권한의 만료일을 늦출 수만 있다는 뜻입니다; 만료일을 앞당길 수는 없습니다.",
+       "userrights-groups-help": "이 사용자의 권한을 바꿀 수 있습니다.\n* 사용자는 체크 표시가 있는 권한을 갖습니다.\n* 사용자는 체크 표시가 없는 권한을 갖지 않습니다.\n* * 표시는 권한을 주거나 거두는 것 중 하나만 할 수 있다는 뜻입니다.\n* # 표시는 사용자 권한의 만료일을 늦출 수만 있다는 뜻입니다; 만료일을 앞당길 수는 없습니다.",
        "userrights-reason": "이유:",
        "userrights-no-interwiki": "다른 위키의 사용자 권한을 바꿀 권한이 없습니다.",
        "userrights-nodatabase": "데이터베이스 $1이 존재하지 않거나 로컬에 있지 않습니다.",
        "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-cannot-shorten-expiry": "\"$1\"에 해당하는 사용자의 권한의 만료일을 앞당길 수 없습니다. 권한을 추가하고 회수할 수 있는 권한을 가진 사용자만 권한의 만료일을 앞당길 수 있습니다.",
        "userrights-conflict": "사용자 권한 바꾸기가 충돌합니다! 바뀜을 검토하고 확인하세요.",
        "group": "그룹:",
        "group-user": "사용자",
        "right-editsemiprotected": "\"{{int:protect-level-autoconfirmed}}\"로 보호된 문서 편집",
        "right-editcontentmodel": "문서의 콘텐츠 모델을 편집",
        "right-editinterface": "사용자 인터페이스를 편집",
-       "right-editusercssjs": "다른 사용자의 CSS와 자바스크립트 문서를 편집",
        "right-editusercss": "다른 사용자의 CSS 문서를 편집",
        "right-edituserjs": "다른 사용자의 자바스크립트 문서를 편집",
        "right-editmyusercss": "자신의 사용자 CSS 파일 편집하기",
        "rcfilters-hideminor-conflicts-typeofchange": "특정한 종류의 변경사항은 \"사소한 편집\"으로 지정할 수 없으므로 이 필터는 다음 유형의 변경사항 필터와 충돌합니다: $1",
        "rcfilters-typeofchange-conflicts-hideminor": "이 유형의 변경사항 필터는 \"사소한 편집\" 필터와 충돌합니다. 특정한 종류의 변경사항은 \"사소한 편집\"으로 지정할 수 없습니다.",
        "rcnotefrom": "아래는 <strong>$3, $4</strong>부터 시작하는 {{PLURAL:$5|바뀜이 있습니다}}. (최대 <strong>$1</strong>개가 표시됨)",
+       "rclistfromreset": "날짜 선택 초기화",
        "rclistfrom": "$3 $2부터 시작하는 새로 바뀐 문서 보기",
        "rcshowhideminor": "사소한 편집 $1",
        "rcshowhideminor-show": "보이기",
        "rcshowhidecategorization": "문서 분류 $1",
        "rcshowhidecategorization-show": "보이기",
        "rcshowhidecategorization-hide": "숨기기",
-       "rclinks": "최근 $2일간의 $1개 바뀐 문서 보기<br />$3",
+       "rclinks": "최근 $2일간의 $1개 바뀐 문서 보기",
        "diff": "차이",
        "hist": "역사",
        "hide": "숨기기",
        "php-uploaddisabledtext": "PHP 파일 올리기가 비활성화되었습니다. 파일 올리기 설정을 확인하십시오.",
        "uploadscripted": "이 파일에는 HTML이나 다른 스크립트 코드가 포함되어 있어, 웹 브라우저에서 오류를 일으킬 수 있습니다.",
        "upload-scripted-pi-callback": "XML 스타일시트 처리 명령을 포함하는 파일은 업로드할 수 없습니다.",
+       "upload-scripted-dtd": "비표준 DTD 선언이 포함된 SVG 파일을 업로드할 수 없습니다.",
        "uploaded-script-svg": "업로드된 SVG 파일에서 스크립트로 만들 수 있는 \"$1\" 요소를 발견했습니다.",
        "uploaded-hostile-svg": "업로드된 SVG 파일의 스타일 요소에 안전하지 않은 CSS가 있습니다.",
        "uploaded-event-handler-on-svg": "이벤트 핸들러 속성 <code>$1=\"$2\"</code> 설정은 SVG 파일에서 사용할 수 없습니다.",
        "undeleteviewlink": "보기",
        "undeleteinvert": "선택 반전",
        "undeletecomment": "이유:",
-       "undeletedrevisions": "{{PLURAL:$1|판 1개|판 $1개}}를 되살렸습니다",
-       "undeletedrevisions-files": "{{PLURAL:$1|판 1개|판 $1개}}와 {{PLURAL:$2|파일 1개|파일 $2개}}를 되살렸습니다",
-       "undeletedfiles": "{{PLURAL:$1|파일 1개|파일 $1개}}를 되살렸습니다",
        "cannotundelete": "일부 또는 모든 항목의 되살리기를 실패했습니다:\n$1",
        "undeletedpage": "<strong>$1 문서를 되살렸습니다.</strong>\n\n[[Special:Log/delete|삭제 기록]]에서 최근의 삭제 및 되살리기 기록을 볼 수 있습니다.",
        "undelete-header": "최근에 삭제한 문서에 대한 기록은 [[Special:Log/delete|여기]]에서 볼 수 있습니다.",
        "sp-contributions-uploads": "올린 파일",
        "sp-contributions-logs": "기록",
        "sp-contributions-talk": "토론",
-       "sp-contributions-userrights": "사용자 권한 관리",
+       "sp-contributions-userrights": "{{GENDER:$1|사용자}} 권한 관리",
        "sp-contributions-blocked-notice": "이 사용자는 현재 차단되어 있습니다.\n해당 사용자의 차단 기록은 다음과 같습니다:",
        "sp-contributions-blocked-notice-anon": "이 IP 주소는 현재 차단되어 있습니다.\n차단 기록은 다음과 같습니다:",
        "sp-contributions-search": "기여 검색",
        "unblocked-id": "$1 차단이 해제되었습니다.",
        "unblocked-ip": "[[Special:Contributions/$1|$1]]님이 차단 해제되었습니다.",
        "blocklist": "차단된 사용자 목록",
+       "autoblocklist": "자동차단",
+       "autoblocklist-submit": "검색",
+       "autoblocklist-legend": "자동차단 목록",
+       "autoblocklist-localblocks": "로컬 자동 차단 {{PLURAL:$1|기록|기록들}}",
+       "autoblocklist-empty": "자동차단 목록이 비어 있습니다.",
+       "autoblocklist-otherblocks": "다른 자동 차단 {{PLURAL:$1|기록|기록들}}",
        "ipblocklist": "차단된 사용자",
        "ipblocklist-legend": "차단된 사용자 찾기",
        "blocklist-userblocks": "계정에 대한 차단 숨기기",
        "anonymous": "{{SITENAME}} 익명 {{PLURAL:$1|사용자}}",
        "siteuser": "{{SITENAME}} 사용자 $1",
        "anonuser": "{{SITENAME}} 익명 사용자 $1",
-       "lastmodifiedatby": "이 문서는 $3님이 $1 $2에 마지막으로 ë°\94꾸ì\97\88ì\8aµë\8b\88ë\8b¤.",
+       "lastmodifiedatby": "이 문서는 $3님이 $1 $2에 마지막으로 í\8e¸ì§\91í\96\88ì\8aµë\8b\88ë\8b¤.",
        "othercontribs": "$1의 작업을 바탕으로 합니다.",
        "others": "기타",
        "siteusers": "{{SITENAME}} {{PLURAL:$2|{{GENDER:$1|사용자}}}} $1",
        "confirmrecreate": "[[User:$1|$1]] 사용자([[User talk:$1|토론]])가 당신이 편집하는 도중에 문서를 {{GENDER:$1|삭제했습니다}}. 삭제 이유는 다음과 같습니다:\n: $2\n문서를 다시 만들어야 하는지 확인해주세요.",
        "confirmrecreate-noreason": "[[User:$1|$1]] 사용자([[User talk:$1|토론]])가 당신이 편집하는 도중에 문서를 {{GENDER:$1|삭제했습니다}}. 문서를 다시 만들어야 하는지 확인해주세요.",
        "recreate": "새로 만들기",
+       "confirm-purge-title": "이 문서를 새로고침",
        "confirm_purge_button": "확인",
        "confirm-purge-top": "이 문서의 캐시를 지울까요?",
        "confirm-purge-bottom": "문서를 새로 고치는 것은 캐시를 지우고 강제로 가장 현재의 판이 나타나게 합니다.",
        "htmlform-user-not-valid": "<strong>$1</strong>은 올바른 사용자 이름이 아닙니다.",
        "logentry-delete-delete": "$1님이 $3 문서를 {{GENDER:$2|삭제했습니다}}",
        "logentry-delete-delete_redir": "$1님이 덮어쓰기를 통해 $3 문서를 {{GENDER:$2|삭제했습니다}}",
-       "logentry-delete-restore": "$1님이 $3 문서를 {{GENDER:$2|되살렸습니다}}",
+       "logentry-delete-restore": "$1님이 $3 문서를 {{GENDER:$2|되살렸습니다}} ($4)",
+       "logentry-delete-restore-nocount": "$1님이 $3 문서를 {{GENDER:$2|되살렸습니다}}",
+       "restore-count-revisions": "{{PLURAL:$1|판 1개|판 $1개}}",
+       "restore-count-files": "{{PLURAL:$1|파일 1개|파일 $1개}}",
        "logentry-delete-event": "$1님이 $3의 {{PLURAL:$1|기록 $5개}}에 대해 보이기 설정을 {{GENDER:$2|바꾸었습니다}}: $4",
        "logentry-delete-revision": "$1님이 $3 문서의 {{PLURAL:$5|$5개 편집}}의 설정을 {{GENDER:$2|바꾸었습니다}}: $4",
        "logentry-delete-event-legacy": "$1님이 $3 문서 기록의 보이기 설정을 {{GENDER:$2|바꾸었습니다}}",
        "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; 태그는 일반 페이지 밖에서는 사용할 수 없습니다.",
+       "gotointerwiki": "{{SITENAME}}을(를) 떠납니다",
+       "gotointerwiki-invalid": "지정된 제목이 올바르지 않습니다.",
+       "gotointerwiki-external": "다른 웹사이트 [[$2]]을(를) 방문하기 위해 {{SITENAME}}을(를) 떠나려고 합니다.\n\n[$1 $1(으)로 계속 진행하려면 여기를 눌러주세요].",
+       "undelete-cantedit": "이 문서를 편집할 권한이 없으므로 이 문서를 복구할 수 없습니다.",
+       "undelete-cantcreate": "이 이름으로 된 문서가 없고 이 문서를 만들 권한이 없으므로 이 문서를 복구할 수 없습니다."
 }
index 9bf914e..5223b90 100644 (file)
        "rcshowhideliu": "Ас нимöн $1 уджкерись",
        "rcshowhideanons": "$1 нимтöг уджкерись",
        "rcshowhidemine": "аслам $1 мöдкодьсьöтöм",
-       "rclinks": "Мыччавны  медбöрья $1 вильмöтöмсö $2 лун дырнаись<br />$3",
+       "rclinks": "Мыччавны  медбöрья $1 вильмöтöмсö $2 лун дырнаись",
        "diff": "неöтк.",
        "hist": "чулалöм",
        "hide": "Сайöвтны",
index 557bc61..bdb894a 100644 (file)
@@ -9,7 +9,8 @@
                        "Къарачайлы",
                        "아라",
                        "Macofe",
-                       "Ernác"
+                       "Ernác",
+                       "Stephanecbisson"
                ]
        },
        "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-resetpassword-link": "Паролунгу унутдунгму?",
        "userlogin-helplink2": "Кириуде болушлукъ",
        "userlogin-createanother": "Башха аккаунт къурау",
        "createacct-another-email-ph": "Электрон почтаны адресин джаз",
        "createaccountmail": "Эсде болмагъанлай генерация этилген болджаллы паролну хайырландырыу эмда берилген электрон почта адресге ийиу",
        "createacct-realname": "Керти атыгъыз (ажымсыз керек тюлдю)",
-       "createaccountreason": "Чурум:",
        "createacct-reason": "Чурум",
        "createacct-reason-ph": "Башха тергеу джазыуну нек къураусыз",
        "createacct-submit": "Тергеу джазыуну къура",
        "passwordreset-emaildisabled": "Бу викиде электрон почтаны функциялары джукъланыбдыла.",
        "passwordreset-username": "Къошулуучуну аты:",
        "passwordreset-domain": "Домен:",
-       "passwordreset-capture": "Джазылгъан билдириуню эсебине къара?",
-       "passwordreset-capture-help": "Бу белгини салсагъыз, къошулуучугъа ийилген болджаллы пароль бла билдириу сизге кёргюзюллюкдю.",
        "passwordreset-email": "Электрон почтаны адреси:",
        "passwordreset-emailtitle": "{{SITENAME}} сайтдагъы тергеу джазыуну юсюнден билгиле",
        "passwordreset-emailelement": "Къошулуучуну аты: \n$1\n\nБолджаллы пароль: \n$2",
        "saveprefs": "Сакъла",
        "restoreprefs": "Тынгылау бла джарашдырыуланы ызына къайтар",
        "prefs-editing": "Тюрлендириу",
-       "rows": "Тизгинле:",
-       "columns": "Колонкала:",
        "searchresultshead": "Излеу",
        "stub-threshold": "<a href=\"#\" class=\"stub\">Стаблагъа джибериуню</a> формат этер ючюн марда (байтлада):",
        "stub-threshold-disabled": "Джукъланыбды",
        "userrights-reason": "Чурум:",
        "userrights-no-interwiki": "Башха викиледеги къошлуучуланы хакъларын тюрлендирирге эркинлигигиз джокъду.",
        "userrights-nodatabase": "$1 белги базасы джокъду неда локаль тюлдю.",
-       "userrights-nologin": "Къошулуучулагъа хакъланы берир ючюн администратор кибик [[Special:UserLogin|кирирге керексиз]].",
-       "userrights-notallowed": "Сизни тергеу джазыуугъуздан къошулуучулагъа хакъла берирге эмда кетерирге эркинлик джокъду.",
        "userrights-changeable-col": "Сиз тюрлендиреллик къауумла",
        "userrights-unchangeable-col": "Сиз тюрлендирелмезлик къауумла",
        "userrights-irreversible-marker": "$1*",
        "right-protect": "Къорууну дараджасын тюрлендир эмда къорууланнган бетледе тюрлениуле эт",
        "right-editprotected": "Къорууланнган бетледе тюрлениу эт (секиртмесиз джакъсыз)",
        "right-editinterface": "Къошулуучу интерфейсни тюрлендир",
-       "right-editusercssjs": "Башха къошулуучуланы CSS- эм JS-файлларына тюрлениу эт",
        "right-editusercss": "Башха къошулуучуланы CSS-файлларына тюрлениу эт",
        "right-edituserjs": "Башха къошулуучуланы JS-файлларына тюрлениу эт",
        "right-rollback": "Белгили бетни тюрлендирген ахыр къошулуучуну тюрлениулерин дженгил ызына къайтар",
        "right-siteadmin": "Билги базаны киритле эмда киритни ач",
        "right-override-export-depth": "Бетлени, теренлиги 5-ге дери байламлы бетле бла бирге экспорт эт",
        "right-sendemail": "Башха къошулуучулагъа электрон почта джиберирге",
-       "right-passwordreset": "пароль тюрлениуле бла e-mail'леге къарау",
        "grant-group-email": "E-mail джибер",
        "grant-createaccount": "Аккаунтла къурау",
        "newuserlogpage": "Къошулуучуланы регистрацияларыны журналы",
        "rcshowhidemine": "кесими тюрлендириулерими $1",
        "rcshowhidemine-show": "кёргюз",
        "rcshowhidemine-hide": "джашыр",
-       "rclinks": "Ахыр $2 кюнню ичинде этилиннген $1 тюрлениуню кёргюз;<br /> $3",
+       "rclinks": "Ахыр $2 кюнню ичинде этилиннген $1 тюрлениуню кёргюз;",
        "diff": "башх.",
        "hist": "тарих",
        "hide": "джашыр",
        "undeleteviewlink": "кёргюз",
        "undeleteinvert": "Сайлауну ызына бур",
        "undeletecomment": "Чурум:",
-       "undeletedrevisions": "$1 {{PLURAL:$1|1=тюрлендириу|тюрлендириу}} ызына къайтарылды",
-       "undeletedrevisions-files": "{{PLURAL:$1|1=1 версия|$1 версия}} бла {{PLURAL:$2|1=1 файл|$2 файл}} ызына къайтарылды",
-       "undeletedfiles": "{{PLURAL:$1|1=1 файл|$1 файл}} ызына къайтарылды",
        "cannotundelete": "Бетни неда медианы сизден алгъа башха къошулуучу ызына къайтаргъаны себебли сизини ызына къайтарыу ишлемигиз джараусузду.",
        "undeletedpage": "'''$1 бет ызына къайтарылды '''\n\nАхыр кетериу бла ызына къайтарыуну кёрюр ючюн [[Special:Log/delete|кетериуню журнал]]ына къарагъыз.",
        "undelete-header": "Кёб болмай кетерилген бетлени кёрюр ючюн [[Special:Log/delete|кетериу журнал]]гъа къарагъыз.",
        "logentry-rights-autopromote": "$1 къошулуучу, $4 къауумдан автомат халда $5 къауумгъа {{GENDER:$2|кёчюрюлдю}}",
        "logentry-upload-upload": "$1, $3 {{GENDER:$2|джюкледи}}",
        "rightsnone": "(джокъ)",
-       "revdelete-summary": "тюрлениулени ачыкълау",
        "feedback-cancel": "Ызына алыу",
        "feedback-close": "Тындырылды",
        "feedback-error2": "Халат. Тюзетиу ётмеди",
        "searchsuggest-search": "Излеу",
        "searchsuggest-containing": "ичиндегиси…",
        "api-error-badtoken": "Ич халат: терс токен.",
-       "api-error-empty-file": "Сиз ийген файлны ичи бошду.",
        "api-error-emptypage": "Ичи бош болгъан джангы бетле къураргъа болмайды.",
-       "api-error-file-too-large": "Сиз ийген файл асыры уллуду.",
-       "api-error-filename-tooshort": "Файлны аты асыры къысхады.",
-       "api-error-filetype-banned": "Быллай типли файлла джасакъланыбдыла.",
-       "api-error-filetype-banned-type": "$1 — {{PLURAL:$4|джасакъланнган файл типди|джасакъланнган файл типледиле}}. {{PLURAL:$3|Эркинлик берилген файл тип —|Эркинлик берилген файл типле:}} $2.",
-       "api-error-filetype-missing": "Файлны кенгериую джокъду.",
-       "api-error-hookaborted": "Сиз теджеген тюрлендириуню кенгертиуню сюзюучю джасакълагъанды.",
-       "api-error-illegal-filename": "Джарамагъан файл ат.",
-       "api-error-invalid-file-key": "Ич халат: болджаллы асыраучу джерде файл  табылмады.",
-       "api-error-mustbeposted": "Ич халат: соруу, HTTP POST инструкцияны излейди.",
-       "api-error-ok-but-empty": "Ич халат: сервер джууаб бермейди.",
-       "api-error-timeout": "Сакълагъан заманны ичинде сервер джуууб бермейди.",
-       "api-error-unclassified": "Белгили болмагъан халат чыкъды",
-       "api-error-unknown-code": "Билинмеген халат: «$1».",
-       "api-error-unknown-error": "Ич халат: файлны джюклерге излеген сагъатда не эсе да терс болду.",
        "api-error-unknown-warning": "Билинмеген билдириу: $1",
        "api-error-unknownerror": "Билинмеген халат: «$1».",
-       "api-error-uploaddisabled": "Бу викиде файлла джюклеу амал джукъланыбды",
-       "api-error-verification-error": "Бу заран джетген файл болургъа боллукъду неда терс кенгертиую болургъа боллукъду.",
        "duration-seconds": "$1 {{PLURAL:$1|секунд}}",
        "duration-minutes": "$1 {{PLURAL:$1|минут}}",
        "duration-hours": "$1 {{PLURAL:$1|сагъат}}",
index 6ea2658..736e5cf 100644 (file)
        "rcshowhidemine": "$1 miun kohennukšet",
        "rcshowhidemine-show": "Näytä",
        "rcshowhidemine-hide": "Peitä",
-       "rclinks": "Näytä $1 vereštä kohennušta viimesen $2 päivän ajalta.<br />$3",
+       "rclinks": "Näytä $1 vereštä kohennušta viimesen $2 päivän ajalta.",
        "diff": "ero",
        "hist": "ist",
        "hide": "Peitä",
index 2180402..575883a 100644 (file)
        "externaldberror": "Çewtiyeke bingeha daneyan heye, an jî destûra te ya rojanekirina hesabê xweyê navxweyî nîne.",
        "login": "Têkeve",
        "nav-login-createaccount": "Têkeve / hesabekî nû çêke",
-       "userlogin": "Têkeve / hesabekî nû çêke",
-       "userloginnocreate": "Têkeve",
        "logout": "Derkeve",
        "userlogout": "Derkeve",
        "notloggedin": "Têneketî",
        "userlogin-noaccount": "Hesabekî te nîne?",
        "userlogin-joinproject": "Tevlî {{SITENAME}} bibe",
-       "nologin": "Hesabê te nîne? $1.",
-       "nologinlink": "Bibe endam",
        "createaccount": "Hesabê nû çêke",
-       "gotaccount": "Hesabê te heye? $1.",
-       "gotaccountlink": "Têkeve",
-       "userlogin-resetlink": "Te agahiyên hesabê xwe ji bîr kirin?",
        "userlogin-resetpassword-link": "Te şîfreya xwe ji bîr kir?",
        "userlogin-helplink2": "Alîkariya têketinê",
        "userlogin-createanother": "Hesabekî din çêke",
        "createacct-another-email-ph": "E-nameya xwe binivîse",
        "createaccountmail": "Şîfreyeke demkî bikar bîne û wê ji navnîşana hatiye diyarkirin re bişîne.",
        "createacct-realname": "Navê te ya rast (Ko tu bixwazi bikeve, pêdivî nîne)",
-       "createaccountreason": "Sedem:",
        "createacct-reason": "Sedem",
        "createacct-reason-ph": "Çima hesabekî din çêdikî",
        "createacct-submit": "Hesabê xwe biafirîne",
        "rcshowhidecategorization": "Kategorîzekirina rûpelan $1",
        "rcshowhidecategorization-show": "nîşan bide",
        "rcshowhidecategorization-hide": "veşêre",
-       "rclinks": "$1 guherandinên di $2 rojên dawî de nîşan bide<br />$3",
+       "rclinks": "$1 guherandinên di $2 rojên dawî de nîşan bide",
        "diff": "cudahî",
        "hist": "dîrok",
        "hide": "veşêre",
        "cantrollback": "Guherto naye vegerandin;\nbikarhênerê dawî, tenya nivîskarê vê rûpelê ye.",
        "alreadyrolled": "Guherandina dawiya [[$1]]\nbi [[User:$2|$2]] ([[User talk:$2|gotûbêj]]) venizivre; kesekî din ew rûpel zîvirandiye an guherandiye.\n\nGuhertoya dawî bi [[User:$3|$3]] ([[User talk:$3|gotûbêj]]).",
        "editcomment": "Kurtenivîsê guherandinê ev bû: <em>$1</em>.",
-       "revertpage": "Guherandina $2 hat betal kirin, vegerand guhartoya dawî ya $1",
+       "revertpage": "Guherandina [[Special:Contributions/$2|$2]] ([[User talk:$2|gotûbêj]]) hat betal kirin, vegerand guhartoya dawî ya [[User:$1|$1]]",
        "rollback-success": "Guherandina $1 şondakir; dîsa guharte verzyona $2.",
        "changecontentmodel-title-label": "Sernavê rûpelê",
        "changecontentmodel-reason-label": "Sedem:",
        "undeleteviewlink": "bibîne",
        "undeleteinvert": "Hilbijartinê şûnde vegerîne",
        "undeletecomment": "Sedem:",
-       "undeletedrevisions": "{{PLURAL:$1|Versiyonek dîsa hate|$1 versiyon dîsa hatin}} çêkirin",
-       "undeletedrevisions-files": "{{PLURAL:$1|Versiyonek|$1 versiyon}} û {{PLURAL:$2|medyayek hate|$2 medya hatin}} çêkirin",
-       "undeletedfiles": "{{PLURAL:$1|Medyayek hate|$1 medya hatin}} çêkirin",
        "undeletedpage": "'''$1 dîsa hate çêkirin'''\n\nJi bo jêbirinan û çêkirinên nû, ji kerema xwe li [[{{ns:special}}:Log/delete|Jêbirina têketinê]] binêre.",
        "undelete-header": "Ji bo rûpelên dawî hatine jêbirin, li [[Special:Log/delete|Jêbirina têketinê]] binêre.",
        "undelete-search-title": "Li rûpelên jêbirî bigere",
        "logentry-newusers-create": "Hesabe bikarhêneriyê $1 {{GENDER:$2|hate çêkirin}}",
        "logentry-upload-upload": "$1 {{GENDER:$2|hate barkirin}} $3",
        "rightsnone": "(tune)",
-       "revdelete-summary": "kurteyê biguherîne",
        "feedback-back": "Paşve",
        "feedback-cancel": "Betal bike",
        "feedback-close": "Çêbû",
index e4f1e44..0df1daf 100644 (file)
        "password-change-forbidden": "Ny yllir chanjya geryow tremena war an wiki-ma.",
        "login": "Omgelmi",
        "nav-login-createaccount": "Omgelmi / Gwruthyl akont nowyth",
-       "userlogin": "Omgelmi / gwruthyl akont nowyth",
-       "userloginnocreate": "Omgelmi",
        "logout": "Digelmi",
        "userlogout": "Digelmi",
        "notloggedin": "Digelmys",
        "userlogin-noaccount": "A nyns eus akont dhywgh?",
        "userlogin-joinproject": "Junya {{SITENAME}}",
-       "nologin": "A ny'gas beus akont? '''$1'''.",
-       "nologinlink": "Gwruthyl akont",
        "createaccount": "Gwruthyl akont nowydh",
-       "gotaccount": "Eus akont dhywgh seulabrys? '''$1'''.",
-       "gotaccountlink": "Omgelmi",
-       "userlogin-resetlink": "A ankevsowgh hwi agas manylyon omgelmi?",
        "userlogin-resetpassword-link": "Ankevys agas ger tremena genowgh?",
        "userlogin-helplink2": "Gweres owth omgelmi",
        "createacct-emailrequired": "Trigva ebost",
        "createacct-email-ph": "Entrewgh agas trigva ebost",
        "createaccountmail": "Devnydhya ger tremena chonsus anbarthus hag y dhanvon dhe'n drigva ebost res a-woles",
        "createacct-realname": "Hanow gwir (a-dhewis)",
-       "createaccountreason": "Acheson:",
        "createacct-reason": "Acheson",
        "createacct-reason-ph": "Prag yth esowgh ow kwruthyl akont aral",
        "createacct-submit": "Gwruthyl agas akont",
        "saveprefs": "Gwitha",
        "restoreprefs": "Restorya pub settyans defowt",
        "prefs-editing": "Chanjya",
-       "rows": "Rewyow:",
-       "columns": "Kolovennow:",
        "searchresultshead": "Hwilas",
        "savedprefs": "Gwithys re beu agas dewisyansow.",
        "servertime": "Eur an servyer:",
        "rcshowhideanons-hide": "Kudha",
        "rcshowhidemine": "$1 ow chanjyow",
        "rcshowhidemine-hide": "Kudha",
-       "rclinks": "Diskwedhes an $1 chanj diwettha gwrys y'n $2 dydh diwettha<br />$3",
+       "rclinks": "Diskwedhes an $1 chanj diwettha gwrys y'n $2 dydh diwettha",
        "diff": "dyffrans",
        "hist": "istori",
        "hide": "Kudha",
index 8b2d94f..0ac245d 100644 (file)
@@ -16,7 +16,8 @@
                        "Askar Nazyrov",
                        "Macofe",
                        "Janatkg",
-                       "Irus"
+                       "Irus",
+                       "Mouse21"
                ]
        },
        "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-resetpassword-link": "Сырсөздү унуттуңузбу?",
        "userlogin-loggedin": "Сиз эчак эле {{GENDER:$1|$1}} деп киргенсиз.\nБашка колдонуучунун атынан кириш үчүн асытдагы форманы колдонуңуз.",
        "createacct-emailrequired": "Эмейл дарек",
        "createacct-another-email-ph": "E-mail дарек териңиз",
        "createaccountmail": "Убактылуу түзүлгөн сырсөздү колдон жана аны көрсөтүлгөн эмейл дарекке жөнөт",
        "createacct-realname": "Чыныгы ысымы (милдеттүү эмес)",
-       "createaccountreason": "Себеби:",
        "createacct-reason": "Себеп",
        "createacct-reason-ph": "Эмне үчүн башка эсеп жазуу түзүп жатасыз",
        "createacct-submit": "Катталыңыз",
        "passwordreset-disabled": "Бул уикиде сырсөздү түшүрүү мүмкүнчүлүгү өчүрүлгөн.",
        "passwordreset-username": "Колдонуучу аты:",
        "passwordreset-domain": "Домен:",
-       "passwordreset-capture": "Чыккан катты көрүү?",
        "passwordreset-email": "E-mail дарек:",
        "passwordreset-emailtitle": "{{SITENAME}} сайтындагы эсеп жазуусу жөнүндөгү маалымат",
        "passwordreset-emailelement": "Колдонуучу аты: \n$1\n\nУбактылуу сырсөз: \n$2",
        "post-expand-template-argument-warning": "'''Эскертүү:''' Бул барак, жок дегенде, абдан чоң көлөмдүү калыптын бир жүйөсүн камтыйт жана  жайылганда өлчөмү абдан чоң болуп кетет. \nУшул сыяктуу жүйөлөр аттатылды.",
        "post-expand-template-argument-category": "Калыптардын аттатылган жүйөлөрүн камтыган барактар",
        "parser-template-loop-warning": "Калыптарда илмек бар:[[$1]]",
+       "undo-summary": "Кайра $1 жокко [[Special:Contributions/$2|$2]] ([[User talk:$2|сюзюу]])",
        "viewpagelogs": "Бул барактын журналдарын көрүү",
        "nohistory": "Бул барактын өзгөртүүлөр тарыхы жок",
        "currentrev": "Соңку версиясы",
        "saveprefs": "Сактоо",
        "restoreprefs": "Жарыяланбасча ырастоолорду калыбына келтирүү",
        "prefs-editing": "Оңдоп-түзөө",
-       "rows": "Сап:",
-       "columns": "Тилке:",
        "searchresultshead": "Издөө",
        "stub-threshold-disabled": "Өчүрүлгөн",
        "recentchangesdays-max": "Эң көп $1 {{PLURAL:$1|күн}}",
        "rcshowhidemine": "Оңдоолорумду $1",
        "rcshowhidemine-show": "Көрсөтүү",
        "rcshowhidemine-hide": "Жашыруу",
-       "rclinks": "Соңку $2 күндө жасалган акыркы $1 өзгөртүүлөрдү көрсөтүү<br />$3",
+       "rclinks": "Соңку $2 күндө жасалган акыркы $1 өзгөртүүлөрдү көрсөтүү",
        "diff": "айырма",
        "hist": "тарыхы",
        "hide": "Жашыруу",
        "searchsuggest-search": "Издөө",
        "searchsuggest-containing": "кармагандар...",
        "api-error-badtoken": "Ички ката: анык эмес токен.",
-       "api-error-file-too-large": "Сиз жөнөткөн файл өтө чоң.",
-       "api-error-filename-tooshort": "Файл аты өтө кыска.",
-       "api-error-filetype-banned": "Бул файл түрүнө тыюу салынган.",
-       "api-error-illegal-filename": "Жарабай турган файл аты.",
-       "api-error-unclassified": "Белгисиз ката пайда болду.",
-       "api-error-unknown-code": "Белгисиз ката: \"$1\".",
        "api-error-unknown-warning": "Белгисиз эскертүү: \"$1\".",
        "api-error-unknownerror": "Белгисиз ката: «$1».",
-       "api-error-uploaddisabled": "Бул уикиде файлдарды жүктөө мүмкүнчүлүгү өчүрүлгөн.",
        "duration-seconds": "$1 {{PLURAL:$1|секунда}}",
        "duration-minutes": "$1 {{PLURAL:$1|мүнөт}}",
        "duration-hours": "$1 {{PLURAL:$1|саат}}",
index 171a911..3360ac0 100644 (file)
        "yourdomainname": "Regnum tuum:",
        "login": "Nomen dare",
        "nav-login-createaccount": "Nomen dare / Nomen sibi imponere",
-       "userlogin": "Nomen dare / Nomen sibi imponere",
-       "userloginnocreate": "Nomen dare",
        "logout": "Secedere",
        "userlogout": "Secedere",
        "notloggedin": "Nomen nondum datum est",
        "userlogin-noaccount": "Num nomine cares?",
-       "nologin": "Num nomine cares? $1.",
-       "nologinlink": "Eam crea",
        "createaccount": "Sibi nomen imponere",
-       "gotaccount": "Iamne tibi nomen est? $1.",
-       "gotaccountlink": "Nomen da",
-       "userlogin-resetlink": "Num tesserae tuae oblitus es?",
        "userlogin-resetpassword-link": "Num tesserae oblitus es?",
        "userlogin-helplink2": "auxilium dandi nominis",
        "createacct-emailrequired": "Inscriptio electronica",
        "createacct-another-email-ph": "Inscriptionem electronicam inscribe",
        "createaccountmail": "Use a temporary random password and send it to the specified email address",
        "createacct-realname": "Nomen rectum (non necesse)",
-       "createaccountreason": "Causa:",
        "createacct-reason": "Causa",
        "createacct-reason-ph": "Cur aliud nomen imponas",
        "createacct-submit": "Nomen tibi impone",
        "saveprefs": "Hos modos servare",
        "restoreprefs": "Omnes (diversi) modi in integrum restituantur",
        "prefs-editing": "Recensere",
-       "rows": "Lineae:",
-       "columns": "Columnae:",
        "searchresultshead": "Figuratio eventorum investigationis",
        "recentchangesdays": "Quot dies index respiciat:",
        "recentchangesdays-max": "$1 maxime {{PLURAL:$1|diem|dies}}",
        "right-hideuser": "Celare nomen usoris hunc usorem obstruendo",
        "right-protect": "Protectionem mutare vel paginas protectas recensere",
        "right-editprotected": "Paginas protectas recensere (sine protectione defluente quasi cataracta)",
-       "right-editusercssjs": "Paginas CSS vel JS aliorum usorum recensere",
        "right-editusercss": "Paginas CSS aliorum usorum recensere",
        "right-edituserjs": "Paginas JS aliorum usorum recensere",
        "right-rollback": "Cito reverti recensiones proximas usoris cuiuslibet paginae",
        "rcshowhidecategorization": "$1 classificationes",
        "rcshowhidecategorization-show": "Ostendere",
        "rcshowhidecategorization-hide": "Supprimere",
-       "rclinks": "Monstrare $1 nuperrime mutata in $2 diebus proximis.<br />$3",
+       "rclinks": "Monstrare $1 nuperrime mutata in $2 diebus proximis.",
        "diff": "diff",
        "hist": "hist",
        "hide": "celare",
        "undeleteviewlink": "inspicere",
        "undeleteinvert": "Selectionem invertere",
        "undeletecomment": "Causa:",
-       "undeletedrevisions": "{{PLURAL:$1|1 redactio restituta est|$1 redactiones restitutae sunt}}",
-       "undeletedrevisions-files": "{{PLURAL:$1|1 redactio restituta est|$1 redactiones restitutae sunt}} et {{PLURAL:1 fasciculus restitutus est|$2 fasciculi restituti sunt}}",
-       "undeletedfiles": "{{PLURAL:$1|1 fasciculus restitutus est|$1 fasciculi restituti sunt}}",
        "cannotundelete": "Abrogatio deletionis fefellit; fortasse aliquis iam paginam restituit.",
        "undelete-header": "Pro paginis nuper deletis, vide [[Special:Log/delete|indicem deletionum]].",
        "undelete-search-box": "Quaerere inter paginas iam deletas",
        "logentry-newusers-autocreate": "Usori $1 nomen automatice impositum est",
        "logentry-protect-protect": "$1 {{GENDER:$2|protegit}} $3 $4",
        "rightsnone": "(nullus)",
-       "revdelete-summary": "summarium recensionis",
        "feedback-cancel": "Dimittere",
        "feedback-close": "Factum",
        "feedback-error2": "Error: Recensio non additur",
        "feedback-message": "Nuntius:",
        "searchsuggest-search": "Quaerere apud {{grammar:accusative|{{SITENAME}}}}",
        "searchsuggest-containing": "continens...",
-       "api-error-empty-file": "Fasciculus inmissus vacuus est.",
        "api-error-emptypage": "Vacuas novas paginas creare non licet.",
-       "api-error-filename-tooshort": "Nomen fasciculi brevius est.",
-       "api-error-filetype-banned": "Talia genera fasciculorum permissa non sunt.",
-       "api-error-illegal-filename": "Nomen fasciculi permissum non est.",
-       "api-error-mustbeloggedin": "Ad fasciculos deferendos nomen des necesse est.",
        "api-error-unknownerror": "Error incognitus: \"$1\".",
        "expandtemplates": "Formulas resolvere",
        "special-characters-group-latin": "Latinum",
index db6cd9f..bb39b02 100644 (file)
        "password-change-forbidden": "No se puede kambiar contrasenyas en este viki.",
        "login": "Entrar",
        "nav-login-createaccount": "Entrar / criar un cuento",
-       "userlogin": "Entrar / Criar cuento",
        "logout": "Salir",
        "userlogout": "Salir",
        "userlogin-noaccount": "No tiene un kuento?",
        "userlogin-joinproject": "Abonar {{SITENAME}}",
-       "nologin": "¿No tienes un cuento? '''$1'''.",
-       "nologinlink": "Criar un kuento",
        "createaccount": "Criar un cuento",
-       "gotaccount": "¿Ya tienes un cuento? '''$1'''.",
-       "gotaccountlink": "Entrar",
-       "userlogin-resetlink": "Olvidates tus detalyos de akseso?",
        "userlogin-resetpassword-link": "Olvidaste tu kontrasenya?",
        "userlogin-createanother": "Krear otro kuento",
        "createacct-emailrequired": "Adreso de korreo elektroniko",
        "createacct-another-email-ph": "Eskrive el adreso de korreo elektronico",
        "createaccountmail": "Uzar una contrasenya temporal y embiarla al korreo elektronico espesificado",
        "createacct-realname": "Nombre verdadero (opsyonal)",
-       "createaccountreason": "Razon:",
        "createacct-reason": "Razon",
        "createacct-submit": "Krear tu cuento",
        "createacct-another-submit": "Krear otro kuento",
        "rcshowhideanons": "$1 usadores anónimos",
        "rcshowhidepatr": "$1 trocamientos akavidados",
        "rcshowhidemine": "$1 mis trocamientos",
-       "rclinks": "Ver los $1 trocamientos dalcavo en los $2 días dalcavo<br />$3",
+       "rclinks": "Ver los $1 trocamientos dalcavo en los $2 días dalcavo",
        "diff": "dif",
        "hist": "ist",
        "hide": "Esconder",
index 3720b09..fa64a53 100644 (file)
        "readonlywarning": "<strong>OPGEPASST: D'Datebank gouf wéinst Maintenanceaarbechte gespaart, dofir kënnt Dir Är Ännerungen den Ament net ofspäicheren.</strong>\nDir kënnt den Text kopéieren an an een Textfichier drasetzen an deen ofspäicheren fir méi spéit.\n\nDe System-Administrateur deen d'Datebank gespaart huet, huet dës Erklärung ginn: $1",
        "protectedpagewarning": "'''OPGEPASST: Dës Säit gouf gespaart a kann nëmme vun engem Administrateur geännert ginn.''' Déi lescht Zeil aus de Logbicher fannt Dir zu Ärer Informatioun hei ënnendrënner.",
        "semiprotectedpagewarning": "'''Bemierkung:''' Dës Säit gouf sou gespaart, datt nëmme ugemellt Benotzer s'ännere kënnen. Déi lescht Zeil aus de Logbicher fannt Dir zu Ärer Informatioun hei ënnendrënner.",
-       "cascadeprotectedwarning": "<strong>Opgepasst:</strong> Dës Säit gouf gespaart a kann nëmme vu Benotzer mat Administrateursrechter geännert ginn. Si ass an dës {{PLURAL:$1|Säit|Säiten}} agebonnen, déi duerch Cascadespäroptioun gespaart {{PLURAL:$1|ass|sinn}}:'''",
+       "cascadeprotectedwarning": "<strong>Opgepasst:</strong> Dës Säit gouf gespaart a kann nëmme vu Benotzer mat [[Special:ListGroupRights|spezifische Rechter]] geännert ginn. Si ass an dës {{PLURAL:$1|Säit|Säiten}} agebonnen, déi duerch Cascadespäroptioun gespaart {{PLURAL:$1|ass|sinn}}:'''",
        "titleprotectedwarning": "'''OPGEPASST: Dës Säit gouf gespaart sou datt [[Special:ListGroupRights|spezifesch Rechter]] gebraucht gi fir se uleeën ze kënnen.''' Déi lescht Zeil aus de Logbicher fannt Dir zu Ärer Informatioun hei ënnendrënner.",
        "templatesused": "{{PLURAL:$1|Schabloun|Schablounen}} déi op dëser Säit am Gebrauch sinn:",
        "templatesusedpreview": "{{PLURAL:$1|Schabloun|Schablounen}} déi an dëser nach net gespäicherter Versioun benotzt {{PLURAL:$1|gëtt|ginn}}:",
        "saveusergroups": "{{GENDER:$1|Benotzer}}gruppe späicheren",
        "userrights-groupsmember": "Member vun:",
        "userrights-groupsmember-auto": "Implizit Member vun:",
-       "userrights-groups-help": "Dir kënnt d'Gruppen zu deenen dëse Benotzer gehéiert änneren.\n* Een ugekräizt Haische bedeit, datt de Benotzer Member vun dëser Grupp ass.\n* Een net ugekräizt Haische bedeit, datt de Benotzer net Member vun dëser Grupp ass.\n* E Stäerchen (*) bedeit datt Dir d'Grupp net méi ewechhuele kënnt wann e bis eemol dobäigesat ass oder gouf.\n* Eng Raut (#) gëtt un Datt Dir d'Oflafzäit vun dëser Grupp just zrécksetze kënnt; Dir kënnt se net no vir setzen.",
+       "userrights-groups-help": "Dir kënnt d'Gruppen zu deenen dëse Benotzer gehéiert änneren.\n* Een ugekräizt Haische bedeit, datt de Benotzer Member vun dëser Grupp ass.\n* Een net ugekräizt Haische bedeit, datt de Benotzer net Member vun dëser Grupp ass.\n* E Stäerchen (*) bedeit datt Dir d'Grupp net méi ewechhuele kënnt wann e bis eemol dobäigesat ass oder gouf.\n* Eng Raut (#) gëtt un Datt Dir d'Oflafzäit als Member vun dëser Grupp just zrécksetze kënnt; Dir kënnt se net no vir setzen.",
        "userrights-reason": "Grond:",
        "userrights-no-interwiki": "Dir hutt net déi néideg Rechter, fir d'Rechter vu Benoutzer op anere Wikien z'änneren.",
        "userrights-nodatabase": "D'Datebank $1 gëtt et net oder se ass net lokal.",
        "right-editsemiprotected": "Säiten déi als  \"{{int:protect-level-autoconfirmed}}\" gespaart sinn änneren",
        "right-editcontentmodel": "De Modell vum Inhalt vun enger Säit änneren",
        "right-editinterface": "De Benotzerinterface änneren",
-       "right-editusercssjs": "Anere Benotzer hir CSS a JS Fichieren änneren",
        "right-editusercss": "Anere Benotzer hir CSS Fichieren änneren",
        "right-edituserjs": "Anere Benotzer hir JavaScript Fichieren änneren",
        "right-editmyusercss": "Är eegen CSS-Fichieren änneren",
        "rcshowhidecategorization": "Kategorisatioun vu Säite $1",
        "rcshowhidecategorization-show": "Weisen",
        "rcshowhidecategorization-hide": "Verstoppen",
-       "rclinks": "Déi lescht $1 Ännerunge vun de leschten $2 Deeg weisen.<br />$3",
+       "rclinks": "Déi lescht $1 Ännerunge vun de leschten $2 Deeg weisen.",
        "diff": "Ënnerscheed",
        "hist": "Versiounen",
        "hide": "verstoppen",
        "undeleteviewlink": "weisen",
        "undeleteinvert": "Auswiel ëmdréinen",
        "undeletecomment": "Grond:",
-       "undeletedrevisions": "$1 {{PLURAL:$1|Versioun gouf|$1 Versioune goufe}} restauréiert",
-       "undeletedrevisions-files": "{{PLURAL:$1|1 Versioun|$1 Versiounen}} a(n) {{PLURAL:$2|1 Fichier|$2 Fichiere}} goufe restauréiert",
-       "undeletedfiles": "$1 {{PLURAL:$1|Fichier gouf|Fichiere goufe}} restauréiert",
        "cannotundelete": "E puer oder all d'Restauratiounen hunn net funktionéiert:\n$1",
        "undeletedpage": "'''$1''' gouf restauréiert.\n\nAm [[Special:Log/delete|Läsch-Logbuch]] fannt Dir déi geläscht a restauréiert Säiten.",
        "undelete-header": "Kuckt [[Special:Log/delete|Läschlescht]] fir rezent geläscht Säiten.",
        "sp-contributions-uploads": "Eropgeluede Fichieren",
        "sp-contributions-logs": "Logbicher",
        "sp-contributions-talk": "diskutéieren",
-       "sp-contributions-userrights": "Verwaltung vun de Benotzerrechter",
+       "sp-contributions-userrights": "Verwaltung vun de {{GENDER:$1|Benotzer}}rechter",
        "sp-contributions-blocked-notice": "Dëse Benotzer ass elo gespaart. Déi lescht Entrée am Läsch-Logbuch steet als Referenz hei ënnendrënner:",
        "sp-contributions-blocked-notice-anon": "Dës IP-Adress ass elo gespaart.\nËnnendrënner steet déi lescht Aschreiwung an d'Spärlëscht:",
        "sp-contributions-search": "No Kontributioune sichen",
        "unblocked-id": "D'Spär $1 gouf opgehuewen",
        "unblocked-ip": "D'Spär vum [[Special:Contributions/$1|$1]] gouf opgehuewen.",
        "blocklist": "Gespaart Benotzer",
+       "autoblocklist": "Automatesch Spären",
+       "autoblocklist-submit": "Sichen",
+       "autoblocklist-legend": "Automatesche Spären opzielen",
+       "autoblocklist-empty": "D'Lëscht vun den automatesche Spären ass eidel.",
        "ipblocklist": "Gespaart Benotzer",
        "ipblocklist-legend": "No engem gespaarte Benotzer sichen",
        "blocklist-userblocks": "Benotzerspäre verstoppen",
        "anonymous": "{{PLURAL:$1|Anonyme Benotzer|Anonym Benotzer}} op {{SITENAME}}",
        "siteuser": "{{SITENAME}}-Benotzer $1",
        "anonuser": "Anonyme(n) {{SITENAME}}-Benotzer $1",
-       "lastmodifiedatby": "Dës Säit gouf den $1 ëm $2 Auer vum $3 fir d'lescht geännert.",
+       "lastmodifiedatby": "Dës Säit gouf de(n) $1 ëm $2 Auer vum $3 fir d'lescht geännert.",
        "othercontribs": "Op der Basis vun der Aarbecht vum $1",
        "others": "anerer",
        "siteusers": "{{SITENAME}} {{PLURAL:$2|Benotzer}} $1",
        "confirmrecreate": "De Benotzer [[User:$1|$1]] ([[User talk:$1|Diskussioun]]) huet dës Säit {{GENDER:$1|geläscht}}, nodeems datt Dir ugefaangen hutt drun ze schaffen. D'Begrënnung war: <em>$2</em>\nBestätegt w.e.g., datt Dir dës Säit wierklech erëm nei opmaache wëllt.",
        "confirmrecreate-noreason": "De Benotzer [[User:$1|$1]] ([[User talk:$1|Diskussioun]]) huet dës Säit {{GENDER:$1|geläscht}}, nodeems datt Dir ugefaangen hutt drun ze schaffen. Confirméiert w.e.g., datt Dir dës Säit wierklech erëm nei opmaache wëllt.",
        "recreate": "Nees uleeën",
+       "confirm-purge-title": "Dës Säit eidelmaachen",
        "confirm_purge_button": "OK",
        "confirm-purge-top": "Dës Säit aus dem Server-Cache läschen?",
        "confirm-purge-bottom": "Mécht de Cache vun enger Säit eidel a forcéiert d'Uweise vun der aktueller Versioun.",
        "htmlform-user-not-valid": "<strong>$1</strong> ass kee valabele Benotzernumm.",
        "logentry-delete-delete": "$1 {{GENDER:$2|huet}} d'Säit $3 geläscht",
        "logentry-delete-delete_redir": "$1 huet d'Viruleedung $3 duerch Iwwerschreiwe {{GENDER:$2|geläscht}}.",
-       "logentry-delete-restore": "$1 {{GENDER:$2|huet}} d'Säit $3 restauréiert",
+       "logentry-delete-restore": "$1 {{GENDER:$2|huet}} d'Säit $3 ($4) restauréiert",
+       "logentry-delete-restore-nocount": "$1 {{GENDER:$2|huet}} d'Säit $3 restauréiert",
+       "restore-count-revisions": "{{PLURAL:$1|1 Versioun|$1 Versiounen}}",
+       "restore-count-files": "{{PLURAL: $1|1 Fichier|$1 Fichieren}}",
        "logentry-delete-event": "$1 huet d'Visibilitéit vun {{PLURAL:$5|engem Evenement|$5 Evenementer}} am Logbuch op $3:$4 {{GENDER:$2|geännert}}",
        "logentry-delete-revision": "$1 huet d'Visibilitéit {{PLURAL:$5|vun enger Versioun|vu(n) $5 Versiounen}} op der Säit $3:$4 {{GENDER:$2|geännert}}",
        "logentry-delete-event-legacy": "$1 huet d'Visibilitéit vun Elementer am Log op $3 {{GENDER:$2|geännert}}",
        "special-characters-group-thai": "Thai",
        "special-characters-group-lao": "Lao",
        "special-characters-group-khmer": "Khmer",
+       "special-characters-group-canadianaboriginal": "Kanadesch Silbeschrëft",
        "special-characters-title-endash": "en dash",
        "special-characters-title-emdash": "em dash",
        "special-characters-title-minus": "Minus-Zeechen",
        "userjsispublic": "DEnkt drun: Op JavaScript-Ënnersäite solle keng vertraulech Informatioune stoe well se vun anere Benotzer kënne gesi ginn.",
        "restrictionsfield-badip": "Net valabel IP-Adress oder Beräich: $1",
        "restrictionsfield-label": "Zougeloossen IP-Beräicher:",
-       "revid": "Versioun $1"
+       "revid": "Versioun $1",
+       "gotointerwiki": "{{SITENAME}} verloossen",
+       "gotointerwiki-invalid": "De spezifizéierten Titel war net valabel.",
+       "undelete-cantedit": "Dir kënnt dës Säit net restauréiere well Dir dës Säit net änneren däerft.",
+       "undelete-cantcreate": "Dir kënnt dës Säit net restauréieren well et elo keng Säit mat deem Numm gëtt a well Dir dës Säit net uleeën däerft."
 }
index 3bf5384..07c6971 100644 (file)
        "yourdomainname": "Куь домен",
        "login": "Гьахьун",
        "nav-login-createaccount": "Гьахьун/аккаунт туькӀуьрун",
-       "userlogin": "Гьахьун/аккаунт туькӀуьрун",
-       "userloginnocreate": "Гьахьун",
        "logout": "ЭкъечӀун",
        "userlogout": "ЭкъечӀун",
        "notloggedin": "Куьн гьахьнавач",
-       "nologin": "Квез аккаунт авачни? $1.",
-       "nologinlink": "Аккаунт туькӀуьрун",
        "createaccount": "Аккаунт туькӀуьрун",
-       "gotaccount": "Квез аккаунт авани?$1",
-       "gotaccountlink": "Гьахьун",
-       "userlogin-resetlink": "Гьахьунин куьлуь-шуьлуьяр рикӀел алатнани?",
        "createaccountmail": "Э-чар галаз",
-       "createaccountreason": "Себеб:",
        "loginerror": "Гьахьунин гъалатӀ",
        "createaccounterror": "И аккаунт туькӀуьриз мумкин ттуш: $1",
        "loginsuccesstitle": "Агалкьунралди гьахьун",
        "rcshowhidemine": "$1 зи  дуьзар хъувунар",
        "rcshowhidemine-show": "Къалурун",
        "rcshowhidemine-hide": "Чуьнуьхун",
-       "rclinks": "Эхиримжи $2 йикъан къене $1 масакIавилер къалура <br />$3",
+       "rclinks": "Эхиримжи $2 йикъан къене $1 масакIавилер къалура",
        "diff": "тафават",
        "hist": "тарих",
        "hide": "Чуьнуьхун",
index 1d786c2..4f679d7 100644 (file)
        "yourdomainname": "Tu domina:",
        "login": "Identifia",
        "nav-login-createaccount": "Sinia per entra",
-       "userlogin": "Sinia per entra",
        "logout": "Retira",
        "userlogout": "Sinia per retira",
        "userlogin-noaccount": "Tu no ave un conta?",
        "userlogin-joinproject": "Crea un conta con {{SITENAME}}",
-       "nologin": "Tu no ave un conta? '''$1'''.",
-       "nologinlink": "Crea  un conta",
        "createaccount": "Crea un conta",
-       "gotaccount": "Tu ave ja un conta? '''$1'''.",
-       "gotaccountlink": "Sinia per entra",
        "userlogin-resetpassword-link": "Tu ia oblida tua sinia secreta?",
        "userlogin-helplink2": "Aida me per identifia me",
        "createacct-emailrequired": "Adirije de e-posta",
        "createacct-emailoptional": "Adirije de e-posta (elejable)",
        "createacct-email-ph": "Entra tua adirije de e-posta",
        "createacct-another-email-ph": "Entra tua adirije de e-posta",
-       "createaccountreason": "Razona:",
        "createacct-reason": "Razona:",
        "createacct-submit": "Crea tua conta",
        "createacct-another-submit": "Crea un conta",
        "rcshowhidemine": "$1 me editas",
        "rcshowhidemine-show": "Mostra",
        "rcshowhidemine-hide": "Asconde",
-       "rclinks": "Mostra la $1 cambias presedente en la $2 dias presedente<br />$3",
+       "rclinks": "Mostra la $1 cambias presedente en la $2 dias presedente",
        "diff": "dife",
        "hist": "isto",
        "hide": "Asconde",
index 7afd6f8..22fc7df 100644 (file)
        "externaldberror": "Waliwo kiremya mu ggwanika lya data ekozesebwa okukakasa bamemba oba tokkirizibwa okukyusa ku akawunti yo ey'awalala.",
        "login": "Yingira",
        "nav-login-createaccount": "Yingira / kolawo akawunti",
-       "userlogin": "Yingira / kolawo akawunti",
-       "userloginnocreate": "Yingira",
        "logout": "Vaamu",
        "userlogout": "Vaamu",
        "notloggedin": "Tonnayingira",
-       "nologin": "Akawunti wafuna? '''$1'''.",
-       "nologinlink": "Funa akawunti",
        "createaccount": "Kolawo akawunti",
-       "gotaccount": "Akawunti wafuna? '''$1'''.",
-       "gotaccountlink": "Yingira",
-       "userlogin-resetlink": "Werabidde by'okozesa okuyingira?",
        "createaccountmail": "Akawunti gikole ne E-mail",
-       "createaccountreason": "Ekikukozesezawo akawunti:",
        "badretype": "Ebigambo ebikuumi by'owandise tebifaanagana.",
        "userexists": "Ery'obwa memba ly'owandise wali omulala alirina.<br />\nLonda eddala.",
        "loginerror": "Okuyingira kuzzeko kiremya:",
        "rcshowhideliu": "$1 ebya bamemba abali ku wiki ku saawa eno",
        "rcshowhideanons": "$1 eby'abakola ng'abat'eyanjude",
        "rcshowhidemine": "$1 nze byenkoze",
-       "rclinks": "Ndaga enkyukakyuka $1 ezikoledwa mu nnaku $2 ezaakayita<br />$3",
+       "rclinks": "Ndaga enkyukakyuka $1 ezikoledwa mu nnaku $2 ezaakayita",
        "diff": "enjawulo",
        "hist": "ennanda",
        "hide": "Kisa",
index a82bd16..daf176e 100644 (file)
        "externaldberror": "d'r Is 'n fout opgetraoje biej 't aanmelje biej de database of doe höbs gén toesjtömming diene externe gebroeker biej te wèrke.",
        "login": "Aanmèlde",
        "nav-login-createaccount": "Aanmelje / registrere",
-       "userlogin": "Aanmelde / registrere",
-       "userloginnocreate": "Mèlj aan",
        "logout": "Aafmelde",
        "userlogout": "Aafmelde",
        "notloggedin": "Neet aangemeld",
-       "nologin": "Höbs te nog geine gebroekersnaam? $1.",
-       "nologinlink": "Maak 'ne gebroekersnaam aan",
        "createaccount": "Nuuj gebroekersprofiel aanmake.",
-       "gotaccount": "Höbs te al 'ne gebroekersnaam? '''$1'''.",
-       "gotaccountlink": "Inlogge",
-       "userlogin-resetlink": "Bös se dien aanmèljingsgegaeves vergaete?",
        "createaccountmail": "via de e-mail",
-       "createaccountreason": "Raeje:",
        "badretype": "De ingeveurde wachwäörd versjille vanein.",
        "userexists": "De gebroekersnaam dae se höbs ingeveurd weurt al gebroek.\n\nKees estebleef 'ne angere naam.",
        "loginerror": "Inlogfout",
        "passwordreset-disabled": "'t Is hie neet meugelik óm die wachwaord óbbenuits in te sjtelle.",
        "passwordreset-username": "Gebroekersnaam:",
        "passwordreset-domain": "Domein:",
-       "passwordreset-capture": "Bekiek de resulterenden e-mail?",
-       "passwordreset-capture-help": "Es se dit vekske aanvènks, weurt d'n e-mail (mit e tiedelik wachwaord) nao de gebroek gesjik en ouch aan dich getuind.",
        "passwordreset-email": "E-mailadres:",
        "passwordreset-emailtitle": "Gebroekersgegaeves óp {{SITENAME}}",
        "passwordreset-emailtext-ip": "Emes, wersjienlik doe, vanaaf 't IP-adres $1, haet dien gebroekersgegaeves veur {{SITENAME}} ($4) ópgevraog.\nDe volgende {{PLURAL:$3|gebroeker is|gebroekers zint}} gekoppeld aan dit e-mailadres:\n\n$2\n\n{{PLURAL:$3|Dit tiedelik wachwaord vervilt|Dees tiedelike wachweurd vervallen}} euver {{PLURAL:$5|einen daag|$5 daag}}.\nMel dich aan en veranger 't wachwaord noe. Es se dit verzeuk neet zelf hes gedaon, of es se 't oorspronkelik wachwaord nog kins en 't neet anges wils, laot dit berich den en blief dien aad wachwaord gebroeke.",
        "saveprefs": "Veurkäöre opsjlaon",
        "restoreprefs": "Terug nao standaardinstellinge",
        "prefs-editing": "Aafmeitinge tèksveld",
-       "rows": "Regels",
-       "columns": "Kolomme",
        "searchresultshead": "Insjtèllinge veur zeukresultate",
        "stub-threshold": "Drempel veur markering <a href=\"#\" class=\"stub\">begske</a>:",
        "stub-threshold-disabled": "Oetgezatj",
        "userrights-reason": "Reeje:",
        "userrights-no-interwiki": "Doe höbs gein rechte om gebroekersrechte op anger wiki's te wiezige.",
        "userrights-nodatabase": "Database $1 besteit neet of is gein plaatselike database.",
-       "userrights-nologin": "Doe mos dich [[Special:UserLogin|aanmelle]] mit 'ne gebroeker mit de zjuuste rech om gebroekersrech toe te wieze.",
-       "userrights-notallowed": "Doe höbs gein rechte om gebroekersrechte toe te voegen of te wisse.",
        "userrights-changeable-col": "Gróppe dies te kèns behere",
        "userrights-unchangeable-col": "Gróppe dies te neet kèns behere",
        "group": "Gróp:",
        "right-protect": "Beveiligingsniveaus wijzige",
        "right-editprotected": "Beveiligde pagina's bewerke",
        "right-editinterface": "De gebroekersinterface bewerke",
-       "right-editusercssjs": "De CSS- en JS-bestande van angere gebroekers bewerke",
        "right-editusercss": "De CSS-bestande van angere gebroekers bewerke",
        "right-edituserjs": "De JS-bestande van angere gebroekers bewerke",
        "right-rollback": "Snel de letste bewerking(e) van 'n gebroeker van 'n pagina terugdraaie",
        "right-siteadmin": "De database blokkere en weer vriegaeve",
        "right-override-export-depth": "Export paazjes midin geslinkdje paazjes mit 'n deepdje ven 5",
        "right-sendemail": "Versjik e-mail aan anger gebroekers",
-       "right-passwordreset": "Bekiek e-mails van ópnuuj ingestèldje wachwäörd",
        "newuserlogpage": "Logbook nuuj gebroekers",
        "newuserlogpagetext": "Hiej ónger saton de nuuj ingesjreve gebroekers.",
        "rightslog": "Gebroekersrechtelogbook",
        "rcshowhideanons": "$1 anonieme gebroekers",
        "rcshowhidepatr": "$1 gecontroleerde bewerkinge",
        "rcshowhidemine": "$1 mien bewirkinge",
-       "rclinks": "Bekiek de $1 lètste verangeringe van de aafgeloupe $2 daag.<br />$3",
+       "rclinks": "Bekiek de $1 lètste verangeringe van de aafgeloupe $2 daag.",
        "diff": "vers",
        "hist": "hist",
        "hide": "Versjtaek",
        "undeleteviewlink": "Bekiek",
        "undeleteinvert": "Ómgedriejde selectie",
        "undeletecomment": "Reeje:",
-       "undeletedrevisions": "$1 {{PLURAL:$1|versie|versies}} truukgeplaatsj",
-       "undeletedrevisions-files": "$1 {{PLURAL:$1|versie|versies}} en $2 {{PLURAL:$2|bestandj|bestenj}} trökgeplaats",
-       "undeletedfiles": "$1 {{PLURAL:$1|bestandj|bestenj}} trökgeplaats",
        "cannotundelete": "Verwiedere mislùk. Mesjien haet 'ne angere gebroeker de pazjena al verwiederd.",
        "undeletedpage": "'''$1 is trökgeplaats'''\n\nIn 't [[Special:Log/delete|logbook verwiederde pazjena's]] staon recènte verwiederinge en herstelhanjelinge.",
        "undelete-header": "Zuug [[Special:Log/delete|'t logbook verwiederde pazjena's]] veur recènt verwiederde pazjena's.",
        "logentry-newusers-create2": "$1 haet 'ne gebroeker $3 aangemaak",
        "logentry-newusers-autocreate": "De gebroeker $1 is autematis aangemaak",
        "rightsnone": "(gein)",
-       "revdelete-summary": "samevatting bewerke",
        "feedback-adding": "Feedback weurt aan pagina toegevoeg...",
        "feedback-bugcheck": "Good! Kónterleer ef of 't neet al ein vanne [$1 bekèndje bugs] is.",
        "feedback-bugnew": "Gekónterleerdj. Mèlj 'ne nuuj bug.",
        "feedback-thanks": "Danke! Diene feedback is oppe pagina \"[$2 $1]\" geplaats.",
        "searchsuggest-search": "Zeuke",
        "searchsuggest-containing": "bevat...",
-       "api-error-badaccess-groups": "Doe moogs gein bestenj uploade óp deze wiki.",
        "api-error-badtoken": "Intern fout: toke is slech.",
-       "api-error-copyuploaddisabled": "Uploade via URL steit óp deze server oet.",
-       "api-error-duplicate": "d'r {{PLURAL:$1|steit al e bestandj|staon al bestenj}} mit dezelfden inhawd oppe wiki.",
-       "api-error-duplicate-archive": "d'r {{PLURAL:$1|Waar al 'n anger bestandj|woren al $1 anger bestenj}} óppe site mitte zelfdjen inhawd, meh {{PLURAL:$1|det is|die zeen}} gewösj.",
-       "api-error-empty-file": "t Bestandj det se perbeers te uploade had gein inhald.",
        "api-error-emptypage": "Doe maags gein nuuj, laeg pagina's aanmake.",
-       "api-error-fetchfileerror": "Intern fout: d'r is get fout gegange bie 't óphaole van 't bestandj.",
-       "api-error-fileexists-forbidden": "d'r Besteit al e bestandj mitte naam \"$1\" det neet euversjreve kin waere.",
-       "api-error-fileexists-shared-forbidden": "d'r Besteit al e bestandj mitte naam \"$1\" inne gedeildje repositoir det neet euversjreve kin waere.",
-       "api-error-file-too-large": "t Bestandj det se perbeers te uploade waas te groet.",
-       "api-error-filename-tooshort": "t Bestandj det se perbeers te uploade had 'ne te kórte bestandjsnaam.",
-       "api-error-filetype-banned": "t Bestandj det se perbeers te uploade waas van e neet-toegelaote bestandjstype.",
-       "api-error-filetype-banned-type": "{{PLURAL:$4|'t bestandjstype $1 weurt|De bestandjstypes $1 waere}} neet toegelaote. {{PLURAL:$3|'t Toegelaote bestandjstype is|De toegelaote bestandjstypes zeen}} $2.",
-       "api-error-filetype-missing": "'t Bestandj haet gein extensie.",
-       "api-error-hookaborted": "De wieziging die se perbeers te make is aafgebraoke door 'nen oetbreidingshook.",
-       "api-error-http": "Intern fout: d'r kós gein verbinjing gemaak waere mitte server.",
-       "api-error-illegal-filename": "Deze bestandjsnaam is neet toegelaote.",
-       "api-error-internal-error": "Intern fout: d'r is get fout gegange tiedes 't verwirke vanne upload dore wiki.",
-       "api-error-invalid-file-key": "Intern fout: 't bestandj is neet aangetróffe inne tiedeliken ópslaag.",
-       "api-error-missingparam": "Intern fout: neet alle paramaeters zeen in 't verzeuk mitgeleverdj.",
-       "api-error-missingresult": "Intern fout: 't waar neet meugelik vas te stèllen of 't kopiejere is geslaag.",
-       "api-error-mustbeloggedin": "Doe mós aangemèldj zeen óm bestenj te kinnen uploade.",
-       "api-error-mustbeposted": "Inter fout: aanvraog vereis HTTP-POST.",
-       "api-error-noimageinfo": "De upload is aafgeróndj, meh de server haet gein gegaeves van 't bestandj vriegegaeve.",
-       "api-error-nomodule": "Intern fout: d'r is gein uploadmodule ingesteldj.",
-       "api-error-ok-but-empty": "Intern fout: de server haet gein gegaeves trögkgeleverdj.",
-       "api-error-overwrite": "E bestandj euversjrieve geit neet.",
        "api-error-stashfailed": "Intern fout: de server kós 't tiedelik bestandj neet ópslaon.",
-       "api-error-timeout": "De server haet neet inne verwachde tied geantjweurd.",
-       "api-error-unclassified": "dr Is 'n ónbekènde fout opgetraoje.",
-       "api-error-unknown-code": "Intern fout: \"$1\"",
-       "api-error-unknown-error": "Intern fout: d'r is get fout gegange tiedes 't uploade van 't bestandj.",
        "api-error-unknown-warning": "Onbekinde waorsjuwing: $1",
        "api-error-unknownerror": "Ónbekèndje fout: \"$1\"",
-       "api-error-uploaddisabled": "Upload steit oet óp deze wiki.",
-       "api-error-verification-error": "Dit bestandj is meugelik besjadig of haet 'n ónjuuste extensie.",
        "duration-seconds": "$1 {{PLURAL:$1|sekond|sekond}}",
        "duration-minutes": "$1 {{PLURAL:$1|menuut|menuut}}",
        "duration-hours": "$1 {{PLURAL:$1|oer|oer}}",
index 06998ae..0a6b7e9 100644 (file)
        "login": "Intra",
        "login-security": "Veifica a to identitæ",
        "nav-login-createaccount": "Intra / Registrate",
-       "userlogin": "Intra / Registrite",
-       "userloginnocreate": "Intra",
        "logout": "Sciorti",
        "userlogout": "Sciorti",
        "notloggedin": "No t'ê introu",
        "userlogin-noaccount": "No ti t'ê ancon registrou?",
        "userlogin-joinproject": "Registrite insce {{SITENAME}}",
-       "nologin": "No ti gh'æ ancon in acesso? '''$1'''.",
-       "nologinlink": "Creâ 'n' utensa",
        "createaccount": "Crea 'n nêuvo account",
-       "gotaccount": "Ti ghe l'æ za 'n' utensa? '''$1'''.",
-       "gotaccountlink": "Intra",
-       "userlogin-resetlink": "T'æ ascordòu i teu dæti de acesso?",
        "userlogin-resetpassword-link": "T'hæ miga ascordou a teu poula segretta?",
        "userlogin-helplink2": "Agiutto pe intrâ",
        "userlogin-loggedin": "Ti t'ê zà connesso comme {{GENDER:$1|$1}}.\nUsa o formulaio sottostante pe accede comme 'n atro utente.",
        "createaccountmail": "Doeuvia una password temporanea abrettio e mandila a l'adresso de posta elettronica speçificou",
        "createaccountmail-help": "O poeu ese doeuviou pe creâ un'utensa pe 'n'atra person-a sensa doveine conosce a password.",
        "createacct-realname": "Nomme reale (opçionâ)",
-       "createaccountreason": "Raxon:",
        "createacct-reason": "Raxon",
        "createacct-reason-ph": "Perché t'ê apreuvo a creâ un'atra utensa",
        "createacct-reason-help": "Messaggio vixualizou into registro da creaçion de l'utença",
        "right-editsemiprotected": "Modifica e pagine protette con \"{{int:protect-level-autoconfirmed}}\"",
        "right-editcontentmodel": "Modifica o modello de contegnuo de 'na paggina",
        "right-editinterface": "Modiffica l'interfaccia utente",
-       "right-editusercssjs": "Modifica i file CSS e JS di atri utenti",
        "right-editusercss": "Modifica i file CSS di atri utenti",
        "right-edituserjs": "Modiffica i file JS di atri utenti",
        "right-editmyusercss": "Modifica o file CSS do proppio utente",
        "rcshowhidecategorization": "$1 categorizzaçion da pagina",
        "rcshowhidecategorization-show": "Fanni vedde",
        "rcshowhidecategorization-hide": "Ascondi",
-       "rclinks": "Fanni vedde i $1 cangiaménti ciù reçenti fæti inti ùrtimi $2 giorni<br />$3",
+       "rclinks": "Fanni vedde i $1 cangiaménti ciù reçenti fæti inti ùrtimi $2 giorni",
        "diff": "diff",
        "hist": "stö",
        "hide": "Ascondi",
        "undeleteviewlink": "fanni védde",
        "undeleteinvert": "Inverti a seleçion",
        "undeletecomment": "Raxon:",
-       "undeletedrevisions": "{{PLURAL:$1|Una verscion recuperâ|$1 verscioin recuperæ}}",
-       "undeletedrevisions-files": "{{PLURAL:$1|Una verscion|$1 verscioin}} e $2 file recuperæ",
-       "undeletedfiles": "{{PLURAL:$1|Un file recuperou|$1 file recuperæ}}",
        "cannotundelete": "Çerti ò tutti i ripristini non riuscii:\n$1",
        "undeletedpage": "'''A pagina $1 a l'è stæta recuperâ'''\n\nConsurta o [[Special:Log/delete|registro de scançellaçioin]] pe vedde e scançellaçioin e i recupperi ciù reçente.",
        "undelete-header": "Consurta o [[Special:Log/delete|registro de scançellaçioin]] pe vedde e scassatue ciù reçente.",
        "logentry-tag-update-revision": "$1 {{GENDER:$2|o l'ha aggiornou}} i etichette da verscion $4 da paggina $3 ({{PLURAL:$7|azonta|azonte}} $6; {{PLURAL:$9|rimossa|rimosse}} $8)",
        "logentry-tag-update-logentry": "$1 {{GENDER:$2|o l'ha aggiornou}} i etichette da voxe de registro $5 de paggina $3 ({{PLURAL:$7|azonta|azonte}} $6; {{PLURAL:$9|rimossa|rimosse}} $8)",
        "rightsnone": "(nisciun)",
-       "revdelete-summary": "ögetto da modiffica",
        "feedback-adding": "Inseimento do feedback inta paggina...",
        "feedback-back": "Inderê",
        "feedback-bugcheck": "Ottimo! Controlla solo ch'o no segge za fra-i [$1 bug conosciui].",
index 453060c..2a14ffa 100644 (file)
        "yourpasswordagain": "Kēratigid sallisõnā ūtstõ:",
        "login": "Log sīezõ",
        "nav-login-createaccount": "Log sīezõ agā registrīer kȭlbatijizõks",
-       "userlogin": "Sīezõ loggimi agā kȭlbatijiz-konto lūomi",
        "logout": "Log ulzõ",
        "userlogout": "Log ulzõ",
-       "nologin": "Až täddõn äb ūo eņtš konto, '''$1'''.",
-       "nologinlink": "Registrīerõgid täs",
        "createaccount": "Lūo kont",
-       "gotaccount": "Až täddõn jubā um eņtš konto, '''$1'''.",
-       "gotaccountlink": "Log sīezõ",
-       "userlogin-resetlink": "Kas tēg unīztõ jarā eņtš sizzõlkēratimiz tīetõkst?",
        "createacct-submit": "Lūo kont",
        "mailmypassword": "Sōtõgid e-kēras ūž sallisõnā",
        "loginlanguagelabel": "Kēļ: $1",
        "rcshowhidemine": "$1 min parāmtimizt",
        "rcshowhidemine-show": "Nägț",
        "rcshowhidemine-hide": "vaŗț",
-       "rclinks": "Nägţ perīži $1 mõitõkši lǟndz $2 pǟva āigal <br />$3",
+       "rclinks": "Nägţ perīži $1 mõitõkši lǟndz $2 pǟva āigal",
        "diff": "vaiţ",
        "hist": "istōrij",
        "hide": "vaŗț",
index 24a123d..82030d1 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از فرم پایین برای ورود به عنوان یک کاربر دیگر استفاده کنید.",
        "createaccountmail": "استفاده از رمز عبور موقت تصادفی و ارسال آن به آدرس ایمیل مشخص شده",
        "createaccountmail-help": "تو مه‌تونی یک حساب ایجاد مه‌که‌ی سی کسی دیگر بدون شیفره نه‌زانی",
        "createacct-realname": "*نام راسکانی/واقعی *دل بخواهی",
-       "createaccountreason": ":دةلیل",
        "createacct-reason": "دةلیل",
        "createacct-reason-ph": "ئةرا حساووێ  تر مةسازین؟",
        "createacct-reason-help": "پیام د سیستم ایجاد خساب نمایش داده مه‌شوه",
        "right-editsemiprotected": "ویرایش صفحه حفاظت‌شده به عنوان \"{{int:protect-level-autoconfirmed}}\"",
        "right-editcontentmodel": "ویرایش مدل محتوای یک صفحه",
        "right-editinterface": "ویرایش واسط کاربری",
-       "right-editusercssjs": "ویرایش صفحه‌های CSS و JS دیگر کاربرها",
        "right-editusercss": "ویرایش صفحه‌های CSS دیگر کاربرها",
        "right-edituserjs": "ویرایش صفحه‌های JS دیگر کاربرها",
        "right-editmyusercss": "پرونده‌های سی‌اس‌اس کاربری خود را ویرایش کنید",
        "rcshowhidecategorization": "$1 رده‌بندی صفحه‌ها",
        "rcshowhidecategorization-show": "نیشان دائن",
        "rcshowhidecategorization-hide": "ئآشاردن-پنهان کردن",
-       "rclinks": "نمایش آخرین $1 تغییر در $2 روز اخیر<br />$3",
+       "rclinks": "نمایش آخرین $1 تغییر در $2 روز اخیر",
        "diff": "تفاوت",
        "hist": "تاریخچۀ",
        "hide": "ئآشاردن-پنهان کردن",
        "undeleteviewlink": "دیین/سئرکردن",
        "undeleteinvert": "انتخاب بپلئ/برعۀسگ بؤ",
        "undeletecomment": ":دةلیل",
-       "undeletedrevisions": "$1 نسخه احیا {{PLURAL:$1|شد}}",
-       "undeletedrevisions-files": "$1 نسخه و $2 پرونده احیا {{PLURAL:$1|شد|شدند}}.",
-       "undeletedfiles": "$1 پرونده احیا {{PLURAL:$1|شد|شدند}}.",
        "cannotundelete": "احیا ناموفق بود:\n$1",
        "undeletedpage": "'''$1 احیا شد'''\n\nبرای دیدن سیاههٔ حذف‌ها و احیاهای اخیر به  [[Special:Log/delete|سیاههٔ حذف]] رجوع کنید.",
        "undelete-header": "برای دیدن صفحه‌های حذف‌شدهٔ اخیر [[Special:Log/delete|سیاههٔ حذف]] را ببینید.",
        "logentry-tag-update-revision": "$1 برچسب نسخهٔ $4 صفحهٔ $3 را {{GENDER:$2|به‌روز کرد}} ($6 {{PLURAL:$7|افزوده‌شد}}؛ $8 {{PLURAL:$9|حذف شد}})",
        "logentry-tag-update-logentry": "$1 برچسب سیاههٔ $5 صفحهٔ $3 را {{GENDER:$2|به‌روز کرد}} ($6 {{PLURAL:$7|افزوده‌شد}}؛ $8 {{PLURAL:$9|حذف شد}})",
        "rightsnone": "(هؤیچ کام)",
-       "revdelete-summary": "خلاصة دةسکاری",
        "feedback-adding": "افزودن بازخورد به وةڵگة ...",
        "feedback-back": "گِل آوردن/برگشت",
        "feedback-bugcheck": "عالی‌است! فقط بررسی کنید که از [$1 ایرادهای شناخته‌شده] نباشد.",
index 0555632..d22f0ec 100644 (file)
        "externaldberror": "Gh'è 'n erùr söl server de autenticasiù estèrno o sedenò se g'ha mìa le autorizasiù nesesàre per agiurnà i dati de registrasiù estèrni.",
        "login": "Va dent",
        "nav-login-createaccount": "Vena denter / Crea un cünt",
-       "userlogin": "Vegní denter - Creè un cünt",
-       "userloginnocreate": "Vegn denter",
        "logout": "Va fö",
        "userlogout": "Và fö",
        "notloggedin": "Te seet minga dent in del sistema",
        "userlogin-noaccount": "Sét gnemò registràt?",
        "userlogin-joinproject": "Regìstret sö {{SITENAME}}",
-       "nologin": "Gh'avii anmò da registrav? $1.",
-       "nologinlink": "Creé un cünt!",
        "createaccount": "Creá un cünt",
-       "gotaccount": "Gh'hee-t giamò un cünt? '''$1'''.",
-       "gotaccountlink": "Va dent in del sistema",
-       "userlogin-resetlink": "Sét desmentegàt i tò dati de autenticasiù?",
        "userlogin-resetpassword-link": "Sét desmentegàt la tò password?",
        "userlogin-helplink2": "G'hét bezògn de 'na mà per autenticàt?",
        "userlogin-loggedin": "Te sét zabèla autenticàt come {{GENDER:$1|$1}}.\nDòpra el mòdulo ché sóta per turnà a autenticàt come 'n óter ütènt.",
        "createacct-another-email-ph": "Mét dét l'indirìs e-mail",
        "createaccountmail": "Dòpra 'na password a càzo temporànea e màndela a l'indirìs e-mail specificàt",
        "createacct-realname": "Nòm véro (upsiunàl)",
-       "createaccountreason": "Mutìf:",
        "createacct-reason": "Mutìf:",
        "createacct-reason-ph": "Che fòza che sét dré a creà 'n ótra ütènsa?",
        "createacct-submit": "Créa la tò ütènsa",
        "saveprefs": "Tegn i mudifech",
        "restoreprefs": "Ristabiliss i impustazión de default (en töte le sesiù)",
        "prefs-editing": "Cazèla de mudìfica",
-       "rows": "Riich:",
-       "columns": "Culònn:",
        "searchresultshead": "Cerca",
        "stub-threshold-disabled": "Dezativàt",
        "recentchangesdays": "Dé de fà éder endèi öltem cambiamèncc:",
        "userrights-reason": "Reson:",
        "userrights-no-interwiki": "Te gh'hee mía i permiss necessari per pudè mudifegà i dirit di druvadur di olter wiki.",
        "userrights-nodatabase": "La base dat $1 a gh'é mia, o pura a l'é mia locala.",
-       "userrights-nologin": "Al gh'a da [[Special:UserLogin|rintrà ent el sistema]] con un cunt d'administrator par podé dà di drecc ai dovracc.",
-       "userrights-notallowed": "Te g'hét mìa l'autorizasiù per mudificà i permès de ütènt.",
        "userrights-changeable-col": "Grüp che te pö mudifegà",
        "userrights-unchangeable-col": "Grüp che te pö mia mudifegà",
        "group-user": "Druvadur",
        "rcshowhidemine": "$1 i mè mudifich",
        "rcshowhidemine-show": "Fà ved",
        "rcshowhidemine-hide": "Scond",
-       "rclinks": "Fà vedé i ültim $1 cambiament in di ültim $2 dì<br />$3",
+       "rclinks": "Fà vedé i ültim $1 cambiament in di ültim $2 dì",
        "diff": "dif",
        "hist": "stòria",
        "hide": "Scund",
        "undeleteviewlink": "arda",
        "undeleteinvert": "Invertì la seleziòn",
        "undeletecomment": "Mutìf:",
-       "undeletedrevisions": "{{PLURAL:$1|1 revision|$1 versiun}} rimetüü a post",
        "undelete-search-title": "Sérca pàgine scancelàde",
        "undelete-search-box": "Sérca pàgine scancelàde",
        "undelete-search-prefix": "Fà ved i paginn che scumenzen per:",
index 7c0baaa..88c1fa4 100644 (file)
        "rcshowhideliu": "$1 basáleli bamíkitólí",
        "rcshowhideanons": "$1 basáleli sóngóló",
        "rcshowhidemine": "$1 mbóngwana ya ngáí",
-       "rclinks": "Komɔ́nisa mbóngwana $1 ya nsúka o mikɔlɔ $2<br />$3",
+       "rclinks": "Komɔ́nisa mbóngwana $1 ya nsúka o mikɔlɔ $2",
        "diff": "mbó.",
        "hist": "mokóló",
        "hide": "kobomba",
index 15b6624..a61a4c3 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ກະລຸນາໃຊ້ແບບຟອມຂ້າງລຸ່ມເພື່ອເຂົ້າສູ່ລະບົບໃນຊື່ອື່ນໆ.",
        "createaccountmail": "ໃຊ້ລະຫັດຜ່ານແບບສຸ່ມຊົ່ວຄາວແລະສົ່ງມັນໄປໃຫ້ທີ່ຢູ່ອີເມວທີ່ລະບຸ",
+       "createacct-another-submit": "ສ້າງບັນຊີ",
        "badretype": "ລະຫັດຜ່ານທີ່ທ່ານໄດ້ພິມຄືນບໍ່ກົງກັບທີ່ພິມກ່ອນ.",
        "loginerror": "ຂໍ້ຜິດພາດໃນການເຂົ້າສູ່ລະບົບ",
        "createacct-error": "ຂໍ້ຜິດພາດໃນການສ້າງບັນຊີ",
        "rcshowhideliu": "$1 ຜູ້ໃຊ້ໄດ້ເຊັນເຂົ້າ",
        "rcshowhideanons": "$1 ຜູ້ໃຊ້ບໍ່ສະແດງຊື່",
        "rcshowhidemine": "$1 ການດັດແກ້ໂດຍຂ້ອຍ",
-       "rclinks": "ສະແດງ $1ການປ່ຽນແປງ ຫຼ້າສຸດ ໃນ  $2ມື້ຫຼ້າສຸດ<br />$3",
+       "rclinks": "ສະແດງ $1ການປ່ຽນແປງ ຫຼ້າສຸດ ໃນ  $2ມື້ຫຼ້າສຸດ",
        "diff": "ສ່ວນຕ່າງ",
        "hist": "ປະຫວັດ",
        "hide": "ເຊື່ອງ",
index 3b90e11..4f6e44d 100644 (file)
        "yourdomainname": "Zwa domeni:",
        "login": "Menuhile",
        "nav-login-createaccount": "Menuhile / ipupezi sebelu",
-       "userlogin": "Menuhile / ipupezi sebelu",
        "logout": "Ile",
        "userlogout": "Ile",
        "notloggedin": "Ile sa akwezi",
-       "nologin": "Ni menuhile? '''$1'''.",
-       "nologinlink": "Ipupezi sebelu",
        "createaccount": "Ipupezi sebelu",
-       "gotaccount": "Xete a sa sebelu? '''$1'''.",
-       "gotaccountlink": "Menuhile",
        "createaccountmail": "dimeli",
        "badretype": "Sebu dafi ni sa identikali.",
        "userexists": "Sebu di sebelu sa sebelize. Hloli veti sebu petuho.",
        "prefs-watchlist": "Mukoloko di kentezi",
        "saveprefs": "Bulukezi",
        "prefs-editing": "Hloli ye ng'i",
-       "rows": "Roo:",
-       "columns": "Kalom:",
        "searchresultshead": "Fatukile",
        "default": "auto",
        "prefs-files": "Imegini",
        "rcshowhideanons": "$1 IP",
        "rcshowhidepatr": "$1 afina patoli",
        "rcshowhidemine": "$1 zwa afina",
-       "rclinks": "Kamukile lapu-lila $1 petuhoni di lapu-lila $2 dia<br />$3",
+       "rclinks": "Kamukile lapu-lila $1 petuhoni di lapu-lila $2 dia",
        "diff": "petuho",
        "hist": "bundau",
        "hide": "Cwankekile",
index d8b344d..9737063 100644 (file)
        "right-editsemiprotected": "Taisyti puslapius, apsaugotus kaip \"{{int:protect-level-autoconfirmed}}\"",
        "right-editcontentmodel": "Redaguoti puslapio turinio modelį",
        "right-editinterface": "Keisti naudotojo aplinką",
-       "right-editusercssjs": "Redaguoti kitų naudotojų CSS ir JS failus",
        "right-editusercss": "Redaguoti kitų naudotojų CSS failus",
        "right-edituserjs": "Redaguoti kitų naudotojų JS failus",
        "right-editmyusercss": "Redaguoti savo vartotojo CSS failus",
        "rcshowhidecategorization": "$1 puslapių kategorizavimus",
        "rcshowhidecategorization-show": "Rodyti",
        "rcshowhidecategorization-hide": "Slėpti",
-       "rclinks": "Rodyti paskutinius $1 pakeitimų per paskutiniąsias $2 dienų<br />$3",
+       "rclinks": "Rodyti paskutinius $1 pakeitimų per paskutiniąsias $2 dienų",
        "diff": "skirt",
        "hist": "ist",
        "hide": "Slėpti",
        "notvisiblerev": "Versija buvo ištrinta",
        "watchlist-details": "Stebima {{PLURAL:$1|$1 puslapis|$1 puslapiai|$1 puslapių}}, neskaičiuojant aptarimų puslapių.",
        "wlheader-enotif": "El. pašto pranešimai yra įjungti.",
-       "wlheader-showupdated": "Puslapiai pakeisti nuo tada, kai paskutinį kartą apsilankėte juose, yra pažymėti '''pastorintai'''",
+       "wlheader-showupdated": "Puslapiai pakeisti nuo tada, kai paskutinį kartą apsilankėte juose, yra '''paryškinti'''.",
        "wlnote": "{{PLURAL:$1|Rodomas '''$1''' paskutinis pakeitimas, atliktas|Rodomi '''$1''' paskutiniai pakeitimai, atlikti|Rodoma '''$1''' paskutinių pakeitimų, atliktų}} per '''$2''' {{PLURAL:$2|paskutinę valandą|paskutines valandas|paskutinių valandų}}, nuo $3 $4.",
        "wlshowlast": "Rodyti paskutinių $1 valandų, $2 dienų",
        "watchlist-hide": "Slėpti",
        "modifiedarticleprotection": "pakeistas „[[$1]]“ apsaugos lygis",
        "unprotectedarticle": "atrakino „[[$1]]“",
        "movedarticleprotection": "perkelti apsaugos nustatymai iš „[[$2]]“ į „[[$1]]“",
-       "protectedarticle-comment": "{{GENDER:$2|Apsaugojo}} „[[$1]]“",
+       "protectedarticle-comment": "{{GENDER:$2|Užrakino}} „[[$1]]“",
        "modifiedarticleprotection-comment": "{{GENDER:$2|Pakeitė „[[$1]]“ apsaugos lygį}}",
        "unprotectedarticle-comment": "{{GENDER:$2|Pašalino apsaugą}} iš „[[$1]]“",
        "protect-title": "Nustatomas apsaugos lygis puslapiui „$1“",
        "undeleteviewlink": "žiūrėti",
        "undeleteinvert": "Žymėti priešingai",
        "undeletecomment": "Priežastis:",
-       "undeletedrevisions": "{{PLURAL:$1|atkurta $1 versija|atkurtos $1 versijos|atkurta $1 versijų}}",
-       "undeletedrevisions-files": "{{PLURAL:$1|atkurta $1 versija|atkurtos $1 versijos|atkurta $1 versijų}} ir $2 {{PLURAL:$2|failas|failai|failų}}",
-       "undeletedfiles": "{{PLURAL:$1|atkurtas $1 failas|atkurti $1 failai|atkurta $1 failų}}",
        "cannotundelete": "Visi arba kai kurie atkūrimai nepavyko:\n$1",
        "undeletedpage": "'''$1 buvo atkurtas'''\n\nPeržiūrėkite [[Special:Log/delete|trynimų sąrašą]], norėdami rasti paskutinių trynimų ir atkūrimų sąrašą.",
        "undelete-header": "Kad sužinotumėte, kurie puslapiai paskiausiai ištrinti, žiūrėkite [[Special:Log/delete|šalinimų sąrašą]].",
        "newimages-summary": "Šis specialus puslapis rodo paskiausiai įkeltus failus.",
        "newimages-legend": "Filtras",
        "newimages-label": "Failo vardas (ar jo dalis):",
+       "newimages-user": "IP adresas ar vartotojo vardas",
        "newimages-showbots": "Rodyti robotų atliktus įkėlimus",
        "newimages-hidepatrolled": "Paslėpti patruliuotus įkeltus failus",
        "noimages": "Nėra ką parodyti.",
        "htmlform-user-not-valid": "<strong>$1</strong> nėra tinkamas naudotojo vardas.",
        "logentry-delete-delete": "$1 {{GENDER:$2|ištrynė}} puslapį $3",
        "logentry-delete-delete_redir": "$1 pervadindamas {{GENDER:$2|ištrynė}} buvusį nukreipimą $3",
-       "logentry-delete-restore": "$1 {{GENDER:$2|atkūrė}} puslapį $3",
+       "logentry-delete-restore": "$1 atkūrė puslapį $3 ($4)",
+       "logentry-delete-restore-nocount": "$1 atkūrė puslapį $3",
+       "restore-count-files": "{{PLURAL:$1|1 failas|$1 failai}}",
        "logentry-delete-event": "$1 {{GENDER:$2|pakeitė}} matomumą {{PLURAL:$5|žurnalo įvykio|$5 žurnalo įvykių}} $3: $4",
        "logentry-delete-revision": "$1 {{GENDER:$2|pakeitė}} matomumą {{PLURAL:$5|versijos|$5 versijų}} puslapyje $3: $4",
        "logentry-delete-event-legacy": "$1 {{GENDER:$2|pakeitė}} matomumą žurnalo renginiams $3",
        "unlinkaccounts": "Atsieti paskyras",
        "unlinkaccounts-success": "Paskyra buvo atsieta.",
        "revid": "apžvalga $1",
-       "pageid": "puslapio ID $1"
+       "pageid": "puslapio ID $1",
+       "rawhtml-notallowed": "&lt;html&gt; negali būti naudojamos ne normaliuose puslapiuose.",
+       "gotointerwiki": "Išeinama iš {{SITENAME}}",
+       "gotointerwiki-invalid": "Nurodytas pavadinimas negalimas."
 }
index 78695da..1959540 100644 (file)
        "yourpassword": "Paroļs:",
        "login": "Dasaslāgt",
        "nav-login-createaccount": "Dasaslāgt / sataiseit jaunu lītuotuoju",
-       "userlogin": "Dasaslāgt / sataiseit jaunu lītuotuoju",
-       "userloginnocreate": "Dasaslāgt",
        "logout": "Atsaslāgt",
        "userlogout": "Atsaslāgt",
-       "nologinlink": "Registrētīs",
        "createaccount": "Sataiseit jaunu lītuotuoju",
-       "gotaccountlink": "Dasaslāgt",
-       "createaccountreason": "Īmesle:",
        "mailmypassword": "Atsyuteit maņ jaunu paroli",
        "loginlanguagelabel": "Volūda: $1",
        "changepassword": "Puormeit paroļu",
        "rcshowhideliu": "$1 dasaslāgtu lītuotuoju",
        "rcshowhideanons": "$1 anonimūs",
        "rcshowhidemine": "$1 munys puormejis",
-       "rclinks": "Paruodeit pādejuos $1 izmainis pādejūs $2 dīnu laikā.<br />$3",
+       "rclinks": "Paruodeit pādejuos $1 izmainis pādejūs $2 dīnu laikā.",
        "diff": "izmainis",
        "hist": "viesture",
        "hide": "Nūglobuot",
index d0fc2b3..bc7bf62 100644 (file)
@@ -4,7 +4,8 @@
                        "Lpachuau",
                        "RMizo",
                        "아라",
-                       "Macofe"
+                       "Macofe",
+                       "Stephanecbisson"
                ]
        },
        "tog-underline": "Zawmna hnuairinna",
        "externaldberror": "Insawifiahna felfai lo a awm lo a nih loh vëk pawhin i pawnlam siangchan tihdanglam phalsak i ni lo a ni ang.",
        "login": "Luhna",
        "nav-login-createaccount": "Luhna / siangchan siamna",
-       "userlogin": "Luhna/Siangchan siamna",
-       "userloginnocreate": "Inziah luhna",
        "logout": "Chhuahna",
        "userlogout": "Chhuahna",
        "notloggedin": "I la lût lo",
-       "nologin": "Siangchan i la nei lo maw? $1.",
-       "nologinlink": "Siangchan siam rawh",
        "createaccount": "Siangchan siam rawh le",
-       "gotaccount": "Siangchan i nei tawh sa maw? $1.",
-       "gotaccountlink": "Luhna",
-       "userlogin-resetlink": "I inziahluhna i theihnghilh maw?",
        "createaccountmail": "E-lehkhathawnin",
-       "createaccountreason": "Chhan:",
        "badretype": "I thurûk ziahte a inmil lo.",
        "userexists": "Hmangtu hming hman tawh a ni.\nHming dang i thlan a ngai.",
        "loginerror": "Inziahluh sual",
        "saveprefs": "Dahţhatna",
        "restoreprefs": "A awmdàn siamsaah dah lêt vek rawh",
        "prefs-editing": "Siamţhat",
-       "rows": "Tlar:",
-       "columns": "Thlur:",
        "searchresultshead": "Zawnna",
        "stub-threshold-disabled": "Tihnun a ni lo",
        "recentchangesdays": "Tihdanglam thar ni tihlan tùr chin:",
        "userrights-reason": "Chhan:",
        "userrights-no-interwiki": "Wiki dangah hmangtute dikna-chanvo siam danglam theihna phalna i nei lo.",
        "userrights-nodatabase": "Database $1 a awm lo a nih loh pawhin khawtual thil a nih loh hmel.",
-       "userrights-nologin": "Hmangtu dikna-chanvo bithliah thei tùr chuan roreltu siangchanin i [[Special:UserLogin| luh]] a ngai.",
-       "userrights-notallowed": "I siangchanin hmangtu dikna-chanvo belh leh paih theihna phalna a nei lo.",
        "userrights-changeable-col": "I thlâk theih pawlte",
        "userrights-unchangeable-col": "I thlâk theih loh pawlte",
        "group": "Pawl:",
        "rcshowhideanons": "hming hriat loh $1",
        "rcshowhidepatr": "siamthat vil $1",
        "rcshowhidemine": "ka siamţhat $1",
-       "rclinks": "Ni $2 kaltaa tihdanglamna hnuhnung $1 tihlanna<br /> $3.",
+       "rclinks": "Ni $2 kaltaa tihdanglamna hnuhnung $1 tihlanna.",
        "diff": "dnglmn",
        "hist": "chanchin",
        "hide": "Tihbona",
index c0035b9..407553c 100644 (file)
        "login": "Pieslēgties",
        "login-security": "Apstiprini savu identitāti",
        "nav-login-createaccount": "Izveidot jaunu lietotāju vai doties iekšā",
-       "userlogin": "Izveidot jaunu lietotāju vai doties iekšā",
-       "userloginnocreate": "Pieslēgties",
        "logout": "Iziet",
        "userlogout": "Iziet",
        "notloggedin": "Neesi iegājis",
        "userlogin-noaccount": "Nav dalībnieka konta?",
        "userlogin-joinproject": "Pievienojieties {{SITENAME}}",
-       "nologin": "Nav lietotājvārda? $1.",
-       "nologinlink": "Reģistrējies",
        "createaccount": "Izveidot jaunu lietotāju",
-       "gotaccount": "Tev jau ir lietotājvārds? '''$1'''!",
-       "gotaccountlink": "Pieslēgties",
-       "userlogin-resetlink": "Esat aizmirsis savu pieslēgšanās informāciju?",
        "userlogin-resetpassword-link": "Aizmirsi savu paroli?",
        "userlogin-helplink2": "Palīdzība ar pieslēgšanos",
        "userlogin-loggedin": "Tu esi pieslēdzies ar lietotājvārdu {{GENDER:$1|$1}}.\nLai pieslēgtos ar citu lietotājvārdu, aizpildi šo formu.",
        "createacct-another-email-ph": "Ievadiet e-pasta adresi",
        "createaccountmail": "Izmantot nejauši ģenerētu pagaidu paroli un nosūtīt to uz norādīto e-pasta adresi",
        "createacct-realname": "Īstais vārds (nav obligāts)",
-       "createaccountreason": "Iemesls:",
        "createacct-reason": "Iemesls",
        "createacct-reason-ph": "Kāpēc jūs veidojat citu kontu",
        "createacct-submit": "Izveidot savu kontu",
        "userrights-nodatabase": "Datubāze $1 neeksistē vai nav lokāla.",
        "userrights-changeable-col": "Grupas, kuras tu vari izmainīt",
        "userrights-unchangeable-col": "Grupas, kuras tu nevari izmainīt",
+       "userrights-expiry-othertime": "Cits laiks:",
        "group": "Grupa:",
        "group-user": "Dalībnieki",
        "group-autoconfirmed": "Automātiski apstiprinātie dalībnieki",
        "right-editprotected": "Labot aizsargātās lapas (bez kaskādes aizsardzības)",
        "right-editcontentmodel": "Labot lapas satura modeli",
        "right-editinterface": "Izmainīt dalībnieka interfeisu",
-       "right-editusercssjs": "Izmainīt citu dalībnieku CSS un JS failus",
        "right-editusercss": "Izmainīt citu dalībnieku CSS failus",
        "right-edituserjs": "Izmainīt citu dalībnieku JS failus",
        "right-editmyusercss": "Rediģējiet savus dalībnieka CSS failus",
        "grant-editmywatchlist": "Labot uzraugāmo rakstu sarakstu",
        "grant-editpage": "Labot esošās lapas",
        "grant-editprotected": "Labot aizsargātās lapas",
+       "grant-uploadfile": "Augšupielādēt jaunus failus",
        "grant-basic": "Pamattiesības",
        "grant-viewdeleted": "Skatīt dzēstos failus un lapas",
        "newuserlogpage": "Jauno dalībnieku reģistrs",
        "action-deletelogentry": "dzēst žurnāla ierakstus",
        "action-deletedhistory": "skatīt šīs lapas dzēsto vēsturi",
        "action-browsearchive": "meklēt dzēstās lapas",
-       "action-undelete": "atjaunot šo lapu",
-       "action-suppressrevision": "pārskatīt un atjaunot šo slēpto versiju",
+       "action-undelete": "atcelt lapu dzēšanu",
+       "action-suppressrevision": "pārskatīt un atjaunot slēptās versijas",
        "action-suppressionlog": "apskatīt šo privāto reģistru",
        "action-block": "bloķēt šo dalībnieku pret rakstu turpmāku labošanu",
        "action-protect": "izmainīt aizsardzības līmeņus šai lapai",
-       "action-import": "importēt šo lapu no citas viki",
+       "action-import": "importēt lapas no citas vikivietnes",
        "action-importupload": "importēt šo lapu no failu augšupielādes",
        "action-patrol": "atzīmēt citu labojumus kā pārbaudītus",
        "action-autopatrol": "iespēja savus labojumus atzīmēt kā pārbaudītus",
        "recentchanges-legend-heading": "<strong>Apzīmējumi:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (skatīt arī [[Special:NewPages|jaunās lapas]])",
        "recentchanges-submit": "Rādīt",
+       "rcfilters-activefilters": "Aktīvie filtri",
+       "rcfilters-restore-default-filters": "Atjaunot noklusētos filtrus",
+       "rcfilters-clear-all-filters": "Noņemt visus filtrus",
+       "rcfilters-search-placeholder": "Filtrēt pēdējās izmaiņas (pārlūko vai sāc rakstīt)",
        "rcfilters-invalid-filter": "Nederīgs filtrs",
+       "rcfilters-empty-filter": "Nav aktīvu filtru. Tiek rādītas visas izmaiņas.",
        "rcfilters-filterlist-title": "Filtri",
+       "rcfilters-filterlist-whatsthis": "Kas tas ir?",
+       "rcfilters-highlightbutton-title": "Izcelt rezultātus",
+       "rcfilters-highlightmenu-title": "Izvēlies krāsu",
+       "rcfilters-highlightmenu-help": "Izvēlies krāsu, lai izceltu šo īpašību",
        "rcfilters-filterlist-noresults": "Filtri nav atrasti",
        "rcfilters-filtergroup-registration": "Lietotāja reģistrācija",
+       "rcfilters-filter-registered-label": "Reģistrēti",
+       "rcfilters-filter-registered-description": "Pieslēgušies redaktori.",
+       "rcfilters-filter-unregistered-label": "Nereģistrēti",
+       "rcfilters-filter-unregistered-description": "Nepieslēgušies redaktori.",
+       "rcfilters-filter-editsbyself-label": "Tavi labojumi",
+       "rcfilters-filter-editsbyself-description": "Tevis veiktie labojumi.",
+       "rcfilters-filter-editsbyother-label": "Citu labojumi",
+       "rcfilters-filter-editsbyother-description": "Citu dalībnieku veiktie labojumi (bez taviem).",
+       "rcfilters-filtergroup-userExpLevel": "Pieredzes līmenis (tikai reģistrētiem dalībniekiem)",
+       "rcfilters-filtergroup-reviewstatus": "Pārskatīšanas statuss",
+       "rcfilters-filter-patrolled-label": "Patrulēti",
+       "rcfilters-filter-patrolled-description": "Labojumi, kas atzīmēti kā patrulēti.",
+       "rcfilters-filter-unpatrolled-label": "Nepatrulēti",
+       "rcfilters-filter-unpatrolled-description": "Labojumi, kas nav atzīmēti kā patrulēti.",
+       "rcfilters-filtergroup-significance": "Nozīmīgums",
+       "rcfilters-filter-minor-label": "Maznozīmīgi labojumi",
+       "rcfilters-filter-minor-description": "Labojumi, kas atzīmēti kā maznozīmīgi.",
+       "rcfilters-filter-major-label": "Nozīmīgi labojumi",
+       "rcfilters-filter-major-description": "Labojumi, kas nav atzīmēti kā maznozīmīgi.",
        "rcfilters-filtergroup-changetype": "Izmaiņu veids",
        "rcfilters-filter-pageedits-label": "Lapu labojumi",
        "rcfilters-filter-pageedits-description": "Labojumi vikivietnes saturā, diskusijā, kategoriju aprakstos...",
        "rcshowhidecategorization": "$1 lapu kategorizēšanu",
        "rcshowhidecategorization-show": "Rādīt",
        "rcshowhidecategorization-hide": "Paslēpt",
-       "rclinks": "Parādīt pēdējās $1 izmaiņas pēdējās $2 dienās.<br />$3",
+       "rclinks": "Parādīt pēdējās $1 izmaiņas pēdējās $2 dienās.",
        "diff": "izmaiņas",
        "hist": "hronoloģija",
        "hide": "paslēpt",
        "undeleteviewlink": "skatīt",
        "undeleteinvert": "Izvēlēties pretēji",
        "undeletecomment": "Iemesls:",
-       "undeletedrevisions": "$1 {{PLURAL:$1|versijas|versija|versijas}} {{PLURAL:$1|atjaunotas|atjaunota|atjaunotas}}",
-       "undeletedrevisions-files": "{{PLURAL:$1|$1 versijas|1 versija|$1 versijas}} un {{PLURAL:$2|$2 faili|1 fails|$2 faili}} atjaunoti",
-       "undeletedfiles": "{{PLURAL:$1|$1 faili atjaunoti|$1 fails atjaunots|$1 faili atjaunoti}}",
        "cannotundelete": "Atjaunošana neizdevās:\n$1",
        "undeletedpage": "'''$1 tika atjaunots'''\n\n[[Special:Log/delete|Dzēšanas reģistrā]] ir informācija par pēdējām dzēšanām un atjaunošanām.",
        "undelete-header": "Nesen dzēstajām lapām skatīt [[Special:Log/delete|dzēšanas reģistru]].",
        "namespace": "Vārdtelpa:",
        "invert": "Izvēlēties pretēji",
        "namespace_association": "Saistītā vārdtelpa",
+       "tooltip-namespace_association": "Atzīmē šo rūtiņu, lai iekļautu diskusijas vai temata vārdtelpu, kas saistīta ar izvēlēto vārdtelpu",
        "blanknamespace": "(Pamatlapa)",
        "contributions": "{{GENDER:$1|Dalībnieka|Dalībnieces|Dalībnieka}} devums",
        "contributions-title": "Dalībnieka $1 devums",
        "unblocked-range": "$1 tika atbloķēts",
        "unblocked-id": "Bloks $1 tika noņemts",
        "blocklist": "Bloķētie lietotāji",
+       "autoblocklist-submit": "Meklēt",
        "ipblocklist": "Bloķētie lietotāji",
        "ipblocklist-legend": "Meklēt bloķētu lietotāju",
        "blocklist-userblocks": "Paslēpt kontu bloķējumus",
        "logentry-delete-delete": "$1 {{GENDER:$2|izdzēsa}} lapu $3",
        "logentry-delete-delete_redir": "$1 {{GENDER:$2|izdzēsa}} pāradresāciju $3 pārrakstot",
        "logentry-delete-restore": "$1 {{GENDER:$2|atjaunoja}} lapu $3",
+       "restore-count-files": "{{PLURAL: $1|$1 faili|$1 fails|$1 faili}}",
        "revdelete-content-hid": "saturs slēpts",
        "revdelete-summary-hid": "labojuma kopsavilkums slēpts",
        "revdelete-uname-hid": "lietotājvārds slēpts",
        "logentry-upload-upload": "$1 {{GENDER:$2|augšupielādēja}} $3",
        "logentry-upload-overwrite": "$1 augšupielādēja jaunu $3 versiju",
        "rightsnone": "(nav)",
-       "revdelete-summary": "izmaiņu kopsavilkums",
        "feedback-adding": "Atsauksmes tiek pievienotas lapai...",
        "feedback-back": "Atpakaļ",
        "feedback-bugnew": "Es pārbaudīju. Ziņot par jaunu kļūdu",
index 81906f6..7e1cf99 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": "汝忘登簿所需?",
        "userlogin-resetpassword-link": "亡子符節?",
        "userlogin-helplink2": "助以登簿",
        "userlogin-createanother": "增另一簿",
        "createacct-email-ph": "書君郵址",
        "createaccountmail": "同郵",
        "createacct-realname": "實名(可選)",
-       "createaccountreason": "因:",
        "createacct-reason": "因:",
        "createacct-reason-ph": "汝另立一簿者何哉?",
        "createacct-submit": "增簿",
        "saveprefs": "儲",
        "restoreprefs": "重修",
        "prefs-editing": "在修",
-       "rows": "行數:",
-       "columns": "列數:",
        "searchresultshead": "尋",
        "stub-threshold": "<a href=\"#\" class=\"stub\">短頁連</a>格式門檻(位元組):",
        "stub-threshold-sample-link": "例",
        "userrights-reason": "因:",
        "userrights-no-interwiki": "爾無權改他山wiki之簿權也。",
        "userrights-nodatabase": "資料庫$1無存或非本地也。",
-       "userrights-nologin": "爾以有秩乲簿[[Special:UserLogin|登]]後以定簿之權也。",
-       "userrights-notallowed": "子之簿無權定簿之權也。",
        "userrights-changeable-col": "爾所管轄",
        "userrights-unchangeable-col": "非爾所轄",
        "userrights-irreversible-marker": "$1*",
        "right-protect": "改錮級與纂錮頁",
        "right-editprotected": "纂錮頁(無連錮)",
        "right-editinterface": "纂要",
-       "right-editusercssjs": "纂他簿之CSS與JavaScript檔",
        "right-editusercss": "纂他簿之CSS檔",
        "right-edituserjs": "纂他簿之JavaScript檔",
        "right-rollback": "速復上簿頁之纂",
        "rcshowhidemine-hide": "藏",
        "rcshowhidecategorization-show": "示",
        "rcshowhidecategorization-hide": "藏",
-       "rclinks": "$2日內$1近易。<br />$3",
+       "rclinks": "$2日內$1近易。",
        "diff": "辨",
        "hist": "誌",
        "hide": "藏",
        "undeleteviewlink": "察",
        "undeleteinvert": "反相",
        "undeletecomment": "因:",
-       "undeletedrevisions": "$1審已還",
-       "undeletedrevisions-files": "$1審、$2檔已還",
-       "undeletedfiles": "$1檔已還",
        "cannotundelete": "無以還檔;或復矣。",
        "undeletedpage": "'''$1還矣'''\n近刪新還,見[[Special:Log/delete|刪還誌]]。",
        "undelete-header": "欲覽近刪,見[[Special:Log/delete|誌刪]]。",
        "revdelete-unrestricted": "除限自有秩",
        "logentry-newusers-create": "簿$1已{{GENDER:$2|增}}。",
        "rightsnone": "(凡)",
-       "revdelete-summary": "摘",
        "searchsuggest-search": "尋",
        "pagelang-language": "語",
        "default-skin-not-found": "嚄!君於<code dir=\"ltr\">$wgDefaultSkin</code>所設之膚無以用也。君所用版本,似需含膚下者也。可於MediaWiki之官網[https://www.mediawiki.org/wiki/Manual:Skin_configuration “設膚”]之冊,以知啟而許膚之法。\n\n$2\n\n; 若君安MediaWiki未幾:\n: 君或安自git庫。或以他法徑安自源始碼,若如此甚善。汝可試下者之法,自[https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org之膚庫]安膚些許:\n:* 載下[https://www.mediawiki.org/wiki/Download/lzh 群安之器]。若依此道,則將预安膚與拓器些許。君可謄而貼<code>skins/</code>于焉。\n:* 自[https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org]獨載下安膚包。\n:* 以git徑謄自<code>mediawiki/skins/*</code>儲物库,至君MediaWiki副本之<code dir=\"ltr\">skins/</code>。\n: 若君MediaWiki開發者也,則為之應擾不及君之git儲物庫。\n\n; 若君MediaWiki新矣:\n: 自MediaWiki 1.24版本始,已安之膚不復自啟(見[https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery 冊])。君可謄而貼字下者,至君圍紀之<code>LocalSettings.php</code>以啟膚已安者:\n\n<pre dir=\"ltr\">$3</pre>\n\n; 若君已改<code>LocalSettings.php</code>:\n: 请再查膚名,以保之無誤。",
index 7834379..6ed98c0 100644 (file)
@@ -10,7 +10,8 @@
                        "Reedy",
                        "The Evil IP address",
                        "아라",
-                       "Velg"
+                       "Velg",
+                       "Stephanecbisson"
                ]
        },
        "tog-underline": "Link'iş tude kogu3’uxaçki:",
        "yourdomainname": "Skani domaini:",
        "login": "Sitʼeşa amaxti",
        "nav-login-createaccount": "Sitʼeşa amaxti / hesabi dokʼidi",
-       "userlogin": "Sitʼeşa amaxti / hesabi dokʼidi",
-       "userloginnocreate": "Sitʼeşa amaxti",
        "logout": "Siteşen Kogamaxti",
        "userlogout": "Siteşen Kogamaxti",
        "userlogin-joinproject": "{{SITENAME}}işe ak’ati",
-       "nologin": "Hesabi va giğuni? '''$1'''",
-       "nologinlink": "Hesabi dokʼidi.",
        "createaccount": "Hesabi dokʼidi",
-       "gotaccountlink": "Sitʼeşa amaxti",
-       "createaccountreason": "Muşen:",
        "createacct-reason": "Muşen",
        "mailmypassword": "Ağne pʼarola-çkimi moncğoni",
        "loginlanguagelabel": "Nena: $1",
        "rcshowhidemine": "çkimi oktirobape $1",
        "rcshowhidemine-show": "Ko3ʼiri",
        "rcshowhidemine-hide": "Şinaxi",
-       "rclinks": "Çodinaşi $2 ndğas na ixvenu çodinaşi $1 oktiroba ko3ʼiri;<br /> $3",
+       "rclinks": "Çodinaşi $2 ndğas na ixvenu çodinaşi $1 oktiroba ko3ʼiri;",
        "diff": "farkʼi",
        "hist": "tarixi",
        "hide": "Doşinaxi",
index ef6dbf2..3de24cd 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कोनो दोसर सदस्यक रुपमे सम्प्रवेशित करवाक लेल देल गेल फारमके प्रयोग करी।",
        "createaccountmail": "एक अस्थायी यादृच्छिक कूटशब्द चुनी आ ओ निर्दिष्ट ई-मेल पता पर भेजी",
        "createaccountmail-help": "एकर उपयोग बिना पासवर्ड जानने कियो आन व्यक्तिके खाता खोलैक लिए उपयोग कएल जा सकैत अछि ।",
        "createacct-realname": "असली नाम (वैकल्पिक)",
-       "createaccountreason": "कारण:",
        "createacct-reason": "कारण:",
        "createacct-reason-ph": "अहाँ एक अन्य खाता कियाक बनाए रहल छी",
        "createacct-reason-help": "खाता निर्माण लगमे ई सन्देस देखाएल जाइत।",
        "right-editsemiprotected": "संरक्षित पन्ना सम्पादित करू (बिना तराउपड़ी सुरक्षाक)",
        "right-editcontentmodel": "एक पन्ना के सामग्री मॉडल कें सम्पादन।",
        "right-editinterface": "प्रयोक्ता मध्यस्थक सम्पादन करू",
-       "right-editusercssjs": "दोसर प्रयोक्ताक सी.एस.एस. आ जावास्क्रिप्ट संचिका सभक सम्पादन करू",
        "right-editusercss": "दोसर प्रयोक्ता सभक सी.एस.एस. संचिका सभक सम्पादन करू",
        "right-edituserjs": "दोसर प्रयोक्ताक जावास्क्रिप्ट संचिका सभक सम्पादन करू",
        "right-editmyusercss": "अपन प्रयोक्ता स्तरके सी.एस.एस.फाइल स संपादित करु",
        "rcshowhidecategorization": "$1 पृष्ठ श्रेणीकरण",
        "rcshowhidecategorization-show": "देखाबी",
        "rcshowhidecategorization-hide": "नुकाबी",
-       "rclinks": "पिछला $2 दिनमे भएल $1 परिवर्तन देखाबी<br />$3",
+       "rclinks": "पिछला $2 दिनमे भएल $1 परिवर्तन देखाबी",
        "diff": "अन्तर",
        "hist": "इति.",
        "hide": "नुकाबी",
        "undeleteviewlink": "देखू",
        "undeleteinvert": "उनटा चयन",
        "undeletecomment": "कारण:",
-       "undeletedrevisions": "{{PLURAL:$1|1 revision|$1 revisions}} घुराएल",
-       "undeletedrevisions-files": "{{PLURAL:$1|1 संशोधन|$1 संशोधन}} and {{PLURAL:$2|1 संचिका|$2 संचिका}} आनल",
-       "undeletedfiles": "{{PLURAL:$1|1 संचिका|$1 संचिका सभ}} आनल",
        "cannotundelete": "किछ वा सभ मेटाएल वापिस असफल:\n$1",
        "undeletedpage": "'''$1 के पुनर्स्थापित करल गेल अछि'''\n\nलग पास में हटाओल गेल आ पुनर्स्थापित कएल गेल पन्ना सभके जानकारी के लेल [[Special:Log/delete|हटाओल गेल लग]] देखु।",
        "undelete-header": "हालक मेटाएल पन्ना के लेल [[Special:Log/delete|हटाएल लग]] देखू।",
        "logentry-upload-upload": "$1 {{GENDER:$2|ए}} $3 अपलोड केलक",
        "log-name-tag": "ट्याग लौग",
        "rightsnone": "(कोनो नै)",
-       "revdelete-summary": "सम्पादन सारांश",
        "feedback-adding": "पन्ना उपर प्रतिक्रिया जोडु ...",
        "feedback-back": "पाछां",
        "feedback-bugcheck": "बहुत निक! जांच करु कि [ $1 known bugs] पहिले स त नै अछि ।",
index b339dcc..e55e0c3 100644 (file)
        "right-protect": "Nganti tingkatan pangreksan lan nyunting kaca-kaca sing direksa",
        "right-editprotected": "Nyunting kaca-kaca sing direksa (tanpa pangreksan runtun)",
        "right-editinterface": "Nyunting antarmukane panganggo",
-       "right-editusercssjs": "Nyunting berkas CSS lan JavaScript panganggo liyane",
        "right-editusercss": "Nyunting berkas CSS panganggo liyane",
        "right-edituserjs": "Nyunting berkas JavaScript panganggo liyane",
        "right-rollback": "Gelis gole mbalekna suntingane panganggo pungkasan sing nyunting kaca tartamtu",
        "rcshowhideanons": "$1 panganggo anonim",
        "rcshowhidepatr": "$1 suntingan sing dipatroli",
        "rcshowhidemine": "$1 suntingane inyong",
-       "rclinks": "Tidokna $1 owahan pungkasan nang $2 dina pungkasan kiye<br />$3",
+       "rclinks": "Tidokna $1 owahan pungkasan nang $2 dina pungkasan kiye",
        "diff": "bédane",
        "hist": "versi",
        "hide": "Umpetna",
index 3a309a5..98eae7b 100644 (file)
        "externaldberror": "Лиссь эльбятькс ушеширень датабазонь вельде кемокстакшнембачк эли тондейть аф мярьгови полафнемс тонь ушеширень сёрматфтомацень.",
        "login": "Сувама",
        "nav-login-createaccount": "Сувама / сёрматфтома",
-       "userlogin": "Сувама / сёрматфтома",
-       "userloginnocreate": "Сувамс",
        "logout": "Лисема",
        "userlogout": "Лисема",
        "notloggedin": "Апак сувак",
-       "nologin": "Аш сувама лемце? '''$1'''.",
-       "nologinlink": "Сёрматфтомс",
        "createaccount": "Тиемс од сёрматфтомась",
-       "gotaccount": "Сёрматфтыть ни? '''$1'''.",
-       "gotaccountlink": "Сувамс",
-       "userlogin-resetlink": "Сувама эрявикснень юкстайть?",
        "createaccountmail": "электрононь сёрма вельде",
-       "createaccountreason": "Туфтал:",
        "badretype": "Сувама валхне тон путыть аф фкат.",
        "userexists": "Тя лемть сявозь ни. \nЭняльттяма, арьсек эстейть иля.",
        "loginerror": "Сувама эльбятькс",
        "passwordreset-disabled": "Сувама валсь аф полафтови тя викить эса.",
        "passwordreset-username": "Тиить лемоц",
        "passwordreset-domain": "Домен:",
-       "passwordreset-capture": "Ваномс мекольце е-сёрма?",
-       "passwordreset-capture-help": "Путондярят тяшкс тя паксять эса е-сёрма (пингонь сувама вал мархта) кармай няфтевома кодак кучф тиенди.",
        "passwordreset-emailtitle": "Серматфтомать колга {{SITENAME}}са",
        "bold_sample": "Эчке сёрмадома",
        "bold_tip": "Эчке сёрмадома",
        "saveprefs": "Ванфтомс",
        "restoreprefs": "Мърдафтомс васень латцематне",
        "prefs-editing": "Петнема",
-       "rows": "Луфт (строкат):",
-       "columns": "Орват (столбанят):",
        "searchresultshead": "Вешендема",
        "stub-threshold": "Оторсь (лимитсь) <a href=\"#\" class=\"stub\">-нь керф сюлмафкснень</a> латцемаснонды (байтт):",
        "recentchangesdays": "Мъзяра шит няфтемс мекольце полафнемаса:",
        "userrights-reason": "Туфтал:",
        "userrights-no-interwiki": "Тондейть аф мярьгови полафтомс тиихнень видекссна иля Викива.",
        "userrights-nodatabase": "Датабаза $1 аш эли сон аф тястоконь.",
-       "userrights-nologin": "Тондейть эряви [[Special:UserLogin|сувамс]] оцюнянь сёрматфтомать вельде тиихнень видексснон макссеманкса.",
-       "userrights-notallowed": "Тонь сёрматфтомацень вельде аф мярьгови макссемс видекст иля тиихненди.",
        "userrights-changeable-col": "Полгатне конатнень тондейть ули кода полафтомс",
        "userrights-unchangeable-col": "Полгатне, конатнень тондейть аш кода полафтомс",
        "group": "Полга:",
        "right-protect": "Полафтомс араламань куцеманянзон ди петнемс аралаф лопатнень",
        "right-editprotected": "Петнемс аралаф лопатнень (какскадонь араламада башка)",
        "right-editinterface": "Петнемс тиить лопанц арафнеманзон",
-       "right-editusercssjs": "Петнемс иля тиихнень CSS ди JS файлснон",
        "right-editusercss": "Петнемс иля тиихнень CSS файлснон",
        "right-edituserjs": "Петнемс иля тиихнень JS файлснон",
        "right-rollback": "Куроконе мумс мекольце тиить конась петнесь лопат",
        "rcshowhideanons": "$1 лемфтома тиихть",
        "rcshowhidepatr": "$1 ванондоф петнемат",
        "rcshowhidemine": "$1 эсь петнемат",
-       "rclinks": "Няфтемс $1 ётай полафнемат мекольце $2 шис<br />$3",
+       "rclinks": "Няфтемс $1 ётай полафнемат мекольце $2 шис",
        "diff": "яв.",
        "hist": "ист.",
        "hide": "Кяшемс",
        "undeleteviewlink": "ваномс",
        "undeleteinvert": "Валхтомс кочкама",
        "undeletecomment": "Мяльполаткс:",
-       "undeletedrevisions": "{{PLURAL:$1|1 верзие|$1 верзиет}} мърдафтфт",
-       "undeletedrevisions-files": "{{PLURAL:$1|1 верзие|$1 верзиет}} эди {{PLURAL:$2|1 файл|$2 файлхт}} мърдафтфт",
-       "undeletedfiles": "{{PLURAL:$1|1 файл|$1 файлхт}} мърдафтфт",
        "cannotundelete": "Мърдафтома изь лисев; иля тиись, улема, ульсь васенцекс кие сонь мърдафтозе.",
        "undeletedpage": "'''$1 мърдафтфоль'''\n\nВанк [[Special:Log/delete|нардамань лувомась]] мекольце нардаматнень эди мърдафтоматнень няфтеманкса.",
        "undelete-header": "Ванк [[Special:Log/delete|нардамань лувомась]] улхкомба нардаф лопатнень няфтеманкса.",
        "tag-filter": "[[Special:Tags|Tag]] педямась:",
        "revdelete-restricted": "нолдаф тевс кардафксне системонь вятиксненди",
        "revdelete-unrestricted": "системонь вятиксненди кардафксне валхтфт",
-       "rightsnone": "(аш)",
-       "revdelete-summary": "петнемс нюрьхкяня лихтемать"
+       "rightsnone": "(аш)"
 }
index 35762e5..f69606d 100644 (file)
        "editusergroup": "Hampiditra vondrom-pikambana",
        "editinguser": "Fanovana ny zon'ny mpikambana <strong>{{GENDER:$1|}}[[User:$1|$1]]</strong> $2",
        "userrights-editusergroup": "Hanova vondrom-pikambana",
+       "userrights-viewusergroup": "Hijery ny vondrom-mpikambana{{GENDER:$1|}}",
        "saveusergroups": "{{GENDER:$1|}}Tehirizo ny vondrom-pikambana",
        "userrights-groupsmember": "Mpikambana amin'ny vondrona:",
        "userrights-groupsmember-auto": "Mpikambana tsy dia voalazan'i :",
        "right-editsemiprotected": "Hanova ny pejy narovna ho \"{{int:protect-level-autoconfirmed}}\"",
        "right-editcontentmodel": "Hanova ny modelim-botoatin'ny pejy",
        "right-editinterface": "Manova ny interface ny mpikambana",
-       "right-editusercssjs": "Manova ny rakitra CSS sy JS ny mpikambana hafa",
        "right-editusercss": "Manova ny rakitra CSS ny mpikambana hafa",
        "right-edituserjs": "Manova ny rakitra JS an'ny mpikambana hafa",
        "right-editmyusercss": "Manova ny rakitra CSS-nao",
        "rcfilters-filter-bots-description": "Fiovana nataon'ny rôbô aotômatika.",
        "rcfilters-filter-humans-label": "Olona (tsy rôbô)",
        "rcfilters-filter-humans-description": "Fiovana nataon'ny olombelona mpikambana.",
+       "rcfilters-filtergroup-reviewstatus": "Satan'ny reviziôna",
        "rcfilters-filter-patrolled-label": "Voatsidika",
        "rcfilters-filter-patrolled-description": "Fiovana nomarihana ho voatsidika.",
        "rcfilters-filter-unpatrolled-label": "Tsy mbola voatsidika",
        "rcshowhidecategorization": "$1 ny fisokajiam-pejy",
        "rcshowhidecategorization-show": "Aseho",
        "rcshowhidecategorization-hide": "Afenina",
-       "rclinks": "Asehoy ny $1 niova farany tato anatin'ny $2 andro<br />$3",
+       "rclinks": "Asehoy ny $1 niova farany tato anatin'ny $2 andro",
        "diff": "Fampitahana",
        "hist": "tant.",
        "hide": "Afeno",
        "fewestrevisions": "Pejy vitsy mpanova",
        "nbytes": "$1 {{PLURAL:$1|oktety|oktety}}",
        "ncategories": "{{PLURAL:$1|vondrona|vondrona}} $1",
+       "ninterwikis": "Interwiki $1{{PLURAL:$1|}}",
        "nlinks": "{{PLURAL:$1|rohy|rohy}} $1",
        "nmembers": "{{PLURAL:$1|mpikambana|mpikambana}} $1",
+       "nmemberschanged": "$1 → $2 Mpikambana{{PLURAL:$2|}}",
        "nrevisions": "{{PLURAL:$1|fanovana|fanovana}} $1",
        "nimagelinks": "Ampiasain'ny pejy miisa{{PLURAL:}} $1",
        "ntransclusions": "Ampiasaina eo amin'ny pejy miisa $1 {{PLURAL:}}",
        "undeleteviewlink": "hijery",
        "undeleteinvert": "Hampifamaidika ny safidy",
        "undeletecomment": "Antony :",
-       "undeletedrevisions": "voaverina ny {{PLURAL:$1|fanovana|fanovana}} $1",
-       "undeletedfiles": "rakitra voaverina $1 {{PLURAL:$1}}",
        "cannotundelete": "Tsy nandeha soa aman-tsara ilay famerenana ;\nefa nisy mpikambana iray hafa angamba no namerina ilay pejy.",
        "undeletedpage": "'''Voaverina ny pejy $1.'''\n\nVakio ny [[Special:Log/delete|laogim-pamafana]] ho an'ny lisitry ny famafana sy ny famerenana pejy.",
        "undelete-header": "Jereo ny [[Special:Log/delete|laogim-pamafana]] rehefa hanalisitra ny pejy vao voafafa.",
        "mycontris": "Fandraisan'anjara",
        "anoncontribs": "Fandraisan'anjara",
        "contribsub2": "Ho an'i {{GENDER:$3|$1}} ($2)",
+       "contributions-userdoesnotexist": "Tsy voasoratra anarana ato ny kaontim-pikambana \"$1\".",
        "nocontribs": "Tsy misy fanovana mifanaraka amin'ireo critères ireo.",
        "uctop": "(ankehitriny)",
        "month": "Tamin'ny volana (sy teo aloha) :",
        "unblocked-range": "Afaka ny sakan'i $1.",
        "unblocked-id": "Niala ny sakan'i $1",
        "blocklist": "Mpikambana voasakana",
+       "autoblocklist": "Sakana ho azy",
+       "autoblocklist-submit": "Hikaroka",
+       "autoblocklist-legend": "Hanalisitra ny sakana ho azy",
+       "autoblocklist-localblocks": "Sakana ho azy eto an-toerana{{PLURAL:$1|}}",
+       "autoblocklist-empty": "Tsy misy na inona na inona ny lisitry ny sakana ho azy",
+       "autoblocklist-otherblocks": "Sakana ho azy hafa{{PLURAL:$1|}}",
        "ipblocklist": "Lisitry ny adiresy IP sy mpikambana voasakana",
        "ipblocklist-legend": "Hitady mpikambana voasakana",
        "blocklist-userblocks": "Hanakana ny fanakanana kaonty",
        "blocklist-tempblocks": "Hanakana ny sakana miserana",
        "blocklist-addressblocks": "Hanakana ny fanakanana adiresy IP tokana",
+       "blocklist-rangeblocks": "Hanafina ny sakana araka ny elanelana",
        "blocklist-timestamp": "Daty sy ora",
        "blocklist-target": "Tanjona",
        "blocklist-expiry": "Daty fitsaharana :",
        "block-log-flags-hiddenname": "anaram-pikambana nasitrika",
        "range_block_disabled": "Tsy mandeha ny zo-mpandrindra mamorona fanakanana vondrona IP.",
        "ipb_expiry_invalid": "Tsy mety ilay fotoana hahataperan'ny sakana.",
+       "ipb_expiry_old": "Amina fotoana efa lasa ny daty fitsaharana.",
        "ipb_expiry_temp": "tsy maintsy lalandava ny fanakanana anaram-pikambana nasitrika.",
        "ipb_hide_invalid": "Tsy afaka fafana io kaonty io ; hoatra ny manana fanovana maro loatra izy.",
        "ipb_already_blocked": "Efa voasakana « $1 »",
        "lockdbsuccesstext": "Voahidy ny banky angona\n<br />Aza adino ny manala hidy rehefa vita izay ataonao.",
        "unlockdbsuccesstext": "Voaala soa aman-tsara ny hidin'ny banky angona.",
        "lockfilenotwritable": "Tsy azo soratana ny rakitra fanidiana ny banky angona.\nMba hahafahany manidy na mamoha ny banky angona, mila azo soratan'ny lohamilin-tranonkala izy.",
+       "databaselocked": "Efa voahidy ny banky angona",
        "databasenotlocked": "Tsy voaidy ny banky angona.",
        "lockedbyandtime": "(nataon'i $1 ny $2 tamin'ny $3)",
        "move-page": "Hanova anarana an'i $1",
        "pageinfo-protect-cascading-yes": "Eny",
        "pageinfo-protect-cascading-from": "Ny fiarovana dia miriana avy amin'i",
        "pageinfo-category-info": "Fampahalalana mikasika ny sokajy",
+       "pageinfo-category-total": "Isa manontolon'ny mpikambana",
        "pageinfo-category-pages": "Isam-pejy",
        "pageinfo-category-subcats": "Isan'ny zana-tsokajy",
        "pageinfo-category-files": "Isan'ny rakitra",
        "pageinfo-user-id": "ID mpikambana",
        "markaspatrolleddiff": "Marihana ho voamarina",
        "markaspatrolledtext": "Marihana ho hita sy voatsara",
+       "markaspatrolledtext-file": "Hanamarika ny versiônan'ity rakitra ity ho voavaky",
        "markedaspatrolled": "Voamarina",
        "markedaspatrolledtext": "Nomarihana ho voamarina ny versiona voafidy an'ny [[:$1]].",
        "rcpatroldisabled": "Tsy nalefa ny fanamarinana ao amin'ny fiovana farany.",
        "log-show-hide-patrol": "$1 ny laogy mikasikan'ny versiona voamarina",
        "log-show-hide-tag": "$1 laogim-balizy",
        "confirm-markpatrolled-button": "OK",
+       "confirm-markpatrolled-top": "Hanamarika ny reviziôna $3 an'i $2 ho voamarina?",
        "deletedrevision": "Fanovana an'i $1 taloha voafafa.",
        "filedeleteerror-short": "Tsi-fetezana teo am-pamafàna ilay rakitra : $1",
        "filedeleteerror-long": "Nisy tsi-fetezana nitranga teo am-pamafàna ilay rakitra :\n\n$1",
        "feedback-thanks": "Misaotra! lanefa tany amin'ilay pejy ''[$2 $1]'' ilay fanehoan-kevitrao.",
        "feedback-thanks-title": "Misaotra indrindra!",
        "feedback-useragent": "User agent:",
-       "searchsuggest-search": "Hikaroha eto amin'i {{SITENAME}}",
+       "searchsuggest-search": "Hikaroka eto amin'i {{SITENAME}}",
        "searchsuggest-containing": "misy...",
        "api-error-badtoken": "Hadisoana anaty : \"token\" diso.",
        "api-error-emptypage": "Tsy azo atao ny mamorona pejy vaovao tsy misy votoatiny.",
index 1f1e6de..f72e404 100644 (file)
        "rcshowhidepatr": "$1 тергыме тӧрлатымаш",
        "rcshowhidemine": "Мыйын тӧрлымым $1",
        "rcshowhidemine-hide": "шылташ",
-       "rclinks": "Пытартыш $2 кечылан $1 вашталтымашым ончыкташ<br />$3",
+       "rclinks": "Пытартыш $2 кечылан $1 вашталтымашым ончыкташ",
        "diff": "ойырт.",
        "hist": "эрт.",
        "hide": "шылташ",
        "listusers-submit": "ончыкташ",
        "listusers-blocked": "(йӧн петырыме)",
        "activeusers": "Чӱчкыдын пайдаланыше-влак",
-       "activeusers-count": "Пытартыш $3 {{PLURAL:$3|1=кечыште|кечылаште}} $1 {{PLURAL:$1|1=тӧрлатымаш|тӧрлатымаш-влак}}",
+       "activeusers-count": "Пытартыш $3 {{PLURAL:$3|1=кечыште|кечылаште}} $1 {{PLURAL:$1|1=тӧрлатымаш|тӧрлатымаш}}",
        "activeusers-submit": "ончыкташ",
        "listgrouprights-members": "(тӱшкаште улшо-влак)",
        "emailuser": "Пайдаланыше дек серыш",
index a41205a..74d4e89 100644 (file)
        "externaldberror": "Alah tajadi kasalahan otentikasi basis data eksternal atau Sanak indak diizinan malakuan pabaruan tahadok akun eksternal Sanak.",
        "login": "Masuak log",
        "nav-login-createaccount": "Masuak log / buek akun",
-       "userlogin": "Masuak log / buek akun",
-       "userloginnocreate": "Masuak log",
        "logout": "Kalua log",
        "userlogout": "Kalua log",
        "notloggedin": "Alun masuak log",
        "userlogin-noaccount": "Alun ado akun?",
        "userlogin-joinproject": "Join {{SITENAME}}",
-       "nologin": "Alun ado akun? '''$1'''.",
-       "nologinlink": "Buek akun baru",
        "createaccount": "Buek akun",
-       "gotaccount": "Alah tadaftar sabagai pangguno? '''$1'''.",
-       "gotaccountlink": "Masuak log",
-       "userlogin-resetlink": "Lupo rincian info masuak Sanak?",
        "userlogin-resetpassword-link": "Buek ulang kato sandi",
        "createacct-emailrequired": "Alamaik surel",
        "createacct-emailoptional": "Alamaik surel (opsional)",
        "createacct-email-ph": "Masuakan alamaik surel Sanak",
        "createaccountmail": "Pakai kato sandi sumbarang samantaro, lalu kirim ka alamaik surel nan di bawah ko",
        "createacct-realname": "Namo asli (opsional)",
-       "createaccountreason": "Alasan:",
        "createacct-reason": "Alasan",
        "createacct-reason-ph": "Manga Sanak mambuek akun lain",
        "createacct-submit": "Buek akun Sanak",
        "passwordreset-emaildisabled": "Fitur surel alah dimatian pado wiki iko.",
        "passwordreset-username": "Namo pangguno:",
        "passwordreset-domain": "Domain:",
-       "passwordreset-capture": "Caliak kaputusannyo?",
-       "passwordreset-capture-help": "Kalau sanak mancentang kotak ko, surel (jo kato sandi samantaro) akan nampak jo Sanak.",
        "passwordreset-email": "Alamaik surel:",
        "passwordreset-emailtitle": "Detail akun di {{SITENAME}}",
        "passwordreset-emailtext-ip": "Sasaurang (mungkin Sanak, dari alamaik IP $1) mamintak parubahan kato sandi untuak {{SITENAME}} ($4). {{PLURAL:$3|Akun}} barikuik takaik jo alamaik surel ko:\n\n$2\n\n{{PLURAL:$3|Sandi samantaro}} barikuik akan habih masonyo dalam {{PLURAL:$5|$5 ari}}.\nSanak harus masuak dan mamiliah sandi baru. Jikok urang lain mambuek pamintaan ko atau jikok Sanak ingek sandi awal dan indak nio maubahnyo, Sanak dapek mangacuahkan pasan ko dan taruih manggunoan kato sandi lamo.",
        "saveprefs": "Simpan",
        "restoreprefs": "Baliakan ka setelan awal",
        "prefs-editing": "Panyuntiangan",
-       "rows": "Barih:",
-       "columns": "Kolom:",
        "searchresultshead": "Cari",
        "stub-threshold": "Ambang bateh untuak format <a href=\"#\" class=\"stub\">pautan rancangan</a>:",
        "stub-threshold-disabled": "Nonaktifkan",
        "userrights-reason": "Alasan:",
        "userrights-no-interwiki": "Sanak indak bahak untuak mangubah hak pangguno di wiki lain.",
        "userrights-nodatabase": "Basis data $1 indak ado atau bukan disiko.",
-       "userrights-nologin": "Sanak musti [[Special:UserLogin|masuak log]] jo akun panguruih untuak dapek mangubah hak pangguno.",
-       "userrights-notallowed": "Akun Sanak indak ado izin untuak manambah atau malapeh hak pangguno.",
        "userrights-changeable-col": "Kalompok nan dapek Sanak ubah",
        "userrights-unchangeable-col": "Kalompok nan indak dapek Sanak ubah",
        "group": "Kalompok:",
        "rcshowhideanons": "$1 pangguno anon",
        "rcshowhidepatr": "$1 suntiangan tapatroli",
        "rcshowhidemine": "$1 suntiangan denai",
-       "rclinks": "Tunjuakan $1 parubahan tabaru dalam $2 hari tarakhia<br />$3",
+       "rclinks": "Tunjuakan $1 parubahan tabaru dalam $2 hari tarakhia",
        "diff": "bedo",
        "hist": "sijarah",
        "hide": "Suruakan",
        "undeletebtn": "Baliakan",
        "undeletelink": "caliak/baliakan",
        "undeleteviewlink": "caliak",
-       "undeletedrevisions": "{{PLURAL:$1|$1 revisi}} alah dikambalian",
        "undelete-header": "Caliak [[Special:Log/delete|log pangapuihan]] untuak daftar laman nan baru dihapuih.",
        "undelete-search-title": "Cari laman nan dihapuih",
        "undelete-search-box": "Cari laman nan dihapuih",
index 854d077..afa44b8 100644 (file)
        "readonlywarning": "<strong>Предупредување: Базата на податоци е заклучена заради одржување, и затоа сега нема да можете да ги зачувате промените.</strong>\n\nВи препорачуваме да го прекопирате текстот на страна и да го зачувате за подоцна.\n\nАдминистраторот кој ја заклучил базата на податоци го дал следново образложение: $1",
        "protectedpagewarning": "'''Предупредување:  Оваа страница е заклучена, така што само корисници со администраторски привилегии можат да ја уредуваат.'''\nЗа ваша информација, последната ставка во дневникот на промени е прикажана подолу:",
        "semiprotectedpagewarning": "'''Предупредување:'''  Оваа страница е заштитена, така што може да ја уредуваат само регистрирани корисници.'''\nЗа ваша информација, подолу е прикажана последната ставка во дневникот на измени:",
-       "cascadeprotectedwarning": "<strong>Предупредување:</strong> Оваа страница е заклучена, така што можат да ја уредуваат само корисници со администраторски привилегии, бидејќи е вклучена во {{PLURAL:$1|следнава „преносно-заштитена“ страница|следниве „преносно-заштитени“ страници}}:",
+       "cascadeprotectedwarning": "<strong>Предупредување:</strong> Оваа страница е заклучена, така што можат да ја уредуваат само корисници со [[Special:ListGroupRights|извесни права]], бидејќи е вклучена во {{PLURAL:$1|следнава „преносно-заштитена“ страница|следниве „преносно-заштитени“ страници}}:",
        "titleprotectedwarning": "'''Предупредување:'''  Оваа страница е заклучена, така што се потребни [[Special:ListGroupRights|посебни права]] за да се создаде.''''\nЗа ваша информација, последната ставка во дневникот на промени е прикажана подолу:",
        "templatesused": "{{PLURAL:$1|Шаблон|Шаблони}} на страницава:",
        "templatesusedpreview": "{{PLURAL:$1|Шаблон|Шаблони}} на прегледуваната страница:",
        "saveusergroups": "Зачувај ги {{GENDER:$1|корисничките}} групи",
        "userrights-groupsmember": "Член на:",
        "userrights-groupsmember-auto": "Подразбран член на:",
-       "userrights-groups-help": "Можете да измените на кои групи припаѓа корисник:\n* Штиклирано — корисникот е во таа група.\n* Нештиклирано — корисникот не припаѓа на групата.\n* Ѕвездичка (*) — не можете да ја отстраните групата откако сте ја додале (и обратно).\n* Тараба (#) — можете само да го вратите истекот на групава, но не можете да го поместите нанапред.",
+       "userrights-groups-help": "Можете да измените на кои групи припаѓа корисник:\n* Штиклирано — корисникот е во таа група.\n* Нештиклирано — корисникот не припаѓа на групата.\n* Ѕвездичка (*) — не можете да ја отстраните групата откако сте ја додале (и обратно).\n* Тараба (#) — можете само да го вратите истекот на членството во групава, но не можете да го поместите нанапред.",
        "userrights-reason": "Причина:",
        "userrights-no-interwiki": "Немате дозвола за уредување на кориснички права на други викија.",
        "userrights-nodatabase": "Базата на податоци $1 не постои или не е месна.",
        "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-cannot-shorten-expiry": "Не можете да го поместити нанапред истекот на членството во групата „$1“. Ова можат да го прават само корисници со дозвола за додавање или одземање на оваа група.",
        "userrights-conflict": "Спротиставеност во измените на корисничките права. Прегледајте ги и потврдете ги.",
        "group": "Група:",
        "group-user": "Корисници",
        "right-editsemiprotected": "Уредување на страници заштитени како „{{int:protect-level-autoconfirmed}}“",
        "right-editcontentmodel": "Уредување на содржинскиот модел на страница",
        "right-editinterface": "Уредување на кориснички посредник",
-       "right-editusercssjs": "Уредување на CSS и JS податотеки на други корисници",
        "right-editusercss": "Уредување на CSS податотеки на други корисници",
        "right-edituserjs": "Уредување на JS податотеки на други корисници",
        "right-editmyusercss": "Уредување на сопствени кориснички каскадни стилски податотеки (CSS)",
        "rcfilters-hideminor-conflicts-typeofchange": "Извезни видови промени не можат да се означат како „ситни“, па затоа овој филтер е во спротиставеност со следниве филтри за видови промени: $1",
        "rcfilters-typeofchange-conflicts-hideminor": "Овој филтер за видови промени е во спротиставеност со филтерот „Ситни уредувања“. Извсни видови промени не можат да се означат како „ситни“.",
        "rcnotefrom": "Подолу {{PLURAL:$5|е прикажана промената|се прикажани промените}} почнувајќи од <strong>$3, $4</strong>  (се прикажуваат до <b>$1</b>).",
+       "rclistfromreset": "Нов избор на датуми",
        "rclistfrom": "Прикажи нови промени почнувајќи од $3 $2",
        "rcshowhideminor": "$1 ситни промени",
        "rcshowhideminor-show": "Прикажи",
        "rcshowhidecategorization": "$1 ја категоризацијата на страниците",
        "rcshowhidecategorization-show": "Прикажи",
        "rcshowhidecategorization-hide": "Скриј",
-       "rclinks": "Прикажи скорешни $1 промени во последните $2 дена<br />$3",
+       "rclinks": "Прикажи скорешни $1 промени во последните $2 дена",
        "diff": "разл",
        "hist": "истор",
        "hide": "Скриј",
        "php-uploaddisabledtext": "Подигањето на податотеки е оневозможено во PHP. \nПроверете го нагодувањето file_uploads.",
        "uploadscripted": "Податотеката содржи HTML-код или сценарио што може погрешно да се протолкува во прелистувачот.",
        "upload-scripted-pi-callback": "Не можам да подигнам податотека што содржи напатствие за обработка на XML-стилска страница.",
+       "upload-scripted-dtd": "Не можам да подигнам SVG-податотеки што содржат нестандардна DTD-изјава.",
        "uploaded-script-svg": "Пронајдов скриптен елемент „$1“ во подигнатата SVG-податотека.",
        "uploaded-hostile-svg": "Пронајдов небезбеден CSS во стилскиот елемент на подигнатата SVG-податотека.",
        "uploaded-event-handler-on-svg": "Задавањето на атрибути <code>$1=\"$2\"</code> за работа со настани не е дозволено за SVG-податотеки.",
        "undeleteviewlink": "преглед",
        "undeleteinvert": "Обратен избор",
        "undeletecomment": "Причина:",
-       "undeletedrevisions": "{{PLURAL:$1|1 измена е обновена|$1 измени се обновени}}",
-       "undeletedrevisions-files": "{{PLURAL:$1|1 измена|$1 измени}} и {{PLURAL:$2|1 податотека|$2 податотеки}} се вратени",
-       "undeletedfiles": "{{PLURAL:$1|1 податотека е вратена|$1 податотеки се вратени}}",
        "cannotundelete": "Враќањето не успеа делумно или целосно:\n$1",
        "undeletedpage": "'''$1 беше обновена'''\n\nПогледнете го [[Special:Log/delete|дневникот на бришења]] за попис на претходни бришења и обновувања.",
        "undelete-header": "Списокот на неодамна избришани страници ќе го најдете на [[Special:Log/delete|дневникот на бришења]].",
        "sp-contributions-uploads": "подигања",
        "sp-contributions-logs": "дневници",
        "sp-contributions-talk": "разговор",
-       "sp-contributions-userrights": "раководење со кориснички права",
+       "sp-contributions-userrights": "раководење со {{GENDER:$1|кориснички}} права",
        "sp-contributions-blocked-notice": "Овој корисник е блокиран. Последните ставки во дневникот на блокирања, за ваша информација се дадени подолу:",
        "sp-contributions-blocked-notice-anon": "Оваа IP-адреса е моментално блокирана.\nПодолу е наведен најновиот дневнички запис на блокирање:",
        "sp-contributions-search": "Пребарување на придонеси",
        "unblocked-id": "Блокирањето $1 беше отстрането",
        "unblocked-ip": "[[Special:Contributions/$1|$1]] е одблокирана.",
        "blocklist": "Блокирани корисници",
+       "autoblocklist": "Автоблокови",
+       "autoblocklist-submit": "Пребарај",
+       "autoblocklist-legend": "Испис на автоблокови",
+       "autoblocklist-localblocks": "{{PLURAL:$1|Месен автоблок|Месни автоблокови}}",
+       "autoblocklist-empty": "Списокот на автоблокови е празен.",
+       "autoblocklist-otherblocks": "{{PLURAL:$1|Друг автоблок|Други автоблокови}}",
        "ipblocklist": "Блокирани корисници",
        "ipblocklist-legend": "Најди блокиран корисник",
        "blocklist-userblocks": "Скриј блокирања на корис. сметки",
        "confirmrecreate-noreason": "Корисникот [[User:$1|$1]] ([[User talk:$1|разговор]]) {{GENDER:$1|ја избриша}} страницава откако почнавте да ја уредувате.  Потврдете дека навистина сакате да ја пресоздадете страницата.",
        "recreate": "Пресоздај",
        "unit-pixel": "п",
+       "confirm-purge-title": "Превчитај ја страницава",
        "confirm_purge_button": "OK",
        "confirm-purge-top": "Да го исчистам меѓускладот на страницава?",
        "confirm-purge-bottom": "Со оваа постапка се чисти опслужувачкиот меѓусклад и се прикажува најновата верзија.",
        "htmlform-user-not-valid": "<strong>$1</strong> не претставува важечко корисничко име.",
        "logentry-delete-delete": "$1 {{GENDER:$2|ја избриша}} страницата $3",
        "logentry-delete-delete_redir": "$1 го {{GENDER:$2|избриша}} пренасочувањето $3 со презапишување",
-       "logentry-delete-restore": "$1 {{GENDER:$2|ја возобнови}} страницата $3",
+       "logentry-delete-restore": "$1 {{GENDER:$2|ја возобнови}} страницата $3 ($4)",
+       "logentry-delete-restore-nocount": "$1 {{GENDER:$2|ја поврати}} страницата $3",
+       "restore-count-revisions": "{{PLURAL:$1|1 преработка|$1 преработки}}",
+       "restore-count-files": "{{PLURAL:$1|1 податотека|$1 податотеки}}",
        "logentry-delete-event": "$1 {{GENDER:$2|ја измени}} видливоста на {{PLURAL:$5|настан во дневникот|$5 настани во дневникот}} на $3: $4",
        "logentry-delete-revision": "$1 {{GENDER:$2|ја измени}} видливоста на {{PLURAL:$5|преработка|$5 преработки}} на страницата $3: $4",
        "logentry-delete-event-legacy": "$1 {{GENDER:$2|ја измени}} видливоста на настаните во дневникот на $3",
        "special-characters-group-thai": "Тајландски",
        "special-characters-group-lao": "Лаошки",
        "special-characters-group-khmer": "Кмерски",
+       "special-characters-group-canadianaboriginal": "канадски домородни",
        "special-characters-title-endash": "цртичка",
        "special-characters-title-emdash": "тире",
        "special-characters-title-minus": "минус",
        "restrictionsfield-help": "Една IP-адреса или CIDR-опсег по ред. За да овозможите сè, користете<br /><code>0.0.0.0/0</code><br /><code>::/0</code>",
        "revid": "преработка $1",
        "pageid": "назнака на страницата $1",
-       "rawhtml-notallowed": "&lt;html&gt;-ознаките не може да се користат вон нормалните страници."
+       "rawhtml-notallowed": "&lt;html&gt;-ознаките не може да се користат вон нормалните страници.",
+       "gotointerwiki": "Го напуштате {{SITENAME}}",
+       "gotointerwiki-invalid": "Укажаниот наслов беше неважечки.",
+       "gotointerwiki-external": "Го напуштате {{SITENAME}} упатени кон [[$2]], кое е посебно мрежно место.\n\n[$1 Тука продолжете кон $1].",
+       "undelete-cantedit": "Не можете да ја вратите избришаната страница бидејќи уредувањето на страницава не ви е дозволено.",
+       "undelete-cantcreate": "Не можете да ја вратите страницава бидејќи не постои страница со таков назив и не ви е дозволено да ја создадете."
 }
index a1b4175..9ec4e32 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": "താങ്കളുടെ ലോഗിൻ വിവരങ്ങൾ മറന്നു പോയോ?",
        "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-submit": "താങ്കളുടെ അംഗത്വം സൃഷ്ടിക്കുക",
        "right-editsemiprotected": "\"{{int:protect-level-autoconfirmed}}\" എന്നടയാളപ്പെടുത്തി സംരക്ഷിച്ചിട്ടുള്ള താളുകൾ തിരുത്തുക",
        "right-editcontentmodel": "താളിന്റെ ഉള്ളടക്ക രീതി തിരുത്തുക",
        "right-editinterface": "ഉപയോക്തൃ സമ്പർക്കമുഖത്തിൽ മാറ്റം വരുത്തുക",
-       "right-editusercssjs": "മറ്റ് ഉപയോക്താക്കളുടെ CSS, JS പ്രമാണങ്ങൾ തിരുത്തുക",
        "right-editusercss": "മറ്റ് ഉപയോക്താക്കളുടെ CSS പ്രമാണങ്ങൾ തിരുത്തുക",
        "right-edituserjs": "മറ്റ് ഉപയോക്താക്കളുടെ JS പ്രമാണങ്ങൾ തിരുത്തുക",
        "right-editmyusercss": "താങ്കളുടെ സ്വന്തം ഉപയോക്തൃ സി.എസ്.എസ്. പ്രമാണങ്ങൾ തിരുത്തുക",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|പുതിയ താളുകളുടെ പട്ടികയും]] കാണുക)",
        "recentchanges-submit": "പ്രദർശിപ്പിക്കുക",
        "rcfilters-filterlist-title": "അരിപ്പകൾ",
-       "rcfilters-filter-userExpLevel-newcomer-label": "പുതിയ അംഗങ്ങളുടെ തിരുത്തലുകൾ",
+       "rcfilters-filter-user-experience-level-newcomer-label": "പുതിയ അംഗങ്ങളുടെ തിരുത്തലുകൾ",
        "rcfilters-filter-bots-label": "യന്ത്രം",
        "rcfilters-filter-minor-label": "ചെറുതിരുത്തുകൾ",
        "rcnotefrom": "<strong>$3, $4</strong> മുതലുള്ള {{PLURAL:$5|മാറ്റം|മാറ്റങ്ങൾ}} ആണ് താഴെയുള്ളത്  (<strong>$1</strong> എണ്ണം വരെ കൊടുക്കുന്നതാണ്).",
        "rcshowhidecategorization": "താളുകളുടെ വർഗ്ഗീകരണം $1",
        "rcshowhidecategorization-show": "പ്രദർശിപ്പിക്കുക",
        "rcshowhidecategorization-hide": "മറയ്ക്കുക",
-       "rclinks": "കഴിഞ്ഞ $2 ദിവസങ്ങൾക്കുള്ളിലുണ്ടായ $1 മാറ്റങ്ങൾ പ്രദർശിപ്പിക്കുക<br />$3",
+       "rclinks": "കഴിഞ്ഞ $2 ദിവസങ്ങൾക്കുള്ളിലുണ്ടായ $1 മാറ്റങ്ങൾ പ്രദർശിപ്പിക്കുക",
        "diff": "മാറ്റം",
        "hist": "നാൾവഴി",
        "hide": "മറയ്ക്കുക",
        "undeleteviewlink": "കാണുക",
        "undeleteinvert": "വിപരീതം തിരഞ്ഞെടുക്കുക",
        "undeletecomment": "കാരണം:",
-       "undeletedrevisions": "{{PLURAL:$1|ഒരു പതിപ്പ്|$1 പതിപ്പുകൾ}} പുനഃസ്ഥാപിച്ചിരിക്കുന്നു",
-       "undeletedrevisions-files": "{{PLURAL:$1|ഒരു പതിപ്പും|$1 പതിപ്പുകളും}} {{PLURAL:$2|ഒരു പ്രമാണവും|$2 പ്രമാണങ്ങളും}} പുനഃസ്ഥാപിച്ചിരിക്കുന്നു",
-       "undeletedfiles": "{{PLURAL:$1|ഒരു പ്രമാണം|$1 പ്രമാണങ്ങൾ}} പുനഃസ്ഥാപിച്ചു",
        "cannotundelete": "മായ്ക്കൽ തിരസ്കരണം പരാജയപ്പെട്ടു:\n$1",
        "undeletedpage": "'''$1 പുനഃസ്ഥാപിച്ചിരിക്കുന്നു'''\n\nപുതിയതായി നടന്ന ഒഴിവാക്കലുകളുടേയും പുനഃസ്ഥാപനങ്ങളുടേയും വിവരങ്ങൾ കാണാൻ [[Special:Log/delete|മായ്ക്കൽ ലോഗ്]] കാണുക.",
        "undelete-header": "അടുത്തകാലത്ത് നീക്കംചെയ്ത താളുകളുടെ പട്ടികയ്ക്ക് [[Special:Log/delete|നീക്കം ചെയ്യൽ പ്രവർത്തനരേഖ]] കാണുക.",
        "logentry-tag-update-revision": "$3 എന്ന താളിന്റെ $4 എന്ന നാൾപ്പതിപ്പിൽ ടാഗുകൾ $1 {{GENDER:$2|പുതുക്കി}} ($6 {{PLURAL:$7|ചേർത്തു}}; $8 {{PLURAL:$9|നീക്കംചെയ്തു}})",
        "logentry-tag-update-logentry": "$3 എന്ന താളിന്റെ $5 എന്ന രേഖയിലെ ഉൾപ്പെടുത്തലിൽ ടാഗുകൾ $1 {{GENDER:$2|പുതുക്കി}} ($6 {{PLURAL:$7|ചേർത്തു}}; $8 {{PLURAL:$9|നീക്കംചെയ്തു}})",
        "rightsnone": "(ഒന്നുമില്ല)",
-       "revdelete-summary": "തിരുത്തലിന്റെ ചുരുക്കം",
        "feedback-adding": "താങ്കളുടെ അഭിപ്രായങ്ങൾ താളിലേയ്ക്ക് ചേർക്കുന്നു...",
        "feedback-back": "പുറകോട്ട്",
        "feedback-bugcheck": "കൊള്ളാം! [$1 അറിയാവുന്ന ബഗുകളിൽ] ഒന്നല്ല എന്ന് ഒന്നു പരിശോധിച്ചേക്കുക.",
index bacd0d3..f52e3eb 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": "Нэвтрэх мэдээллээ мартаа юу?",
        "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-submit": "Бүртгүүлэх",
        "passwordreset-emaildisabled": "Энэ викид емайл ашиглах боломжгүй.",
        "passwordreset-username": "Хэрэглэгчийн нэр:",
        "passwordreset-domain": "Домайн:",
-       "passwordreset-capture": "Цахим шуудангийн нууц үг сэргээх шууданг үзэх",
-       "passwordreset-capture-help": "Энэ нүдийг чагталбал цахим шуудан түр нууц үгийн хамт танд харагдахаас гадна, шуудангаар тань очих болно.",
        "passwordreset-email": "Цахим шуудан:",
        "passwordreset-emailtitle": "{{SITENAME}}-н бүртгэлийн мэдээлэл",
        "passwordreset-emailtext-ip": "Хэн нэгэн ($1 гэсэн IP хаягаас) {{SITENAME}} ($4) дээр таны бүртгэлийн сануулга авахаар хүссэн байна. Дараах {{PLURAL:$3|бүртгэл|бүртгэл}}\nуг е-шуудантай холбоотой:\n\n$2\n\n{{PLURAL:$3|Уг түр хэрэглэх нууц үг|Уг түр хэрэглэх нууц үгүүд}} нь {{PLURAL:$5|нэг өдрийн|$5 өдрийн}} дотор устах болно.\nТа уг нууц үгээр нэвтэрч, түүнийг шинэчлэх хэрэгтэй. Хэрэв өөр нэгэн уг хүсэлтийг явуулсан бол \nэсвэл өөрийн ориг нууц үгээ санаж байгаад түүнийгээ өөрчлөхийг хүсэхгүй байгаа бол энэ захиаг үл ойшоож \nэнгийнээр нэвтэрч болно.",
        "saveprefs": "Хадгалах",
        "restoreprefs": "Бүх тохиргоог анхны байдалд оруулах (хэсэг бүрт)",
        "prefs-editing": "Засварлах",
-       "rows": "Мөр:",
-       "columns": "Багана:",
        "searchresultshead": "Хайлт",
        "stub-threshold": "<a href=\"#\" class=\"stub\">Түүхий холбоосийг</a> форматлах босго (байт):",
        "stub-threshold-disabled": "Идэвхигүйжүүлсэн",
        "userrights-reason": "Шалтгаан:",
        "userrights-no-interwiki": "Таньд өөр викинүүдэд хэрэглэгчдийн эрхийг өөрчлөх зөвшөөрөл байхгүй.",
        "userrights-nodatabase": "$1 мэдээллийн сан байхгүй, эсвэл дотоодынх биш байна.",
-       "userrights-nologin": "Та хэрэглэгчдийн эрхийг хуваарилахбн тулд администраторын бүртгэлтэйгээр [[Special:UserLogin|нэвтэрч орох]] шаардлагатай.",
-       "userrights-notallowed": "Танд хэрэглэгчдийн эрхийг хасаж, нэмэх эрх байхгүй.",
        "userrights-changeable-col": "Таны өөрчилж болох бүлгүүд",
        "userrights-unchangeable-col": "Таны өөрчилж болохгүй бүлгүүд",
        "userrights-conflict": "Хэрэглэгчийн эрхийн өөрчлөлтийн зөрчилдөөн! Өөрийнхөө өөрчлөлтөд итгэлтэй эсэхээ ахин нягтлаарай.",
-       "userrights-removed-self": "Та өөрийнхөө эрхийг авч хаялаа. Тиймээс та энэ хуудсанд нэвтрэх эрхгүй болно.",
        "group": "Бүлэг:",
        "group-user": "Хэрэглэгчид",
        "group-autoconfirmed": "Автоматаар батлагдсан хэрэглэгчид",
        "right-editsemiprotected": "\"{{int:protect-level-autoconfirmed}}\" -ээр хамгаалагдсан хуудсыг засах",
        "right-editcontentmodel": "Хуудасны моделын агуулгыг засах",
        "right-editinterface": "Хэрэглэгчийн интерфэйсийг засварлах",
-       "right-editusercssjs": "Бусад хэрэглэгчдийн CSS болон JS файлуудыг засварлах",
        "right-editusercss": "Бусад хэрэглэгчдийн CSS файлуудыг засварлах",
        "right-edituserjs": "Бусад хэрэглэгчдийн JS файлуудыг засварлах",
        "right-editmyusercss": "Өөрийн хэрэглэгчийн CSS файлыг засах",
        "right-siteadmin": "Мэдээллийн баазыг түгжих буюу нээх",
        "right-override-export-depth": "5 хүртэлх гүний хуудсуудыг холбогдсон хуудсуудтай хамт гаргах",
        "right-sendemail": "Бусад хэрэглэгчид руу и-мэйл явуулах",
-       "right-passwordreset": "Цахим шуудангийн нууц үгийг сэргээн харах",
        "right-managechangetags": "[[Special:Tags|tags]] -ыг өгөгдлийн сангаас устгах, нэмэх",
        "right-applychangetags": "[[Special:Tags|tags]] -ыг өөрчлөлтийн хамт хэрэгжүүлэх",
        "right-changetags": "[[Special:Tags|tags]] -ыг хувийн хяналт, логийн бичлэг дагалдуулан нэмэх, хасах",
        "rcshowhidemine": "Миний засваруудыг $1",
        "rcshowhidemine-show": "үзүүлэх",
        "rcshowhidemine-hide": "нуух",
-       "rclinks": "Сүүлийн $2 өдрийн турших $1 засварыг үзүүлэх<br />$3",
+       "rclinks": "Сүүлийн $2 өдрийн турших $1 засварыг үзүүлэх",
        "diff": "ялгаа",
        "hist": "түүх",
        "hide": "нуух",
        "undeleteviewlink": "харах",
        "undeleteinvert": "Зааснаас бусад",
        "undeletecomment": "Шалтгаан:",
-       "undeletedrevisions": "{{PLURAL:$1|1 хувилбар|$1 хувилбар}}  сэргээгдлээ",
-       "undeletedrevisions-files": "{{PLURAL:$1|1 засвар|$1 засвар}} ба {{PLURAL:$2|1 файл|$2 файл}} сэргээгдлээ",
-       "undeletedfiles": "{{PLURAL:$1|1 файл|$1 файл}} сэргээгдлээ",
        "cannotundelete": "Устгал сэргээлт хийж чадсангүй:\n$1",
        "undeletedpage": "'''$1 сэргээгдэв'''\n\nСүүлийн үед устгагдсан ба сэргээгдсэн зүйлүүдийн жагсаалтыг [[Special:Log/delete|устгалын бүртгэл]] дээрээс харна уу.",
        "undelete-header": "[[Special:Log/delete|Устгалын бүртгэл]]ээс сүүлд устгагдсан хуудсуудыг харна уу.",
        "logentry-rights-rights-legacy": "$1 $3 дэхь грүпийн гишүүнчлэлээ сольсон",
        "logentry-rights-autopromote": "$1 $4 аас $5 руу автоматаар дэвшигдлээ",
        "rightsnone": "(байхгүй)",
-       "revdelete-summary": "засварын товч агуулга",
        "feedback-cancel": "Болих",
        "feedback-close": "Болсон",
        "searchsuggest-search": "Хайх",
-       "api-error-filename-tooshort": "Файлын нэр хэтэрхий урт байна.",
-       "api-error-filetype-banned": "Ийм төрлийн файлыг хорьсон байна.",
-       "api-error-illegal-filename": "Ийм хэрэглэгчийн нэр өгөх боломжгүй.",
-       "api-error-internal-error": "Өөрийн алдаа: файлыг чинь upload хийх явцад алдаа гарлаа.",
-       "api-error-mustbeloggedin": "файлаа upload хийхийн тулд эхлээд хэрэглэгчээр нэвтэр.",
-       "api-error-mustbeposted": "Өөрийн алдаа: HTTP POST төрлийн хандалт шаардлагатай.",
-       "api-error-noimageinfo": "upload хийгдсэн боловч файлын талаар ямарч мэдээлэл сервер өгсөнгүй.",
-       "api-error-nomodule": "Өөрийн алдаа: upload хийх модулийг зааж өгөөгүй байна.",
-       "api-error-ok-but-empty": "Өөрийн алдаа: Серверээс хариу ирсэнгүй.",
-       "api-error-overwrite": "Ижил нэртэй файл оруулах хориотой.",
        "api-error-stashfailed": "Өөрийн алдаа: Серверт түр файл хадгалахад алдаа гарлаа.",
-       "api-error-timeout": "Сервер хариу өгөлгүй удлаа.",
-       "api-error-unclassified": "Тодорхойгүй алдаа гарлаа.",
-       "api-error-unknown-code": "Тодорхойгүй алдаа: \"$1\".",
-       "api-error-unknown-error": "Өөрийн алдаа: upload хийх үед алдаа гарлаа.",
        "api-error-unknown-warning": "Тодорхойгүй сануулга: $1",
        "api-error-unknownerror": "Тодорхойгүй алдаа: $1",
-       "api-error-uploaddisabled": "Энэ викид upload хийхийг хориглосон.",
-       "api-error-verification-error": "Файлын төрөл буруу, эсвэл дутуу татагдсан.",
        "duration-seconds": "$1 {{PLURAL:$1|секунд|секунд}}",
        "duration-minutes": "$1 {{PLURAL:$1|минут|минут}}",
        "duration-hours": "$1 {{PLURAL:$1|цаг|цаг}}",
index 64e73ff..7af2bf2 100644 (file)
        "rcshowhideliu": "$1 утилизаторь аутентификаць",
        "rcshowhideanons": "$1 утилизаторь анонимь",
        "rcshowhidemine": "$1 едитэриле меле",
-       "rclinks": "Аратэ ултимеле $1 модификэрь дин ултимеле $2 зиле.<br />$3",
+       "rclinks": "Аратэ ултимеле $1 модификэрь дин ултимеле $2 зиле.",
        "diff": "диф",
        "hist": "ист",
        "hide": "аскунде",
index a6ac26c..c22f4e6 100644 (file)
        "right-editsemiprotected": "\"{{int:protect-level-autoconfirmed}}\" म्हणून नमुद केलेली सुरक्षित पाने संपादा",
        "right-editcontentmodel": "पानाचा आशय नमूना संपादा",
        "right-editinterface": "सदस्य पसंतीक्रम बदला",
-       "right-editusercssjs": "इतर सदस्यांच्या CSS व JS संचिका संपादित करा",
        "right-editusercss": "इतर सदस्यांच्या CSS संचिका संपादित करा",
        "right-edituserjs": "इतर सदस्यांच्या JS संचिका संपादित करा",
        "right-editmyusercss": "स्वत:च्या सदस्यनामाच्या 'सीएसएस' संचिका संपादा",
        "rcshowhidecategorization": "$1 पान वर्गीकरण",
        "rcshowhidecategorization-show": "दाखवा",
        "rcshowhidecategorization-hide": "लपवा",
-       "rclinks": "मागील $2 दिवसांतील $1 बदल पहा.<br />$3",
+       "rclinks": "मागील $2 दिवसांतील $1 बदल पहा.",
        "diff": "फरक",
        "hist": "इति.",
        "hide": "लपवा",
        "undeleteviewlink": "पहा",
        "undeleteinvert": "निवड उलट करा",
        "undeletecomment": "प्रतिक्रिया:",
-       "undeletedrevisions": "{{PLURAL:$1|1 आवर्तन|$1 आवर्तने}} पुनर्स्थापित",
-       "undeletedrevisions-files": "{{PLURAL:$1|1 आवर्तन|$1 आवर्तने}}आणि {{PLURAL:$2|1 संचिका|$2 संचिका}} पुनर्स्थापित",
-       "undeletedfiles": "{{PLURAL:$1|1 संचिका|$1 संचिका}} पुनर्स्थापित",
        "cannotundelete": "काही किंवा सर्वच उलटवणे फसले:$1",
        "undeletedpage": "<strong>$1ला पुनर्स्थापित केले</strong>\n\nअलिकडिल वगळलेल्या आणि पुनर्स्थापितांच्या नोंदीकरिता [[Special:Log/delete|वगळल्याच्या नोंदी]] पहा .",
        "undelete-header": "अलीकडील वगळलेल्या पानांकरिता [[Special:Log/delete|वगळलेल्या नोंदी]] पहा.",
index bf16968..0c114ec 100644 (file)
        "rcshowhideliu": "$1 тинӓрӹн сирӓлтӹнӹт",
        "rcshowhideanons": "$1 анонимвлӓ",
        "rcshowhidemine": "$1 ӹшке тӧрлӹмӓшвлӓэт",
-       "rclinks": "Пӹтӓрӹтш  $1кечӹвлаштӹш $2 вашталтмашвлӓм  анжыкташ<br />$3",
+       "rclinks": "Пӹтӓрӹтш  $1кечӹвлаштӹш $2 вашталтмашвлӓм  анжыкташ",
        "diff": "ма-шон",
        "hist": "истори",
        "hide": "шӹлтӓш",
index 865fa33..621cef1 100644 (file)
        "login": "Log masuk",
        "login-security": "Mengesahkan identiti anda",
        "nav-login-createaccount": "Log masuk / buka akaun",
-       "userlogin": "Log masuk / buka akaun",
-       "userloginnocreate": "Log masuk",
        "logout": "Log keluar",
        "userlogout": "Log keluar",
        "notloggedin": "Belum log masuk",
        "userlogin-noaccount": "Tidak mempunyai akaun?",
        "userlogin-joinproject": "Sertai {{SITENAME}}",
-       "nologin": "Belum mempunyai akaun? '''$1'''.",
-       "nologinlink": "Buka akaun baru",
        "createaccount": "Buka akaun",
-       "gotaccount": "Sudah mempunyai akaun? '''$1'''.",
-       "gotaccountlink": "Log masuk",
-       "userlogin-resetlink": "Lupa nama pengguna/kata laluan anda?",
        "userlogin-resetpassword-link": "Lupa kata laluan anda?",
        "userlogin-helplink2": "Bantuan untuk log masuk",
        "userlogin-loggedin": "Anda sudah log masuk sebagai {{GENDER:$1|$1}}. Gunakan borang di bawah untuk log masuk sebagai pengguna lain.",
        "createaccountmail": "Gunakan kata laluan rawak yang sementara dan hantarnya ke alamat e-mel yang dinyatakan",
        "createaccountmail-help": "Boleh digunakan untuk membuat akaun untuk orang lain tanpa mengetahui kata laluan.",
        "createacct-realname": "Nama sebenar (pilihan)",
-       "createaccountreason": "Sebab:",
        "createacct-reason": "Sebab",
        "createacct-reason-ph": "Mengapa anda membuka satu lagi akaun",
        "createacct-reason-help": "Mesej yang ditunjukkan dalam log penciptaan akaun",
        "botpasswords-label-delete": "Hapuskan",
        "botpasswords-label-resetpassword": "Set semula kata laluan",
        "botpasswords-label-grants": "Pemberian berkenaan:",
+       "botpasswords-help-grants": "Membenarkan pemberian akses kepada hak-hak yang telah dipegang oleh akaun pengguna anda. Membolehkan pemberian di sini tidak menyediakan akses kepada mana-mana hak yang akaun pengguna anda tidak sepatutnya ada. Lihat [[Special:ListGrants|jadual pemberian]] untuk maklumat lanjut.",
+       "botpasswords-label-grants-column": "Diberikan",
+       "botpasswords-bad-appid": "Nama bot \"$1\" adalah tidak sah.",
+       "botpasswords-insert-failed": "Gagal untuk menambah nama bot \"$1\". Adakah ia telah digunakan?",
+       "botpasswords-update-failed": "Gagal untuk mengemas kini nama bot \"$1\". Adakah ia telah dipadam?",
+       "botpasswords-created-title": "Kata laluan bot telah dicipta",
+       "botpasswords-created-body": "Kata laluan bot untuk nama bot \"$1\" bagi pengguna \"$2\" telah dicipta.",
+       "botpasswords-updated-title": "Kata laluan bot telah dikemaskinikan",
+       "botpasswords-updated-body": "Kata laluan bot untuk nama bot \"$1\" bagi pengguna \"$2\" telah dikemaskini.",
+       "botpasswords-deleted-title": "Kata laluan bot telah dipadam",
+       "botpasswords-deleted-body": "Kata laluan bot untuk nama bot \"$1\" bagi pengguna \"$2\" telah dipadam.",
+       "botpasswords-newpassword": "Kata laluan baru untuk log masuk dengan <strong>$1</strong> adalah <strong>$2</strong>. <em>Sila catatkan ini untuk rujukan masa depan.</em> <br> (Untuk bots lama yang memerlukan nama log masuk untuk menjadi sama dengan nama pengguna akhirnya, anda juga boleh menggunakan <strong>$3</strong> sebagai nama pengguna dan <strong>$4</strong> sebagai kata laluan.)",
+       "botpasswords-no-provider": "BotPasswordsSessionProvider tidak tersedia.",
+       "botpasswords-restriction-failed": "Bot sekatan kata laluan menghalang log masuk ini.",
+       "botpasswords-invalid-name": "Nama pengguna yang dinyatakan tidak mengandungi pemisah kata laluan bot (\"$1\").",
        "resetpass_forbidden": "Kata laluan tidak boleh ditukar",
        "resetpass-no-info": "Anda hendaklah log masuk terlebih dahulu untuk mencapai laman ini secara terus.",
        "resetpass-submit-loggedin": "Tukar kata laluan",
        "userrights-lookup-user": "Urus kumpulan pengguna",
        "userrights-user-editname": "Masukkan nama pengguna:",
        "editusergroup": "Sunting Kumpulan Pengguna",
-       "editinguser": "Mengubah hak {{GENDER:$1|pengguna}} <strong>[[User:$1|$1]]</strong> $2",
+       "editinguser": "Mengubah hak {{GENDER:$1|pengguna}} bagi <strong>[[User:$1|$1]]</strong> $2",
+       "viewinguserrights": "Melihat hak {{GENDER:$1|pengguna}} bagi <strong>[[User:$1|$1]]</strong> $2",
        "userrights-editusergroup": "Ubah kumpulan pengguna",
        "saveusergroups": "Simpan Kumpulan Pengguna",
        "userrights-groupsmember": "Ahli bagi:",
        "right-editsemiprotected": "Menyunting halaman-halaman yang dilindungi sebagai \"{{int:protect-level-autoconfirmed}}\"",
        "right-editcontentmodel": "Menyunting model kandungan laman",
        "right-editinterface": "Menyunting antara muka pengguna",
-       "right-editusercssjs": "Menyunting fail CSS dan JavaScript pengguna lain",
        "right-editusercss": "Menyunting fail CSS pengguna lain",
        "right-edituserjs": "Menyunting fail JavaScript pengguna lain",
        "right-editmyusercss": "Menyunting fail CSS pengguna sendiri",
        "rcshowhidecategorization": "$1 pengkategorian laman",
        "rcshowhidecategorization-show": "Paparkan",
        "rcshowhidecategorization-hide": "Sorokkan",
-       "rclinks": "Paparkan $1 perubahan terakhir sejak $2 hari yang lalu<br />$3",
+       "rclinks": "Paparkan $1 perubahan terakhir sejak $2 hari yang lalu",
        "diff": "beza",
        "hist": "sej",
        "hide": "Sorokkan",
        "undeleteviewlink": "papar",
        "undeleteinvert": "Kecualikan pilihan",
        "undeletecomment": "Sebab:",
-       "undeletedrevisions": "$1 semakan dipulihkan",
-       "undeletedrevisions-files": "$1 semakan dan $2 fail dipulihkan",
-       "undeletedfiles": "$1 fail dipulihkan",
        "cannotundelete": "Penyahhapusan gagal: $1",
        "undeletedpage": "'''$1 telah dipulihkan'''\n\nSila rujuk [[Special:Log/delete|log penghapusan]] untuk rekod penghapusan terkini.",
        "undelete-header": "Lihat [[Special:Log/delete|log penghapusan]] untuk laman-laman yang baru dihapuskan.",
        "logentry-tag-update-revision": "$1 telah {{GENDER:$2|mengemaskinikan}} teg-teg pada semakan $4 pada $3 ({{PLURAL:$7|menambahkan}} $6; {{PLURAL:$9|menggugurkan}} $8)",
        "logentry-tag-update-logentry": "$1 telah {{GENDER:$2|mengemaskinikan}} teg-teg pada entri log $5 bagi laman $3 ({{PLURAL:$7|menambahkan}} $6; {{PLURAL:$9|menggugurkan}} $8)",
        "rightsnone": "(tiada)",
-       "revdelete-summary": "ringkasan",
        "feedback-adding": "Maklum balas sedang diisikan ke dalam laman...",
        "feedback-back": "Kembali",
        "feedback-bugcheck": "Bagus! Cuma pastikan itu bukan salah satu [$1 pepijat] yang sedia diketahui.",
index 4166acc..c35c76a 100644 (file)
        "externaldberror": "Kien hemm problema esterna ta' awtentiċitá jew m'għandhekx permess neċċessarju sabiex tagħmel aġġornamenti fuq l-aċċess estern.",
        "login": "Idħol",
        "nav-login-createaccount": "Idħol / Oħloq kont",
-       "userlogin": "Idħol jew oħloq kont ġdid",
-       "userloginnocreate": "Idħol",
        "logout": "Oħroġ",
        "userlogout": "oħroġ",
        "notloggedin": "Għadek ma dħaltx ġewwa",
        "userlogin-noaccount": "M'għandekx kont?",
        "userlogin-joinproject": "Irreġistra fuq {{SITENAME}}",
-       "nologin": "Għad m'għandekx kont? '''$1'''.",
-       "nologinlink": "Oħloq kont",
        "createaccount": "Oħloq kont",
-       "gotaccount": "Diġa għandhek kont? '''$1'''.",
-       "gotaccountlink": "Idħol",
-       "userlogin-resetlink": "Insejt kif tidħol fil-kont tiegħek?",
        "userlogin-resetpassword-link": "Insejt il-kelma tad-dħul (password)?",
        "userlogin-helplink2": "Għajnuna biex tidħol fil-kont",
        "userlogin-loggedin": "Diġà dħalt fil-kont bħala {{GENDER:$1|$1}}.\nUża l-formola t'hawn taħt biex tidħol bħala utent ieħor",
        "createacct-another-email-ph": "Daħħal l-indirizz elettroniku",
        "createaccountmail": "Uża kelma tad-dħul temporanja li tkun u ibgħatha lill-indirizz elettroniku speċifikat",
        "createacct-realname": "Isem proprju (fakultattiv)",
-       "createaccountreason": "Raġuni:",
        "createacct-reason": "Raġuni",
        "createacct-reason-ph": "Għala qiegħed toħloq kont ġdid",
        "createacct-submit": "Oħloq il-kont",
        "right-editprotected": "Modifika paġni protetti",
        "right-editcontentmodel": "Jimmodifika l-mudell ta' kontenut ta' paġna",
        "right-editinterface": "Immodifika l-interfaċċa tal-utent",
-       "right-editusercssjs": "Modifika l-fajls CSS u JS ta' utenti oħrajn",
        "right-editusercss": "Modifika l-fajls CSS ta' utenti oħrajn",
        "right-edituserjs": "Modifika l-fajls JS ta' utenti oħrajn",
        "right-editmyusercss": "Immodifika l-fajls tas-CSS personali",
        "rcshowhidemine": "$1 modifiki tiegħi",
        "rcshowhidemine-show": "Uri",
        "rcshowhidemine-hide": "Aħbi",
-       "rclinks": "Uri l-aħħar $1 modifiki fl-aħħar $2 ġranet<br />$3",
+       "rclinks": "Uri l-aħħar $1 modifiki fl-aħħar $2 ġranet",
        "diff": "diff",
        "hist": "kron",
        "hide": "Aħbi",
        "undeleteviewlink": "uri",
        "undeleteinvert": "Inverti s-selezzjoni",
        "undeletecomment": "Raġuni:",
-       "undeletedrevisions": "{{PLURAL:$1|reviżjoni irkuprata|$1 reviżjonijiet irkuprati}}",
-       "undeletedrevisions-files": "{{PLURAL:$1|reviżjoni waħda|$1 reviżjonijiet}} u {{PLURAL:$2|fajl wieħed irkuprat|$2 fajls irkuprati}}",
-       "undeletedfiles": "{{PLURAL:$1|file wieħed|$1 fajls}} irkuprati",
        "cannotundelete": "L-irkuprar ma rnexxiex:\n$1",
        "undeletedpage": "'''$1 ġie irkuprat'''\n\nIkkonsulta r-[[Special:Log/delete|reġistru tat-tħassir]] biex tara t-tħassir u l-irkuprar ta' paġni l-aktar riċenti.",
        "undelete-header": "Ara r-[[Special:Log/delete|reġistru tat-tħassir]] għal paġni mħassra riċentament.",
        "logentry-tag-update-revision": "$1 {{GENDER:$2|aġġorna|aġġornat}} it-tikketti tar-reviżjoni $4 tal-paġna $3 ({{PLURAL:$7|miżjuda}} $6; {{PLURAL:$9|imneħħija}} $8)",
        "logentry-tag-update-logentry": "$1 {{GENDER:$2|aġġorna|aġġornat}} it-tikketti tad-daħla fir-reġistru $5 tal-paġna $3 ({{PLURAL:$7|miżjuda}} $6; {{PLURAL:$9|imneħħija}} $8)",
        "rightsnone": "(xejn)",
-       "revdelete-summary": "Taqsira tal-modifika",
        "feedback-adding": "Qed jiżdied ir-rispons lil din il-paġna...",
        "feedback-back": "Lura",
        "feedback-bugcheck": "Tajjeb ħafna! Ivverifika li mhux diġà fost id-[$1 difetti magħrufa].",
index 41c6a59..472130a 100644 (file)
        "yourdomainname": "L tou domínio",
        "login": "Antrar",
        "nav-login-createaccount": "Antrar / criar cuonta",
-       "userlogin": "Antrar / criar cuonta",
        "logout": "Salir",
        "userlogout": "Salir",
        "notloggedin": "Por outenticar",
-       "nologin": "Nun tenes ua cuonta? '''$1'''.",
-       "nologinlink": "Criar ua cuonta",
        "createaccount": "Criar nuoba cuonta",
-       "gotaccount": "Yá tenes ua cuonta? '''$1'''.",
-       "gotaccountlink": "Antrar",
        "createaccountmail": "por morada eiletrónica",
        "loginerror": "Erro de outenticaçon",
        "loginsuccesstitle": "Antreste cumo debe de ser",
        "prefs-rc": "Redadeiras alteraçones",
        "saveprefs": "Grabar",
        "prefs-editing": "Oupçones de eidiçon",
-       "rows": "Lhinhas:",
        "servertime": "Hora de l serbidor:",
        "timezoneregion-africa": "África",
        "timezoneregion-america": "América",
        "rcshowhideanons": "$1 outelizadores anónimos",
        "rcshowhidepatr": "$1 eidiçones patrulhadas",
        "rcshowhidemine": "$1 mies eidiçones",
-       "rclinks": "Amostrar las redadeiras $1 altaraçones ne ls redadeiros $2 dies<br />$3",
+       "rclinks": "Amostrar las redadeiras $1 altaraçones ne ls redadeiros $2 dies",
        "diff": "defr",
        "hist": "stór",
        "hide": "Scunder",
index 80b9b12..884d21d 100644 (file)
@@ -23,7 +23,8 @@
                        "9.sinistra",
                        "Ninjastrikers",
                        "Penguinlay",
-                       "Nemo bis"
+                       "Nemo bis",
+                       "Stephanecbisson"
                ]
        },
        "tog-underline": "လင့်ကို မျဉ်းသားသည့် ပုံစံ -",
        "view": "ကြည့်ရန်",
        "view-foreign": "$1 တွင် ကြည့်ရန်",
        "edit": "ပြင်ဆင်ရန်",
+       "edit-local": "ဒေသတွင်း ဖော်ပြချက် ပြင်ဆင်ရန်",
        "create": "စတင်ရေးသားရန်",
        "create-local": "ဒေသတွင်း ဖော်ပြချက် ထည့်ရန်",
        "editthispage": "ဤစာမျက်နှာကို ပြင်ရန်",
        "protectedpagetext": "ဤစာမျက်နှာအား တည်းဖြတ်ခြင်းနှင့် အခြားလုပ်ဆောင်မှုများ မလုပ်ဆောင်နိုင်အောင် ကာကွယ်ထားသည်။",
        "viewsourcetext": "ဤစာမျက်နှာ၏ ရင်းမြစ်ကို ကြည့်ရှု၍ ကူးယူနိုင်သည်။",
        "viewyourtext": "ဤစာမျက်နှာရှိ <strong>သင့်တည်းဖြတ်မှုများ</strong>၏ ရင်းမြစ်ကို ကြည့်ရှုပြီး ကူးယူနိုင်သည်။",
+       "editinginterface": "<strong>သတိပေးချက်။</strong> သင်သည် ဆော့ဖ်ဝဲလ်၏ အသွင်အပြင်စာသားများကို အထောက်အကူပြုရာတွင် သုံးသော စာမျက်နှာအား တည်းဖြတ်နေသည်။\nဤစာမျက်နှာတွင် ပြောင်းလဲမှုများသည် ဤဝီကီရှိ အခြားအသုံးပြုသူများ၏ အသုံးပြုသူ အသွင်အပြင်များအပေါ် အကျိုးသက်ရောက်ပါလိမ့်မည်။",
        "namespaceprotected": "'''$1''' စာညွှန်းဖြင့် စာမျက်နှာကို တည်းဖြတ်ရန် ခွင့်ပြုချက် မရှိပါ။",
        "mycustomcssprotected": "ဤ CSS စာမျက်နှာကို သင်တည်းဖြတ်ပြင်ဆင်ခွင့် မရှိပါ။",
        "mycustomjsprotected": "ဤ JavaScript စာမျက်နှာကို သင်တည်းဖြတ်ပြင်ဆင်ခွင့် မရှိပါ။",
        "rcshowhidecategorization": "စာမျက်နှာ ကဏ္ဍထည့်သွင်းခြင်း $1ရန်",
        "rcshowhidecategorization-show": "ပြ",
        "rcshowhidecategorization-hide": "ဝှက်",
-       "rclinks": "$2 ရက်အတွင်းမှ နောက်ဆုံးပြင်ဆင်ချက် $1 ခုကို ပြရန်</br> $3",
+       "rclinks": "$2 ရက်အတွင်းမှ နောက်ဆုံးပြင်ဆင်ချက် $1 ခုကို ပြရန်",
        "diff": "ကွဲပြားမှု",
        "hist": "မှတ်တမ်း",
        "hide": "ဝှက်",
        "undeleteviewlink": "ကြည့်ရန်",
        "undeleteinvert": "ရွေးချယ်ထားခြင်းကို ပြောင်းပြန်လှန်ရန်",
        "undeletecomment": "အ​ကြောင်း​ပြ​ချက် -",
-       "undeletedrevisions": "{{PLURAL:$1|မူတစ်ခု|မူ $1 ခု}} ကိုပြန်လည် ထိန်းသိမ်းပြီး",
        "undelete-search-box": "ဖျက်ပစ်သည့် စာမျက်နှာများမှ ရှာရန်",
        "undelete-search-submit": "ရှာဖွေရန်",
        "undelete-show-file-submit": "မှန်",
index 2a102ec..726c901 100644 (file)
        "password-change-forbidden": "Те викисэнть а полавтсак салававалот.",
        "login": "Совамо",
        "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-createanother": "Шкак од совамотарка",
        "createaccountmail": "Тейть кодамо понгсь салававал, кучик сонзэ ало максозь е-сёрмапаргонтень",
-       "createaccountreason": "Тувталось:",
        "createacct-reason": "Тувтал",
        "createacct-submit": "Шкик совамотаркат",
        "createacct-another-submit": "Шкак од совамотарка",
        "saveprefs": "Ванстомс",
        "restoreprefs": "Велявтомс мекев весе ушодкс ладсематнень (весе явкстнэва)",
        "prefs-editing": "Витнема-петнема",
-       "rows": "Валчилькстнэ (строкатне):",
-       "columns": "Палманть:",
        "searchresultshead": "Вешнема",
        "recentchangesdays": "Зяро чить невтемс чиень полавтнематнесэ-лиякстомтоматнесэ:",
        "recentchangesdays-max": "Весемеде куватьс $1 {{PLURAL:$1|чис|чис}}",
        "right-block": "Кардамс лия совийтнень-лисийтнень витнемадо-петнемадо",
        "right-blockemail": "Кардамс лия лисийтнень-совийтнень е-сёрмань кучомадо",
        "right-editinterface": "Витнемс-петнемс теицянь интерчаманть (васодема ёжонть)",
-       "right-editusercssjs": "Витнемс-петнемс лия теицятнень CSS ды JS файласт",
        "right-editusercss": "Витнемс-петнемс лия теицятнень CSS файласт",
        "right-edituserjs": "Витнемс-петнемс лия теицятнень JS файласт",
        "right-import": "Ёвкстамс лия Викистэ лопат",
        "right-mergehistory": "Вейсэндямс лопатнень юрост-путовксост",
        "right-userrights": "Витнемс-петнемс совицянь весе видечитнень",
        "right-siteadmin": "Датабазань сёлгомо ды панжомо",
-       "right-passwordreset": "Ваномс теицянь салава валонь полавтома е-сёрмат",
        "newuserlogpage": "Теицянь шкамодо-теемадо конёв",
        "newuserlogpagetext": "Те теицянь шкавксто журнал",
        "rightslog": "Уськетеицянть видечинть кемекстома",
        "rcshowhidemine": "$1 мезе мон витнинь-петнинь",
        "rcshowhidemine-show": "Невтемс",
        "rcshowhidemine-hide": "Кекшемс",
-       "rclinks": "Невтемс меельце $1 полавтнемат меельце $2 чинь перть<br />$3",
+       "rclinks": "Невтемс меельце $1 полавтнемат меельце $2 чинь перть",
        "diff": "кадовикс",
        "hist": "ист",
        "hide": "Кекшемс",
        "undeleteviewlink": "ваномс",
        "undeleteinvert": "Кочказень таркас апаконь кочкамо",
        "undeletecomment": "Тувталось:",
-       "undeletedrevisions": "{{PLURAL:$1|1 лиякстомтома|$1 лиякстомтомат}} вельмевтезь",
-       "undeletedrevisions-files": "{{PLURAL:$1|1 лиякстомтома|$1 лиякстомтомат}} ды {{PLURAL:$2|1 файла|$2 файлат}} вельмевтезь",
-       "undeletedfiles": "{{PLURAL:$1|1 файла|$1 файлат}} вельмевтезь",
        "undelete-search-box": "Вешнемс нардазь лопатнень ютксто",
        "undelete-search-prefix": "Невтемс лопат тестэ саезь:",
        "undelete-search-submit": "Вешнемс",
        "htmlform-reset": "Саемс мекев полавтоматнень",
        "htmlform-selectorother-other": "Лия",
        "rightsnone": "(арасть)",
-       "revdelete-summary": "витнемадо-петнемадо нурькине йовтавкс",
        "feedback-cancel": "А теемс",
        "feedback-close": "Анок",
        "feedback-message": "Пачтямнэсь:",
        "feedback-subject": "Мезде:",
        "searchsuggest-search": "Вешнемс",
-       "api-error-filename-tooshort": "Керьмазлементь а саты кувалмозо",
-       "api-error-illegal-filename": "Керьмазлемесь а маштови.",
        "api-error-unknownerror": "Апак содань ильведевкс: «$1».",
        "duration-seconds": "$1 {{PLURAL:$1|секунда|секундат}}",
        "duration-minutes": "$1 {{PLURAL:$1|минут|минутат}}",
index ecff7b5..056c244 100644 (file)
        "yourdomainname": "Moāxcāyō",
        "login": "Xicalaqui",
        "nav-login-createaccount": "Ximocalaqui / ximomachiyōmaca",
-       "userlogin": "Ximomachiyomaca/Ximocalaqui",
-       "userloginnocreate": "Ximocalaqui",
        "logout": "Xiquīza",
        "userlogout": "Xiquīza",
        "notloggedin": "Ahmō ōtimocalac",
        "userlogin-noaccount": "Cuix ahmo titlapohualeh?",
-       "nologin": "Cuix ahmō titlapōhualeh? $1.",
-       "nologinlink": "Xicchīhua cē tlapōhualli",
        "createaccount": "Xicchīhua tlapōhualli",
-       "gotaccount": "¿Ye ticpiya cē tlapōhualli? '''$1'''.",
-       "gotaccountlink": "Ximocalaqui",
        "createacct-email-ph": "xiquihcuilo mocorreo electrónico",
        "createaccountmail": "Ticnemītīz ahmo cemihcac zāzoichtacātlahtōlli nō in tiquēhualtīz in maltzinteyōtl monetitlanizyeyān",
-       "createaccountreason": "Tleipampa:",
        "createacct-reason": "Tleīpampa",
        "createacct-submit": "Xicchīhua in motlapōhual",
        "badretype": "Ahneneuhqui motlahtōlichtacāyo.",
        "rcshowhidepatr": "$1 tlapatlaliztli mochiyahua",
        "rcshowhidemine": "$1 notlahcuilol",
        "rcshowhidemine-show": "Xicnexti",
-       "rclinks": "Xiquitta yancuic $1 tlapatlaliztli yancuic $2 tonalpan.<br />$3",
+       "rclinks": "Xiquitta yancuic $1 tlapatlaliztli yancuic $2 tonalpan.",
        "diff": "ahneneuhqui",
        "hist": "tlahtollotl",
        "hide": "Tictlatiz",
        "blankpage": "Iztāc zāzanilli",
        "htmlform-selectorother-other": "Occe",
        "rightsnone": "ahtlein",
-       "revdelete-summary": "ticpatlāz tlahcuilōltōn",
        "searchsuggest-search": "Tlatemoliztli",
        "api-error-stashfailed": "Tlâtek îtlakawilistli: In tlatèmakani awel òkeuh in èwalpanòni.",
        "api-error-unknown-warning": "Âmò ìxmatkàyo tlanawatilistli: \"$1\".",
index f3ed5cb..b8c1364 100644 (file)
        "rcshowhidemine": "$1 góa ê pian-chi̍p",
        "rcshowhidemine-show": "hiàn",
        "rcshowhidemine-hide": "am",
-       "rclinks": "Hían-sī $2 ji̍t lāi siōng sin ê $1 hāng kái-piàn<br />$3",
+       "rclinks": "Hían-sī $2 ji̍t lāi siōng sin ê $1 hāng kái-piàn",
        "diff": "Cheng-chha",
        "hist": "ls",
        "hide": "am",
        "contributions": "{{GENDER:$1|Iōng-chiá}} ê kòng-hiàn",
        "contributions-title": "Iōng-chiá $1--ê kòng-hiàn",
        "mycontris": "Kòng-hiàn",
-       "anoncontribs": "Kòng-hiān",
+       "anoncontribs": "Kòng-hiàn",
        "nocontribs": "Chhōe bô tiâu-kiāⁿ ū-tùi ê hāng-bo̍k.",
        "uctop": "(siōng téng ê)",
        "month": "Kàu tó 1 kó͘ goe̍h ûi-chí:",
index 47d2bcf..fac4b37 100644 (file)
        "login": "Tràse",
        "login-security": "Cunferma l'identità",
        "nav-login-createaccount": "Trasite o criate n'acciesso nuovo",
-       "userlogin": "Trasite o criate n'acciesso nuovo",
-       "userloginnocreate": "Tràse",
        "logout": "Jèsce",
        "userlogout": "Jèsce",
        "notloggedin": "Acciesso nun affettuato",
        "userlogin-noaccount": "Nun tenite ancora n'acciesso?",
        "userlogin-joinproject": "Facite 'o riggistro ncopp'a {{SITENAME}}",
-       "nologin": "Nun tenite ancora n'acciesso? '''$1'''.",
-       "nologinlink": "Crialo mmo",
        "createaccount": "Crèa nu cunto nuovo",
-       "gotaccount": "Tiene già nu cunto? '''$1'''.",
-       "gotaccountlink": "Tràse",
-       "userlogin-resetlink": "V'avite scurdato 'e dettaglie d'acciesso vuoste?",
        "userlogin-resetpassword-link": "Te sì scurdat' 'a password?",
        "userlogin-helplink2": "Aiuto cu l'accieso",
        "userlogin-loggedin": "Sì già {{GENDER:$1|connesso comme $1|connessa comme $1|connesso/a comme $1}}.\nUsa 'o modulo ccà abbascio pe trasì com'a n'atu utente.",
        "createaccountmail": "Usa na password qualunque temporanea e manna sta password a l'indirizzo 'e posta e-mail specificato",
        "createaccountmail-help": "Se putess'ausà pe' puté crià nu cunto pe' n'ata perzona senza mparà 'a password.",
        "createacct-realname": "Nomme riale (ozzionale)",
-       "createaccountreason": "Mutivo:",
        "createacct-reason": "Mutivo",
        "createacct-reason-ph": "Pecché staje crianno n'at'utenza",
        "createacct-reason-help": "Mmasciata mmustata dint'o riggistro 'e criazion' 'e cunte",
        "right-editsemiprotected": "Cagna 'e paggene prutette cu \"{{int:protect-level-autoconfirmed}}\"",
        "right-editcontentmodel": "Cagna 'o modello 'e cuntenute 'e na paggena",
        "right-editinterface": "Modifeca 'a nterfaccia utente",
-       "right-editusercssjs": "Cagna 'e file CSS e JS e l'at'utente",
        "right-editusercss": "Cagna 'e file CSS 'e l'at'utente",
        "right-edituserjs": "Cagna 'e file JS e l'at'utente",
        "right-editmyusercss": "Cagna 'e proprie file CSS",
        "rcshowhidecategorization": "$1 categorizzaziona d' 'a paggena",
        "rcshowhidecategorization-show": "Faje vedé",
        "rcshowhidecategorization-hide": "Annascunne",
-       "rclinks": "Faje vedé ll'urdeme $1 cagnamiente dint' ll'urdeme $2 juorne<br />$3",
+       "rclinks": "Faje vedé ll'urdeme $1 cagnamiente dint' ll'urdeme $2 juorne",
        "diff": "diff",
        "hist": "cron",
        "hide": "annascunne",
        "undeleteviewlink": "vire",
        "undeleteinvert": "Abbarruca 'a sceveta",
        "undeletecomment": "Mutivo:",
-       "undeletedrevisions": "{{PLURAL:$1|1 verzione|$1 verziune}} arrepigliate",
-       "undeletedrevisions-files": "{{PLURAL:$1|1 verzione|$1 verziune}} e {{PLURAL:$2|1 file|$2 file}} arrepigliate",
-       "undeletedfiles": "{{PLURAL:$1|1 file arrepigliato|$1 file arrepigliate}}",
        "cannotundelete": "Arrepiglio fallito:\n$1",
        "undeletedpage": "'''$1 è stat'arrepigliato'''\n\nLiggiete 'o [[Special:Log/delete|riggistro 'e scancellamiente]] pe n'avé n'elenco 'e l'urdeme scancellamiente e arrepiglie.",
        "undelete-header": "Vedite [[Special:Log/delete|'o riggistro 'e scancellamiente]] pe l'urdeme paggene scancellate",
        "logentry-tag-update-revision": "$1 {{GENDER:$2|agghiurnaje}} tag dint'a verziona $4 d' 'a paggena $3 ({{PLURAL:$7|azzeccaje}} $6; {{PLURAL:$9|luvaje}} $8)",
        "logentry-tag-update-logentry": "$1 {{GENDER:$2|agghiurnaje}} tag dint'a ntrata 'e riggistro $5 d' 'a paggena $3 ({{PLURAL:$7|azzeccaje}} $6; {{PLURAL:$9|luvaje}} $8)",
        "rightsnone": "(nisciuno)",
-       "revdelete-summary": "cagna 'o riepilego",
        "feedback-adding": "Azzecca nu feedback/na segnalazione â paggena..",
        "feedback-back": "Arreto",
        "feedback-bugcheck": "Tutt'appost! Avite surtanto 'a cuntrullà ca chisto nun è unu d' 'e [$1 bug canusciute].",
index 6cac1b2..c2ab5da 100644 (file)
        "savearticle": "Lagre siden",
        "savechanges": "Lagre endringer",
        "publishpage": "Publiser siden",
-       "publishchanges": "Publiser endringer",
+       "publishchanges": "Publiser endringene",
        "preview": "Forhåndsvisning",
        "showpreview": "Forhåndsvisning",
        "showdiff": "Vis endringer",
        "readonlywarning": "<strong>ADVARSEL: Databasen er låst på grunn av vedlikehold,\nså du kan ikke lagre dine endringer akkurat nå.</strong>\nDet kan være en god idé å kopiere teksten din til en tekstfil og lagre den til senere.\n\nSystemadministratoren som låste databasen ga følgende begrunnelse: $1",
        "protectedpagewarning": "'''Advarsel: Denne siden har blitt låst slik at kun brukere med administratorrettigheter kan redigere den.'''\nDet siste loggelementet er oppgitt under som referanse:",
        "semiprotectedpagewarning": "'''Merk:''' Denne siden har blitt låst slik at kun registrerte brukere kan endre den.\nDet siste loggelementet er oppgitt under som referanse:",
-       "cascadeprotectedwarning": "<strong>Advarsel:</strong> Denne siden har blitt låst slik at kun brukere med administratorrettigheter kan redigere den, fordi den inkluderes på følgende dypbeskyttede {{PLURAL:$1|side|sider}}:",
+       "cascadeprotectedwarning": "<strong>Advarsel:</strong> Denne siden har blitt låst slik at kun brukere med [[Special:ListGroupRights|spesifikke rettigheter]] som kan redigere den, fordi den transkluderes på følgende dypbeskyttede {{PLURAL:$1|side|sider}}:",
        "titleprotectedwarning": "'''Advarsel: Denne siden har blitt låst slik at [[Special:ListGroupRights|bestemte rettigheter]] kreves for å opprette den.'''\nTil orientering vises den siste loggoppføringen under:",
        "templatesused": "{{PLURAL:$1|Mal|Maler}} som brukes på denne siden:",
        "templatesusedpreview": "{{PLURAL:$1|Mal|Maler}} brukt i denne forhåndsvisningen:",
        "saveusergroups": "Lagre {{GENDER:$1|brukergrupper}}",
        "userrights-groupsmember": "Medlem av:",
        "userrights-groupsmember-auto": "Implisitt medlem av:",
-       "userrights-groups-help": "Du kan endre hvilke grupper denne brukeren er medlem av.\n* En avkrysset boks betyr at brukeren er medlem av gruppen.\n* En uavkrysset boks betyr at brukeren ikke er medlem av gruppen.\n* En * betyr at du ikke kan fjerne gruppemedlemskapet når du har lagt det til, eller vice versa.\n* En # betyr at du kun kan forkorte utløpstiden til denne gruppen, du kan ikke forlenge den.",
+       "userrights-groups-help": "Du kan endre hvilke grupper denne brukeren er medlem av.\n* En avkrysset boks betyr at brukeren er medlem av gruppen.\n* En uavkrysset boks betyr at brukeren ikke er medlem av gruppen.\n* En * betyr at du ikke kan fjerne gruppemedlemskapet når du har lagt det til, eller vice versa.\n* En # betyr at du kun kan forkorte utløpstiden til dette gruppemedlemskapet, du kan ikke forlenge den.",
        "userrights-reason": "Årsak:",
        "userrights-no-interwiki": "Du har ikke tillatelse til å endre brukerrettigheter på andre wikier.",
        "userrights-nodatabase": "Databasen $1 finnes ikke, eller er ikke lokal.",
        "userrights-expiry-options": "1 dag:1 day,1 uke:1 week,1 måned:1 month,3 måneder:3 months,6 måneder:6 months,1 år:1 year",
        "userrights-invalid-expiry": "Utløpstiden for gruppa «$1» er ugyldig.",
        "userrights-expiry-in-past": "Utløpstiden for gruppa «$1» har vært.",
-       "userrights-cannot-shorten-expiry": "Du kan ikke forlenge utløpstiden til gruppa «$1». Bare brukere med tillatelse til å legge til eller fjerne denne gruppa kan forlenge utløpstider.",
+       "userrights-cannot-shorten-expiry": "Du kan ikke forlenge utløpstiden til gruppemedlemskapet i «$1». Bare brukere med tillatelse til å legge til eller fjerne denne gruppa kan forlenge utløpstider.",
        "userrights-conflict": "En konflikt med endringen av brukerrettigheter! Vær vennlig å sjekke og på nytt bekrefte endringene dine.",
        "group": "Gruppe:",
        "group-user": "Brukere",
        "right-editsemiprotected": "Redigere beskyttede sider som er «{{int:protect-level-autoconfirmed}}»",
        "right-editcontentmodel": "Redigere innholdsmodellen til en side",
        "right-editinterface": "Redigere brukergrensesnittet",
-       "right-editusercssjs": "Redigere andre brukeres CSS- og JS-filer",
        "right-editusercss": "Redigere andre brukeres CSS-filer",
        "right-edituserjs": "Redigere andre brukeres JS-filer",
        "right-editmyusercss": "Redigere sine egne CSS-filer",
        "rcfilters-hideminor-conflicts-typeofchange": "Visse endringstyper kan ikke merkes som «mindre», så dette filteret konflikterer med følgende endringstypefiltre: $1",
        "rcfilters-typeofchange-conflicts-hideminor": "Dette endringstypefilteret konflikterer med filteret for «Mindre endringer». Visse endringstyper kan ikke merkes som «mindre».",
        "rcnotefrom": "Nedenfor er vist {{PLURAL:$5|endringen|endringene}} som er gjort siden <strong>$3, $4</strong> (frem til <strong>$1</strong>).",
+       "rclistfromreset": "Nullstill datovalg",
        "rclistfrom": "Vis nye endringer fra og med $3 $2",
        "rcshowhideminor": "$1 mindre endringer",
        "rcshowhideminor-show": "Vis",
        "rcshowhidecategorization": "$1 kategorisering av sider",
        "rcshowhidecategorization-show": "Vis",
        "rcshowhidecategorization-hide": "Skjul",
-       "rclinks": "Vis siste $1 endringer i de siste $2 dagene<br />$3",
+       "rclinks": "Vis siste $1 endringer i de siste $2 dagene",
        "diff": "diff",
        "hist": "hist",
        "hide": "Skjul",
        "php-uploaddisabledtext": "PHP-filopplasting er deaktivert. Sjekk innstillingen for file_uploads.",
        "uploadscripted": "Denne filen inneholder HTML eller skripting som kan feiltolkes av en nettleser.",
        "upload-scripted-pi-callback": "Det er ikke tillatt å laste opp en fil som inneholder et kjørbart XML-stilark.",
+       "upload-scripted-dtd": "Kan ikke laste opp SVG-filer som har en ikke-standard DTD-erklæring.",
        "uploaded-script-svg": "Fant et skriptelement \"$1\" i den opplastede SVG-koden.",
        "uploaded-hostile-svg": "Fant usikker CSS i stilelementet til opplastet SVG-fil",
        "uploaded-event-handler-on-svg": "Å sette event-handler-attributtene <code>$1=\"$2\"</code> tillates ikke i SVG-filer.",
        "undeleteviewlink": "vis",
        "undeleteinvert": "Inverter valg",
        "undeletecomment": "Årsak:",
-       "undeletedrevisions": "{{PLURAL:$1|Én revisjon|$1 revisjoner}} gjenopprettet",
-       "undeletedrevisions-files": "{{PLURAL:$1|Én revisjon|$1 revisjoner}} og {{PLURAL:$2|én fil|$2 filer}} gjenopprettet",
-       "undeletedfiles": "{{PLURAL:$1|Én fil|$1 filer}} gjenopprettet",
        "cannotundelete": "Deler av eller hele gjennopprettingen feilet:\n$1",
        "undeletedpage": "'''$1 ble gjenopprettet'''\n\nSjekk [[Special:Log/delete|slettingsloggen]] for en liste over nylige slettinger og gjenopprettelser.",
        "undelete-header": "Se [[Special:Log/delete|slettingsloggen]] for nylig slettede sider.",
        "unblocked-id": "Blokkering $1 ble fjernet",
        "unblocked-ip": "[[Special:Contributions/$1|$1]] har blitt avblokkert.",
        "blocklist": "Blokkerte brukere",
+       "autoblocklist": "Automatiske blokkeringer",
+       "autoblocklist-submit": "Søk",
+       "autoblocklist-legend": "Liste over automatiske blokkeringer",
+       "autoblocklist-localblocks": "{{PLURAL:$1|Lokal automatisk blokkering|Lokale automatiske blokkeringer}}",
+       "autoblocklist-empty": "Listen over automatiske blokkeringer er tom.",
+       "autoblocklist-otherblocks": "{{PLURAL:$1|Annen automatisk blokkering|Andre automatiske blokkeringer}}",
        "ipblocklist": "Blokkerte IP-adresser og brukernavn",
        "ipblocklist-legend": "Finn en blokkert bruker",
        "blocklist-userblocks": "Skjul kontoblokkeringer",
        "htmlform-user-not-valid": "<strong>$1</strong> er ikke et gyldig brukernavn.",
        "logentry-delete-delete": "$1 {{GENDER:$2|slettet}} siden $3",
        "logentry-delete-delete_redir": "$1 {{GENDER:$2|slettet}} omdirigeringen $3 ved å overskrive",
-       "logentry-delete-restore": "$1 {{GENDER:$2|gjenopprettet}} siden $3",
+       "logentry-delete-restore": "$1 {{GENDER:$2|gjenopprettet}} siden $3 ($4)",
+       "logentry-delete-restore-nocount": "$1 {{GENDER:$2|gjenopprettet}} siden $3",
+       "restore-count-revisions": "{{PLURAL:$1|Én revisjon|$1 revisjoner}}",
+       "restore-count-files": "{{PLURAL:$1|Én fil|$1 filer}}",
        "logentry-delete-event": "$1 {{GENDER:$2|endret}} synligheten av {{PLURAL:$5|en logghendelse|$5 logghendelser}} på $3: $4",
        "logentry-delete-revision": "$1 {{GENDER:$2|endret}} synligheten av {{PLURAL:$5|en revisjon|$5 revisjoner}} på side $3: $4",
        "logentry-delete-event-legacy": "$1 {{GENDER:$2|endret}} synligheten av logghendelser på $3",
        "special-characters-group-thai": "Thai",
        "special-characters-group-lao": "Laotisk",
        "special-characters-group-khmer": "Khmer",
+       "special-characters-group-canadianaboriginal": "Kanadisk stavelsesskrift",
        "special-characters-title-endash": "tankestrek",
        "special-characters-title-emdash": "lang tankestrek",
        "special-characters-title-minus": "minustegn",
        "restrictionsfield-help": "Én IP-adresse eller CIDR-intervall per linje. For å slå på alt, bruk: <pre>0.0.0.0/0\n::/0</pre>",
        "revid": "revisjon $1",
        "pageid": "side-ID $1",
-       "rawhtml-notallowed": "&lt;html&gt;-tagger kan ikke brukes utenfor normale sider."
+       "rawhtml-notallowed": "&lt;html&gt;-tagger kan ikke brukes utenfor normale sider.",
+       "gotointerwiki": "Forlater {{SITENAME}}",
+       "gotointerwiki-invalid": "Den gitte tittelen var ugyldig.",
+       "gotointerwiki-external": "Du er i ferd med å forlate {{SITENAME}} for å besøke [[$2]], som er et annet nettsted.\n\n[$1 Klikk her for å fortsette til $1].",
+       "undelete-cantedit": "Du kan ikke gjenopprette denne siden fordi du ikke har tillatelse til å redigere den.",
+       "undelete-cantcreate": "Du kan ikke gjenopprette denne siden fordi det ikke er noen eksisterende side med dette navnet, og du ikke har tillatelse til å opprette siden."
 }
index 14f05dc..ca85ff7 100644 (file)
        "externaldberror": "Der gung iets fout bie de externe authentisering, of je maggen je gebrukersprofiel niet bewarken.",
        "login": "Anmelden",
        "nav-login-createaccount": "Anmelden",
-       "userlogin": "Anmelden / inschrieven",
-       "userloginnocreate": "Anmelden",
        "logout": "Aofmelden",
        "userlogout": "Aofmelden",
        "notloggedin": "Niet an-emeld",
        "userlogin-noaccount": "He'j nog gien gebrukersnaam?",
        "userlogin-joinproject": "Wörd lid van {{SITENAME}}",
-       "nologin": "He'j nog gien gebrukersnaam? $1.",
-       "nologinlink": "Maak n gebrukersprofiel an",
        "createaccount": "Inschrieven",
-       "gotaccount": "Stao'j al in-eschreven? '''$1'''.",
-       "gotaccountlink": "Anmelden",
-       "userlogin-resetlink": "Bi'j de anmeldgegevens kwiet?",
        "userlogin-resetpassword-link": "Joew wachtwoord vergeten?",
        "userlogin-helplink2": "Hulpe bie t anmelden",
        "userlogin-loggedin": "Je bin al an-emeld as {{GENDER:$1|$1}}.\nGebruuk t onderstaonde formulier um an te melden as n aandere gebruker.",
        "createacct-another-email-ph": "Vul joew netpostadres in",
        "createaccountmail": "Gebruuk n tiejelik wachtwoord dat joe netzelde is en stuur t naor t op-egeven netpostadres",
        "createacct-realname": "Echte naam (niet verplicht)",
-       "createaccountreason": "Reden:",
        "createacct-reason": "Reden",
        "createacct-reason-ph": "Waorumme je n aandere gebrukerskonto anmaken",
        "createacct-submit": "Gebrukerskonto anmaken",
        "passwordreset-emaildisabled": "Netpostmeugelikhejen bin uutezet op disse wiki.",
        "passwordreset-username": "Gebruker:",
        "passwordreset-domain": "Domein:",
-       "passwordreset-capture": "De resulterende netpost bekieken?",
-       "passwordreset-capture-help": "A'j dit vakjen anvinken, dan krie'j t netpostbericht te zien (mit t tiejelike wachtwoord) en t wördt naor de gebruker estuurd.",
        "passwordreset-email": "Netpostadres:",
        "passwordreset-emailtitle": "Gebrukersgegevens op {{SITENAME}}",
        "passwordreset-emailtext-ip": "Der hef der ene, waorschienlik jie zelf vanaof t IP-adres $1, n anvraag edaon um joew wachtwoord veur {{SITENAME}} ($4) opniej in te stellen.\nDe volgende {{PLURAL:$3|gebruker is|gebrukers bin}} ekoppeld an dit netpostadres:\n\n$2\n\n{{PLURAL:$3|Dit tiejelike wachtwoord vervölt|Disse tiejelike wachtwoorden vervallen}} over {{PLURAL:$5|één dag|$5 dagen}}.\nMeld je eigen noen an en wiezig t wachtwoord. A'j dit verzeuk niet zelf edaon hebben, of a'j t oorspronkelike wachtwoord nog kennen en t niet wiezigen willen, negeer dit bericht dan en blief joew ouwe wachtwoord gebruken.",
        "saveprefs": "Veurkeuren opslaon",
        "restoreprefs": "Alle standardinstellingen weerummezetten (veur alle seksies)",
        "prefs-editing": "Bewarkingsveld",
-       "rows": "Regels",
-       "columns": "Kolommen",
        "searchresultshead": "Zeukresultaoten",
        "stub-threshold": "Verwiezingsformattering van beginnetjes ($1):",
        "stub-threshold-sample-link": "veurbeeld",
        "userrights-reason": "Reden:",
        "userrights-no-interwiki": "Je hebben gien rechten um gebrukersrechten op aandere wiki's te wiezigen.",
        "userrights-nodatabase": "Databanke $1 besteet niet of is gien plaotselike databanke.",
-       "userrights-nologin": "Je mutten [[Special:UserLogin|an-emeld]] ween en as gebruker de juuste rechten hebben um gebrukersrechten toe te kunnen wiezen.",
-       "userrights-notallowed": "Je hebben gien rechten um gebrukersrechten toe te kunnen wiezen of in te trekken.",
        "userrights-changeable-col": "Groepen die'j beheren kunnen",
        "userrights-unchangeable-col": "Groepen die'j niet beheren kunnen",
        "userrights-conflict": "Konflikt bie t wiezigen van gebrukersrechten! Kiek joew wiezigingen nao en bevestig t.",
-       "userrights-removed-self": "Je hebben joew eigen bevoegdhejen in-etrökken. Je kunnen disse zied niet meer gebruken.",
        "group": "Groep:",
        "group-user": "gebrukers",
        "group-autoconfirmed": "an-emelde gebrukers",
        "right-editprotected": "Ziejen bewarken die beveiligd bin as \"{{int:protect-level-sysop}}\"",
        "right-editsemiprotected": "Ziejen bewarken die beveiligd bin as \"{{int:protect-level-autoconfirmed}}\"",
        "right-editinterface": "Systeemteksten bewarken",
-       "right-editusercssjs": "De CSS- en JS-bestaanden van aandere gebrukers bewarken",
        "right-editusercss": "De CSS-bestaanden van aandere gebrukers bewarken",
        "right-edituserjs": "De JS-bestaanden van aandere gebrukers bewarken",
        "right-editmyusercss": "Joew eigen CSS-ziejen bewarken",
        "right-siteadmin": "De databanke blokkeren en weer vriegeven",
        "right-override-export-depth": "Ziejen exporteren, oek de ziejen waor naor verwezen wördt, tot n diepte van 5",
        "right-sendemail": "Bericht versturen naor aandere gebrukers",
-       "right-passwordreset": "Bekiek netpostberichten veur t opniej instellen van joew wachtwoord",
        "newuserlogpage": "Logboek mit anwas",
        "newuserlogpagetext": "Hieronder staon de niej in-eschreven gebrukers",
        "rightslog": "Gebrukersrechtenlogboek",
        "rcshowhidecategorization": "$1 kategorisering van ziejen",
        "rcshowhidecategorization-show": "Bekiek",
        "rcshowhidecategorization-hide": "Verbarg",
-       "rclinks": "Bekiek de leste $1 wiezigingen van de aofgeleupen $2 dagen<br />$3",
+       "rclinks": "Bekiek de leste $1 wiezigingen van de aofgeleupen $2 dagen",
        "diff": "wiez",
        "hist": "gesch",
        "hide": "verbarg",
        "undeleteviewlink": "bekieken",
        "undeleteinvert": "Seleksie ummekeren",
        "undeletecomment": "Reden:",
-       "undeletedrevisions": "$1 {{PLURAL:$1|versie|versies}} weerummeplaotst",
-       "undeletedrevisions-files": "{{PLURAL:$1|1 versie|$1 versies}} en {{PLURAL:$2|1 bestaand|$2 bestaanden}} bin weerummeplaotst",
-       "undeletedfiles": "{{PLURAL:$1|1 bestaand|$1 bestaanden}} weerummeplaotst",
        "cannotundelete": "t Weerummeplaotsen is mislokt:\n$1",
        "undeletedpage": "'''$1 is weerummeplaotst'''\n\nBekiek t [[Special:Log/delete|vortdologboek]] veur n overzicht van ziejen die kortens vortedaon en weerummeplaotst bin.",
        "undelete-header": "Zie t [[Special:Log/delete|vortdologboek ]] veur spul dat krek vortedaon is.",
        "logentry-upload-upload": "$1 hef $3 {{GENDER:$2|op-estuurd}}",
        "logentry-upload-overwrite": "$1 {{GENDER:$2|hef}} n nieje versie van $3 op-elaojen",
        "rightsnone": "(gien)",
-       "revdelete-summary": "samenvatting bewarken",
        "feedback-adding": "Joew kommentaar wörden op de zied ezet...",
        "feedback-bugcheck": "Mooi! Kiek nao of t niet al één van de [$1 bekende problemen] is.",
        "feedback-bugnew": "Ik heb t nao-ekeken. Meld n nieje programmafout",
        "feedback-thanks": "Bedankt! Joew kommentaar is op de zied \"[$2 $1]\" ezet.",
        "searchsuggest-search": "Zeuken / zuken / zuiken",
        "searchsuggest-containing": "bevat...",
-       "api-error-badaccess-groups": "Je maggen gien bestaanden in disse wiki oplaojen.",
        "api-error-badtoken": "Interne fout: t token klopt niet.",
-       "api-error-copyuploaddisabled": "Bestaanden opsturen via n webadres is uutezet op disse server.",
-       "api-error-duplicate": "Der {{PLURAL:$1|steet al n bestaand|staon al bestaanden}} mit de zelfde inhoud in de wiki.",
-       "api-error-duplicate-archive": "Der {{PLURAL:$1|was al n aander bestaand|waren al $1 aandere bestaanden}}  op de webstee mit de zelfde inhoud, mer {{PLURAL:$1|dat is|die bin}} vortedaon.",
-       "api-error-empty-file": "t Bestaand da'j op-estuurd hebben is leeg.",
        "api-error-emptypage": "Je maggen gien lege nieje ziejen anmaken.",
-       "api-error-fetchfileerror": "Interne fout: der is iets verkeerd egaon mit t ophaolen van t bestaand.",
-       "api-error-fileexists-forbidden": "Der besteet al n bestaand mit de naam \"$1\" die niet overschreven kan wörden.",
-       "api-error-fileexists-shared-forbidden": "Der besteet al n bestaand mit de naam \"$1\" in de edeelden bestaandsarchief dat niet overschreven kan wörden.",
-       "api-error-file-too-large": "t Bestaand da'j op-estuurd hebben is te groot.",
-       "api-error-filename-tooshort": "De bestaandsnaam is te kort.",
-       "api-error-filetype-banned": "Dit bestaandstype is niet toe-estaon.",
-       "api-error-filetype-banned-type": "{{PLURAL:$4|t Bestaandstype $1|De bestaandstypes $1}} wörden niet toe-eleuten. {{PLURAL:$3|t Toe-estaone bestaandstype is|De toe-estaone bestaandstypen bin}} $2.",
-       "api-error-filetype-missing": "t Bestaand hef gien extensie.",
-       "api-error-hookaborted": "De wieziging die'j proberen deur te voeren is aofebreuken deur n extra uutbreiding.",
-       "api-error-http": "Interne fout: der kon gien verbiending emaakt wörden mit de server.",
-       "api-error-illegal-filename": "Disse bestaandsnaam mag niet.",
-       "api-error-internal-error": "Interne fout: der is iets verkeerd egaon tiejens t verwarken van joew op-estuurden bestaand deur de wiki.",
-       "api-error-invalid-file-key": "Interne fout: t bestaand stung niet in de tiedelike opslag.",
-       "api-error-missingparam": "Interne fout: niet alle parameters bin in t verzeuk mee-eleverd.",
-       "api-error-missingresult": "Interne fout: kon niet vaststellen of t kopiëren wel wol lokken.",
-       "api-error-mustbeloggedin": "Je mutten an-emeld ween um bestaanden te kunnen opsturen.",
-       "api-error-mustbeposted": "Der zit n fout in de programmatuur. Der wörden gien gebruukemaakt van de juuste HTTP-methode.",
-       "api-error-noimageinfo": "t Opsturen van t bestaand is aoferond, mer de server hef gien gegevens over t bestaand egeven.",
-       "api-error-nomodule": "Interne fout: der is gien inlaojmodule in-esteld.",
-       "api-error-ok-but-empty": "Interne fout: de server hef gien gegevens weerestuurd.",
-       "api-error-overwrite": "Je maggen gien bestaond bestaand overschrieven.",
-       "api-error-stashfailed": "Interne fout: de server kon t tiedelike bestaand niet opslaon.",
        "api-error-publishfailed": "Interne fout: de server kon t tiejelike bestaand niet publiseren.",
-       "api-error-timeout": "De server hef niet binnen de verwachte tied antwoord egeven.",
-       "api-error-unclassified": "Der is n onbekende fout op-etrejen",
-       "api-error-unknown-code": "Interne fout: \"$1\"",
-       "api-error-unknown-error": "Interne fout: der is iets verkeerd egaon tiejens t opsturen van joew bestaand.",
+       "api-error-stashfailed": "Interne fout: de server kon t tiedelike bestaand niet opslaon.",
        "api-error-unknown-warning": "Onbekende waorschuwing: $1",
        "api-error-unknownerror": "Onbekende fout: \"$1\"",
-       "api-error-uploaddisabled": "Je kunnen gien bestaanden opsturen in deze wiki.",
-       "api-error-verification-error": "Dit bestaand is meugelik beschaodigd of hef n onjuuste extensie.",
        "duration-seconds": "$1 {{PLURAL:$1|sekonde|sekonden}}",
        "duration-minutes": "$1 {{PLURAL:$1|minuut|minuten}}",
        "duration-hours": "$1 {{PLURAL:$1|uur|uren}}",
index b99b7eb..99a2e98 100644 (file)
        "externaldberror": "Dat geev en Fehler bi de externe Authentifizerungsdatenbank oder du dröffst dien extern Brukerkonto nich ännern.",
        "login": "Anmellen",
        "nav-login-createaccount": "Nee Konto anleggen oder anmellen",
-       "userlogin": "Nee Konto anleggen oder anmellen",
-       "userloginnocreate": "Anmellen",
        "logout": "Afmellen",
        "userlogout": "Afmellen",
        "notloggedin": "Nich anmellt",
        "userlogin-joinproject": "Bi {{SITENAME}} anmellen",
-       "nologin": "Wenn du noch keen Brukerkonto hest, denn kannst di anmellen: $1.",
-       "nologinlink": "Brukerkonto inrichten",
        "createaccount": "Nieg Brukerkonto anleggen",
-       "gotaccount": "Hest Du al en Brukerkonto? '''$1'''.",
-       "gotaccountlink": "Anmellen",
-       "userlogin-resetlink": "De Anmelldaten vergaten?",
        "userlogin-resetpassword-link": "Passwoort vergeten?",
        "userlogin-helplink2": "Hülp bi dat anmellen",
        "createaccountmail": "över E-Mail",
-       "createaccountreason": "Grund:",
        "createacct-submit": "Brukerkonto inrichten",
        "badretype": "De beiden Passwöör stimmt nich övereen.",
        "userexists": "Disse Brukernaam is al weg. Bitte söök di en annern ut.",
        "saveprefs": "Spiekern",
        "restoreprefs": "All Standardinstellungen wedderhalen",
        "prefs-editing": "Grött vun’t Textfeld",
-       "rows": "Regen",
-       "columns": "Spalten",
        "searchresultshead": "Söökresultaten",
        "stub-threshold": "Grött ünner de Lenken op <a href=\"#\" class=\"stub\">Stubbens un lütte Sieden</a> farvlich kenntekent warrn schöölt (in Bytes):",
        "stub-threshold-disabled": "Utstellt",
        "userrights-reason": "Grund:",
        "userrights-no-interwiki": "Du hest nich de Rechten, Brukerrechten in annere Wikis to setten.",
        "userrights-nodatabase": "Datenbank $1 gifft dat nich oder is nich lokal.",
-       "userrights-nologin": "Du musst mit en Administrater-Brukerkonto [[Special:UserLogin|anmellt]] wesen, dat du Brukerrechten ännern kannst.",
-       "userrights-notallowed": "Du hest nich de Rechten, Brukerrechten to setten.",
        "userrights-changeable-col": "Gruppen, de du ännern kannst",
        "userrights-unchangeable-col": "Gruppen, de du nich ännern kannst",
        "group": "Grupp:",
        "right-protect": "Schuulstatus vun Sieden ännern",
        "right-editprotected": "Schuulte Sieden ännern (ahn Kaskadensperr)",
        "right-editinterface": "Systemnarichten ännern",
-       "right-editusercssjs": "Anner Lüüd ehr CSS- un JS-Datein ännern",
        "right-editusercss": "Anner Lüüd ehr CSS-Datein ännern",
        "right-edituserjs": "Anner Lüüd ehr JS-Datein ännern",
        "right-rollback": "Sieden gau trüchdreihn",
        "rcshowhidemine-show": "wiesen",
        "rcshowhidemine-hide": "versteken",
        "rcshowhidecategorization": "kategoriserung vun Sieden $1",
-       "rclinks": "Wies de letzten '''$1''' Ännern vun de letzten '''$2''' Daag. ('''N''' - Ne’e Sieden; '''L''' - Lütte Ännern)<br />$3",
+       "rclinks": "Wies de letzten '''$1''' Ännern vun de letzten '''$2''' Daag. ('''N''' - Ne’e Sieden; '''L''' - Lütte Ännern)",
        "diff": "Ünnerscheed",
        "hist": "Versionen",
        "hide": "Nich wiesen",
        "undeleteviewlink": "bekieken",
        "undeleteinvert": "Utwahl ümkehrn",
        "undeletecomment": "Grund:",
-       "undeletedrevisions": "{{PLURAL:$1|ene Version|$1 Versionen}} wedderhaalt",
-       "undeletedrevisions-files": "{{PLURAL:$1|Ene Version|$1 Versionen}} un {{PLURAL:$2|ene Datei|$2 Datein}} wedderhaalt",
-       "undeletedfiles": "{{PLURAL:$1|ene Datei|$1 Datein}} wedderhaalt",
        "cannotundelete": "Wedderhalen güng nich; en annern hett de Siet al wedderhaalt.",
        "undeletedpage": "'''$1''' wedderhaalt.\n\nIn dat [[Special:Log/delete|Lösch-Logbook]] steiht en Översicht över de wegsmetenen un wedderhaalten Sieden.",
        "undelete-header": "Kiek in dat [[Special:Log/delete|Lösch-Logbook]] för Sieden, de nuletzt wegsmeten worrn sünd.",
        "logentry-block-block": "$1 {{GENDER:$2|block}} {{GENDER:$4|$3}} för en Tiedruum vun $5 $6",
        "logentry-suppress-block": "$1 {{GENDER:$2|block}} {{GENDER:$4|$3}} för en Tiedruum vun $5 $6",
        "rightsnone": "(kene)",
-       "revdelete-summary": "Tosamenfaten",
        "searchsuggest-search": "Söken",
        "expandtemplates": "Vörlagen oplösen",
        "expand_templates_intro": "Mit disse Spezialsied köönt Vörlagen in ingeven Text in Wikitext ümwannelt warrn.\nOk Parserfunkschonen so as\n<nowiki>{{</nowiki>#language:…}}, un Variabeln so as\n<nowiki>{{</nowiki>CURRENTDAY}} warrt ümwannelt. Also so temlich allens, wat twischen swiefte Klammern steit.\nDorto warrt de nödigen Parser-Phasen in MediaWiki direkt opropen.",
index bc84842..b25ac56 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": "प्रवेश सम्बन्धी विवरणहरू बिर्सनु भयो?",
        "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-submit": "तपाईंको खाता सिर्जना गर्नुहोस",
        "right-editsemiprotected": "\"{{int:protect-level-autoconfirmed}}\" अनुरूप सुरक्षित गरिएको पृष्ठहरूलाई सम्पादन गर्नुहोस्",
        "right-editcontentmodel": "पृष्ठको सामग्री नमुना सम्पादन",
        "right-editinterface": "प्रयोगकर्ता अन्तरमोहडा सम्पादन गर्ने",
-       "right-editusercssjs": "अरु प्रयोगकर्ताको CSS र JS फाइलहरू सम्पादन गर्ने",
        "right-editusercss": "अरु प्रयोगकर्ताको CSS फाइलहरू सम्पादन गर्ने",
        "right-edituserjs": "अरु प्रयोकर्ताको जाभास्क्रिप्ट फाइलहरू सम्पादन गर्ने",
        "right-editmyusercss": "तपाईंको आफ्नो CSS फाइलहरू सम्पादन गर्नुहोस्",
        "rcshowhidemine-hide": "लुकाउनुहोस्",
        "rcshowhidecategorization-show": "देखाउनुहोस्",
        "rcshowhidecategorization-hide": "लुकाउनुहोस्",
-       "rclinks": "पछिल्ला $1 परिवर्तनहरू पछिल्ला $2 दिनहरूमा<br />$3",
+       "rclinks": "पछिल्ला $1 परिवर्तनहरू पछिल्ला $2 दिनहरूमा",
        "diff": "भिन्न",
        "hist": "इतिहास",
        "hide": "लुकाउनुहोस्",
        "linksearch-text": "\"*.wikipedia.org\" वाइल्डकार्डको रुपमा प्रयोग गर्न सकिने।\nकम्तिमा \".org\" जस्तो कुनै उच्च-स्तरीय डोमेनको आवश्यकता छ।<br />\nसमर्थित प्रोटोकल:$1 (यदि कुनै {{PLURAL:$2|प्रोटोकल|प्रोटोकलहरू}} दिइएको छैन भने http:// को प्रयोग गर्न सकिन्छ)",
        "linksearch-line": "$1 $2सित जोड़िएको छ।",
        "linksearch-error": "मूलनामको सुरुमा मात्र वाइल्डकार्ड देखापर्न सक्छ।",
-       "listusersfrom": "पà¥\8dरयà¥\8bà¤\97हरà¥\81 देखाउन शुरु हुने यहाँ:",
+       "listusersfrom": "पà¥\8dरयà¥\8bà¤\97हरà¥\82 देखाउन शुरु हुने यहाँ:",
        "listusers-submit": "देखाउनुहोस्",
        "listusers-noresult": "प्रयोगकर्ताहरू भेटिएनन्।",
        "listusers-blocked": "(प्रतिबन्धित)",
        "undeleteviewlink": "अवलोकन",
        "undeleteinvert": " चयन उल्ट्याउने",
        "undeletecomment": "कारण :",
-       "undeletedrevisions": "{{PLURAL:$1|एउटा संशोधन|$1 संशोधनहरू}} पुनर्स्थापित गरियो",
-       "undeletedrevisions-files": "{{PLURAL:$1|एउटा संशोधन|$1 संशोधनहरू}} र {{PLURAL:$2|एउटा फाइल|$2 फाइलहरू}} पुनर्स्थापित गरियो",
-       "undeletedfiles": "{{PLURAL:$1|१ फाइल|$1 फाइलहरू }} पूर्वस्थितिमा ल्याइयो",
        "cannotundelete": "मेटाएको रद्द गर्ने काम असफल भयो:\n$1",
        "undeletedpage": "'''$1लाई पूर्वावस्थामा ल्याइयो'''\nभर्खरै मेटाइएको रिकर्डहरु र पुनर्स्थापनाहरु हेर्न [[Special:Log/delete|मेटाइएको लग]]मा जानुहोस्।",
        "undelete-header": "भर्खर मेटिएका पृष्ठहरू हेर्न [[Special:Log/delete|मेटाइएका लग]]मा जानुहोस्।",
        "logentry-tag-update-revision": "$1 {{GENDER:$2|अपडेट गरियो}} ट्याग संशोधन $4 मा पृष्ठ $3 सँग ({{PLURAL:$7|जोडियो}} $6; {{PLURAL:$9|हटाइयो}} $8)",
        "logentry-tag-update-logentry": "$1 {{GENDER:$2|अपडेट गरियो}} ट्याग संशोधन $5 मा पृष्ठ $3 सँग ({{PLURAL:$7|जोडियो}} $6; {{PLURAL:$9|हटाइयो}} $8)",
        "rightsnone": "(कुनैपनि होइन)",
-       "revdelete-summary": "सम्पादन सारांश",
        "feedback-adding": "पृष्ठमा प्रतिक्रिया थप गर्दै...",
        "feedback-back": "अघिल्लो",
        "feedback-bugcheck": "राम्रो! जाँच्नुस की कतै [ $1 ज्ञात बगहरू] पहिले देखि नै नहोस्।",
index 2ba8bb1..d79467e 100644 (file)
        "redirectedfrom": "(Doorverwezen vanaf $1)",
        "redirectpagesub": "Doorverwijspagina",
        "redirectto": "Doorverwijzen naar:",
-       "lastmodifiedat": "Deze pagina is het laatst bewerkt op $1 om $2.",
+       "lastmodifiedat": "Deze pagina is voor het laatst bewerkt op $1 om $2.",
        "viewcount": "Deze pagina is {{PLURAL:$1|één keer|$1 keer}} bekeken.",
        "protectedpage": "Beveiligde pagina",
        "jumpto": "Ga naar:",
        "readonlywarning": "<strong>Waarschuwing: u kunt deze bewerking nu niet opslaan omdat de database is geblokkeerd voor bewerkingen wegens onderhoudswerkzaamheden.</strong>\nHet is misschien verstandig om uw tekst tijdelijk in een tekstbestand op te slaan en te bewaren voor een later moment.\n\nDe systeembeheerder heeft de database geblokkeerd om de volgende reden: $1",
        "protectedpagewarning": "'''Waarschuwing: deze beveiligde pagina kan alleen door gebruikers met beheerdersrechten bewerkt worden.'''\nDe laatste logboekregel staat hieronder:",
        "semiprotectedpagewarning": "'''Let op:''' deze pagina is beveiligd en kan alleen door geregistreerde gebruikers bewerkt worden.\nDe laatste logboekregel staat hieronder:",
-       "cascadeprotectedwarning": "<strong>Waarschuwing:</strong> deze pagina is beveiligd en kan alleen door beheerders bewerkt worden, omdat ze is opgenomen in de volgende {{PLURAL:$1|pagina|pagina's}} die beveiligd {{PLURAL:$1|is|zijn}} met de cascade-optie:",
+       "cascadeprotectedwarning": "<strong>Waarschuwing:</strong> deze pagina is beveiligd en kan alleen door gebruikers met [[Special:ListGroupRights|specifieke rechten]] bewerkt worden, omdat ze is opgenomen in de volgende {{PLURAL:$1|pagina|pagina's}} die beveiligd {{PLURAL:$1|is|zijn}} met de cascade-optie:",
        "titleprotectedwarning": "'''Waarschuwing: Deze pagina is beveiligd. Er zijn [[Special:ListGroupRights|speciale rechten]] nodig om de pagina aan te kunnen maken.'''\nDe laatste logboekregel staat hieronder:",
        "templatesused": "Op deze pagina {{PLURAL:$1|gebruikt sjabloon|gebruikte sjablonen}}:",
        "templatesusedpreview": "{{PLURAL:$1|Sjabloon|Sjablonen}} gebruikt in deze voorvertoning:",
        "saveusergroups": "{{GENDER:$1|Gebruikersgroepen}} opslaan",
        "userrights-groupsmember": "Lid van:",
        "userrights-groupsmember-auto": "Impliciet lid van:",
-       "userrights-groups-help": "U kunt de groepen wijzigen waar deze gebruiker lid van is.\n* Een aangekruist vakje betekent dat de gebruiker lid is van de groep.\n* Een niet aangekruist vakje betekent dat de gebruiker geen lid is van de groep.\n* Een \"*\" betekent dat u een gebruiker niet uit een groep kunt verwijderen nadat u die hebt toegevoegd of vice versa.\n* Een \"#\" betekent dat u de verlooptijd van deze groep alleen kunt verkorten. U kunt deze niet verlengen.",
+       "userrights-groups-help": "U kunt de groepen wijzigen waar deze gebruiker lid van is.\n* Een aangekruist vakje betekent dat de gebruiker lid is van de groep.\n* Een niet aangekruist vakje betekent dat de gebruiker geen lid is van de groep.\n* Een \"*\" betekent dat u een gebruiker niet uit een groep kunt verwijderen nadat u die hebt toegevoegd of vice versa.\n* Een \"#\" betekent dat u dit groepslidmaatschap alleen kunt verlengen. U kunt het niet verkorten.",
        "userrights-reason": "Reden:",
        "userrights-no-interwiki": "U hebt geen rechten om gebruikersrechten op andere wiki's te wijzigen.",
        "userrights-nodatabase": "De database $1 bestaat niet of is geen lokale database.",
        "userrights-expiry-options": "1 dag:1 day,1 week:1 week,1 maand:1 month,3 maanden:3 months,6 maanden:6 months,1 jaar:1 year",
        "userrights-invalid-expiry": "De vervaltijd voor de groep \"$1\" is ongeldig.",
        "userrights-expiry-in-past": "De vervaltijd voor de groep \"$1\" is in het verleden.",
-       "userrights-cannot-shorten-expiry": "Kunt de verlooptijd van de groep \"$1\" niet verkorten. Alleen gebruiker met het recht om deze groep toe te voegen of te verwijderen kunnen de verlooptijd verkorten.",
+       "userrights-cannot-shorten-expiry": "U kunt de verlooptijd van het groepslidmaatschip van groep \"$1\" niet verkorten. Alleen gebruikers met het recht om deze groep toe te voegen of te verwijderen kunnen de verlooptijd verkorten.",
        "userrights-conflict": "Er is een probleem opgetreden tijdens het instellen van de gebruikersrechten! Controleer en bevestig uw wijzigingen.",
        "group": "Groep:",
        "group-user": "gebruikers",
        "right-editsemiprotected": "Pagina's bewerken die beveiligd zijn als \"{{int:protect-level-autoconfirmed}}\"",
        "right-editcontentmodel": "Het paginainhoudmodel bewerken",
        "right-editinterface": "De gebruikersinterface bewerken",
-       "right-editusercssjs": "De CSS- en JavaScriptbestanden van andere gebruikers bewerken",
        "right-editusercss": "De CSS-bestanden van andere gebruikers bewerken",
        "right-edituserjs": "De JavaScriptbestanden van andere gebruikers bewerken",
        "right-editmyusercss": "Uw eigen CSS-pagina's bewerken",
        "rcfilters-filter-logactions-label": "Geregistreerde acties",
        "rcfilters-filter-logactions-description": "Administratieve handelingen, account creaties, pagina verwijderingen, uploads....",
        "rcnotefrom": "Wijzigingen sinds <strong>$3 om $4</strong> (maximaal <strong>$1</strong> {{PLURAL:$1|wijziging|wijzigingen}}).",
+       "rclistfromreset": "Datum selectie opnieuw instellen",
        "rclistfrom": "Wijzigingen bekijken vanaf $3 $2",
-       "rcshowhideminor": "Kleine bewerkingen $1",
+       "rcshowhideminor": "kleine bewerkingen $1",
        "rcshowhideminor-show": "weergeven",
        "rcshowhideminor-hide": "verbergen",
        "rcshowhidebots": "bots $1",
        "rcshowhidecategorization": "paginacategorisatie $1",
        "rcshowhidecategorization-show": "weergeven",
        "rcshowhidecategorization-hide": "Verbergen",
-       "rclinks": "De $1 laatste wijzigingen bekijken in de laatste $2 dagen<br />$3",
+       "rclinks": "De $1 laatste wijzigingen bekijken in de laatste $2 dagen",
        "diff": "wijz",
        "hist": "gesch",
        "hide": "verbergen",
        "php-uploaddisabledtext": "Het uploaden van bestanden is uitgeschakeld in PHP.\nControleer de instelling \"file_uploads\".",
        "uploadscripted": "Dit bestand bevat HTML- of scriptcode die foutief door uw browser kan worden weergegeven.",
        "upload-scripted-pi-callback": "Het uploaden van een bestand met instructies voor de verwerking van XML-stylesheets is niet mogelijk.",
+       "upload-scripted-dtd": "Kan geen SVG bestanden uploaden die een DTD declaratie bevatten dat niet aan de standaard voldoet.",
        "uploaded-script-svg": "Scriptbaar element \"$1\" in het geüploade SVG-bestand gevonden.",
        "uploaded-hostile-svg": "Onveilige CSS in het \"style\"-element van het geüploade SVG-bestand gevonden.",
        "uploaded-event-handler-on-svg": "Het instellen van de event-handlereigenschappen <code>$1=\"$2\"</code> is niet toegestaan in SVG-bestanden.",
        "undeleteviewlink": "bekijken",
        "undeleteinvert": "Selectie omkeren",
        "undeletecomment": "Reden:",
-       "undeletedrevisions": "$1 {{PLURAL:$1|versie|versies}} teruggeplaatst",
-       "undeletedrevisions-files": "{{PLURAL:$1|1 versie|$1 versies}} en {{PLURAL:$2|1 bestand|$2 bestanden}} teruggeplaatst",
-       "undeletedfiles": "{{PLURAL:$1|1 bestand|$1 bestanden}} teruggeplaatst",
        "cannotundelete": "Het terugplaatsen is (gedeeltelijk) mislukt:\n$1",
        "undeletedpage": "'''$1 is teruggeplaatst'''\n\nIn het [[Special:Log/delete|verwijderingslogboek]] staan recente verwijderingen en herstelhandelingen.",
        "undelete-header": "Zie het [[Special:Log/delete|verwijderingslogboek]] voor recent verwijderde pagina's.",
        "sp-contributions-uploads": "uploads",
        "sp-contributions-logs": "logboeken",
        "sp-contributions-talk": "overleg",
-       "sp-contributions-userrights": "gebruikersrechtenbeheer",
+       "sp-contributions-userrights": "{{GENDER:$1|gebruikersrechtenbeheer}}",
        "sp-contributions-blocked-notice": "Deze gebruiker is op het moment geblokkeerd.\nDe laatste regel uit het blokkeerlogboek wordt hieronder ter referentie weergegeven:",
        "sp-contributions-blocked-notice-anon": "Dit IP-adres is geblokkeerd.\nDe laatste regel uit het blokkeerlogboek wordt hieronder ter referentie weergegeven:",
        "sp-contributions-search": "Zoeken naar bijdragen",
        "unblocked-id": "Blokkade $1 is opgeheven",
        "unblocked-ip": "[[Special:Contributions/$1|$1]] is gedeblokkeerd.",
        "blocklist": "Geblokkeerde gebruikers",
+       "autoblocklist": "Automatische blokkades",
+       "autoblocklist-submit": "Zoeken",
+       "autoblocklist-legend": "Automatische blokkades tonen",
+       "autoblocklist-localblocks": "Lokale {{PLURAL:$1|automatische blokkades}}",
+       "autoblocklist-empty": "De lijst met automatische blokkades is leeg.",
+       "autoblocklist-otherblocks": "Andere {{PLURAL:$1|automatische blokkades}}",
        "ipblocklist": "Geblokkeerde gebruikers",
        "ipblocklist-legend": "Een geblokkeerde gebruiker zoeken",
        "blocklist-userblocks": "Geblokkeerde accounts verbergen",
        "anonymous": "Anonieme {{PLURAL:$1|gebruiker|gebruikers}} van {{SITENAME}}",
        "siteuser": "{{SITENAME}}-gebruiker $1",
        "anonuser": "anonieme {{SITENAME}}-gebruiker $1",
-       "lastmodifiedatby": "Deze pagina is het laatst bewerkt op $1 om $2 door $3.",
+       "lastmodifiedatby": "Deze pagina is voor het laatst bewerkt op $1 om $2 door $3.",
        "othercontribs": "Gebaseerd op werk van $1.",
        "others": "anderen",
        "siteusers": "{{SITENAME}}-{{PLURAL:$2|gebruiker|gebruikers}} $1",
        "confirmrecreate": "Nadat u begonnen bent met uw wijziging heeft [[User:$1|$1]] ([[User talk:$1|overleg]]) deze pagina {{GENDER:$1|verwijderd}} met opgave van de volgende reden:\n: <em>$2</em>\nBevestig dat u de pagina opnieuw wilt aanmaken.",
        "confirmrecreate-noreason": "Nadat u begonnen bent met uw wijziging heeft [[User:$1|$1]] ([[User talk:$1|overleg]]) deze pagina {{GENDER:$1|verwijderd}}. Bevestig dat u de pagina opnieuw wilt aanmaken.",
        "recreate": "Opnieuw aanmaken",
+       "confirm-purge-title": "Ververs deze pagina",
        "confirm_purge_button": "OK",
        "confirm-purge-top": "De cache van deze pagina legen?",
        "confirm-purge-bottom": "Het opschonen van de cache zorgt ervoor dat de meest recente versie van een pagina wordt weergegeven.",
        "htmlform-user-not-valid": "<strong>$1</strong> is geen geldige gebruikersnaam.",
        "logentry-delete-delete": "$1 {{GENDER:$2|heeft}} de pagina $3 verwijderd",
        "logentry-delete-delete_redir": "$1 heeft de doorverwijzing $3 {{GENDER:$2|verwijderd}} door deze te overschrijven",
-       "logentry-delete-restore": "$1 {{GENDER:$2|heeft}} de pagina $3 teruggeplaatst",
+       "logentry-delete-restore": "$1 {{GENDER:$2|heeft}} de pagina $3 ($4) teruggeplaatst",
+       "logentry-delete-restore-nocount": "$1 {{GENDER:$2|heeft}} de pagina $3 teruggeplaatst",
+       "restore-count-revisions": "{{PLURAL:$1|1 versie|$1 versies}}",
+       "restore-count-files": "{{PLURAL:$1|1 bestand|$1 bestanden}}",
        "logentry-delete-event": "$1 {{GENDER:$2|heeft}} de zichtbaarheid van {{PLURAL:$5|een logboekregel|$5 logboekregels}} van $3 gewijzigd: $4",
        "logentry-delete-revision": "$1 {{GENDER:$2|heeft}} de zichtbaarheid van {{PLURAL:$5|een versie|$5 versies}} van de pagina $3 gewijzigd: $4",
        "logentry-delete-event-legacy": "$1 {{GENDER:$2|heeft}} de zichtbaarheid van logboekregels van $3 gewijzigd",
        "special-characters-group-thai": "Thai",
        "special-characters-group-lao": "Laotiaans",
        "special-characters-group-khmer": "Khmer",
+       "special-characters-group-canadianaboriginal": "Canadees Aboriginal",
        "special-characters-title-endash": "liggend streepje",
        "special-characters-title-emdash": "gedachtenstreepje",
        "special-characters-title-minus": "minteken",
        "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",
-       "rawhtml-notallowed": "&lt;html&gt; tags kunnen alleen op normale pagina's geplaatst worden."
+       "rawhtml-notallowed": "&lt;html&gt; tags kunnen alleen op normale pagina's geplaatst worden.",
+       "gotointerwiki": "{{SITENAME}} verlaten",
+       "gotointerwiki-invalid": "De opgegeven titel is ongeldig.",
+       "gotointerwiki-external": "U staat op het punt om {{SITENAME}} te verlaten en [[$2]] te bezoeken. [[$2]] is een aparte website.\n\n[$1 Klik hier om door te gaan naar $1].",
+       "undelete-cantedit": "U kunt deze pagina niet terug plaatsen omdat u niet het recht hebt om deze pagina te bewerken.",
+       "undelete-cantcreate": "U kunt deze pagina niet terugplaatsen omdat er geen bestaande pagina met deze naam is en u geen toestemming hebt om deze pagina aan te maken."
 }
index 38debcb..a7fbf5c 100644 (file)
        "right-protect": "Endra vernenivå og verna sider",
        "right-editprotected": "Endre verna sider",
        "right-editinterface": "Redigere brukargrensesnittet",
-       "right-editusercssjs": "Endre andre brukarar sine CSS- og JS-filer",
        "right-editusercss": "Endre andre brukarar sine CSS-filer",
        "right-edituserjs": "Endre andre brukarar sine JS-filer",
        "right-editmyusercss": "Endra eigne CSS-filer",
        "rcshowhidemine-hide": "Gøym",
        "rcshowhidecategorization": "$1 kategorisering av sider",
        "rcshowhidecategorization-show": "Vis",
-       "rclinks": "Vis dei siste $1 endringane dei siste $2 dagane<br />$3",
+       "rclinks": "Vis dei siste $1 endringane dei siste $2 dagane",
        "diff": "skil",
        "hist": "hist",
        "hide": "Gøym",
        "undeleteviewlink": "syn",
        "undeleteinvert": "Inverter val",
        "undeletecomment": "Årsak:",
-       "undeletedrevisions": "{{PLURAL:$1|Éin versjon|$1 versjonar}} attoppretta.",
-       "undeletedrevisions-files": "{{PLURAL:$1|Éin versjon|$1 versjonar}} og {{PLURAL:$2|éi fil|$2 filer}} er attoppretta",
-       "undeletedfiles": "{{PLURAL:$1|Éi fil|$1 filer}} er attoppretta",
        "cannotundelete": "Attopprettinga gjekk ikkje:\n$1",
        "undeletedpage": "'''$1 er attoppretta'''\n\nSjå [[Special:Log/delete|sletteloggen]] for eit oversyn over sider som nyleg er sletta eller attoppretta.",
        "undelete-header": "Sjå [[Special:Log/delete|sletteloggen]] for dei sist sletta sidene.",
index 7b3241a..41516fd 100644 (file)
        "rcshowhideminor": "$1 minori modifikos",
        "rcshowhideanons": "$1 anonimi useres",
        "rcshowhidemine": "$1 men modifikos",
-       "rclinks": "Montra lasti $1 chanjes in lasti $2 dies<br />$3",
+       "rclinks": "Montra lasti $1 chanjes in lasti $2 dies",
        "hist": "hist",
        "hide": "Kasha",
        "show": "Montra",
index b3facd6..4b927c6 100644 (file)
        "yourpasswordagain": "Tlanya ditlhaka-tša-siphiri gape:",
        "login": "Tsena",
        "nav-login-createaccount": "Tsena / Tlhola tšhupaleloko (''account'')",
-       "userlogin": "Tsena / tlhola tšhupaleloko (''account'')",
-       "userloginnocreate": "Tsena",
        "logout": "Etšwa/Tswalela",
        "userlogout": "Etšwa/Tswalela",
        "notloggedin": "Ga wa tsena",
-       "nologin": "A  o nale sedi ya go tsena? '''$1'''.",
-       "nologinlink": "Bula tšhupaleloko (''account'')",
        "createaccount": "Bula tšhupaleloko",
-       "gotaccount": "O šetše o nale tšhupaleloko? '''$1'''.",
-       "gotaccountlink": "Tsena",
-       "userlogin-resetlink": "O lebetše dintlha tšago tsena?",
        "createaccountmail": "Re šomiše ditlhaka-tša-siphiri tša sebakanyana tšeo re di kgethilego re di romele ka e-mail",
-       "createaccountreason": "Lebaka:",
        "badretype": "Ditlhaka-tša-siphiri tše o di šomišitšego ga di swane.",
        "noname": "Gawa fana ka leina la mošomiši la go loka.",
        "loginsuccesstitle": "O tsene",
        "rcshowhidepatr": "$1 diphetogo tše ''patrolled''",
        "rcshowhidemine": "$1 diphetogo tsa ka",
        "rcshowhidemine-hide": "Fihla",
-       "rclinks": "Bontšha diphetogo tša bofelo tše $1 matšatšing a  $2  a bofelo <br />$3",
+       "rclinks": "Bontšha diphetogo tša bofelo tše $1 matšatšing a  $2  a bofelo",
        "diff": "phapang",
        "hist": "histori",
        "hide": "Fihla",
index 5c04f76..75b3e8d 100644 (file)
        "right-editsemiprotected": "Modificar las paginas protegidas amb « {{int:protect-level-autoconfirmed}} »",
        "right-editcontentmodel": "Modificar lo modèl de contengut d’una pagina",
        "right-editinterface": "Modificar l'interfàcia d'utilizaire",
-       "right-editusercssjs": "Modificar los fichièrs CSS e JS d'autres utilizaires",
        "right-editusercss": "Modificar los fichièrs CSS d'autres utilizaires",
        "right-edituserjs": "Modificar los fichièrs JS d'autres utilizaires",
        "right-editmyusercss": "Modificar vòstres pròpris fichièrs CSS utilizaire",
        "rcshowhidecategorization": "$1 la categorizacion de las paginas",
        "rcshowhidecategorization-show": "Afichar",
        "rcshowhidecategorization-hide": "Amagar",
-       "rclinks": "Afichar los $1 darrièrs cambiaments efectuats al cors dels $2 darrièrs jorns<br />$3.",
+       "rclinks": "Afichar los $1 darrièrs cambiaments efectuats al cors dels $2 darrièrs jorns",
        "diff": "dif",
        "hist": "ist",
        "hide": "amagar",
        "undeleteviewlink": "veire",
        "undeleteinvert": "Inversar la seleccion",
        "undeletecomment": "Motiu :",
-       "undeletedrevisions": "{{PLURAL:$1|1 revision restablida|$1 revisions restablidas}}",
-       "undeletedrevisions-files": "{{PLURAL:$1|1 revision|$1 revisions}} e {{PLURAL:$2|1 fichièr restablit|$2 fichièrs restablits}}",
-       "undeletedfiles": "$1 {{PLURAL:$1|fichièr restablit|fichièrs restablits}}",
        "cannotundelete": "Certanas o totas las restitucions an fracassat :\n$1",
        "undeletedpage": "<strong>La pagina $1 es estada restablida</strong>.\n\nConsultatz l’[[Special:Log/delete|istoric de las supressions]] per veire la lista de las supressions e dels restabliments recents.",
        "undelete-header": "Consultatz l’[[Special:Log/delete|istoric de las supressions]] per veire las paginas recentament suprimidas.",
index e195566..109a4c8 100644 (file)
        "rcshowhidemine": "$1 minun kohendukset",
        "rcshowhidemine-show": "Ozuta",
        "rcshowhidemine-hide": "Peitä",
-       "rclinks": "Ozuta jälgimäzet $1 muutostu jälgimäzen $2 päivän aijannu<br />$3",
+       "rclinks": "Ozuta jälgimäzet $1 muutostu jälgimäzen $2 päivän aijannu",
        "diff": "erot",
        "hist": "Histourii",
        "hide": "Peitä",
index 4e9ef18..f69f4ec 100644 (file)
        "right-editprotected": "କିଳାଯାଇଥିବା ପୃଷ୍ଠାମାନଙ୍କର ସମ୍ପାଦନା କରିବେ (କ୍ୟାସକେଡ଼କରା କିଳଣା ବିନା)",
        "right-editsemiprotected": "\"{{int:protect-level-autoconfirmed}}\" ଭାବେ ଲୁଚାଯାଇଥିବା ପୃଷ୍ଠାସବୁ ସମ୍ପାଦନା କରନ୍ତୁ",
        "right-editinterface": "ସଭ୍ୟଙ୍କ ଇଣ୍ଟରଫେସ ବଦଳାଇବେ",
-       "right-editusercssjs": "ବାକି ସଭ୍ୟମାନଙ୍କର CSS ଓ ଜାଭାସ୍କ୍ରିପ୍ଟ ଫାଇଲ ସବୁକୁ ବଦଳାଇବେ",
        "right-editusercss": "ବାକି ସଭ୍ୟମାନଙ୍କ CSS ଫାଇଲସବୁ ବଦଳାଇବେ",
        "right-edituserjs": "ବାକି ସଭ୍ୟମାନଙ୍କର ଜାଭାସ୍କ୍ରିପ୍ଟ ଫାଇଲ ସବୁକୁ ବଦଳାଇବେ",
        "right-editmyusercss": "ନିଜ ସଭ୍ୟ CSS ଫାଇଲସବୁ ସମ୍ପାଦନା କରନ୍ତୁ",
        "rcshowhidemine-show": "ଦେଖାଇବେ",
        "rcshowhidemine-hide": "ଲୁଚାଇବେ",
        "rcshowhidecategorization": "$1 ପୃଷ୍ଠା ଶ୍ରେଣୀବିଭାଗ",
-       "rclinks": "ଗଲା $2 ଦିନର $1 ବଦଳଗୁଡ଼ିକୁ ଦେଖାଇବେ<br />$3",
+       "rclinks": "ଗଲା $2 ଦିନର $1 ବଦଳଗୁଡ଼ିକୁ ଦେଖାଇବେ",
        "diff": "ଅଦଳ ବଦଳ",
        "hist": "ଇତିହାସ",
        "hide": "ଲୁଚାନ୍ତୁ",
        "undeleteviewlink": "ଦେଖଣା",
        "undeleteinvert": "ବଛାଯାଇଥିବା ଲେଖାକୁ ଓଲଟେଇଦେବେ",
        "undeletecomment": "କାରଣ:",
-       "undeletedrevisions": "{{PLURAL:$1|ଗୋଟିଏ ସଂକଳନ|$1 ଗୋଟି ସଂକଳନ}} ପୁନସ୍ଥାପନ କରାଗଲା",
-       "undeletedrevisions-files": "{{PLURAL:$1|ଗୋଟିଏ ସଂସ୍କରଣ|$1 ଗୋଟି ସଂସ୍କରଣ}} ଓ {{PLURAL:$2|ଗୋଟିଏ ଫାଇଲ|$2 ଗୋଟି ଫାଇଲ}} ପୁନସ୍ଥାପନ କରାଗଲା",
-       "undeletedfiles": "{{PLURAL:$1|ଗୋଟିଏ ଫାଇଲ|$1 ଗୋଟି ଫାଇଲ}} ପୁନସ୍ଥାପନ କରାଗଲା",
        "cannotundelete": "ଲିଭାଇବାରୁ ରୋକିବା ବିଫଳ ହେଲା;\n$1",
        "undeletedpage": "'''$1ର ପୁନସ୍ଥାପନ କରାଗଲା'''\n\nନଗଦ ଲିଭାଇବା ଓ ପୁନସ୍ଥାପନ ପାଇଁ [[Special:Log/delete|ଲିଭାଇବା ଇତିହାସ]] ଦେଖନ୍ତୁ ।",
        "undelete-header": "ନଗଦ ଲିଭାଯାଇଥିବା ପୃଷ୍ଠାସବୁ ପାଇଁ [[Special:Log/delete|ଲିଭାଇବା ଇତିହାସ]] ଦେଖନ୍ତୁ ।",
index bdc8b77..ca0ac79 100644 (file)
@@ -7,7 +7,8 @@
                        "HalanTul",
                        "לערי ריינהארט",
                        "아라",
-                       "Macofe"
+                       "Macofe",
+                       "Stephanecbisson"
                ]
        },
        "tog-underline": "Æрвитæнты бын хахх:",
        "externaldberror": "Кæнæ аутентификацийы рарддоны рæдыд æрцыдис, кæнæ та дæуæн нæй бар снæуæг кæнын дæ æддаг аккаунт.",
        "login": "Бахизын",
        "nav-login-createaccount": "Бахизын / срегистраци кæнын",
-       "userlogin": "Бахизын / регистраци кæнын",
-       "userloginnocreate": "Бахизын",
        "logout": "Рахизын",
        "userlogout": "Рахизын",
        "notloggedin": "Системæмæ хызт нæ дæ",
        "userlogin-noaccount": "Нæй дын аккаунт?",
        "userlogin-joinproject": "Баиу у {{grammar:comitative|{{SITENAME}}}}",
-       "nologin": "Регистрацигонд нæма дæ? $1.",
-       "nologinlink": "Регистраци",
        "createaccount": "Регистраци кæнын",
-       "gotaccount": "Регистрацигонд дæ? $1.",
-       "gotaccountlink": "Бахизын",
-       "userlogin-resetlink": "Ферох дæ сты дæ бахизæнтæ?",
        "userlogin-resetpassword-link": "Ферох и дæ пароль?",
        "userlogin-helplink2": "Бахизынæн æххуыс",
        "userlogin-loggedin": "Ды бахызтæ куыд $1.\nДæлæ цы формæ уыныс, уый æххуысæй дæ бон у æндæр фæсномыгæй бахизын.",
        "createacct-another-email-ph": "Бафысс дæ эл. посты адрис",
        "createaccountmail": "Рæстæгмæ пароль халæй ист æрцæуæд æмæ амынд электрон посты адрисмæ æрвыст æрцæуæд",
        "createacct-realname": "Æцæг ном (фæндон)",
-       "createaccountreason": "Бындур:",
        "createacct-reason": "Бындур",
        "createacct-reason-ph": "Цæмæн аразыс æндæр аккаунт?",
        "createacct-submit": "Сараз дæ аккаунт",
        "passwordreset-emaildisabled": "Электрон пост ацы викийы хицæн у.",
        "passwordreset-username": "Фæсномыг:",
        "passwordreset-domain": "Домен:",
-       "passwordreset-capture": "Цы фыстæг рауадис, уый фенис?",
-       "passwordreset-capture-help": "Кæд сæвæрай ацы нысан, уæд дын e-mail (рæстæгмæ паролимæ) æвдыст æрцæудзæн. Архайæгмæ дæр æрвыст æрцæудзæн.",
        "passwordreset-email": "Электрон посты адрис:",
        "passwordreset-emailtitle": "{{grammar:genitive|{{SITENAME}}}} акканты тыххæй",
        "passwordreset-emailtext-ip": "Чидæр (уæццæгæн ды, $1 IP адрисæй) æрдомдта дæ {{grammar:genitive|{{SITENAME}}}} ($4) пароль ногæй сæвæрын. Ацы архайæджы {{PLURAL:$3|аккаунт баст у|аккаунттæ баст сты}} ацы электрон посты адрисимæ:\n\n$2\n\n{{PLURAL:$3|Ацы рæстæгмæ пароль|Ацы рæстæгмæ паролтæ}} кусдзысты {{PLURAL:$5|иу бон|$5 боны}}.\nНыр ды хъуамæ бахизай системæмæ æмæ равзарай ног пароль. Кæд ай æндæр чидæр æрдомдта, кæнæ кæд дæ пароль æрхъуыды кодтай æмæ дæ нал фæды фæивай йæ, уæд дæ бон у мацæмæ дарай ацы фыстæг æмæ дарддæр архайай дæ зæронд паролæй.",
        "prefs-rendering": "Фæлгонц",
        "saveprefs": "Бавæрын",
        "prefs-editing": "Ивын",
-       "rows": "Рæнхъытæ:",
-       "columns": "Рæгътæ:",
        "searchresultshead": "Агуырд",
        "stub-threshold-disabled": "Хицæн",
        "timezonelegend": "Сахаты таг:",
        "rcshowhidemine": "$1 мæ ивдтытæ",
        "rcshowhidemine-show": "Равдис",
        "rcshowhidemine-hide": "Бамбæхс",
-       "rclinks": "Фæстаг $1 ивдтытæ (афæстаг $2 боны дæргъы чи ’рцыдысты) равдис;\n$3",
+       "rclinks": "Фæстаг $1 ивдтытæ (афæстаг $2 боны дæргъы чи ’рцыдысты) равдис;",
        "diff": "хицæн.",
        "hist": "лог",
        "hide": "Айсын",
        "undeleteviewlink": "кæсын",
        "undeleteinvert": "Зыгъуыммæ æвзæрст",
        "undeletecomment": "Аххос:",
-       "undeletedfiles": "{{PLURAL:$1|1 файл рацарæзт æрцыдис|$1 файлы рацарæзт æрцыдысты}}",
        "cannotundelete": "Рацарæзт нæ фæрæстмæ:\n$1",
        "undelete-search-title": "Хафт фæрсты агуырд",
        "undelete-search-box": "Хафт фæрстæ агурын",
        "revdelete-summary-hid": "ивды афыст æмбæхст у",
        "revdelete-uname-hid": "æмбæхст фæсномыг",
        "rightsnone": "(нæй)",
-       "revdelete-summary": "ивддзинады мидис",
        "feedback-back": "Фæстæмæ",
        "feedback-cancel": "Ныууадзын",
        "feedback-close": "Æххæст",
        "feedback-useragent": "Браузер:",
        "searchsuggest-search": "Агурын",
        "searchsuggest-containing": "йæ мидæг ис...",
-       "api-error-badaccess-groups": "Ацы викимæ файлтæ бавгæныны бар дæм нæй.",
-       "api-error-filename-tooshort": "Файлы ном æгæр цыбыр у.",
-       "api-error-filetype-banned": "Файлы хуыз ивæргонд у.",
-       "api-error-missingparam": "Мидæггаг рæдыд: Курдиаты параметртæ нæй.",
-       "api-error-missingresult": "Мидæггаг рæдыд: Нæ рауадис сбæрæг кæнын къопи кæнын куыд бантыстис.",
-       "api-error-mustbeloggedin": "Ды хъуамæ системæмæ хызт уай, цæмæй файлтæ æвгæнай.",
-       "api-error-mustbeposted": "Мидæггаг рæдыд: Курдиат хъуамæ уа HTTP POST.",
-       "api-error-noimageinfo": "Æвгæд æххæст у, фæлæ нын сервер ницыуал рабæрæг кодта файлы тыххæй.",
-       "api-error-nomodule": "Мидæггаг рæдыд: Бавгæнæн модуль нæу æвæрд.",
-       "api-error-ok-but-empty": "Мидæггаг рæдыд: Серверæй дзуапп нæй.",
-       "api-error-overwrite": "Уæвгæ файл ногæй фыссын нæй гæнæн.",
        "api-error-stashfailed": "Мидæггаг рæдыд: Серверæн нæ рауадис рæстæгмæ файл фæдарын.",
-       "api-error-timeout": "Сервер нæ радта дзуапп бадзырд рæстæгмæ.",
-       "api-error-unclassified": "Нæзонгæ рæдыд æрцыд.",
-       "api-error-unknown-code": "Нæзонгæ рæдыд: \"$1\".",
-       "api-error-unknown-error": "Мидæггаг рæдыд: Цыдæр раст нæ ацыдис, файл куы æвгæдтай, уæд.",
        "api-error-unknown-warning": "Нæзонгæ фæдзæхст: \"$1\".",
        "api-error-unknownerror": "Нæзонгæ рæдыд: \"$1\".",
-       "api-error-uploaddisabled": "Ацы викийы, бавгæныны фадат хицæн у.",
-       "api-error-verification-error": "Ацы файл гæнæн ис хæлд у, кæнæ йæ номы фæстаг хай раст нæу.",
        "duration-seconds": "$1 {{PLURAL:$1|секунд|секунды}}",
        "duration-minutes": "$1 {{PLURAL:$1|минут|минуты}}",
        "duration-hours": "$1 {{PLURAL:$1|сахат|сахаты}}",
index 7171bae..57fb8d6 100644 (file)
@@ -24,7 +24,8 @@
                        "Macofe",
                        "ਪ੍ਰਚਾਰਕ",
                        "Tow",
-                       "Sony dandiwal"
+                       "Sony dandiwal",
+                       "Stephanecbisson"
                ]
        },
        "tog-underline": "ਲਿੰਕ ਹੇਠ-ਲਾਈਨ:",
        "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-submit": "ਆਪਣਾ ਖਾਤਾ ਬਣਾਓ",
        "rcshowhidemine-hide": "ਓਹਲੇ",
        "rcshowhidecategorization-show": "ਦਿਖਾਓ",
        "rcshowhidecategorization-hide": "ਲੁਕਾਉ",
-       "rclinks": "ਪਿਛਲੇ $2 ਦਿਨਾਂ ਵਿੱਚ ਹੋਈਆਂ $1 ਤਬਦੀਲੀਆਂ ਵਿਖਾਓ<br /> $3",
+       "rclinks": "ਪਿਛਲੇ $2 ਦਿਨਾਂ ਵਿੱਚ ਹੋਈਆਂ $1 ਤਬਦੀਲੀਆਂ ਵਿਖਾਓ",
        "diff": "ਫ਼ਰਕ",
        "hist": "ਅਤੀਤ",
        "hide": "ਲੁਕਾਓ",
        "logentry-newusers-create2": "ਵਰਤੋਂਕਾਰ ਖਾਤਾ $3, $1 ਦੁਆਰਾ ਬਣਾਇਆ ਗਿਆ ਸੀ",
        "logentry-upload-upload": "$1 ਨੇ $3 {{GENDER:$2|ਅਪਲੋਡ ਕੀਤਾ}}",
        "rightsnone": "(ਕੋਈ ਨਹੀਂ)",
-       "revdelete-summary": "ਸੰਖੇਪ ਸੋਧ",
        "feedback-adding": "ਸਫ਼ੇ ਨਾਲ਼ ਵਿਚਾਰ ਜੁੜ ਰਹੇ ਹਨ...",
        "feedback-back": "ਪਿੱਛੇ",
        "feedback-bugnew": "ਮੈਂ ਚੈੱਕ ਕੀਤਾ। ਇੱਕ ਨਵੇਂ ਦੋਸ਼ ਦੀ ਰਿਪੋਰਟ ਕਰੋ",
index 95af027..a86e217 100644 (file)
        "externaldberror": "Mapalyaring mika pamagkamali king external authentication (pamagpatutung panlual) ning database, o ala kang paintulut a i-update ya ing kekang account a panlual (external account).",
        "login": "Mag log in",
        "nav-login-createaccount": "Mag-login / maglalang account",
-       "userlogin": "Mag-login / maglalang account",
        "logout": "Mag-log out",
        "userlogout": "Mag logout",
        "notloggedin": "E maka login",
-       "nologin": "Ala kang login? $1.",
-       "nologinlink": "Maglalang kang account",
        "createaccount": "Maglalang kang account",
-       "gotaccount": "Atin na kang account? '''$1'''.",
-       "gotaccountlink": "Mag log in",
        "createaccountmail": "kapamilatan ning e-mail",
        "badretype": "Ding password a linub mu ela mibabage.",
        "userexists": "Atin nang gagamit king lagyung talagamit (username) a misulat.\nMamili kang aliwang lagyu.",
        "prefs-misc": "Alwp",
        "saveprefs": "I-save",
        "prefs-editing": "Mag-edit",
-       "rows": "Dane (rows):",
-       "columns": "Ding asias:",
        "searchresultshead": "Maintun",
        "stub-threshold": "Angganan ning <a href=\"#\" class=\"stub\">stub link</a> formatting (byte):",
        "recentchangesdays": "Deng aldong ipalto king bayung mengayalili:",
        "userrights-reason": "Sangkan:",
        "userrights-no-interwiki": "Ala kang paintulut a i-edit la reng katuliran da reng talagamit (user rights) kareng aliwang wiki.",
        "userrights-nodatabase": "Alang database a $1 o e ya lokal iti.",
-       "userrights-nologin": "Kailangan mung [[Special:UserLogin|mag-login]] king metung a administrator account ba kang makapamieng katulirang talagamit (user rights).",
-       "userrights-notallowed": "Ala yang paintulut mamieng katulirang talagamit (user rights) ing kekang account.",
        "userrights-changeable-col": "Deng grupung maliari mung alilan",
        "userrights-unchangeable-col": "Deng grupung e mu maliaring alilan",
        "group": "Grupu:",
        "right-protect": "Alilan la reng sikan ning pamangambil (protection level) at i-edit la reng bulung a protektadu/makakambil",
        "right-editprotected": "I-edit la reng bulung a protektadu/makakambil (alang proteksiun a tuki-tuki o cascading protection)",
        "right-editinterface": "I-edit ya ing user interface",
-       "right-editusercssjs": "I-edit la reng simpan (file) dang CSS ampong JS deng aliwang talagamit",
        "right-editusercss": "I-edit la reng simpan (file) dang CSS deng aliwang talagamit",
        "right-edituserjs": "I-edit la reng simpan (file) dang JS deng aliwang talagamit",
        "right-rollback": "Gad yang iurung (revert) ing tauling talagamit a mig-edit king partikular a bulung",
        "rcshowhidepatr": "$1 edit a babanten (patrolled edits)",
        "rcshowhidemine": "$1 deng elilan ku",
        "rcshowhidecategorization-show": "Pakit",
-       "rclinks": "Pakit la reng tauling $1 miyalilan anyang tauling $2 aldo<br />$3",
+       "rclinks": "Pakit la reng tauling $1 miyalilan anyang tauling $2 aldo",
        "diff": "aliwa",
        "hist": "amlat",
        "hide": "Isalikut",
        "undeletelink": "lon/ibalik",
        "undeleteviewlink": "↓lawen",
        "undeletecomment": "Komentu:",
-       "undeletedrevisions": "{{PLURAL:$1|1 pamagbayung|$1 pamagbayung}} misubli",
-       "undeletedrevisions-files": "{{PLURAL:$1|1 pamagbayung|$1 pamagbayung}} ampong {{PLURAL:$2|1 simpan|$2 simpan}} a misubli",
-       "undeletedfiles": "{{PLURAL:$1|1 simpan|$1 simpan}} a misubli",
        "cannotundelete": "E melaus ing pamamawi king pamamura.  Mapalyaring ati'nang minunang ginawa kaniti.",
        "undeletedpage": "ing '''$1 misubli ya'''\n\nLon me ing [[Special:Log/delete|tala da reng mebura (deletion log)]] para king tala/listaan da reng bayu-bayung mebura ampong misubli.",
        "undelete-header": "Lon me [[Special:Log/delete|tala da reng mebura]] para kareng bulung a bayu-bayung mebura.",
        "revdelete-restricted": "ipairal la reng limitasiun kareng sysop",
        "revdelete-unrestricted": "ilako la reng makabawal kareng sysops",
        "rightsnone": "(ala)",
-       "revdelete-summary": "sampulung da reng mibayu (edit summary)",
        "feedback-back": "Mibalik",
        "feedback-submit": "I-sumiti",
        "feedback-thanks-title": "Salamat pu!",
index a82bf86..1e174f8 100644 (file)
        "rcshowhideminor": "$1 kambionan menor",
        "rcshowhidebots": "$1 botnan",
        "rcshowhideanons": "$1 uzadónan anonimo",
-       "rclinks": "Mustra último $1 kambionan den último $2 dianan<br />$3",
+       "rclinks": "Mustra último $1 kambionan den último $2 dianan",
        "hide": "Skonde",
        "show": "Mustra",
        "file-anchor-link": "Imagen",
index 8f3f530..5398d0f 100644 (file)
        "yourdomainname": "Vote donmène:",
        "login": "Intrer",
        "nav-login-createaccount": "Intrer / créer vote conpte",
-       "userlogin": "Intrer / créer vote conpte",
-       "userloginnocreate": "Intrer",
        "logout": "Sortir",
        "userlogout": "Sortir",
        "notloggedin": "Poin connékté",
        "userlogin-noaccount": "os n'avez mie un conpte ?",
        "userlogin-joinproject": "Érgaingnez {{SITENAME}}",
-       "nologin": "os n'avez mie un conpte? '''$1'''.",
-       "nologinlink": "Créer un conpte",
        "createaccount": "Créer un conpte",
-       "gotaccount": "Jou qu'os avez piécha un conpte? '''$1'''.",
-       "gotaccountlink": "Intrer",
-       "userlogin-resetlink": "Vos avez oblié vous détals d'connécsion ?",
        "userlogin-resetpassword-link": "Mot d'passe obliè ?",
        "userlogin-helplink2": "Éyude pour s' connécter",
        "userlogin-loggedin": "Os ètes déjo connécté{{GENDER:$1||e|(e)}} conme $1.\nImplouéyez ch' formuloére in-d'sous pour vous connécter aveuc un eute compte d'uzeu.",
        "createaccountmail": "Uzer un mot d' passe aléatoére timporoére pi l’invouéyer à l’adrèche ed courriel éspécifiée",
        "createaccountmail-help": "Peut ète implouèyé pour créer un compte pour eune eute parsonne sans connouaite ch' mot d'passe.",
        "createacct-realname": "Nom réél (facultatif)",
-       "createaccountreason": "Motif :",
        "createacct-reason": "Motif",
        "createacct-reason-ph": "Porquoé os créez un eute compte ?",
        "createacct-reason-help": "Mot d'billet affiché dins ch' jornal éd créachon d'compte",
        "rcshowhideanons": "$1 uzeus anonimes",
        "rcshowhidepatr": "$1 chés modificacions wardées",
        "rcshowhidemine": "$1 ems éditions",
-       "rclinks": "Afiqher chés $1 darins canjemints din chés $2 darins jours<br />$3",
+       "rclinks": "Afiqher chés $1 darins canjemints din chés $2 darins jours",
        "diff": "dif",
        "hist": "hist",
        "hide": "Mucher",
index 74d9bb6..9dd85ee 100644 (file)
        "yourdomainname": "Dei Domain:",
        "login": "Kumm nei",
        "nav-login-createaccount": "Kumm nei",
-       "userlogin": "Kumm nei",
-       "userloginnocreate": "Kumm nei",
        "logout": "Geh naus",
        "userlogout": "Geh naus",
-       "gotaccountlink": "Kumm nei",
        "createacct-emailrequired": "E-Poschd",
        "createaccountmail": "iwwer E-Mail",
-       "createaccountreason": "Grund:",
        "mailmypassword": "Paesswatt zerricksetze",
        "noemail": "Yuuser „$1“ hot ken E-Mail aagewwe.",
        "loginlanguagelabel": "Schprooch: $1",
        "prefs-resetpass": "Paesswatt ennere",
        "saveprefs": "Uffstellinge beilege",
        "prefs-editing": "Ennere",
-       "columns": "Kallems:",
        "searchresultshead": "Guck uff",
        "recentchangesdays-max": "Max. $1 {{PLURAL:$1|Daag|Daag}}",
        "timezoneregion-africa": "Afrikaa",
        "rcshowhidebots": "Bots $1",
        "rcshowhideanons": "IP-Yuuser $1",
        "rcshowhidemine": "Mei Ardickele $1",
-       "rclinks": "Zeig die letscht $1 Enneringe vun de letscht $2 Daag.<br />$3",
+       "rclinks": "Zeig die letscht $1 Enneringe vun de letscht $2 Daag.",
        "diff": "Unnerschidd",
        "hist": "Gschicht",
        "hide": "verschwinne losse",
index 9ac3ca7..f0e33b1 100644 (file)
        "rcshowhideminor": "$1 kjleene Endanisse",
        "rcshowhideanons": "$1 nomeloose Bruckasch",
        "rcshowhidemine": "$1 miene Endanisse",
-       "rclinks": "Wies de latste $1 Endanisse in de latste $2 Doag<br />$3",
+       "rclinks": "Wies de latste $1 Endanisse in de latste $2 Doag",
        "diff": "Unjascheet",
        "hist": "Jeschicht",
        "hide": "Fe'stäakje",
index 8722398..f18e342 100644 (file)
        "userlogin-remembermypassword": "Oagmeld blaiwe",
        "login": "Oamelde",
        "nav-login-createaccount": "Oamelde / Kondo oaleesche",
-       "userlogin": "Oamelde / Kondo oaleesche",
-       "userloginnocreate": "Oilogge",
        "logout": "Uffhere",
        "userlogout": "Uffhere",
        "notloggedin": "Bischd nedd oagmeld",
        "userlogin-noaccount": "Hoschd kä Kondo?",
        "userlogin-joinproject": "Bai {{SITENAME}} oamelde",
-       "nologin": "Hoschd noch kä Kondo? $1",
-       "nologinlink": "Ä Kondo oaleesche",
        "createaccount": "Kondo oaleesche",
-       "gotaccount": "Hoschd schun ä Kondo? $1",
-       "gotaccountlink": "Oamelde",
-       "userlogin-resetlink": "Hoschd doi Daade vagesse?",
        "userlogin-resetpassword-link": "Hoschd doi Kennwoad vagesse?",
        "userlogin-helplink2": "Hilf baim Oamelde",
        "userlogin-createanother": "Leschda nochä Kondo oa",
        "createacct-email-ph": "Gebb doi E-Mail-Adress oi",
        "createacct-another-email-ph": "Gebb doi E-Mail-Adress oi",
        "createacct-realname": "Wie heschd (mugschds awwa nedd)",
-       "createaccountreason": "Grund:",
        "createacct-reason": "Bgrindung",
        "createacct-submit": "Leschda ä Kondo oa",
        "createacct-another-submit": "Leschda ä onnares Kondo oa",
        "resetpass-expired": "Doi Passwoad isch abgloffe. Gebbä naijes Passwoad oi.",
        "passwordreset": "Kennword zriggsedze",
        "passwordreset-username": "Middawaida:",
-       "passwordreset-capture": "E-Mail õgugge?",
        "changeemail": "E-Mail-Adress ännare",
        "changeemail-none": "(käni)",
        "changeemail-submit": "E-Mail-Adress ännare",
        "prefs-rendering": "Uffdridd",
        "saveprefs": "Oischdellunge schbaischere",
        "prefs-editing": "Schaffe",
-       "rows": "Zaile",
-       "columns": "Schbalde",
        "searchresultshead": "Nochgugge",
        "stub-threshold-disabled": "Abgschdeld",
        "recentchangesdays": "Oazahl vunde Daach inde ledschde Ännarunge:",
        "rcshowhidemine": "Moi Beawaidunge $1",
        "rcshowhidemine-show": "Zaische",
        "rcshowhidemine-hide": "Vaschdeggle",
-       "rclinks": "Zaisch die ledschde $1 Ännarunge inde ledschde $2 Daach<br />$3",
+       "rclinks": "Zaisch die ledschde $1 Ännarunge inde ledschde $2 Daach",
        "diff": "Unnaschied",
        "hist": "Gschischd",
        "hide": "vaschdeggle",
index 6733566..8d4d72c 100644 (file)
@@ -86,7 +86,8 @@
                        "Sethakill",
                        "Mateon1",
                        "Jdx",
-                       "Kirsan"
+                       "Kirsan",
+                       "Krottyianock"
                ]
        },
        "tog-underline": "Podkreślenie linków:",
        "tog-watchlisthidebots": "Ukryj edycje botów na liście obserwowanych",
        "tog-watchlisthideminor": "Ukryj drobne zmiany na liście obserwowanych",
        "tog-watchlisthideliu": "Ukryj edycje zalogowanych użytkowników na liście obserwowanych",
-       "tog-watchlistreloadautomatically": "Automatycznie odświeżaj listę obserwowanych, gdy zmieniany jest filtr (wymagany JavaScript)",
+       "tog-watchlistreloadautomatically": "Automatycznie odświeżaj listę obserwowanych po każdej zmianie filtra (wymagany JavaScript)",
        "tog-watchlisthideanons": "Ukryj edycje anonimowych użytkowników na liście obserwowanych",
        "tog-watchlisthidepatrolled": "Ukryj sprawdzone edycje na liście obserwowanych",
        "tog-watchlisthidecategorization": "Ukryj kategoryzację stron",
        "redirectedfrom": "(Przekierowano z $1)",
        "redirectpagesub": "Strona przekierowująca",
        "redirectto": "Przekierowanie do:",
-       "lastmodifiedat": "Tę stronę ostatnio zmodyfikowano o $2, $1.",
+       "lastmodifiedat": "Tę stronę ostatnio edytowano $2, $1.",
        "viewcount": "Tę stronę obejrzano {{PLURAL:$1|tylko raz|$1 razy}}.",
        "protectedpage": "Strona zabezpieczona",
        "jumpto": "Skocz do:",
        "sort-ascending": "Sortuj rosnąco",
        "nstab-main": "Strona",
        "nstab-user": "{{GENDER:{{BASEPAGENAME}}|Strona użytkownika|Strona użytkowniczki}}",
-       "nstab-media": "Pliki",
+       "nstab-media": "Plik",
        "nstab-special": "Strona specjalna",
        "nstab-project": "Strona projektu",
        "nstab-image": "Plik",
        "ns-specialprotected": "Stron specjalnych nie można edytować.",
        "titleprotected": "Utworzenie strony o tej nazwie zostało zablokowane przez [[User:$1|$1]].\nUzasadnienie blokady: <em>$2</em>.",
        "filereadonlyerror": "Nie można zmodyfikować pliku „$1”, ponieważ repozytorium plików „$2” jest w trybie tylko do odczytu.\n\nBlokujący go administrator systemu podał następujący powód: „$3”.",
-       "invalidtitle-knownnamespace": "Nieprawidłowa nazwa w obszarze nazw \"$2\" o treści \"$3\"",
-       "invalidtitle-unknownnamespace": "Nieprawidłowa nazwa z nieznaną liczbą przestrzeni nazw  $1  o treści \"$2\"",
+       "invalidtitle-knownnamespace": "Nieprawidłowa nazwa \"$3\" w przestrzeni nazw \"$2\"",
+       "invalidtitle-unknownnamespace": "Nieprawidłowy tytuł \"$2\" z nieznanym numerem przestrzeni nazw $1",
        "exception-nologin": "Nie jesteś zalogowany/a",
        "exception-nologin-text": "Zaloguj się, aby mieć dostęp do tej strony lub akcji.",
        "exception-nologin-text-manual": "Musisz $1 aby mieć dostęp do tej strony lub akcji.",
        "virus-badscanner": "Zła konfiguracja – nieznany skaner antywirusowy ''$1''",
        "virus-scanfailed": "skanowanie nieudane (błąd $1)",
-       "virus-unknownscanner": "nieznany antivirus:",
+       "virus-unknownscanner": "nieznany program antywirusowy:",
        "logouttext": "'''Nie jesteś już zalogowany.'''\n\nZauważ, że do momentu wyczyszczenia pamięci podręcznej przeglądarki niektóre strony mogą wyglądać tak, jakbyś wciąż był zalogowany.",
        "cannotlogoutnow-title": "Nie możesz się teraz wylogować",
        "cannotlogoutnow-text": "Podczas używania $1 wylogowanie nie jest niemożliwe.",
        "readonlywarning": "<strong>Uwaga! Baza danych została zablokowana do celów administracyjnych. W tej chwili nie można zapisać nowej wersji strony. Jeśli chcesz, możesz skopiować ją do pliku, aby móc zapisać ją później.</strong>\n\nAdministrator systemu, który zablokował bazę, podał następujący powód: $1",
        "protectedpagewarning": "'''Uwaga! Możliwość modyfikacji tej strony została zabezpieczona. Mogą ją edytować jedynie użytkownicy z uprawnieniami administratora.'''\nOstatni wpis z rejestru jest pokazany poniżej.",
        "semiprotectedpagewarning": "'''Uwaga!''' Ta strona została zabezpieczona i tylko zarejestrowani użytkownicy mogą ją edytować.\nOstatni wpis z rejestru jest pokazany poniżej.",
-       "cascadeprotectedwarning": "<strong>Uwaga:</strong> Ta strona została zabezpieczona i tylko użytkownicy z uprawnieniami administratora mogą ją edytować. Została ona osadzona w {{PLURAL:$1|następującej stronie, która została zabezpieczona|następujących stronach, które zostały zabezpieczone}} z włączoną opcją dziedziczenia:",
+       "cascadeprotectedwarning": "<strong>Uwaga:</strong> Ta strona została zabezpieczona i tylko użytkownicy z [[Special:ListGroupRights|określonymi uprawnieniami]] mogą ją edytować. Została ona osadzona w {{PLURAL:$1|następującej stronie, która została zabezpieczona|następujących stronach, które zostały zabezpieczone}} z włączoną opcją dziedziczenia:",
        "titleprotectedwarning": "'''Uwaga! Utworzenie strony o tej nazwie zostało zabezpieczone. Do jej utworzenia wymagane są [[Special:ListGroupRights|specyficzne uprawnienia]].'''\nOstatni wpis z rejestru jest pokazany poniżej.",
        "templatesused": "{{PLURAL:$1|Szablon użyty|Szablony użyte}} w tym artykule:",
        "templatesusedpreview": "{{PLURAL:$1|Szablon użyty|Szablony użyte}} w tym podglądzie:",
        "saveusergroups": "Zapisz grupy {{GENDER:$1|użytkownika|użytkowniczki}}",
        "userrights-groupsmember": "Należy do:",
        "userrights-groupsmember-auto": "Na stałe należy do:",
-       "userrights-groups-help": "Możesz zmienić przynależność tego użytkownika do podanych grup:\n* Zaznaczone pole oznacza przynależność użytkownika do danej grupy.\n* Niezaznaczone pole oznacza, że użytkownik nie należy do danej grupy.\n* Gwiazdka * informuje, że nie możesz usunąć użytkownika z grupy po dodaniu do niej lub dodać po usunięciu.",
+       "userrights-groups-help": "Możesz zmienić przynależność tego użytkownika do podanych grup:\n* Zaznaczone pole oznacza przynależność użytkownika do danej grupy.\n* Niezaznaczone pole oznacza, że użytkownik nie należy do danej grupy.\n* Gwiazdka * informuje, że nie możesz usunąć użytkownika z grupy po dodaniu do niej lub dodać po usunięciu.\n* Kratka # informuje, że możesz tylko skrócić czas wygaśnięcia członkostwa w danej grupie; nie możesz go wydłużać.",
        "userrights-reason": "Powód:",
        "userrights-no-interwiki": "Nie masz dostępu do edycji uprawnień na innych wiki.",
        "userrights-nodatabase": "Baza danych $1 nie istnieje lub nie jest lokalna.",
        "userrights-expiry-options": "1 dzień:1 day,1 tydzień:1 week,1 miesiąc:1 month,3 miesiące:3 months,6 miesięcy:6 months,1 rok:1 year",
        "userrights-invalid-expiry": "Termin przynależności do grupy „$1“ jest nieprawidłowy.",
        "userrights-expiry-in-past": "Termin przynależności do grupy „$1“ jest z przeszłości.",
+       "userrights-cannot-shorten-expiry": "Nie możesz przedłużyć czasu wygaśnięcia członkostwa w grupie \"$1\". Tylko użytkownicy z uprawnieniem dodawania do i usuwania z tej grupy mogą wydłużać czas wygaśnięcia.",
        "userrights-conflict": "Konflikt zmiany uprawnień użytkownika! Proszę sprawdzić i potwierdzić swoje zmiany.",
        "group": "Grupa:",
        "group-user": "Użytkownicy",
        "right-editsemiprotected": "Edycja stron zabezpieczonych na poziomie „{{int:protect-level-autoconfirmed}}”",
        "right-editcontentmodel": "Edycja modelu zawartości strony",
        "right-editinterface": "Edycja interfejsu użytkownika",
-       "right-editusercssjs": "Edycja plików CSS i JS innych użytkowników",
        "right-editusercss": "Edycja plików CSS innych użytkowników",
        "right-edituserjs": "Edycja plików JS innych użytkowników",
        "right-editmyusercss": "Edycja swoich plików CSS",
        "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-state-message-fullcoverage": "Wybranie wszystkich filtrów w grupie działa tak samo jak niewybranie żadnego, więc taki filtr nie da żadnego 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-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Å\9bwiadczenia wyszukujÄ\85 tylko edycje zarejestrowanych użytkowników, wiÄ\99c ten filtr koliduje z filtrem â\80\9cNiezarejestrowani”.",
+       "rcfilters-filtergroup-user-experience-level-conflicts-unregistered": "Filtry doÅ\9bwiadczenia wyszukujÄ\85 tylko edycje zarejestrowanych użytkowników, wiÄ\99c ten filtr koliduje z filtrem â\80\9eNiezarejestrowani”.",
        "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\".",
+       "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 powyżej odpowiednio zaznaczone na pasku aktywnych filtrów.",
+       "rcfilters-hideminor-conflicts-typeofchange": "Niektóre rodzaje zmian nie mogą być uznawane za „drobne”, dlatego 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).",
+       "rclistfromreset": "Zresetuj wybór daty",
        "rclistfrom": "Pokaż nowe zmiany od $3 $2",
        "rcshowhideminor": "$1 drobne edycje",
        "rcshowhideminor-show": "Pokaż",
        "rcshowhidecategorization": "$1 kategoryzację stron",
        "rcshowhidecategorization-show": "Pokaż",
        "rcshowhidecategorization-hide": "Ukryj",
-       "rclinks": "Pokaż ostatnie $1 zmian w ciągu ostatnich $2 dni.<br />$3",
+       "rclinks": "Pokaż ostatnie $1 zmian w ciągu ostatnich $2 dni.",
        "diff": "różn.",
        "hist": "hist.",
        "hide": "Ukryj",
        "php-uploaddisabledtext": "Przesyłanie plików PHP zostało zablokowane. Sprawdź ustawienie „file_uploads”.",
        "uploadscripted": "Plik zawiera kod HTML lub skrypt, który może zostać błędnie zinterpretowany przez przeglądarkę internetową.",
        "upload-scripted-pi-callback": "Nie można przesłać pliku, zawierającego instrukcję obsługi arkusza stylów XML.",
+       "upload-scripted-dtd": "Nie można przesyłać plików SVG zawierających niestandardową deklarację DTD.",
        "uploaded-script-svg": "Znaleziono element skryptowy „$1” we przesyłanym pliku SVG.",
        "uploaded-hostile-svg": "Znaleziono niebezpieczny kod CSS w przesyłanym pliku SVG.",
        "uploaded-event-handler-on-svg": "Ustawianie atrybutów obsługi zdarzeń <code>$1=\"$2\"</code> jest niedozwolone w plikach SVG.",
        "undeleteviewlink": "pokaż",
        "undeleteinvert": "Odwróć zaznaczenie",
        "undeletecomment": "Powód:",
-       "undeletedrevisions": "odtworzono {{PLURAL:$1|1 wersję|$1 wersje|$1 wersji}}",
-       "undeletedrevisions-files": "odtworzono $1 {{PLURAL:$1|wersję|wersje|wersji}} i $2 {{PLURAL:$2|plik|pliki|plików}}",
-       "undeletedfiles": "odtworzył $1 {{PLURAL:$1|plik|pliki|plików}}",
        "cannotundelete": "Niektóre lub wszystkie odtworzenia nie powiodły się:\n$1",
        "undeletedpage": "'''Odtworzono stronę $1.'''\n\nZobacz [[Special:Log/delete|rejestr usunięć]], jeśli chcesz przejrzeć ostatnie operacje usuwania i odtwarzania stron.",
        "undelete-header": "Zobacz [[Special:Log/delete|rejestr usunięć]], aby sprawdzić ostatnio usunięte strony.",
        "sp-contributions-uploads": "przesłane pliki",
        "sp-contributions-logs": "rejestry",
        "sp-contributions-talk": "dyskusja",
-       "sp-contributions-userrights": "zarządzanie uprawnieniami użytkownika",
+       "sp-contributions-userrights": "zarządzanie uprawnieniami {{GENDER:$1|użytkownika|użytkowniczki}}",
        "sp-contributions-blocked-notice": "To konto użytkownika jest obecnie zablokowane. Ostatni wpis rejestru blokad jest pokazany poniżej.",
        "sp-contributions-blocked-notice-anon": "Ten adres IP jest obecnie zablokowany.\nOstatni wpis rejestru blokad jest pokazany poniżej.",
        "sp-contributions-search": "Szukaj wkładu",
        "unblocked-id": "Blokada $1 została zdjęta",
        "unblocked-ip": "[[Special:Contributions/$1|$1]] został odblokowany.",
        "blocklist": "Zablokowani użytkownicy",
+       "autoblocklist": "Blokady automatyczne",
+       "autoblocklist-submit": "Szukaj",
+       "autoblocklist-localblocks": "{{PLURAL:$1|Lokalna blokada automatyczna|Lokalne blokady automatyczne}}",
+       "autoblocklist-otherblocks": "{{PLURAL:$1|Inna blokada automatyczna|Inne blokady automatyczne}}",
        "ipblocklist": "Zablokowani użytkownicy",
        "ipblocklist-legend": "Znajdź zablokowanego użytkownika",
        "blocklist-userblocks": "Ukryj blokady konta",
        "logentry-delete-delete": "$1 {{GENDER:$2|usunął|usunęła}} stronę $3",
        "logentry-delete-delete_redir": "$1 {{GENDER:$2|usunął|usunęła}} przekierowanie $3 poprzez nadpisanie",
        "logentry-delete-restore": "$1 {{GENDER:$2|odtworzył|odtworzyła}} stronę $3",
+       "logentry-delete-restore-nocount": "$1 {{GENDER:$2|odtworzył|odtworzyła}} stronę $3",
+       "restore-count-revisions": "odtworzono {{PLURAL:$1|1 wersja|$1 wersji}}",
+       "restore-count-files": "{{PLURAL: $1|1 Plik|$1 plików}}",
        "logentry-delete-event": "$1 {{GENDER:$2|zmienił|zmieniła}} widoczność {{PLURAL:$5|zdarzenia|$5 zdarzeń}} w rejestrze $3, wykonano następujące operacje: $4",
        "logentry-delete-revision": "$1 {{GENDER:$2|zmienił|zmieniła}} widoczność {{PLURAL:$5|wersji|$5 wersji}} strony $3, wykonano następujące operacje: $4",
        "logentry-delete-event-legacy": "$1 {{GENDER:$2|zmienił|zmieniła}} widoczność zdarzeń w rejestrze strony $3",
        "special-characters-group-thai": "Tajskie",
        "special-characters-group-lao": "Laotańskie",
        "special-characters-group-khmer": "Khmerskie",
+       "special-characters-group-canadianaboriginal": "Kanadyjski Aborygen",
        "special-characters-title-endash": "półpauza",
        "special-characters-title-emdash": "pauza",
        "special-characters-title-minus": "minus",
        "log-action-filter-suppress-reblock": "Ukrycie użytkownika poprzez ponowną blokadę",
        "log-action-filter-upload-upload": "Nowe przesłane",
        "log-action-filter-upload-overwrite": "Przesłane ponownie",
+       "authmanager-authn-no-primary": "Podane dane nie mogą być użyte do kontroli poświadczeń.",
+       "authmanager-authn-no-local-user": "Żaden użytkownik nie korzysta z tych danych.",
        "authmanager-authn-autocreate-failed": "Automatyczne tworzenie lokalnego konta nie powiodło się: $1",
        "authmanager-create-disabled": "Utworzenie konta jest wyłączone.",
        "authmanager-create-from-login": "Aby utworzyć konto, wypełnij odpowiednie pola.",
        "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",
-       "rawhtml-notallowed": "Znaczniki &lt;html&gt; nie mogą być stosowane poza zwykłymi stronami."
+       "rawhtml-notallowed": "Znaczniki &lt;html&gt; nie mogą być stosowane poza zwykłymi stronami.",
+       "gotointerwiki": "Opuszczasz {{SITENAME}}",
+       "gotointerwiki-invalid": "Podany tytuł jest nieprawidłowy.",
+       "gotointerwiki-external": "Zamierzasz przejść z witryny {{SITENAME}} do innej witryny:\n [[$2]].\n\n[$1 Kliknij, aby przejść do: $1].",
+       "undelete-cantedit": "Nie możesz odtworzyć tej strony, ponieważ nie masz uprawnień do edytowania tej strony.",
+       "undelete-cantcreate": "Nie możesz odtworzyć tej strony, ponieważ nie istnieje strona o tej nazwie, a nie masz uprawnień do jej utworzenia."
 }
index 5ac7c99..e413c2e 100644 (file)
        "externaldberror": "Ò che a l'é rivaje n'eror con la base ëd dàit d'autenticassion esterna, ò pura a l'é chiel che a l'é nen autorisà a agiornesse sò cont estern.",
        "login": "Conession",
        "nav-login-createaccount": "Creé un cont o rintré ant ël sistema",
-       "userlogin": "Creé un cont o rintré ant ël sistema",
-       "userloginnocreate": "Conession",
        "logout": "Seurte da 'nt ël sistema",
        "userlogout": "Dësconession",
        "notloggedin": "Nen rintrà ant ël sistema",
        "userlogin-noaccount": "Ha-lo nen un cont?",
        "userlogin-joinproject": "Ch'as gionza a {{SITENAME}}",
-       "nologin": "Ha-lo ancó nen un cont? $1.",
-       "nologinlink": "Creé un cont",
        "createaccount": "Creé un cont",
-       "gotaccount": "Ha-lo già un sò cont? $1.",
-       "gotaccountlink": "Ch'a rintra ant ël sistema",
-       "userlogin-resetlink": "A l'ha dësmentià ij sò detaj për intré ant ël sistema?",
        "userlogin-resetpassword-link": "Ciav dësmentià?",
        "userlogin-helplink2": "Agiut a la conession",
        "userlogin-loggedin": "A l'é già rintrà an ël sistema tanme {{GENDER:$1|$1}}.\nCh'a deuvra ël formolari sì-sota për rintré coma n'àutr n'utent.",
        "createacct-another-email-ph": "Buté l'adrëssa ëd pòsta eletrònica",
        "createaccountmail": "Dovré na ciav temporania d'ancàpit e mandela a l'adrëssa ëd pòsta eletrònica spessificà",
        "createacct-realname": "Nòm ver (opsional)",
-       "createaccountreason": "Rason:",
        "createacct-reason": "Rason",
        "createacct-reason-ph": "Përchè a crea n'àutr cont",
        "createacct-submit": "Ch'a crea sò cont",
        "right-editsemiprotected": "Modifiché le pàgine protegiùe con «{{int:protect-level-autoconfirmed}}»",
        "right-editcontentmodel": "Modifiché ël model ëd contnù ëd na pàgina",
        "right-editinterface": "Modifiché l'antërfacia utent",
-       "right-editusercssjs": "Modifiché j'archivi CSS e JavaScript d'àutri utent",
        "right-editusercss": "Modifiché j'archivi CSS d'àutri utent",
        "right-edituserjs": "Modifiché j'archivi JavaScript d'àutri utent",
        "right-editmyusercss": "Modifiché ij sò archivi CSS utent",
        "rcshowhidemine": "$1 mie modìfiche",
        "rcshowhidemine-show": "Smon-e",
        "rcshowhidemine-hide": "Stërmé",
-       "rclinks": "Mostré j'ùltime $1 modìfiche ëd j'ùltim $2 dì<br />$3",
+       "rclinks": "Mostré j'ùltime $1 modìfiche ëd j'ùltim $2 dì",
        "diff": "dif.",
        "hist": "stòria",
        "hide": "Stërmé",
        "undeleteviewlink": "vëdde",
        "undeleteinvert": "Anvertì la selession",
        "undeletecomment": "Rason:",
-       "undeletedrevisions": "{{PLURAL:$1|Na revision pijàita|$1 revision pijàite}} andré",
-       "undeletedrevisions-files": "{{PLURAL:$1|Na|$1}} revision e {{PLURAL:$2|n'|$2&nbsp;}}archivi pijàit andré",
-       "undeletedfiles": "{{PLURAL:$1|N'|$1&nbsp;}}archivi pijàit andaré",
        "cannotundelete": "Riprìstin falì:\n$1",
        "undeletedpage": "'''$1 a l'é stàit pijait andaré'''\n\nChe as varda ël [[Special:Log/delete|Registr djë scancelament]] për ës-ciairé j'ùltim scancelament e arcuperassion.",
        "undelete-header": "Ch'a varda [[Special:Log/delete|ël registr djë scancelament]] për ës-ciairé j'ùltim dëscancelament.",
        "logentry-tag-update-revision": "$1 {{GENDER:$2|a l'ha modificà}} le tichëtte dla revision $4 dla pàgina $3 ({{PLURAL:$7|giontà}} $6; {{PLURAL:$9|gavà}} $8)",
        "logentry-tag-update-logentry": "$1 {{GENDER:$2|a l'ha modificà}} le tichëtte dla vos ëd registr $5 dla pàgina $3 ({{PLURAL:$7|giontà}} $6; {{PLURAL:$9|gavà}} $8)",
        "rightsnone": "(gnun)",
-       "revdelete-summary": "resumé dla modìfica",
        "feedback-adding": "Gionta dij coment a la pàgina...",
        "feedback-back": "André",
        "feedback-bugcheck": "Bin fàit! Ch'a contròla mach ch'a sia pa già un dij [$1 bigat conossù].",
index e90c9ed..a9603db 100644 (file)
        "externaldberror": "ڈیٹابیس چ توانوں پہچاننے چ کوئی مسئلہ ہویا اے یا فیر تسی اپنا بارلا کھاتا نئیں بدل سکدے۔",
        "login": "اندر آؤ جی",
        "nav-login-createaccount": "اندر آؤ / کھاتہ کھولو",
-       "userlogin": "اندر آؤ / کھاتہ کھولو",
-       "userloginnocreate": "اندر آؤ جی",
        "logout": "لاگ توں باہر",
        "userlogout": "باہر آؤ",
        "notloggedin": "لاگ ان نئیں ہوۓ او",
        "userlogin-noaccount": "تواڈا کھاتہ نہیں اے؟",
        "userlogin-joinproject": "کھاتہ بناؤ",
-       "nologin": "تواڈا کھاتہ نہیں اے؟ '''$1'''۔",
-       "nologinlink": "کھاتہ بناؤ",
        "createaccount": "کھاتہ بناؤ",
-       "gotaccount": "تواڈا پہلے توں کھاتہ ہے؟ '''$1'''",
-       "gotaccountlink": "اندر آؤ",
-       "userlogin-resetlink": "اپنے لاگ ان ہون دیاں شیواں پل گۓ؟",
        "userlogin-resetpassword-link": "اپنی کنجی بھل گۓ او؟",
        "userlogin-helplink2": "لاگ ان ہون وچ ہتھ ونڈائی",
        "createacct-emailoptional": "ای-میل پتہ (مرضی نال)",
        "createacct-email-ph": "اپنا ای-میل پتہ دیؤ",
        "createaccountmail": "ای میل دے نال",
-       "createaccountreason": "وجہ:",
        "createacct-reason": "وجہ",
        "createacct-reason-ph": "تسیں اک ہور کھاتہ کیوں بنا رہے او",
        "createacct-submit": "اپنا کھاتا کھولو",
        "right-protect": "بچاؤ پدھر نوں بدلو تے بچاۓ صفیاں نوں بدلو",
        "right-editprotected": "بچاۓ صفے بدلو",
        "right-editinterface": "ورتن وکھالہ بدلو",
-       "right-editusercssjs": "دوجے ورتن والیاں دیاں  CSS  تے JavaScript  فائلاں بدلو",
        "right-editusercss": "دوجے ورتن والیاں دیاں CSS  فائلاں بدلو",
        "right-edituserjs": "دوجے ورتن والیاں دیاں  JavaScript  فائلاں بدلو",
        "right-rollback": "جلدی نال آخری ورتن والے دیاں تبدیلیاں اک خاص صفے تے واپس کرو۔",
        "rcshowhidemine": "$1 میرے کم",
        "rcshowhidemine-show": "وکھاو",
        "rcshowhidemine-hide": "لُکاؤ",
-       "rclinks": "آخری $2 دناں دیاں $1 تبدیلیاں وکھاؤ<br />$3",
+       "rclinks": "آخری $2 دناں دیاں $1 تبدیلیاں وکھاؤ",
        "diff": "فرق",
        "hist": "پچھلا کم",
        "hide": "چھپاؤ",
        "undeleteviewlink": "وکھالہ",
        "undeleteinvert": "وچوں چناؤ",
        "undeletecomment": "وجہ",
-       "undeletedrevisions": "{{PLURAL:$1|1 ریوین|$1 ریویناں}} واپس",
-       "undeletedrevisions-files": "{{PLURAL:$1|1 ریوین|$1 ریویناں}} تے {{PLURAL:$2|1 فائل|$2 فائلاں}} واپس",
-       "undeletedfiles": "{{PLURAL:$1|1 فائل|$1 فائلاں}} واپس",
        "cannotundelete": "مٹاؤ واپسی فیل:\nکسے ہور نے حورے پہلے ای صفہ واپس اردتا اے۔",
        "undeletedpage": "'''$1 واپس کردتی گئی اے'''\n\n [[Special:Log/delete|مٹان لاگ]] نوں ویکھو نیڑے دے مٹان تے واپسی دے رکارڈ لئی۔.",
        "undelete-header": "[[خاص:لاگ/مٹاؤ|مٹان لاگ]] نوں ویکھو نیڑے دے مٹاۓ گۓ دے رکارڈ لئی۔.",
        "logentry-newusers-autocreate": "کھاتہ $1 اپنے آپ ای {{GENDER:$2|بنایا گیا}} بنایا گیا۔",
        "logentry-upload-upload": "$1 {{جنس:$2|چڑھائی گئی}} $3",
        "rightsnone": "(کوئی وی نئیں)",
-       "revdelete-summary": "لکھائی دا خلاصہ",
        "feedback-adding": "مشورہ  صفے تے دیو۔۔۔۔۔۔۔",
        "feedback-bugcheck": "بعوت ودیا ! صرف ایہ ویکھو جے کیا ایہ پہلے لبے ہوۓ [$1 known bugs] چو اک تے نئیں۔",
        "feedback-bugnew": "میں ویکھیا اے۔ نویں بگ دی رپورٹ کرو۔",
index fbb364b..976420a 100644 (file)
        "yourdomainname": "Το domain εσούν:",
        "login": "Εμπάτε",
        "nav-login-createaccount": "Εμπάτεν / ποισέστεν λογαρίαν",
-       "userlogin": "Εμπάτεν / ποισέστεν λογαρίαν",
-       "userloginnocreate": "Εμπάτεν",
        "logout": "οξουκά",
        "userlogout": "Οξουκά",
        "notloggedin": "Ευρίσκεζνε οξουκά ασή Βικιπαίδειαν",
-       "nologin": "Λογαρίαν 'κ έχετε; '''$1'''.",
-       "nologinlink": "Ποισέστεν λογαρίαν",
        "createaccount": "Ποίσον λογαρίαν",
-       "gotaccount": "Λογαρίαν έχετε; '''$1'''.",
-       "gotaccountlink": "Εμπάτε",
        "createaccountmail": "με ελεκτρονικόν μένεμαν",
-       "createaccountreason": "Λόγον:",
        "badretype": "Τα σημάδε ντ' εγράψετεν 'κ ταιριάζνε.",
        "userexists": "Τ' όνεμαν έχ' ατό άλλος χρήστες.\nΒαλέστε άλλον όνεμαν.",
        "loginerror": "Σφάλμα εγγραφής",
        "rcshowhideanons": "$1 τ' αναγνώριμους τοι χρήστς",
        "rcshowhidepatr": "$1 αλλαγάς ντ' ωράουνταν",
        "rcshowhidemine": "$1 τ' αλλαγάς ιμ",
-       "rclinks": "Δείξον τα $1 υστερνά τ' αλλαγάς α σα $2 υστερνά τα ημέρας<br />$3",
+       "rclinks": "Δείξον τα $1 υστερνά τ' αλλαγάς α σα $2 υστερνά τα ημέρας",
        "diff": "διαφορά",
        "hist": "ιστ.",
        "hide": "Κρύψον",
        "htmlform-reset": "Κλώσον τ'αλλαγάς",
        "htmlform-selectorother-other": "Άλλον",
        "rightsnone": "(τιδέν)",
-       "revdelete-summary": "σύνοψην",
        "searchsuggest-search": "Αράεμαν",
        "special-characters-group-ipa": "ΔΦΑ",
        "special-characters-group-telugu": "Τελούγκου"
index 010c8f6..b8559fa 100644 (file)
        "externaldberror": "Tikka izwinaīnas autentikāntin dātanbazin blānda, anga ni assei enwarīntan kāi etnaunīnlai twajjan izwinaīnan rekkenan.",
        "login": "Enjaīs",
        "nav-login-createaccount": "Enjaīs / teīkeis rekkenan",
-       "userlogin": "Enjaīs / teīkeis rekkenan",
-       "userloginnocreate": "Enjaīs",
        "logout": "Izjaīs",
        "userlogout": "Izjaīs",
        "notloggedin": "Ni assei engūbun",
-       "nologin": "Ni turri tū rekkenan? '''$1'''.",
-       "nologinlink": "Registrīs si",
        "createaccount": "Teīkeis nāunan rekkenan",
-       "gotaccount": "Turri tū jāu rekkenan? '''$1'''!",
-       "gotaccountlink": "Enjaīs",
        "createaccountmail": "Tenginnais e-mail",
        "badretype": "Enwestai kliptaswīrdai šlaitinna si.",
        "userexists": "Etrīnkta tērpautajas pabilisnā jāu ekzistijja.\nEtrīnkais kittan tērpautajas pabilīsnan.",
        "prefs-rendering": "Prusna",
        "saveprefs": "Enpeisāis",
        "restoreprefs": "Etwārtai wartinnais wissans auprestaminans pirminiskwans",
-       "rows": "Rīndas:",
-       "columns": "Kōlunis:",
        "searchresultshead": "Laukīs",
        "stub-threshold": "Maksimālin debban stesse pāusan ebzentlitan kāigi <a href=\"#\" class=\"stub\">daīgan (stub)</a>",
        "recentchangesdays": "Dēinan gīrbis, waidīnts en panzdaumamans kitawīdinsnans:",
        "userrights-reason": "Brewīnsli:",
        "userrights-no-interwiki": "Ni assei enwarīntan kāi kitawīdinlai stēisan enwarīnsenin en kitēimans wiki.",
        "userrights-nodatabase": "Dātanbazi $1 ni ekzistijja anga ni ast lōkalin.",
-       "userrights-nologin": "Tū turri [[Special:UserLogin|enēitwei]] kāigi perwaldītajs, kāi dātun tērpautajamans enwarīnsenins.",
-       "userrights-notallowed": "Tū ni assei enwarīntan, kāi dālai tērpautajans enwarīnsenins.",
        "userrights-changeable-col": "Gruppis, kawīdans tu mazzi kitawīdintun",
        "userrights-unchangeable-col": "Gruppis, kawīdans tu ni mazzi kitawīdintun",
        "group": "Gruppi:",
        "right-protect": "Pakūnsnas klādas kitawīdinsna be preiēisenis prei redigīsnan stēisan pakūnstan pāusan",
        "right-editprotected": "Redigīs pakūnstans pāusans (šlāit weldītan pakūnsenin)",
        "right-editinterface": "Redigīs tērpautajas interfācan",
-       "right-editusercssjs": "Redigīs CSS be JavaScript zūrbrukins kitēisan tērpautajan",
        "right-editusercss": "Redigīs CSS zūrbrukins kitēisan tērpautajan",
        "right-edituserjs": "Redigīs JS zūrbrukins kitēisan tērpautajan",
        "right-rollback": "Dīwai etwārtai wartinnais redigīsenin stesse tērpautajan, kawīds redigijja ainuntan pāusan kāigi panzdaums",
        "rcshowhideanons": "$1 anōnimai tērpautajai",
        "rcshowhidepatr": "$1 izbandātai redigīsenei",
        "rcshowhidemine": "$1 majāi redigīsenei",
-       "rclinks": "Waidinnais panzdaumans $1 kitawīdinsnans en panzdaumamans $2 dēinans.<br />$3",
+       "rclinks": "Waidinnais panzdaumans $1 kitawīdinsnans en panzdaumamans $2 dēinans.",
        "diff": "šlaitīn.",
        "hist": "ist.",
        "hide": "Kliptinais",
        "undeleteviewlink": "wīdais",
        "undeleteinvert": "Etwartinnais pazentlisenin",
        "undeletecomment": "Kumentārs:",
-       "undeletedrevisions": "{{PLURAL:$1|1 wersiōni|$1 wersiōnis}} etwārtai wartīntan",
-       "undeletedrevisions-files": "etteīkē di {{PLURAL:$1|1 wersiōnin|$1 wersiōnins}}  be {{PLURAL:$2|1 zūrbrukin|$2 zūrbrukins}}",
-       "undeletedfiles": "ast etteīkuns {{PLURAL:$1|1 zūrbrukin|$1 zūrbrukins}}",
        "cannotundelete": "Etgaūsenis ni izpalla;\nAinunts kits ast jāu etgaūwuns šin pāusan.",
        "undeletedpage": "'''$1 pastāi etwārtai wartīntan'''\n\nJaīs en [[Special:Log/delete|āupausinsenin regīsterin]], kāi widālai panzdaumans āupausinsenins be etteīksenins.",
        "undelete-header": "Jaīs en [[Special:Log/delete|āupausinsenin regīsterin]], kāi widālai panzdaumai āupausintans pāusans.",
        "htmlform-selectorother-other": "Kitā",
        "revdelete-restricted": "ensadinnais arāikinsenins per perwaldītajans",
        "revdelete-unrestricted": "āupausinais arāikinsenins per perwaldītajans",
-       "rightsnone": "(nisātausna)",
-       "revdelete-summary": "kitawīdisnan ebpeisāsenis"
+       "rightsnone": "(nisātausna)"
 }
index fe83af4..c681aba 100644 (file)
        "password-change-forbidden": "تاسې په دې ويکي باندې خپل پټنوم نه شی بدلولی.",
        "login": "ننوتل",
        "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-submit": "گڼون مو جوړ کړئ",
        "right-unblockself": "په خپل ځان بنديز لرې کول",
        "right-protect": "د ژغورنې کچه بدلول او ځوړاوبېزه ژغورلي مخونه سمول",
        "right-editinterface": "د کارن ليدنمخ سمول",
-       "right-editusercssjs": "د نورو کارنانو د CSS او JS (جاوا سکرېپټ) دوتنې سمول",
        "right-editusercss": "د نورو کارنانو د CSS دوتنې سمول",
        "right-edituserjs": "د نورو کارنانو د JS (جاوا سکرېپټ) دوتنې سمول",
        "right-editmyusercss": "خپل د CSS دوتنې سمول",
        "recentchanges-legend-plusminus": "(<em>±123</em>)",
        "recentchanges-submit": "ښکاره کول",
        "rcfilters-filterlist-title": "چاڼگران",
-       "rcfilters-filter-userExpLevel-newcomer-label": "نوي راغلي",
-       "rcfilters-filter-userExpLevel-learner-label": "زده کوونکي",
+       "rcfilters-filter-user-experience-level-newcomer-label": "نوي راغلي",
+       "rcfilters-filter-user-experience-level-learner-label": "زده کوونکي",
        "rcnotefrom": "دلته لاندې د <strong>$2</strong> څخه راپدېخوا پېښ شوي بدلونونه راغلي (تر <strong>$1</strong> پورې ښکاري).",
        "rclistfrom": "نوي بدلونونه چې له $3، $2 څخه پيلېږي ښکاره کول",
        "rcshowhideminor": "وړې سمونې $1",
        "rcshowhidecategorization": "د مخ وېشنيزې $1",
        "rcshowhidecategorization-show": "ښکاره کول",
        "rcshowhidecategorization-hide": "پټول",
-       "rclinks": "هغه وروستي $1 بدلونونه ښکاره کړی چې په $2 ورځو کې پېښ شوي<br />$3",
+       "rclinks": "هغه وروستي $1 بدلونونه ښکاره کړی چې په $2 ورځو کې پېښ شوي",
        "diff": "توپير",
        "hist": "پېښليک",
        "hide": "پټول",
        "undeleteviewlink": "کتل",
        "undeleteinvert": "ټاکنې سرچپه کول",
        "undeletecomment": "سبب:",
-       "undeletedrevisions": "{{PLURAL:$1|1 بڼه بيازېرمه شوه|$1 بڼې بيازېرمې شولې}}",
-       "undeletedfiles": "{{PLURAL:$1|1 دوتنه بيازېرمه شوه|$1 دوتنې بيازېرمه شوې}}",
        "cannotundelete": "ناړنگول نابريال شو:\n$1",
        "undelete-header": "د وروستيو ړنگو شوو مخونو لپاره [[Special:Log/delete|د ړنگولو يادښت]] وگورۍ.",
        "undelete-search-title": "ړنگ شوي مخونه پلټل",
        "log-name-managetags": "د نښلن مهارولو يادښت",
        "log-name-tag": "نښلن يادښت",
        "rightsnone": "(هېڅ)",
-       "revdelete-summary": "لنډيز سمول",
        "feedback-back": "پر شا کېدل",
        "feedback-cancel": "ناگارل",
        "feedback-close": "ترسره شو",
index 035d1ae..a3d14c6 100644 (file)
                        "Joao Xavier",
                        "Nahime2015",
                        "Alex Great",
-                       "EVinente"
+                       "EVinente",
+                       "Felipe L. Ewald",
+                       "WikiUser22222"
                ]
        },
-       "tog-underline": "Sublinhar links:",
+       "tog-underline": "Link sublinhado:",
        "tog-hideminor": "Ocultar edições menores nas mudanças recentes",
        "tog-hidepatrolled": "Ocultar edições patrulhadas nas mudanças recentes",
        "tog-newpageshidepatrolled": "Ocultar páginas patrulhadas da lista de páginas novas",
        "redirectedfrom": "(Redirecionado de $1)",
        "redirectpagesub": "Página de redirecionamento",
        "redirectto": "Redirecionar para:",
-       "lastmodifiedat": "Esta página foi modificada pela última vez à(s) $2 de $1.",
+       "lastmodifiedat": "Esta página foi modificada pela última vez em $1, às $2",
        "viewcount": "Esta página foi acessada {{PLURAL:$1|uma vez|$1 vezes}}.",
        "protectedpage": "Página protegida",
        "jumpto": "Ir para:",
        "viewsource": "Ver código-fonte",
        "viewsource-title": "Exibir código-fonte para $1",
        "actionthrottled": "Ação controlada",
-       "actionthrottledtext": "Como uma medida anti-abuso, você está impedido de realizar esta operação muitas vezes em um curto espaço de tempo, e já excedeu esse limite. Por favor, tente novamente em alguns minutos.",
+       "actionthrottledtext": "Como uma medida anti-abuso, você está impedido de realizar esta operação muitas vezes em um curto espaço de tempo e você excedeu esse limite. Por favor, tente novamente em alguns minutos.",
        "protectedpagetext": "Esta página foi protegida contra novas edições ou ações relacionadas.",
        "viewsourcetext": "Você pode ver e copiar o código desta página.",
        "viewyourtext": "Você pode ver e copiar o código fonte '''das suas edições''' a esta página.",
        "changeemail-newemail": "Novo endereço de e-mail:",
        "changeemail-newemail-help": "Este campo deve ser deixado em branco se você quiser remover o seu endereço de e-mail. Você não será capaz de redefinir uma senha esquecida e não receber e-mails a partir desta wiki se o endereço de email é removido.",
        "changeemail-none": "(nenhum)",
-       "changeemail-password": "Sua senha para o wiki {{SITENAME}}:",
+       "changeemail-password": "Sua senha {{SITENAME}}:",
        "changeemail-submit": "Alterar e-mail",
        "changeemail-throttled": "Você realizou demasiadas tentativas de se registrar.\nPor favor, aguarde $1 antes de tentar novamente.",
        "changeemail-nochange": "Por favor insira um novo endereço de e-mail.",
        "readonlywarning": "'''Aviso: O banco de dados foi bloqueado para manutenção, por isso você não poderá salvar a sua edição neste momento.'''\nTalvez você queira copiar o seu texto num editor externo e guardá-lo, para posterior envio.\n\nQuem bloqueou o banco de dados forneceu a seguinte explicação: $1",
        "protectedpagewarning": "'''Atenção: Esta página foi protegida para que apenas usuários com privilégios de administrador possam editá-la.'''\nA última entrada no histórico é fornecida abaixo como referência:",
        "semiprotectedpagewarning": "'''Nota:''' Esta página foi protegida, sendo que apenas usuários registrados poderão editá-la.\nA última entrada no histórico é fornecida abaixo para referência:",
-       "cascadeprotectedwarning": "<strong>Aviso:</strong> Esta página foi protegida para que somente usuários com privilégios de administrador possam editá-la porque ela é transcluída {{PLURAL:$1|na seguinte página protegida|nas seguintes páginas protegidas}} por cascata:",
+       "cascadeprotectedwarning": "<strong>Aviso:</strong> Esta página foi protegida para que somente usuários com [[Special:ListGroupRights|direitos específicos]] possam editá-la porque ela é transcluída {{PLURAL:$1|na seguinte página protegida|nas seguintes páginas protegidas}} por cascata:",
        "titleprotectedwarning": "'''Atenção: esta página foi protegida; [[Special:ListGroupRights|privilégios específicos]] são necessários para criá-la.'''\nA última entrada no histórico é fornecida abaixo como referência:",
        "templatesused": "{{PLURAL:$1|Predefinição usada|Predefinições usadas}} nesta página:",
        "templatesusedpreview": "{{PLURAL:$1|Predefinição usada|Predefinições usadas}} nesta previsão:",
        "post-expand-template-argument-warning": "Aviso: Esta página contém pelo menos um argumento de predefinição com um tamanho muito grande.\nEstes argumentos foram omitidos.",
        "post-expand-template-argument-category": "Páginas com argumentos de predefinições descartados",
        "parser-template-loop-warning": "Ciclo de predefinições detectado: [[$1]]",
+       "template-loop-category": "Páginas com loops de predefinição",
+       "template-loop-category-desc": "A página contém um loop de predefinição, ou seja, uma predefinição que se chama recursivamente.",
        "parser-template-recursion-depth-warning": "O limite de profundidade de recursividade de predefinição foi ultrapassado ($1)",
        "language-converter-depth-warning": "O limite de profundidade do conversor de línguas excedeu a ($1)",
        "node-count-exceeded-category": "Páginas em que o total de nós é excedido",
        "page_first": "primeira",
        "page_last": "última",
        "histlegend": "Como selecionar: marque as caixas de seleção das versões que deseja comparar e pressione enter ou clique no botão na parte inferior do formulário.<br />\nLegenda: <strong>({{int:cur}})</strong> = diferenças em relação a última versão, <strong>({{int:last}})</strong> = diferenças em relação a versão anterior, <strong>{{int:minoreditletter}}</strong> = edição menor.",
-       "history-fieldset-title": "Navegar pelo histórico",
-       "history-show-deleted": "Apenas as eliminadas",
+       "history-fieldset-title": "Pesquisar revisões",
+       "history-show-deleted": "Apenas as revisões excluídas",
        "histfirst": "Mais antigas",
        "histlast": "Mais novas",
        "historysize": "({{PLURAL:$1|1 byte|$1 bytes}})",
        "saveusergroups": "Salvar grupos de{{GENDER:$1|usuário}}",
        "userrights-groupsmember": "Membro de:",
        "userrights-groupsmember-auto": "Membro implícito de:",
-       "userrights-groups-help": "É possível alterar os grupos em que {{GENDER:$1|este usuário|esta usuária|este(a) usuário(a)}} se encontra:\n* Uma caixa de seleção selecionada significa que {{GENDER:$1|o usuário|a usuária|o(a) usuário(a)}} encontra-se no grupo.\n* Uma caixa de seleção não selecionada significa que {{GENDER:$1|o usuário|a usuária|o(a) usuário(a)}} não se encontra no grupo.\n* Um * indica que não pode remover o grupo depois de o adicionar, ou vice-versa.",
+       "userrights-groups-help": "É possível alterar os grupos em que {{GENDER:$1|este usuário|esta usuária|este(a) usuário(a)}} se encontra:\n* Uma caixa de seleção selecionada significa que {{GENDER:$1|o usuário|a usuária|o(a) usuário(a)}} encontra-se no grupo.\n* Uma caixa de seleção não selecionada significa que {{GENDER:$1|o usuário|a usuária|o(a) usuário(a)}} não se encontra no grupo.\n* Um * indica que não pode remover o grupo depois de o adicionar, ou vice-versa.\n* Um # indica que você só pode atrasar o tempo de expiração dos membros deste grupo; você não pode aumentá-lo.",
        "userrights-reason": "Motivo:",
        "userrights-no-interwiki": "Você não tem permissão para alterar privilégios de usuários em outros wikis.",
        "userrights-nodatabase": "O banco de dados $1 não existe ou não é um banco de dados local.",
        "userrights-expiry-options": "1 dia:1 day,1 semana:1 week,1 mês:1 month,3 meses:3 months,6 meses:6 months,1 ano:1 year",
        "userrights-invalid-expiry": "O tempo de expiração para o grupo \"$1\" é inválido.",
        "userrights-expiry-in-past": "O tempo de expiração para o grupo \"$1\" está no passado.",
-       "userrights-cannot-shorten-expiry": "Você não pode antecipar a expiração do grupo \"$1\". Somente usuários com permissão para adicionar e remover este grupo pode apresentar tempos de expiração.",
+       "userrights-cannot-shorten-expiry": "Você não pode antecipar a expiração dos membros no grupo \"$1\". Somente usuários com permissão para adicionar e remover este grupo podem.",
        "userrights-conflict": "Há um comflito de permissões de usuário! Por favor, revise e confirme as alterações novamente.",
        "group": "Grupo:",
        "group-user": "Usuários",
        "right-editsemiprotected": "Editar páginas protegidas como \"{{int:protect-level-autoconfirmed}}\"",
        "right-editcontentmodel": "Editar o modelo de uma pagina",
        "right-editinterface": "Editar a interface de usuário",
-       "right-editusercssjs": "Editar os arquivos CSS e JS de outros usuários",
        "right-editusercss": "Editar os arquivos CSS de outros usuários",
        "right-edituserjs": "Editar os arquivos JS de outros usuários",
        "right-editmyusercss": "Edite seu próprio arquivo CSS de usuário",
        "rcfilters-invalid-filter": "Filtro inválido",
        "rcfilters-empty-filter": "Nenhum filtro ativo. Todas as contribuições são mostradas.",
        "rcfilters-filterlist-title": "Filtros",
+       "rcfilters-filterlist-whatsthis": "O que é isso?",
        "rcfilters-filterlist-feedbacklink": "Forneça feedback sobre os novos filtros (beta)",
        "rcfilters-highlightbutton-title": "Realçar os resultados",
        "rcfilters-highlightmenu-title": "Selecione uma cor",
+       "rcfilters-highlightmenu-help": "Selecione uma cor para realçar esta propriedade",
        "rcfilters-filterlist-noresults": "Nenhum filtro encontrado",
+       "rcfilters-noresults-conflict": "Nenhum resultado encontrado porque os critérios de pesquisa estão em conflito",
+       "rcfilters-state-message-subset": "Este filtro não tem efeito porque seus resultados estão incluídos com {{PLURAL:$2|o seguinte filtro mais amplo|os seguintes filtros mais amplos}} (tente realçar para distingui-lo): $1",
+       "rcfilters-state-message-fullcoverage": "Selecionar todos os filtros em um grupo é o mesmo que não selecionar nenhum, portanto este filtro não tem efeito. O grupo inclui: $1",
        "rcfilters-filtergroup-registration": "Registro de usuário",
        "rcfilters-filter-registered-label": "Registrado",
        "rcfilters-filter-registered-description": "Editores conectados.",
        "rcfilters-filter-unregistered-label": "Não registrado",
        "rcfilters-filter-unregistered-description": "Editores que não estão conectados.",
+       "rcfilters-filter-unregistered-conflicts-user-experience-level": "Este filtro entra em conflito com {{PLURAL:$2|o seguinte filtro|os seguintes filtros}} de Experiência, que {{PLURAL:$2|encontra|encontram}} somente usuários registrados: $1",
        "rcfilters-filtergroup-authorship": "Editar autoria",
        "rcfilters-filter-editsbyself-label": "Suas próprias edições",
        "rcfilters-filter-editsbyself-description": "Edições por você.",
        "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-filtergroup-user-experience-level-conflicts-unregistered": "Os filtros de experiência encontram apenas usuários registados, assim este filtro entra em conflito com o filtro “Não registado”.",
+       "rcfilters-filtergroup-user-experience-level-conflicts-unregistered-global": "O filtro \"Não Registrado\" entra em conflito com um ou mais filtros de Experiência, que localizam apenas usuários registrados. Os filtros em conflito são marcados na área Filtros Ativos, acima.",
        "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-bots-description": "Edições feitas por ferramentas automatizadas.",
        "rcfilters-filter-humans-label": "Humano (não bot)",
        "rcfilters-filter-humans-description": "Edições feitas por editores humanos.",
+       "rcfilters-filtergroup-reviewstatus": "Estado da revisão",
+       "rcfilters-filter-patrolled-label": "Patrulhado",
+       "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-categorization-description": "Registros de páginas que estão sendo adicionadas ou removidas de categorias.",
        "rcfilters-filter-logactions-label": "Acções registadas",
        "rcfilters-filter-logactions-description": "Ações administrativas, criação de contas, eliminação de páginas, carregamentos ...",
+       "rcfilters-hideminor-conflicts-typeofchange-global": "O filtro \"Edições menores\" conflita com um ou mais filtros de Tipo de Alteração, porque certos tipos de alteração não podem ser designadas como \"menores\". Os filtros em conflito estão marcados na área Filtros Ativos, acima.",
+       "rcfilters-hideminor-conflicts-typeofchange": "Determinados tipos de alteração não podem ser designados como \"menor\", portanto, este filtro entra em conflito com os seguintes filtros de Tipo de Alteração: $1",
+       "rcfilters-typeofchange-conflicts-hideminor": "Este filtro de Tipo de Alteração entra em conflito com o filtro \"Edições menores\". Certos tipos de mudança não podem ser designadas como \"menores\".",
        "rcnotefrom": "Abaixo {{PLURAL:$5|é a mudança|são as mudanças}} desde <strong>$3, $4</strong> (up to <strong>$1</strong> shown).",
+       "rclistfromreset": "Redefinir seleção da data",
        "rclistfrom": "Mostrar as novas alterações a partir das $2 de $3",
        "rcshowhideminor": "$1 edições menores",
        "rcshowhideminor-show": "Exibir",
        "rcshowhidecategorization": "$1 categorização de páginas",
        "rcshowhidecategorization-show": "Exibir",
        "rcshowhidecategorization-hide": "Esconder",
-       "rclinks": "Exibir as $1 mudanças recentes feitas nos últimos $2 dias<br />$3",
+       "rclinks": "Exibir as $1 mudanças recentes feitas nos últimos $2 dias",
        "diff": "dif",
        "hist": "his",
        "hide": "Ocultar",
        "rc-enhanced-expand": "Exibir detalhes",
        "rc-enhanced-hide": "Ocultar detalhes",
        "rc-old-title": "criado originalmente como \"$1\"",
-       "recentchangeslinked": "Alterações relacionadas",
-       "recentchangeslinked-feed": "Alterações relacionadas",
-       "recentchangeslinked-toolbox": "Alterações relacionadas",
-       "recentchangeslinked-title": "Alterações relacionadas com \"$1\"",
+       "recentchangeslinked": "Mudanças relacionadas",
+       "recentchangeslinked-feed": "Mudanças relacionadas",
+       "recentchangeslinked-toolbox": "Mudanças relacionadas",
+       "recentchangeslinked-title": "Mudanças relacionadas com “$1”",
        "recentchangeslinked-summary": "Esta página lista alterações feitas recentemente em páginas com links a uma em específico (ou de membros de uma categoria especificada).\nPáginas de sua [[Special:Watchlist|lista de páginas vigiadas]] são exibidas em '''negrito'''.",
        "recentchangeslinked-page": "Nome da página:",
        "recentchangeslinked-to": "Inversamente, mostrar mudanças nas páginas que contêm ligações para esta",
        "php-uploaddisabledtext": "O envio de arquivos via PHP está desativado.\nVerifique a configuração file_uploads.",
        "uploadscripted": "Este arquivo contém HTML ou código que pode ser erroneamente interpretado por um navegador web.",
        "upload-scripted-pi-callback": "Não é possível fazer upload de um arquivo que contém instruções de processamento de folha de estilo XML.",
+       "upload-scripted-dtd": "Não é possível carregar arquivos SVG que contenham uma declaração DTD não padrão.",
        "uploaded-script-svg": "Encontrado elemento de script \"$1\" no arquivo SVG carregado.",
        "uploaded-hostile-svg": "Encontrado CSS inseguro no elemento de estilo do arquivo SVG carregado.",
        "uploaded-event-handler-on-svg": "Não é permitido configurar atributos que manipulem eventos  <code>$1=\"$2\"</code> em arquivos SVG.",
        "editcomment": "O sumário de edição era: <em>$1</em>.",
        "revertpage": "Foram revertidas as edições de [[Special:Contributions/$2|$2]] ([[User talk:$2|disc]]) para a última versão por [[User:$1|$1]]",
        "revertpage-nouser": "Revertidas as edições de um usuário oculto para a última revisão de {{GENDER:$1|[[User:$1|$1]]}}",
-       "rollback-success": "Foram revertidas as edições de $1, com o conteúdo passando a estar como na última edição de $2.",
+       "rollback-success": "Edições revertidas por {{GENDER:$3|$1}};\nalterado para a última revisão por {{GENDER:$4|$2}}.",
        "rollback-success-notify": "Revertidas as edições de $1;\nMudança para a última revisão de $2. [$3 Mostrar alterações]",
        "sessionfailure-title": "Erro de sessão",
        "sessionfailure": "Foram detetados problemas com a sua sessão;\nEsta ação foi cancelada como medida de proteção contra a intercepção de sessões.\nExperimente usar o botão \"Voltar\" e atualizar a página de onde veio e tente novamente.",
        "undeleteviewlink": "visualizar",
        "undeleteinvert": "Inverter seleção",
        "undeletecomment": "Motivo:",
-       "undeletedrevisions": "$1 {{PLURAL:$1|edição restaurada|edições restauradas}}",
-       "undeletedrevisions-files": "$1 {{PLURAL:$1|edição restaurada|edições restauradas}} e $2 {{PLURAL:$2|arquivo restaurado|arquivos restaurados}}",
-       "undeletedfiles": "{{PLURAL:$1|arquivo restaurado|$1 arquivos restaurados}}",
        "cannotundelete": "Algumas ou todas as restaurações falharam:\n$1",
        "undeletedpage": "'''$1 foi restaurada'''\n\nConsulte o [[Special:Log/delete|registro de eliminações]] para um registro das eliminações e restaurações mais recentes.",
        "undelete-header": "Veja o [[Special:Log/delete|registro de deleções]] para as páginas recentemente eliminadas.",
        "sp-contributions-uploads": "envios",
        "sp-contributions-logs": "registros",
        "sp-contributions-talk": "disc",
-       "sp-contributions-userrights": "gerenciamento de privilégios de usuários",
+       "sp-contributions-userrights": "gerenciamento de privilégios de {{GENDER:$1|usuários}}",
        "sp-contributions-blocked-notice": "Este usuário atualmente está bloqueado. O registro de bloqueio mais recente é fornecido abaixo para referência:",
        "sp-contributions-blocked-notice-anon": "Este endereço IP encontra-se bloqueado.\nSegue, para referência, a entrada mais recente no registro de bloqueios:",
        "sp-contributions-search": "Navegar pelas contribuições",
        "unblocked-id": "O bloqueio de $1 foi removido com sucesso",
        "unblocked-ip": "[[Special:Contributions/$1|$1]] foi desbloqueado.",
        "blocklist": "Usuários bloqueados",
+       "autoblocklist": "Bloqueios automáticos",
+       "autoblocklist-submit": "Pesquisar",
+       "autoblocklist-legend": "Listar bloqueios automáticos",
+       "autoblocklist-localblocks": "{{PLURAL:$1|Bloqueio automático local|Bloqueios automáticos locais}}",
+       "autoblocklist-empty": "A lista de bloqueios automáticos está vazia.",
+       "autoblocklist-otherblocks": "{{PLURAL:$1|Outro bloqueio automático|Outros bloqueios automáticos}}",
        "ipblocklist": "Usuários bloqueados",
        "ipblocklist-legend": "Procurar por um usuário bloqueado",
        "blocklist-userblocks": "Esconder bloqueios de contas",
        "tooltip-pt-mycontris": "Listagem das {{GENDER:|suas}} contribuições",
        "tooltip-pt-anoncontribs": "Uma lista de edições feitas a partir deste endereço de IP",
        "tooltip-pt-login": "Você é encorajado a autenticar-se; no entanto, não é obrigatório",
+       "tooltip-pt-login-private": "Você precisa fazer login para usar esta wiki",
        "tooltip-pt-logout": "Sair",
        "tooltip-pt-createaccount": "É recomendado que você crie uma conta e inicie uma seção; todavia, isto não é obrigatório",
        "tooltip-ca-talk": "Discussão sobre o conteúdo da página",
        "anonymous": "{{PLURAL:$1|Usuário anônimo|Usuários anônimos}} da {{SITENAME}}",
        "siteuser": "{{GENDER:$2|um usuário|uma usuária|um usuário}} da {{SITENAME}} ($1)",
        "anonuser": "usuário anônimo $1 da {{SITENAME}}",
-       "lastmodifiedatby": "Esta página foi modificada pela última vez à(s) $2 de $1 por $3.",
+       "lastmodifiedatby": "Esta página foi editada pela última vez à(s) $2 de $1 por $3.",
        "othercontribs": "Baseado no trabalho de $1.",
        "others": "outros",
        "siteusers": "{{PLURAL:$2|{{GENDER:$1|um usuário}}|$2 usuários}} da {{SITENAME}} ($1)",
        "confirmrecreate-noreason": "{{GENDER:$1|O usuário|A usuário|O(a) usuário(a)}} [[User:$1|$1]] ([[User talk:$1|discussão]]) {{GENDER:$1|eliminou}} esta página depois de ter começado a editá-la. Confirme que deseja recriar a página, por favor.",
        "recreate": "Recriar",
        "unit-pixel": "&nbsp;px",
+       "confirm-purge-title": "Purgar esta página",
        "confirm_purge_button": "OK",
        "confirm-purge-top": "Limpar a memória cache desta página?",
        "confirm-purge-bottom": "Purgar uma página limpa o ''cache'' e força a sua versão mais recente a aparecer.",
        "htmlform-user-not-valid": "<strong>$1</strong> não é um nome de usuário válido.",
        "logentry-delete-delete": "$1 apagou a página $3",
        "logentry-delete-delete_redir": "$1 {{GENDER:$2|eliminou}} o redirecionamento $3, sobrescrevendo-o",
-       "logentry-delete-restore": "$1 restaurou a página $3",
+       "logentry-delete-restore": "$1 {{GENDER:$2|restaurou}} a página $3 ($4)",
+       "logentry-delete-restore-nocount": "$1 {{GENDER:$2|restaurou}} a página $3",
+       "restore-count-revisions": "{{PLURAL:$1|1 revisão|$1 revisões}}",
+       "restore-count-files": "{{PLURAL:$1|1 arquivo|$1 arquivos}}",
        "logentry-delete-event": "$1 alterou a visibilidade {{PLURAL:$5|de uma entrada|de $5 entradas}} do registro $3: $4",
        "logentry-delete-revision": "$1 {{GENDER:$2|alterou}} a visibilidade de {{PLURAL:$5|uma revisão|$5 revisões}} na página $3: $4",
        "logentry-delete-event-legacy": "$1 {{GENDER:$2|alterou}} a visibilidade de entradas de registo em $3",
        "special-characters-group-thai": "Tailandês",
        "special-characters-group-lao": "Laociano",
        "special-characters-group-khmer": "Cambojano",
+       "special-characters-group-canadianaboriginal": "Aborígine Canadense",
        "special-characters-title-endash": "traço",
        "special-characters-title-emdash": "travessão",
        "special-characters-title-minus": "sinal de menos",
        "restrictionsfield-label": "Intervalos IP permitidos:",
        "restrictionsfield-help": "Um endereço IP ou intervalo CIDR por linha. Para ativar tudo, use\n<pre>0.0.0.0/0\n::/0</pre>",
        "revid": "revisão $1",
-       "pageid": "ID da página $1"
+       "pageid": "ID da página $1",
+       "rawhtml-notallowed": "As tags &lt;html&gt; não podem ser usadas fora das páginas normais.",
+       "gotointerwiki": "Saindo {{SITENAME}}",
+       "gotointerwiki-invalid": "O título especificado é invalido.",
+       "gotointerwiki-external": "Você está prestes a sair {{SITENAME}} para visitar [[$2]] que é um site externo.\n\n[$1 Clique aqui para continuar para $1].",
+       "undelete-cantedit": "Você não pode restaurar esta página, porque você não está autorizado a editar esta página.",
+       "undelete-cantcreate": "Você não pode restaurar esta página, pois não há uma página com este nome e você não está autorizado a criar esta página."
 }
index 8905262..4fe5c0e 100644 (file)
        "readonlywarning": "<strong>Atenção: A base de dados foi bloqueada para manutenção, pelo que não poderá gravar as suas edições neste momento.</strong>\nPode, contudo, copiar e colar o seu texto num ficheiro de texto e guardá-lo para mais tarde.\n\nO administrador do sistema que a bloqueou forneceu a seguinte explicação: $1",
        "protectedpagewarning": "'''Aviso: Esta página foi protegida para só poder ser editada por administradores.'''\nO último registo é apresentado abaixo para referência:",
        "semiprotectedpagewarning": "'''Nota:''' Esta página foi protegida de modo a que apenas utilizadores registados a possam editar.\nA última entrada no histórico é fornecida abaixo como referência.",
-       "cascadeprotectedwarning": "<strong>Aviso:</strong> Esta página está protegida de forma que apenas os administradores possam editá-la, porque se encontra transcluída {{PLURAL:$1|na seguinte página protegida|nas seguintes páginas protegidas}} em cascata:",
+       "cascadeprotectedwarning": "<strong>Aviso:</strong> Esta página está protegida de forma que apenas os utilizadores com [[Special:ListGroupRights|privilégios específicos]] possam editá-la, porque se encontra transcluída {{PLURAL:$1|na seguinte página protegida|nas seguintes páginas protegidas}} em cascata:",
        "titleprotectedwarning": "'''Aviso: Esta página foi protegida de forma a que [[Special:ListGroupRights|privilégios específicos]] sejam necessários para criá-la.'''\nPara referência, é apresentada abaixo a última entrada do registo:",
        "templatesused": "{{PLURAL:$1|Predefinição utilizada|Predefinições utilizadas}} nesta página:",
        "templatesusedpreview": "{{PLURAL:$1|Predefinição utilizada|Predefinições utilizadas}} nesta antevisão:",
        "right-editsemiprotected": "Editar páginas protegidas com \"{{int:protect-level-autoconfirmed}}\"",
        "right-editcontentmodel": "Editar o modelo de conteúdo de uma página",
        "right-editinterface": "Editar a interface de utilizador",
-       "right-editusercssjs": "Editar os ficheiros CSS e JS de outros utilizadores",
        "right-editusercss": "Editar os ficheiros CSS de outros utilizadores",
        "right-edituserjs": "Editar os ficheiros JS de outros utilizadores",
        "right-editmyusercss": "Editar os seus próprios ficheiros CSS de utilizador",
        "rcshowhidecategorization": "$1 categorização de páginas",
        "rcshowhidecategorization-show": "Mostrar",
        "rcshowhidecategorization-hide": "Ocultar",
-       "rclinks": "Mostrar as últimas $1 mudanças nos últimos $2 dias<br />$3",
+       "rclinks": "Mostrar as últimas $1 mudanças nos últimos $2 dias",
        "diff": "dif",
        "hist": "his",
        "hide": "Ocultar",
        "undeleteviewlink": "ver",
        "undeleteinvert": "Inverter seleção",
        "undeletecomment": "Motivo:",
-       "undeletedrevisions": "$1 {{PLURAL:$1|edição restaurada|edições restauradas}}",
-       "undeletedrevisions-files": "$1 {{PLURAL:$1|edição restaurada|edições restauradas}} e $2 {{PLURAL:$2|ficheiro restaurado|ficheiros restaurados}}",
-       "undeletedfiles": "{{PLURAL:$1|ficheiro restaurado|$1 ficheiros restaurados}}",
        "cannotundelete": "Algumas ou todas as restaurações falharam:\n$1",
        "undeletedpage": "'''$1 foi restaurada'''\n\nConsulte o [[Special:Log/delete|registo de eliminações]] para um registo das eliminações e restaurações mais recentes.",
        "undelete-header": "Consulte o [[Special:Log/delete|registo de eliminações]] para ver as páginas eliminadas recentemente.",
        "unblocked-id": "O bloqueio de $1 foi removido com sucesso",
        "unblocked-ip": "[[Special:Contributions/$1|$1]] foi desbloqueado.",
        "blocklist": "Utilizadores bloqueados",
+       "autoblocklist": "Bloqueios automáticos",
+       "autoblocklist-submit": "Pesquisar",
+       "autoblocklist-legend": "Lista de bloqueios automáticos",
+       "autoblocklist-localblocks": "{{PLURAL:$1|Bloqueio automático local|Bloqueios automáticos locais}}",
+       "autoblocklist-empty": "A lista de bloqueio automático está vazia.",
+       "autoblocklist-otherblocks": "{{PLURAL:$1|Outro bloqueio automático|Outros bloqueios automáticos}}",
        "ipblocklist": "Utilizadores bloqueados",
        "ipblocklist-legend": "Procurar um utilizador bloqueado",
        "blocklist-userblocks": "Ocultar bloqueios de contas",
        "htmlform-user-not-valid": "<strong>$1</strong> não é um nome de utilizador válido.",
        "logentry-delete-delete": "$1 apagou a página $3",
        "logentry-delete-delete_redir": "$1 {{GENDER:$2|eliminou}} o redirecionamento $3, sobrescrevendo-o",
-       "logentry-delete-restore": "$1 restaurou a página $3",
+       "logentry-delete-restore": "$1 {{GENDER:$2|restaurou}} a página $3 ($4)",
+       "logentry-delete-restore-nocount": "$1 {{GENDER:$2|restaurou}} a página $3",
+       "restore-count-revisions": "{{PLURAL:$1|1 revisão|$1 revisões}}",
+       "restore-count-files": "{{PLURAL:$1|1 ficheiro|$1 ficheiros}}",
        "logentry-delete-event": "$1 alterou a visibilidade de {{PLURAL:$5|uma entrada|$5 entradas}} em $3: $4",
        "logentry-delete-revision": "$1 {{GENDER:$2|alterou}} a visibilidade de {{PLURAL:$5|uma revisão|$5 revisões}} em $3: $4",
        "logentry-delete-event-legacy": "$1 {{GENDER:$2|alterou}} a visibilidade de entradas de registo em $3",
        "special-characters-group-thai": "Tailandês",
        "special-characters-group-lao": "Laociano",
        "special-characters-group-khmer": "Cambojano",
+       "special-characters-group-canadianaboriginal": "Aborígene Canadense",
        "special-characters-title-endash": "hífen",
        "special-characters-title-emdash": "travessão",
        "special-characters-title-minus": "sinal de subtração",
        "restrictionsfield-label": "Gamas de endereços IP permitidas:",
        "restrictionsfield-help": "Um endereço IP ou uma gama CIDR por linha. Para ativar todos,\nuse: <pre>0.0.0.0/0\n::/0</pre>",
        "revid": "revisão $1",
-       "pageid": "identificador de página $1"
+       "pageid": "identificador de página $1",
+       "rawhtml-notallowed": "As etiquetas &lt;html&gt; não podem ser utilizadas fora de páginas normais.",
+       "gotointerwiki": "A sair de {{SITENAME}}",
+       "gotointerwiki-invalid": "O título especificado é inválido.",
+       "gotointerwiki-external": "Está prestes a sair de {{SITENAME}} para visitar [[$2]], que é um sítio web externo.\n\n[$1 Clique aqui para continuar para $1]"
 }
index 444d168..afc9b32 100644 (file)
                        "MarcoAurelio",
                        "Joao Xavier",
                        "Winstonyin",
-                       "Jhertel"
+                       "Jhertel",
+                       "Stryn"
                ]
        },
        "sidebar": "{{notranslate}}",
        "userrights-groupsmember": "Used when editing user groups in [[Special:Userrights]].\n\nThe message is followed by a list of group names.\n\nParameters:\n* $1 - (Optional) the number of items in the list following the message, for PLURAL\n* $2 - (Optional) the user name, for GENDER",
        "userrights-groupsmember-auto": "Used when editing user groups in [[Special:Userrights]]. The message is followed by a list of group names.\n\n\"Implicit\" is for groups that the user was automatically added to (such as \"autoconfirmed\"); cf. {{msg-mw|userrights-groupsmember}}\n\nParameters:\n* $1 - (Optional) the number of items in the list following the message, for PLURAL\n* $2 - (Optional) the user name, for GENDER",
        "userrights-groupsmember-type": "{{optional}}\nParameters:\n* $1 - list of group names\n* $2 - list of group member names. Used with labels {{msg-mw|Userrights-groupsmember}} and {{msg-mw|Userrights-groupsmember-auto}}",
-       "userrights-groups-help": "Instructions displayed on [[Special:UserRights]]. Parameters:\n* $1 - (Optional) a username, can be used for GENDER",
+       "userrights-groups-help": "Instructions displayed on [[Special:UserRights]].  \"Bring forward\" is a phrasal verb meaning \"move to an earlier time\". \"Put back\" means the opposite. Parameters:\n* $1 - (Optional) a username, can be used for GENDER",
        "userrights-reason": "Text beside log field when editing user groups\n\n{{Identical|Reason}}",
        "userrights-no-interwiki": "Error message when editing user groups",
        "userrights-nodatabase": "Error message when editing user groups.\n\n\"Local\" means databases/wikis of the same farm/cluster; that is, meta, enwiki, dewiki, commons, etc are all local databases of the Wikimedia Foundation.\n\nSee [{{canonicalurl:meta:Special:Log|type=rights}} meta:Special:Log?type=rights] for a usage of local databases: username@barwiki\n\nParameters:\n* $1 - database name",
        "right-editsemiprotected": "{{doc-right|editsemiprotected}}\nRefers to {{msg-mw|Protect-level-autoconfirmed}}.\n\nSee also:\n* {{msg-mw|Right-editeditorprotected}}\n* {{msg-mw|Right-editextendedsemiprotected}}\n* {{msg-mw|Right-editprotected}}\n* {{msg-mw|Right-editsemiprotected}}",
        "right-editcontentmodel": "{{doc-right|editcontentmodel}}",
        "right-editinterface": "{{doc-right|editinterface}}",
-       "right-editusercssjs": "{{doc-right|editusercssjs}}",
        "right-editusercss": "{{doc-right|editusercss}}\nSee also:\n* {{msg-mw|Right-editmyusercss}}",
        "right-edituserjs": "{{doc-right|edituserjs}}\nSee also:\n* {{msg-mw|Right-editmyuserjs}}",
        "right-editmyusercss": "{{doc-right|editmyusercss}}\nSee also:\n* {{msg-mw|Right-editusercss}}",
        "rcfilters-filter-registered-label": "Label for the filter for showing edits made by logged-in users.\n{{Identical|Registered}}",
        "rcfilters-filter-registered-description": "Description for the filter for showing edits made by logged-in users.",
        "rcfilters-filter-unregistered-label": "Label for the filter for showing edits made by logged-out users.",
-       "rcfilters-filter-unregistered-description": " Description for the filter for showing edits made by logged-out users.",
+       "rcfilters-filter-unregistered-description": "Description for the filter for showing edits made by logged-out users.",
        "rcfilters-filter-unregistered-conflicts-user-experience-level": "Tooltip shown when hovering over a Unregistered filter tag, when a User Experience Level filter is also selected.\n\n\"Unregistered\" is {{msg-mw|Rcfilters-filter-unregistered-label}}.\n\n\"Experience\" is based on {{msg-mw|Rcfilters-filtergroup-userExpLevel}}.\n\nThis indicates that no results will be shown, because users matched by the User Experience Level groups are never unregistered.  Parameters:\n* $1 - Comma-separated string of selected User Experience Level filters, e.g. \"Newcomer, Experienced\"\n* $2 - Count of selected User Experience Level filters, for PLURAL",
        "rcfilters-filtergroup-authorship": "Title for the filter group for edit authorship. This filter group allows the user to choose between \"Your own edits\" and \"Edits by others\". More info: https://phabricator.wikimedia.org/T149859\n\n{{doc-important|This is another typical example of ambiguity in the English language. Only the documentation will reveal that this message means \"(filter by) authorship of these edits\", not \"edit the authorship\". That is, \"edit\" is a modifying noun, not a verb.}}",
        "rcfilters-filter-editsbyself-label": "Label for the filter for showing edits made by the current user.",
        "rcfilters-hideminor-conflicts-typeofchange": "Tooltip shown when hovering over the Minor edits tag, when a Type of Change filter is also selected.\n\n\"Minor edits\" is {{msg-mw|rcfilters-filter-minor-label}}.\n\n\"Type of change\" is {{msg-mw|rcfilters-filtergroup-changetype}}.\n\nThis indicates that no results will be shown.  Parameters:\n* $1 - Comma-separated string of selected Type of Change filters, e.g. \"Category, Logged Actions\"\n* $2 - Count of selected User Experience Level filters, for PLURAL",
        "rcfilters-typeofchange-conflicts-hideminor": "Tooltip shown when hovering over a Type of change filter tag, when the Minor edits filter is also selected.\n\n\"Minor edits\" is {{msg-mw|rcfilters-filter-minor-label}}.\n\n\"Type of change\" is {{msg-mw|rcfilters-filtergroup-changetype}}.\n\nThis indicates that no results will be shown.",
        "rcnotefrom": "This message is displayed at [[Special:RecentChanges]] when viewing recentchanges from some specific time.\n\nThe corresponding message is {{msg-mw|Rclistfrom}}.\n\nParameters:\n* $1 - the maximum number of changes that are displayed\n* $2 - (Optional) a date and time\n* $3 - a date\n* $4 - a time\n* $5 - Number of changes are displayed, for use with PLURAL",
+       "rclistfromreset": "Used on [[Special:RecentChanges]] to reset a selection of a certain date range.",
        "rclistfrom": "Used on [[Special:RecentChanges]]. Parameters:\n* $1 - (Currently not use) date and time. The date and the time adds to the rclistfrom description.\n* $2 - time. The time adds to the rclistfrom link description (with split of date and time).\n* $3 - date. The date adds to the rclistfrom link description (with split of date and time).\n\nThe corresponding message is {{msg-mw|Rcnotefrom}}.",
        "rcshowhideminor": "Option text in [[Special:RecentChanges]]. Parameters:\n* $1 - the \"show/hide\" command, with the text taken from either {{msg-mw|rcshowhideminor-show}} or {{msg-mw|rcshowhideminor-hide}}\n{{Identical|Minor edit}}",
        "rcshowhideminor-show": "{{doc-actionlink}}\nOption text in [[Special:RecentChanges]] in conjunction with {{msg-mw|rcshowhideminor}}.\n\nSee also:\n* {{msg-mw|rcshowhideminor-hide}}\n{{Identical|Show}}",
        "rcshowhidecategorization": "Option text in [[Special:RecentChanges]]. Parameters:\n* $1 - the \"show/hide\" command, with the text taken from either {{msg-mw|rcshowhidecategorization-show}} or {{msg-mw|rcshowhidecategorization-hide}}",
        "rcshowhidecategorization-show": "{{doc-actionlink}}\nOption text in [[Special:RecentChanges]] in conjunction with {{msg-mw|rcshowhidecategorization}}.\n\nSee also:\n* {{msg-mw|rcshowhidecategorization-hide}}\n{{Identical|show}}",
        "rcshowhidecategorization-hide": "{{doc-actionlink}}\nOption text in [[Special:RecentChanges]] in conjunction with {{msg-mw|rcshowhidecategorization}}.\n\nSee also:\n* {{msg-mw|rcshowhidecategorization-show}}\n{{Identical|hide}}",
-       "rclinks": "Used on [[Special:RecentChanges]].\n* $1 - a list of different choices with number of pages to be shown.<br />&nbsp;Example: \"''50{{int:pipe-separator}}100{{int:pipe-separator}}250{{int:pipe-separator}}500\".\n* $2 - a list of clickable links with a number of days for which recent changes are to be displayed.<br />&nbsp;Example: \"''1{{int:pipe-separator}}3{{int:pipe-separator}}7{{int:pipe-separator}}14{{int:pipe-separator}}30''\".\n* $3 - a block of text that consists of other messages.<br />&nbsp;Example: \"''Hide minor edits{{int:pipe-separator}}Show bots{{int:pipe-separator}}Hide anonymous users{{int:pipe-separator}}Hide logged-in users{{int:pipe-separator}}Hide patrolled edits{{int:pipe-separator}}Hide my edits''\"\nList elements are separated by {{msg-mw|Pipe-separator}} each. Each list element is, or contains, a link.",
+       "rclinks": "Used on [[Special:RecentChanges]].\n* $1 - a list of different choices with number of pages to be shown.<br />&nbsp;Example: \"''50{{int:pipe-separator}}100{{int:pipe-separator}}250{{int:pipe-separator}}500\".\n* $2 - a list of clickable links with a number of days for which recent changes are to be displayed.<br />&nbsp;Example: \"''1{{int:pipe-separator}}3{{int:pipe-separator}}7{{int:pipe-separator}}14{{int:pipe-separator}}30''\".",
        "diff": "Short form of \"differences\". Used on [[Special:RecentChanges]], [[Special:Watchlist]], ...\n{{Identical|Diff}}",
        "hist": "Short form of \"history\". Used on [[Special:RecentChanges]], [[Special:Watchlist]], ...",
        "hide": "{{doc-actionlink}}\nOption text in [[Special:RecentChanges]], and in [[Special:WhatLinksHere]].\n\nSee also:\n* {{msg-mw|Show}}\n{{Identical|Hide}}",
        "php-uploaddisabledtext": "This means that file uploading is disabled in PHP, not upload of PHP-files.",
        "uploadscripted": "Used as error message when uploading a file.\n\nSee also:\n* {{msg-mw|zip-wrong-format}}\n* {{msg-mw|uploadjava}}\n* {{msg-mw|uploadvirus}}",
        "upload-scripted-pi-callback": "Used as error message when uploading an SVG file that contains xml-stylesheet processing instruction.",
+       "upload-scripted-dtd": "Used as an error message when uploading an svg file that contains a DTD declaration where the system identifier of the DTD is for something other than the standard SVG DTDS, or it is a SYSTEM DTD, or the public identifier does not start with -//W3C//. Note that errors related to the internal dtd subset do not use this error message.",
        "uploaded-script-svg": "Used as error message when uploading an SVG file that contains scriptable tags (script, handler, stylesheet, iframe).\n\nParameters:\n* $1 - The scriptable tag that blocked the SVG file from uploading.",
        "uploaded-hostile-svg": "Used as error message when uploading an SVG file that contains unsafe CSS.",
        "uploaded-event-handler-on-svg": "Used as error message when uploading an SVG file that contains event-handler attributes.\n\nParameters:\n* $1 - The event-handler attribute that is being modified in the SVG file.\n* $2 - The value that is given to the event-handler attribute.",
        "undeleteviewlink": "First part of {{msg-mw|undeletelink}}.\nDisplay name of link to view a deleted page used on [[Special:Log/delete]].\n{{Identical|View}}",
        "undeleteinvert": "{{Identical|Invert selection}}",
        "undeletecomment": "{{Identical|Reason}}",
-       "undeletedrevisions": "Used as reason in the log entry. Parameters:\n* $1 - number of revisions\nSee also:\n* {{msg-mw|Undeletedrevisions-files}}\n* {{msg-mw|Undeletedfiles}}",
-       "undeletedrevisions-files": "Used as reason in the log entry. Parameters:\n* $1 - number of revisions\n* $2 - number of files\nSee also:\n* {{msg-mw|Undeletedrevisions}}\n* {{msg-mw|Undeletedfiles}}",
-       "undeletedfiles": "Used as reason in the log entry. Parameters:\n* $1 - number of files\nSee also:\n* {{msg-mw|Undeletedrevisions-files}}\n* {{msg-mw|Undeletedrevisions}}",
        "cannotundelete": "Message shown when undeletion failed for some reason. Parameters:\n* $1 - the combined wikitext of messages for all errors that caused the failure",
        "undeletedpage": "Used as success message. Parameters:\n* $1 - page title, with link",
        "undelete-header": "Used in [[Special:Undelete]].",
        "sp-contributions-suppresslog": "Used as a display name for a link to log entries of suppressed edits made by that user.\n\nUsed as link title in [[Special:Contributions]] and in [[Special:DeletedContributions]]. Parameters:\n* $1 is a plain text username used for GENDER.\nSee also {{msg-mw|sp-contributions-deleted}}, {{msg-mw|sp-deletedcontributions-contribs}}, {{msg-mw|contributions}}, {{msg-mw|deletedcontributions-title}}.",
        "sp-contributions-deleted": "This is a link anchor used in [[Special:Contributions]]/''name'', when user viewing the page has the right to delete pages, or to restore deleted pages.\n\nUsed as link title in [[Special:Contributions]]. Parameters:\n* $1 is a plain text username used for GENDER.\nSee also:\n* {{msg-mw|Sp-contributions-talk}}\n* {{msg-mw|Change-blocklink}}\n* {{msg-mw|Unblocklink}}\n* {{msg-mw|Blocklink}}\n* {{msg-mw|Sp-contributions-blocklog}}\n* {{msg-mw|Sp-contributions-uploads}}\n* {{msg-mw|Sp-contributions-logs}}\n* {{msg-mw|Sp-contributions-userrights}}",
        "sp-contributions-uploads": "Used as link title in [[Special:Contributions]] and in [[Special:DeletedContributions]].\n\nSee also:\n* {{msg-mw|Sp-contributions-talk}}\n* {{msg-mw|Change-blocklink}}\n* {{msg-mw|Unblocklink}}\n* {{msg-mw|Blocklink}}\n* {{msg-mw|Sp-contributions-blocklog}}\n* {{msg-mw|Sp-contributions-logs}}\n* {{msg-mw|Sp-contributions-deleted}}\n* {{msg-mw|Sp-contributions-userrights}}\n{{Identical|Upload}}",
-       "sp-contributions-logs": "Appears as an action link in the header of the Special:Contributions/''Username'' pages (e.g. \"For Somebody (talk | block log | logs)\").\n\nUsed as link title in [[Special:Contributions]] and in [[Special:DeletedContributions]].\n\nSee also:\n* {{msg-mw|Sp-contributions-talk}}\n* {{msg-mw|Change-blocklink}}\n* {{msg-mw|Unblocklink}}\n* {{msg-mw|Blocklink}}\n* {{msg-mw|Sp-contributions-blocklog}}\n* {{msg-mw|Sp-contributions-uploads}}\n* {{msg-mw|Sp-contributions-deleted}}\n* {{msg-mw|Sp-contributions-userrights}}\n{{Identical|Log}}",
-       "sp-contributions-talk": "This is a link anchor used in the [[Special:Contributions]]/''usernamename'' pages.\nThe link appears in a list of similar ones separated by {{msg-mw|pipe-separator}}, e.g. like this:<br />\n( talk | block log | logs | deleted contributions | rights management )\n\nUsed as link title in [[Special:Contributions]] and in [[Special:DeletedContributions]].\n\nSee also:\n* {{msg-mw|change-blocklink}}\n* {{msg-mw|unblocklink}}\n* {{msg-mw|blocklink}}\n* {{msg-mw|sp-contributions-blocklog}}\n* {{msg-mw|sp-contributions-uploads}}\n* {{msg-mw|sp-contributions-logs}}\n* {{msg-mw|sp-contributions-deleted}}\n* {{msg-mw|sp-contributions-userrights}}\n{{Identical|Talk}}",
-       "sp-contributions-userrights": "This is a link anchor used in [[Special:Contributions]]/''name'', if the user viewing the page has the right to set or alter user rights.\n\nUsed as link title in [[Special:Contributions]] and in [[Special:DeletedContributions]].\n\nSee also:\n* {{msg-mw|Sp-contributions-talk}}\n* {{msg-mw|Change-blocklink}}\n* {{msg-mw|Unblocklink}}\n* {{msg-mw|Blocklink}}\n* {{msg-mw|Sp-contributions-blocklog}}\n* {{msg-mw|Sp-contributions-uploads}}\n* {{msg-mw|Sp-contributions-logs}}\n* {{msg-mw|Sp-contributions-deleted}}",
+       "sp-contributions-logs": "Appears as an action link in the header of the [[Special:Contributions]]/''username'' pages (e.g. \"For Somebody (talk | block log | logs)\").\n\nUsed as link title in [[Special:Contributions]] and in [[Special:DeletedContributions]].\n\nSee also:\n* {{msg-mw|Sp-contributions-talk}}\n* {{msg-mw|Change-blocklink}}\n* {{msg-mw|Unblocklink}}\n* {{msg-mw|Blocklink}}\n* {{msg-mw|Sp-contributions-blocklog}}\n* {{msg-mw|Sp-contributions-uploads}}\n* {{msg-mw|Sp-contributions-deleted}}\n* {{msg-mw|Sp-contributions-userrights}}\n{{Identical|Log}}",
+       "sp-contributions-talk": "This is a link anchor used in the [[Special:Contributions]]/''username'' pages.\nThe link appears in a list of similar ones separated by {{msg-mw|pipe-separator}}, e.g. like this:<br />\n( talk | block log | logs | deleted contributions | rights management )\n\nUsed as link title in [[Special:Contributions]] and in [[Special:DeletedContributions]].\n\nSee also:\n* {{msg-mw|change-blocklink}}\n* {{msg-mw|unblocklink}}\n* {{msg-mw|blocklink}}\n* {{msg-mw|sp-contributions-blocklog}}\n* {{msg-mw|sp-contributions-uploads}}\n* {{msg-mw|sp-contributions-logs}}\n* {{msg-mw|sp-contributions-deleted}}\n* {{msg-mw|sp-contributions-userrights}}\n{{Identical|Talk}}",
+       "sp-contributions-userrights": "This is a link anchor used in [[Special:Contributions]]/''username'' if the user viewing the page has the right to set or alter user rights.\n\nUsed as link title in [[Special:Contributions]] and in [[Special:DeletedContributions]]. Parameters:\n* $1 is a plain text username used for GENDER.\nSee also:\n* {{msg-mw|Sp-contributions-talk}}\n* {{msg-mw|Change-blocklink}}\n* {{msg-mw|Unblocklink}}\n* {{msg-mw|Blocklink}}\n* {{msg-mw|Sp-contributions-blocklog}}\n* {{msg-mw|Sp-contributions-uploads}}\n* {{msg-mw|Sp-contributions-logs}}\n* {{msg-mw|Sp-contributions-deleted}}",
        "sp-contributions-blocked-notice": "Shown on top of contributions special page of currently blocked users.\n\nParameters:\n* $1 - (Optional) the blocked user. Can be used for GENDER\nAnon version:\n* {{msg-mw|Sp-contributions-blocked-notice-anon}}",
        "sp-contributions-blocked-notice-anon": "Same as {{msg-mw|Sp-contributions-blocked-notice}} but for anonymous users.",
        "sp-contributions-search": "Used on [[Special:Contributions]]",
        "unblocked-id": "Used in [[Special:Unblock]]. Parameters:\n* $1 - autoblock ID\nSee also:\n* {{msg-mw|Unblocked}}\n* {{msg-mw|Unblocked-range}}",
        "unblocked-ip": "{{doc-important|Do not translate the title \"Special:Contributions\".}}\nParameters:\n* $1 - the IP address that was unblocked\nSee also:\n* {{msg-mw|Unblocked-range}}\n* {{msg-mw|Unblocked-id}}\n*{{msg-mw|Unblocked}}",
        "blocklist": "{{doc-special|BlockList}}",
+       "autoblocklist": "Title of [[Special:AutoblockList]].",
+       "autoblocklist-submit": "Used as Submit button text in the form on [[Special:AutoblockList]].\n\nSee also:\n* {{msg-mw|Ipblocklist-legend}}\n* {{msg-mw|Autoblocklist-submit}}\n{{Identical|Search}}",
+       "autoblocklist-legend": "Used as legend of the form in [[Special:AutoblockList]].\n\nSee also:\n* {{msg-mw|Autoblocklist-legend}}\n* {{msg-mw|Autoblocklist-submit}}",
+       "autoblocklist-localblocks": "[[File:Special AutoBlockList new.png|thumb|Example]]\nUsed on [[Special:AutoblockList]] as header when global autoblocks exists too.",
+       "autoblocklist-empty": "Used in [[Special:AutoblockList]].",
+       "autoblocklist-otherblocks": "[[File:Special AutoBlockList new.png|thumb|Example]]\nUsed on [[Special:AutoblockList]] as header for other blocks, i.e. from GlobalBlocking or TorBlocks.\n\nParameters:\n* $1 - number of blocks",
        "ipblocklist": "Title of [[Special:Ipblocklist]].",
        "ipblocklist-legend": "Used as legend of the form in [[Special:BlockList]].\n\nSee also:\n* {{msg-mw|Ipblocklist-legend}}\n* {{msg-mw|Ipblocklist-submit}}",
        "blocklist-userblocks": "Used as the label for the multi-select checkbox in the form on [[Special:BlockList]].\n{{Related|Blocklist-blocks}}",
        "accesskey-pt-mycontris": "{{doc-accesskey}}\nSee also:\n* {{msg-mw|Mycontris}}\n* {{msg-mw|Accesskey-pt-mycontris}}\n* {{msg-mw|Tooltip-pt-mycontris}}",
        "accesskey-pt-anoncontribs": "{{doc-accesskey}}\nSee also:\n* {{msg-mw|Anoncontribs}}\n* {{msg-mw|Tooltip-pt-anoncontribs}}",
        "accesskey-pt-login": "{{doc-accesskey}}",
+       "accesskey-pt-login-private": "{{doc-accesskey}}",
        "accesskey-pt-logout": "{{doc-accesskey}}\nSee also:\n* {{msg-mw|Logout}}\n* {{msg-mw|Accesskey-pt-logout}}\n* {{msg-mw|Tooltip-pt-logout}}",
        "accesskey-pt-createaccount": "{{doc-accesskey}}",
        "accesskey-ca-talk": "{{doc-accesskey}}\nSee also:\n* {{msg-mw|Talk}}\n* {{msg-mw|Accesskey-ca-talk}}\n* {{msg-mw|Tooltip-ca-talk}}",
        "tooltip-pt-mycontris": "Tooltip shown when hovering over the {{msg-mw|Mycontris}} link in your personal toolbox (upper right side).\n\nSee also:\n* {{msg-mw|Mycontris}}\n* {{msg-mw|Accesskey-pt-mycontris}}\n* {{msg-mw|Tooltip-pt-mycontris}}",
        "tooltip-pt-anoncontribs": "Tooltip shown when hovering over the {{msg-mw|Anoncontribs}} link in your personal toolbox (upper right side).\n\nSee also:\n* {{msg-mw|Anoncontribs}}\n* {{msg-mw|Accesskey-pt-anoncontribs}}",
        "tooltip-pt-login": "Tooltip shown when hovering over the link 'Log in' in the upper right corner show on all pages while not logged in.",
+       "tooltip-pt-login-private": "Tooltip shown when hovering over the link 'Log in' in the upper right corner show on all pages while not logged in, and wiki is private.",
        "tooltip-pt-logout": "Tooltip shown when hovering over the {{msg-mw|Logout}} link in your personal toolbox (upper right side).\n\nSee also:\n* {{msg-mw|Logout}}\n* {{msg-mw|Accesskey-pt-logout}}\n* {{msg-mw|Tooltip-pt-logout}}\n{{Identical|Log out}}",
        "tooltip-pt-createaccount": "Tooltip shown when hovering over the link 'Create account' in the upper right corner show on all pages while not logged in.",
        "tooltip-ca-talk": "Tooltip shown when hovering over the {{msg-mw|Talk}} tab.\n\nA 'content page' is a page that forms part of the purpose of the wiki. It includes the main page and pages in the main namespace and any other namespaces that are included when the wiki is customised. For example on Wikimedia Commons 'content pages' include pages in the file and category namespaces. On Wikinews 'content pages' include pages in the Portal namespace. For a technical definition of 'content namespaces' see [[mw:Manual:Using_custom_namespaces#Content_namespaces|MediaWiki]].\n\nPossible alternatives to the word 'content' are 'subject matter' or 'wiki subject' or 'wiki purpose'.\n\nSee also:\n* {{msg-mw|Talk}}\n* {{msg-mw|Accesskey-ca-talk}}\n* {{msg-mw|Tooltip-ca-talk}}\n{{Identical|Content page}}",
        "confirmrecreate-noreason": "Followed by the checkbox which has the label {{msg-mw|Recreate}}.\n\nParameters:\n* $1 - username, also used for GENDER support\n* $2 - (Unused) reason\nSee also:\n* {{msg-mw|Confirmrecreate}}",
        "recreate": "Text shown when the editor fails to save the page due to it having been deleted since they opened VE. $1 is the message {{msg-mw|ooui-dialog-process-continue}}.",
        "unit-pixel": "{{optional}}\npx is the abbreviation for \"pixel\".",
+       "confirm-purge-title": "Title for the confirmation form that appears when the user is about to purge the page.",
        "confirm_purge_button": "Used as Submit button text.\n{{Identical|OK}}",
        "confirm-purge-top": "Used as confirmation message.",
        "confirm-purge-bottom": "Additional description for Purge form.",
        "rawmessage": "{{notranslate}} Used to pass arbitrary text as a message specifier array",
        "logentry-delete-delete": "{{Logentry|[[Special:Log/delete]]}}",
        "logentry-delete-delete_redir": "{{Logentry|[[Special:Log/delete]]}}",
-       "logentry-delete-restore": "{{Logentry|[[Special:Log/delete]]}}",
+       "logentry-delete-restore": "{{Logentry|[[Special:Log/delete]]}}\n* $4 - {{msg-mw|restore-count-revisions}} or/and {{msg-mw|restore-count-files}}",
+       "logentry-delete-restore-nocount": "{{Logentry|[[Special:Log/delete]]}}",
+       "restore-count-revisions": "Used as parameter in {{msg-mw|logentry-delete-restore}}\n{{Identical|Revision}}",
+       "restore-count-files": "Used as parameter in {{msg-mw|logentry-delete-restore}}\n{{Identical|File}}",
        "logentry-delete-event": "{{Logentry|[[Special:Log/delete]]}}\n{{Logentryparam}}\n* $5 - count of affected log events",
        "logentry-delete-revision": "{{Logentry|[[Special:Log/delete]]}}\n{{Logentryparam}}\n* $5 - the number of affected revisions of the page $3",
        "logentry-delete-event-legacy": "{{Logentry|[[Special:Log/delete]]}}",
        "special-characters-group-thai": "The name of the [[w:Thai alphabet|Thai]] character set (alphabet).",
        "special-characters-group-lao": "{{Identical|Lao}}",
        "special-characters-group-khmer": "{{Identical|Khmer}}",
+       "special-characters-group-canadianaboriginal": "The name of the [[w:Canadian Aboriginal syllabics|Canadian Aboriginal]] character set (alphabet).",
        "special-characters-title-endash": "Title tooltip for the en dash character (–); See https://en.wikipedia.org/wiki/Dash",
        "special-characters-title-emdash": "Title tooltip for the em dash character (—); See https://en.wikipedia.org/wiki/Dash",
        "special-characters-title-minus": "Title tooltip for the minus sign character (−), not to be confused with a hyphen",
        "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.",
-       "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."
+       "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.",
+       "gotointerwiki": "{{doc-special|GoToInterwiki}}\n\nSpecial:GoToInterwiki is a warning page displayed before redirecting users to external interwiki links. Its triggered by people going to something like [[Special:Search/google:foo]].",
+       "gotointerwiki-invalid": "Message shown on Special:GoToInterwiki if given an invalid title.",
+       "gotointerwiki-external": "Message shown on Special:GoToInterwiki if given a external interwiki link (e.g. [[Special:GoToInterwiki/Google:Foo]]). $1 is the full url the user is trying to get to. $2 is the text of the interwiki link (e.g. \"Google:foo\").",
+       "undelete-cantedit": "Shown if the user tries to undelete a page that they cannot edit",
+       "undelete-cantcreate": "Shown if the user tries to undelete a page which currently does not exist, and they are not allowed to create it. This could for example happen on a wiki with custom protection levels where the page name has been create-protected and the user has the right to undelete but not the right to edit protected pages."
 }
index f6c2945..0bb08a3 100644 (file)
        "right-editprotected": "Amachasqa p'anqakunata \"{{int:protect-level-sysop}}\" hina llamk'apuy",
        "right-editsemiprotected": "\"{{int:protect-level-autoconfirmed}}\" hina amachasqa p'anqakunata llamk'apuy",
        "right-editinterface": "Ruraqpaq uyapurata llamk'apuy",
-       "right-editusercssjs": "Huk ruraqkunap CSS, JS willañiqinkunata llamk'apuy",
        "right-editusercss": "Huk ruraqkunap CSS willañiqinkunata llamk'apuy",
        "right-edituserjs": "Huk ruraqkunap JS willañiqinkunata llamk'apuy",
        "right-editmyusercss": "Kikiykip ruraqpaq CSS willañiqiykikunata llamk'apuy",
        "rcshowhidemine": "$1 llamk'apusqaykunata",
        "rcshowhidemine-show": "Rikuchiy",
        "rcshowhidemine-hide": "Pakay",
-       "rclinks": "Qhipaq $1 hukchasqata qhipaq $2 p'unchawmanta qhaway.<br />$3",
+       "rclinks": "Qhipaq $1 hukchasqata qhipaq $2 p'unchawmanta qhaway.",
        "diff": "dif",
        "hist": "wñka",
        "hide": "pakay",
        "undeleteviewlink": "qhaway",
        "undeleteinvert": "Akllasqantinta t'ikrachiy",
        "undeletecomment": "Kayrayku:",
-       "undeletedrevisions": "{{PLURAL:$1|Huk paqarichisqa llamk'apusqa|$1 paqarichisqa llamk'apusqakuna}}",
-       "undeletedrevisions-files": "{{PLURAL:$1|1 llamk'apusqaqa|$1 llamk'apusqakunaqa}} {{PLURAL:$2|1 willañiqipas|$2 willañiqikunapas}} paqarichisqam",
-       "undeletedfiles": "{{PLURAL:$1|1 willañiqiqa|$1 willañiqikunaqa}} paqarichisqam",
        "cannotundelete": "Manam atinichu qullusqata paqarichiyta: $1",
        "undeletedpage": "'''$1 nisqaqa paqarichisqañam'''\n\n[[Special:Log/delete|Qulluy hallch'api]] qhaway ñaqha qullusqakunata paqarichisqakunatapas rikunaykipaq.",
        "undelete-header": "[[Special:Log/delete|Qulluy hallch'apiqa]] qullusqa p'anqakunap sutinkunatam rikunki.",
index e1c2830..c6ab518 100644 (file)
        "yourpasswordagain": "Yaykunapak rimayta kutin killkapay:",
        "login": "Yaykuna",
        "nav-login-createaccount": "Yaykuna",
-       "userlogin": "Yaykuna",
        "logout": "Llukshina",
        "userlogout": "Llukshina",
-       "nologin": "Mana rurak shutita charinchu ? '''$1'''.",
-       "nologinlink": "Shuk rurak shutita akllana",
        "createaccount": "Shuk rurak shutita akllana",
-       "gotaccount": "Ñachu rurak shutita charinchu ? '''$1'''.",
-       "gotaccountlink": "Yaykuna",
-       "userlogin-resetlink": "Kikinpa yaykunaman yuyaykunata kunkapankichu ?",
        "mailmypassword": "Musuq yaykunkapak rimayta e-chaskiwan kachawapay",
        "loginlanguagelabel": "Shimi: $1",
        "bold_sample": "Yanayashka killka",
        "rcshowhideanons": "Mana shutiyuk rurakkunata $1",
        "rcshowhidepatr": "rikushka mushuk killkaykunata $1",
        "rcshowhidemine": "Ñukapa killkaykunata $1",
-       "rclinks": "Ashtawan mushuk $1 killkaykunata, yallishka $2 punchapi rikuna.<br />$3",
+       "rclinks": "Ashtawan mushuk $1 killkaykunata, yallishka $2 punchapi rikuna.",
        "diff": "dif",
        "hist": "wñka",
        "hide": "Pakana",
index 6d75ded..05d40f1 100644 (file)
        "rcshowhideliu": "$1 i patàca registrè",
        "rcshowhideanons": "$1 navigador anònim",
        "rcshowhidemine": "$1 völt a j ò scrètt",
-       "rclinks": "Fam avdè la lèsta d'j $1 cambiamént int j ultum $2 dé<br />$3",
+       "rclinks": "Fam avdè la lèsta d'j $1 cambiamént int j ultum $2 dé",
        "diff": "dif.",
        "hist": "cron",
        "hide": "Ardòpa",
index 8d629e5..1a2dec3 100644 (file)
        "rcshowhideanons": "$1 users war twasnen",
        "rcshowhidepatr": "Tiẓṛigin ig itwaẓrent di $1",
        "rcshowhidemine": "$1 tiẓṛigin inu",
-       "rclinks": "Ẓar $1 tiẓṛigin tinggura di $2 n ussan inggura <br />$3",
+       "rclinks": "Ẓar $1 tiẓṛigin tinggura di $2 n ussan inggura",
        "diff": "imṣebḍan",
        "hist": "Amezruy",
        "hide": "Snuffar",
index 36a1485..79ab2bd 100644 (file)
        "right-protect": "Midar il livel da protecziun e modifitgar paginas protegidas",
        "right-editprotected": "Modifitgar paginas protegidas cun «{{int:protect-level-sysop}}»",
        "right-editinterface": "Modifitgar l'interfascha per l'utilisader",
-       "right-editusercssjs": "Modifitgar datotecas da CSS e JavaScript d'auters utilisaders",
        "right-editusercss": "Modifitgar datotecas da CSS d'auters utilisaders",
        "right-edituserjs": "Modifitgar datotecas da JavaScript d'auters utilisaders",
        "right-rollback": "Revocar svelt las modificaziuns da l'ultim utilisader che ha modifitgà ina pagina particulara.",
        "rcshowhidemine": "$1 mias midadas",
        "rcshowhidemine-show": "Mussar",
        "rcshowhidemine-hide": "Zuppentar",
-       "rclinks": "Mussar las davosas $1 midadas dals ultims $2 dis<br />$3",
+       "rclinks": "Mussar las davosas $1 midadas dals ultims $2 dis",
        "diff": "diff",
        "hist": "ist",
        "hide": "Zuppentar",
        "undeleteviewlink": "contemplar",
        "undeleteinvert": "Invertar la selecziun",
        "undeletecomment": "Motiv:",
-       "undeletedrevisions": "Restituì {{PLURAL:$1|1 versiun|$1 versiuns}}",
-       "undeletedrevisions-files": "Restituì {{PLURAL:$1|1 versiun|$1 versiuns}} e {{PLURAL:$2|1 datoteca|$2 datotecas}}",
-       "undeletedfiles": "Restituì {{PLURAL:$1|1 datoteca|$1 datotecas}}",
        "cannotundelete": "Errur cun restaurar:\n$1",
        "undeletedpage": "'''$1 è vegnì restaurà'''\n\nConsultescha il [[Special:Log/delete|protocol d'eliminaziuns]] per retschaiver ina survista da las ultimas paginas stizzadas u restauradas.",
        "undelete-header": "Legia il [[Special:Log/delete|protocol d'eliminaziuns]] per retschaiver ina survista da las ultimas paginas stizzadas u restauradas.",
index fe972e0..313aef4 100644 (file)
        "rcshowhideanons": "$1 bijangle jene",
        "rcshowhidepatr": "$1 dikhle paruvimata",
        "rcshowhidemine": "$1 mire editisaripena",
-       "rclinks": "Dikh le palutne $1 paruvimata andar le palutne $2 divesa.<br />$3",
+       "rclinks": "Dikh le palutne $1 paruvimata andar le palutne $2 divesa.",
        "diff": "ververipen",
        "hist": "puranipen",
        "hide": "garav",
index 3f8d740..d38328a 100644 (file)
@@ -30,7 +30,8 @@
                        "Wintereu",
                        "Rsocol",
                        "Nemo bis",
-                       "Turbojet"
+                       "Turbojet",
+                       "Stephanecbisson"
                ]
        },
        "tog-underline": "Sublinierea legăturilor:",
        "right-editsemiprotected": "Modifică pagini protejate ca „{{int:protect-level-autoconfirmed}}”",
        "right-editcontentmodel": "Modifică modelul de conținut al unei pagini",
        "right-editinterface": "Modifică interfața cu utilizatorul",
-       "right-editusercssjs": "Modifică fișierele CSS și JS ale altor utilizatori",
        "right-editusercss": "Modifică fișierele CSS ale altor utilizatori",
        "right-edituserjs": "Modifică fișierele JS ale altor utilizatori",
        "right-editmyusercss": "Modificați-vă propriile fișiere CSS",
        "rcshowhidecategorization": "$1 categorisirea paginilor",
        "rcshowhidecategorization-show": "Arată",
        "rcshowhidecategorization-hide": "Ascunde",
-       "rclinks": "Se arată ultimele $1 modificări din ultimele $2 zile.<br />\n$3",
+       "rclinks": "Se arată ultimele $1 modificări din ultimele $2 zile.",
        "diff": "dif",
        "hist": "ist",
        "hide": "Ascunde",
        "undeleteviewlink": "vezi",
        "undeleteinvert": "Exclude spațiul",
        "undeletecomment": "Motiv:",
-       "undeletedrevisions": "{{PLURAL:$1|o versiune restaurată|$1 versiuni restaurate|$1 de versiuni restaurate}}",
-       "undeletedrevisions-files": "{{PLURAL:$1|O versiune|$1 versiuni|$1 de versiuni}} și {{PLURAL:$2|un fișier|$2 fișiere|$2 de fișiere}} recuperate",
-       "undeletedfiles": "{{PLURAL:$1|O versiune recuperată|$1 versiuni recuperate|$1 de versiuni recuperate}}",
        "cannotundelete": "Recuperarea a eșuat:\n$1",
        "undeletedpage": "'''$1 a fost recuperat'''\n\nConsultați [[Special:Log/delete|jurnalul ștergerilor]] pentru a vedea toate ștergerile și recuperările recente.",
        "undelete-header": "Consultați [[Special:Log/delete|jurnalul de ștergeri]] pentru paginile șterse recent.",
index 91a53d6..c2b315e 100644 (file)
        "createacct-reason-ph": "Purcé tu ste ccreje 'n'otre cunde utende?",
        "createacct-submit": "Ccreje 'u cunde utende tune",
        "createacct-another-submit": "Ccreje 'nu cunde utende",
+       "createacct-continue-submit": "Condinue 'a ccrejazzione de l'utende",
+       "createacct-another-continue-submit": "Condinue 'a ccrejazzione de l'utende",
        "createacct-benefit-heading": "{{SITENAME}} jè fatte da crestiane cumme a te.",
        "createacct-benefit-body1": "{{PLURAL:$1|cangiamende|cangiaminde}}",
        "createacct-benefit-body2": "{{PLURAL:$1|pàgene|pàggene}}",
        "botpasswords-label-cancel": "Annulle",
        "botpasswords-label-delete": "Scangìlle",
        "botpasswords-label-resetpassword": "Azzere 'a passuord",
+       "botpasswords-label-grants-column": "Assegnazziune",
        "botpasswords-created-title": "Passuord d'u bot ccrejate",
        "botpasswords-updated-title": "Passuord d'u bot cangiate",
        "botpasswords-deleted-title": "Passuord d'u bot scangellate",
        "passwordreset-emailtext-user": "L'utende $1 sus a {{SITENAME}} ave richieste 'na mail pe arrecurdarse le dettaglie d'u cunde sue pe {{SITENAME}}\n($4). {{PLURAL:$3|'U cunde utende seguende jè|le cunde utinde seguende sonde}} associate cu st'indirizze e-mail:\n\n$2\n\n{{PLURAL:$3|Sta passuord temboranèe scade|Ste passuord temboranèe scadene}}  'mbrà {{PLURAL:$5|'nu sciurne|$5 sciurne}}.\nTu avissa trasè e scacchià 'na passuord nova. Ce quacchedun'otre ha fatte sta richieste, o ce tu t'è arrecurdate 'a passuord origgenale toje, e non g'a vuè ccu cange cchiù, tu puè ignorà stu messagge e condinuà ausanne 'a passuord vecchie.",
        "passwordreset-emailelement": "Nome utende: \n$1\n\nPassuord temboranèe: \n$2",
        "passwordreset-emailsentemail": "Ce queste éte 'n'e-mail pu cunde tune, allore 'na password azzerate ha state mannate addà.",
+       "passwordreset-nocaller": "'Nu chiamande adda essere mise",
+       "passwordreset-nosuchcaller": "'U chiamande nnon g'esiste: $1",
        "changeemail": "Cange o live 'u 'ndirizze e-mail",
        "changeemail-header": "Comblete stu module pe cangià 'u 'ndirizze email. Ce tu vuè ccu live l'associazione cu ogne indirizze email da 'u cunde tune, lasse 'u 'ndirizze email vacande quanne conferme 'u module.",
        "changeemail-no-info": "Tu a essere collegate pe accedere a sta pàgene direttamende.",
        "right-editsemiprotected": "Cange le pàggene prutette cumme a \"{{int:protect-level-autoconfirmed}}\"",
        "right-editcontentmodel": "Cange 'u modelle de condenute de 'na pàgene",
        "right-editinterface": "Cange l'inderfacce utende",
-       "right-editusercssjs": "Cange 'u CSS e 'u JS de l'otre utinde",
        "right-editusercss": "Cange 'u CSS de l'otre utinde",
        "right-edituserjs": "Cange 'u JS de l'otre utinde",
        "right-editmyusercss": "Cange le file tune de CSS",
        "rcshowhidemine": "$1 cangiaminde mie",
        "rcshowhidemine-show": "Fà vedè",
        "rcshowhidemine-hide": "Scunne",
-       "rclinks": "Vide l'urteme $1 cangiaminde jndr'à l'urteme $2 sciurne<br />$3",
+       "rclinks": "Vide l'urteme $1 cangiaminde jndr'à l'urteme $2 sciurne",
        "diff": "diff",
        "hist": "cunde",
        "hide": "Scunne",
        "undeleteviewlink": "vide",
        "undeleteinvert": "Selezione a smerse",
        "undeletecomment": "Mutive:",
-       "undeletedrevisions": "{{PLURAL:$1|1 revisione|$1 revisiune}} ripristinete",
-       "undeletedrevisions-files": "{{PLURAL:$1|1 revisione|$1 revisiune}} e {{PLURAL:$2|1 file|$2 file}} ripristinete",
-       "undeletedfiles": "{{PLURAL:$1|1 file|$1 file}} ripristinete",
        "cannotundelete": "Repristine fallite:\n$1",
        "undeletedpage": "'''$1 ha state repristinate'''\n\nLigge l'[[Special:Log/delete|archivije de le scangellaminde]] pe 'nu report de le urteme scangellaminde e repristinaminde.",
        "undelete-header": "Vide [[Special:Log/delete|l'archivije de le scangellaminde]] pe l'urteme pàggene scangellete.",
        "htmlform-user-not-exists": "<strong>$1</strong> non g'esiste.",
        "htmlform-user-not-valid": "<strong>$1</strong> non g'è 'nu nome utende valide.",
        "logentry-delete-delete": "$1 pàgena {{GENDER:$2|scangellate}} $3",
-       "logentry-delete-restore": "$1 pàgena {{GENDER:$2|repristinate}} $3",
+       "logentry-delete-restore": "$1 pàgena {{GENDER:$2|repristinate}} $3 ($4)",
+       "logentry-delete-restore-nocount": "$1 {{GENDER:$2|repristinate}} pàgene $3",
        "logentry-delete-event": "$1 {{GENDER:$2|cangiate}} 'a vesibbilità {{PLURAL:$5|de l'archivije de le fatte|$5 de l'archivije de le fatte}} sus 'a $3: $4",
        "logentry-delete-revision": "$1 {{GENDER:$2|cangiate}} 'a vesibbilità {{PLURAL:$5|d'a revisione|$5 de le revisiune}} sus 'a pàgene $3: $4",
        "logentry-delete-event-legacy": "$1 {{GENDER:$2|cangiate}} 'a vesibbilità d'u archivije de le fatte sus 'a $3",
        "mw-widgets-dateinput-no-date": "Nisciune date scacchiate",
        "mw-widgets-titleinput-description-new-page": "'a pàgene non g'esiste angore",
        "mw-widgets-titleinput-description-redirect": "redirezionate sus a $1",
-       "randomrootpage": "Pàgene prengepàle a uecchije"
+       "randomrootpage": "Pàgene prengepàle a uecchije",
+       "gotointerwiki": "Ste lasse {{SITENAME}}"
 }
index a1be9ef..421884e 100644 (file)
                        "Ping08",
                        "Yuryleb",
                        "Redredsonia",
-                       "Nitch"
+                       "Nitch",
+                       "Alexey zakharenkov",
+                       "Ivan-r",
+                       "Choomaq"
                ]
        },
        "tog-underline": "Подчёркивание ссылок:",
        "tog-watchlisthidebots": "Скрывать правки ботов из списка наблюдения",
        "tog-watchlisthideminor": "Скрывать малые правки из списка наблюдения",
        "tog-watchlisthideliu": "Скрывать правки представившихся участников из списка наблюдения",
-       "tog-watchlistreloadautomatically": "Ð\9fеÑ\80езагÑ\80Ñ\83жать список наблюдения автоматически всякий раз, когда изменяется фильтр (требуется JavaScript)",
+       "tog-watchlistreloadautomatically": "Ð\9eбновлÑ\8fть список наблюдения автоматически всякий раз, когда изменяется фильтр (требуется JavaScript)",
        "tog-watchlisthideanons": "Скрывать правки анонимных участников из списка наблюдения",
        "tog-watchlisthidepatrolled": "Скрывать отпатрулированные правки из списка наблюдения",
        "tog-watchlisthidecategorization": "Скрывать категоризацию страниц",
        "tog-showhiddencats": "Показывать скрытые категории",
        "tog-norollbackdiff": "Не показывать разницу версий после выполнения отката",
        "tog-useeditwarning": "Предупреждать, когда я покидаю страницу с несохранёнными изменениями",
-       "tog-prefershttps": "Всегда использовать защищённое соединение после представления системе",
+       "tog-prefershttps": "Всегда использовать защищённое соединение",
        "underline-always": "Всегда",
        "underline-never": "Никогда",
        "underline-default": "Использовать настройки браузера",
        "category-article-count": "{{PLURAL:$2|1=Эта категория содержит единственную страницу.|{{PLURAL:$1|Показана $1 страница|Показаны $1 страницы|Показано $1 страниц}} из $2, {{PLURAL:$2|находящейся|находящихся}} в данной категории.}}",
        "category-article-count-limited": "В этой категории {{PLURAL:$1|$1 страница|$1 страницы|$1 страниц|1=только одна страница}}.",
        "category-file-count": "{{PLURAL:$2|1=Эта категория содержит единственный файл.|{{PLURAL:$1|Показан $1 файл|Показано $1 файла|Показаны $1 файлов}} из $2, {{PLURAL:$2|находящегося|находящихся}} в данной категории.}}",
-       "category-file-count-limited": "В этой категории {{PLURAL:$1|$1 файл|$1 файла|$1 файлов|1=только один файл}}.",
+       "category-file-count-limited": "В этой категории {{PLURAL:$1|1=1 файл|$1 файла|$1 файлов}}.",
        "listingcontinuesabbrev": "(продолжение)",
        "index-category": "Индексируемые страницы",
        "noindex-category": "Неиндексируемые страницы",
        "tagline": "Материал из {{grammar:genitive|{{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": "Перейти",
        "delete": "Удалить",
        "deletethispage": "Удалить эту страницу",
        "undeletethispage": "Восстановить эту страницу",
-       "undelete_short": "Восстановить {{PLURAL:$1|$1 правку|$1 правки|$1 правок|1=правку}}",
-       "viewdeleted_short": "Просмотр {{PLURAL:$1|$1 удалённой правки|удалённой правки|$1 удалённых правок}}",
+       "undelete_short": "Восстановить {{PLURAL:$1|1=$1 правку|$1 правки|$1 правок|1=правку}}",
+       "viewdeleted_short": "Просмотр {{PLURAL:$1|1=$1 удалённой правки|удалённой правки|$1 удалённых правок}}",
        "protect": "Защитить",
        "protect_change": "изменить",
        "protectthispage": "Защитить эту страницу",
        "redirectedfrom": "(перенаправлено с «$1»)",
        "redirectpagesub": "Страница-перенаправление",
        "redirectto": "Перенаправление на:",
-       "lastmodifiedat": "Ð\9fоÑ\81леднее Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ðµ Ñ\8dÑ\82ой Ñ\81Ñ\82Ñ\80аниÑ\86Ñ\8b: $2, $1.",
-       "viewcount": "К этой странице обращались $1 {{PLURAL:$1|раз|раза|раз}}.",
+       "lastmodifiedat": "ЭÑ\82а Ñ\81Ñ\82Ñ\80аниÑ\86а Ð¿Ð¾Ñ\81ледний Ñ\80аз Ð±Ñ\8bла Ð¾Ñ\82Ñ\80едакÑ\82иÑ\80ована $1 Ð² $2.",
+       "viewcount": "К этой странице обращались $1 {{PLURAL:$1|1=раз|раза|раз}}.",
        "protectedpage": "Защищённая страница",
        "jumpto": "Перейти к:",
        "jumptonavigation": "навигация",
        "jumptosearch": "поиск",
-       "view-pool-error": "Извините, сейчас серверы перегружены.\nПоступило слишком много запросов на просмотр этой страницы.\nПожалуйста, подождите и повторите попытку обращения к странице позже.\n\n$1",
+       "view-pool-error": "Извините, в настоящий момент серверы перегружены.\nСлишком много пользователей пытаются просмотреть этот ресурс.\nПожалуйста, подождите и повторите попытку обращения к нему позже.\n\n$1",
        "generic-pool-error": "Извините, в настоящий момент серверы перегружены.\nСлишком много пользователей пытаются просмотреть этот ресурс.\nПожалуйста, подождите и повторите попытку обращения к нему позже.",
        "pool-timeout": "Истекло время ожидания блокировки",
        "pool-queuefull": "Накопитель запросов полон",
        "pagetitle": "$1 — {{SITENAME}}",
        "retrievedfrom": "Источник — «$1»",
        "youhavenewmessages": "Вы получили $1 ($2).",
-       "youhavenewmessagesfromusers": "{{PLURAL:$4|Вы получили}} $1 от {{PLURAL:$3|$3 участника|$3 участников|1=другого участника}} ($2).",
+       "youhavenewmessagesfromusers": "{{PLURAL:$4|Вы получили}} $1 от {{PLURAL:$3|1=$3 участника|$3 участников|1=другого участника}} ($2).",
        "youhavenewmessagesmanyusers": "Вы получили $1 от множества пользователей ($2).",
-       "newmessageslinkplural": "{{PLURAL:$1|новое сообщение|999=новые сообщения}}",
-       "newmessagesdifflinkplural": "{{PLURAL:$1|последнее изменение|999=последние изменения}}",
+       "newmessageslinkplural": "{{PLURAL:$1|1=новое сообщение|999=новые сообщения}}",
+       "newmessagesdifflinkplural": "{{PLURAL:$1|1=последнее изменение|999=последние изменения}}",
        "youhavenewmessagesmulti": "Вы получили новые сообщения на $1",
        "editsection": "править",
        "editold": "править",
        "confirmable-no": "Нет",
        "thisisdeleted": "Просмотреть или восстановить $1?",
        "viewdeleted": "Просмотреть $1?",
-       "restorelink": "{{PLURAL:$1|$1 удалённую правку|$1 удалённые правки|$1 удалённых правок|1=удалённую правку}}",
+       "restorelink": "{{PLURAL:$1|1=$1 удалённую правку|$1 удалённые правки|$1 удалённых правок|1=удалённую правку}}",
        "feedlinks": "В виде:",
        "feed-invalid": "Неправильный тип канала для подписки.",
        "feed-unavailable": "Ленты синдикации недоступны",
        "title-invalid-characters": "Запрашиваемое название страницы содержит недопустимые символы: «$1».",
        "title-invalid-relative": "Заголовок имеет относительный путь. Заголовки страниц с относительным путем (/,../) являются недействительными, так как они часто недоступны, когда обрабатываются браузером пользователя.",
        "title-invalid-magic-tilde": "Запрашиваемый заголовок страницы содержит недопустимую последовательность тильды (<nowiki>~~~</nowiki>).",
-       "title-invalid-too-long": "Запрашиваемый заголовок страницы слишком длинен. Он должен быть не более $1 {{PLURAL:$1|байта|байт}} в кодировке UTF-8.",
+       "title-invalid-too-long": "Запрашиваемый заголовок страницы слишком длинен. Он должен быть не более $1 {{PLURAL:$1|1=байта|байт}} в кодировке UTF-8.",
        "title-invalid-leading-colon": "Запрашиваемое название страницы содержит недопустимое двоеточие в начале.",
-       "perfcached": "СледÑ\83Ñ\8eÑ\89ие Ð´Ð°Ð½Ð½Ñ\8bе Ð²Ð·Ñ\8fÑ\82Ñ\8b Ð¸Ð· ÐºÑ\8dÑ\88а Ð¸ Ð¼Ð¾Ð³Ñ\83Ñ\82 Ð½Ðµ Ñ\83Ñ\87иÑ\82Ñ\8bваÑ\82Ñ\8c Ð¿Ð¾Ñ\81ледниÑ\85 Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ð¹. Ð\92 ÐºÑ\8dÑ\88е Ñ\85Ñ\80аниÑ\82Ñ\81Ñ\8f Ð½Ðµ Ð±Ð¾Ð»ÐµÐµ $1 {{PLURAL:$1|записи|записей}}.",
-       "perfcachedts": "Следующие данные взяты из кэша, последний раз он обновлялся в $1. В кэше хранится не более $4 {{PLURAL:$4|записи|записей}}.",
+       "perfcached": "Ð\94аннÑ\8bе Ð²Ð·Ñ\8fÑ\82Ñ\8b ÐºÑ\8dÑ\88а; Ð¾Ð½Ð¸ Ð¼Ð¾Ð³Ð»Ð¸ Ñ\83Ñ\81Ñ\82аÑ\80еÑ\82Ñ\8c. Ð\92 ÐºÑ\8dÑ\88е Ñ\85Ñ\80аниÑ\82Ñ\81Ñ\8f Ð½Ðµ Ð±Ð¾Ð»ÐµÐµ $1 {{PLURAL:$1|1=записи|записей}}.",
+       "perfcachedts": "Следующие данные взяты из кэша, последний раз он обновлялся в $1. В кэше хранится не более {{PLURAL:$4|1=$1 записи|$1 записей}}.",
        "querypage-no-updates": "Обновление этой страницы сейчас отключено.\nПредставленные здесь данные не будут обновляться.",
        "viewsource": "Просмотр вики-текста",
        "viewsource-title": "Просмотр исходного текста страницы $1",
        "createacct-continue-submit": "Продолжить создание учётной записи",
        "createacct-another-continue-submit": "Продолжить создание учётной записи",
        "createacct-benefit-heading": "{{SITENAME}} — совместный труд таких же людей, как вы.",
-       "createacct-benefit-body1": "{{PLURAL:$1|правка|правки|правок}}",
-       "createacct-benefit-body2": "{{PLURAL:$1|статья|статьи|статей}}",
-       "createacct-benefit-body3": "{{PLURAL:$1|участник|участника|участников}} за последнее время",
+       "createacct-benefit-body1": "{{PLURAL:$1|1=$1 правка|$1 правки|$1 правок}}",
+       "createacct-benefit-body2": "{{PLURAL:$1|1=$1 статья|$1 статьи|$1 статей}}",
+       "createacct-benefit-body3": "{{PLURAL:$1|1=$1 участник|$1 участника|$1 участников}} за последнее время",
        "badretype": "Введённые вами пароли не совпадают.",
        "usernameinprogress": "Создание учётной записи для данного имени участника уже выполняется.\nПожалуйста, подождите.",
        "userexists": "Введённое имя участника уже используется.\nПожалуйста, выберите другое имя.",
        "login-userblocked": "Участник заблокирован. Вход в систему запрещен.",
        "wrongpassword": "Введённый вами пароль неверен. Попробуйте ещё раз.",
        "wrongpasswordempty": "Пожалуйста, введите непустой пароль.",
-       "passwordtooshort": "Пароль должен состоять не менее чем из $1 {{PLURAL:$1|символа|символов}}.",
-       "passwordtoolong": "Пароль не может превышать {{PLURAL:$1|1 символ|$1 символов|$1 символа}}.",
+       "passwordtooshort": "Пароль должен состоять не менее, чем из $1 {{PLURAL:$1|1=символа|символов}}.",
+       "passwordtoolong": "Пароль не может содержать более {{PLURAL:$1|1=$1 символа|$1 символов}}.",
        "passwordtoopopular": "Часто выбираемые пароли не могут быть использованы. Пожалуйста, выберите более уникальный пароль.",
        "password-name-match": "Введённый пароль должен отличаться от имени участника.",
        "password-login-forbidden": "Использование этого имени участника и пароля запрещено.",
        "mailmypassword": "Сбросить пароль",
        "passwordremindertitle": "Напоминание пароля участника {{grammar:genitive|{{SITENAME}}}}",
-       "passwordremindertext": "Кто-то (вероятно, вы, с IP-адреса $1) запросил создать\nновый пароль для {{grammar:genitive|{{SITENAME}}}} ($4). Для участника $2\nсоздан временный пароль: $3. Если это был ваш запрос,\nвам следует представиться системе и выбрать новый пароль.\nВаш временный пароль будет действовать в течение $5 {{PLURAL:$5|дня|дней}}.\n\nЕсли вы не посылали запроса на смену пароля, или если вы уже вспомнили свой пароль,\nи не желаете его менять, вы можете проигнорировать данное сообщение и\nпродолжить использовать свой старый пароль.",
+       "passwordremindertext": "Кто-то (вероятно, вы, с IP-адреса $1) запросил создать\nновый пароль для {{grammar:genitive|{{SITENAME}}}} ($4). Для участника $2\nсоздан временный пароль: $3. Если это был ваш запрос,\nвам следует представиться системе и выбрать новый пароль.\nВаш временный пароль будет действовать в течение $5 {{PLURAL:$5|1=дня|дней}}.\n\nЕсли вы не посылали запроса на смену пароля, или если вы уже вспомнили свой пароль,\nи не желаете его менять, вы можете проигнорировать данное сообщение и\nпродолжить использовать свой старый пароль.",
        "noemail": "Для участника с именем $1 электронный адрес указан не был.",
        "noemailcreate": "Вам необходимо указать корректный адрес электронной почты",
        "passwordsent": "Новый пароль был выслан на адрес электронной почты, указанный для участника $1.\n\nПожалуйста, представьтесь системе заново после получения пароля.",
        "blocked-mailpassword": "Редактирование с вашего IP-адреса запрещено. Для предотвращения злоупотреблений для этого IP-адреса заблокирована и функция восстановления пароля.",
        "eauthentsent": "На указанный адрес электронной почты отправлено письмо. \nЧтобы получать письма в дальнейшем, следуйте изложенным там инструкциям для подтверждения, что этот адрес действительно принадлежит вам.",
-       "throttled-mailpassword": "Функция напоминания пароля уже использовалась в течение {{PLURAL:$1|1=последнего часа|последних $1 часов}}.\nДля предотвращения злоупотреблений, разрешено запрашивать не более одного напоминания {{PLURAL:$1|за $1 час|за $1 часов|за $1 часа|1=в час}}.",
+       "throttled-mailpassword": "Функция напоминания пароля уже использовалась в течение {{PLURAL:$1|1=последнего часа|последних $1 часов}}.\nДля предотвращения злоупотреблений, разрешено запрашивать не более одного напоминания {{PLURAL:$1|1=за $1 час|за $1 часов|за $1 часа|1=в час}}.",
        "mailerror": "Ошибка при отправке почты: $1",
        "acct_creation_throttle_hit": "Посетители с вашего IP-адреса {{PLURAL:$1|была создана $1 учётная запись|было создано $1 учётных записей|были созданы $1 учётных записи}} за последние $2 — это предельное количество для данного отрезка времени.\nВ результате, пользователи с этим IP-адресом в данный момент больше не могут создавать новых учётных записей.",
        "emailauthenticated": "Ваш адрес электронной почты подтверждён $2 в $3.",
        "readonlywarning": "<strong>Предупреждение: База данных заблокирована в связи с процедурами обслуживания, поэтому вы не можете записать ваши изменения прямо сейчас.</strong>\nВозможно, вам следует скопировать этот текст в текстовый файл, чтобы сохранить его на будущее.\n\nСистемный администратор, заблокировавший базу данных, оставил следующее объяснение: $1",
        "protectedpagewarning": "'''Предупреждение. Эта страница защищена от изменений, её могут редактировать только участники с полномочиями администратора.'''\nНиже для справки приведена последняя запись журнала:",
        "semiprotectedpagewarning": "'''Замечание.''' Эта страница была защищена; редактировать её могут только зарегистрированные участники.\nНиже для справки приведена последняя запись журнала:",
-       "cascadeprotectedwarning": "<strong>Ð\9fÑ\80едÑ\83пÑ\80еждение:</strong> Ð\94аннÑ\83Ñ\8e Ñ\81Ñ\82Ñ\80аниÑ\86Ñ\83 Ð¼Ð¾Ð³Ñ\83Ñ\82 Ñ\80едакÑ\82иÑ\80оваÑ\82Ñ\8c Ñ\82олÑ\8cко Ñ\83Ñ\87аÑ\81Ñ\82ники Ñ\81 Ð°Ð´Ð¼Ð¸Ð½Ð¸Ñ\81Ñ\82Ñ\80аÑ\82ивнÑ\8bми Ð¿Ñ\80авами, поскольку она включена {{PLURAL:$1|1=в следующую страницу, для которой|в следующие страницы, для которых}} включена каскадная защита:",
+       "cascadeprotectedwarning": "<strong>Ð\9fÑ\80едÑ\83пÑ\80еждение:</strong> Ð­Ñ\82а Ñ\81Ñ\82Ñ\80аниÑ\86а Ð±Ñ\8bла Ð·Ð°Ñ\89иÑ\89ена, Ñ\82ак Ñ\87Ñ\82обÑ\8b ÐµÑ\91 Ð¼Ð¾Ð³Ð»Ð¸ Ñ\80едакÑ\82иÑ\80оваÑ\82Ñ\8c Ñ\82олÑ\8cко Ñ\83Ñ\87аÑ\81Ñ\82ники Ñ\81 [[Special:ListGroupRights|опÑ\80еделÑ\91ннÑ\8bми Ð¿Ñ\80авами]], поскольку она включена {{PLURAL:$1|1=в следующую страницу, для которой|в следующие страницы, для которых}} включена каскадная защита:",
        "titleprotectedwarning": "'''Предупреждение.  Это название защищено. Создать эту страницу могут только участники с [[Special:ListGroupRights|соответствующими правами]].'''\nНиже для справки приведена последняя запись журнала:",
        "templatesused": "{{PLURAL:$1|1=Шаблон, используемый|Шаблоны, используемые}} на этой странице:",
        "templatesusedpreview": "{{PLURAL:$1|1=Шаблон, используемый|Шаблоны, используемые}} в режиме предпросмотра:",
        "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": "Выбор версий: отметьте версии страницы, которые вы хотите сравнить, и нажмите '''{{int:compare-submit}}'''.<br />\nПояснения: '''({{int:cur}})''' — отличия от текущей версии; '''({{int:last}})''' — отличия от предшествующей версии; '''{{int:minoreditletter}}''' — незначительные изменения.",
-       "history-fieldset-title": "Просмотреть историю",
-       "history-show-deleted": "Только удалённые",
+       "history-fieldset-title": "Поиск правок",
+       "history-show-deleted": "Только удалённые правки",
        "histfirst": "старейшие",
        "histlast": "новейшие",
        "historysize": "($1 {{PLURAL:$1|байт|байта|байт}})",
        "prefs-help-prefershttps": "Эта настройка будет применена после следующего представления системе.",
        "prefswarning-warning": "Вы внесли в свои настройки изменения, которые ещё не были сохранены.\nЕсли вы покинете эту страницу, не нажав «$1», настройки не будут обновлены.",
        "prefs-tabs-navigation-hint": "Совет: Вы можете использовать клавиши стрелок влево и вправо для перехода между вкладками в списке вкладок.",
-       "userrights": "Права пользователя",
+       "userrights": "Права участника",
        "userrights-lookup-user": "Выбор участника",
        "userrights-user-editname": "Введите имя учётной записи:",
        "editusergroup": "Загрузить группы участников",
        "saveusergroups": "Сохранить группы {{GENDER:$1|участника|участницы}}",
        "userrights-groupsmember": "Состоит в группах:",
        "userrights-groupsmember-auto": "Неявно состоит в группах:",
-       "userrights-groups-help": "Вы можете изменить группы, в которые входит {{GENDER:$1|этот участник|эта участница}}.\n* Если около названия группы стоит отметка — {{GENDER:$1|участник|участница}} входит в эту группу.\n* Если отметка не стоит — {{GENDER:$1|участник|участница}} не входит в эту группу.\n* Символ * указывает на то, что вы не сможете удалить {{GENDER:$1|участника|участницу}} из группы, если добавите {{GENDER:$1|его|её}} в неё (или наоборот).\n* Символ # указывает на то, что вы можете только отложить время истечения этой группы, вы не можете перенести его на более ранний срок.",
+       "userrights-groups-help": "Ð\92Ñ\8b Ð¼Ð¾Ð¶ÐµÑ\82е Ð¸Ð·Ð¼ÐµÐ½Ð¸Ñ\82Ñ\8c Ð³Ñ\80Ñ\83ппÑ\8b, Ð² ÐºÐ¾Ñ\82оÑ\80Ñ\8bе Ð²Ñ\85одиÑ\82 {{GENDER:$1|Ñ\8dÑ\82оÑ\82 Ñ\83Ñ\87аÑ\81Ñ\82ник|Ñ\8dÑ\82а Ñ\83Ñ\87аÑ\81Ñ\82ниÑ\86а}}.\n* Ð\95Ñ\81ли Ð¾ÐºÐ¾Ð»Ð¾ Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ñ\8f Ð³Ñ\80Ñ\83ппÑ\8b Ñ\81Ñ\82оиÑ\82 Ð¾Ñ\82меÑ\82ка â\80\94 {{GENDER:$1|Ñ\83Ñ\87аÑ\81Ñ\82ник|Ñ\83Ñ\87аÑ\81Ñ\82ниÑ\86а}} Ð²Ñ\85одиÑ\82 Ð² Ñ\8dÑ\82Ñ\83 Ð³Ñ\80Ñ\83ппÑ\83.\n* Ð\95Ñ\81ли Ð¾Ñ\82меÑ\82ка Ð½Ðµ Ñ\81Ñ\82оиÑ\82 â\80\94 {{GENDER:$1|Ñ\83Ñ\87аÑ\81Ñ\82ник|Ñ\83Ñ\87аÑ\81Ñ\82ниÑ\86а}} Ð½Ðµ Ð²Ñ\85одиÑ\82 Ð² Ñ\8dÑ\82Ñ\83 Ð³Ñ\80Ñ\83ппÑ\83.\n* Ð¡Ð¸Ð¼Ð²Ð¾Ð» * Ñ\83казÑ\8bваеÑ\82 Ð½Ð° Ñ\82о, Ñ\87Ñ\82о Ð²Ñ\8b Ð½Ðµ Ñ\81можеÑ\82е Ñ\83далиÑ\82Ñ\8c {{GENDER:$1|Ñ\83Ñ\87аÑ\81Ñ\82ника|Ñ\83Ñ\87аÑ\81Ñ\82ниÑ\86Ñ\83}} Ð¸Ð· Ð³Ñ\80Ñ\83ппÑ\8b, ÐµÑ\81ли Ð´Ð¾Ð±Ð°Ð²Ð¸Ñ\82е {{GENDER:$1|его|еÑ\91}} Ð² Ð½ÐµÑ\91 (или Ð½Ð°Ð¾Ð±Ð¾Ñ\80оÑ\82).\n* Ð¡Ð¸Ð¼Ð²Ð¾Ð» # Ñ\83казÑ\8bваеÑ\82 Ð½Ð° Ñ\82о, Ñ\87Ñ\82о Ð²Ñ\8b Ð¼Ð¾Ð¶ÐµÑ\82е Ñ\82олÑ\8cко Ð¾Ñ\82ложиÑ\82Ñ\8c Ð²Ñ\80емÑ\8f Ð¸Ñ\81Ñ\82еÑ\87ениÑ\8f Ñ\87ленÑ\81Ñ\82ва Ð² Ñ\8dÑ\82ой Ð³Ñ\80Ñ\83ппÑ\8b, Ð²Ñ\8b Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ\82е Ð¿ÐµÑ\80енеÑ\81Ñ\82и ÐµÐ³Ð¾ Ð½Ð° Ð±Ð¾Ð»ÐµÐµ Ñ\80анний Ñ\81Ñ\80ок.",
        "userrights-reason": "Причина:",
        "userrights-no-interwiki": "У вас нет разрешения изменять права участников в других вики.",
        "userrights-nodatabase": "База данных $1 не существует или расположена не локально.",
        "userrights-expiry-options": "1 день:1 day,1 неделя:1 week,1 месяц:1 mopnth,3 месяца:3 months,6 месяцев:6 months,1 год:1 year",
        "userrights-invalid-expiry": "Время истечения для группы «$1» задано неверно.",
        "userrights-expiry-in-past": "Время истечения для группы «$1» задано в прошлом.",
-       "userrights-cannot-shorten-expiry": "Вы не можете перенести на более ранний срок дату истечения группы «$1». Только участники, имеющие право на добавление и удаление этой группы, могут перенести её на более ранний срок.",
+       "userrights-cannot-shorten-expiry": "Вы не можете перенести на более ранний срок дату истечения членства в группе «$1». Только участники, имеющие право на добавление и удаление этой группы, могут перенести её на более ранний срок.",
        "userrights-conflict": "Конфликт изменения прав участника! Пожалуйста, проверьте и примените изменения заново.",
        "group": "Группа:",
        "group-user": "Участники",
        "right-editsemiprotected": "правка страниц, защищённых как «{{int:protect-level-autoconfirmed}}»",
        "right-editcontentmodel": "редактирование контентной модели страницы",
        "right-editinterface": "изменение пользовательского интерфейса",
-       "right-editusercssjs": "правка CSS- и JS-файлов других участников",
        "right-editusercss": "правка CSS-файлов других участников",
        "right-edituserjs": "правка JavaScript-файлов других участников",
        "right-editmyusercss": "редактирование своих пользовательских CSS-файлов",
        "recentchanges-legend": "Настройки свежих правок",
        "recentchanges-summary": "Ниже в хронологическом порядке перечислены последние изменения на страницах {{grammar:genitive|{{SITENAME}}}}.",
        "recentchanges-noresult": "Изменений в указанный период, соответствующих указанным условиям, нет.",
-       "recentchanges-feed-description": "Отслеживать в этом потоке последние изменения в вики.",
+       "recentchanges-feed-description": "Отслеживание последних изменений в вики.",
        "recentchanges-label-newpage": "Этой правкой была создана новая страница.",
        "recentchanges-label-minor": "Это незначительное изменение",
        "recentchanges-label-bot": "Эта правка сделана ботом",
        "rcfilters-highlightmenu-title": "Выберите цвет",
        "rcfilters-highlightmenu-help": "Выберите цвет, чтобы подсветить это свойство",
        "rcfilters-filterlist-noresults": "Фильтры не найдены",
+       "rcfilters-noresults-conflict": "Результатов не найдено из-за конфликта критериев поиска",
+       "rcfilters-state-message-fullcoverage": "Выбор всех фильтров в группе — это то же самое, что и отсутствие какого-либо выбора, поэтому этот фильтр не имеет никакого эффекта. Включённые группы: $1",
        "rcfilters-filtergroup-registration": "Регистрация участников",
        "rcfilters-filter-registered-label": "Зарегистрированные",
        "rcfilters-filter-registered-description": "Вошедшие редакторы.",
        "rcfilters-filter-humans-description": "Правки, внесённые редакторами.",
        "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-categorization-description": "Записи о страницах, добавленных или удаленных из категорий.",
        "rcfilters-filter-logactions-label": "Протоколируемые действия",
        "rcfilters-filter-logactions-description": "Административные действия, создания учётных записей, удаления страниц, загрузки файлов…",
+       "rcfilters-hideminor-conflicts-typeofchange-global": "Фильтр \"малые правки\" конфликтует с одним или несколькими фильтрами, поскольку некоторые типы правок не могут быть названы малыми. Конфликтные фильтры отмечены вверху, в области Активных фильтров.",
        "rcnotefrom": "Ниже {{PLURAL:$5|указано изменение|перечислены изменения}} с <strong>$3, $4</strong> (показано не более <strong>$1</strong>).",
+       "rclistfromreset": "Сбросить выбор даты",
        "rclistfrom": "Показать изменения с $3 $2.",
        "rcshowhideminor": "$1 малые правки",
        "rcshowhideminor-show": "Показать",
        "rcshowhidecategorization": "$1 категоризацию страниц",
        "rcshowhidecategorization-show": "Показать",
        "rcshowhidecategorization-hide": "Скрыть",
-       "rclinks": "Показать последние $1 изменений за $2 дней<br />$3",
+       "rclinks": "Показать последние $1 изменений за $2 дней",
        "diff": "разн.",
        "hist": "история",
        "hide": "Скрыть",
        "php-uploaddisabledtext": "Загрузка файлов отключена в настройках PHP. Пожалуйста, проверьте значение свойства file_uploads.",
        "uploadscripted": "Файл содержит HTML-код или скрипт, который может быть ошибочно обработан браузером.",
        "upload-scripted-pi-callback": "Невозможно загрузить файл, содержащий инструкции обработки таблицы стилей XML.",
+       "upload-scripted-dtd": "Невозможно загрузить SVG-файлы, которые содержат нестандартное DTD-объявление.",
        "uploaded-script-svg": "Найден небезопасный элемент с поддержкой сценариев «$1» в загруженном SVG-файле.",
        "uploaded-hostile-svg": "Найден небезопасный CSS-код в элементе стиля загруженного SVG-файла.",
        "uploaded-event-handler-on-svg": "Установка атрибутов обработчика событий <code>$1=\"$2\"</code> не разрешено для SVG-файлов.",
        "listgrants-grant": "Разрешение",
        "listgrants-rights": "Права",
        "trackingcategories": "Отслеживающие категории",
-       "trackingcategories-summary": "Ð\9dа Ñ\8dÑ\82ой Ñ\81Ñ\82Ñ\80аниÑ\86е Ð¿ÐµÑ\80еÑ\87иÑ\81ленÑ\8b Ð¾Ñ\82Ñ\81леживаÑ\8eÑ\89ие ÐºÐ°Ñ\82егоÑ\80ии, ÐºÐ¾Ñ\82оÑ\80Ñ\8bе Ð°Ð²Ñ\82омаÑ\82иÑ\87еÑ\81ки Ð·Ð°Ð¿Ð¾Ð»Ð½Ñ\8fÑ\8eÑ\82Ñ\81Ñ\8f Ð¿Ñ\80огÑ\80аммнÑ\8bм Ð¾Ð±ÐµÑ\81пеÑ\87ением MediaWiki. Их можно переименовать, изменив соответствующие системные сообщения в пространстве имён {{ns:8}}.",
-       "trackingcategories-msg": "Отслеживающая категория",
+       "trackingcategories-summary": "Ð\9dа Ñ\8dÑ\82ой Ñ\81Ñ\82Ñ\80аниÑ\86е Ð¿ÐµÑ\80еÑ\87иÑ\81ленÑ\8b ÐºÐ°Ñ\82егоÑ\80ии, Ð·Ð°Ð¿Ð¾Ð»Ð½Ñ\8fемÑ\8bе Ð°Ð²Ñ\82омаÑ\82иÑ\87еÑ\81ки. Их можно переименовать, изменив соответствующие системные сообщения в пространстве имён {{ns:8}}.",
+       "trackingcategories-msg": "Отслеживаемая категория",
        "trackingcategories-name": "Имя сообщения",
        "trackingcategories-desc": "Критерий включения в категорию",
        "restricted-displaytitle-ignored": "Страницы с игнорируемыми отображаемыми названиями",
        "undeleteviewlink": "просмотреть",
        "undeleteinvert": "Обратить выделение",
        "undeletecomment": "Причина:",
-       "undeletedrevisions": "{{PLURAL:$1|восстановлено|восстановлены}} $1 {{PLURAL:$1|изменение|изменения|изменений}}",
-       "undeletedrevisions-files": "восстановлены $1 {{PLURAL:$1|версия|версии|версий}} и $2 {{PLURAL:$2|файл|файла|файлов}}",
-       "undeletedfiles": "{{PLURAL:$1|восстановлен|восстановлены}} $1 {{PLURAL:$1|файл|файла|файлов}}",
        "cannotundelete": "Некоторые или все ваши восстановления не удались:\n$1",
        "undeletedpage": "'''Страница «$1» была восстановлена.'''\n\nДля просмотра списка последних удалений и восстановлений см. [[Special:Log/delete|журнал удалений]].",
        "undelete-header": "Список недавно удалённых страниц можно посмотреть в [[Special:Log/delete|журнале удалений]].",
        "sp-contributions-uploads": "загрузки",
        "sp-contributions-logs": "журналы",
        "sp-contributions-talk": "обсуждение",
-       "sp-contributions-userrights": "управление правами участника",
+       "sp-contributions-userrights": "управление правами {{GENDER:$1|участника|участницы}}",
        "sp-contributions-blocked-notice": "Этот участник в данный момент заблокирован. Ниже приведена последняя запись из журнала блокировок:",
        "sp-contributions-blocked-notice-anon": "Этот IP-адрес в данный момент заблокирован. Ниже приведена последняя запись из журнала блокировок:",
        "sp-contributions-search": "Поиск вклада",
        "unblocked-id": "Блокировка $1 была снята",
        "unblocked-ip": "[[Special:Contributions/$1|$1]] был разблокирован.",
        "blocklist": "Заблокированные участники",
+       "autoblocklist": "Автоблокировки",
+       "autoblocklist-submit": "Найти",
+       "autoblocklist-legend": "Список автоблокировок",
+       "autoblocklist-localblocks": "{{PLURAL:$1|Локальная автоблокировка|Локальные автоблокировки}}",
+       "autoblocklist-empty": "Список автоблокировок пуст.",
+       "autoblocklist-otherblocks": "{{PLURAL:$1|Другая автоблокировка|Другие автоблокировки}}",
        "ipblocklist": "Заблокированные участники",
        "ipblocklist-legend": "Поиск заблокированного участника",
        "blocklist-userblocks": "Скрыть блокировки учётных записей",
        "anonymous": "{{PLURAL:$1|1=Анонимный участник|Анонимные участники}} {{grammar:genitive|{{SITENAME}}}}",
        "siteuser": "{{GENDER:$2|участник|участница}} {{grammar:genitive|{{SITENAME}}}} $1",
        "anonuser": "анонимный участник {{grammar:genitive|{{SITENAME}}}} $1",
-       "lastmodifiedatby": "ЭÑ\82а Ñ\81Ñ\82Ñ\80аниÑ\86а Ð¿Ð¾Ñ\81ледний Ñ\80аз Ð±Ñ\8bла Ð¸Ð·Ð¼ÐµÐ½Ðµна $1 в $2, автор изменения — $3.",
+       "lastmodifiedatby": "ЭÑ\82а Ñ\81Ñ\82Ñ\80аниÑ\86а Ð¿Ð¾Ñ\81ледний Ñ\80аз Ð±Ñ\8bла Ð¾Ñ\82Ñ\80едакÑ\82иÑ\80ована $1 в $2, автор изменения — $3.",
        "othercontribs": "В создании приняли участие: $1.",
        "others": "другие",
        "siteusers": "{{PLURAL:$2|1={{GENDER:$1|участник|участница}}|участники}} {{grammar:genitive|{{SITENAME}}}} $1",
        "confirmrecreate-noreason": "{{GENDER:$1|Участник|Участница|}}&nbsp;[[User:$1|$1]] ([[User talk:$1|обс]]) {{GENDER:$1|удалил|удалила}} эту страницу после того, как вы начали её редактировать. Пожалуйста, подтвердите, что вы действительно хотите вновь создать эту страницу.",
        "recreate": "Создать заново",
        "unit-pixel": " пикс.",
+       "confirm-purge-title": "Очистить кэш этой страницы",
        "confirm_purge_button": "OK",
        "confirm-purge-top": "Очистить кэш этой страницы?",
        "confirm-purge-bottom": "После очистки кэша страницы будет показана её последняя версия.",
        "htmlform-user-not-valid": "<strong>$1</strong> — недопустимое имя учётной записи.",
        "logentry-delete-delete": "$1 {{GENDER:$2|удалил|удалила}} страницу $3",
        "logentry-delete-delete_redir": "$1 удалил{{GENDER:$2||а}} перенаправление $3 с помощью перезаписи",
-       "logentry-delete-restore": "$1 {{GENDER:$2|восстановил|восстановила}} страницу $3",
+       "logentry-delete-restore": "$1 {{GENDER:$2|восстановил|восстановила}} страницу $3 ($4)",
+       "logentry-delete-restore-nocount": "$1 {{GENDER:$2|восстановил|восстановила}} страницу $3",
+       "restore-count-revisions": "{{PLURAL:$1|1 версия|$1 версии|$1 версий}}",
+       "restore-count-files": "{{PLURAL:$1|1 файл|$1 файла|$1 файлов}}",
        "logentry-delete-event": "$1 {{GENDER:$2|изменил|изменила}} видимость {{PLURAL:$5|$5 записи|$5 записей|1=записи}} журнала для $3: $4",
        "logentry-delete-revision": "$1 {{GENDER:$2|изменил|изменила}} видимость {{PLURAL:$5|$5 версии|$5 версий|1=версии}} страницы $3: $4",
        "logentry-delete-event-legacy": "$1 {{GENDER:$2|изменил|изменила}} видимость записей журнала $3",
        "special-characters-group-thai": "Тайские",
        "special-characters-group-lao": "Лаосские",
        "special-characters-group-khmer": "Кхмерские",
+       "special-characters-group-canadianaboriginal": "Канадское слоговое письмо",
        "special-characters-title-endash": "среднее тире",
        "special-characters-title-emdash": "длинное тире",
        "special-characters-title-minus": "знак минус",
        "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; теги могут быть использованы только в пределах обычных страниц.",
+       "gotointerwiki": "Покидаем {{grammar:accusative|{{SITENAME}}}}...",
+       "gotointerwiki-invalid": "Указан некорректный заголовок.",
+       "gotointerwiki-external": "Вы покидаете {{grammar:accusative|{{SITENAME}}}} для посещения сайта [[$2]].\n\n[$1 Нажмите здесь, чтобы перейти на $1].",
+       "undelete-cantedit": "Вы не можете восстановить эту страницу, поскольку у вас недостаточно прав для ее редактирования.",
+       "undelete-cantcreate": "Вы не можете восстановить эту страницу, поскольку она не существует, а у вас недостаточно прав для ее создания."
 }
index 382019d..67b5284 100644 (file)
        "right-editprotected": "Едітованя сторінок замкнутых на „{{int:protect-level-sysop}}“",
        "right-editsemiprotected": "Едітованя сторінок замкнутых на „{{int:protect-level-autoconfirmed}}“",
        "right-editinterface": "Едітованя інтерфейсу хоснователя",
-       "right-editusercssjs": "Едітованя CSS і JS файлів іншых хоснователїв",
        "right-editusercss": "Едітованя CSS файлів іншых хоснователїв",
        "right-edituserjs": "Едітованя JS файлів іншых хоснователїв",
        "right-editmyusercss": "Едітовати вашы властны хосновательскы CSS файлы.",
        "rcshowhidemine": "$1 мої едітованя",
        "rcshowhidemine-show": "Вказати",
        "rcshowhidemine-hide": "Сховати",
-       "rclinks": "Вказати послїднї $1 зміны за $2 днїв<br />$3",
+       "rclinks": "Вказати послїднї $1 зміны за $2 днїв",
        "diff": "різн.",
        "hist": "історія",
        "hide": "сховати",
        "undeleteviewlink": "видїти",
        "undeleteinvert": "Інвертовати селекцію",
        "undeletecomment": "Причіна:",
-       "undeletedrevisions": "{{PLURAL:$1|Обновлена $1 верзія|Обновлены $1 верзії|Обновленых $1 верзій}}",
-       "undeletedrevisions-files": "{{PLURAL:$1|Обновлена єдна верзія|Обновлены $1 верзії|Обновленых $1 верзій}} і $2 {{PLURAL:$2|файл|файлы|файлів}}.",
-       "undeletedfiles": "{{PLURAL:$1|обновленый $1 файл|обновлены $1 файлы|обновленых $1 файлів}}",
        "cannotundelete": "Обновлїня ся не вдало:\n$1",
        "undeletedpage": "'''$1 была обновлена'''\n\nЗапис о послїднїх мазанях і обновлїнях найдете в  [[Special:Log/delete|книзї змазаных сторінок]].",
        "undelete-header": "Видьте недавно змазаны сторінкы в [[Special:Log/delete|книзї змазаных сторінок]].",
index 0992814..a1a1a54 100644 (file)
        "externaldberror": "दत्तांशे प्रामाणिकताविषयकः (authentication database) दोषः  स्यात् । अथवा स्वस्य बाह्यसदस्यतायां  (external account) परिवर्तनं कर्तुम् अनुमतिः न भवेत् ।",
        "login": "प्रविश्यताम्",
        "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}} योजकत्वेन प्रवेशः प्राप्तः अस्ति । भिन्नयोजकत्वेन प्रवेष्टुं निम्नप्रपत्रं पूरयतु ।",
        "createacct-another-email-ph": "वि-पत्रसङ्केतः लिख्यताम्",
        "createaccountmail": "अस्थायिनम् अशृङ्खलितं कूटशब्दम् उपयुज्य योग्याय वि-पत्रसङ्केताय प्रेश्यताम् ।",
        "createacct-realname": "वास्तविकं नाम (ऐच्छिकम्)",
-       "createaccountreason": "कारणम् :",
        "createacct-reason": "कारणम्",
        "createacct-reason-ph": "भवतः/भवत्याः अन्यसदस्यतां प्राप्तुं किं प्रयोजनमस्ति ?",
        "createacct-submit": "स्वसदस्यता प्राप्यताम्",
        "right-editsemiprotected": "\"{{int:protect-level-autoconfirmed}}\"-त्वेन संरक्षितानि पृष्ठानि सम्पाद्यन्ताम्",
        "right-editcontentmodel": "एकस्य पृष्ठस्य विषयोदाहरणं सम्पाद्यताम्",
        "right-editinterface": "योजकमाध्यमं सम्पाद्यताम्",
-       "right-editusercssjs": "अन्यस्य सदस्यस्य CSS, JavaScript सञ्चिकाः सम्पाद्यन्ताम्",
        "right-editusercss": "अन्यस्य सदस्यस्य CSS सञ्चिकाः सम्पाद्यन्ताम्",
        "right-edituserjs": "अन्यस्य सदस्यस्य JavaScript सञ्चिकाः सम्पाद्यन्ताम्",
        "right-editmyusercss": "स्वस्य CSS सञ्चिकाः सम्पाद्यन्ताम्",
        "rcshowhidemine": "$1 मम सम्पादनानि",
        "rcshowhidemine-show": "दृश्यताम्",
        "rcshowhidemine-hide": "गोप्यताम्",
-       "rclinks": "अन्तिमेषु $2 दिनेषु जातानि अन्तिमानि $1 परिवर्तनानि दृश्यन्ताम् <br />$3",
+       "rclinks": "अन्तिमेषु $2 दिनेषु जातानि अन्तिमानि $1 परिवर्तनानि दृश्यन्ताम्",
        "diff": "भेदः",
        "hist": "इतिहासः",
        "hide": "गोप्यताम्",
        "undeleteviewlink": "दृश्यताम्",
        "undeleteinvert": "चयनं परिवर्तयतु ।",
        "undeletecomment": "कारणम् :",
-       "undeletedrevisions": "{{PLURAL:$1|संस्करणं पुनस्थापितं|$1 संस्करणानि पुनस्थापितानि}}",
-       "undeletedrevisions-files": "{{PLURAL:$1|1 संस्करणं|$1 संस्करणानि}} अपि च {{PLURAL:$2|१ सञ्चिका|$2 सञ्चिकाः}} पुनस्थापिताः सन्ति ।",
-       "undeletedfiles": "{{PLURAL:$1|१सञ्चिका|$1 सञ्चिकाः}} पुनस्थापिताः ।",
        "cannotundelete": "अनपाकरणम् असफलम् :\n$1",
        "undeletedpage": "'''$1 इत्येतत् पुनस्थापितम् अस्ति । \nसद्यः अपनीतानि पुनस्थापितानि च पुटाणि ज्ञातुम् अत्र पश्यतु । [[Special:Log/delete|अपनयनप्रवेशः]] ।",
        "undelete-header": "सद्यः एव अपनीतानां पुटानां दर्शनार्थं अत्र प्रविशतु । [[Special:Log/delete|अपनीतावली]] ।",
        "logentry-tag-update-revision": "$1 {{GENDER:$2|अद्यतनीकृतम्}} $4 संस्करणात् $3 इत्येषु $3 पृष्ठानि ({{PLURAL:$7|स्थापितानि}} $6; {{PLURAL:$9|अपाकृतम्}} $8)",
        "logentry-tag-update-logentry": "$1 {{GENDER:$2|अद्यतनीकृतम्}} $5 संस्करणात् $3 इत्येषु $3 पृष्ठानि ({{PLURAL:$7|स्थापितानि}} $6; {{PLURAL:$9|अपाकृतम्}} $8)",
        "rightsnone": "(नैकम्)",
-       "revdelete-summary": "सम्पादनसांक्षेपिक",
        "feedback-adding": "पृष्ठे प्रतिस्पन्दः योजनीयः ...",
        "feedback-back": "प्रतिगम्यताम्",
        "feedback-bugcheck": "उत्तमम् परिशीलयतु यत्  [ $1 known bugs] पूर्वमेव नासीत् इति ।",
index 8c3e93a..32aff61 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Атын аатынан киирэргэ аллара көстөр форманы туһан.",
        "createaccountmail": "Быстах киирии тылы туһаныы уонна ону ыйыллыбыт аадырыска ыытыы",
        "createaccountmail-help": "Атын киһиэхэ аһарыгын билбэккэ эрэ бэлиэ-ааты оҥорон биэрэргэ туттуллуон сөп.",
        "createacct-realname": "Дьиҥнээх аатыҥ (булгуччута суох)",
-       "createaccountreason": "Төрүөтэ:",
        "createacct-reason": "Төрүөтэ",
        "createacct-reason-ph": "Саҥа аатынан тоҕо киирэҕиний",
        "createacct-reason-help": "Саҥаны суруйуу сурунаалыгар тахсар сурук",
        "right-editsemiprotected": "Уларытыллар сирэйдэр \"{{int:protect-level-autoconfirmed}}\" таһымынан көмүскэммиттэр",
        "right-editcontentmodel": "Сирэй ис тутулун уларытыы",
        "right-editinterface": "Кыттааччы интерфейсын уларытыы",
-       "right-editusercssjs": "Атын кыттааччылар CSS- и JS-билэлэрин уларытыы",
        "right-editusercss": "Атын кыттааччылар CSS-билэлэрин уларытыы",
        "right-edituserjs": "Атын кыттааччылар JS-билэлэрин уларытыы",
        "right-editmyusercss": "Кыттааччы CSS-билэтин уларытыы",
        "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-user-experience-level-newcomer-label": "Саҥа киирбиттэр",
+       "rcfilters-filter-user-experience-level-newcomer-description": "Отой саҥалар: 10 көннөрүүттэн аҕыйаҕы оҥорбуттар уонна бэлиэтэмиттэрэ 4 хоно иликтэр.",
+       "rcfilters-filter-user-experience-level-learner-label": "Үөрэнээччилэр",
        "rcnotefrom": "Манна {{PLURAL:$5|уларытыы көрдөрүлүннэ|уларытыылар көһүннүлэр}} баччаттан <strong>$3, $4</strong> (баччаттан элбэх көстүбэт <strong>$1</strong>).",
        "rclistfrom": "Бу кэм $3 $2 кэнниттэн оҥоһуллубуттары көрдөр",
        "rcshowhideminor": "$1 кыра уларыйыылары",
        "rcshowhidecategorization": "$1 сирэй категориялааһынын",
        "rcshowhidecategorization-show": "Көрдөр",
        "rcshowhidecategorization-hide": "Кистээ",
-       "rclinks": "$2 күҥҥэ бүтэһик $1 уларытыыны көрдөр;<br />$3.",
+       "rclinks": "$2 күҥҥэ бүтэһик $1 уларытыыны көрдөр;",
        "diff": "уратыта",
        "hist": "устуоруйата",
        "hide": "Кистээ",
        "undeleteviewlink": "көрүү",
        "undeleteinvert": "Хараардыллыбыты инверсиялаа",
        "undeletecomment": "Төрүөтэ:",
-       "undeletedrevisions": "{{PLURAL:$1|1 уларытыы|$1 уларытыы}} төннөрүлүннэ",
-       "undeletedrevisions-files": "{{PLURAL:$1|1 уларытыы|$1 уларытыы}}  уонна {{PLURAL:$2|1 билэ|$2 билэ}} төннөрүлүннэ",
-       "undeletedfiles": "{{PLURAL:$1|1 билэ|$1 билэ}} төннөрүлүннэ",
        "cannotundelete": "Сөргүтүү сороҕо табыллыбата:\n$1",
        "undeletedpage": "'''$1 төннөрүлүннэ (төннөрүллүбүт)'''\n\nКэнники сотуулар уонна төннөрүүлэр испииһэктэрин [[Special:Log/delete|манна]] көрүөххүн сөп.",
        "undelete-header": "Соторутааҥы [[Special:Log/delete|сотуу испииһэгин]] көрүөххүн сөп.",
        "logentry-tag-update-revision": "$1 кыттааччы $4 сирэй $3 торумун {{GENDER:$2|саҥардан биэрдэ}} ($6 {{PLURAL:$7|эбилиннэ}}; $8 {{PLURAL:$9|сотулунна}})",
        "logentry-tag-update-logentry": "$1 кыттааччы $3 сирэй $5 сурунаалын {{GENDER:$2|саҥардан биэрдэ}} ($6 {{PLURAL:$7|эбилиннэ}}; $8 {{PLURAL:$9|сотулунна}})",
        "rightsnone": "(суох)",
-       "revdelete-summary": "уларытыылар туһунан",
        "feedback-adding": "Сирэй туһунан санаа этии...",
        "feedback-back": "Төнүн",
        "feedback-bugcheck": "Бэрт! Ол гынан баран [$1 биллэр алҕастарын] тиһилигэр майгынныыр сурук суоҕун тургут.",
index 737fc46..a9f13f8 100644 (file)
        "externaldberror": "Hoe daṛeyaḱa jahan bahre reaḱ jacaeaḱ ḍaṭabes vul hoeakana se amaḱ bahre reaḱ ekaunṭ do nahaḱ halot aguire ạidạri bạnuḱa.",
        "login": "bolok' duar",
        "nav-login-createaccount": "Boloḱ́ duạr / ekaunt tearme",
-       "userlogin": "Bhitri bolon / ekaunṭ tear",
-       "userloginnocreate": "Bhitri bolo",
        "logout": "Bahre oḍoń",
        "userlogout": "Bahre oḍoń",
        "notloggedin": "Bhitri baṅ bolokana",
        "userlogin-noaccount": "Cet́ accountge banuḱtama?",
        "userlogin-joinproject": "Seledoḱ {{SITENAME}}",
-       "nologin": "Amaḱ do cet́ wikipeḍiare ekaunṭ banuḱtama? Ado '''$1'''",
-       "nologinlink": "account tear me",
        "createaccount": "Ṭhai benaome",
-       "gotaccount": "Amaḱ do cet́ miṭten ekaunṭ tear menaḱtama? $1 tearmẽ.",
-       "gotaccountlink": "Bhitri bolon",
-       "userlogin-resetlink": "Amaḱ boloḱ talam cạbi sanamem hiṛińkeda?",
        "userlogin-resetpassword-link": "Amaḱ uku nambarem hiṛiń akada?",
        "userlogin-helplink2": "Bolon khạtir go̠ṛo̠",
        "createacct-emailoptional": "Email ṭhikana (iccha lekate)",
        "createacct-email-ph": "Amaḱ e-mail ṭhikana emme",
        "createaccountmail": "E-mail hotete",
-       "createaccountreason": "Karon",
        "createacct-submit": "Amaḱ account tearme",
        "createacct-benefit-heading": "{{SITENAME}} am lekan hoṛ hotete tear akan.",
        "createacct-benefit-body1": "{{PLURAL:$1|joṛao|joṛaoko}}",
        "prefs-changeemail": "E-mail ṭhikạna bodolme",
        "prefs-setemail": "E-mail ṭhikana benaome",
        "saveprefs": "Rukhiyạymẽ",
-       "rows": "Sạrko:",
        "searchresultshead": "Sendra",
        "timezoneregion-africa": "Aphrika",
        "timezoneregion-america": "Amirika",
        "rcshowhidemine": "$1 ińaḱ tońgeko",
        "rcshowhidemine-show": "Uduḱme",
        "rcshowhidemine-hide": "Danaṅ",
-       "rclinks": "$2 din lahare $1 bodol unuduḱme <br />$3",
+       "rclinks": "$2 din lahare $1 bodol unuduḱme",
        "diff": "Judạ",
        "hist": "Jạr",
        "hide": "Danaṅ",
index a441aa4..ec3161b 100644 (file)
        "rcshowhidemine": "$1 is modìficas meas",
        "rcshowhidemine-show": "Ammustra",
        "rcshowhidemine-hide": "Cua",
-       "rclinks": "Ammustra is ùrtimas $1 mudàntzias fatas in is ùrtimas $2 dies<br />$3",
+       "rclinks": "Ammustra is ùrtimas $1 mudàntzias fatas in is ùrtimas $2 dies",
        "diff": "dif",
        "hist": "ist",
        "hide": "Cua",
        "undeleteviewlink": "ammustra",
        "undeleteinvert": "Fùrria sa seletzione",
        "undeletecomment": "Motivu:",
-       "undeletedrevisions": "{{PLURAL:$1|1 revisione restaurada|$1 revisiones restauradas}}",
-       "undeletedrevisions-files": "{{PLURAL:$1|1 revisione|$1 revisiones}} e {{PLURAL:$2|1 file|$2 files}} restaurados",
-       "undeletedfiles": "{{PLURAL:$1|1 file restauradu|$1 files restaurados}}",
        "undelete-search-title": "Chirca pàginas burradas",
        "undelete-search-box": "Chirca pàginas fuliadas",
        "undelete-search-prefix": "Ammustra is pàginas ca su tìtulu cumentzat cun:",
index d74cacf..7835054 100644 (file)
        "externaldberror": "S'havi virificatu n'erruri cû server d'autinticazzioni sternu, oppuru nun si disponi di l'auturizzazzioni nicissari p'aggiurnari lu propiu accessu sternu.",
        "login": "Trasi",
        "nav-login-createaccount": "Trasi / crea nu cuntu",
-       "userlogin": "Trasi / crea nu cuntu",
-       "userloginnocreate": "Trasi",
        "logout": "Nesci",
        "userlogout": "Nesci",
        "notloggedin": "Nun trasutu",
        "userlogin-noaccount": "Nun hai nu cuntu?",
        "userlogin-joinproject": "Scrìviti a {{SITENAME}}",
-       "nologin": "Nun hai nu cuntu? $1.",
-       "nologinlink": "Crea nu cuntu",
        "createaccount": "Criazzioni dûn cuntu",
-       "gotaccount": "Già hai nu cuntu? $1.",
-       "gotaccountlink": "Trasi",
-       "userlogin-resetlink": "Ti scurdasti li dittagghî pâ trasuta?",
        "userlogin-resetpassword-link": "Ti scurdasti la password?",
        "userlogin-helplink2": "Aiutu pâ trasuta",
        "userlogin-loggedin": "Già trasisti comu {{GENDER:$1|$1}}.\nAdòpira lu mòdulu ccassutta pi tràsiri comu n'àutru utenti.",
        "createacct-another-email-ph": "Nzirisci lu nnirizzu di posta elittrònica",
        "createaccountmail": "Adòpira na password timpurània casuali e mànnala ô nnirizzu di posta elittrònica spicificatu",
        "createacct-realname": "Nomu veru (facurtativu)",
-       "createaccountreason": "Mutivu:",
        "createacct-reason": "Mutivu",
        "createacct-reason-ph": "Pirchì stai criannu n'àutru cuntu",
        "createacct-submit": "Crea lu tò cuntu",
        "right-editsemiprotected": "Canciari pàggini cu prutizzioni \"{{int:protect-level-autoconfirmed}}\"",
        "right-editcontentmodel": "Canciari lu mudellu di cuntinutu di na pàggina",
        "right-editinterface": "Canciari la ntirfaccia utenti",
-       "right-editusercssjs": "Canciari li file CSS e JavaScript di l'àutri utenti",
        "right-editusercss": "Canciari li file CSS di l'àutri utenti",
        "right-edituserjs": "Canciari li file JavaScript di l'àutri utenti",
        "right-editmyusercss": "Canciari li file CSS dû propiu utenti",
        "rcshowhidemine": "$1 li mè canciamenti",
        "rcshowhidemine-show": "Ammustra",
        "rcshowhidemine-hide": "Ammuccia",
-       "rclinks": "Ammustra l'ùrtimi $1 canciamenti nta l'ùrtimi $2 jorna <br />$3",
+       "rclinks": "Ammustra l'ùrtimi $1 canciamenti nta l'ùrtimi $2 jorna",
        "diff": "diff",
        "hist": "storia",
        "hide": "Ammuccia",
        "undeleteviewlink": "talìa",
        "undeleteinvert": "Nverti la silizzioni",
        "undeletecomment": "Mutivu:",
-       "undeletedrevisions": "$1 {{PLURAL:$1|virsioni ricupirata|virsioni ricupirati}}",
-       "undeletedrevisions-files": "$1 {{PLURAL:$1|virsioni ricupirata|virsioni ricupirati}} e $2 {{PLURAL:$2|file ricupiratu|file ricupirati}}",
-       "undeletedfiles": "$1 {{PLURAL:$1|file ricupiratu|file ricupirati}}",
        "cannotundelete": "L'annullamentu dâ cancillazzioni nun arriniscìu:\n$1",
        "undeletedpage": "<strong>La pàggina $1 fu ricupirata</strong>\n\nCunzurta lu [[Special:Log/delete|riggistru dî cancillazzioni]] pi vìdiri li cancillazzioni e li ricùpiri cchiù ricenti.",
        "undelete-header": "Talìa lu [[Special:Log/delete|riggistru dî cancillazzioni]] pî pàggini cancillati di ricenti.",
        "logentry-tag-update-revision": "$1 {{GENDER:$2|canciau}} l'etichetti dâ virsioni $4 dâ pàggina $3 ({{PLURAL:$7|nn'agghiuncìu}} $6; {{PLURAL:$9|nni livau}} $8)",
        "logentry-tag-update-logentry": "$1 {{GENDER:$2|aggiurnau}} l'etichetti ntâ vuci di riggistru $5 dâ pàggina $3 ({{PLURAL:$7|nn'agghiuncìu}} $6; {{PLURAL:$9|nni livau}} $8)",
        "rightsnone": "(nuddu)",
-       "revdelete-summary": "riassuntu dô canciamentu",
        "feedback-adding": "Agghiuncimentu dû cummentu â pàggina...",
        "feedback-back": "N'arreri",
        "feedback-bugcheck": "Bonu! Sulu cuntrolla chi nun è unu dî [$1 bug già canusciuti].",
index a78e617..8bae18f 100644 (file)
        "view-foreign": "See oan $1",
        "edit": "Eedit",
        "edit-local": "Eedit the local descreeption",
-       "create": "Ceaut",
+       "create": "Creaut",
        "create-local": "Eik local descreeption",
        "editthispage": "Eedit this page",
        "create-this-page": "Creaut this page",
        "filecopyerror": "Cuidna copie file \"$1\" til \"$2\".",
        "filerenameerror": "Cuidna rename file \"$1\" til \"$2\".",
        "filedeleteerror": "Cuidna delyte file \"$1\".",
-       "directorycreateerror": "Couldna creat directerie \"$1\".",
+       "directorycreateerror": "Couldna creaut directerie \"$1\".",
        "directoryreadonlyerror": "Directerie \"$1\" is read-yinlie.",
        "directorynotreadableerror": "Directerie \"$1\" is no readable.",
        "filenotfound": "Coudna fynd file \"$1\".",
        "no-null-revision": "Coudna mak new null reveesion fer page \"$1\"",
        "badtitle": "Bad teetle",
        "badtitletext": "The requestit page teitle wis onvalid, tuim, or ae wranglie airtit inter-leid or inter-wiki teitle. It micht contain yin or mair chairacters that canna be uised in teitles.",
+       "title-invalid-interwiki": "The requestit page teetle conteens an interwiki airtin which canna be uised in teetles.",
+       "title-invalid-talk-namespace": "The requestit page teetle refers tae a talk page that canna exeest.",
        "title-invalid-characters": "The requestit page teetle conteens invalid chairacters: \"$1\".",
+       "title-invalid-magic-tilde": "The requestit page teetle conteens invalid magic tilde sequence (<nowiki>~~~</nowiki>).",
+       "title-invalid-too-long": "The requestit page teetle is too lang. It must be na langer nor $1 {{PLURAL:$1|byte|bytes}} in UTF-8 encodin.",
+       "title-invalid-leading-colon": "The requestit page teetle conteens an invalid colon at the beginnin.",
        "perfcached": "The follaein data is cached n michtna be richt up til date. Ae maist muckle o {{PLURAL:$1|yin result is|$1 results ar}} available in the cache.",
        "perfcachedts": "The follaein data is cached, n wis hindermaist updated $1. Ae maist muckkle o {{PLURAL:$4|yin result is|$4 results ar}} available in the cache.",
        "querypage-no-updates": "Updates fer this page ar disablit at the meenit. Data here will nae be refreshit at the meenit.",
        "externaldberror": "Aither thaur wis aen external authentication database mistak, or ye'r naw permitit tae update yer external accoont.",
        "login": "Log in",
        "login-security": "Verify yer identity",
-       "nav-login-createaccount": "Log in / cræft aen accoont",
+       "nav-login-createaccount": "Log in / creaut accoont",
        "logout": "Log oot",
        "userlogout": "Log oot",
        "notloggedin": "Naw loggit in",
        "eauthentsent": "Ae confirmation wab-mail haes been sent til the speceefied wab-mail address.\nAfore oni ither wab-mail is sent til the accoont, ye'll hae tae follae the instructions in the wab-mail, sae as tae confirm that the accoont is reallie yers.",
        "throttled-mailpassword": "Ae password reset wab-mail haes awreadie been sent, wiin the laist {{PLURAL:$1|hoor|$1 hoors}}.\nTae hinder abuiss, yinly the yin password reset wab-mail will be sent per {{PLURAL:$1|hoor|$1 hoors}}.",
        "mailerror": "Mistak sendin mail: $1",
-       "acct_creation_throttle_hit": "Veesiters tae this wiki uisin yer IP address hae creautit $1 {{PLURAL:$1|accoont|accoonts}} the day, this is the maist alloued in that lang.\nSae veesiters uisin this IP address canna creaut onie mair accoonts juist nou.",
+       "acct_creation_throttle_hit": "Veesitors tae this wiki uisin yer IP address hae creautit {{PLURAL:$1|1 accoont|$1 accoonts}} in the last $2, which is the maximum allaed in this time period.\nAs a result, veesitors uisin this IP address canna creaut ony mair accoonts at the moment.",
        "emailauthenticated": "Yer wab-mail address wis confirmed oan $2 at $3.",
        "emailnotauthenticated": "Yer wab-mail address isna yet confirmed.\nNae wab-mail will be sent fer oni o the follaein features.",
        "noemailprefs": "Specifie aen email address in yer preferances fer thir featurs tae wairk.",
        "invalidemailaddress": "The wab-mail address canna be acceptit sin it seems tae be formattit wrang.\nPlease enter ae weel-formattit address or mak that field tuim.",
        "cannotchangeemail": "Accoont wab-mail addresses canna be chynged oan this wiki.",
        "emaildisabled": "This site canna send wab-mails.",
-       "accountcreated": "Accoont cræftit",
-       "accountcreatedtext": "The uiser accoont fer [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|tauk]]) haes been cræftit.",
+       "accountcreated": "Accoont creautit",
+       "accountcreatedtext": "The uiser accoont fer [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|tauk]]) haes been creautit.",
        "createaccount-title": "Accoont creaution fer {{SITENAME}}",
        "createaccount-text": "Somebodie cræftit aen accoont fer yer wab-mail address oan {{SITENAME}} ($4) named \"$2\", wi passwaird \"$3\".\nYe shid log in n chynge yer passwaird nou.\n\nYe can ignore this message, gif this accoont wis cræftit bi mistak.",
        "login-throttled": "Ye'v makit ower monie recynt login attempts.\nPlease wait $1 afore giein it anither gae.",
        "resetpass_submit": "Set passwaird n log in",
        "changepassword-success": "Yer passwaird chynge wis braw!",
        "changepassword-throttled": "Ye'v makit ower monie recynt login attempts.\nPlease wait $1 afore giein it anither gae.",
+       "botpasswords-createnew": "Creaut a new bot passwird",
        "botpasswords-label-create": "Creaut",
+       "botpasswords-created-title": "Bot passwird creautit",
+       "botpasswords-created-body": "The bot passwird for bot name \"$1\" o uiser \"$2\" wis creautit.",
        "resetpass_forbidden": "Passwairds canna be chynged",
        "resetpass-no-info": "Ye maun be loggit in tae access this page directly.",
        "resetpass-submit-loggedin": "Chynge passwaird",
        "searchprofile-advanced-tooltip": "Rake in custom namespaces",
        "search-result-size": "$1 ({{PLURAL:$2|1 waird|$2 wairds}})",
        "search-result-category-size": "{{PLURAL:$1|1 memmer|$1 memmers}} ({{PLURAL:$2|1 subcategerie|$2 subcategeries}}, {{PLURAL:$3|1 file|$3 files}})",
-       "search-redirect": "(reguide $1)",
+       "search-redirect": "(reguide frae $1)",
        "search-section": "(section $1)",
        "search-category": "(categerie $1)",
        "search-file-match": "(matches file content.)",
        "right-editsemiprotected": "Eedit pages protected aes \"{{int:protect-level-autoconfirmed}}\"",
        "right-editcontentmodel": "Eedit the content model o ae page",
        "right-editinterface": "Eedit the uiser interface",
-       "right-editusercssjs": "Eedit ither uisers' CSS n JavaScript files",
        "right-editusercss": "Eedit ither uisers' CSS files",
        "right-edituserjs": "Eedit ither uisers' JavaScript files",
        "right-editmyusercss": "Eidit yer ain uiser CSS files",
        "rcshowhidemine-show": "Shaw",
        "rcshowhidemine-hide": "Skauk",
        "rcshowhidecategorization-show": "Shaw",
-       "rclinks": "Shaw last $1 chynges in last $2 days<br />$3",
+       "rclinks": "Shaw last $1 chynges in last $2 days",
        "diff": "diff",
        "hist": "hist",
        "hide": "Skauk",
        "upload-too-many-redirects": "The URL contained oewr monie reguidals",
        "upload-http-error": "Aen HTTP mistake occurred: $1",
        "upload-copy-upload-invalid-domain": "Copie uplaids arna available fae this domain.",
+       "upload-dialog-title": "Uplaid file",
+       "upload-dialog-button-cancel": "Cancel",
+       "upload-dialog-button-back": "Back",
+       "upload-dialog-button-done": "Duin",
+       "upload-dialog-button-save": "Hain",
+       "upload-dialog-button-upload": "Uplaid",
+       "upload-form-label-infoform-title": "Details",
+       "upload-form-label-infoform-name": "Name",
        "upload-form-label-own-work": "This is ma awn wark",
+       "upload-form-label-own-work-message-generic-local": "A confirm that A am uplaidin this file follaein the terms o service an licensin policies on {{SITENAME}}.",
        "backend-fail-stream": "Coudna stream file \"$1\".",
        "backend-fail-backup": "Coudna backup file \"$1\".",
        "backend-fail-notexists": "The file $1 disna exeest.",
        "watchnologin": "Nae loggit in",
        "addwatch": "Eik til watchleet",
        "addedwatchtext": "The page \"[[:$1]]\" haes been added til yer [[Special:Watchlist|watchleet]].\nFutur chynges til this page n its associated tauk page will be leeted thaur.",
-       "addedwatchtext-short": "The page \"$1\" haes been eikit tae yer watchleet.",
+       "addedwatchtext-short": "The page \"$1\" haes been addit tae yer watchleet.",
        "removewatch": "Remuiv fae watchleet",
        "removedwatchtext": "The page \"[[:$1]]\" haes been remuied fae [[Special:Watchlist|yer watchleet]].",
        "removedwatchtext-short": "The page \"$1\" haes been remuived fae yer watchleet.",
        "undeleteviewlink": "see",
        "undeleteinvert": "Invert the selection",
        "undeletecomment": "Raison:",
-       "undeletedrevisions": "{{PLURAL:$1|1 reveesion|$1 reveesions}} restored",
-       "undeletedrevisions-files": "{{PLURAL:$1|1 reveesion|$1 reveesions}} n {{PLURAL:$2|1 file|$2 files}} restored",
-       "undeletedfiles": "{{PLURAL:$1|1 file|$1 files}} restored",
        "cannotundelete": "Ondelyte failed:\n$1",
        "undeletedpage": "<strong>$1 haes been restored</strong>\n\nConsult the [[Special:Log/delete|delytion log]] fer ae record o recynt delytions n restorations.",
        "undelete-header": "See [[Special:Log/delete|the delytion log]] fer the recentlie delytit pages.",
        "pageinfo-robot-index": "Permitit",
        "pageinfo-robot-noindex": "Na permitit",
        "pageinfo-watchers": "Nummer o page watchers",
+       "pageinfo-visiting-watchers": "Nummer o page watchers wha veesitit recent eedits",
        "pageinfo-few-watchers": "Less than $1 {{PLURAL:$1|watcher|watchers}}",
        "pageinfo-redirects-name": "Nummer o reguidals til this page",
        "pageinfo-subpages-name": "Nummer o subpages o this page",
        "tags-active-no": "Naw",
        "tags-edit": "eedit",
        "tags-hitcount": "$1 {{PLURAL:$1|chynge|chynges}}",
+       "tags-create-submit": "Creaut",
        "tags-edit-logentry-selected": "{{PLURAL:$1|Selectit log event|Selectit log events}}:",
        "tags-edit-logentry-legend": "Add or remuive tags frae {{PLURAL:$1|this log entry|aw $1 log entries}}",
        "tags-edit-logentry-submit": "Apply chynges tae {{PLURAL:$1|this log entry|$1 log entries}}",
index 5107682..666d46b 100644 (file)
        "rcshowhidecategorization": "$1 صفحاتي زمراڪاري",
        "rcshowhidecategorization-show": "ڏيکاريو",
        "rcshowhidecategorization-hide": "لڪايو",
-       "rclinks": "پوين $2 ڏينھن ۾ آيل پويون $1 تبديليون ڏيکاريو <br />$3",
+       "rclinks": "پوين $2 ڏينھن ۾ آيل پويون $1 تبديليون ڏيکاريو",
        "diff": "تفاوت",
        "hist": "سوانح",
        "hide": "لڪايو",
        "table_pager_limit_label": "وَٿُون في صفحو:",
        "table_pager_limit_submit": "ھلو",
        "table_pager_empty": "ڪو بہ نتيجو نہ مليو",
+       "autoredircomment": "صفحي کي [[$1]] ڏانھن چوريو",
        "watchlistedit-normal-title": "نظر ۾ فھرست کي سنواريو",
        "watchlistedit-raw-titles": "عنوانَ:",
        "watchlistedit-clear-titles": "عنوانَ:",
index faafcb4..5a597b6 100644 (file)
        "externaldberror": "S'è verifiggaddu un errori cu lu server di autentificazioni esthernu, oppuru nò si diponi di l'autorizazioni nezzessàri pa aggiornà la propria registhrazioni estherna.",
        "login": "Intra",
        "nav-login-createaccount": "Intra / registhrazioni",
-       "userlogin": "Intra o cria una noba registhrazioni",
-       "userloginnocreate": "Intra",
        "logout": "Esci",
        "userlogout": "Esci",
        "notloggedin": "Intradda no effettuadda",
-       "nologin": "No ài una registhrazioni? '''$1'''.",
-       "nologinlink": "Crea una noba registhrazioni",
        "createaccount": "Crea una noba registhrazioni",
-       "gotaccount": "Ài già'na registhrazioni? '''$1'''.",
-       "gotaccountlink": "Intra",
-       "userlogin-resetlink": "Hai immintiggaddu li minuddi d'intradda?",
        "createaccountmail": "via postha erettrònica",
-       "createaccountreason": "Mutibu:",
        "createacct-reason": "Mutibu",
        "badretype": "Li paràuri d'órdhini insiriddi nò cuinzidhini tra èddi.",
        "userexists": "L'innòmu utenti insiriddu è già utirizaddu. Pa pazieri chirria un'innòmu utenti dibessu.",
        "prefs-misc": "Vari",
        "saveprefs": "Saivva li prifirenzi",
        "prefs-editing": "Casella di mudìfigga",
-       "rows": "Righi:",
-       "columns": "Curonni:",
        "searchresultshead": "Zercha",
        "stub-threshold": "Varori mìminu pa i <a href=\"#\" class=\"stub\">cullegamenti a li sàgumi</a>:",
        "recentchangesdays": "Nùmaru di dì da musthrà i li ulthimi mudìfigghi:",
        "userrights-reason": "Mutibu:",
        "userrights-no-interwiki": "Nò ài lu primmissu pa mudìfiggà li diritti di l'utenti i' althri siti.",
        "userrights-nodatabase": "La bancadati $1 nò isisthi o nò è in lucari.",
-       "userrights-nologin": "Débi [[Special:UserLogin|intrà]] cumenti amministhradori pa assignà li diritti utenti.",
-       "userrights-notallowed": "La registhrazioni tóia nò à lu primissu d'assignà li diritti utenti.",
        "group": "Gruppu:",
        "group-user": "Utenti",
        "group-autoconfirmed": "Utenti autocunfèimmaddi",
        "rcshowhideanons": "$1 li utenti anònimi",
        "rcshowhidepatr": "$1 li mudìfigghi contrulladdi",
        "rcshowhidemine": "$1 li me' mudìfigghi",
-       "rclinks": "Musthra li $1 mudìfigghi più rizzenti arriggaddi i' l'ulthimi $2 dì<br />$3",
+       "rclinks": "Musthra li $1 mudìfigghi più rizzenti arriggaddi i' l'ulthimi $2 dì",
        "diff": "diff",
        "hist": "cron",
        "hide": "Cua",
        "undeletelink": "visuarizza/rimpustha",
        "undeleteviewlink": "vidé",
        "undeletecomment": "Cummentu:",
-       "undeletedrevisions": "{{PLURAL:$1|Una ribisioni ricuparadda|$1 ribisioni ricuparaddi}}",
-       "undeletedrevisions-files": "{{PLURAL:$1|Una ribisioni|$1 ribisioni}} e {{PLURAL:$2|un file ricuparaddu|$2 file ricuparaddi}}",
-       "undeletedfiles": "{{PLURAL:$1|Un file ricuparaddu|$1 file ricuparaddi}}",
        "cannotundelete": "Ricùparu falliddu; è pussìbiri chi la pàgina sia già isthadda ricuparadda da un althru utenti.",
        "undelete-header": "Cunsulthà lu [[Special:Log/delete|rigisthru di li canzilladduri]] pa vidé li canzilladduri più rizzenti.",
        "undelete-search-box": "Zercha i' li pàgini canzilladdi",
index 5676eee..b65dfd3 100644 (file)
        "yourpasswordagain": "دیسان تێپەڕوشەگە بنۊسەو:",
        "login": "بچووە ناو",
        "nav-login-createaccount": "بچووە ناو / ھەژمار درس بکە",
-       "userlogin": "بچووە ناو / ھەژمار درس بکە",
-       "userloginnocreate": "بچووە ناو",
        "logout": "بچووە دەیشت",
        "userlogout": "بچووە دەرەو",
-       "nologin": "ھەژمار نەێری؟  $1.",
-       "nologinlink": "ھەژمارێگ درس بکە",
        "createaccount": "ھەژمار درس بکە",
-       "gotaccount": "لێرە ھەژمار دێرید؟ $1.",
-       "gotaccountlink": "بچووە ناو",
-       "userlogin-resetlink": "وردەکاریەیل ناوچینت لە ھۊرەو بردیتە؟",
        "createacct-emailrequired": "ناونیشان ئیمەیل",
-       "createaccountreason": "هووکار:",
        "createacct-reason": "هووکار",
        "nouserspecified": "بایەد ناو ئەوکاربەری دابین بکەی.",
        "login-userblocked": "ئەێ ئەوکاربەرە بلاک کریاێە. چۊنە ناو قەدەغەنە.",
        "rcshowhideanons": "ئەوکاربەرە نەناسیاوەگان $1",
        "rcshowhidepatr": "وێراشتە نەگەردیاێەگان $1",
        "rcshowhidemine": "وێراشتەگانم $1",
-       "rclinks": "دۊایین $1 گووڕانکاری $2 ڕووژ ویەردە نیشان بدە<br />$3",
+       "rclinks": "دۊایین $1 گووڕانکاری $2 ڕووژ ویەردە نیشان بدە",
        "diff": "جیاوازی",
        "hist": "دیرۆک",
        "hide": "بشارەو",
index 404083e..df9558e 100644 (file)
        "rcshowhideanons": "$1 anonyma geavaheaddjit",
        "rcshowhidepatr": "$1 dárkistuvvon rievdadusat",
        "rcshowhidemine": "$1 iežas rievdádusat",
-       "rclinks": "Čájet $1 varas rievdadusa maŋimus $2 beaivve siste.<br />$3",
+       "rclinks": "Čájet $1 varas rievdadusa maŋimus $2 beaivve siste.",
        "diff": "erohus",
        "hist": "hist",
        "hide": "čiega",
        "undeleterevisions": "{{PLURAL:$1|Okta veršuvdna|$1 veršuvnna}} lasihuvvon arkiivii.",
        "undeletebtn": "Máhcat",
        "undeletecomment": "Kommeanta:",
-       "undeletedrevisions": "$1 veršuvnna máhcahuvvui",
-       "undeletedrevisions-files": "$1 veršuvnna ja $2 fiilla máhcahuvvui",
-       "undeletedfiles": "$1 fii(l)la máhcahuvvui",
        "cannotundelete": "Máhcaheapmi ii lihkosmuvvan.",
        "undelete-search-box": "Oza sihkojuvvon siidduid",
        "undelete-search-prefix": "Čájet siidduid, mat álget mearkkaiguin:",
index 62ecd78..5d67afd 100644 (file)
        "externaldberror": "Pos-römjde authenticacionde database extername jöx me necoccebj permiccionde updatan mecaitom externom.",
        "login": "Caápo",
        "nav-login-createaccount": "Caápo / xuatl",
-       "userlogin": "Caápo / xuatl",
        "logout": "Cuípo",
        "userlogout": "Cuípo",
        "notloggedin": "Necaápo",
-       "nologin": "Menecaápo? '''$1'''.",
-       "nologinlink": "Xuatl ö",
        "createaccount": "Xuatl",
-       "gotaccount": "Mecaápo? '''$1'''.",
-       "gotaccountlink": "Caápo",
        "createaccountmail": "caxuatl e-iitom",
        "badretype": "Quimx cánj zo misoj nematchöx.",
        "userexists": "IDde caitom coccebj usadad. Submitom hunnom.",
        "prefs-misc": "Jömc",
        "saveprefs": "Xuniim",
        "prefs-editing": "Ticpatlöx",
-       "rows": "Rowám:",
-       "columns": "Columnám:",
        "searchresultshead": "Yahöx",
        "savedprefs": "Hequáatlaác coccebj xuniimöx.",
        "timezonelegend": "Zonede xepe",
        "rcshowhideanons": "$1 caitóm anoniimóm",
        "rcshowhidepatr": "$1 ticpatlöx patrollöx",
        "rcshowhidemine": "$1 hániideditám",
-       "rclinks": "Cohuatlöx hunquiix $1 zo ixáap $2 zo iti <br />$3",
+       "rclinks": "Cohuatlöx hunquiix $1 zo ixáap $2 zo iti",
        "diff": "quiix",
        "hist": "histó",
        "hide": "Cíiitám",
index 687d41f..61bb2ab 100644 (file)
        "externaldberror": "Huru",
        "login": "Huru",
        "nav-login-createaccount": "Huru / kontu tee",
-       "userlogin": "Huru / kontu tee",
-       "userloginnocreate": "Huru",
        "logout": "Fatta",
        "userlogout": "Fatta",
        "notloggedin": "Mana huru",
        "userlogin-noaccount": "Šii nda kontu wala?",
        "userlogin-joinproject": "Dii {{SITENAME}}",
-       "nologin": "Šii nda kontu wala? $1.",
-       "nologinlink": "Kontu tee",
        "createaccount": "Kontu tee",
-       "gotaccount": "Huru",
-       "gotaccountlink": "Huru",
-       "userlogin-resetlink": "Dirŋa ni kontu šilbawey?",
        "userlogin-resetpassword-link": "Dirŋa ni šennikufaloo?",
        "userlogin-helplink2": "Ay gaa ka huru",
        "userlogin-loggedin": "N' huru ka ben sanda {{GENDER:$1|$1}}.\nGanda takaddaa zaa ka huru goykaw tana.",
        "createacct-another-email-ph": "Bataga aderesu dam",
        "createaccountmail": "Šiiyan šennikufal dam saaye bande nd'a sanba bataga aderesu tabatantaa do",
        "createacct-realname": "Maa cimi (suubari)",
-       "createaccountreason": "Dalil:",
        "createacct-reason": "Dalil",
        "createacct-reason-ph": "Hayaa kaŋ se war goo ma kontu waana tee",
        "createacct-submit": "War kontoo tee",
        "right-editprotected": "Moɲey kaŋ jejebandi sanda \"{{int:protect-level-sysop}}\" fasal",
        "right-editsemiprotected": "Moɲey kaŋ jejebandi sanda \"{{int:protect-level-autoconfirmed}}\" fasal",
        "right-editinterface": "Goykaw diidogoo fasal",
-       "right-editusercssjs": "Goykaw taney CSS nda JavaScript tukey fasal",
        "right-editusercss": "Goykaw taney CSS tukey fasal",
        "right-edituserjs": "Goykaw taney JavaScript tuke fasal",
        "right-editmyusercss": "War boŋ goykaw CSS tukey fasal",
        "rcshowhidemine": "Ay barmay $1",
        "rcshowhidemine-show": "Cebe",
        "rcshowhidemine-hide": "Tugu",
-       "rclinks": "Cebe barmay koraw $1 jirbi $2 korawey ra<br />$3",
+       "rclinks": "Cebe barmay koraw $1 jirbi $2 korawey ra",
        "diff": "zilayyan",
        "hist": "taariki",
        "hide": "Tugu",
        "undeleteviewlink": "guna",
        "undeleteinvert": "Suubaroo bere",
        "undeletecomment": "Dalil:",
-       "undeletedrevisions": "{{PLURAL:$1|Filla $1}} n' ka yeeti",
-       "undeletedrevisions-files": "{{PLURAL:$1|Filla $1}} nda {{PLURAL:$2|tuku $2}} n' ka yeeti",
-       "undeletedfiles": "{{PLURAL:$1|Tuku $1}} n' ka yeeti",
        "cannotundelete": "Tuusuyan naŋ kaŋ:\n$1",
        "undeletedpage": "<strong>$1 n' ka yeeti</strong>\n\nGuna [[Special:Taariki/tuusu|tuusuyan taariki]] ka dii tuusuyan korawey nda yeetiyaney kaŋ jisandi.",
        "undelete-header": "Guna [[Special:Taariki/tuusu|tuusuyan taarikoo]] moɲey kaŋ kokor ka tuusandi se.",
        "logentry-upload-overwrite": "$1 na dumi taaga {{GENDER:$2|zijandi}} $3 se",
        "logentry-upload-revert": "$1 na $3 {{GENDER:$2|zijandi}}",
        "rightsnone": "(baffoo)",
-       "revdelete-summary": "duurandi fasal",
        "feedback-adding": "Goo ma willandi tonton moɲoo ga…",
        "feedback-bugcheck": "A boori! Koroši de wala woo manti [hasaraw bayrandi $1] affaa. \\",
        "feedback-bugnew": "Ay n'a koroši. Hasaraw bayrandi sanba",
index 12051ab..8420054 100644 (file)
        "password-change-forbidden": "Negalat tuo wiki keistė slaptažuodiu.",
        "login": "Prėsėjongtė",
        "nav-login-createaccount": "Prėsėjongtė / padėrbtė paskīra",
-       "userlogin": "Prėsėjongtė / padėrbtė paskīra",
-       "userloginnocreate": "Prėsėjongtė",
        "logout": "Atsijongtė",
        "userlogout": "Atsijongtė",
        "notloggedin": "Neprėsėjongis",
        "userlogin-noaccount": "Netorat paskīruos?",
        "userlogin-joinproject": "Jonkėtėis prī {{SITENAME}}",
-       "nologin": "Netorat prėsėjongėma varda? '''$1'''.",
-       "nologinlink": "Sokorkėt paskīra",
        "createaccount": "Pasėdėrbtė paskīra",
-       "gotaccount": "Jau torėt paskīra? '''$1'''.",
-       "gotaccountlink": "Prėsėjonkat",
-       "userlogin-resetlink": "Ožmiršat sava prėsėjongėma doumenis?",
        "userlogin-resetpassword-link": "Ožmiršat sava slaptažuodi?",
        "userlogin-helplink2": "Prėsėjongėma pagelba",
        "userlogin-loggedin": "Tamsta jau īr prėsijongė̄s kāp {{GENDER:$1|$1}}.\nJēb nuorat prisėjongtė kāp kėts žmuogos, nauduokat skvarma apatiuo.",
        "createacct-another-email-ph": "Ožrašīkėt el. pašta adresa",
        "createaccountmail": "Nauduokėt laikėna slaptažuodi ė siōskėt nuruodėtō el. paštō",
        "createacct-realname": "Tėkros vardos (nie būtėns)",
-       "createaccountreason": "Dingstės:",
        "createacct-reason": "Dingstės",
        "createacct-reason-ph": "Kūdie dėrbat kėta nauduotojė poslapi",
        "createacct-submit": "Padėrbkat savėi paskīra",
        "rcshowhidecategorization": "$1, kap poslapiam doud kateguorėjės",
        "rcshowhidecategorization-show": "Ruodītė",
        "rcshowhidecategorization-hide": "Kavuotė",
-       "rclinks": "Ruodītė vielībus $1 pakeitėmu par paskuojės $2 dėinas<br />$3",
+       "rclinks": "Ruodītė vielībus $1 pakeitėmu par paskuojės $2 dėinas",
        "diff": "skėrt",
        "hist": "ist",
        "hide": "Kavuotė",
        "undeleteviewlink": "veizietė",
        "undeleteinvert": "Žīmietė atvėrkštē",
        "undeletecomment": "Dingstės:",
-       "undeletedrevisions": "$1 {{PLURAL:$1|pakeitėms sogrōžints|pakeitėmā sogrōžintė|pakeitėmu sogrōžintu}} īr",
-       "undeletedrevisions-files": "sogrōžintaː $1 {{PLURAL:$1|pakeitėms|pakeitėmā|pakeitėmu}} ėr $2 {{PLURAL:$2|abruozdielis|abruozdielē|abruozdieliu}}",
-       "undeletedfiles": "sogrōžintaː {{PLURAL:$1|abruozdielis|abruozdielē|abruozdieliu}}",
        "undeletedpage": "'''$1 bova pargōžints'''\nParveizėkat [[Special:Log/delete|trīnėmu sāroša]], ka regietomiet, kas dabā ėšrinta/grōžinta īr.",
        "undelete-header": "Veizėkat [[Special:Log/delete|trīnėma istuorėjuo]] paskoteniausē ėštrintus poslapius.",
        "undelete-search-box": "Ėiškuotė ėštrintū poslapiu",
        "logentry-upload-overwrite": "$1 {{GENDER:$2|ožkruovė}} naujė $3 atmaina",
        "logentry-upload-revert": "$1 {{GENDER:$2|ožkruovė}} $3",
        "rightsnone": "(juokiū)",
-       "revdelete-summary": "keitėma paāškėnėms",
        "feedback-close": "Padėrbt",
        "searchsuggest-search": "Ėiškuotė",
        "searchsuggest-containing": "katrėi tor...",
index 40e57a9..d8415b4 100644 (file)
        "right-editsemiprotected": "Uređivanje stranica zaštićenih kao  \"{{int:protect-level-autoconfirmed}}\"",
        "right-editcontentmodel": "Uređivanje modela sadržaja stranice",
        "right-editinterface": "Uređivanje korisničkog interfejsa",
-       "right-editusercssjs": "Uređivanje CSS i JS datoteka drugih korisnika",
        "right-editusercss": "Uređivanje CSS datoteka drugih korisnika",
        "right-edituserjs": "Uređivanje Javascript datoteka drugih korisnika",
        "right-editmyusercss": "Uredite svoje vlastite CSS datoteke",
        "rcshowhidecategorization": "$1 kategorizacija stranice",
        "rcshowhidecategorization-show": "Prikaži",
        "rcshowhidecategorization-hide": "Sakrij",
-       "rclinks": "Prikaži najskorijih $1 izmjena u posljednjih $2 dana<br />$3",
+       "rclinks": "Prikaži najskorijih $1 izmjena u posljednjih $2 dana",
        "diff": "razl-разл",
        "hist": "his-пов",
        "hide": "Sakrij",
        "undeleteviewlink": "pogledaj",
        "undeleteinvert": "Sve osim odabranog",
        "undeletecomment": "Razlog:",
-       "undeletedrevisions": "{{PLURAL:$1|$1 revizija vraćena|$1 revizije vraćene|$1 revizija vraćeno}}",
-       "undeletedrevisions-files": "{{PLURAL:$1|1 revizija|$1 revizije|$1 revizija}} i {{PLURAL:$2|1 datoteka|$2 datoteke|$2 datoteka}} vraćeno",
-       "undeletedfiles": "{{PLURAL:$1|1 datoteka vraćena|$1 datoteke vraćene|$1 datoteka vraćeno}}",
        "cannotundelete": "Vraćanje nije uspjelo:\n$1",
        "undeletedpage": "'''$1 je vraćena'''\n\nProvjerite [[Special:Log/delete|evidenciju brisanja]] za zapise najskorijih brisanja i vraćanja.",
        "undelete-header": "Pogledajte [[Special:Log/delete|evidenciju brisanja]] za nedavno obrisane stranice.",
index f84e6e2..72ee6fe 100644 (file)
        "externaldberror": "Imma tlla ɣin kra lafut ɣu ukcumnk ulla urak ittuyskar at tsbddelt lkontnk nbrra.",
        "login": "Kcm ɣid",
        "nav-login-createaccount": "kcm / murzm Amidan",
-       "userlogin": "kchem / qiyd amskhdam amaynu",
-       "userloginnocreate": "Kcm ɣid",
        "logout": "Fuɣ",
        "userlogout": "Fuɣ",
        "notloggedin": "Ur tmlit mat git",
-       "nologin": "Ur trzemt amidan (lkunt) nek? $1..",
-       "nologinlink": "Murzm amidan nek (lkunt)..",
        "createaccount": "Murzm amidan nek (lkunt)..",
-       "gotaccount": "Is nit dark amidan(lkunt)? $1.",
-       "gotaccountlink": "Kcm",
-       "userlogin-resetlink": "Ttut ismnk d tasarut n ukccum nk",
        "createaccountmail": "S tirawt taliktunant",
-       "createaccountreason": "Maɣ:",
        "badretype": "Tasarut lin tgit ur dis tucka.",
        "userexists": "Asaɣ nu umsqdac li tskcmt illa yad",
        "loginerror": "Gar akccum",
        "saveprefs": "sjjl",
        "restoreprefs": "sglbd kollo regalega",
        "prefs-editing": "tahrir",
-       "rows": "sfof:",
-       "columns": "aamida:",
        "searchresultshead": "Cabba",
        "stub-threshold": "wasla n  <a href=\"#\" class=\"stub\">do amzdoy</a> itforma (bytes):",
        "stub-threshold-disabled": "moattal",
        "rcshowhideanons": "$1 midn ur ttuyssan nin",
        "rcshowhidepatr": "$1 Imbddln n tsagga",
        "rcshowhidemine": "$1 iẓṛign inu",
-       "rclinks": "Ml id  $1 n imbddltn immgura li ittuyskarn n id $2 ussan ad gguranin<br />$3.",
+       "rclinks": "Ml id  $1 n imbddltn immgura li ittuyskarn n id $2 ussan ad gguranin",
        "diff": "Gar",
        "hist": "Amzruy",
        "hide": "Ḥbu",
        "htmlform-selectorother-other": "wayya",
        "revdelete-restricted": "iskr aqn i indbaln",
        "revdelete-unrestricted": "Aqn iḥiyd i indbaln",
-       "rightsnone": "(ḥtta yan)",
-       "revdelete-summary": "Awal uflla n imbddln"
+       "rightsnone": "(ḥtta yan)"
 }
index f1e0537..c82efe3 100644 (file)
        "right-editsemiprotected": "မႄးထတ်းၼႃႈလိၵ်ႈၸိူဝ်း ႁႄႉၵင်ႈဝႆႉၼင်ႇ \"{{int:protect-level-autoconfirmed}}\"",
        "right-editcontentmodel": "မႄးထတ်း ၽၢင်ႁၢင်ႈတူဝ်ၶဝ်ႈပႃး ၶွင်ၼႃႈလိၵ်ႈ",
        "right-editinterface": "မႄးထတ်း ယူင်ႉႁၢင်ႈ ၽူႈၸႂ်ႉတိုဝ်း",
-       "right-editusercssjs": "မႄးထတ်းၾၢႆႇ CSS လႄႈ JavaScript ၶွင် ၽူႈၸႂ်ႉတိုဝ်းတၢင်ႇၸိူဝ်း",
        "right-editusercss": "မႄးထတ်း ၾၢႆႇ CSS ၶွင် ၽူႈၸႂ်ႉတိုဝ်းတၢင်ႇၸိူဝ်း",
        "right-edituserjs": "မႄးထတ်း ၾၢႆႇ JavaScript ၶွင် ၽူႈၸႂ်ႉတိုဝ်း တၢင်ႇၸိူဝ်း",
        "right-editmyusercss": "မႄးထတ်း ၾၢႆႇ CSS ၶွင်ႁင်းၸဝ်ႈၵဝ်ႇ",
        "rcshowhidecategorization": "$1 ၼႃႈလိၵ်ႈ ပၢႆး-",
        "rcshowhidecategorization-show": "ၼႄ",
        "rcshowhidecategorization-hide": "သိူင်ႇ",
-       "rclinks": "ၼႄလွင်ႈလႅၵ်ႈလၢႆႈ ၵမ်းလိုၼ်းသုတ်း $1 ဢၼ်လႅၵ်ႈလၢႆႈမႃး မိူဝ်ႈ $2 ဝၼ်းၼၼ်ႉ<br />$3",
+       "rclinks": "ၼႄလွင်ႈလႅၵ်ႈလၢႆႈ ၵမ်းလိုၼ်းသုတ်း $1 ဢၼ်လႅၵ်ႈလၢႆႈမႃး မိူဝ်ႈ $2 ဝၼ်းၼၼ်ႉ",
        "diff": "ပႅၵ်ႇပိူင်ႈ",
        "hist": "ပိုၼ်း",
        "hide": "သိူင်ႇ",
        "undeleteviewlink": "တူၺ်း",
        "undeleteinvert": "လွင်ႈလိူၵ်ႈသၢင်ႈ ပိၼ်ႈၽူၼ်",
        "undeletecomment": "လွင်ႈတၢင်း :",
-       "undeletedrevisions": "{{PLURAL:$1|1 ၶူၼ်ႉၶႆႈ|$1 ၸိူဝ်းၶူၼ်ႉၶႆႉ}} ဢဝ်ဝႆႉၶိုၼ်းယဝ်ႉ",
-       "undeletedfiles": "ဝႆႉၶိုၼ်း {{PLURAL:$1|1 ၾၢႆႇ}} ယဝ်ႉ",
        "undelete-search-title": "ၶူၼ်ႉႁႃ ၼႃႈလိၵ်ႈ ၸိူဝ်းမွတ်ႇဝႆႉ",
        "undelete-search-box": "ၶူၼ်ႉႁႃ ၼႃႈလိၵ်ႈ ၸိူဝ်းမွတ်ႇဝႆႉ",
        "undelete-search-prefix": "ၼႄ ၼႃႈလိၵ်ႈ ၸိူဝ်းတႄႇဝႆႉတင်း :",
index fd9f5a5..a966ae7 100644 (file)
        "right-editsemiprotected": "ලෙස ආරක්ෂා සංස්කරණය කරන්න පිටු \"{{int:protect-level-autoconfirmed}}\"",
        "right-editcontentmodel": "පිටුවෙහි ඇති අන්තර්ගතය ආකෘතිය සංස්කරණය කරන්න",
        "right-editinterface": "පරිශීලක අතුරු-මුව සංස්කරණය කරන්න",
-       "right-editusercssjs": "අනෙකුත් පරිශීලකයන්ගේ  CSS හා JS ගොනු සංස්කරණය කරන්න",
        "right-editusercss": "අනෙකුත් පරිශීලකයන්ගේ  CSS ගොනු සංස්කරණය කරන්න",
        "right-edituserjs": "අනෙකුත් පරිශීලකයන්ගේ  JS ගොනු සංස්කරණය කරන්න",
        "right-editmyusercss": "ඔබේ ම පරිශීලක CSS ගොනු සංස්කරණය කරන්න",
        "rcshowhidecategorization": "පිටු ප්‍රවර්ගීකරණය $1",
        "rcshowhidecategorization-show": "පෙන්වන්න",
        "rcshowhidecategorization-hide": "සඟවන්න",
-       "rclinks": "අවසන් දින $2 තුලදී සිදුවී ඇති අවසන් වෙනස්වීම් $1 පෙන්නුම් කරන්න<br />$3",
+       "rclinks": "අවසන් දින $2 තුලදී සිදුවී ඇති අවසන් වෙනස්වීම් $1 පෙන්නුම් කරන්න",
        "diff": "වෙනස",
        "hist": "ඉති",
        "hide": "සඟවන්න",
        "undeleteviewlink": "නරඹන්න",
        "undeleteinvert": "තෝරාගැනුම කණපිට පෙරලන්න",
        "undeletecomment": "හේතුව:",
-       "undeletedrevisions": "{{PLURAL:$1|සංශෝධනයක්|සංශෝධන $1 ක්}} ප්‍රතිෂ්ඨාපනය කරන ලදි",
-       "undeletedrevisions-files": "{{PLURAL:$1|එක් සංශෝධනයක්| සංශෝධන $1 ක්}} සහ {{PLURAL:$2|එක් ගොනුවක්|ගොනු $2 ක්}} ප්‍රතිෂ්ඨාපනය කෙරිණි",
-       "undeletedfiles": "{{PLURAL:$1|එක් ගොනුවක්|ගොනු $1 ක්}} ප්‍රතිෂ්ඨාපනය කෙරිණි",
        "cannotundelete": "මකාදැමීම ප්‍රතිලෝම කිරීම අසාර්ථක විය:\n$1",
        "undeletedpage": "'''$1 ප්‍රතිෂ්ඨාපනය කෙරී ඇත'''\n\nමෑතදී සිදුවූ මකාදැමීම් හා ප්‍රතිෂ්ඨාපනයන් හි වාර්තාවක් උදෙසා [[Special:Log/delete|මකාදැමීම් ලඝු-සටහන]] පරිශීලනය කරන්න.",
        "undelete-header": "මෑතදී මකාදැමුණු පිටු සඳහා  [[Special:Log/delete|මකාදැමුම්  ලඝු-සටහන]] බලන්න.",
index 2da5182..c114567 100644 (file)
        "right-editsemiprotected": "Upravovať stránky zamknuté ako „{{int:protect-level-autoconfirmed}}“",
        "right-editcontentmodel": "Upravovať model obsahu stránky",
        "right-editinterface": "Upravovať správy používateľského rozhrania",
-       "right-editusercssjs": "Upravovať CSS a JS súbory ostatných používateľov",
        "right-editusercss": "Upravovať CSS súbory ostatných používateľov",
        "right-edituserjs": "Upravovať JS súbory ostatných používateľov",
        "right-editmyusercss": "Upraviť svoje vlastné používateľské súbory CSS",
        "rcshowhidecategorization": "$1 kategorizáciu",
        "rcshowhidecategorization-show": "Zobraziť",
        "rcshowhidecategorization-hide": "Skryť",
-       "rclinks": "Zobraziť posledných $1 úprav za posledných $2 dní<br />$3",
+       "rclinks": "Zobraziť posledných $1 úprav za posledných $2 dní",
        "diff": "rozdiel",
        "hist": "história",
        "hide": "Skryť",
        "undeleteviewlink": "zobraziť",
        "undeleteinvert": "Invertovať výber",
        "undeletecomment": "Dôvod:",
-       "undeletedrevisions": "{{PLURAL:$1|jedna verzia bola obnovená|$1 verzie boli obnovené|$1 verzií bolo obnovených}}",
-       "undeletedrevisions-files": "{{PLURAL:$1|Jedna revízia|$1 revízie|$1 revízií}} a {{PLURAL:$2|jeden súbor bol obnovený|$2 súbory boli obnovené|$2 súborov bolo obnovených}}",
-       "undeletedfiles": "{{PLURAL:$1|Jeden súbor bol obnovený|$1 súbory boli obnovené|$1 súborov bolo obnovených}}",
        "cannotundelete": "Časť alebo celé obnovenie sa nepodarilo:\n$1",
        "undeletedpage": "'''$1 bol obnovený'''\n\nZoznam posledných mazaní a obnovení nájdete v [[Special:Log/delete|Zázname mazaní]].",
        "undelete-header": "Pozri nedávno zmazané stránky v [[Special:Log/delete|zázname mazaní]].",
index 36d0d24..cbdb085 100644 (file)
        "redirectedfrom": "(Preusmerjeno s strani $1)",
        "redirectpagesub": "Preusmeritvena stran",
        "redirectto": "Preusmeritev na:",
-       "lastmodifiedat": "Čas zadnje spremembe: $2, $1.",
+       "lastmodifiedat": "Čas zadnje spremembe strani: $2, $1.",
        "viewcount": "Stran je bila naložena {{PLURAL:$1|$1-krat}}.",
        "protectedpage": "Zaščitena stran",
        "jumpto": "Skoči na:",
        "readonlywarning": "<strong>Opozorilo: Zbirka podatkov je zaradi vzdrževanja začasno zaklenjena, kar pomeni, da sprememb trenutno ne morete shraniti.</strong>\nProsimo, prenesite besedilo v urejevalnik in ga dodajte pozneje.\n\nSistemski skrbnik, ki jo je zaklenil, je podal naslednjo razlago: $1",
        "protectedpagewarning": "'''Opozorilo: Stran je bila zaklenjena in jo lahko urejajo le uporabniki z administratorskimi pravicami.'''\nZadnji vnos v dnevnik je naveden spodaj:",
        "semiprotectedpagewarning": "'''Opomba:''' Stran je bila zaklenjena in jo lahko urejajo le registrirani uporabniki.\nZadnji vnos v dnevnik je naveden spodaj:",
-       "cascadeprotectedwarning": "'''Opozorilo:''' Ta stran je zaklenjena, tako da jo lahko urejajo le administratorji, saj je bila vključena med {{PLURAL:$1|sledečo stran|sledeči strani|sledeče strani}} s kaskadno zaščito:",
+       "cascadeprotectedwarning": "'''Opozorilo:''' Ta stran je zaklenjena, tako da jo lahko urejajo le uporabniki z [[Special:ListGroupRights|določenimi pravicami]], saj je bila vključena med {{PLURAL:$1|sledečo stran|sledeči strani|sledeče strani}} s kaskadno zaščito:",
        "titleprotectedwarning": "'''Opozorilo: Stran je bila zaklenjena in jo lahko urejajo le uporabniki s [[Special:ListGroupRights|specifičnimi pravicami]].'''\nZa sklic je priskrbljen spodnji dnevnik vnosov:",
        "templatesused": "{{PLURAL:$1|Predloga, uporabljena|Predlogi, uporabljeni|Predloge, uporabljene}} na strani:",
        "templatesusedpreview": "{{PLURAL:$1|Predloga, uporabljena|Predlogi, uporabljeni|Predloge, uporabljene}} v predogledu:",
        "saveusergroups": "Shrani {{GENDER:$1|uporabnikove|uporabničine}} skupine",
        "userrights-groupsmember": "Član skupine:",
        "userrights-groupsmember-auto": "Posreden član:",
-       "userrights-groups-help": "Spreminjate lahko skupine uporabnika:\n* Obkljukano polje pomeni uporabnika, ki je v skupini\n* Odkljukano polje pomeni uporabnika, ki ni v skupini\n* Zvezdica (*) kaže, da uporabnika ne boste mogli odstraniti iz skupine, ko ga vanjo dodate oz. obratno.\n* Lojtra (#) kaže, da lahko čas poteka te skupine postavite samo nazaj; ne morete ga postaviti naprej.",
+       "userrights-groups-help": "Spreminjate lahko skupine uporabnika:\n* Obkljukano polje pomeni uporabnika, ki je v skupini\n* Odkljukano polje pomeni uporabnika, ki ni v skupini\n* Zvezdica (*) kaže, da uporabnika ne boste mogli odstraniti iz skupine, ko ga vanjo dodate oz. obratno.\n* Lojtra (#) kaže, da lahko čas poteka članstva v tej skupine postavite samo nazaj; ne morete ga postaviti naprej.",
        "userrights-reason": "Razlog:",
        "userrights-no-interwiki": "Za urejanje pravic uporabnikov na drugih wikijih nimate dovoljenja.",
        "userrights-nodatabase": "Podatkovna baza $1 ne obstaja ali ni lokalna.",
        "userrights-expiry-options": "1 dan:1 day,1 teden:1 week,1 mesec:1 month,3 mesece:3 months,6 mesecev:6 months,1 leto:1 year",
        "userrights-invalid-expiry": "Čas poteka skupine »$1« ni veljaven.",
        "userrights-expiry-in-past": "Čas poteka skupine »$1« je v preteklosti.",
-       "userrights-cannot-shorten-expiry": "Časa poteka skupine »$1« ne morete prestaviti naprej. Samo uporabniki z dovoljenjem za dodajanje ali odstranitev te supine lahko prestavijo čase poteka naprej.",
+       "userrights-cannot-shorten-expiry": "Časa poteka članstva v skupini »$1« ne morete prestaviti naprej. Samo uporabniki z dovoljenjem za dodajanje ali odstranitev te skupine lahko prestavijo čase poteka naprej.",
        "userrights-conflict": "Spor sprememb uporabniških pravic! Prosimo, da pregledate in potrdite svoje spremembe.",
        "group": "Skupina:",
        "group-user": "Uporabniki",
        "right-editsemiprotected": "Urejanje strani, zaščitenih kot »{{int:protect-level-autoconfirmed}}«",
        "right-editcontentmodel": "Urejanje vsebinskega modela strani",
        "right-editinterface": "Urejanje uporabniškega vmesnika",
-       "right-editusercssjs": "Urejanje CSS- in JS-datotek drugih uporabnikov",
        "right-editusercss": "Uredi CSS datotek drugih uporabnikov",
        "right-edituserjs": "Uredi JS datotek drugih uporabnikov",
        "right-editmyusercss": "Uredite svoje uporabniške datoteke CSS",
        "rcfilters-hideminor-conflicts-typeofchange": "Nekaterih vrst sprememb ni možno označiti kot »manjše«, zato je ta filter v sporu z naslednjimi filtri Vrsta spremembe: $1",
        "rcfilters-typeofchange-conflicts-hideminor": "Ta filter Vrsta spremembe je v sporu s filtrom »Manjše urejanje«. Nekaterih vrst sprememb ni možno označiti kot »manjše«.",
        "rcnotefrom": "{{PLURAL:$5|Navedena je sprememba|Navedeni sta spremembi|Navedene so spremembe}} od <strong>$3 $4</strong> dalje (prikazujem jih do <strong>$1</strong>).",
+       "rclistfromreset": "Ponastavi izbiro datuma",
        "rclistfrom": "Prikaži spremembe od $3 $2 naprej",
        "rcshowhideminor": "$1 manjša urejanja",
        "rcshowhideminor-show": "Prikaži",
        "rcshowhidecategorization": "$1 kategorizacijo strani",
        "rcshowhidecategorization-show": "Prikaži",
        "rcshowhidecategorization-hide": "Skrij",
-       "rclinks": "Prikaži zadnjih $1 sprememb v zadnjih $2 dneh<br />$3",
+       "rclinks": "Prikaži zadnjih $1 sprememb v zadnjih $2 dneh",
        "diff": "prim",
        "hist": "zgod",
        "hide": "skrij",
        "php-uploaddisabledtext": "Nalaganje datotek je onemogočeno v PHP.\nProsimo preverite file_uploads nastavitev.",
        "uploadscripted": "Datoteka vsebuje HTML- ali skriptno kodo, ki bi jo lahko brskalnik razlagal napačno.",
        "upload-scripted-pi-callback": "Ne moremo naložiti datoteke, ki vsebuje navodila za slogovno obdelavo XML.",
+       "upload-scripted-dtd": "Ne morete naložiti datotek SVG, ki vsebujejo nestandardno najavo DTD.",
        "uploaded-script-svg": "V naloženi datoteki SVG smo našli skriptni element »$1«.",
        "uploaded-hostile-svg": "V slogovnem elementu naložene datoteke SVG smo našli nevaren CSS.",
        "uploaded-event-handler-on-svg": "Določevanje atributov za dogodke <code>$1=\"$2\"</code> v datotekah SVG ni dovoljeno.",
        "undeleteviewlink": "ogled",
        "undeleteinvert": "Obrni izbor",
        "undeletecomment": "Razlog:",
-       "undeletedrevisions": "{{PLURAL:$1|obnovljena $1 redakcija|obnovljeni $1 redakciji|obnovljene $1 redakcije|obnovljenih $1 redakcij}}",
-       "undeletedrevisions-files": "$1 {{PLURAL:$1|redakcija|redakciji|redakcije|redakcij}} in $2 {{PLURAL:$2|datoteka|datoteki|datoteke|datotek}} {{PLURAL:$1+$2|obnovljena|obnovljeni|obnovljene|obnovljenih}}",
-       "undeletedfiles": "{{PLURAL:$1|obnovljena je $1 datoteka|obnovljeni sta $1 datoteki|obnovljene so $1 datoteke|obnovljenih je $1 datotek}}",
        "cannotundelete": "Nekatere ali vse obnove so spodletele:\n$1",
        "undeletedpage": "'''Obnovili ste stran $1.'''\n\nNedavna brisanja in obnove so zapisani v [[Special:Log/delete|dnevniku brisanja]].",
        "undelete-header": "Glej [[Special:Log/delete|dnevnik brisanja]] za nedavno izbrisane strani.",
        "sp-contributions-uploads": "naložene datoteke",
        "sp-contributions-logs": "dnevniki",
        "sp-contributions-talk": "pogovor",
-       "sp-contributions-userrights": "upravljanje s pravicami uporabnikov",
+       "sp-contributions-userrights": "upravljanje s pravicami {{GENDER:$1|uporabnika|uporabnice}}",
        "sp-contributions-blocked-notice": "Ta uporabnik je trenutno blokiran.\nNajnovejši vnos v dnevniku blokad je naveden spodaj:",
        "sp-contributions-blocked-notice-anon": "Ta IP-naslov je trenutno blokiran.\nNajnovejši vnos v dnevniku blokad je naveden spodaj:",
        "sp-contributions-search": "Išči prispevke",
        "unblocked-id": "Blokada $1 je odstranjena",
        "unblocked-ip": "[[Special:Contributions/$1|$1]] smo odblokirali.",
        "blocklist": "Blokirani uporabniki",
+       "autoblocklist": "Samodejne blokade",
+       "autoblocklist-submit": "Išči",
+       "autoblocklist-legend": "Seznam samodejnih blokad",
+       "autoblocklist-localblocks": "{{PLURAL:$1|Lokalna samodejna blokada|Lokalni samodejni blokadi|Lokalne samodejne blokade}}",
+       "autoblocklist-empty": "Seznam samodejnih blokad je prazen.",
+       "autoblocklist-otherblocks": "{{PLURAL:$1|Druga samodejna blokada|Drugi samodejni blokadi|Druge samodejne blokade}}",
        "ipblocklist": "Blokirani uporabniki",
        "ipblocklist-legend": "Poišči blokiranega uporabnika",
        "blocklist-userblocks": "skrij blokade računov",
        "tooltip-pt-mycontris": "Seznam {{GENDER:|tvojih}} prispevkov",
        "tooltip-pt-anoncontribs": "Seznam urejanj s tega IP-naslova",
        "tooltip-pt-login": "Prijava ni obvezna, vendar je zaželena",
+       "tooltip-pt-login-private": "Da lahko uporabljate ta wiki, se morate prijaviti",
        "tooltip-pt-logout": "Odjavi se",
        "tooltip-pt-createaccount": "Predlagamo vam, da ustvarite račun in se prijavite, vendar pa to ni obvezno.",
        "tooltip-ca-talk": "Pogovor o strani",
        "anonymous": "{{PLURAL:$1|Brezimni uporabnik|Brezimna uporabnika|Brezimni uporabniki}} {{GRAMMAR:rodilnik|{{SITENAME}}}}",
        "siteuser": "uporabnik {{GRAMMAR:rodilnik|{{SITENAME}}}} $1",
        "anonuser": "Brezimni uporabnik {{GRAMMAR:rodilnik|{{SITENAME}}}} $1",
-       "lastmodifiedatby": "Stran je zadnjič urejal(-a) $3 (čas spremembe: $2, $1).",
+       "lastmodifiedatby": "Stran je zadnjič urejal(-a) $3 dne $2 ob $1.",
        "othercontribs": "Temelji na delu $1.",
        "others": "drugi",
        "siteusers": "{{PLURAL:$2|{{GENDER:$1|uporabnika|uporabnice}}|uporabnikov}} {{GRAMMAR:rodilnik|{{SITENAME}}}} $1",
        "confirmrecreate-noreason": "{{GENDER:$1|Uporabnik|Uporabnica}} [[User:$1|$1]] ([[User talk:$1|pogovor]]) je {{GENDER:$1|izbrisal|izbrisala}} to stran po začetku vašega urejanja. Potrdite, da jo resnično želite znova ustvariti.",
        "recreate": "Ponovno ustvari",
        "unit-pixel": " točk",
+       "confirm-purge-title": "Osveži predpomnilnik strani",
        "confirm_purge_button": "Osveži",
        "confirm-purge-top": "Osvežim predpomnjenje strani?",
        "confirm-purge-bottom": "Osvežitev strani počisti predpomnilnik in prisili prikaz najnovejše različice.",
        "htmlform-user-not-valid": "<strong>$1</strong> ni veljavno uporabniško ime.",
        "logentry-delete-delete": "$1 je {{GENDER:$2|izbrisal|izbrisala|izbrisal(-a)}} stran $3",
        "logentry-delete-delete_redir": "$1 je {{GENDER:$2|izbrisal|izbrisala|izbrisal(-a)}} preusmeritev $3 s prepisom",
-       "logentry-delete-restore": "$1 je {{GENDER:$2|obnovil|obnovila|obnovil(-a)}} stran $3",
+       "logentry-delete-restore": "$1 je {{GENDER:$2|obnovil|obnovila|obnovil(-a)}} stran $3 ($4)",
+       "logentry-delete-restore-nocount": "$1 je {{GENDER:$2|obnovil|obnovila|obnovil(-a)}} stran $3",
+       "restore-count-revisions": "$1 {{PLURAL:$1|redakcija|redakciji|redakcije|redakcij}}",
+       "restore-count-files": "$1 {{PLURAL:$1|datoteka|datoteki|datoteke|datotek}}",
        "logentry-delete-event": "$1 je {{GENDER:$2|spremenil|spremenila|spremenil(-a)}} vidljivost $5 {{PLURAL:$5|dnevniškega dogodka|dnevniških dogodkov}} na $3: $4",
        "logentry-delete-revision": "$1 je {{GENDER:$2|spremenil|spremenila|spremenil(-a)}} vidljivost $5 {{PLURAL:$5|redakcije|redakcij}} na strani $3: $4",
        "logentry-delete-event-legacy": "$1 je {{GENDER:$2|spremenil|spremenila|spremenil(-a)}} vidljivost dnevniških dogodkov na $3",
        "special-characters-group-thai": "Tajski",
        "special-characters-group-lao": "Laoški",
        "special-characters-group-khmer": "Kmerski",
+       "special-characters-group-canadianaboriginal": "Kanadsko aboridžinsko",
        "special-characters-title-endash": "navaden pomišljaj",
        "special-characters-title-emdash": "dolgi pomišljaj",
        "special-characters-title-minus": "znak za minus",
        "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",
-       "rawhtml-notallowed": "Oznak &lt;html&gt; ni možno uporabljati izven normalnih strani."
+       "rawhtml-notallowed": "Oznak &lt;html&gt; ni možno uporabljati izven normalnih strani.",
+       "gotointerwiki": "Zapuščate {{GRAMMAR:tožilnik|{{SITENAME}}}}",
+       "gotointerwiki-invalid": "Naveden naslov je neveljaven.",
+       "gotointerwiki-external": "Zapuščate {{GRAMMAR:tožilnik|{{SITENAME}}}}, da obiščete [[$2]], ki je ločena spletna stran.\n\n[$1 Kliknite tukaj, da nadaljujete na $1].",
+       "undelete-cantedit": "Strani ne morete obnoviti, saj vam ni dovoljeno, da jo urejate.",
+       "undelete-cantcreate": "Strani ne morete obnoviti, saj stran s tem imenom ne obstaja in je nimate dovoljenja ustvariti."
 }
index 5e04c16..4bbd590 100644 (file)
        "externaldberror": "Entweder is leit a Fahler bei der externa Authentifizierung vur, oder du darfst dei externes Benutzerkonto ne aktualisiera.",
        "login": "Oanmelda",
        "nav-login-createaccount": "Oamelda / a Konto oalega",
-       "userlogin": "Oanmelda / Nutzerkonto erstella",
        "logout": "Oabmelda",
        "userlogout": "Oabmelda",
        "notloggedin": "Nä oangemeldet",
-       "nologin": "Du hast keen Benutzerkonto? $1.",
-       "nologinlink": "Neues Benutzerkonto oanleega",
        "createaccount": "Benutzerkonto oanlega",
-       "gotaccount": "Du hast bereits a Benutzerkonto? '''$1'''.",
-       "gotaccountlink": "Oanmelda",
-       "userlogin-resetlink": "Die Anmeldedaten vergessen?",
        "createaccountmail": "ieber E-Mail",
        "badretype": "De beida Passwörter stimma nä ieberein.",
        "userexists": "Dar delle Benutzernoame ies schunt vergahn. Bitte wähle enn andern.",
        "saveprefs": "Eenstallunga speichern",
        "restoreprefs": "Olle Standardeinstallunga wiederherstalla",
        "prefs-editing": "Bearbta",
-       "rows": "Zeila:",
-       "columns": "Spalta:",
        "stub-threshold": "Linkformatierung <a href=\"#\" class=\"stub\">klenner Seyta</a> (ei Byte):",
        "recentchangesdays": "Oazoahl dar Tage, de de Liste dar „Letzta Änderunga“ standardmäßig imfassa sull:",
        "recentchangescount": "Oazoahl dar standardmäßig oagezeigta Beoarbeetunga:",
        "userrights-groups-help": "Du koast de Gruppenzugehierigkeit fier diesen Nutzer ändern:\n* A markiertes Kästchen bedeutet, doaß dar Nutzer Mitglied dieser Gruppe ies\n* A * bedeutet, doaß du doas Nutzerrecht noach Erteilung ne wieder zerrickenahma koast (oder umgekehrt).",
        "userrights-no-interwiki": "Du host kenne Berechtigung, Nutzerrechte ei andern Wikis zu ändern.",
        "userrights-nodatabase": "De Datenbank $1 ies ne vurhanda oder ne lokal.",
-       "userrights-nologin": "Du mußt diech miet a'm Administrator-Nutzerkonto [[Special:UserLogin|oamelda]], im Nutzerrechte zu ändern.",
-       "userrights-notallowed": "Du besitzt ne de erforderlichen Berechtigunga, im Nutzerrechte zu vergahn.",
        "userrights-changeable-col": "Gruppazugehierigkeit, de du ändern koast",
        "userrights-unchangeable-col": "Gruppazugehierigkeit, de du ne ändern koast",
        "group-sysop": "Administratora",
        "right-protect": "Seytaschutzstatus ändern",
        "right-editprotected": "Geschitzte Seita bearbta (ohne Kaskadenschutz)",
        "right-editinterface": "Nutzeräberfläche bearbta",
-       "right-editusercssjs": "Fremde CSS- und JavaScript-Dateien bearbta",
        "right-editusercss": "Fremde CSS-Dateien bearbta",
        "right-edituserjs": "Fremde JavaScript-Dateien bearbta",
        "right-rollback": "Schnelles zerrickesetza",
        "rcshowhideanons": "Unangemeldete Benutzer $1",
        "rcshowhidepatr": "Kontrollierte Änderunga $1",
        "rcshowhidemine": "Eegene Beiträge $1",
-       "rclinks": "Zeige de letzta $1 Änneronga dar letzta $2 Taage.<br />$3",
+       "rclinks": "Zeige de letzta $1 Änneronga dar letzta $2 Taage.",
        "diff": "Unt.",
        "hist": "Versiona",
        "hide": "ausblenda",
        "undeleteviewlink": "oasahn",
        "undeleteinvert": "Auswoahl umkehra",
        "undeletecomment": "Begrindung:",
-       "undeletedrevisions-files": "{{PLURAL:$1|1 Version|$1 Versionen}} und {{PLURAL:$2|1 Datei|$2 Dateien}} wurden wiederhergestallt",
        "cannotundelete": "Wiederherstellung fehlgeschlaga; jemand anderes hoot de Seite bereits wiederhergestellt.",
        "undelete-header": "Siehe eim [[Special:Log/delete|Läsch-Logbuch]] noach kierzlich geläschta Seyta.",
        "undelete-search-box": "Noach geläschta Seita sucha",
        "htmlform-reset": "Änderunga rickgängig macha",
        "htmlform-selectorother-other": "Ondere",
        "revdelete-restricted": "Einschränkungen gelten au fier Administratorn",
-       "revdelete-unrestricted": "Einschränkungen fier Administratorn uffgehobn",
-       "revdelete-summary": "Zusommafoassungskommentar"
+       "revdelete-unrestricted": "Einschränkungen fier Administratorn uffgehobn"
 }
index 4d477e9..4095fc8 100644 (file)
        "rcshowhideanons": "$1 anonyyme nuhtjienh",
        "rcshowhidepatr": "$1 dååhkasjehtedh värrhtoedimmieh",
        "rcshowhidemine": "$1 mov värrhtoedimmieh",
-       "rclinks": "Vuesehte männgan $1 värrhtoedimmieh nuelesne männgan $2 biejjieh<br />$3",
+       "rclinks": "Vuesehte männgan $1 värrhtoedimmieh nuelesne männgan $2 biejjieh",
        "diff": "joekehts",
        "hist": "hist",
        "hide": "Gaptjedh",
index 6df0bf4..122c5cb 100644 (file)
        "password-change-forbidden": "Ma badali kartid Eraysir ee wiki.",
        "login": "Gudaha gal",
        "nav-login-createaccount": "Gudaha gal / sameyso akoon",
-       "userlogin": "Gudaha gal / sameyso akoon",
-       "userloginnocreate": "Gudaha gal",
        "logout": "Ka bax",
        "userlogout": "Ka bax",
        "notloggedin": "Gudaha kuma jirtid",
        "userlogin-noaccount": "Akoon ma lihid?",
        "userlogin-joinproject": "Ku biir {{SITENAME}}",
-       "nologin": "Akoon ma lihid? $1.",
-       "nologinlink": "Akoon sameyso",
        "createaccount": "Sameey gudagale",
-       "gotaccount": "Waan heystaa gudagale? '''$1'''.",
-       "gotaccountlink": "Gudaha gal",
-       "userlogin-resetlink": "Ma ilaawday tafaasiisha gudagalahaada?",
        "userlogin-resetpassword-link": "Dib usoo cesho erey sirtaada",
        "userlogin-helplink2": "Caawinaad habka gudagalka",
        "createacct-emailoptional": "Ciwaanka e-mail-ka (dooqasho)",
        "createacct-email-ph": "Gali Ciwaankaada e-mail-ka",
        "createaccountmail": "E-mail ahaan",
-       "createaccountreason": "Sababta:",
        "createacct-submit": "Sameeyso akoonkaada",
        "createacct-benefit-heading": "Bogga {{SITENAME}} waxaa sameeyey dad kula mid ah.",
        "createacct-benefit-body1": "{{PLURAL:$1|bedel|bedelaadyo}}",
        "rcshowhidepatr-show": "I tus",
        "rcshowhidemine": "$1 wax badalkeyga",
        "rcshowhidemine-show": "I tus",
-       "rclinks": "Itusi isbadeladii  $1 ee ugu danbeeyay oo dhacay wixii ka danbeeyay $2 maalmood<br />$3",
+       "rclinks": "Itusi isbadeladii  $1 ee ugu danbeeyay oo dhacay wixii ka danbeeyay $2 maalmood",
        "diff": "duwanaan",
        "hist": "taariikh",
        "hide": "Qari",
        "undeletebtn": "Sooceli",
        "undeletelink": "fiiri/mar kale sameey",
        "undeleteviewlink": "itusi",
-       "undeletedrevisions": "$1 {{PLURAL:$1|revision|revisions}} restored",
-       "undeletedrevisions-files": "$1 {{PLURAL:$1|revision|revisions}} and $2 {{PLURAL:$2|file|files}} restored",
-       "undeletedfiles": "$1 {{PLURAL:$1|file|files}} restored",
        "cannotundelete": "Soo celinta ma' suurto galin; waxaa laga yaabaa in qofkale uu horay u soo celyey bogga.",
        "undelete-search-box": "Raadi bogagga la tirtiray",
        "undelete-search-prefix": "I'tus boggaga ku bilaawda:",
        "rightsnone": "(waxna)",
        "feedback-message": "Fariinta:",
        "searchsuggest-search": "Raadi",
-       "api-error-copyuploaddisabled": "Soo gelinta dhinaca URL-ka waa laga damiyay kombiyuutarkaan",
-       "api-error-filename-tooshort": "Magaca faylka aad oo u gaabanyahay",
-       "api-error-filetype-banned": "Faylka nuucaan waa laga mamnuucay",
-       "api-error-http": "Qalad gudaha ah: Ma ku xiro karo kombiyutarka",
-       "api-error-illegal-filename": "Magaca faylkaan lama ogola.",
-       "api-error-mustbeloggedin": "Waa in aad gudaha u soo gashaa hadii aad rabtid in aad fayl soo geliso.",
-       "api-error-ok-but-empty": "Qalad gudaha ah : kombiyutarka maka soo jawaabin",
-       "api-error-unclassified": "Qalad la aqoon aa dhacay",
-       "api-error-unknown-code": "Qalad la aqoon: \"$1\"",
        "api-error-unknown-warning": "Digniin la aqoon: $1",
-       "api-error-uploaddisabled": "Soo gelinta waa laga xiray wikigaan.",
        "limitreport-title": "Faahfaahin caddeymo:",
        "limitreport-cputime": "Waqtiga adeegsiga CPU",
        "limitreport-walltime": "Waqtiga dhabta ah adeegsiga",
index 9bde3ad..acc6411 100644 (file)
        "createacct-reason-ph": "Pse ju jeni duke krijuar një llogari tjetër",
        "createacct-submit": "Krijoni llogarinë tuaj",
        "createacct-another-submit": "Krijo një llogari",
+       "createacct-continue-submit": "Vazhdo krijimin e llogarisë",
+       "createacct-another-continue-submit": "Vazhdo krijimin e llogarisë",
        "createacct-benefit-heading": "{{SITENAME}} është bërë nga njerëz si ju.",
        "createacct-benefit-body1": "{{PLURAL:$1|redaktim|redaktime}}",
        "createacct-benefit-body2": "{{PLURAL:$1|faqe|faqe}}",
        "wrongpasswordempty": "Fjalëkalimi juaj ishte bosh. Ju lutemi provoni përsëri.",
        "passwordtooshort": "Fjalëkalimi juaj është i pavlefshëm ose tepër i shkurtër. Ai duhet të ketë së paku {{PLURAL:$1|1 shkronjë|$1 shkronja}} dhe duhet të jetë i ndryshëm nga emri i përdoruesit.",
        "passwordtoolong": "Fjalëkalimet nuk mund të jenë më të gjatë se {{PLURAL:$1|1 karakter|$1 karaktere}}.",
+       "passwordtoopopular": "Fjalëkalimet e zgjedhura rregullisht nuk mund të përdorën. Ju lutemi zgjedhni një fjalëkalim më unik.",
        "password-name-match": "Fjalëkalimi juaj duhet të jetë i ndryshëm nga emri juaj.",
        "password-login-forbidden": "Përdorimi i kësaj nofke dhe fjalëkalimi është i ndaluar.",
        "mailmypassword": "Ridergo fjalekalimin",
        "botpasswords-label-cancel": "Anulo",
        "botpasswords-label-delete": "Fshi",
        "botpasswords-label-resetpassword": "Rivendos fjalëkalimin",
+       "botpasswords-label-grants-column": "Lejuar",
        "botpasswords-update-failed": "Dështoi për të përditësuar emrin e bot \"$1\". Ishte fshirë?",
        "resetpass_forbidden": "Fjalëkalimet nuk mund të ndryshohen",
+       "resetpass_forbidden-reason": "Nuk mund të ndërrohet fjalëkalimi: $1",
        "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",
        "passwordreset-emailtext-user": "Përdoruesi  $1 në {{SITENAME }} ka kërkuar një kujtesë për të dhënat e llogarisë suaj për {{SITENAME }} ($4). Përdoruesi në vijim {{PLURAL:$3 | llogaria është | llogaritë janë}} të lidhur me këtë postë elektronike: \n\n$2\n\n{{PLURAL:$3 | Ky fjalëkalim i përkohshëm | Këto fjalëkalime të përkohshme}} do të përfundojë në {{PLURAL:$5 | një ditë | $5 ditë}}.\nJu duhet të kyçeni dhe të zgjidhni një fjalëkalim të ri tani. Nëse dikush tjetër e ka bërë këtë kërkesës, ose në qoftë se ju mbani mend fjalëkalimin tuaj origjinal, dhe ju nuk dëshirojni të ndryshoni atë, ju mund të injoroni këtë mesazh dhe do të vazhdoni përdorimin e fjalëkalimit tuaj të vjetër.",
        "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.",
+       "passwordreset-emailsentusername": "Nëse një adresë emaili e regjistruar për llogarinë tuaj, atëherë një email për rivendosjen e fjalëkalimit do të dërgohet.",
+       "passwordreset-invalidemail": "Adresë e-mail-i e pavlefshme",
+       "passwordreset-nodata": "Nuk është dhënë as emri i përdoruesit e as adresa e emailit",
        "changeemail": "Ndrysho ose hiq postën 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:",
+       "changeemail-newemail-help": "Kjo fushë duhet të lihet bosh në qoftë se dëshironi të hiqni adresën tuaj të emailit. Nuk do të jeni në gjendje për të resetuar fjalëkalimin e harruar dhe nuk do të merrni email nga kjo wiki nëse adresa e postës elektronike është hequr.",
        "changeemail-none": "(asgjë)",
        "changeemail-password": "Fjalëkalimi juaj i {{SITENAME}}:",
        "changeemail-submit": "Ndrysho postën elektronike",
        "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.",
+       "systemblockedtext": "Emri juaj i përdoruesit ose adresa e IP-së janë bllokuar automatikisht nga MediaWiki. \nArsyeja e dhënë është:\n\n:<em>$2</em>\n\n* Fillimi i bllokimit: $8\n* Kalimi i kohës së bllokimit: $6\n* Zgjatja e bllokimit: $7\n\nAdresa juaj e IP-së është $3.\nJu lutemi jepni të gjitha këto detaje në çfarëdo pyetje që bëni.",
        "blockednoreason": "nuk është dhënë asnjë arsye",
        "whitelistedittext": "Ju duhet të $1 për të redaktuar faqet.",
        "confirmedittext": "Ju duhet së pari ta vërtetoni e-mail adresen para se të redaktoni. Ju lutem plotësoni dhe vërtetoni e-mailin tuaj  te [[Special:Preferences|parapëlqimet]] e juaja.",
        "accmailtext": "Një fjalëkalim i krijuar në mënyrë të rastësishme për [[User talk:$1|$1]] u dërgua në $2.\n\nFjalëkalimi për këtë llogari mund të ndryshohet në faqen ''[[Special:ChangePassword|ndrysho fjalëkalimin]]'' pasi të jeni identifikuar.",
        "newarticle": "(I ri)",
        "newarticletext": "Ti ke ndjekur nje lidhje drejt një faqeje që nuk ekziston.\nPër ta krijuar këtë faqe, fillo të shkruash në kutinë e mëposhtme (shih [$1 faqen e ndihmës] për më shumë informacion).\nNëse ti ke mbërritur këtu gabimisht, atëherë kliko butonin '''pas''' të shfletuesit tënd.",
-       "anontalkpagetext": "----'' Kjo është një faqe diskutimi për një përdorues anonim i cili nuk ka krijuar akoma një llogari, ose qe nuk e përdor atë. \n Prandaj, ne duhet të përdorim adresën IP numerike për identifikimin e tij. \nKjo adresë IP mund të përdoret nga disa përdorues.\n Në qoftë se jeni një përdorues anonim dhe mendoni se ndaj jush janë bërë komente të parëndësishme, ju lutem [[Special:CreateAccount|krijoni një llogari]] ose [[Special:UserLogin|identifikohuni]] për të shmangur konfuzionin në të ardhmen me përdorues të tjerë anonim .''",
+       "anontalkpagetext": "----\n<em>Kjo është një faqe diskutimi për një përdorues anonim i cili nuk ka krijuar akoma një llogari, ose qe nuk e përdor atë.</em> \nPrandaj, ne duhet të përdorim adresën IP numerike për identifikimin e tij. \nKjo adresë IP mund të përdoret nga disa përdorues.\nNë qoftë se jeni një përdorues anonim dhe mendoni se ndaj jush janë bërë komente të parëndësishme, ju lutem [[Special:CreateAccount|krijoni një llogari]] ose [[Special:UserLogin|identifikohuni]] për të shmangur konfuzionin në të ardhmen me përdorues të tjerë anonim.",
        "noarticletext": "Momentalisht nuk ka tekst në këtë faqe.\nJu mund [[Special:Search/{{PAGENAME}}|ta kërkoni këtë titull]] në faqe tjera,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} të kërkoni ngjarjet e ngjashme në regjistër],\nose [{{fullurl:{{FULLPAGENAME}}|action=edit}} të krijoni këtë faqe]</span>.",
        "noarticletext-nopermission": "Për momentin faqja e kërkuar është bosh.\nJu mund të [[Special:Search/{{PAGENAME}}|kërkoni këtë titiull]] në faqet e tjera, ose të <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} këtkoni regjistrat e ngjashëm]</span>, por ju nuk mundeni ta krijoni këtë faqe.",
        "missing-revision": "Inspektimi #$1 i faqes me emrin \"{{FULLPAGENAME}}\" nuk ekziston.\n\nKjo zakonisht shkaktuar duke ndjekur një lidhje të vjetër tek një faqe që është fshirë. Hollësitë mund të gjenden në [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} regjistrin e fshirjeve].",
        "searchprofile-advanced-tooltip": "Kërkimi në hapësina",
        "search-result-size": "$1 ({{PLURAL:$2|1 fjalë|$2 fjalë}})",
        "search-result-category-size": "{{PLURAL:$1|1 anëtar|$1 anëtarë}} ({{PLURAL:$2|1 nën-kategori|$2 nën-kategori}}, {{PLURAL:$3|1 skedë|$3 skeda}})",
-       "search-redirect": "(përcjellim $1)",
+       "search-redirect": "(përcjellim nga $1)",
        "search-section": "(seksioni $1)",
        "search-category": "(kategoria $1)",
        "search-suggest": "Mos kishit në mendje: $1",
        "search-interwiki-caption": "Projekte simotra",
-       "search-interwiki-default": "$1 përfundime:",
+       "search-interwiki-default": "Rezultatet nga $1:",
        "search-interwiki-more": "(më shumë)",
        "search-relatedarticle": "Të ngjashme",
        "searchrelated": "të ngjashme",
        "prefs-watchlist-token": "Lista mbikqyrëse shenjë:",
        "prefs-misc": "Të ndryshme",
        "prefs-resetpass": "Ndrysho fjalëkalimin",
-       "prefs-changeemail": "Ndrysho postën elektronike",
+       "prefs-changeemail": "Ndrysho ose hiq adresën e postës elektronike",
        "prefs-setemail": "Vendos adresën e postës elektronike",
        "prefs-email": "Opsionet e emailit",
        "prefs-rendering": "Pamja",
        "saveprefs": "Ruaj parapëlqimet",
-       "restoreprefs": "Rikthe të gjitha të dhënat e mëparshme",
+       "restoreprefs": "Rikthe të gjitha të dhënat e parazgjedhura (në të gjitha pjesët)",
        "prefs-editing": "Redaktimi",
        "searchresultshead": "Kërkimi",
-       "stub-threshold": "Kufiri për formatin e <a href=\"#\" class=\"stub\">lidhjeve cung</a> (B):",
+       "stub-threshold": "Kufiri për formatimin e lidhjeve cung ($1):",
        "stub-threshold-sample-link": "shembull",
        "stub-threshold-disabled": "Çaktivizuar",
        "recentchangesdays": "Numri i ditëve të treguara në ndryshime së fundmi:",
        "gender-female": "Ajo redakton faqet wiki",
        "prefs-help-gender": "Vendosja e këtij parapëlqimi nuk është e detyrueshme.\nSoftueri përdor vlerat e tij për t'ju adresuar dhe për t'ju përmendur ju te të tjerët duke përdorur gjininë e duhur gramatikore.\nKy informacion do të jetë publik.",
        "email": "Email",
-       "prefs-help-realname": "* Emri i vërtetë nuk është i domosdoshëm: Nëse e jipni do të përmendeni si kontribues për punën që ke bërë.",
+       "prefs-help-realname": "Emri i vërtetë nuk është i domosdoshëm. \n\nNëse e jepni, mund të përmendeni si kontribuues për punën që keni bërë.",
        "prefs-help-email": "Dhënia e adresës së emailit është opsionale, por ju mundëson dërgimin e fjalëkalimit të ri të nëse e harroni atë.",
        "prefs-help-email-others": "Mundeni gjithashtu të zgjidhni të kontaktoheni nga të tjerët përmes faqeve tuaja të diskutimit ose përdoruesit pa e treguar identitetin.",
        "prefs-help-email-required": "Nevojitet e-mail adresa .",
        "prefs-signature": "Firma",
        "prefs-dateformat": "Formati i datës",
        "prefs-timeoffset": "Diferenca kohore",
-       "prefs-advancedediting": "Opsionet e avancuar",
+       "prefs-advancedediting": "Opcionet e përgjithshme",
        "prefs-editor": "redaktor",
        "prefs-preview": "Parapamje",
        "prefs-advancedrc": "Opsione të avancuara",
        "prefs-displayrc": "Shfaq opsionet",
        "prefs-displaywatchlist": "Shfaq opsionet",
        "prefs-diffs": "Ndryshimet",
-       "userrights": "Ndrysho privilegjet e përdoruesve",
-       "userrights-lookup-user": "Ndrysho grupet e përdoruesit",
+       "userrights": "Privilegjet e përdoruesit",
+       "userrights-lookup-user": "Zgjedh një përdorues",
        "userrights-user-editname": "Fut emrin e përdoruesit:",
-       "editusergroup": "Redakto grupet e përdoruesve",
+       "editusergroup": "Ngarko grupet e përdoruesve",
        "editinguser": "Duke ndryshuar privilegjet e {{GENDER:$1|përdoruesit|përdorueses}} <strong>[[User:$1|$1]]</strong> $2",
-       "userrights-editusergroup": "Anëtarësimi tek grupet",
-       "saveusergroups": "Ruaj Grupin e Përdoruesve",
+       "userrights-editusergroup": "Ndrysho grupet e {{GENDER:$1|përdoruesit}}",
+       "saveusergroups": "Ruaj grupet e përdoruesit",
        "userrights-groupsmember": "{{GENDER:$2|Anëtar i|Anëtare e}}:",
        "userrights-groupsmember-auto": "{{GENDER:$2|Anëtar i nënkuptuar i|Anëtare e nënkuptuar e}}:",
        "userrights-groups-help": "Mund të ndryshoni anëtarësimin e {{GENDER:$1|këtij përdoruesi|kësaj përdorueseje}} në grupe:\n* Kutia e zgjedhur shënon që {{GENDER:$1|përdoruesi|përdoruesja}} është {{GENDER:$1|anëtar|anëtare}} në atë grup.\n* Kutia e pazgjedhur shënon që {{GENDER:$1|përdoruesi|përdoruesja}} nuk është {{GENDER:$1|anëtar|anëtare}} në atë grup.\n* Një * tregon që nuk mund ta hiqni grupin pasi ta keni shtuar (dhe anasjelltas).",
        "userrights-nodatabase": "Regjistri $1 nuk ekziston ose nuk është vendor.",
        "userrights-changeable-col": "Grupe që mund të ndryshoni",
        "userrights-unchangeable-col": "Grupe që s'mund të ndryshoni",
+       "userrights-expiry-current": "Skadon $1",
+       "userrights-expiry-none": "Nuk skadon",
+       "userrights-expiry": "Skadon:",
+       "userrights-expiry-existing": "Koha ekzistuese e skadimit: $3, $2",
+       "userrights-expiry-othertime": "Kohë tjetër:",
        "userrights-conflict": "Konflikt në ndryshimin e të drejtave të përdoruesit! Të lutem të rishiko dhe konfirmo ndryshimet e tua.",
        "group": "Grupi:",
        "group-user": "Përdorues",
        "right-editsemiprotected": "Redakto faqet e mbrojtura, si \"{{int:protect-level-autoconfirmed}}\"",
        "right-editcontentmodel": "Redakto modelin e përmbajtjes së një faqeje",
        "right-editinterface": "Ndrysho parapamjen e përdoruesit",
-       "right-editusercssjs": "Redakto skedat CSS dhe JS të përdoruesve tjerë",
        "right-editusercss": "Redakto skedat CSS të përdoruesve tjerë",
        "right-edituserjs": "Redakto skedat JS të përdoruesve tjerë",
        "right-editmyusercss": "Redakto CSS - skedat e tua të përdoruesit",
        "grant-editmywatchlist": "Redaktoni listën tuaj mbikqyrëse",
        "grant-editpage": "Redaktoni faqet ekzistuese",
        "grant-editprotected": "Redakto faqet e mbrojtura",
+       "grant-sendemail": "Dërgo e-mail te përdoruesit tjerë",
        "newuserlogpage": "Regjistri i llogarive",
        "newuserlogpagetext": "Ky është një regjistër i llogarive të fundit që janë hapur",
        "rightslog": "Regjistri i privilegjeve të përdoruesit",
        "recentchanges-legend-heading": "<strong>Legjenda:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (shiko gjithashtu [[Special:NewPages|listën e faqeve të reja]])",
        "recentchanges-submit": "Shfaq",
+       "rcfilters-filtergroup-registration": "Regjistrimi i përdoruesit",
+       "rcfilters-filter-registered-label": "Regjistruar",
+       "rcfilters-filter-registered-description": "Redaktorët e kyçur",
+       "rcfilters-filter-unregistered-label": "Ç'regjistruar",
+       "rcfilters-filtergroup-authorship": "Ndrysho autorsinë",
+       "rcfilters-filter-editsbyself-label": "Redaktimet tuaja",
+       "rcfilters-filter-editsbyself-description": "Redaktimet nga ju.",
+       "rcfilters-filter-editsbyother-label": "Redaktimet nga të tjerët",
+       "rcfilters-filter-editsbyother-description": "Redaktimet e krijuara nga përdoruesit tjerë (jo ti).",
+       "rcfilters-filter-user-experience-level-newcomer-label": "Të rinjtë",
+       "rcfilters-filter-user-experience-level-newcomer-description": "Më pak se 10 redaktime dhe 4 ditë aktivitet.",
+       "rcfilters-filter-user-experience-level-learner-label": "Nxënës",
+       "rcfilters-filter-user-experience-level-experienced-label": "Përdorues me përvojë",
+       "rcfilters-filtergroup-automated": "Kontribute automatike",
+       "rcfilters-filter-bots-label": "Bot",
+       "rcfilters-filter-bots-description": "Redaktime të bëra nga vegla automatike.",
+       "rcfilters-filter-humans-label": "Njeri (jo bot)",
+       "rcfilters-filter-humans-description": "Redaktimet e bëra nga redaktorët njerëz.",
+       "rcfilters-filtergroup-reviewstatus": "Statusi i rishikimit",
+       "rcfilters-filter-patrolled-label": "Patrolluar",
+       "rcfilters-filter-patrolled-description": "Redaktimet të markuara si të patrolluara",
+       "rcfilters-filter-unpatrolled-label": "E papatrolluar",
+       "rcfilters-filter-unpatrolled-description": "Redaktimet e pashënuara si të patrolluara.",
+       "rcfilters-filtergroup-significance": "Rëndësia",
+       "rcfilters-filter-minor-label": "Redaktime të vogëla",
+       "rcfilters-filter-minor-description": "Redaktimet që autori i ka shënuar si të vogla",
+       "rcfilters-filter-major-label": "Redaktimet jo të vogla",
+       "rcfilters-filter-major-description": "Redaktimet jo të shënuara si të vogla.",
+       "rcfilters-filtergroup-changetype": "Lloji i ndryshimit",
+       "rcfilters-filter-pageedits-label": "Redaktimet e faqes",
+       "rcfilters-filter-pageedits-description": "Redaktimet e përmbajtjes wiki, diskutimeve, përshkrimit të kategorive...",
+       "rcfilters-filter-newpages-label": "Krijimet e faqeve",
+       "rcfilters-filter-newpages-description": "Redaktimet që krijojnë faqe të reja.",
+       "rcfilters-filter-categorization-label": "Ndryshimet e kategorive",
+       "rcfilters-filter-categorization-description": "Regjistri i faqeve të shtuara ose hequra nga kategoritë.",
+       "rcfilters-filter-logactions-label": "Veprimet e regjistruara",
+       "rcfilters-filter-logactions-description": "Veprimet administrative, krijimet e llogarive, fshirjet e faqeve, ngarkimet...",
        "rcnotefrom": "Më poshtë {{PLURAL:$5|është shfaqur ndryshimi|janë shfaqur ndryshimet}} që nga <strong>$3, $4</strong> (deri në <strong>$1</strong>).",
        "rclistfrom": "Tregon ndryshime së fundmi duke filluar nga $3 $2",
        "rcshowhideminor": "$1 redaktimet e vogla",
        "rcshowhidemine": "$1 redaktimet e mia",
        "rcshowhidemine-show": "Shfaq",
        "rcshowhidemine-hide": "Fshih",
+       "rcshowhidecategorization": "$1 kategorizim i faqes",
        "rcshowhidecategorization-show": "Shfaq",
        "rcshowhidecategorization-hide": "Fshih",
-       "rclinks": "Trego $1 ndryshime gjatë $2 ditëve<br />$3",
+       "rclinks": "Trego $1 ndryshime gjatë $2 ditëve",
        "diff": "ndrysh",
        "hist": "hist",
        "hide": "fshih",
        "recentchangeslinked-summary": "Kjo është një listë e ndryshimeve së fundmi të faqeve të lidhura nga faqja e dhënë (ose bëjnë pjesë tek kategoria e dhënë).\nFaqet [[Special:Watchlist|nën mbikqyrjen tuaj]] duken të '''theksuara'''.",
        "recentchangeslinked-page": "Emri i faqes:",
        "recentchangeslinked-to": "Trego ndryshimet e faqeve që lidhen tek faqja e dhënë",
+       "recentchanges-page-added-to-category": "[[:$1]] shtuar në kategori",
+       "recentchanges-page-removed-from-category": "[[:$1]] u hoq nga kategoria",
+       "autochange-username": "Ndryshim automatik i MediaWiki-t",
        "upload": "Ngarkoni skeda",
        "uploadbtn": "Ngarkoje",
        "reuploaddesc": "Kthehu tek formulari i dhënies.",
        "apisandbox-dynamic-parameters-add-label": "Shto parametër:",
        "apisandbox-dynamic-parameters-add-placeholder": "Emri i parametrit",
        "apisandbox-results": "Rezultatet",
+       "apisandbox-continue": "Vazhdo",
+       "apisandbox-continue-clear": "Pastro",
+       "apisandbox-param-limit": "Shkruaj <kbd>max</kbd> për të përdorur maksimumin e limitit",
+       "apisandbox-multivalue-all-namespaces": "$1 (të gjitha hapësirat)",
+       "apisandbox-multivalue-all-values": "$1 (të gjitha vlerat)",
        "booksources": "Burime librash",
        "booksources-search-legend": "Kërkim burimor librash",
        "booksources-search": "Kërko",
        "specialloguserlabel": "Performuesi:",
        "speciallogtitlelabel": "Objektivi (titulli ose përdoruesi):",
        "log": "Regjistrat",
+       "logeventslist-submit": "Shfaq",
        "all-logs-page": "Të gjitha regjistrat",
        "alllogstext": "Kjo faqe tregon të gjithë regjistrat e mundshëm të {{SITENAME}}.\nJu mund të kufizoni pamje sipas tipit të regjistrit, emrit të përdoruesit (shumë i ndjeshëm), dhe faqes në çështje (edhe rastet e ndjeshme)",
        "logempty": "Nuk ka asnjë përputhje në regjistër.",
        "log-title-wildcard": "Kërko tituj që fillojnë me këtë tekst",
        "showhideselectedlogentries": "Paraqit/fshih shënimet e përzgjedhura të regjistruara.",
+       "checkbox-all": "Të gjitha",
+       "checkbox-none": "Asnjë",
+       "checkbox-invert": "E kundërta",
        "allpages": "Të gjitha faqet",
        "nextpage": "Faqja tjetër ($1)",
        "prevpage": "Faqja e mëparshme ($1)",
        "cachedspecial-viewing-cached-ts": "Ju jeni duke e parë një version të ruajtur të kësaj faqe, që mund të mos jetë tërësisht e pranishme.",
        "cachedspecial-refresh-now": "Shikoni të fundit.",
        "categories": "Kategori",
+       "categories-submit": "Shfaq",
        "categoriespagetext": "{{PLURAL:$1|kategoria në vijim përmban|kategoritë në vikim përmbajnë}} faqe ose media.\n[[Special:UnusedCategories|Kategoritë e pa përdorura]] nuk janë të paraqitura këtu.\nShikoni edhe [[Special:WantedCategories|kategoritë e dëshiruara]].",
        "categoriesfrom": "Paraqit kategoritë duke filluar në:",
        "deletedcontributions": "Kontribute të grisura",
        "listgrouprights-removegroup-self": "Hiqni {{PLURAL:$2|grupin|grupet}} nga llogaria: $1",
        "listgrouprights-addgroup-self-all": "Shtoni të gjitha grupet tek llogaria",
        "listgrouprights-removegroup-self-all": "Hiq të gjitha grupet nga llogaria",
+       "trackingcategories-msg": "Kategoria përcjellëse",
+       "trackingcategories-name": "Emri i porosisë",
+       "trackingcategories-desc": "Kriteret për përfshirje në kategori",
        "mailnologin": "S'ka adresë dërgimi",
        "mailnologintext": "Duhet të keni [[Special:UserLogin|hyrë brenda]] dhe të keni një adresë të saktë në [[Special:Preferences|parapëlqimet]] tuaja për tu dërguar email përdoruesve të tjerë.",
        "emailuser": "Email {{GENDER:{{PAGENAME}}|përdoruesit|përdorueses}}",
+       "emailuser-title-target": "Dërgo email te ky përdorues",
        "emailuser-title-notarget": "Email për përdoruesin",
        "emailpagetext": "Mund të përdorni formularin e mëposhtëm për të dërguar e-mail tek ky përdorues.\nAdresa e email-it që shkruat tek [[Special:Preferences|preferencat tuaja]] do të duket si \"Nga\" adresa e email-it, pra marrësi do të ketë mundësinë t'ju përgjigjet direkt.",
        "defemailsubject": "{{SITENAME}} emaili nga përdoruesi \"$1\"",
        "mywatchlist": "Lista mbikqyrëse",
        "watchlistfor2": "Për $1 $2",
        "nowatchlist": "Nuk keni asnjë faqe në listën mbikqyrëse.",
-       "watchlistanontext": "Ju lutemi $1 për të parë redaktimet e artikujve në listë tuaj mbikqyrëse.",
+       "watchlistanontext": "Ju lutemi kyçuni për të parë ose redaktuar njësitë në listën tuaj mbikëqyrëse.",
        "watchnologin": "Nuk keni hyrë brënda",
        "addwatch": "Shto tek lista mbikqyrëse",
-       "addedwatchtext": "Faqja \"[[:$1]]\"  i është shtuar [[Special:Watchlist|listës mbikqyrëse]] tuaj. Ndryshimet e ardhshme të kësaj faqeje dhe faqes së diskutimit të saj do të jepen më poshtë, dhe emri i faqes do të duket i '''trashë''' në [[Special:RecentChanges|listën e ndryshimeve së fundmi]] për t'i dalluar më kollaj.\n\nNë qoftë se dëshironi të hiqni një faqe nga lista mbikqyrëse më vonë, shtypni \"çmbikqyre\" në tabelën e sipërme.",
+       "addedwatchtext": "\"[[:$1]]\"  dhe faqja e saj e diskutimit i është shtuar [[Special:Watchlist|listës tuaj të mbikëqyrjes]].",
+       "addedwatchtext-talk": "\"[[:$1]]\" dhe faqja e saj e ndërlidhur janë shtuar [[Special:Watchlist|listës tuaj të mbikëqyrjes]].",
+       "addedwatchtext-short": "Faqja \"$1\" i është shtuar listës tuaj të mbikëqyrjes.",
        "removewatch": "Largo nga lista mbikqyrëse",
-       "removedwatchtext": "Faqja \"[[:$1]]\" është hequr nga [[Special:Watchlist|lista mbikqyrëse e juaj]].",
+       "removedwatchtext": "\"[[:$1]]\" dhe faqja e saj e diskutimit janë hequr nga [[Special:Watchlist|lista juaj mbikëqyrëse]].",
+       "removedwatchtext-talk": "\"[[:$1]]\" dhe faqja e saj e ndërlidhur janë hequr nga [[Special:Watchlist|lista juaj e mbikëqyrjes]].",
+       "removedwatchtext-short": "Faqja \"$1\" janë hequr nga lista juaj e mbikëqyrjes.",
        "watch": "Mbikqyre",
        "watchthispage": "Mbikqyre këtë faqe",
        "unwatch": "Çmbikqyre",
        "unwatchthispage": "Mos e mbikqyr",
        "notanarticle": "Nuk është artikull",
        "notvisiblerev": "Revizioni është grisur",
-       "watchlist-details": "{{PLURAL:$1|$1 faqe|$1 faqe}} nën mbikqyrje duke mos numëruar faqet e diskutimit.",
-       "wlheader-enotif": "Njoftimi me email është lejuar.",
-       "wlheader-showupdated": "Faqet që kanë ndryshuar nga vizita juaj e fundit do të tregohen të '''trasha'''",
-       "wlnote": "Më poshtë {{PLURAL:$1|është ndryshimi i fundit|janë '''$1''' ndryshimet e fundit}} në {{PLURAL:$2|orën e fundit|'''$2''' orët e fundit}}, që nga $3, $4.",
+       "watchlist-details": "{{PLURAL:$1|$1 faqe|$1 faqe}} nën mbikëqyrje duke mos numëruar faqet e diskutimit.",
+       "wlheader-enotif": "Është aktivizuar njoftimi me email.",
+       "wlheader-showupdated": "Faqet që kanë ndryshuar nga vizita juaj e fundit do të tregohen të <strong>trasha<strong>.",
+       "wlnote": "Më poshtë {{PLURAL:$1|është ndryshimi i fundit|janë <strong>$1</strong>''' ndryshimet e fundit}} në {{PLURAL:$2|orën e fundit|<strong>$2</strong>''' orët e fundit}}, që nga $3, $4.",
        "wlshowlast": "Trego $1 orët $2 ditët e fundit",
+       "watchlist-hide": "Fshih",
+       "watchlist-submit": "Shfaq",
+       "wlshowtime": "Periudha e kohës për ta treguar:",
+       "wlshowhideminor": "redaktime të vogla",
+       "wlshowhidebots": "botët",
+       "wlshowhideliu": "përdorues të regjistruar",
+       "wlshowhideanons": "përdorues anonim",
+       "wlshowhidepatr": "redaktime të patrulluara",
+       "wlshowhidemine": "redaktimet e mia",
+       "wlshowhidecategorization": "kategorizim i faqes",
        "watchlist-options": "Mundësitë e listës mbikqyrëse",
        "watching": "Duke mbikqyrur...",
        "unwatching": "Mos e mbikqyr më...",
        "watcherrortext": "Është paraqitur një gabim përderisa ndryshuat parametrat e listës suaj mbikqyrëse për \"$1\".",
        "enotif_reset": "Shëno të gjitha faqet e vizituara",
        "enotif_impersonal_salutation": "Përdorues i {{SITENAME}}",
+       "enotif_subject_deleted": "{{SITENAME}} faqja $1 është fshirë nga $2",
        "enotif_subject_created": "{{SITENAME}} faqja $1 është {{GJINIA:$2|krijuar}} nga $2",
+       "enotif_subject_moved": "{{SITENAME}} faqja $1 është lëvizuar nga $2",
+       "enotif_subject_restored": "{{SITENAME}} faqja $1 është rikthyer nga $2",
+       "enotif_subject_changed": "{{SITENAME}} faqja $1 është ndryshuar nga $2",
+       "enotif_body_intro_deleted": "{{SITENAME}} faqja $1 është fshirë në $PAGEEDITDATE nga $2, shiko $3.",
        "enotif_lastvisited": "Shikoni $1 për të gjitha ndryshimet që prej vizitës tuaj të fundit.",
        "enotif_lastdiff": "Shikoni $1 për ndryshime.",
        "enotif_anon_editor": "përdorues anonim $1",
        "delete-confirm": "Grise \"$1\"",
        "delete-legend": "Grise",
        "historywarning": "'''Kujdes:''' Kjo faqe të cilën po e grisni ka histori me $1 \n{{PLURAL:$1|redaktim|redaktime}}:",
+       "historyaction-submit": "Shfaq",
        "confirmdeletetext": "Jeni duke grisur një faqe me tërë historinë e saj. Ju lutemi konfirmoni që po e bëni qëllimisht, që i kuptoni pasojat, dhe që po veproni në përputhje me [[{{MediaWiki:Policy-url}}]].",
        "actioncomplete": "Veprimi u krye",
        "actionfailed": "Veprimi dështoi",
        "sessionfailure": "Duket se ka një problem me seancën tuaj hyrëse; ky veprim është anuluar për tu mbrojtur nga ndonjë veprim dashakeq kundrejt shfletimit tuaj. Ju lutemi kthehuni mbrapsh, rifreskoni faqen prej nga erdhët dhe provojeni përsëri veprimin.",
        "changecontentmodel-title-label": "Titulli i faqes",
        "changecontentmodel-reason-label": "Arsyeja:",
+       "changecontentmodel-submit": "Ndrysho",
        "protectlogpage": "Regjistri i mbrojtjeve",
        "protectlogtext": "Më poshtë është lista e kyçjeve dhe çkyçjeve të faqes.\nShih listën e [[Special:ProtectedPages|faqeve të mbrojtura]] nga lista e mbrojtjeve të faqeve tani në veprim.",
        "protectedarticle": "mbrojti [[$1]]",
        "undeleteviewlink": "Pamje",
        "undeleteinvert": "Selektim anasjelltas",
        "undeletecomment": "Arsyeja:",
-       "undeletedrevisions": "$1 {{PLURAL:$1|version u restaurua|versione u restauruan}}",
-       "undeletedrevisions-files": "$1 {{PLURAL:$1|version|versione}} dhe $2 {{PLURAL:$2|skedë|skeda}} janë restauruar",
-       "undeletedfiles": "$1 {{PLURAL:$1|skedë u restaurua|skeda u restauruan}}",
        "cannotundelete": "Disa ose krejt çfshirjet dështuan:\n$1",
        "undeletedpage": "'''$1 është restauruar'''\n\nShikoni [[Special:Log/delete|regjistrin e grisjeve]] për grisjet dhe restaurimet së fundmi.",
        "undelete-header": "Shikoni [[Special:Log/delete|regjistrin e grisjeve]] për faqet e grisura së fundmi.",
        "sp-contributions-search": "Kërko tek kontributet",
        "sp-contributions-username": "IP Addresa ose Përdoruesi:",
        "sp-contributions-toponly": "Trego vetëm redaktimet që janë versionet më të fundit",
+       "sp-contributions-hideminor": "Fshih redaktimet e vogla",
        "sp-contributions-submit": "Kërko",
        "whatlinkshere": "Lidhjet këtu",
        "whatlinkshere-title": "Faqe që lidhen tek $1",
        "whatlinkshere-hidelinks": "$1 lidhjet",
        "whatlinkshere-hideimages": "$1 lidhjet me skedat",
        "whatlinkshere-filters": "Filtra",
+       "whatlinkshere-submit": "Shko",
        "autoblockid": "Autobllokim #$1",
        "block": "Blloko përdoruesin",
        "unblock": "Zhblloko përdoruesin",
        "ipb-unblock": "Çblloko përdorues dhe IP të bllokuara",
        "ipb-blocklist": "Përdorues dhe IP adresa të bllokuara",
        "ipb-blocklist-contribs": "Kontributet për {{GENDER:$1|$1}}",
+       "ipb-blocklist-duration-left": "kanë mbetë $1",
        "unblockip": "Zhblloko përdoruesin",
        "unblockiptext": "Përdor formularin e më poshtëm për t'i ridhënë leje shkrimi\nnjë përdoruesi ose IP adreseje të bllokuar.",
        "ipusubmit": "Hiqni këtë bllokim",
        "block-log-flags-hiddenname": "emri i përdoruesit i fshehur",
        "range_block_disabled": "Mundësia e administruesve për të bllokuar me shtrirje është çaktivizuar.",
        "ipb_expiry_invalid": "Afati i kohës është gabim.",
+       "ipb_expiry_old": "Data e skadencës është në të shkuarën.",
        "ipb_expiry_temp": "Bllokimet e përdoruesve të fshehur duhet të jenë të përhershme.",
        "ipb_hide_invalid": "Nuk mund ta prishni këtë llogari; ka më shumë se {{PLURAL:$1|një redaktim|$1 redaktime}}.",
        "ipb_already_blocked": "\"$1\" është i bllokuar",
        "proxyblockreason": "IP adresa juaj është bllokuar sepse është një ndërmjetëse e hapur. Ju lutem lidhuni me kompaninë e shërbimeve të Internetit që përdorni dhe i informoni për këtë problem sigurije.",
        "sorbsreason": "Adresa IP e juaj është radhitur si ndërmjetëse e hapur tek lista DNSBL.",
        "sorbs_create_account_reason": "Adresa IP e juaj është radhitur si ndërmjetëse e hapur tek lista DNSBL që përdoret nga {{SITENAME}}. Nuk ju lejohet të hapni një llogari.",
+       "softblockrangesreason": "Kontributet anonime nuk lejohen nga adresa IP e juaj ($1)",
        "cant-see-hidden-user": "Përdoruesi që po përpiqeni të bllokoni është i bllokuar dhe i fshehur.\nPërderisa ju nuk keni të drejtën e fshehjes së përdoruesve, ju nuk mund të shikoni ose redaktoni bllokimet e përdoruesit.",
        "ipbblocked": "Ti nuk mund t'i bllokosh ose zhbllokosh përdoruesit e tjerë, sepse je vet i bllokuar",
        "ipbnounblockself": "Ju nuk mund të zhbllokoni veten tuaj",
        "pageinfo-category-pages": "Numri i faqeve",
        "pageinfo-category-subcats": "Numri i nënkategorive",
        "pageinfo-category-files": "Numri i skedave",
+       "pageinfo-user-id": "ID e përdoruesit",
        "markaspatrolleddiff": "Shënoje si të patrulluar",
        "markaspatrolledtext": "Shënoje këtë artikull të patrulluar",
        "markedaspatrolled": "Shënoje të patrulluar",
        "patrol-log-page": "Regjistri i patrollimeve",
        "patrol-log-header": "Këto janë të dhëna të revizioneve të patrulluara.",
        "log-show-hide-patrol": "$1 regjistri i patrollimeve",
+       "confirm-markpatrolled-button": "Në rregull",
        "deletedrevision": "Gris versionin e vjetër $1",
        "filedeleteerror-short": "Gabim gjatë grisjes së skedës: $1",
        "filedeleteerror-long": "U hasën gabime gjatë grisjes së skedës:\n\n$1",
        "confirm-watch-top": "Shto këtë faqe në listën mbikqyrëse tuajen?",
        "confirm-unwatch-button": "Në rregull",
        "confirm-unwatch-top": "Largo këtë faqe nga lista juaj mbikqyrëse ?",
+       "confirm-rollback-button": "Në rregull",
+       "confirm-rollback-top": "Rikthe redaktimet në këtë faqe?",
        "quotation-marks": "\"$1\"",
        "imgmultipageprev": "← faqja e mëparshme",
        "imgmultipagenext": "faqja tjetër →",
        "imgmultigo": "Shko!",
        "imgmultigoto": "Shko tek faqja $1",
        "img-lang-default": "(gjuha e parazgjedhur)",
+       "img-lang-go": "Shko",
        "ascending_abbrev": "ngritje",
        "descending_abbrev": "zbritje",
        "table_pager_next": "Faqja tjetër",
        "watchlistedit-raw-done": "Lista mbikëqyrëse u aktualizua.",
        "watchlistedit-raw-added": "{{PLURAL:$1|1 titull u shtua|$1 tituj u shtuan}}:",
        "watchlistedit-raw-removed": "{{PLURAL:$1|1 titull u largua|$1 tituj u larguan}}:",
+       "watchlistedit-clear-title": "Pastro listën e mbikëqyrjes",
+       "watchlistedit-clear-legend": "Pastro listën e mbikëqyrjes",
+       "watchlistedit-clear-explain": "Të gjithë titujt do të hiqen nga lista juaj e mbikëqyrjes",
+       "watchlistedit-clear-titles": "Titujt:",
+       "watchlistedit-clear-done": "Lista mbikëqyrëse u fshi.",
+       "watchlisttools-clear": "Pastro listën e mbikëqyrjes",
        "watchlisttools-view": "Shih ndryshimet e rëndësishme",
        "watchlisttools-edit": "Shih dhe redakto listën mbikqyrëse.",
        "watchlisttools-raw": "Redaktoje drejtpërdrejt listën",
        "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|diskutimet]])",
+       "timezone-local": "Lokal",
        "duplicate-defaultsort": "'''Kujdes:''' Renditja kryesore e çelësit \"$2\" refuzon renditjen e mëparshme kryesore të çelësit \"$1\".",
        "version": "Versioni",
        "version-extensions": "Zgjerime të instaluara",
        "version-hook-subscribedby": "Abonuar nga",
        "version-version": "($1)",
        "version-license": " Liçenca MediaWiki",
+       "version-ext-license": "Licenca",
+       "version-ext-colheader-name": "Shtojca",
+       "version-skin-colheader-name": "Pamja",
+       "version-ext-colheader-version": "Versioni",
+       "version-ext-colheader-license": "Licenca",
+       "version-ext-colheader-description": "Përshkrimi",
+       "version-ext-colheader-credits": "Autorët",
+       "version-license-title": "Licenca për $1",
+       "version-credits-title": "Atribuuimi për $1",
        "version-poweredby-credits": "Ky wiki është mundësuar nga '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
        "version-poweredby-others": "të tjerë",
+       "version-poweredby-translators": "përkthyesit e translatewiki.net",
+       "version-credits-summary": "Dëshirojmë t'i mirënjohim personat në vazhdim për kontributin e tyre [[Special:Version|MediaWiki]].",
        "version-license-info": "MediaWiki është një softuer i lirë; ju mund ta shpërndani dhe redakatoni atë nën kushtet GNU General Public License si e publikuar nga fondacioni Free Software; ose versioni 2 i licensës, ose çdo version më i vonshëm.\n\nMediaWiki është shpërndarë me shpresën se do të jetë i dobishëm, por PA ASNJË GARANCI; as garancinë e shprehur të SHITJES apo PËRDORIMIT PËR NJË QËLLIM TË CAKTUAR. Shikoni GNU General Public License  për më shumë detaje.\n\nJu duhet të keni marrë [{{SERVER}}{{SCRIPTPATH}}/COPYING një kopje të GNU General Public License] së bashku me këtë program; nëse jo, shkruani tek Free Software Foundation, Inc., 51 Rruga Franklin, Kati i pestë, Boston, MA 02110-1301, ShBA ose [//www.gnu.org/licenses/old-licenses/gpl-2.0.html lexojeni atë online].",
        "version-software": "Softuerët e instaluar",
        "version-software-product": "Produkti",
        "version-software-version": "Versioni",
+       "version-entrypoints": "URL-të hyrëse",
+       "version-entrypoints-header-entrypoint": "Pika hyrëse",
        "version-entrypoints-header-url": "URL",
+       "version-libraries": "Libraritë e instaluara",
+       "version-libraries-library": "Librari",
+       "version-libraries-version": "Versioni",
+       "version-libraries-license": "Licenca",
+       "version-libraries-description": "Përshkrimi",
+       "version-libraries-authors": "Autorët",
+       "redirect-submit": "Shko",
+       "redirect-lookup": "Kërko:",
+       "redirect-value": "Vlera:",
+       "redirect-user": "ID e përdoruesit",
+       "redirect-page": "ID-ja e faqes",
+       "redirect-revision": "Versioni i faqes",
+       "redirect-file": "Emri i skedës",
+       "redirect-not-exists": "Vlera nuk u gjet",
        "fileduplicatesearch": "Kërkoni për skeda të dyfishta",
        "fileduplicatesearch-summary": "Kërkoni për dyfishime të skedave në bazë të vlerës përmbledhëse («hash»).",
        "fileduplicatesearch-filename": "Emri i skedës:",
        "fileduplicatesearch-result-n": "Skeda \"$1\" ka {{PLURAL:$2|1 dyfishim|$2 dyfishime}}.",
        "fileduplicatesearch-noresults": "Nuk u gjet asnjë skedë me emrin \"$1\".",
        "specialpages": "Faqet speciale",
+       "specialpages-note-top": "Legjenda",
        "specialpages-note": "* Faqet speciale normale.\n* <span class=\"mw-specialpagerestricted\">Faqet speciale të kufizuara.</span>",
        "specialpages-group-maintenance": "Përmbledhje mirëmbajtjeje",
        "specialpages-group-other": "Faqe speciale të tjera",
        "specialpages-group-wiki": "Të dhënat dhe veglat",
        "specialpages-group-redirects": "Përcjellime tek faqet speciale",
        "specialpages-group-spam": "Mjetet për spam",
+       "specialpages-group-developer": "Veglat e zhvilluesit",
        "blankpage": "Faqe e zbrazët",
        "intentionallyblankpage": "Kjo faqe me qëllim është lënë e zbrazët",
        "external_image_whitelist": "#Lëreni këtë rresht ashtu siç është<pre>\n#Vendosni shprehje fragmentesh të rregullta (vetëm pjesën që shkon ndërmjet //) poshtë\n#Këto do të krahasohen me URL-të  e figurave të jashtme\n#Ato që përputhen do të shfaqen si figura, të tjerat do të shfaqen vetëm si një lidhje\n#Rreshtat që fillojnë me # trajtohen si komente\n#Kjo është shumë e ndjeshme\n\n#Vendosini të fragmentet sipër këtij rreshti. Lëreni këtë rresht ashtu siç është</pre>",
        "tags-tag": "Emri i etiketës",
        "tags-display-header": "Pamja në listat e ndryshimeve",
        "tags-description-header": "Përshkrimi i plotë i kuptimit",
+       "tags-source-header": "Burimi",
+       "tags-active-header": "Aktiv?",
        "tags-hitcount-header": "Ndrzshimet e etikuara",
+       "tags-actions-header": "Veprimet",
+       "tags-active-yes": "Po",
+       "tags-active-no": "Jo",
+       "tags-source-extension": "Definuar nga softueri",
+       "tags-source-none": "Nuk përdorët më",
        "tags-edit": "redakto",
+       "tags-delete": "fshi",
+       "tags-activate": "aktivizo",
+       "tags-deactivate": "ç'aktivizo",
        "tags-hitcount": "$1 {{PLURAL:$1|ndryshim|ndryshime}}",
+       "tags-create-heading": "Krijoni një etiketë të re",
+       "tags-create-tag-name": "Emri i etiketës:",
        "tags-create-reason": "Arsyeja:",
+       "tags-create-submit": "Krijoni",
+       "tags-delete-title": "Gris etiketën",
        "tags-delete-reason": "Arsyeja:",
        "tags-activate-reason": "Arsyeja:",
+       "tags-activate-submit": "Aktivizo",
        "tags-deactivate-reason": "Arsyeja:",
        "tags-edit-reason": "Arsyeja:",
        "comparepages": "Krahasoni faqet",
        "htmlform-submit": "Dërgo",
        "htmlform-reset": "Zhbëj ndryshimin",
        "htmlform-selectorother-other": "Gjitha",
+       "htmlform-date-placeholder": "VVVV-MM-DD",
+       "htmlform-time-placeholder": "OO:MM:SS",
+       "htmlform-datetime-placeholder": "VVVV-MM-DD OO:MM:SS",
+       "htmlform-title-not-exists": "$1 nuk ekziston.",
+       "htmlform-user-not-exists": "<strong>$1</strong> nuk ekziston.",
        "logentry-delete-delete": "$1 {{GENDER:$2|grisi}} faqen $3",
        "logentry-delete-restore": "$1 {{GENDER:$2|riktheu}} faqen $3",
        "logentry-delete-event": "$1 {{GENDER:$2|ndryshoi}} dukshmërinë e {{PLURAL:$5|e një ngjarjeje regjistri|$5 ngjarjeve regjistri}} në $3: $4",
        "logentry-upload-upload": "$1 {{GENDER:$2|ngarkoi}} $3",
        "rightsnone": "(asgjë)",
        "feedback-adding": "Duke shtuar përshtypjen te faqja...",
+       "feedback-back": "Prapa",
        "feedback-bugcheck": "Shumë mirë! Thjesht kontrolloni që nuk është një nga [$1 problemet e njohura].",
        "feedback-bugnew": "E kontrollova. Raporto një problem të ri",
        "feedback-bugornote": "Nëse jeni gati për të përshkruar një problem teknik me detaje ju lutemi [$1 raportoni një problem].\nPërndryshe, ju mund të formularin e thjeshtë më poshtë. Komenti juaj do të shtohet te faqja \"[$3 $2]\"\", së bashku me emrin tuaj të përdoruesit dhe shfletuesin të cilin jeni duke përdorur.",
        "feedback-cancel": "Anulo",
        "feedback-close": "Përfunduar",
+       "feedback-dialog-title": "Dërgo përshtypjet",
        "feedback-error1": "Gabim: Rezultat i panjohur nga API",
        "feedback-error2": "Gabim: Redaktimi dështoi",
        "feedback-error3": "Gabim: Nuk ka përgjigje nga API",
        "expand_templates_title": "Titulli i faqes për rrethanën, si {{FULLPAGENAME}} etj.:",
        "expand_templates_input": "Teksti me stampa:",
        "expand_templates_output": "Parapamja",
+       "expand_templates_xml_output": "Rezultat XML",
        "expand_templates_ok": "Shko",
        "expand_templates_remove_comments": "Hiq komentet",
+       "expand_templates_preview": "Parapamje",
+       "pagelanguage": "Ndrysho gjuhën e faqës",
+       "pagelang-name": "Faqja",
+       "pagelang-language": "Gjuha",
+       "pagelang-use-default": "Përdor gjuhën e parazgjedhur",
+       "pagelang-select-lang": "Zgjedh gjuhën",
+       "pagelang-reason": "Arsyeja",
+       "pagelang-submit": "Dërgo",
+       "pagelang-nonexistent-page": "Faqja $1 nuk ekziston.",
+       "right-pagelang": "Ndrysho gjuhën e faqës",
+       "action-pagelang": "ndrysho gjuhën e faqës",
+       "mediastatistics-table-mimetype": "Lloji MIME",
+       "mediastatistics-table-extensions": "Shtojcat e mundshme",
+       "mediastatistics-table-count": "Numri i skedave",
+       "mediastatistics-table-totalbytes": "Madhësia e kombinuar",
+       "mediastatistics-header-unknown": "I panjohur",
+       "mediastatistics-header-bitmap": "Imazh bitmap",
+       "mediastatistics-header-drawing": "Vizatime (imazhe vektor)",
+       "mediastatistics-header-audio": "Zërim",
+       "mediastatistics-header-video": "Video",
+       "mediastatistics-header-multimedia": "Media e pasur",
+       "mediastatistics-header-office": "Zyrë",
+       "mediastatistics-header-text": "Tekstor",
+       "mediastatistics-header-executable": "Të ekzekutueshmet",
+       "mediastatistics-header-archive": "Formate të komprimuara",
+       "mediastatistics-header-total": "Të gjitha skedat",
        "special-characters-group-latin": "Latinisht",
        "special-characters-group-latinextended": "Latanisht, zgjeruar",
        "special-characters-group-ipa": "Alfabeti Fonetik Ndërkombëtar (IPA)",
        "special-characters-group-symbols": "Simbolet",
        "special-characters-group-greek": "Grezisht",
+       "special-characters-group-greekextended": "Greke e zgjeruar",
        "special-characters-group-cyrillic": "Cirilik",
        "special-characters-group-arabic": "Arabisht",
+       "special-characters-group-arabicextended": "Arabishte e zgjeruar",
        "special-characters-group-persian": "Persisht",
        "special-characters-group-hebrew": "Hebraisht",
        "special-characters-group-bangla": "Bengalisht",
+       "special-characters-group-tamil": "Tamil",
        "special-characters-group-telugu": "Telugu",
        "special-characters-group-sinhala": "Singhalisht",
        "special-characters-group-gujarati": "Guxharati",
+       "special-characters-group-devanagari": "Devanagari",
        "special-characters-group-thai": "Thai",
        "special-characters-group-lao": "Lao",
        "special-characters-group-khmer": "Khmer",
+       "special-characters-title-endash": "viza e gjatë",
+       "special-characters-title-emdash": "viza më e gjatë",
+       "special-characters-title-minus": "shenja minus",
+       "mw-widgets-dateinput-no-date": "Nuk u zgjedh data",
        "mw-widgets-dateinput-placeholder-day": "VVVV-MM-DD",
-       "mw-widgets-dateinput-placeholder-month": "VVVV-MM"
+       "mw-widgets-dateinput-placeholder-month": "VVVV-MM",
+       "mw-widgets-mediasearch-input-placeholder": "Kërko media",
+       "mw-widgets-mediasearch-noresults": "Nuk është gjetur asnjë rezultat.",
+       "log-action-filter-all": "Të gjitha",
+       "log-action-filter-block-block": "Blloko",
+       "authmanager-email-label": "Email",
+       "authmanager-email-help": "Adresa e emailit:",
+       "authmanager-realname-label": "Emri i vërtetë",
+       "authmanager-realname-help": "Emri i vërtetë i përdoruesit",
+       "authmanager-provider-temporarypassword": "Fjalëkalim i përkohshëm",
+       "authprovider-resetpass-skip-label": "Kapërce",
+       "changecredentials": "Ndërro kredencialet",
+       "changecredentials-submit": "Ndërro kredencialet",
+       "changecredentials-invalidsubpage": "$1 nuk është tip i vlefshëm i kredencialit.",
+       "changecredentials-success": "Kredencialet tuaja kanë ndryshuar.",
+       "removecredentials": "Hiq kredencialet",
+       "removecredentials-submit": "Hiq kredencialet",
+       "removecredentials-invalidsubpage": "$1 nuk është tip i vlefshëm i kredencialit.",
+       "removecredentials-success": "Kredencialet tuaja kanë ndryshuar.",
+       "credentialsform-provider": "Tipi i kredencialit:",
+       "credentialsform-account": "Emri i llogarisë:",
+       "cannotlink-no-provider-title": "Nuk ka llogari të lidhshme",
+       "cannotlink-no-provider": "Nuk ka llogari të lidhshme.",
+       "linkaccounts": "Lidh llogari",
+       "linkaccounts-success-text": "Llogaria është lidhur.",
+       "linkaccounts-submit": "Lidh llogari",
+       "unlinkaccounts": "Ndaj llogaritë",
+       "unlinkaccounts-success": "Llogaria është ndarë.",
+       "restrictionsfield-badip": "Adresë ose varg IP-je e parregulltë: $1",
+       "restrictionsfield-label": "Vargu i lejuar i IP-së:",
+       "revid": "versioni $1",
+       "pageid": "ID e faqes $1",
+       "rawhtml-notallowed": "&lt;html&gt; etiketat nuk mund të përdorën jashtë faqeve normale."
 }
index cba221e..1e247dc 100644 (file)
        "right-editsemiprotected": "уређивање страница под заштитом „{{int:protect-level-autoconfirmed}}“",
        "right-editcontentmodel": "мењање модела садржаја странице",
        "right-editinterface": "уређивање корисничког окружења",
-       "right-editusercssjs": "уређивање туђих CSS и јаваскрипт датотека",
        "right-editusercss": "уређивање туђих CSS датотека",
        "right-edituserjs": "уређивање туђих JavaScript датотека",
        "right-editmyusercss": "уређивање сопствених CSS датотека",
        "rcshowhidecategorization": "$1 категоризацију страница",
        "rcshowhidecategorization-show": "Прикажи",
        "rcshowhidecategorization-hide": "Сакриј",
-       "rclinks": "Прикажи последњих $1 измена {{PLURAL:$2|претходни дан|у последња $2 дана|у последњих $2 дана}}<br />$3",
+       "rclinks": "Прикажи последњих $1 измена {{PLURAL:$2|претходни дан|у последња $2 дана|у последњих $2 дана}}",
        "diff": "разл",
        "hist": "ист",
        "hide": "Сакриј",
        "listgrouprights-namespaceprotection-header": "Ограничења именских простора",
        "listgrouprights-namespaceprotection-namespace": "Именски простор",
        "listgrouprights-namespaceprotection-restrictedto": "Права потребна за уређивање",
+       "listgrants": "Дозволе",
        "listgrants-rights": "Права",
        "trackingcategories": "Медијавики категорије",
        "trackingcategories-summary": "Ова посебна страница је списак категорија које су део Медијавикија, оне се аутоматски ажурирају и њихови називи се могу мењати уређивањем системских порука у именском простору {{ns:8}}.",
        "undeleteviewlink": "погледај",
        "undeleteinvert": "Обрни избор",
        "undeletecomment": "Разлог:",
-       "undeletedrevisions": "{{PLURAL:$1|измена враћено}} $1",
-       "undeletedrevisions-files": "$1 {{PLURAL:$1|измена|измене|измена}} и $2 {{PLURAL:$2|датотека је враћена|датотеке су враћене|датотека је враћено}}",
-       "undeletedfiles": "{{PLURAL:$1|датотека враћено}} $1",
        "cannotundelete": "Враћање једне или свих ставник није успјело:\n$1",
        "undeletedpage": "<strong>Страница $1 је враћена</strong>\n\nПогледајте [[Special:Log/delete|дневник брисања]] за записе о скорашњим брисањима и враћањима.",
        "undelete-header": "Погледајте [[Special:Log/delete|историјат брисања]] за недавно обрисане странице.",
        "authprovider-resetpass-skip-label": "Прескочи",
        "changecredentials": "Промјена акредитива",
        "changecredentials-submit": "Промени",
+       "removecredentials": "Уклањање акредитива",
        "credentialsform-provider": "Врста акредитива:",
        "credentialsform-account": "Назив налога:"
 }
index db5fb16..dd0e20c 100644 (file)
        "right-editprotected": "uređivanje stranice pod zaštitom „{{int:protect-level-sysop}}“",
        "right-editsemiprotected": "uređivanje stranica pod zaštitom „{{int:protect-level-autoconfirmed}}“",
        "right-editinterface": "uređivanje korisničkog okruženja",
-       "right-editusercssjs": "uređivanje tuđih CSS i javaskript datoteka",
        "right-editusercss": "uređivanje tuđih CSS datoteka",
        "right-edituserjs": "uređivanje tuđih JavaScript datoteka",
        "right-editmyusercss": "uređivanje sopstvenih CSS datoteka",
        "rcshowhidecategorization": "$1 kategorizaciju stranica",
        "rcshowhidecategorization-show": "Prikaži",
        "rcshowhidecategorization-hide": "Sakrij",
-       "rclinks": "Prikaži poslednjih $1 izmena {{PLURAL:$2|prethodni dan|u poslednja $2 dana|u poslednjih $2 dana}}<br />$3",
+       "rclinks": "Prikaži poslednjih $1 izmena {{PLURAL:$2|prethodni dan|u poslednja $2 dana|u poslednjih $2 dana}}",
        "diff": "razl",
        "hist": "ist",
        "hide": "Sakrij",
        "listgrouprights-namespaceprotection-header": "Ograničenja imenskih prostora",
        "listgrouprights-namespaceprotection-namespace": "Imenski prostor",
        "listgrouprights-namespaceprotection-restrictedto": "Prava potrebna za uređivanje",
+       "listgrants": "Dozvole",
        "listgrants-rights": "Prava",
        "trackingcategories": "Medijaviki kategorije",
        "trackingcategories-summary": "Ova posebna stranica je spisak kategorija koje su deo Medijavikija, one se automatski ažuriraju i njihovi nazivi se mogu menjati uređivanjem sistemskih poruka u imenskom prostoru {{ns:8}}.",
        "undeleteviewlink": "pogledaj",
        "undeleteinvert": "Obrni izbor",
        "undeletecomment": "Razlog:",
-       "undeletedrevisions": "{{PLURAL:$1|izmena vraćeno}} $1",
-       "undeletedrevisions-files": "$1 {{PLURAL:$1|izmena|izmene|izmena}} i $2 {{PLURAL:$2|datoteka je vraćena|datoteke su vraćene|datoteka je vraćeno}}",
-       "undeletedfiles": "{{PLURAL:$1|datoteka vraćeno}} $1",
        "cannotundelete": "Vraćanje nije uspelo:\n$1",
        "undeletedpage": "<strong>Stranica $1 je vraćena</strong>\n\nPogledajte [[Special:Log/delete|dnevnik brisanja]] za zapise o skorašnjim brisanjima i vraćanjima.",
        "undelete-header": "Pogledajte [[Special:Log/delete|istorijat brisanja]] za nedavno obrisane stranice.",
        "log-action-filter-upload-upload": "Novo otpremanje",
        "authmanager-email-label": "Imejl",
        "authmanager-email-help": "Imejl adresa",
-       "changecredentials": "Promjena akreditiva"
+       "changecredentials": "Promjena akreditiva",
+       "removecredentials": "Uklanjanje akreditiva"
 }
index 6b3bcec..a7acabc 100644 (file)
        "yourdomainname": "Yu domein:",
        "login": "Psa kon",
        "nav-login-createaccount": "Psa kon / meki wan account",
-       "userlogin": "Psa kon / meki wan account",
        "logout": "Psa gwe",
        "userlogout": "Psa gwe",
        "notloggedin": "No psa kon",
-       "nologin": "No abi wan kebroikiman nen ete? '''$1'''.",
-       "nologinlink": "Meki wan account",
        "createaccount": "Meki wan account",
-       "gotaccount": "Abi wan kebroikiman nen kba? '''$1'''.",
-       "gotaccountlink": "Psa kon",
        "createaccountmail": "via e-mail",
        "badretype": "Den tu psa wortu no de srefi.",
        "userexists": "A kebroikiman nen disi de kaba.\nTeki wan tra nen.",
        "prefs-misc": "Diversi",
        "saveprefs": "Oponaki",
        "prefs-editing": "Kenki",
-       "rows": "Rei:",
-       "columns": "Kolum:",
        "searchresultshead": "Suku",
        "stub-threshold": "Dupolo fu seti <a href=\"#\" class=\"stub\">stub</a>:",
        "recentchangesdays": "Teki fu dey tu libi si ini bakaseywan kenki:",
        "rcshowhideanons": "$1 den kebroikiman sondro nen",
        "rcshowhidepatr": "$1 den kenki di kisi luku",
        "rcshowhidemine": "$1 mi kenki",
-       "rclinks": "Sori den laste $1 kenki ini den $2 laste dei<br />$3",
+       "rclinks": "Sori den laste $1 kenki ini den $2 laste dei",
        "diff": "kenki",
        "hist": "hist",
        "hide": "kibri",
index 68b29f0..cc52a63 100644 (file)
        "externaldberror": "Äntweeder deer lait n Failer bie ju externe Authentifizierenge foar, of du duurst din extern Benutzerkonto nit aktualisierje.",
        "login": "Anmäldje",
        "nav-login-createaccount": "Anmäldje",
-       "userlogin": "Anmäldje / Benutserkonto moakje",
-       "userloginnocreate": "Anmäldje",
        "logout": "Oumäldje",
        "userlogout": "Oumäldje",
        "notloggedin": "Nit anmälded",
-       "nologin": "Du hääst neen Benutserkonto? '''$1'''.",
-       "nologinlink": "Hier laist du n Konto an.",
        "createaccount": "Benutserkonto anlääse",
-       "gotaccount": "Du hääst al n Konto? '''$1'''.",
-       "gotaccountlink": "Hier gungt dät ätter dän Login",
-       "userlogin-resetlink": "\n↓Do Anmäldedoaten ferjeeten?",
        "createaccountmail": "Uur Email",
-       "createaccountreason": "Gruund:",
        "badretype": "Do bee Paaswoude stimme nit uureen.",
        "userexists": "Dissen Benutsernoome is al ferroat. Wääl jädden n uur.",
        "loginerror": "Failer bie ju Anmäldenge",
        "passwordreset-disabled": "Dät Touräächsätten fon Paaswoude wuud in dissen Wiki deaktivierd.",
        "passwordreset-username": "Benutsernoome:",
        "passwordreset-domain": "Domain:",
-       "passwordreset-capture": "Ju E-Mail-Ättergjucht bekiekje?",
-       "passwordreset-capture-help": "Wan du disse Kaste ankjuusest, wäd ju E-Mail-Ättergjucht mäd dät temporäre Paaswoud, die wiesed, as uk dän Benutser tousoand.",
        "passwordreset-email": "E-Mail-Adresse:",
        "passwordreset-emailtitle": "Benutserkontoinformatione ap {{SITENAME}}",
        "passwordreset-emailelement": "↓Benutsernoome: \n$1\n\nTemporär Paaswoud: \n$2",
        "saveprefs": "Ienstaalengen spiekerje",
        "restoreprefs": "Aal Standoard-Ienstaalengen wier häärstaale",
        "prefs-editing": "Beoarbaidje",
-       "rows": "Riegen",
-       "columns": "Spalten",
        "searchresultshead": "Säike (010)",
        "stub-threshold": "<a href=\"#\" class=\"stub\">Kuute Artikkele</a> markierje bi (in Byte):",
        "stub-threshold-disabled": "Deaktivierd",
        "userrights-reason": "Gruund:",
        "userrights-no-interwiki": "Du hääst neen Begjuchtigenge, do Benutsergjuchte in uur Wikis tou annerjen.",
        "userrights-nodatabase": "Ju Doatenboank $1 is nit deer of nit lokoal.",
-       "userrights-nologin": "Du moast die mäd n Administrator-Benutserkonto [[Special:UserLogin|anmäldje]], uum Benutsergjuchte tou annerjen.",
-       "userrights-notallowed": "Du hääst neen Begjuchtigenge, uum Benutsergjuchte tou reeken of ientouluuken.",
        "userrights-changeable-col": "Gruppentouheeregaid, ju du annerje koast",
        "userrights-unchangeable-col": "Gruppentouheeregaid, ju du nit annerje koast",
        "group": "Gruppe:",
        "right-protect": "Siedenskutsstatus annerje",
        "right-editprotected": "Skutsede Sieden beoarbaidje (sunner Kaskadenskuts)",
        "right-editinterface": "Benutserinterface beoarbaidje",
-       "right-editusercssjs": "Beoarbaidjen fon CSS- un JS-Doatäie fon uur Benutsere",
        "right-editusercss": "Beoarbaidjen fon CSS-Doatäie fon uur Benutsere",
        "right-edituserjs": "Beoarbaidjen fon JS-Doatäie fon uur Benutsere",
        "right-rollback": "Gau räägels Traalen",
        "right-siteadmin": "Doatenboank speere un äntspeere",
        "right-override-export-depth": "Exportier Sieden touhoope mäd ferlinkede Sieden bit tou ne Djüpte fon 5",
        "right-sendemail": "E-Mails an uur Benutsere seende",
-       "right-passwordreset": "Paaswoud fon n Benutser touräächsätte ([[Special:PasswordReset|Spezioalsiede]])",
        "newuserlogpage": "Näianmäldengs-Logbouk",
        "newuserlogpagetext": "Dit is dät Logbouk fon näi anmäldede Benutsere.",
        "rightslog": "Gjuchte-Logbouk",
        "rcshowhideanons": "Anonyme Benutsere $1",
        "rcshowhidepatr": "Pröiwede Annerengen $1",
        "rcshowhidemine": "Oaine Biedraage $1",
-       "rclinks": "Wies do lääste $1 Annerengen; wies do lääste $2 Deege.<br />$3",
+       "rclinks": "Wies do lääste $1 Annerengen; wies do lääste $2 Deege.",
        "diff": "Unnerskeed",
        "hist": "Versione",
        "hide": "ferbierge",
        "undeleteviewlink": "bekiekje",
        "undeleteinvert": "Uutwoal uumekiere",
        "undeletecomment": "Gruund:",
-       "undeletedrevisions": "{{PLURAL:$1|1 Version wuude|$1 Versione wuuden}} wier häärstoald",
-       "undeletedrevisions-files": "{{PLURAL:$1|1 Version|$1 Versione}} un {{PLURAL:$2|1 Doatäi|$2 Doatäie}} wuuden wier häärstoald",
-       "undeletedfiles": "{{PLURAL:$1|1 Doatäie wuude|$1 Doatäie wuuden}} wier häärstoald",
        "cannotundelete": "Wier Moakjen failsloain; uurswäl häd ju Siede al wier moaked.",
        "undeletedpage": "'''$1''' wuude wier moaked.\n\nIn dät [[Special:Log/delete|Läsk-Logbouk]] finst du ne Uursicht fon do läskede un wier moakede Sieden.",
        "undelete-header": "Sjuch dät [[Special:Log/delete|Läsk-Logbouk]] foar knu läskede Sieden.",
        "revdelete-restricted": "Einskränkengen jäilde uk foar Administratore",
        "revdelete-unrestricted": "Ienskränkengen foar Administratore wächhoald",
        "rightsnone": "(-)",
-       "revdelete-summary": "Touhoopefoatengskommentoar",
        "searchsuggest-search": "Säik",
        "searchsuggest-containing": "Fultextsäike ätter ...",
        "expandtemplates": "Foarloagen expandierje",
index 11d779a..7a893dc 100644 (file)
                        "Urhixidur",
                        "לערי ריינהארט",
                        "아라",
-                       "Macofe"
+                       "Macofe",
+                       "Uchup19"
                ]
        },
        "tog-underline": "Gurat-handapan tutumbu",
-       "tog-hideminor": "Sumputkeun éditan minor dina nu anyar robah",
+       "tog-hideminor": "Sumputkeun éditan minor dina anyar robah",
        "tog-hidepatrolled": "Sumputkeun anu geus diroris ti béréndélan nu anyar robah",
        "tog-newpageshidepatrolled": "Sumputkeun nu geus diroris tina béréndélan kaca anyar",
        "tog-extendwatchlist": "Legaan béréndélan ngarah sakabéh parobahanana kaawaskeun",
@@ -28,6 +29,7 @@
        "tog-watchdefault": "Tambahkeun kaca jeung berkas anu diédit ku kuring kana awaskeuneun",
        "tog-watchmoves": "Tambahkeun kaca jeung berkas anu dipindahkeun ka awaskeuneun",
        "tog-watchdeletion": "Tambahkeun kaca jeung berkas anu dihapus kana awaskeuneun",
+       "tog-watchuploads": "Tambahkeun berkas anyar nu cik kénéh ku kuring diunjal kana daptar awaskeuneun",
        "tog-watchrollback": "Tambahkeun kaca anu jujutanana kungsi dibalikkeun kana awaskeuneun",
        "tog-minordefault": "Tandaan sadaya éditan salaku minor luyu jeung ti dituna",
        "tog-previewontop": "Témbongkeun sawangan méméh kotak édit (lain sanggeusna)",
@@ -37,7 +39,7 @@
        "tog-enotifminoredits": "Béjaan ogé (ngaliwatan surélék) lamun aya parobahan leutik dina kaca jeung berkasna",
        "tog-enotifrevealaddr": "Témbongkeun alamat surélék kuring dina surat émbaran",
        "tog-shownumberswatching": "Témbongkeun jumlah nu ngawaskeun",
-       "tog-oldsig": "Paraf nu geus aya:",
+       "tog-oldsig": "Tawisan anjeun nu nyampak:",
        "tog-fancysig": "Témbongkeun tanda tangan salaku wikitext (tanpa tutumbu otomatis)",
        "tog-uselivepreview": "Paké pratayang langsung",
        "tog-forceeditsummary": "Mun kotak ringkesan éditan masih kosong, béjaan!",
        "tog-prefershttps": "Salawasna paké sambungan aman nalika asup log",
        "underline-always": "Salawasna",
        "underline-never": "Ulah",
-       "underline-default": "Buhunna kulit atawa panyungsi",
-       "editfont-style": "Gaya aksara dina kotak éditan:",
-       "editfont-default": "Luyu jeung buhunna panyungsi",
-       "editfont-monospace": "Aksara monospasi",
+       "underline-default": "Kalakop atawa panyungsi bawaan",
+       "editfont-style": "Gaya tulisan komputer dina kotak éditan:",
+       "editfont-default": "Bawaan panyungsi",
+       "editfont-monospace": "Tulisan monospasi",
        "editfont-sansserif": "Aksara Sans-serif",
        "editfont-serif": "Aksara Serif",
        "sunday": "Minggu",
@@ -68,7 +70,7 @@
        "thursday": "Kemis",
        "friday": "Jumaah",
        "saturday": "Saptu",
-       "sun": "Ming",
+       "sun": "Min",
        "mon": "Sen",
        "tue": "Sal",
        "wed": "Reb",
        "category-article-count": "{{PLURAL:$2|Ieu kategori ngan ngawengku nu di handap.|{{PLURAL:$1|kaca|$1 kaca}} ti $2 di handap asup kana ieu kategori.}}",
        "category-article-count-limited": "{{PLURAL:$1|Kaca|$1 kaca}} di handap kaasup kana kategori.",
        "category-file-count": "{{PLURAL:$2|Ieu kategori ngan boga berkas di handap.|{{PLURAL:$1|berkas|$1 berkas}} di handap aya dina ieu kategori, ti jumlah $2.}}",
-       "category-file-count-limited": "{{PLURAL:$1|berkas|$1 berkas}} di handap aya dina kategori ieu.",
+       "category-file-count-limited": "{{PLURAL:$1|berkas|$1 berkas}} di handap aya dina ieu kategori.",
        "listingcontinuesabbrev": "(samb.)",
        "index-category": "Kaca nu diindéks",
        "noindex-category": "Kaca nu teu diindéks",
        "faq": "NLD",
        "faqpage": "Project:NLD",
        "actions": "Peta",
-       "namespaces": "Spasi ngaran",
+       "namespaces": "Ngaranspasi",
        "variants": "Varian",
-       "navigation-heading": "Ménu navigasi",
+       "navigation-heading": "Menu navigasi",
        "errorpagetitle": "Kasalahan",
        "returnto": "Balik deui ka $1.",
        "tagline": "Ti {{SITENAME}}",
        "help": "Pitulung",
-       "search": "Sungsi",
-       "searchbutton": "Sungsi",
+       "search": "Paluruh",
+       "searchbutton": "Paluruh",
        "go": "Jung",
        "searcharticle": "Jung",
        "history": "Jujutan kaca",
        "history_short": "Jujutan",
+       "history_small": "jujutan",
        "updatedmarker": "dirobah saprak pamungkas datangna kuring",
        "printableversion": "Vérsi citakeun",
        "permalink": "Tutumbu permanén",
        "talk": "Sawala",
        "views": "Témbongan",
        "toolbox": "Parabot",
+       "tool-link-userrights": "Robah kelompok {{GENDER:$1|pamaké}}",
+       "tool-link-userrights-readonly": "Témbong kelompok {{GENDER:$1|pamaké}}",
+       "tool-link-emailuser": "Kirim surélék ka ieu {{GENDER:$1|pamaké}}",
        "userpage": "Témbongkeun kaca pamaké",
        "projectpage": "Témbongkeun kaca proyék",
        "imagepage": "Tempo kaca gambar",
        "protectedpage": "Kaca nu dikonci",
        "jumpto": "Luncat ka:",
        "jumptonavigation": "pituduh",
-       "jumptosearch": "sungsi",
+       "jumptosearch": "paluruh",
        "view-pool-error": "Punten, serverna keur pinuh.\nLoba teuing nu nyoba muka ieu kaca.\nMangga cobian sanés waktos.\n\n$1",
        "generic-pool-error": "Hampura, serverna keur pinuh.\nLoba teuing nu nyoba muka ieu sumberdaya.\nAntosan sakedap, engké cobaan deui.",
        "pool-timeout": "Béakeun waktu nungguan konci",
        "versionrequired": "Butuh MediaWiki vérsi $1",
        "versionrequiredtext": "Butuh MediaWiki vérsi $1 pikeun migunakeun ieu kaca. Mangga tingal [[Special:Version|kaca vérsi]]",
        "ok": "Heug",
-       "retrievedfrom": "Disalin ti \"$1\"",
+       "retrievedfrom": "Dicomot ti \"$1\"",
        "youhavenewmessages": "Anjeun boga $1 ($2).",
        "youhavenewmessagesfromusers": "{{PLURAL:$4|Anjeun boga}} $1 ti {{PLURAL:$3|pamaké séjén|$3 pamaké}} ($2).",
        "youhavenewmessagesmanyusers": "Anjeun boga $1 ti pamaké lian ($2).",
        "title-invalid-talk-namespace": "Judul kaca anu dipénta nujul ka kaca obrolan anu teu mungkin aya.",
        "title-invalid-characters": "Judul kaca anu dipénta ngandung karakter anu henteu sah: \"$1\".",
        "title-invalid-relative": "Judul ngandung jalur rélatip. Judul kaca rélatip (./, ../) henteu sah, kusabab bakal mindeng teu kahontal nalika dibuka maké browser pamaké.",
-       "title-invalid-magic-tilde": "Judul kaca anu dipénta ngandung sékuéns gelombang sulap (<nowiki>~~~</nowiki>).",
+       "title-invalid-magic-tilde": "Judul kaca anu dipénta ngandung tilda anu teu sah (<nowiki>~~~</nowiki>).",
        "title-invalid-too-long": "Judul kaca anu dipundut panjang teuing. Ulah leuwih ti $1 {{PLURAL:$1|bit}} dina panyandi UTF-8.",
        "title-invalid-leading-colon": "Judul kaca anu dipénta dimimitian ku kolon anu henteu sah.",
        "perfcached": "Data di handap ieu mangrupa 'cache' sahingga bisa jadi henteu mutahir. 'Cache' nyadiakeun paling loba {{PLURAL:$1|hiji hasil|$1 hasil}}.",
        "virus-scanfailed": "nyekén gagal (kode $1)",
        "virus-unknownscanner": "antivirus teu dipikawanoh:",
        "logouttext": "<strong>Anjeun ayeuna geus kaluar log.<strong>\n\nMangkahadé, sababaraha kaca bakal tetep némbongkeun saolah-olah asup kénéh log nepi ka anjeun ngosongkeun ''cache'' dina panyungsi.",
+       "cannotlogoutnow-title": "Teu bisa kaluar log ayeuna",
+       "cannotlogoutnow-text": "Kaluar log teu mungkin bisa nalika keur ngagunakeun $1.",
        "welcomeuser": "Bagéa, $1!",
        "welcomecreation-msg": "Akun anjeun geus dijieun.\nLamun minat, Anjeun bisa ngarobah [[Special:Preferences|préferénsi]] {{SITENAME}}.",
        "yourname": "Sandiasma:",
        "createacct-yourpasswordagain-ph": "Asupkeun deui kecap sandi",
        "userlogin-remembermypassword": "Jaga ngarah angger asup log",
        "userlogin-signwithsecure": "Paké sambungan aman",
+       "cannotlogin-title": "Teu bisa asup log",
+       "cannotlogin-text": "Asup log teu mungkin bisa",
+       "cannotloginnow-title": "Teu bisa asup log ayeuna",
+       "cannotloginnow-text": "Kaluar log teu mungkin bisa nalika keur ngagunakeun $1.",
+       "cannotcreateaccount-title": "Teu bisa nyieun akun",
        "yourdomainname": "Domain anjeun",
        "password-change-forbidden": "Anjeun teu bisa ngarobah kecap sandi dina ieu wiki.",
        "externaldberror": "Aya kasalahan dina pangkalan data oténtikasi luar, atawa anjeun mémang teu diwenangkeun pikeun ngaropéa akun luar anjeun.",
        "createacct-reason": "Alesan",
        "createacct-reason-ph": "Naha bet nyieun akun séjén",
        "createacct-submit": "Jieun akun anjeun",
-       "createacct-another-submit": "Jieun akun séjén",
+       "createacct-another-submit": "Jieun akun",
+       "createacct-continue-submit": "Tuluykeun panyieunan akun",
+       "createacct-another-continue-submit": "Tuluykeun panyieunan akun",
        "createacct-benefit-heading": "{{SITENAME}} téh dijieun ku jalma-jalma siga anjeun.",
        "createacct-benefit-body1": "{{PLURAL:$1|édit|édit}}",
        "createacct-benefit-body2": "{{PLURAL:$1|kaca|kaca}}",
        "nocookieslogin": "{{SITENAME}} migunakeun ''cookies'' pikeun ngasupkeun pamaké kana log. Anjeun boga ''cookies'' nu ditumpurkeun. Mangga pungsikeun sarta cobian deui.",
        "nocookiesfornew": "Akun pamaké teu bisa dijieun, kusabab sumberna teu bisa dipastikeun.\nPariksa kukisna bisi tumpur, terus cobaan muat ulang ieu kaca.",
        "noname": "Anjeun teu nuliskeun ngaran pamaké nu sah.",
-       "loginsuccesstitle": "Asup log geus hasil",
+       "loginsuccesstitle": "Geus asup log",
        "loginsuccess": "Anjeun ayeuna geus asup log ka {{SITENAME}} salaku \"$1\".",
-       "nosuchuser": "Euweuh pamaké nu ngaranna \"$1\".\nNgaran pamaké ngabedakeun hurup kapital.\nPariksa éjahanana, atawa paké formulir di handap pikeun [[Special:CreateAccount|nyieun rekening anyar]].",
+       "nosuchuser": "Euweuh pamaké nu ngaranna \"$1\".\nNgaran pamaké ngabedakeun gedé leutikna hurup.\nPariksa éjahanana, atawa [[Special:CreateAccount|nyieun akun anyar]].",
        "nosuchusershort": "Taya pamaké nu ngaranna \"$1\", pariksa éjahanana!",
        "nouserspecified": "Anjeun kudu ngeusian ngaran landihan.",
        "login-userblocked": "Ieu pamaké keur dipeungpeuk, teu diwenangkeun asup log.",
        "noemail": "Teu aya alamat surélék karékam pikeun \"$1\".",
        "noemailcreate": "Anjeun kudu nyadiakeun alamat surélék anu bener",
        "passwordsent": "Sandi anyar geus dikirim ka alamat surélék nu kadaptar pikeun \"$1\". Mangga asup log deui satutasna katarima.",
-       "blocked-mailpassword": "Alamat IP anjeun dipeungpeuk tina kabisa ngédit, sarta moal bisa maké fungsi ganti kecap sandi ngarah hanteu disalahgunakeun.",
+       "blocked-mailpassword": "Alamat IP anjeun dipeungpeuk tina kabisa ngédit. Pikeun nyingkahan panyalahgunaan, Anjeun teu dimeunangkeun pikeun mermanakeun kecap sandi liwat ieu alamat IP.",
        "eauthentsent": "Surélék konfirmasi geus dikirim ka alamat bieu.\nMéméh aya surat séjén asup ka akunna, anjeun kudu nuturkeun pituduh dina surélékna pikeun mastikeun yén akun éta téh bener boga anjeun.",
        "throttled-mailpassword": "Surélék pikeun ngarobah kecap sandi geus dikirim {{PLURAL:$1|jam|$1 jam}} kaliwat.\nNgarah hanteu disalahgunakeun, ngan hiji surélék anu bakal dikirim saban {{PLURAL:$1|jam|$1 jam}}.",
        "mailerror": "Kasalahan ngirim surat: $1",
        "emaildisabled": "Ieu loka teu bisa ngirim surélék.",
        "accountcreated": "Akun geus dijieun",
        "accountcreatedtext": "Akun pamaké [[{{ns:Pamaké}}:$1|$1]] ([[{{ns:Obrolan pamaké}}:$1|obrolan]]) geus dijieun.",
-       "createaccount-title": "Nyieun akun keur {{SITENAME}}",
+       "createaccount-title": "Nyieun akun pikeun {{SITENAME}}",
        "createaccount-text": "Aya nu nyieun akun pikeun alamat surélék anjeun di {{SITENAME}} ($4) maké sandiasma \"$2\" kalawan kecap sandi \"$3\". Anjeun kudu asup log sarta ngaganti kecap sandina.\n\nMun ieu akun dijieun alatan éror, ulah diwaro.",
        "login-throttled": "Anjeun geus loba teuing nyobaan asup log.\nTungguan $1, laju cobaan deui.",
-       "login-abort-generic": "Login gagal - Dibolaykeun",
+       "login-abort-generic": "Asup log anjeun gagal - Dibolaykeun",
        "login-migrated-generic": "Akun anjeun geus pindah, ku kituna sandiasma anjeun geus leungit ti ieu wiki.",
        "loginlanguagelabel": "Basa: $1",
        "suspicious-userlogout": "Pamundut anjeun pikeun kaluar log ditolak ku sabab sigana dikirim ku pangaprak buntu atawa ''cache'' proxi.",
        "createacct-another-realname-tip": "Ngaran asli hanteu diwajibkeun.\nLamun anjeun milih ngeusian, ieu ngaran bakal dipaké pikeun nandaan kontribusi anjeun.",
        "pt-login": "Asup log",
        "pt-login-button": "Asup log",
+       "pt-login-continue-button": "Tuluykeun asup log",
        "pt-createaccount": "Jieun akun",
        "pt-userlogout": "Kaluar log",
        "php-mail-error-unknown": "Kasalahan nu teu kanyahoan dina fungsi PHP surélék().",
        "changepassword": "Robah sandi",
        "resetpass_announce": "Pikeun nganggeuskeun asup log, anjeun kudu nyieun kecap sandi anyar.",
        "resetpass_text": "<!-- Tambahkeun téks di dieu -->",
-       "resetpass_header": "Ganti sandi akun",
+       "resetpass_header": "Robah kecap sandi akun",
        "oldpassword": "Sandi heubeul",
        "newpassword": "Sandi anyar:",
        "retypenew": "Ketik ulang sandi",
        "resetpass_submit": "Setél log asup katut sandina",
        "changepassword-success": "Kecap sandi Anjeun geus laksana dirobah!",
        "changepassword-throttled": "Anjeun geus loba teuing nyobaan asup log.\nTungguan $1 méméh nyobaan deui.",
+       "botpasswords": "Kecap sandi bot",
+       "botpasswords-label-appid": "Ngaran bot:",
+       "botpasswords-label-create": "Jieun",
+       "botpasswords-label-update": "Anyarkeun",
+       "botpasswords-label-cancel": "Bolay",
+       "botpasswords-label-delete": "Pupus",
+       "botpasswords-label-resetpassword": "Balikeun deui kecap sandi",
+       "botpasswords-label-grants-column": "Diwidian",
+       "botpasswords-updated-title": "Kecap sandi bot dianyarkeun",
+       "botpasswords-deleted-title": "Kecap sandi bot dihapus",
        "resetpass_forbidden": "Sandi henteu bisa dirobah",
+       "resetpass_forbidden-reason": "Kecap sandi teu bisa diganti: $1",
        "resetpass-no-info": "Anjeun kudu asup log pkeun bisa muka ieu kaca sacara langsung.",
-       "resetpass-submit-loggedin": "Ganti kecap sandi akun",
+       "resetpass-submit-loggedin": "Robah kecap sandi",
        "resetpass-submit-cancel": "Bolay",
-       "resetpass-wrong-oldpass": "Salah sandi.\nBisa jadi anjeun geus ngaganti sandina atawa ménta sandi saheulaanan anu anyar.",
+       "resetpass-wrong-oldpass": "Kecap sandi panungtungtung atawa samentara teu sah.\nMeureun anjeun geus ngaganti sandina atawa ménta sandi saheulaanan anu anyar.",
        "resetpass-recycled": "Mangga ganti kecap sandi anjeun ku nu anyar.",
        "resetpass-temp-emailed": "Anjeun asup log migunakeun sandi témporér. Pikeun nganggeuskeun asup log, anjeun kudu nyieun kecap sandi anyar di dieu:",
        "resetpass-temp-password": "Sandi samentara:",
        "passwordreset-emailtext-ip": "Aya (sigana anjeun, ti alamat IP $1) ménta nyetél ulang kecap sandi pikeun {{SITENAME}} ($4). {{PLURAL:$3|Akun}} di handap tumali jeung alamat ieu surélék:\n\n$2\n\n{{PLURAL:$3|Ieu sandi saheulaanan}} bakal kadaluwarsa dina témpo {{PLURAL:$5|sapoé|$5 poé}}.\nAnjeun kudu asup sarta milih sandi anyar ayeuna. Lamun teu rumasa nyieun ieu paménta, atawa lamun geus inget sandi aslina sarta moal dirobah, ieu surat teu kudu diwaro.",
        "passwordreset-emailtext-user": "Pamaké $1 di {{SITENAME}} ménta nyetél ulang sandi anjeun di {{SITENAME}} ($4). {{PLURAL:$3|Akun}} di handap tumali jeung alamat surélék ieu:\n\n$2\n\n{{PLURAL:$3|Ieu sandi saheulaanan}} bakal kadaluwarsa dina témpo {{PLURAL:$5|sapoé|$5 poé}}.\nAnjeun kudu asup sarta milih sandi anyar ayeuna. Lamun henteu rumasa nyieun ieu pamundut atawa lamun geus inget sandi asli sarta moal ngarobah deui, ieu talatah teu kudu dipaliré.",
        "passwordreset-emailelement": "Sandiasma: \n$1\n\nSandi saheulaanan: \n$2",
-       "passwordreset-emailsentemail": "Surélék pikeun nyetél ulang kecap sandi geus dikirim.",
+       "passwordreset-emailsentemail": "Mun ieu alamat surélék patalian jeung akun anjeun, mangka surélék pikeun nyetél ulang kecap sandi bakal dikirim.",
        "changeemail": "Ganti alamat surélék",
        "changeemail-header": "Ganti alamat surélék akun",
        "changeemail-no-info": "Anjeun kudu asup log pikeun bisa muka ieu kaca sacara langsung.",
        "minoredit": "Ieu éditan minor",
        "watchthis": "Awaskeun kaca ieu",
        "savearticle": "Simpen",
+       "savechanges": "Simpen parobahan",
+       "publishpage": "Pedalkeun kaca",
+       "publishchanges": "Pedalkeun parobahan",
        "preview": "Pramidang",
        "showpreview": "Témbongkeun pramidang",
        "showdiff": "Témbongkeun parobahan",
        "missingsummary": "'''Pépéling:''' Anjeun can ngeusian sari éditan. Mun anjeun ngaklik deui Simpen, éditan anjeun bakal disimpen tanpa sari éditan",
        "selfredirect": "<strong>Awas:</strong> Anjeun ngalihkeun ieu kaca ka asalna.\nAnjeun sigana salah ngasupkeun tujul alihan, atawa ngédit kaca anu salah.\nUpama anjeun ngaklik deui \"{{int:savearticle}}\", alihanana bakal angger dijieun.",
        "missingcommenttext": "Mangga tulis koméntar di handapeun ieu.",
-       "missingcommentheader": "'''Pépéling''': Anjeun can ngeusian judul pikeun ieu koméntar.\nMun anjeun ngaklik deui \"{{int:savearticle}}\", éditan anjeun bakal disimpen tanpa koméntar.",
+       "missingcommentheader": "<strong>Pépéling</strong>: Anjeun can ngeusian judul pikeun ieu koméntar.\nMun anjeun ngaklik deui \"{{int:savearticle}}\", éditan anjeun bakal disimpen tanpa koméntar.",
        "summary-preview": "Ringkesan pramidang:",
        "subject-preview": "Sawangan subyek/tajuk:",
        "previewerrortext": "Aya éror nalika nyobaan nyawang robahan anjeun.",
        "searchprofile-advanced-tooltip": "Paluruh di rohang ngaran anu tangtu",
        "search-result-size": "$1 ({{PLURAL:$2|1 kecap|$2 kecap}})",
        "search-result-category-size": "{{PLURAL:$1|1 anggota|$1 anggota}} ({{PLURAL:$2|1 subkatégori|$2 subkatégori}}, {{PLURAL:$3|1 berkas|$3 berkas}})",
-       "search-redirect": "(alihan $1)",
+       "search-redirect": "(dipindahkeun ti $1)",
        "search-section": "(bagean $1)",
        "search-category": "(kategori $1)",
        "search-file-match": "(cocog jeung eusi berkas)",
        "mypreferences": "Préferénsi",
        "prefs-edits": "Jumlah éditan:",
        "prefsnologintext2": "Mangga asup log pikeun ngarobah préferénsi anjeun.",
-       "prefs-skin": "Kulit",
+       "prefs-skin": "Kalakop",
        "skin-preview": "Pramidang",
        "datedefault": "Tanpa préferénsi",
        "prefs-labs": "Fitur Labs",
        "prefs-editing": "Ukuran kotak téks",
        "searchresultshead": "Aturan hasil néang",
        "stub-threshold": "Wates ambang pikeun format <a href=\"#\" class=\"stub\">tumbu taratas</a> (bit):",
+       "stub-threshold-sample-link": "conto",
        "stub-threshold-disabled": "Tumpur",
        "recentchangesdays": "Jumlah poé nu dipidangkeun dina Nu anyar robah:",
        "recentchangesdays-max": "Panglilana $1 {{PLURAL:$1|poé|poé}}",
        "right-move-categorypages": "Pindahkeun kaca kategori",
        "right-movefile": "Mindahkeun berkas",
        "right-suppressredirect": "Henteu nyieun hiji alihan ti ngaran lila sabot mindahkeun kaca",
-       "right-upload": "Muatkeun koropak",
+       "right-upload": "Unjal berkas",
        "right-reupload": "Nimpah koropak nu geus aya",
        "right-reupload-own": "Nimpah koropak nu geus aya nu dimuat ku sorangan",
        "right-reupload-shared": "Nampik gambar-gambar dina média lokal babarengan",
-       "right-upload_by_url": "Muatkeun koropak ti hiji alamat URL",
+       "right-upload_by_url": "Unjal berkas tina alamat URL",
        "right-purge": "Ngahapus sindangan tina kaca tanpa kaca konfirmasi",
        "right-autoconfirmed": "Ngédit kaca nu semi dikonci",
        "right-bot": "Anggap salaku prosés otomatis",
        "right-protect": "Ngarobah hambalan protéksi jeung édit kaca anu dikonci",
        "right-editprotected": "Edit kaca anu dikonci salaku \"{{int:protect-level-sysop}}\"",
        "right-editinterface": "Édit antarbenget pamaké",
-       "right-editusercssjs": "Édit berkas CSS jeung JS pamaké séjén",
        "right-editusercss": "Édit berkas CSS pamaké séjén",
        "right-edituserjs": "Ngédit berkas JS pamaké séjén",
        "right-viewmywatchlist": "Tempo awaskeuneun anjeun",
        "right-userrights-interwiki": "Ngédit hak kontributor di wiki lianna",
        "right-siteadmin": "Ngonci jeung muka konci databés",
        "right-sendemail": "Kirim surélék ka pamaké séjén",
+       "grant-group-email": "Kirim surélék",
+       "grant-uploadfile": "Unjal berkas anyar",
+       "grant-basic": "Aksés dasar",
        "newuserlogpage": "Log akun anyar",
        "newuserlogpagetext": "Di handap ieu béréndélan log pamaké anyar.",
        "rightslog": "Log hak pamaké",
        "action-edit": "édit kaca ieu",
        "action-createpage": "mitembeyan kaca anyar",
        "action-createtalk": "mitembeyan kaca obrolan",
-       "action-createaccount": "nyieun akun pamaké ieu",
+       "action-createaccount": "jieun ieu akun pamaké",
        "action-history": "tempo jujutan ieu kaca",
        "action-minoredit": "nandaan ieu éditan salaku minor",
        "action-move": "mindahkeun ieu kaca",
        "recentchanges-label-plusminus": "Ukuran kaca robah sajumlah ieu bit",
        "recentchanges-legend-heading": "<strong>Pedaran:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (tempo ogé [[Special:NewPages|béréndélan kaca anyar]])",
+       "recentchanges-submit": "Témbongkeun",
+       "rcfilters-activefilters": "Panyaringan aktif",
+       "rcfilters-restore-default-filters": "Balikeun panyaringan bawaan",
+       "rcfilters-clear-all-filters": "Pupus sakumna panyaringan",
+       "rcfilters-search-placeholder": "Sarinh parobahan panganyarna (langlang atawa mimitian ngetik)",
+       "rcfilters-invalid-filter": "Panyaringan teu sah",
+       "rcfilters-filterlist-title": "Saringan",
+       "rcfilters-filtergroup-registration": "Padaptaran pamaké",
+       "rcfilters-filter-registered-label": "Kadaptar",
+       "rcfilters-filter-registered-description": "Éditor asup log",
+       "rcfilters-filter-unregistered-label": "Teu kadaptar",
+       "rcfilters-filter-unregistered-description": "Éditor nu teu asup log.",
+       "rcfilters-filter-editsbyself-label": "Éditan anjeun",
+       "rcfilters-filter-editsbyself-description": "Éditan ku anjeun.",
+       "rcfilters-filter-editsbyother-label": "Éditan ku batur",
+       "rcfilters-filter-editsbyother-description": "Éditan dijieun ku pamaké sején (lain anjeun).",
+       "rcfilters-filtergroup-userExpLevel": "Undakan mahér (pikeun pamaké kadaptar hungkul)",
+       "rcfilters-filter-user-experience-level-newcomer-label": "Padatang anyar",
+       "rcfilters-filter-user-experience-level-learner-label": "Palajar",
+       "rcfilters-filter-user-experience-level-experienced-label": "Pamaké pangpangalaman",
+       "rcfilters-filter-user-experience-level-experienced-description": "Leuwih ti 30 poé tina aktivitas jeung 500 éditan.",
+       "rcfilters-filter-bots-label": "Bot",
+       "rcfilters-filter-humans-label": "Jalma (lain bot)",
+       "rcfilters-filter-patrolled-label": "Diaawas",
+       "rcfilters-filter-unpatrolled-label": "Teu kaawaskeun",
+       "rcfilters-filter-unpatrolled-description": "Éditan teu ditandaan geus diawaskeun.",
+       "rcfilters-filtergroup-significance": "Kapentingan",
+       "rcfilters-filter-minor-label": "Éditan minor",
+       "rcfilters-filter-pageedits-label": "Éditan kaca",
+       "rcfilters-filter-newpages-label": "Panyieunan kaca",
        "rcnotefrom": "Di handap ieu parobahan saprak <b>$2</b> (nu ditémbongkeun nepi ka <b>$1</b>).",
        "rclistfrom": "Témbongkeun nu anyar robah nepi ka $3 $2",
        "rcshowhideminor": "$1 éditan minor",
        "rcshowhidemine": "$1 éditan kuring",
        "rcshowhidemine-show": "Témbongkeun",
        "rcshowhidemine-hide": "Sumputkeun",
-       "rclinks": "Témbongkeun $1 parobahan ahir dina $2 poé ahir<br />$3",
+       "rclinks": "Témbongkeun $1 parobahan panungtung ti $2 poé ka tukang",
        "diff": "béda",
        "hist": "juj",
        "hide": "sumputkeun",
        "recentchangeslinked-summary": "Ieu kaca husus ngabéréndélkeun parobahan anyar anu numbu ti kaca husus (atawa uesi katagori husus). Kaca anu [[Special:Watchlist|diawaskeun]] némbongan '''kandel'''.",
        "recentchangeslinked-page": "Ngaran kaca:",
        "recentchangeslinked-to": "Témbongkeun parobahan ka kaca-kaca nu ditumbukeun ka kaca nu dimaksud",
-       "upload": "Muat berkas",
-       "uploadbtn": "Muatkeun koropak",
+       "upload": "Unjal berkas",
+       "uploadbtn": "Unjal berkas",
        "reuploaddesc": "Balik ka formulir muatan.",
        "uploadnologin": "Can asup log",
        "uploadnologintext": "Mangga $1 pikeun ngunggah berkas.",
        "upload_directory_read_only": "Diréktori muatan ($1) teu bisa ditulis ku server ramat.",
        "uploaderror": "Kasalahan muat",
        "upload-recreate-warning": "'''Awas: berkas nu ngaranna kitu geus kungsi dihapus atawa dipindahkeun.'''\n\nLog hahapus jeung pipindah pikeun ieu kaca dipidangkeun di handap:",
-       "uploadtext": "<strong>HEUP!</strong> Méméh anjeun ngamuat di dieu, pastikeun yén anjeun geus maca sarta tumut ka kawijakan maké gambar.\n\nMun geus aya koropak na wiki nu ngaranna sarua jeung nu disebutkeun ku anjeun, koropak nu geus lila bakal diganti otomatis. Mangka, iwal ti pikeun ngaropéa hiji koropak, tangtu leuwih hadé mun anjeun mariksa heula bisi koropak nu sarupa geus aya.\n\nPikeun némbongkeun atawa néang gambar-gambar nu pernah dimuat saméméhna, mangga lebet ka [[Special:FileList|daptar gambar nu dimuat]]. Muatan sarta hapusan kadaptar dina log [[Special:Log/upload|log muatan]].\n\nPaké formulir di handap pikeun ngamuat koropak gambar anyar pikeun ilustrasi kaca anjeun. Na kalolobaan panyungsi, anjeun bakal manggihan tombol \"Sungsi/''Browse''...\", nu bakal nganteur ka dialog muka-koropak nu baku na sistim operasi anjeun. Milih hiji koropak bakal ngeusian ngaran koropakna kana rohangan téks gigireun tombol nu tadi. Anjeun ogé kudu nyontréng kotak nu nandakeun yén anjeun teu ngarumpak hak cipta batur ku dimuatna ieu koropak. Pencét tombol \"Muatkeun/''Upload''\" pikeun ngeréngsékeun muatan. Prosés ieu bisa lila mun anjeun migunakeun sambungan internét nu lambat.\n\nFormat nu dianjurkeun nyéta JPEG pikeun gambar fotografik, PNG pikeun hasil ngagambar sarta gambar séjénna, sarta OGG pikeun sora. Pilih ngaran koropak nu déskriptif sangkan teu ngalieurkeun. Pikeun ngasupkeun gambarna na kaca séjén, pigunakeun tumbu dina wujud\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Gambar.jpg]]</nowiki></code>''' pikeun gambar dina ukuran aslina\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:Berkas.ogg]]</nowiki></code>''' pikeun sora.\n\nCatet yén salaku kaca wiki, nu séjén bisa ngarobah atawa ngahapus muatan anjeun mun maranéhna nganggap ieu saluyu jeung kapentingan proyék, sarta anjeun bisa waé dipeungpeuk ti ngamuat koropak mun anjeun ngaruksak/ngaganggu sistim.",
+       "uploadtext": "Gunakeun formulir di handap pikeun ngunjal berkas.\nPikeun midangkeun atawa maluruh berkas anu saméméhna diunjal, sorang [[Special:FileList|daptar berkas]]. Unjalan (ulang) ogé kacatet kana [[Special:Log/upload|log unjalan]], sedengkeun pamupusan mah kacatetna dina [[Special:Log/delete|log pamupusan]].\n\nPikeun midangkeun atawa nerapkeun berkas kana kaca mah migunakeun tutumbu salah sahiji format di handap:\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Berkas.jpg]]</nowiki></code>''' pikeun midangkeun berkas dina ukuran aslina\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Berkas.png|200px|thumb|left|téks alternatif]]</nowiki></code>''' pikeun midangkeun berkas nu rubakna 200px na jero kotak, nitih di kéncaeun kaca bari aya tulisan 'téks alternatif' minangka kamandang gambar\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:Berkas.ogg]]</nowiki></code>''' minangka tutumbu langsung kana berkas anu dimaksud tanpa kudu midangkeun éta berkas liwat wiki",
        "upload-permitted": "Tipeu koropak nu diwidian: $1.",
        "upload-preferred": "Tipeu koropak nu dianjurkeun: $1.",
        "upload-prohibited": "Tipeu koropak nu dicaram: $1.",
        "fileexists": "Koropak nu ngaranna kieu geus aya, mangga parios <strong>[[:$1]]</strong> mun anjeun teu yakin rék ngaganti.\n[[$1|thumb]]",
        "fileexists-extension": "Geus aya berkas anu ngaranna sarupa: [[$2|thumb]]\n* Ngaran berkas nu dimuat: <strong>[[:$1]]</strong>\n* Ngaran berkas nu geus aya: <strong>[[:$2]]</strong>\nPilih ngaran séjén.",
        "fileexists-forbidden": "Berkas  nu ngaranna kitu geus aya sarta teu bisa ditimpah.\nMun anjeun keukeuh rék ngunggahkeun berkas anjeun, mangga balik deui sarta paké ngaran anyar.\n[[File:$1|thumb|center|$1]]",
-       "fileexists-shared-forbidden": "Koropak nu ngaranna ieu geus aya dina gudang koropak babagi (''shared file repository''); mangga balik deui sarta muatkeun koropak ieu maké ngaran nu béda. [[File:$1|thumb|center|$1]]",
-       "file-exists-duplicate": "Gambar ieu duplikat ti {{PLURAL:$1|gambar|gambar}}:",
+       "fileexists-shared-forbidden": "Gening berkas téh geus aya nu ngaranna sarua dina répositori berkas reujeung.\nMun anjeun keukeuh hayang ngunjal ieu berkas, sok ganti heula ngaranna ku ngaran nu béda. [[File:$1|thumb|center|$1]]",
+       "file-exists-duplicate": "Ieu berkas téh duplikat jeung nu di handap {{PLURAL:$1|berkas}}:",
        "file-deleted-duplicate": "Berkas anu sarua jeung [[:$1]] geus kungsi dihapus.\nPariksa heula jujutan hapusanana saméméh neruskeun ngamuat deui éta berkas.",
        "uploadwarning": "Pépéling ngamuat",
        "uploadwarning-text": "Ropéa pedaran berkas di handap terus cobaan deui.",
        "upload-file-error": "Kasalahan internal",
        "upload-misc-error": "Kasalahan muat anu teu kanyahoan",
        "upload-http-error": "Aya galat HTTP: $1",
+       "upload-dialog-title": "Unjal berkas",
        "backend-fail-backup": "Teu bisa nyadangkeun berkas \"$1\".",
        "backend-fail-notexists": "Berkas $1 euweuh.",
        "backend-fail-notsame": "Berkas anu teu-identik geus aya di $1.",
        "statistics-articles": "Halaman eusi",
        "statistics-pages": "Kaca",
        "statistics-pages-desc": "Sakabéh kaca di ieu wiki, kaasup kaca obrolan, alihan, jeung nu lianna.",
-       "statistics-files": "Koropak nu geus dimuat",
+       "statistics-files": "Berkas nu geus diunjal",
        "statistics-edits": "Ëditan kaca ti saprak {{SITENAME}} mimiti dibuka",
        "statistics-edits-average": "Rata-rata éditan unggal kaca",
        "statistics-users": "[[Special:ListUsers|Kontributor]] kadaptar",
        "nbytes": "$1 {{PLURAL:$1|bait|bait}}",
        "ncategories": "$1 {{PLURAL:$1|kategori|kategori}}",
        "ninterwikis": "$1 {{PLURAL:$1|interwiki|interwiki}}",
-       "nlinks": "$1 {{PLURAL:$1|tutumbu|tutumbu}}",
+       "nlinks": "$1 {{PLURAL:$1|tutumbu}}",
        "nmembers": "$1 {{PLURAL:$1|kontributor|kontributor}}",
        "nmemberschanged": "$1 → $2 {{PLURAL:$2|anggota|anggota}}",
        "nrevisions": "$1 {{PLURAL:$1|révisi|révisi}}",
        "lonelypagestext": "Kaca-kaca di handap ieu teu numbu ti kaca séjén di {{SITENAME}}.",
        "uncategorizedpages": "Kaca nu can dikategorikeun",
        "uncategorizedcategories": "Kategori nu can dikategorikeun",
-       "uncategorizedimages": "Gambar anu can boga kategori",
+       "uncategorizedimages": "Berkas anu can dikategorikeun",
        "uncategorizedtemplates": "Citakan nu can boga kategori",
        "unusedcategories": "Kategori nu teu kapaké",
-       "unusedimages": "Gambar anu teu kaparaké",
+       "unusedimages": "Berkas nu teu kaparaké",
        "wantedcategories": "Kategori nu dipikabutuh",
        "wantedpages": "Kaca nu dipikabutuh",
        "wantedfiles": "Berkas nu dipikabutuh",
        "mostlinkedcategories": "Paling loba ditumbukeun ka kategori",
        "mostlinkedtemplates": "Citakan nu panglobana ditumbu",
        "mostcategories": "Artikel nu paling loba ngandung kategori",
-       "mostimages": "Berkas anu panglobana ditutumbukeun",
+       "mostimages": "Berkas anu panglobana ditumbukeun",
        "mostrevisions": "Artikel nu pangmindengna dirévisi",
        "prefixindex": "Kabeh kaca maké awalan",
        "shortpages": "Kaca-kaca parondok",
        "booksources-search-legend": "Sungsi sumber buku",
        "booksources-search": "Paluruh",
        "booksources-text": "Di handap ieu ngabéréndélkeun tutumbu ka loka-loka nu ngical buku, boh nu anyar atawa loakan, nu sugan uninga kana buku anu nuju dipilari:",
-       "booksources-invalid-isbn": "ISBN-na sigana henteu bener; pariksa deui bisi aya salah salin ti sumber aslina.",
+       "booksources-invalid-isbn": "Sigana ISBN-na teu bener; pariksa deui bisi aya salah téplak ti sumber aslina.",
        "specialloguserlabel": "Pamaké:",
        "speciallogtitlelabel": "Sasaran (judul atawa pamaké):",
        "log": "Log",
        "wlheader-showupdated": "Kaca nu robah ti panungtungan anjeun sindang ditémbongkeun kalawan '''kandel'''",
        "wlnote": "Di handap ieu mangrupa $1 {{PLURAL:$1|robahan|robahan}} ahir salila '''$2''' jam.",
        "wlshowlast": "Témbongkeun $1 jam $2 poé  ahir",
+       "wlshowhidecategorization": "kategorisasi kaca",
        "watchlist-options": "Pilihan awaskeuneun",
        "watching": "Ngawaskeun...",
        "unwatching": "Eureun ngawaskeun...",
        "restriction-edit": "Édit",
        "restriction-move": "Pindahkeun",
        "restriction-create": "Jieun",
-       "restriction-upload": "Muatkeun koropak",
+       "restriction-upload": "Unjal berkas",
        "restriction-level-sysop": "konci rékép",
        "restriction-level-autoconfirmed": "konci logor",
        "restriction-level-all": "sadaya hambalan",
        "undeletelink": "tempo/pulangkeun",
        "undeleteviewlink": "tempo",
        "undeletecomment": "Alesan:",
-       "undeletedrevisions": "$1 {{PLURAL:$1|révisi|révisi}} disimpen deui",
-       "undeletedrevisions-files": "{{PLURAL:$1|1 révisi|$1 révisi}} jeung {{PLURAL:$2|1 berkas|$2 berkas}} geus dibalikkeun",
-       "undeletedfiles": "{{PLURAL:$1|1 berkas|$1 berkas}} dibalikkeun",
        "cannotundelete": "Gagal ngabolaykeun hapusan; sigana kapiheulaan ngabolaykeun hapusan ku nu séjén.",
        "undeletedpage": "'''$1 hasil dibalikeun'''\n\nTempo [[Special:Log/delete|log hapusan]] keur data ngahapus jeung malikeun.",
        "undelete-header": "Tempo [[Special:Log/delete|log hapusan]] pikeun béréndélan kaca nu anyar dihapus.",
        "namespace": "Ngaranspasi:",
        "invert": "Balikkeun pilihan",
        "tooltip-invert": "Contang ieu kotak pikeun nyumputkeun parobahan kaca-kaca dina ruang nama anu dipilih (jeung ruang nama anu tumali, lamun dicontang)",
+       "namespace_association": "Ngaranspasi nu patali",
+       "tooltip-namespace_association": "Céklis ieu kotak pikeun ngaitkeun ngaranspasi atawa judul ngaranspasi jeung ngaranspasi nu dipilih",
        "blanknamespace": "(Utama)",
        "contributions": "Kontribusi {{GENDER:$1|pamaké}}",
        "contributions-title": "Sumbangan tulisan ti $1",
        "whatlinkshere-prev": "$1 {{PLURAL:$1|saméméhna}}",
        "whatlinkshere-next": "$1 {{PLURAL:$1|salajengna}}",
        "whatlinkshere-links": "← tutumbu",
-       "whatlinkshere-hideredirs": "$1 alihan",
+       "whatlinkshere-hideredirs": "$1 pangalihan",
        "whatlinkshere-hidetrans": "$1 transklusi",
        "whatlinkshere-hidelinks": "$1 tutumbu",
        "whatlinkshere-hideimages": "$1 tutumbu berkas",
        "expiringblock": "kadaluwarsa $1 jam $2",
        "anononlyblock": "ngan nu teu daptar",
        "noautoblockblock": "Otopeungpeuk ditumpurkeun",
-       "createaccountblock": "nyieun akun dipeungpeuk",
+       "createaccountblock": "nyieun akun ditumpurkeun",
        "emailblock": "surélek di peungpeuk",
        "blocklist-nousertalk": "teu bisa ngarobah kaca obrolan sorangan",
        "ipblocklist-empty": "Daptar peungpeuk kosong.",
        "import-interwiki-text": "Pilih wiki jeung judul kaca nu rék diimpor.\nTanggal révisi katut ngaran nu ngédit bakal dipertahankeun.\nSadaya aktivitas impor transwiki baris kacatet dina [[Special:Log/import|log impor]].",
        "import-interwiki-sourcewiki": "Wiki sumber:",
        "import-interwiki-sourcepage": "Kaca sumber:",
-       "import-interwiki-history": "Salin sakabéh vérsi jujutan pikeun ieu kaca",
+       "import-interwiki-history": "Téplak sakabéh vérsi jujutan pikeun ieu kaca",
        "import-interwiki-templates": "Kaasup sakabéh citakan",
        "import-interwiki-submit": "Impor",
        "import-upload-filename": "Ngaran berkas:",
        "tooltip-pt-preferences": "Préferénsi {{GENDER:|anjeun}}",
        "tooltip-pt-watchlist": "Daptar kaca nu diawaskeun ku anjeun parobahanana.",
        "tooltip-pt-mycontris": "Béréndélan kontribusi {{GENDER:|anjeun}}",
-       "tooltip-pt-login": "Leuwih hadé asup log, sanajan teu wajib",
+       "tooltip-pt-login": "Leuwih hadé asup log, sok sanajan teu wajib",
        "tooltip-pt-logout": "Kaluar log",
        "tooltip-pt-createaccount": "Najan henteu kudu, Anjeun leuwih hadé nyieun akun sarta asup log",
        "tooltip-ca-talk": "Sawala ngeunaan eusi kaca",
        "tooltip-ca-move": "Pindahkeun kaca ieu",
        "tooltip-ca-watch": "Tambahkeun kaca ieu kana awaskeuneun kuring",
        "tooltip-ca-unwatch": "Kaluarkeun kaca ieu tina awaskeuneun kuring",
-       "tooltip-search": "Sungsi di {{SITENAME}}",
+       "tooltip-search": "Paluruh di {{SITENAME}}",
        "tooltip-search-go": "Jugjug kaca nu ngaranna ciples kieu (mun aya)",
-       "tooltip-search-fulltext": "Sungsi kaca-kaca nu ngandung tulisan ieu",
-       "tooltip-p-logo": "Tepas",
+       "tooltip-search-fulltext": "Paluruh kaca-kaca nu ngandung ieu tulisan",
+       "tooltip-p-logo": "Jugjug tepas",
        "tooltip-n-mainpage": "Sindang ka Tepas",
-       "tooltip-n-mainpage-description": "Jugjug Tepas",
+       "tooltip-n-mainpage-description": "Jugjug tepas",
        "tooltip-n-portal": "Ngeunaan proyékna, naon nu bisa dipigawé, di mana néanganana",
        "tooltip-n-currentevents": "Panggihan iber ngeunaan naon baé nu keur lumangsung",
        "tooltip-n-recentchanges": "Béréndélan nu anyar robah dina wiki",
-       "tooltip-n-randompage": "Muatkeun kaca naon baé",
+       "tooltip-n-randompage": "Muatkeun kaca acak",
        "tooltip-n-help": "Tempat pikeun néangan pitulung",
        "tooltip-t-whatlinkshere": "Béréndélan sakabéh kaca wiki anu nutumbu ka dieu",
        "tooltip-t-recentchangeslinked": "Anu anyar robah dina kaca-kaca anu nutumbu ti dieu",
        "tooltip-feed-atom": "Asupan atom pikeun kaca ieu",
        "tooltip-t-contributions": "Béréndélan kontribusi ti {{GENDER:$1|ieu pamaké}}",
        "tooltip-t-emailuser": "Kirim surélék ka ieu kontributor",
-       "tooltip-t-upload": "Ngunggahkeun berkas",
+       "tooltip-t-upload": "Unjal berkas",
        "tooltip-t-specialpages": "Daptar sadaya kaca husus",
        "tooltip-t-print": "Vérsi citakeun ieu kaca",
        "tooltip-t-permalink": "Tutumbu permanén ka ieu ieu vérsi",
        "tooltip-diff": "Témbongkeun parobahan mana nu geus dijieun.",
        "tooltip-compareselectedversions": "Tempo béda antara dua vérsi kaca ieu nu dipilih.",
        "tooltip-watch": "Tambahkeun kaca ieu kana awaskeuneun kuring",
-       "tooltip-upload": "Muatkeun",
+       "tooltip-upload": "Prung unjalkeun",
        "tooltip-rollback": "Mulangkeun éditan ka panulis panungtung dina sakali klik",
        "tooltip-undo": "\"Bolay\" malikkeun ieu éditan sarta muka kotak édit dina modeu pramidang.\nCara kieu bisa nambahkeun alesan dina ringkesanana.",
        "tooltip-preferences-save": "Simpen préferénsi",
        "exif-copyrighted": "Status hak cipta",
        "exif-copyrightowner": "Nu nyepeng hak cipta",
        "exif-usageterms": "Katangtuan pamakéan",
-       "exif-webstatement": "Pertélaan hak salin onlén",
+       "exif-webstatement": "Pertélaan hak cipta onlén",
        "exif-originaldocumentid": "ID unik dokumén asli",
        "exif-licenseurl": "URL pikeun lisénsi hak cipta",
        "exif-morepermissionsurl": "Ëmbaran lisénsi lianna",
        "monthsall": "kabéh",
        "confirmemail": "Konfirmasi alamat surélék",
        "confirmemail_noemail": "Alamat surélék anu didaptarkeun dina [[Special:Preferences|préferénsi pamaké]] anjeun teu sah.",
-       "confirmemail_text": "Ieu {{SITENAME}} butuh sangkan anjeun mastikeun alamat surélék saméméh migunakeun fitur surélék.\nAktipkeun tombol di handap pikeun ngirimkeun surat konfirmasi ka alamat anjeun. Suratna ngandung tumbu nu ngandung sandina; muatkeun tumbuna kana panyungsi anjeun pikeun ngonfirmasi yén alamat surélék anjeun sah.",
+       "confirmemail_text": "{{SITENAME}} téh anjeun kudu ngonfirmasi alamat surélék sangkan bisa migunakeun fiturna.\nKlik tombol di handap pikeun ngirimkeun talatah nu eusina konfirmasieun kana alamat anjeun. Eusi talatahna ngandung tutumbu kodeu; muatkeun tumbuna kana panyungsi anjeun pikeun ngonfirmasi yén alamat surélék anjeun sah.",
        "confirmemail_pending": "Kecap sandi konfirmasi geus dikirimkeun ka alamat surélék anjeun; mun anyar nyieun akun, mangga antos sababaraha menit saméméh mundut kecap sandi anyar.",
        "confirmemail_send": "Kirimkeun surat konfirmasi sandi",
        "confirmemail_sent": "Surélék konfirmasi geus dikirim.",
        "specialpages-group-other": "Kaca husus lainna",
        "specialpages-group-login": "Asup log / jieun akun",
        "specialpages-group-changes": "Nuanyar robah sarta log",
-       "specialpages-group-media": "Laporan sarta muatkeun koropak",
+       "specialpages-group-media": "Laporan jeung unjalan berkas",
        "specialpages-group-users": "Pamaké sarta hak pamaké",
        "specialpages-group-highuse": "Pamakéan kaca nu badag",
        "specialpages-group-pages": "Daptar kaca",
        "htmlform-reset": "Bolaykeun parobahan",
        "htmlform-selectorother-other": "Lianna",
        "logentry-delete-delete": "$1 {{GENDER:$2|ngahapus}} kaca $3",
+       "logentry-delete-restore": "$1 {{GENDER:$2|dibalikkeun}} kaca $3 ($4)",
+       "logentry-delete-restore-nocount": "$1 {{GENDER:$2|dibalikkeun}} kaca $3",
+       "restore-count-revisions": "$1 {{PLURAL:$1|1 révisi|$1 révisi}}",
+       "restore-count-files": "{{PLURAL:$1|1 berkas|$1 berkas}}",
        "revdelete-restricted": "akses geus dibatesan ukur keur kuncén",
        "revdelete-unrestricted": "Watesan akses kuncén dihapuskeun",
        "logentry-move-move": "$1 {{GENDER:$2|mindahkeun}} kaca $3 ka $4",
-       "logentry-newusers-create": "Akun pamaké $1 jeus {{GENDER:$2|dijieun}}",
+       "logentry-newusers-create": "Akun pamaké $1 geus {{GENDER:$2|dijieun}}",
        "logentry-upload-upload": "$1 {{GENDER:$2|ngamuat}} $3",
        "rightsnone": "(euweuh)",
        "feedback-cancel": "Bolay",
        "feedback-message": "Surat:",
        "feedback-subject": "Ngeunaan:",
-       "searchsuggest-search": "Sungsi",
+       "searchsuggest-search": "Sungsi di {{SITENAME}}",
        "searchsuggest-containing": "ngandung...",
        "duration-seconds": "$1 {{PLURAL:$1|detik|detik}}",
        "duration-minutes": "$1 {{PLURAL:$1|menit|menit}}",
        "special-characters-group-gujarati": "Gujarati",
        "special-characters-group-thai": "Thai",
        "special-characters-group-lao": "Lao",
-       "special-characters-group-khmer": "Khmer"
+       "special-characters-group-khmer": "Khmer",
+       "gotointerwiki": "Ninggalkeun{{SITENAME}}",
+       "gotointerwiki-invalid": "Judul spésipik henteu valid"
 }
index 29de95c..18c08a9 100644 (file)
        "readonlywarning": "<strong>VARNING: Databasen är tillfälligt låst för underhåll. Du kommer inte att kunna spara dina ändringar just nu.</strong>\nDet kan vara klokt att kopiera texten till ett textdokument som sparas på din dator tills vidare.\n\nSystemadministratören som låste databasen gav följande förklaring: $1",
        "protectedpagewarning": "'''Varning: Den här sidan har låsts så att bara användare med administratörsrättigheter kan redigera den.'''\nDen senaste loggposten tillhandahålls nedan som referens:",
        "semiprotectedpagewarning": "'''Observera:''' Denna sida har låsts så att endast registrerade användare kan redigera den.\nDen senaste loggposten tillhandahålls nedan som referens:",
-       "cascadeprotectedwarning": "'''Varning:''' Den här sidan har låsts så att bara användare med administratörsrättigheter kan redigera den, eftersom den är inkluderad på följande {{PLURAL:$1|sida|sidor}} som skyddats med kaskaderande skrivskydd:",
+       "cascadeprotectedwarning": "<strong>Varning</strong> Den här sidan har låsts så att bara användare med [[Special:ListGroupRights|specifika rättigheter]] kan redigera den, eftersom den är inkluderad på följande {{PLURAL:$1|sida|sidor}} som skyddats med kaskaderande skrivskydd:",
        "titleprotectedwarning": "'''Varning: Denna sida har låsts så att [[Special:ListGroupRights|specifika rättigheter]] krävs för att skapa den.'''\nDen senaste loggposten tillhandahålls nedan som referens:",
        "templatesused": "{{PLURAL:$1|Mall|Mallar}} som används på den här sidan:",
        "templatesusedpreview": "{{PLURAL:$1|Mall|Mallar}} som används i denna förhandsgranskning:",
        "saveusergroups": "Spara {{GENDER:$1|användargrupper}}",
        "userrights-groupsmember": "Medlem i:",
        "userrights-groupsmember-auto": "Implicit medlem av:",
-       "userrights-groups-help": "Du kan ändra vilka grupper denna användare är medlem i.\n* En ikryssad ruta betyder användaren är medlem i den gruppen.\n* En okryssad ruta betyder att användaren inte är medlem i den gruppen.\n* En asterisk (*) betyder att du inte kan ta bort gruppen när du har lagt till den, eller vice versa.\n* Ett nummertecken (#) betyder att du endast kan flytta tillbaka förfallotiden för denna grupp; du kan inte flytta fram den.",
+       "userrights-groups-help": "Du kan ändra vilka grupper denna användare är medlem i.\n* En ikryssad ruta betyder användaren är medlem i den gruppen.\n* En okryssad ruta betyder att användaren inte är medlem i den gruppen.\n* En asterisk (*) betyder att du inte kan ta bort gruppen när du har lagt till den, eller vice versa.\n* Ett nummertecken (#) betyder att du endast kan flytta tillbaka förfallotiden för detta gruppmedlemskap; du kan inte flytta fram den.",
        "userrights-reason": "Anledning:",
        "userrights-no-interwiki": "Du har inte behörighet att ändra användarrättigheter på andra wikis.",
        "userrights-nodatabase": "Databasen $1 finns inte eller så är den inte lokal.",
        "userrights-expiry-options": "1 dag:1 dag,1 vecka:1 vecka,1 månad:1 månad,3 månader:3 månader,6 månader:6 månader,1 år:1 år",
        "userrights-invalid-expiry": "Förfallotiden för gruppen \"$1\" är ogiltig.",
        "userrights-expiry-in-past": "Förfallotiden för gruppen \"$1\" är i det förflutna.",
-       "userrights-cannot-shorten-expiry": "Du kan inte flytta fram förfallotiden för gruppen \"$1\". Endast användare med behörighet att lägga till och ta bort denna grupp kan flytta fram förfallodatum.",
+       "userrights-cannot-shorten-expiry": "Du kan inte flytta fram förfallotiden för medlemskapet i gruppen \"$1\". Endast användare med behörighet att lägga till och ta bort denna grupp kan flytta fram förfallodatum.",
        "userrights-conflict": "Konflikt vid ändringar av användarrättigheter! Var god granska och bekräfta dina ändringar.",
        "group": "Grupp:",
        "group-user": "Användare",
        "right-editsemiprotected": "Redigera skyddade sidor som \"{{int:protect-level-autoconfirmed}}\"",
        "right-editcontentmodel": "Ändra innehållsmodellen för en sida",
        "right-editinterface": "Redigera användargränssnittet",
-       "right-editusercssjs": "Redigera andra användares CSS- och JS-filer",
        "right-editusercss": "Redigera andra användares CSS-filer",
        "right-edituserjs": "Redigera andra användares JavaScript-filer",
        "right-editmyusercss": "Redigera din egen användares CSS-filer",
        "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).",
+       "rclistfromreset": "Återställ datumval",
        "rclistfrom": "Visa nya ändringar från och med $2 $3",
        "rcshowhideminor": "$1 mindre ändringar",
        "rcshowhideminor-show": "Visa",
        "rcshowhidecategorization": "$1 kategorisering av sidor",
        "rcshowhidecategorization-show": "Visa",
        "rcshowhidecategorization-hide": "Dölj",
-       "rclinks": "Visa senaste $1 ändringar under de senaste $2 dygnen<br />$3",
+       "rclinks": "Visa senaste $1 ändringar under de senaste $2 dygnen",
        "diff": "skillnad",
        "hist": "historik",
        "hide": "Dölj",
        "php-uploaddisabledtext": "Filuppladdningar i PHP är avaktiverade. \nKolla inställningarna för file_uploads.",
        "uploadscripted": "Denna fil innehåller HTML eller script som felaktigt kan komma att tolkas av webbläsare.",
        "upload-scripted-pi-callback": "Kan inte ladda upp en fil som innehåller instruktioner för behandling av XML-stylesheet.",
+       "upload-scripted-dtd": "Kan inte ladda upp SVG-filer som innehåller en icke-standardiserad DTD-deklaration.",
        "uploaded-script-svg": "Hittade skriptelementet \"$1\" i den uppladdade SVG-filen.",
        "uploaded-hostile-svg": "Hittade osäker CSS i den uppladdade filens stilelement.",
        "uploaded-event-handler-on-svg": "Att ange event-handler-attribut <code>$1=\"$2\"</code> är inte tillåtet i SVG-filer.",
        "undeleteviewlink": "visa",
        "undeleteinvert": "Invertera urval",
        "undeletecomment": "Anledning:",
-       "undeletedrevisions": "{{PLURAL:$1|en version återställd|$1 versioner återställda}}",
-       "undeletedrevisions-files": "$1 {{PLURAL:$1|version|versioner}} och $2 {{PLURAL:$2|fil|filer}} återställda",
-       "undeletedfiles": "{{PLURAL:$1|en fil återställd|$1 filer återställda}}",
        "cannotundelete": "En del eller alla återställningar misslyckades:\n$1",
        "undeletedpage": "'''$1 har återställts'''\n\nSe [[Special:Log/delete|raderingsloggen]] för en förteckning över de senaste raderingarna och återställningarna.",
        "undelete-header": "Se [[Special:Log/delete|raderingsloggen]] för nyligen raderade sidor.",
        "unblocked-id": "Blockeringen $1 har hävts",
        "unblocked-ip": "[[Special:Contributions/$1|$1]] har avblockerats.",
        "blocklist": "Blockerade användare",
+       "autoblocklist": "Autoblockeringar",
+       "autoblocklist-submit": "Sök",
+       "autoblocklist-legend": "Lista autoblockeringar",
+       "autoblocklist-localblocks": "{{PLURAL:$1|Lokal autoblockering|Lokala autoblockeringar}}",
+       "autoblocklist-empty": "Listan över autoblockeringar är tom.",
+       "autoblocklist-otherblocks": "{{PLURAL:$1|Annan autoblockering|Andra autoblockeringar}}",
        "ipblocklist": "Blockerade användare",
        "ipblocklist-legend": "Sök efter en blockerad användare",
        "blocklist-userblocks": "Dölj kontoblockeringar",
        "htmlform-user-not-valid": "<strong>$1</strong> är inte ett giltigt användarnamn.",
        "logentry-delete-delete": "$1 {{GENDER:$2|raderade}} sidan $3",
        "logentry-delete-delete_redir": "$1 {{GENDER:$2|raderade}} omdirigeringen $3 genom att skriva över den",
-       "logentry-delete-restore": "$1 {{GENDER:$2|återställde}} sidan $3",
+       "logentry-delete-restore": "$1 {{GENDER:$2|återställde}} sidan $3 ($4)",
+       "logentry-delete-restore-nocount": "$1 {{GENDER:$2|återställde}} sidan $3",
+       "restore-count-revisions": "{{PLURAL:$1|1 sidversion|$1 sidversioner}}",
+       "restore-count-files": "{{PLURAL:$1|1 fil|$1 filer}}",
        "logentry-delete-event": "$1 {{GENDER:$2|ändrade}} synligheten för {{PLURAL:$5|en logghändelse|$5 logghändelser}} på $3: $4",
        "logentry-delete-revision": "$1 {{GENDER:$2|ändrade}} synligheten för {{PLURAL:$5|en version|$5 versioner}} på sidan $3: $4",
        "logentry-delete-event-legacy": "$1 {{GENDER:$2|ändrade}} synligheten för logghändelser på $3",
        "special-characters-group-thai": "Thai",
        "special-characters-group-lao": "Laotiska",
        "special-characters-group-khmer": "Khmer",
+       "special-characters-group-canadianaboriginal": "Kanadensisk stavelseskrift",
        "special-characters-title-endash": "tankstreck",
        "special-characters-title-emdash": "långt tankstreck",
        "special-characters-title-minus": "minustecken",
        "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",
-       "rawhtml-notallowed": "&lt;html&gt;-taggar kan inte användas utanför normala sidor."
+       "rawhtml-notallowed": "&lt;html&gt;-taggar kan inte användas utanför normala sidor.",
+       "gotointerwiki": "Lämnar {{SITENAME}}",
+       "gotointerwiki-invalid": "Den angivna titeln var ogiltig.",
+       "gotointerwiki-external": "Du håller på att lämna {{SITENAME}} för att besöka [[$2]] som är en separat webbplats.\n\n[$1 Klicka här för att fortsätta till $1].",
+       "undelete-cantedit": "Du kan inte återställa denna sida eftersom du är inte tillåten att redigera denna sida.",
+       "undelete-cantcreate": "Du kan inte återställa denna sida eftersom det inte finns någon befintlig sida med detta namn och du tillåts inte att skapa denna sida."
 }
index c4148df..a49237d 100644 (file)
        "externaldberror": "Huenda kulikuwa na hitilafu ya database au labda hauruhusiwi kubadilisha akaunti yako ya nje.",
        "login": "Ingia",
        "nav-login-createaccount": "Ingia/ sajili akaunti",
-       "userlogin": "Ingia/ sajili akaunti",
-       "userloginnocreate": "Ingia",
        "logout": "Toka",
        "userlogout": "Toka",
        "notloggedin": "Hujaingia",
        "userlogin-noaccount": "Huna akaunti ya kuingilia?",
        "userlogin-joinproject": "Jiunga na {{SITENAME}}",
-       "nologin": "Huna akaunti ya kuingilia? '''$1'''.",
-       "nologinlink": "Sajili akaunti",
        "createaccount": "Sajili akaunti",
-       "gotaccount": "Unayo akaunti tayari? '''$1'''",
-       "gotaccountlink": "Ingia",
-       "userlogin-resetlink": "Umesahau maelezo yako ya kuingia?",
        "userlogin-resetpassword-link": "Je, umesahau neno la siri?",
        "userlogin-helplink2": "Saidia na kuingia",
        "userlogin-loggedin": "Haujaingia kama {{GENDER:$1|$1}}.\nTumia fomu hapa chini ili uweze kuingia kama mtumiaji mwingine.",
        "createacct-another-email-ph": "Weka anwani ya barua pepe",
        "createaccountmail": "Tumia neno la siri la muda tu na kulituma kwa anwani ya barua pepe ilivyoingizwa",
        "createacct-realname": "Jina la kweli (sio lazima)",
-       "createaccountreason": "Sababu:",
        "createacct-reason": "Sababu",
        "createacct-reason-ph": "Mbona unaunda akaunti mpya",
        "createacct-submit": "Unda akaunti yako",
        "right-editsemiprotected": "Hariri kurasa zilizozuiwa kama \"{{int:protect-level-autoconfirmed}}\"",
        "right-editcontentmodel": "Hariri yaliyomo katika ukurasa",
        "right-editinterface": "Kuhariri kusano ya mtumiaji",
-       "right-editusercssjs": "Hariri mafaili ya CSS na Hatijava ya watumiaji wengine",
        "right-editusercss": "Hariri mafaili ya CSS ya watumiaji wengine",
        "right-edituserjs": "Hariri mafaili ya JavaScript ya watumiaji wengine",
        "right-editmyusercss": "Hariri faili zako za CSS",
        "rcshowhidemine": "$1 masahihisho yangu",
        "rcshowhidemine-show": "Onyesha",
        "rcshowhidemine-hide": "Ficha",
-       "rclinks": "Onyesha mabadiliko $1 yaliyofanywa wakati wa siku $2 zilizopita<br />$3",
+       "rclinks": "Onyesha mabadiliko $1 yaliyofanywa wakati wa siku $2 zilizopita",
        "diff": "tofauti",
        "hist": "hist",
        "hide": "Ficha",
        "undeleteviewlink": "tazama",
        "undeleteinvert": "Geuza uteuzi",
        "undeletecomment": "Sababu:",
-       "undeletedrevisions": "{{PLURAL:$1|pitio 1 lilirudishwa|mapitio $1 yalirudishwa}}",
-       "undeletedfiles": "{{PLURAL:$1|faili 1 lilirudishwa|mafaili $1 yalirudishwa}}",
        "cannotundelete": "Kurudisha ukurasa imeshindikana;\nhuenda ikawa mtu mwingine ameurudisha tayari.",
        "undelete-header": "Tazama [[Special:Log/delete|kumbukumbu za ufutaji]] ili kujua kurasa zipi zilizofutwa hivi karibuni.",
        "undelete-search-title": "Tafuta kwenye kurasa zilizofutwa",
        "logentry-newusers-create2": "$1 alianzisha akaunti ya mtumiaji $3",
        "logentry-newusers-autocreate": "Akaunti ya mtumiaji $1 {{GENDER:$2|ilianzishwa}} na mashine",
        "rightsnone": "(hana)",
-       "revdelete-summary": "muhtasari wa kuhariri",
        "feedback-adding": "Maoni yanaongezwa katika ukurasa...",
        "feedback-back": "Rudi",
        "feedback-cancel": "Batilisha",
index 70344cf..3fee5c1 100644 (file)
        "externaldberror": "Je jaki feler we zewnyntrznyj baźe autentyfikacyjnyj, abo ńy mosz uprawńyń potrzebnych do aktualizacyji zewnyntrznego kůnta.",
        "login": "Zaloguj śe",
        "nav-login-createaccount": "Logowańy / Tworzyńy kůnta",
-       "userlogin": "Logowańy / Tworzyńy kůnta",
-       "userloginnocreate": "Zaloguj śe",
        "logout": "Wyloguj",
        "userlogout": "Uodloguj śe",
        "notloggedin": "Ńy jeżeś zalogowany",
        "userlogin-noaccount": "Ńy mosz kůnta?",
        "userlogin-joinproject": "Doćep śe do {{SITENAME}}",
-       "nologin": "Ńy mosz kůnta? '''$1'''.",
-       "nologinlink": "Twůrz kůnto",
        "createaccount": "Twůrz nowe kůnto",
-       "gotaccount": "Mosz już kůnto? '''$1'''.",
-       "gotaccountlink": "Naloguj śe",
-       "userlogin-resetlink": "Zapomńoł żeś dane lo nalogowańo?",
        "userlogin-resetpassword-link": "Ńy pamjyntosz hasła?",
        "userlogin-helplink2": "Hilfa przi logůwańu",
        "userlogin-loggedin": "Zalogowano kej {{GENDER:$1|$1}}. Użyj formulara půńiżyj, coby zalogować śe kej inkszy używocz.",
        "createacct-another-email-ph": "Nastow e-brif",
        "createaccountmail": "Użyj chwilowygo hasła losowo genyrowanygo a wyślij je na wrychtowany adres e-brifa.",
        "createacct-realname": "Prawdźiwe imje a nazwisko (uopcjůnalńe)",
-       "createaccountreason": "Kůmyntorz:",
        "createacct-reason": "Powůd:",
        "createacct-reason-ph": "Pojakymu tworzisz nowe kůnta",
        "createacct-submit": "Twůrz kůnto",
        "passwordreset-disabled": "No tyj wiki zamkńynto resytowańy hasył.",
        "passwordreset-username": "Miano ôd używŏcza:",
        "passwordreset-domain": "Domyna:",
-       "passwordreset-capture": "Pokozać treść e-brifa?",
-       "passwordreset-capture-help": "Eli zaznaczysz to pole, uobejrzisz wjadůmość e-brifa ze hasłym.",
        "passwordreset-email": "E-brif:",
        "passwordreset-emailtitle": "Kůnto na {{GRAMMAR:MS.lp|{{SITENAME}}}}",
        "passwordreset-emailtext-ip": "Ftoś (cheba Ty, s IP $1)\npado, aże chce informacyji lo konta do {{GRAMMAR:MS.lp{{SITENAME}}}} ($4).\nZe tym ausdrukym sům powjůnzane kůnta:\n$2\n\n{{PLURAL:$3|Tymczasowygo hasła|Tymczasowych hasył}} możno użyć we {{PLURAL:$5|jedyn dźyń|$5 dńi}}.\n\nJak chćołżeś gynał to zrobjyć, to zaloguj śe terozki a podej swoje hasło.\n\nJak ftoś inkszy chćoł nowe hasło abo jak Ci śe przipůmńoło stare a ńy chcysz nowygo, to zignoruj to a używej starygo hasła.",
        "saveprefs": "Spamjyntej",
        "restoreprefs": "Wćep wszyjskie důmyślne preferencyje",
        "prefs-editing": "Sprowjańy",
-       "rows": "Wjyrsze:",
-       "columns": "Kolůmny:",
        "searchresultshead": "Sznupańy",
        "stub-threshold": "Maksymalny rozmjar artikla uoznaczanygo kej <a href=\"#\" class=\"stub\">stub (kůnsek)</a>",
        "stub-threshold-disabled": "Uodymkńynte",
        "userrights-reason": "Czymu:",
        "userrights-no-interwiki": "Ńy mosz dostympu do sprowjańo uprawńyń.",
        "userrights-nodatabase": "Baza danych $1 ńy istńije abo ńy je lokalno.",
-       "userrights-nologin": "Muśisz [[Special:UserLogin|zalůgować śe]] na kůnto admińistratora, coby nadować uprawńyńo użytkowńikům.",
-       "userrights-notallowed": "Ńy mosz dostympu do nadawańo uprawńyń używaczom.",
        "userrights-changeable-col": "Grupy, kere moges wybrać",
        "userrights-unchangeable-col": "Grupy, kerych ńy moges wybrać",
        "group": "Grupa:",
        "right-protect": "Zmjyń poźůmy zawarć i sprowjej zawarte zajty",
        "right-editprotected": "Sprowjej zawarte zajty (ze zawarćym kaskadowym)",
        "right-editinterface": "Sprowjej interfejs użytkowńika",
-       "right-editusercssjs": "Sprowjej pliki CSS i JS inkszych użytkowńikůw",
        "right-editusercss": "Sprowjej pliki CSS inkszych użytkowńikůw",
        "right-edituserjs": "Sprowjej pliki JS inkšych užytkowńikůw",
        "right-rollback": "Rewert drap sprawjyńo uostatńygo użytkowńika kery sprowjoł dano zajta",
        "rcshowhidemine": "$1 uody mje sprowjůne",
        "rcshowhidemine-show": "Pokoż",
        "rcshowhidemine-hide": "Schrůń",
-       "rclinks": "Ukoż uostatńe $1 sprowjyń bez uostatńe $2 dńi.<br />$3",
+       "rclinks": "Ukoż uostatńe $1 sprowjyń bez uostatńe $2 dńi.",
        "diff": "zmj.",
        "hist": "gysz.",
        "hide": "Schrůń",
        "undeleteviewlink": "ukoż",
        "undeleteinvert": "Zaznocz na uopy",
        "undeletecomment": "Powůd wćepańo nazod:",
-       "undeletedrevisions": "Wćepano nazod {{PLURAL:$1|1 wersyja|$1 wersyje|$1 wersyji}}",
-       "undeletedrevisions-files": "Wćepano nazod $1 {{PLURAL:$1|wersyja|wersyje|wersyji}} i $2 {{PLURAL:$2|plik|pliki|plikůw}}",
-       "undeletedfiles": "wćepou nazod $1 {{PLURAL:$1|plik|pliki|plikůw}}",
        "cannotundelete": "Wćepańy nazod ńy powjodo śe.\nKto inkšy můgu wćepać nazod zajta pjyrwšy.",
        "undeletedpage": "'''Wćepano nazod zajta $1.'''\n\nUobejřij [[Special:Log/delete|rejer wyćepań]], kejbyś chćou přeglůndnůnć uostatnie uoperacyje wyćepywańo i wćepywańo nazod zajtůw.",
        "undelete-header": "Uobejřij [[Special:Log/delete|rejer wyćepań]] coby sprawdźić uostatńo wyćepane zajty.",
        "logentry-newusers-create": "Kůnto {{GENDER:$2|używocza}} $1 uostało stworzůne",
        "logentry-upload-upload": "$1 {{GENDER:$2|posłoł|posłała}} $3",
        "rightsnone": "podstawowo",
-       "revdelete-summary": "uopis pomjyńań",
        "searchsuggest-search": "Sznupej we {{SITENAME}}",
        "expand_templates_ok": "OK"
 }
index 1c99b9e..6ece722 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-submit": "உங்கள் கணக்கை உருவாக்குக",
        "right-editsemiprotected": "\"{{int:protect-level-autoconfirmed}}\" ஆல் பாதுகாக்கப்பட்ட பக்கங்களை திருத்து",
        "right-editcontentmodel": "பக்கத்தின் உள்ளடக்க வகையைத் திருத்து",
        "right-editinterface": "பயனர் இடைமுகப்பை தொகுக்கவும்",
-       "right-editusercssjs": "மற்ற பயனர்களின் CSS மற்றும் JavaScript கோப்புகளை திருத்து",
        "right-editusercss": "மற்ற பயனர்களின் CSS கோப்புகளை திருத்து",
        "right-edituserjs": "மற்ற பயனர்களின் சாவாநிரல் (JavaScript) கோப்புகளைத் திருத்து",
        "right-editmyusercss": "உங்களின் CSS கோப்புகளைத் திருத்து",
        "rcfilters-filter-editsbyself-label": "தங்களின் சொந்த தொகுப்புகள்",
        "rcfilters-filter-editsbyself-description": "தங்களது தொகுப்புகள்.",
        "rcfilters-filter-editsbyother-label": "மற்றவர் தொகுப்புகள்",
-       "rcfilters-filter-userExpLevel-newcomer-label": "புது வரவுகள்",
-       "rcfilters-filter-userExpLevel-learner-label": "கற்போர்",
-       "rcfilters-filter-userExpLevel-experienced-label": "அனுபவமுள்ள பயனர்கள்",
-       "rcfilters-filter-userExpLevel-experienced-description": "30 நாட்கள் நடவடிக்கை மற்றும் 500 தொகுப்புகளுக்கு மேல்",
+       "rcfilters-filter-user-experience-level-newcomer-label": "புது வரவுகள்",
+       "rcfilters-filter-user-experience-level-learner-label": "கற்போர்",
+       "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": "தானியக்க கருவிகளால ஆன தொகுப்புகள்",
        "rcshowhidecategorization": "பக்க பகுப்பாக்கத்தை $1",
        "rcshowhidecategorization-show": "காட்டு",
        "rcshowhidecategorization-hide": "மறை",
-       "rclinks": "கடைசி $2 நாட்களில் கடைசி $1 மாற்றங்களைக் காட்டு.<br />$3",
+       "rclinks": "கடைசி $2 நாட்களில் கடைசி $1 மாற்றங்களைக் காட்டு.",
        "diff": "வேறுபாடு",
        "hist": "வரலாறு",
        "hide": "மறை",
        "undeleteviewlink": "பார்வையிடு",
        "undeleteinvert": "தேர்வு செய்ததை ரத்து  செய்",
        "undeletecomment": "காரணம்:",
-       "undeletedrevisions": "{{PLURAL:$1|1 திருத்தம் மீட்கப்பட்டது|$1 திருத்தங்கள் மீட்கப்பட்டன}}",
-       "undeletedrevisions-files": "{{PLURAL:$1|1 திருத்தம்|$1 திருத்தங்கள்}} மற்றும் {{PLURAL:$2|1 கோப்பு|$2 கோப்புகள்}} மீட்கப்பட்டன.",
-       "undeletedfiles": "{{PLURAL:$1|ஒரு கோப்பு மீட்டெடுக்கப்பட்டது|$1 கோப்புகள் மீட்டெடுக்கப்பட்டன}}",
        "cannotundelete": "மீள்வித்தல் தோல்வி:\n$1",
        "undeletedpage": "'''$1 மீட்கப்பட்டது'''\n\nஅண்மைய நீக்கல்களுக்கும் மீட்புக்களுக்கும் [[Special:Log/delete|நீக்கல் பதிவைப்]] பார்க்கவும்.",
        "undelete-header": "அண்மையில் நீக்கப்பட்ட பக்கங்களைக் காண [[Special:Log/delete|நீக்கல் பதிவைப்]] பார்க்க.",
        "logentry-managetags-deactivate": "$1 பயனர் மற்றும் தானியங்கிகள் பயன்படுத்துவதற்காக \"$4\" தொடுப்பை {{GENDER:$2|செயற்பாட்டை நிறுத்தினார்}}",
        "log-name-tag": "குறிச்சொல் குறிப்பு",
        "rightsnone": "(எதுவுமில்லை)",
-       "revdelete-summary": "தொகுப்பு சுருக்கத்தை",
        "feedback-adding": "பக்கத்தில் கருத்தைச் சேர்க்கிறது...",
        "feedback-back": "பின்செல்க",
        "feedback-bugcheck": "சிறப்பு! அது ஏற்கனவே  [ $1 தெரிந்த  bugs ] என்பதை மட்டும்  சரிபார்க்கவும்,",
index 9db85c5..196c581 100644 (file)
        "december-date": "ದಸಂಬರ $1",
        "period-am": "ಕಾಂಡೆ",
        "period-pm": "ಬೈಯ್ಯ",
-       "pagecategories": "{{PLURAL:$1|ವರ್ಗೊ|ವರ್ಗೊಲು}}",
+       "pagecategories": "{{PLURAL:$1|Category|ವರ್ಗೊಲು}}",
        "category_header": "\"$1\" ವರ್ಗಡುಪ್ಪುನಂಚಿನ ಲೇಕನೊಲು",
        "subcategories": "ಉಪ ವರ್ಗೊಲು",
        "category-media-header": "\"$1\" ವರ್ಗಡುಪ್ಪುನಂಚಿನ ಚಿತ್ರೊ/ಶಬ್ಧೊ ಫೈಲ್‍ಲು",
        "category-empty": "''ಈ ವರ್ಗೊಡು ಸದ್ಯಗ್ ಓವುಲ ಪುಟೊಲಾವಡ್ ಅತ್ತ್’ನ್ಡ ಚಿತ್ರೊಲಾವಡ್ ಇಜ್ಜಿ.''",
-       "hidden-categories": "{{PLURAL:$1|ದೆಂಗಾದ್ ದೀಡ್‍ನ ವರ್ಗೊ|ದೆಂಗಾದ್ ದೀಡ್‍ನ ವರ್ಗೊಲು}}",
+       "hidden-categories": "{{PLURAL:$1|Hidden category|ದೆಂಗಾದ್ ದೀಡ್‍ನ ವರ್ಗೊಲು}}",
        "hidden-category-category": "ದೆಂಗಾದ್ ದೀತಿನ ವರ್ಗೊಲು",
-       "category-subcat-count": "{{PLURAL:$2|ಈ ವರ್ಗೊಡು ಈ ತಿರ್ತ್‍ದ ಉಪವರ್ಗ ಉಂಡು.|ಈ ವರ್ಗೊಡು ಈ ತಿರ್ತ್‍ದ {{PLURAL:$1|ಉಪವರ್ಗೊನು|$1 ಉಪವರ್ಗೊಲೆನ್}} ಸೇರಾದ್, ಒಟ್ಟಿಗೆ $2 ಉಂಡು.}}",
+       "category-subcat-count": "{{PLURAL:$2|This category has only the following subcategory.|ಈ ವರ್ಗೊಡು ಈ ತಿರ್ತ್‍ದ {{PLURAL:$1|subcategory|$1 ಉಪವರ್ಗೊಲೆನ್}} ಸೇರಾದ್, ಒಟ್ಟಿಗೆ $2 ಉಂಡು.}}",
        "category-subcat-count-limited": "ಈ ವರ್ಗೊಡು ತಿರ್ತ್ ತೊಜ್ಪಾದಿನ {{PLURAL:$1|ಉಪವರ್ಗ|$1 ಉಪವರ್ಗೊಲು}} ಉಂಡು.",
-       "category-article-count": "{{PLURAL:$2|ಈ ವರ್ಗೊಡು ಈ ತಿರ್ತ್‍ದ ಕಾಲಿ ಒಂಜಿ ಪುಟೊ ಉಂಡು.|ಈ ವರ್ಗೊಡು ಈ ತಿರ್ತ್‍ದ {{PLURAL:$1|ಪುಟೊನು|$1 ಪುಟೊಲೆನ್}} ಸೇರ್ಪಾದ್, ಒಟ್ಟಿಗೆ $2 ಪುಟೊಲು ಉಂಡು.}}",
+       "category-article-count": "{{PLURAL:$2|This category contains only the following page.|ಈ ವರ್ಗೊಡು ಈ ತಿರ್ತ್‍ದ {{PLURAL:$1|page is|$1 ಪುಟೊಲೆನ್}} ಸೇರ್ಪಾದ್, ಒಟ್ಟಿಗೆ $2 ಪುಟೊಲು ಉಂಡು.}}",
        "category-article-count-limited": "ಪ್ರಸಕ್ತ ವರ್ಗೊಡು ಈ ತಿರ್ತ್’ದ {{PLURAL:$1|ಪುಟ ಉಂಡು|$1 ಪುಟೊಲು ಉಂಡು}}.",
        "category-file-count": "{{PLURAL:$2|ಈ ವರ್ಗೊಡು ಈ ತಿರ್ತ್‍ದ ಕಾಲಿ ಒಂಜಿ ಫೈಲ್ ಉಂಡು.|ಈ ವರ್ಗೊಡು ಈ ತಿರ್ತ್‍ದ {{PLURAL:$1| ಫೈಲ್‍ನ್|$1  ಫೈಲ್‍ನ್}} ಸೇರ್ಪಾದ್, ಒಟ್ಟಿಗೆ $2 ಉಂಡು.}}",
        "category-file-count-limited": "ಪ್ರಸಕ್ತ ವರ್ಗೊಡು ಈ ತಿರ್ತ್’ದ {{PLURAL:$1|ಫೈಲ್ ಉಂಡು|$1 ಫೈಲ್’ಲು ಉಂಡು}}.",
        "welcomecreation-msg": "ಈರೆನ ಕಾತೆನ್ ದೆತ್ತ್‌ದಾತ್ಂಡ್.  ಈರೆನ [[Special:Preferences|{{SITENAME}} ಆಯ್ಕೆನ್]]ಬದಲ್ಪೆರೆ ಮರಪೊಡ್ಚಿ.",
        "yourname": "ಸದಸ್ಯೆರ್ನ ಪುದರ್:",
        "userlogin-yourname": "ಸದಸ್ಯೆರ್ನ ಪುದರ್",
-       "userlogin-yourname-ph": "ಈರೆನ ಸದಸ್ಯ ಪುದರ್ ಬರೆಲೆ",
+       "userlogin-yourname-ph": "ಈರೆನ ಸದಸ್ಯ ಪುದರ್ ಬರೆಲೆ",
        "createacct-another-username-ph": "ಈರೆನೆ ಸದಸ್ಯ ಪುದರ್ ಬರೆಲೆ",
        "yourpassword": "ಪಾಸ್-ವರ್ಡ್:",
        "userlogin-yourpassword": "ಪ್ರವೇಸೊಪದೊ",
        "logout": "ಲಾಗ್ ಔಟ್",
        "userlogout": "ಲಾಗ್ ಔಟ್",
        "notloggedin": "ಲಾಗಿನ್ ಆತ್‘ಜ್ಜರ್",
-       "userlogin-noaccount": "à²\95ಾತà³\86 à²\87ದà³\8dದಿಯಾ?",
+       "userlogin-noaccount": "à²\88ರà³\86ನ à²\96ಾತà³\86 à²\87à²\9cà³\8dà²\9cà³\87?",
        "userlogin-joinproject": "{{SITENAME}}ಗ್ ಸೇರ್ಲೆ",
        "createaccount": "ಪೊಸ ಅಕ್ಕೌಂಟ್ ಸುರು ಮಲ್ಪುಲೆ",
        "userlogin-resetpassword-link": "ಈರೆನೆ ಪ್ರವೇಸೊ ಪದೊ ಮರತ್ತ್‌ಂಡಾ?",
        "createacct-reason-ph": "ಈರ್ ದಾಯೆ ನಾನಲ ಒಂಜಿ ಕಾತೆ ದೆತ್ತೊಂದುಲ್ಲರ್?",
        "createacct-submit": "ಪೊಸ ಕಾತೆ ಸುರು ಮಲ್ಪುಲೆ",
        "createacct-another-submit": "ಪೊಸ ಕಾತೆ ಸುರು ಮಲ್ಪುಲೆ",
-       "createacct-benefit-heading": "{{SITENAME}}ನಿà²\95à³\8dಲà³\86ನà²\82à²\9aಿತà³\8dತಿನ à²\9cನà³\8aà²\95à³\8dಲà³\86ಡà³\8dದà³\8d à²\89à²\82ಡಾಪà³\81à²\82ಡà³\81.",
-       "createacct-benefit-body1": "{{PLURAL:$1|ಸಂಪೊದನೆ|ಸಂಪದೊನೆಲು}}",
-       "createacct-benefit-body2": "{{PLURAL:$1|ಪುಟೊ|ಪುಟೊಕ್ಕುಲು}}",
-       "createacct-benefit-body3": "{{PLURAL:$1|ಇನಾಮು|ಇನಾಮುಲು}}",
+       "createacct-benefit-heading": "{{SITENAME}}à²\89à²\82ಡà³\8d à²¨à²¿à²\95à³\8dಲà³\86ನà²\82à²\9aಿತà³\8dತಿನ à²\8eಡà³\8dದà³\86ನà³\8dತà²\82à²\95à³\8dಲà³\86ಡà³\8dದà³\8d à²\89à²\82ಡಾತà³\81à²\82ಡà³\8d.",
+       "createacct-benefit-body1": "{{PLURAL:$1|edit|ಸಂಪದೊನೆಲು}}",
+       "createacct-benefit-body2": "{{PLURAL:$1|page|ಪುಟೊಕ್ಕುಲು}}",
+       "createacct-benefit-body3": "ಇಂಚಿಪೊ{{PLURAL:$1|contributor|ಕಾಣಿಕೆ ಕೊರ್ನರ್}}",
        "badretype": "ಈರ್ ಕೊರ್ನ ಪ್ರವೇಶ ಪದೆ ಬೇತೆ ಬೇತೆ ಅತ್ಂಡ್",
        "userexists": "ಈರ್ ಕೊರ್ನ ಸದಸ್ಯರ ಪುದರ್ ಬಳಕೆಡ್ ಉಂಡು. ದಯದೀದ್ ಬೇತೆ ಪುದರ್ ಕೊರ್ಲೆ",
        "loginerror": "ಲಾಗಿನ್ ದೋಷ",
        "link_sample": "ಕೊಂಡಿದ ಸೀರ್ಸಿಕೆ",
        "link_tip": "ಉಲಯಿದ ಕೊಂಡಿ",
        "extlink_sample": "http://www.example.com ಕೊಂಡಿದ ಸೀರ್ಸಿಕೆ",
-       "extlink_tip": "ಪಿದಯಿದ ಕೊಂಡಿ(http://ರ್ದ್ ಸುರು ಮಲ್ಪೆರೆ ಮರಪೊಡ್ಚಿ)",
+       "extlink_tip": "ಪಿದಯಿದ ಕೊಂಡಿ(http:// ರ್ದ್ ಸುರು ಮಲ್ಪೆರೆ ಮರಪೊಡ್ಚಿ)",
        "headline_sample": "ಪಟ್ಯೊದ ಸೀರ್ಸಿಕೆ",
        "headline_tip": "2ನೇ ಮಟ್ಟೊದ ಸೀರ್ಸಿಕೆ",
        "nowiki_sample": "ಮುಲ್ಪ ಫಾರ್ಮೇಟ್ ಆವಂದಿನಂಚಿನ ಪಟ್ಯೊನು ಸೇರಲೆ",
        "newarticle": "(ಪೊಸತ್)",
        "newarticletext": "ನನಲ ಅಸ್ಥಿತ್ವಡ್ ಉಪ್ಪಂದಿನ ಪುಟೊಗು ಈರ್ ಬೈದರ್.\nಈ ಪುಟೊನು ಸ್ರಿಸ್ಟಿ ಮಲ್ಪೆರೆ ತಿರ್ತ್‍ದ ಚೌಕೊಡು ಬರೆಯೆರೆ ಸುರು ಮಲ್ಪುಲೆ.\n(ಜಾಸ್ತಿ ಮಾಹಿತಿಗ್ [$1 ಸಹಾಯ ಪುಟೊನು] ತೂಲೆ).\nಈ ಪುಟೊಕು ಈರ್ ತಪ್ಪಾದ್ ಬತ್ತಿತ್ತ್ಂಡ ಇರೆನ ಬ್ರೌಸರ್‍ದ '''back''' ಬಟನ್’ನ್ ಒತ್ತ್’ಲೆ.",
        "noarticletext": "ಈ ಪುಟೊಡ್ ಸದ್ಯಗ್ ಒವ್ವೇ ಬರವುಲಾ ಇಜ್ಜಿ, ಈರ್ ಬೇತೆ ಪುಟೊಡ್ [[Special:Search/{{PAGENAME}}|ಈ ಲೇಕನೊನು ನಾಡೊಲಿ]] <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ಸಂಬಂದೊ ಇತ್ತಿನ ದಾಕಲೆನ್ ನಾಡ್‍ಲೆ], ಅತ್ತಾಂಡ  [{{fullurl:{{FULLPAGENAME}}|action=edit}} ಈ ಪುಟೊನು ಸಂಪೊಲಿಪೊಲಿ]</span>.",
-       "noarticletext-nopermission": "ಈ ಪುಟೊಡ್ ಸದ್ಯಗ್ ಒವ್ವೇ ಬರವುಲಾ ಇಜ್ಜಿ, ಈರ್ ಬೇತೆ ಪುಟೊಡ್ [[Special:Search/{{PAGENAME}}|ಈ ಲೇಕನೊನು ನಾಡೊಲಿ]] <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ಸಂಬಂದೊ ಇತ್ತ್‌ನ ಲಾಗ್‌ನ್ ನಾಡ್‍ಲೆ], ಅತ್ತ್ಂಡ  [{{fullurl:{{FULLPAGENAME}}|action=edit}} ಈ ಪುಟೊನು ಸಂಪೊಲಿಪೊಲಿ]</span>.",
+       "noarticletext-nopermission": "ಈ ಪುಟೊಡ್ ಸದ್ಯಗ್ ಒವ್ವೇ ಬರವುಲಾ ಇಜ್ಜಿ, ಈರ್ ಬೇತೆ ಪುಟೊಡ್ [[Special:Search/{{PAGENAME}}|ಈ ಲೇಕನೊನು ನಾಡೊಲಿ]] <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ಸಂಬಂದೊ ಇತ್ತ್‌ನ ಲಾಗ್‌ನ್ ನಾಡ್‍ಲೆ],[{{fullurl:{{FULLPAGENAME}}|action=edit}} ಅಂಡ ಇರೆಗ್ ಈ ಪುಟೊನು ಸಂಪೊಲಿಪೊಲಿಪುನೆಗ್ ಒಪ್ಪಿಗೆ ಇಜ್ಜಿ]</span>.",
        "userpage-userdoesnotexist": "ಬಳಕೆದಾರ ಖಾತೆ \"<nowiki>$1</nowiki>\" ದಾಖಲಾತ್‘ಜ್ಜಿ. ಈರ್ ಉಂದುವೇ ಪುಟನ್ ಸಂಪಾದನೆ ಮಲ್ಪರ ಉಂಡಾಂದ್ ಖಾತ್ರಿ ಮಲ್ತೊನಿ.",
        "previewnote": "'''ಉಂದು ಕೇವಲ ಮುನ್ನೋಟ; ಪುಟೊನು ನನಲ ಒರಿಪಾದಿಜಿ ಪನ್ಪುನೇನ್ ಮರಪೊರ್ಚಿ!'''",
        "editing": "$1 ಲೇಕನೊನು ಈರ್ ಸಂಪಾದನೆ ಮಲ್ತೊಂದುಲ್ಲರ್",
        "yourtext": "ಇರೆನ ಸಂಪಾದನೆ",
        "yourdiff": "ವ್ಯತ್ಯಾಸೊಲು",
        "copyrightwarning": "ದಯಮಲ್ತ್’ದ್ ಗಮನಿಸ್’ಲೆ: {{SITENAME}} ಸೈಟ್’ಡ್ ಇರೆನ ಪೂರಾ ಕಾಣಿಕೆಲುಲಾ $2 ಅಡಿಟ್ ಬಿಡುಗಡೆ ಆಪುಂಡು (ಮಾಹಿತಿಗ್ $1 ನ್ ತೂಲೆ). ಇರೆನ ಸಂಪಾದನೆಲೆನ್ ಬೇತೆಕುಲು ನಿರ್ಧಾಕ್ಷಿಣ್ಯವಾದ್ ಬದಲ್ ಮಲ್ತ್’ದ್ ಬೇತೆ ಕಡೆಲೆಡ್ ಪಟ್ಟೆರ್. ಇಂದೆಕ್ ಇರೆನ ಒಪ್ಪಿಗೆ ಇತ್ತ್’ನ್ಡ ಮಾತ್ರ ಮುಲ್ಪ ಸಂಪಾದನೆ ಮಲ್ಪುಲೆ.<br />\nಅತ್ತಂದೆ ಇರೆನ ಸಂಪಾದನೆಲೆನ್ ಈರ್ ಸ್ವತಃ ಬರೆತರ್, ಅತ್ತ್’ನ್ಡ ಕೃತಿಸ್ವಾಮ್ಯತೆ ಇಜ್ಜಂದಿನ ಕಡೆರ್ದ್ ದೆತೊನ್ದರ್ ಪಂಡ್’ದ್ ಪ್ರಮಾಣಿಸೊಂದುಲ್ಲರ್.\n'''ಕೃತಿಸ್ವಾಮ್ಯತೆದ ಅಡಿಟುಪ್ಪುನಂಚಿನ ಕೃತಿಲೆನ್ ಒಪ್ಪಿಗೆ ಇಜ್ಜಂದೆ ಮುಲ್ಪ ಪಾಡೊಚಿ!'''",
-       "templatesused": "ಈ ಪುಟೊಟ್ ಉಪಯೋಗ ಮಲ್ತಿನ {{PLURAL:$1|ಟೆಂಪ್ಲೇಟು|ಟೆಂಪ್ಲೇಟುಗಳು}}:",
+       "templatesused": "ಈ ಪುಟೊಟ್ ಉಪಯೋಗ ಮಲ್ತಿನ {{PLURAL:$1|Template|ಟೆಂಪ್ಲೇಟುಲೂ}}:",
        "templatesusedpreview": "ಈ ಮುನ್ನೋಟೊಡು ಉಪಯೋಗ ಮಲ್ತಿನ{{PLURAL:$1|Template|Templates}}:",
        "templatesusedsection": "ಈ ಇಬಾಗೊಡು ಉಪಯೋಗ ಮಲ್ತಿನ {{PLURAL:$1|Template|Templates}}:",
        "template-protected": "(ಸಂರಕ್ಷಿತೊ)",
        "template-semiprotected": "(ಅರೆ-ಸಂರಕ್ಷಿತೊ)",
-       "hiddencategories": "ಈ ಪುಟೊ {{PLURAL:$1|೧ ಗುಪ್ತ ವರ್ಗೊಗ್|$1 ಗುಪ್ತ ವರ್ಗೊಲೆಗ್}} ಸೇರ್ದ್‍ನ್ಡ್:",
+       "hiddencategories": "ಈ ಪುಟೊನ್ {{PLURAL:$1|1 hidden category|$1 ಗುಪ್ತ ವರ್ಗೊಲೆಗ್}} ಸೇರ್ದ್‍ನ್ಡ್:",
        "permissionserrors": "ಅನುಮತಿ ದೋಷ",
-       "permissionserrorstext-withaction": "$2 ಗ್ ಇರೆಗ್ ಅನುಮತಿ ಇದ್ದಿ, ಅಯಿಕ್ {{PLURAL:$1|ಕಾರಣೊ|ಕಾರಣೊಲು}}:",
+       "permissionserrorstext-withaction": "$2 ಗ್ ಇರೆಗ್ ಅನುಮತಿ ಇದ್ದಿ, ಅಯಿಕ್ {{PLURAL:$1||reason|ಕಾರಣೊಲು}}:",
        "moveddeleted-notice": "ಈ ಪುಟೊ ಅಸ್ತಿತ್ವೊಡ್ ಇದ್ದಿ.\nಪುಟೊದ ಡಿಲೀಶನ್ ಅತ್ತ್ಂಡ್ ಕಡಪ್ಪುಡುನೆ ಲಾಗ್‍ನ್ ತೂಯರೆ ತಿರ್ತ್ ಕೊರ್ತ್ಂಡ್.",
        "postedit-confirmation-created": "ಈ ಪುಟೋನು ಉಂಡು ಮಾನ್ತುಂಡು.",
        "postedit-confirmation-saved": "ಇರೇನಾ ಸಂಪಾದನೆನ್ ಒರಿಪಾತುಂಡು.",
        "revisionasof": "$1ದಿನೊತ ಆವೃತ್ತಿ",
        "revision-info": "ಬದಲಾವಣೆ $1 ಲೆಕ್ಕೊ {{GENDER:$6|$2}} ಇಂಬೆರೆಡ್ದ್ $7",
        "previousrevision": "←ದುಂಬೊರೊ ತೂಯಿನ",
-       "nextrevision": "ದುಂಬುದ ತಿದ್ದುಪಡಿ",
+       "nextrevision": "ದುಂಬುದ ತಿದ್ದುಪಡಿ →",
        "currentrevisionlink": "ಇತ್ತೆದ ತಿದ್ದುಪಡಿ",
        "cur": "ಸದ್ಯೊ",
        "next": "ಬೊಕ್ಕದ",
        "searchresults": "ನಾಡ್‍ಪತ್ತ್‌ನೆದ ಪಲಿತಾಂಸೊಲು",
        "searchresults-title": "\"$1\"ಕ್ ನಾಡ್‍ಪತ್ತ್‌ನೆದ ಪಲಿತಾಂಸೊಲು",
        "notextmatches": "ವಾ ಪುಟೊತ ಪಠ್ಯೊಡುಲಾ ಹೋಲಿಕೆ ಇಜ್ಜಿ",
-       "prevn": "ದುಂಬು {{PLURAL:$1|$1}}",
+       "prevn": "ದುಂಬುತ್ತ {{PLURAL:$1|$1}}",
        "nextn": "ಬೊಕ್ಕೊ {{PLURAL:$1|$1}}",
        "prev-page": "ದುಂಬುತ ಪುಟೊ",
        "next-page": "ನನತಾ ಪುಟ",
        "nextn-title": "ದುಂಬುದ $1 {{PLURAL:$1|result|ಪಲಿತಾಂಸೊಲು}}",
        "shown-title": "ಪ್ರತಿ ಪುಟೊಡುಲಾ $1 {{PLURAL:$1|result|ಪಲಿತಾಂಸೊ}} ತೋಜಿಪಾವು",
-       "viewprevnext": "ತೂಲೆ($1 {{int:pipe-separator}} $2) ($3)",
+       "viewprevnext": "ತೂಲೆ ($1 {{int:pipe-separator}} $2) ($3)",
        "searchmenu-new": "<strong>ಈ ಪುಟೊನು ರಚಿಸಲೆ \"[[:$1]]\" ಈ ವಿಕಿಡ್!</strong> {{PLURAL:$2|0=|See also the page found with your search.|ನಾಡ್‍ನಗ ತೋಜಿದ್ ಬರ್ಪುನ ಪಲಿತಾಂಸೊನು ತೂಲೆ.}}",
        "searchprofile-articles": "ಲೇಕನೊ ಪುಟೊ",
        "searchprofile-images": "ಮಲ್ಟಿಮೀಡಿಯೊ",
        "searchprofile-everything-tooltip": "ಮಾತ ಮಾಹಿತಿಲೆನ್ ನಾಡ್‍ಲೆ (ಪಾತೆರದ ಪುಟೊಲ ಸೇರ್ದ್)",
        "searchprofile-advanced-tooltip": "ಬಳಕೆದ ನಾಮೊವರ್ಗೊಡು ನಾಡ್‍ಲೆ",
        "search-result-size": "$1 ({{PLURAL:$2|೧ ಪದೊ|$2 ಪದೊಕುಲು}})",
-       "search-redirect": "($1 ಡ್ದ್ ಪಿರ ನಿರ್ದೇಸನೊ)",
+       "search-redirect": "($1 ಡ್ದ್ ಪಿರ ನಿರ್ದೇಸನೊ)",
        "search-section": "(ವಿಬಾಗೊ $1)",
        "search-suggest": "ಇಂದೆನ್ ನಾಡೊಂದುಲ್ಲರೆ: $1",
        "search-interwiki-caption": "ಬಳಗದ ಇತರ ಯೋಜನೆಲು",
        "recentchanges-label-bot": "ಈ ಸಂಪದನೆ ಒಂಜಿ ಬಾಟ್‍ಡ್ ಆತ್ಂಡ್",
        "recentchanges-label-unpatrolled": "ಈ ಸಂಪಾದನೆನ್ ನನಲಾ ಪರೀಕ್ಷೆ ಮಲ್ತ್‌ಜಿ.",
        "recentchanges-label-plusminus": "ಬೈಟ್ಸ್‌ದ ಲೆಕ್ಕೊಡು ಈ ಪಾಲೆದ ಗಾತ್ರೊ ಬದಲಾತ್ಂಡ್",
-       "recentchanges-legend-heading": "<strong>ಲà³\86à²\9cà³\86à²\82ಡà³\8d:</strong>",
+       "recentchanges-legend-heading": "<strong>ಪರಿವಿಡಿ:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (ಬೊಕ್ಕೊಲಾ ತೂಲೆ [[Special:NewPages|ಪೊಸ ಪುಟೊದ ಪಟ್ಟಿ]])",
        "recentchanges-submit": "ತೋಜಾಲೆ",
+       "rcfilters-filterlist-whatsthis": "ಉಂದು ದಾದಾ?",
        "rcfilters-filter-user-experience-level-learner-label": "ಕಲ್ಪುನರ್",
        "rclistfrom": "$3 $2 ರ್ದ್ ಸುರುವಾತಿನ ಪೊಸ ಬದಲಾವಣೆಲೆನ್ ತೊಜ್ಪಾವು",
        "rcshowhideminor": "$1 ಎಲ್ಯೆಲ್ಯ ಬದಲಾವಣೆಲು",
        "rcshowhidemine-hide": "ಅಡೆಂಗಾವು",
        "rcshowhidecategorization-show": "ತೋಜಾಲೆ",
        "rcshowhidecategorization-hide": "ಅಡೆಂಗಾವು",
-       "rclinks": "ದುಂಬುದ $2 ದಿನೊಲೆಡ್ ಮಲ್ತಿನ $1 ಪಿರವುದ ಬದಲಾವಣೆಲೆನ್ ತೂಲೆ <br />$3",
+       "rclinks": "ದುಂಬುದ $2 ದಿನೊಲೆಡ್ ಮಲ್ತಿನ $1 ಪಿರವುದ ಬದಲಾವಣೆಲೆನ್ ತೂಲೆ",
        "diff": "ವ್ಯತ್ಯಾಸೊ",
        "hist": "ಇತಿಹಾಸೊ",
        "hide": "ಅಡೆಂಗಾವು",
        "filehist-filesize": "ಫೈಲ್’ದ ಗಾತ್ರ",
        "filehist-comment": "ಅಬಿಪ್ರಾಯೊ",
        "imagelinks": "ಫೈಲ್‍ದ ಬಳಕೆ",
-       "linkstoimage": "ಈ ತಿರ್ತ್‍ದ {{PLURAL:$1|ಪುಟ|$1 ಪುಟೊಲೆ ಕೊಂಡಿ}}ಈ ಫೈಲ್‍ಗ್ ಕೊರ್ಪುಂಡು.",
+       "linkstoimage": "ಈ ತಿರ್ತ್‍ದ {{PLURAL:$1|page links|$1 ಪುಟೊಲೆ ಕೊಂಡಿ}}ಈ ಫೈಲ್‍ಗ್ ಕೊನಪೋಪುಂಡು.",
        "nolinkstoimage": "ಈ ಫೈಲ್‍ಗ್ ಸಂಪರ್ಕೊ ಉಪ್ಪುನ ವಾ ಪುಟೊಲಾ ಇದ್ದಿ.",
        "sharedupload": "ಈ ಫೈಲ್’ನ್ ಮಸ್ತ್ ಜನ ಪಟ್ಟ್’ದುಲ್ಲೆರ್ ಅಂಚೆನೆ ಉಂದು ಮಸ್ತ್ ಪ್ರೊಜೆಕ್ಟ್’ಲೆಡ್ ಉಪಯೋಗಿಸೊಲಿ",
        "sharedupload-desc-here": "ಈ ಪುಟೊ $1ಡ್ದ್ ಬೊಕ್ಕ ಬೇತೆ ಯೋಜನೆಡ್ದ್ ಗಳಸೊಲಿ.\nಈ ಪುಟೊತ ವಿವರೊ [$2 ಪುಟೊತ ವಿವರೊ] ತಿರ್ತ ಸಾಲ್‍ಡ್ ತೋಜಾದ್ಂಡ್",
        "brokenredirects-edit": "ಸಂಪೊಲಿಪುಲೆ",
        "brokenredirects-delete": "ಮಾಜಾಲೆ",
        "withoutinterwiki-submit": "ತೋಜಾಲೆ",
-       "nbytes": "$1 {{PLURAL:$1|ಬೈಟ್|ಬೈಟ್‍ಲು}}",
-       "nmembers": "$1 {{PLURAL:$1|ಸದಸ್ಯೆ|ಸದಸ್ಯೆರ್}}",
+       "nbytes": "$1 {{PLURAL:$1|byte|ಬೈಟ್‍ಲು}}",
+       "nmembers": "$1 {{PLURAL:$1|member|ಸದಸ್ಯೆರ್}}",
        "wantedfiles": "ಬೋಡಾಯಿನ ಕಡತೊಲು",
        "prefixindex": "ಪೂರ್ವನಾಮೊಲ್ದ ಸೂಚಿಕೆ",
        "prefixindex-submit": "ತೋಜಾಲೆ",
        "move": "ಮೂವ್(ಸ್ಥಳಾಂತರ) ಮಲ್ಪುಲೆ",
        "movethispage": "ಈ ಪುಟೊನು ಮೂವ್ ಮಲ್ಪುಲೆ",
        "pager-newer-n": "{{PLURAL:$1|ಪೊಸ ೧|ಪೊಸ $1}}",
-       "pager-older-n": "{{PLURAL:$1|ಪರತ್ತ್ ೧|ಪರತ್ತ್ $1}}",
+       "pager-older-n": "{{PLURAL:$1|older 1|ಪರತ್ತ್ $1}}",
        "apisandbox-reset": "ಮಾಜಲೇ",
        "apisandbox-retry": "ನನೊರ ಪ್ರಯತ್ನ ಮಾನ್ಪುಲೇ",
        "apisandbox-examples": "ಉದಾಹರಣೆಲು",
        "namespace_association": "ಜತೆಟಿತ್ತಿನ ಪುದರ್",
        "tooltip-namespace_association": "ಈ ಚೌಕೊನು ಚರ್ಚೆನ್ ಸೇರಾದ್ ಪರೀಕ್ಷಿಸಲೆ ಅತ್ತ್ಂಡ ವಿಸಯೊಗು ಸರಿಯಾಯಿನ ಪುದರ್ದ ಜತೆಟ್ ಸೇರಾಲೆ",
        "blanknamespace": "(ಮುಖ್ಯ)",
-       "contributions": "{{$1ಸದಸ್ಯೆರ್ನ}}ಕಾಣಿಕೆಲು",
+       "contributions": "{{GENDER:$1|ಸದಸ್ಯೆರ್ನ}} ಕಾಣಿಕೆಲು",
        "contributions-title": "$1 ಗ್ ಸದಸ್ಯೆರ್ನ ಕಾಣಿಕೆ",
        "mycontris": "ಎನ್ನ ಕಾನಿಕೆಲು",
        "anoncontribs": "ಕಾನಿಕೆಲು",
        "whatlinkshere": "ಇಡೆ ವಾ ಪುಟೊ ಕೊಂಡಿ ಕೊರ್ಪುಂಡು",
        "whatlinkshere-title": "\"$1\" ಪುಟೊಗು ಕೊಂಡಿ ಕೊರ್ಪುನ ಪುಟೊಲು",
        "whatlinkshere-page": "ಪುಟೊ:",
-       "linkshere": "'''[[:$1]]'''ಗ್ ಈ ತಿರ್ತ್‍ದ ಪುಟೊಗು ಕೊಂಡಿ ಕೊರ್ಪುಂಡು.",
+       "linkshere": "</strong>[[:$1]]<strong>ಗ್ ಈ ತಿರ್ತ್‍ದ ಪುಟೊಗು ಕೊಂಡಿ ಕೊರ್ಪುಂಡು.",
        "nolinkshere": "'''[[:$1]]''' ಗ್ ವಾ ಪುಟೊಲುಲಾ ಲಿಂಕ್ ಕೊರ್ಪುಜಿ.",
        "isredirect": "ಪಿರ ನಿರ್ದೇಶನೊದ ಪುಟೊ",
        "istemplate": "ಸೇರಾವುನೆ",
        "isimage": "ಫೈಲ್‍ದ ಕೊಂಡಿ",
-       "whatlinkshere-prev": "{{PLURAL:$1|ದುಂಬುದ|ದುಂಬುದ $1}}",
-       "whatlinkshere-next": "{{PLURAL:$1|ಬೊಕ್ಕದ|ಬೊಕ್ಕದ $1}}",
+       "whatlinkshere-prev": "{{PLURAL:$1|previous|ದುಂಬುದ $1}}",
+       "whatlinkshere-next": "{{PLURAL:$1|next|ಬೊಕ್ಕದ $1}}",
        "whatlinkshere-links": "← ಕೊಂಡಿಲು",
        "whatlinkshere-hideredirs": "$1 ಪಿರನಿರ್ದೇಶನೊಲು",
        "whatlinkshere-hidetrans": "$1 ಸೇರಾವುನವು",
        "import-interwiki-submit": "ಆಮದು",
        "import-upload-filename": "ಕಡತದ ಪುದರ್:",
        "import-comment": "ಅಭಿಪ್ರಾಯೊ:",
-       "tooltip-pt-userpage": "{{GENDER:|ಎನ್ನ ಸದಸ್ಯ}} ಪುಟೊ",
-       "tooltip-pt-mytalk": "{{GENDER:|ಎನ್ನ}} ಚರ್ಚೆ ಪುಟೊ",
+       "tooltip-pt-userpage": "{{GENDER:|ಎನ್ನ ಸದಸ್ಯ}}  ಪುಟೊ",
+       "tooltip-pt-mytalk": "{{GENDER:|ಎನ್ನ}} ಚರ್ಚೆತಾ ಪುಟೊ",
        "tooltip-pt-preferences": "{{GENDER:|ಎನ್ನ}} ಇಸ್ಟೊಲು",
        "tooltip-pt-watchlist": "ಈರ್ ಬದಲಾವಣೆಗಾದ್ ನಿಗಾ ದೀತಿನಂಚಿನ ಪುಟೊಲೆನ ಪಟ್ಟಿ",
-       "tooltip-pt-mycontris": "{{GENDER:|ಎನ್ನ}} ಕಾನಿಕೆಲೆ ಪಟ್ಟಿ",
+       "tooltip-pt-mycontris": "{{GENDER:|ಎನ್ನ}} ಕಾನಿಕೆಲೆ ಪಟ್ಟಿ",
        "tooltip-pt-login": "ಈರ್ ಲಾಗಿನ್ ಆವೊಡುಂದು ಕೇನೊಂದುಲ್ಲೊ, ಆಂಡ ಉಂದು ದಾಲ ಕಡ್ಡಾಯ ಅತ್ತ್.",
        "tooltip-pt-logout": "ಲಾಗ್ ಔಟ್",
-       "tooltip-pt-createaccount": "ನಿà²\95à³\81ಲà³\81 à²ªà³\8aಸ à²\96ಾತà³\86 à²¸à³\81ರà³\81ಮಾà²\82ತà³\8dâ\80\8dದà³\8d à²²à²¾à²\97ಿನà³\8d à²\86ಪà³\81ನà³\88ನà³\8d à²ªà³\8dರà³\8bತà³\8dಸಾಹಿಸವà³\8a, à²\86à²\82ಡಲಾ ಉಂದು ಕಡ್ಡಾಯ ಅತ್ತ್.",
+       "tooltip-pt-createaccount": "à²\87ರà³\8d  à²ªà³\8bಸ à²\96ಾತà³\86 à²¸à³\81ರà³\81ಮಾà²\82ತà³\8dâ\80\8dದà³\8d, à²²à²¾à²\97ಿನà³\8d à²\86ಪà³\81ನà³\88ನà³\8d à²¬à³\86ರಿ à²¬à³\8aà²\9fà³\8dà²\9fà³\81ಪà³\8b, à²\86à²\82ಡ ಉಂದು ಕಡ್ಡಾಯ ಅತ್ತ್.",
        "tooltip-ca-talk": "ಮಾಹಿತಿ ಪುಟೊತ ಬಗೆಟ್ ಚರ್ಚೆ",
        "tooltip-ca-edit": "ಈ ಪುಟೊನ್ ಸಂಪೊಲಿಪುಲೆ",
        "tooltip-ca-addsection": "ಪೊಸ ವಿಬಾಗೊನು ಸುರು ಮಲ್ಪುಲೆ",
        "tooltip-t-recentchangeslinked": "ಈ ಪುಟೊಡ್ದ್ ಸಂಪರ್ಕೊ ಉಪ್ಪುನಂಚಿನ ಪುಟೊಡ್ ಇಂಚಿಪೊದ ಬದಲಾವಣೆಲು",
        "tooltip-feed-rss": "ಈ ಪುಟೊಗು ಆರ್.ಎಸ್.ಎಸ್ ಫೀಡ್",
        "tooltip-feed-atom": "ಈ ಪುಟೊಗು ಆಟಮ್ ಫೀಡ್ ಮಲ್ಪುಲೆ",
-       "tooltip-t-contributions": "{{GENDER:$1|à²\88 à²¬à²³à²\95à³\86ದಾರà³\86ರà³\8d}}à²\88 à²¸à²¦à²¸à³\8dಯà³\86ರà³\8dನ ಕಾಣಿಕೆದ ಪಟ್ಟಿನ್ ತೋಜಾವು",
+       "tooltip-t-contributions": "{{GENDER:$1|à²\88 à²¸à²¦à²¸à³\8dಯà³\86ರà³\8dನ}} ಕಾಣಿಕೆದ ಪಟ್ಟಿನ್ ತೋಜಾವು",
        "tooltip-t-emailuser": "ಈ ಸದಸ್ಯೆರೆಗ್ ಇ-ಮೇಲ್ ಕಡಪುಡ್ಲೆ",
        "tooltip-t-upload": "ಫೈಲನ್ ಅಪ್ಲೋಡ್ ಮಲ್ಪುಲೆ",
        "tooltip-t-specialpages": "ಪೂರ  ವಿಸೇಸೊ ಪುಟೊಲೆನ ಪಟ್ಟಿ",
        "svg-long-desc": "ಎಸ್.ವಿ.ಜಿ ಫೈಲ್, ಸುಮಾರಾದ್ $1 × $2 ಚಿತ್ರೊಬಿಂದು, ಫೈಲ್‍ದ ಗಾತ್ರ: $3",
        "show-big-image": "ಮೂಲೊ ಫೈಲ್",
        "show-big-image-preview": "ಪಿರವುದ ಪುಟೊದ ಗಾತ್ರೊ: $1.",
-       "show-big-image-other": "ಬà³\87ತà³\86{{PLURAL:$2|resolution|ನಿರà³\8dನಯà³\8aಲà³\81}}: $1.",
-       "show-big-image-size": "$1 × $2 ಚಿತ್ರೊಬಿಂದುಲು",
+       "show-big-image-other": "ಬà³\87ತà³\86{{PLURAL:$2|resolution|ಪà²\9fà³\8aತà³\8dತ à²\97ಾತà³\8dರà³\8a }}: $1.",
+       "show-big-image-size": "$1 × $2 ಚಿತ್ರೊ ಬಿಂದುಲು",
        "newimages-legend": "ಅರಿಪೆ",
        "ilsubmit": "ನಾಡ್‍ಲೆ",
        "bad_image_list": "ವ್ಯವಸ್ಥೆದ ಆಕಾರ ಈ ರೀತಿ ಉಂಡು:\n\nಪಟ್ಟಿಡುಪ್ಪುನಂಚಿನ ದಾಖಲೆಲೆನ್ (* ರ್ದ್ ಶುರು ಆಪುನ ಸಾಲ್’ಲು) ಮಾತ್ರ ಪರಿಗಣನೆಗ್ ದೆತೊನೆರಾಪುಂಡು.\nಪ್ರತಿ ಸಾಲ್’ದ ಶುರುತ ಲಿಂಕ್ ಒಂಜಿ ದೋಷ ಉಪ್ಪುನಂಚಿನ ಫೈಲ್’ಗ್ ಲಿಂಕಾದುಪ್ಪೊಡು.\nಅವ್ವೇ ಸಾಲ್’ದ ಶುರುತ ಪೂರಾ ಲಿಂಕ್’ಲೆನ್ ಪರಿಗನೆರ್ದ್ ದೆಪ್ಪೆರಾಪುಂಡು, ಪಂಡ ಓವು ಪುಟೊಲೆಡ್ ಫೈಲ್’ದ ಬಗ್ಗೆ ಬರ್ಪುಂಡೋ ಔಲು.",
        "exif-imagewidth": "ಅಗೆಲ",
        "exif-imagelength": "ಎತ್ತರೊ",
        "exif-orientation": "ದಿಕ್ಕ್ ದಿಸೆ",
-       "exif-xresolution": "à²\85ಡà³\8dಡà²\97ಲà³\8aದ à²°à³\86à²\9c಼ಲ್ಯೂಶನ್",
-       "exif-yresolution": "à²\89ದà³\8dದà³\8aದ à²°à³\86à²\9c಼ಲ್ಯೂಶನ್",
+       "exif-xresolution": "à²\85ಡà³\8dಡà²\97ಲà³\8aದ à²°à³\87ಸಲ್ಯೂಶನ್",
+       "exif-yresolution": "à²\89ದà³\8dದà³\8aದ à²°à³\87ಸಲ್ಯೂಶನ್",
        "exif-datetime": "ಫೈಲ್‍ನ್ ಬದಲಾವಣೆ ಮಲ್ತ್‌ನ ದಿನೊ ಬೊಕ್ಕ ಪೊರ್ತು",
        "exif-make": "ಕ್ಯಾಮರೊದ ತಯಾರೆಕೆರ್",
        "exif-model": "ಕ್ಯಾಮರೊದ ಮಾದರಿ",
        "exif-subjectdistancerange-0": "ಗೊತ್ತಿಜ್ಜಾಂದಿನ",
        "exif-iimcategory-hth": "ಆರೋಗ್ಯ",
        "namespacesall": "ಮಾತ",
-       "monthsall": "ಮಾತ",
+       "monthsall": "ಮಾà²\82ತಾ",
        "confirm_purge_button": "ಸರಿ",
        "confirm-watch-button": "ಸರಿ",
        "confirm-unwatch-button": "ಸರಿ",
        "tags-create-submit": "ಸೃಷ್ಟಿಸಾಲೆ",
        "tags-delete-reason": "ಕಾರಣ:",
        "tags-deactivate-reason": "ಕಾರಣ:",
-       "logentry-delete-delete": "$1{{GENDER:$2|ಮಾಜಾದ್‍ಂಡ್}}ಪುಟೊ $3",
+       "logentry-delete-delete": "$1{{GENDER:$2|ಮಾಜಾತುಂಡ್}}ಪುಟೊ $3",
+       "logentry-delete-restore": "$1 {{GENDER:$2|restored}} ಪುಟೊ $3 ($4)",
+       "restore-count-files": "{{PLURAL:$1|1 file|$1 ವಿಸಯೊಲು}}",
        "logentry-move-move": "$1 {{GENDER:$2|ಜಾರಲೆ}} ಪುಟೊ $3 ಡ್ದ್ $4",
-       "logentry-newusers-create": "ಬಳಕೆದಾರೆರೆ ಕಾತೆ $1 ನ್ನು {{GENDER:$2|ಸ್ರಿಸ್ಟಿ ಮಲ್ತಾಂಡ್}}",
+       "logentry-newusers-create": "ಬಳಕೆದಾರೆರೆ ಕಾತೆ $1 ನ್ {{GENDER:$2|ಸ್ರಿಸ್ಟಿ ಮಲ್ತಾಂಡ್}}",
        "logentry-upload-upload": "$1 {{GENDER:$2|ಅಪ್ಲೋಡ್ ಮಲ್ತ್‌ದೆರ್}} $3",
        "searchsuggest-search": "{{SITENAME}}ನ್ ನಾಡ್‍ಲೆ",
        "pagelang-reason": "ಕಾರಣೊ",
index 3776c86..ba6e23e 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వేరే వాడుకరిగా లాగినయేందుకు కింది ఫారమును వాడండి.",
        "createaccountmail": "ఏదో ఒక తాత్కాలిక సంకేతపదాన్ని వాడి దాన్ని పేర్కొన్న ఈమెయిలు చిరునామాకు పంపించు",
        "createaccountmail-help": "సంకేతపదం తెలుసుకోనవసరం లేకుండా వేరొకరి కోసం ఖాతా సృష్టించేందుకు వాడవచ్చు.",
        "createacct-realname": "అసలు పేరు (ఐచ్చికం)",
-       "createaccountreason": "కారణం:",
        "createacct-reason": "కారణం",
        "createacct-reason-ph": "మీరు మరో ఖాతాను ఎందుకు సృష్టించుకుంటున్నారు",
        "createacct-submit": "మీ ఖాతాను సృష్టించుకోండి",
        "right-editsemiprotected": "\"{{int:protect-level-autoconfirmed}}\" గా సంరక్షించబడ్డ పేజీలను మార్చు",
        "right-editcontentmodel": "పేజీ యొక్క కంటెంటు మోడలును సవరించు",
        "right-editinterface": "యూజరు ఇంటరుఫేసులో దిద్దుబాటు చెయ్యి",
-       "right-editusercssjs": "ఇతర వాడుకరుల CSS, JS ఫైళ్ళలో దిద్దుబాటు చెయ్యి",
        "right-editusercss": "ఇతర వాడుకరుల CSS ఫైళ్ళలో దిద్దుబాటు చెయ్యడం",
        "right-edituserjs": "ఇతర వాడుకరుల JS ఫైళ్ళలో దిద్దుబాటు చెయ్యడం",
        "right-editmyusercss": "మీ స్వంత వాడుకరి CSS ఫైళ్ళను సరిదిద్దండి",
        "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-significance": "ప్రాముఖ్యం",
        "rcfilters-filter-minor-label": "చిన్న మార్పులు",
        "rcfilters-filter-minor-description": "రచయిత చిన్నవిగా గుర్తు పెట్టిన దిద్దుబాట్లు.",
        "rcshowhidecategorization": "పేజి  వర్గీకరణ $1",
        "rcshowhidecategorization-show": "చూపించు",
        "rcshowhidecategorization-hide": "దాచు",
-       "rclinks": "గత  $2 రోజుల లోని చివరి $1 మార్పులను చూపించు <br />$3",
+       "rclinks": "గత  $2 రోజుల లోని చివరి $1 మార్పులను చూపించు",
        "diff": "తేడాలు",
        "hist": "చరిత్ర",
        "hide": "దాచు",
        "undeleteviewlink": "చూడండి",
        "undeleteinvert": "ఎంపికని తిరగవెయ్యి",
        "undeletecomment": "కారణం:",
-       "undeletedrevisions": "{{PLURAL:$1|ఒక సంచిక|$1 సంచికల}} పునఃస్థాపన జరిగింది",
-       "undeletedrevisions-files": "{{PLURAL:$1|ఒక కూర్పు|$1 కూర్పులు}} మరియు {{PLURAL:$2|ఒక ఫైలు|$2 ఫైళ్ళ}}ను పునస్థాపించాం",
-       "undeletedfiles": "{{PLURAL:$1|ఒక ఫైలును|$1 ఫైళ్లను}} పునఃస్థాపించాం",
        "cannotundelete": "తొలగింపు రద్దులు పూర్తిగానో, కొన్నిగానీ విఫలమయ్యాయి:\n$1",
        "undeletedpage": "'''$1 ను పునస్థాపించాం'''\n\nఇటీవల జరిగిన తొలగింపులు, పునస్థాపనల కొరకు [[Special:Log/delete|తొలగింపు చిట్టా]]ని చూడండి.",
        "undelete-header": "ఇటీవల తొలగించిన పేజీల కొరకు [[Special:Log/delete|తొలగింపు చిట్టా]]ని చూడండి.",
        "logentry-managetags-create": "\"$4\" ట్యాగును $1 {{GENDER:$2|సృష్టించారు}}",
        "log-name-tag": "ట్యాగుల చిట్టా",
        "rightsnone": "(ఏమీలేవు)",
-       "revdelete-summary": "మార్పు సంగ్రహం",
        "rightslogentry-temporary-group": "$1 (తాత్కాలికం, $2 వరకు)",
        "feedback-adding": "ఫీడ్‍బ్యాకును పేజీలోకి చేరుస్తున్నాం...",
        "feedback-back": "వెనుకకు",
index 7b73c93..a2114de 100644 (file)
        "revdelete-radio-set": "Sin",
        "revdelete-radio-unset": "Lae",
        "revdelete-edit-reasonlist": "Edita lista motivu nian",
+       "history-title": "$1: Istória revisaun nian",
        "lineno": "Liña $1:",
        "searchresults": "Rezultadu sira",
        "searchresults-title": "Rezultadu sira ba buka \"$1\"",
        "undeletelink": "lee/restaurar",
        "undeleteviewlink": "haree",
        "undeletecomment": "Razaun:",
-       "undeletedrevisions": "restaurar {{PLURAL:$1|versaun|versaun}} $1",
        "undelete-search-submit": "Buka",
        "undelete-show-file-submit": "Sin",
        "namespace": "Espasu pájina nian:",
index f4ddfcc..14c538c 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": "Ҷузъиёти вурудро фаромӯш кардаед?",
        "userlogin-resetpassword-link": "Гузарвожаро фаромӯш кардед?",
        "userlogin-helplink2": "Роҳнамои вуруд",
        "userlogin-loggedin": "Шумо дар ҳол чун {{GENDER:$1|$1}} вуруд шудаед.\nБо истифода аз форми зер чун корбари дигар вориди систем шавед.",
        "createacct-another-email-ph": "Нишонаи email-ро ворид кунед",
        "createaccountmail": "Аз гузарвожаи муваққатӣ ва тасодуфӣ истифода кунед ва онро нишонаи электронии мушаххасшуда бифиристед",
        "createacct-realname": "Номи аслӣ (ихтиёрӣ)",
-       "createaccountreason": "Сабаб:",
        "createacct-reason": "Сабаб",
        "createacct-reason-ph": "Барои чӣ ҳисоби дигареро эҷод карда истодаед",
        "createacct-submit": "Ҳисоби худро созед",
        "right-hideuser": "Бастани корбар, бо пинҳон кардани он аз омма",
        "right-editprotected": "Вироиши саҳифаҳои ҳифзшуда чун \"{{int:protect-level-sysop}}\"",
        "right-editinterface": "Вироиши намоиши корбарӣ",
-       "right-editusercssjs": "Вироиши парвандаҳои CSS ва JS дигар корбарон",
        "right-editusercss": "Вироиши парвандаҳои CSS дигар корбарон",
        "right-edituserjs": "Вироиши парвандаҳои JS дигар корбарон",
        "right-rollback": "Вогардонии тези вироишҳои охирин корбаре, ки як саҳифаро вироиш кардааст",
        "rcshowhidemine": "$1 вироишҳои ман",
        "rcshowhidemine-show": "Намоиш",
        "rcshowhidemine-hide": "Пинҳон",
-       "rclinks": "Нишон додани $1 тағйироти охирин дар $2 рӯзи охир<br />$3",
+       "rclinks": "Нишон додани $1 тағйироти охирин дар $2 рӯзи охир",
        "diff": "фарқият",
        "hist": "таърих",
        "hide": "Пинҳон кардани",
        "undeletelink": "дидан/барқарор кардан",
        "undeleteviewlink": "намоиш",
        "undeletecomment": "Сабаб:",
-       "undeletedrevisions": "$1 нусха бақарор {{PLURAL:$1|шуд|шуданд}}",
-       "undeletedrevisions-files": "$1 нусха ва $2 парванда барқарор {{PLURAL:$1|шуд|шуданд}}",
-       "undeletedfiles": "$1 парванда барқарор {{PLURAL:$1|шуд|шуданд}}",
        "cannotundelete": "Барқароркунӣ нашуд; мумкин аст касе дигаре пештар ин саҳифаро барқарор карда бошад.",
        "undeletedpage": "'''$1 барқарор шуд'''\n\nБарои дидани гузориши ҳазфҳо ва барқароркуниҳои охирин ба [[Special:Log/delete|гузориши ҳазф]] нигаред.",
        "undelete-header": "Барои дидани саҳифаҳои ҳазфшудаи охир [[Special:Log/delete|гузоришҳои ҳазфро]] нигаред.",
        "revdelete-restricted": "маҳдудиятҳо ба мудирон амалӣ шуданд",
        "revdelete-unrestricted": "маҳдудиятҳо аз мудирон бардошта шуданд",
        "rightsnone": "(ҳеҷ)",
-       "revdelete-summary": "вироиши хулоса",
        "feedback-cancel": "Лағв",
        "feedback-close": "Анҷом шуд.",
        "feedback-message": "Пайём:",
index a577ebe..003605f 100644 (file)
        "externaldberror": "Xatoe dar irtibot bo pojgohi doda rux doda ast jo in ki şumo içozat ba rūzrasoniji hisobi beruniji xudro nadored.",
        "login": "Vurud",
        "nav-login-createaccount": "Vurud / Soxtani hisobi çadid",
-       "userlogin": "Vurud / Soxtani hisobi çadid",
-       "userloginnocreate": "Vurud",
        "logout": "Xuruç az sistem",
        "userlogout": "Xuruç az sistem",
        "notloggedin": "Ba sistem vurud naşudaed",
-       "nologin": "Nomi korbar nadored? '''$1'''.",
-       "nologinlink": "Hisobero sozed",
        "createaccount": "Hisobi çadidero sozed",
-       "gotaccount": "Hisobi korbarī dored? '''$1'''.",
-       "gotaccountlink": "Vurud şaved",
        "createaccountmail": "bo poctai elektronī",
-       "createaccountreason": "Sabab:",
        "badretype": "Kalimahoi ubure, ki vorid kardaed bo hamdigar muvofiqat namekunand.",
        "userexists": "Nomi korbariji doxil kardaşuda mavridi istifoda ast.\nNomi digareroro intixob kuned.",
        "loginerror": "Iştiboh dar vurud",
        "prefs-resetpass": "Taƣjiri guzarvoƶa",
        "saveprefs": "Zaxirai tarçihot",
        "prefs-editing": "Dar holi viroiş",
-       "rows": "Te'dodi satrho:",
-       "columns": "Te'dodi sutunho:",
        "searchresultshead": "Çustuçū",
        "stub-threshold": "Ostonai viroişi pajvandhoi <a href=\"#\" class=\"stub\">noqis</a>:",
        "recentchangesdays": "Te'dodi rūzhoi namoiş dodaşuda dar taƣjiroti oxir:",
        "userrights-reason": "Sabab:",
        "userrights-no-interwiki": "Şumo içozati taƣjiri ixtijoroti korbaroni digar vikihoro nadored.",
        "userrights-nodatabase": "Pojgohi doda $1 vuçud nadorad jo mahallī nest.",
-       "userrights-nologin": "Şumo bojad bo jak hisobi korbarī doroi ixtijoroti mudirijatī [[Special:UserLogin|ba sistem vurud kuned]], to bitavoned ixtijoroti korbaronro ta'jid kuned.",
-       "userrights-notallowed": "Hisobi korbariji şumo içozati taƣjiri ixtijoroti korbariro nadorad.",
        "userrights-changeable-col": "Gurūhhoe, ki şumo metavoned taƣjir dihed",
        "userrights-unchangeable-col": "Gurūhhoe, ki şumo nametavoned taƣjir dihed",
        "group": "Gurūh:",
        "right-hideuser": "Bastani korbar, bo pinhon kardani on az omma",
        "right-editprotected": "Viroişi sahifahoi hifzşuda (biduni hifzi obşorī)",
        "right-editinterface": "Viroişi namoişi korbarī",
-       "right-editusercssjs": "Viroişi parvandahoi CSS va JS digar korbaron",
        "right-editusercss": "Viroişi parvandahoi CSS digar korbaron",
        "right-edituserjs": "Viroişi parvandahoi JS digar korbaron",
        "right-rollback": "Vogardoniji tezi viroişhoi oxirin korbare, ki jak sahifaro viroiş kardaast",
        "rcshowhideanons": "$1 korbaroni vurudnaşuda",
        "rcshowhidepatr": "$1 viroişhoi gaştī",
        "rcshowhidemine": "$1 viroişhoi man",
-       "rclinks": "Nişon dodani $1 taƣjiroti oxirin dar $2 rūzi oxir<br />$3",
+       "rclinks": "Nişon dodani $1 taƣjiroti oxirin dar $2 rūzi oxir",
        "diff": "farqijat",
        "hist": "ta'rix",
        "hide": "Pinhon kardani",
        "undeletelink": "didan/barqaror kardan",
        "undeleteviewlink": "namoiş",
        "undeletecomment": "Tavzeh:",
-       "undeletedrevisions": "$1 nusxa baqaror {{PLURAL:$1|şud|şudand}}",
-       "undeletedrevisions-files": "$1 nusxa va $2 parvanda barqaror {{PLURAL:$1|şud|şudand}}",
-       "undeletedfiles": "$1 parvanda barqaror {{PLURAL:$1|şud|şudand}}",
        "cannotundelete": "Barqarorkunī naşud; mumkin ast kase digare peştar in sahifaro barqaror karda boşad.",
        "undeletedpage": "'''$1 barqaror şud'''\n\nBaroi didani guzorişi hazfho va barqarorkunihoi oxirin ba [[Special:Log/delete|guzorişi hazf]] nigared.",
        "undelete-header": "Baroi didani sahifahoi hazfşudai oxir [[Special:Log/delete|guzorişhoi hazfro]] nigared.",
        "revdelete-restricted": "mahdudijatho ba mudiron amalī şudand",
        "revdelete-unrestricted": "mahdudijatho az mudiron bardoşta şudand",
        "rightsnone": "(heç)",
-       "revdelete-summary": "viroişi xulosa",
        "expandtemplates": "Bastdodani şablonho",
        "expand_templates_intro": "In sahifai viƶa matnero darjoft karda va tamomi şablonhoi ba kor rafta dar onro ba tavri bozgaşte bast medihad. Hamcunin tobehoi taçzeh\n<nowiki>{{</nowiki>#language:...}}, va mutaƣjirhoe cun\n<nowiki>{{</nowiki>CURRENTDAY}}&mdash;ro ham bast medihad – dar voqe' taqriban har ciro ki doxili du akulot boşad.\nIn kor bo sado zadani marhilai taçzehi marbut dar xudi MediaViki surat megirad.",
        "expand_templates_title": "Unvoni mavzū', baroi {{FULLPAGENAME}} va ƣajra.:",
index e688c30..8e2ea17 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ใช้แบบด้านล่างเพื่อล็อกอินเป็นอีกผู้ใช้หนึ่ง",
        "createaccountmail": "ใช้รหัสผ่านสุ่มชั่วคราวและส่งไปยังที่อยู่อีเมลที่ระบุ",
        "createaccountmail-help": "สามารถใช้สร้างบัญชีสำหรับบุคคลอื่นๆ โดยที่ไม่ต้องเรียนรู้รหัสผ่านก็ได้",
        "createacct-realname": "ชื่อจริง (เลือกไม่ใส่ได้)",
-       "createaccountreason": "เหตุผล:",
        "createacct-reason": "เหตุผล",
        "createacct-reason-ph": "เหตุใดคุณจึงสร้างอีกบัญชี",
        "createacct-reason-help": "ข้อความที่แสดงในล็อกการสร้างบัญชี",
        "right-editsemiprotected": "แก้ไขหน้าที่ถูกล็อกในฐานะ \"{{int:protect-level-autoconfirmed}}\"",
        "right-editcontentmodel": "แก้ไขตัวแบบเนื้อหาของหน้า",
        "right-editinterface": "แก้ไขอินเตอร์เฟซผู้ใช้",
-       "right-editusercssjs": "แก้ไขไฟล์ CSS และจาวาสคริปต์ของผู้ใช้อื่น",
        "right-editusercss": "แก้ไขไฟล์ CSS ของผู้ใช้อื่น",
        "right-edituserjs": "แก้ไขไฟล์จาวาสคริปต์ของผู้ใช้อื่น",
        "right-editmyusercss": "แก้ไขไฟล์ซีเอสเอสผู้ใช้ของคุณเอง",
        "rcfilters-filter-editsbyother-label": "การแก้ไขต่าง ๆ ที่ผู้อื่นทำ",
        "rcfilters-filter-editsbyother-description": "การแก้ไขต่าง ๆ ที่ผู้ใช้อื่นทำ (ไม่ใช่คุณ)",
        "rcfilters-filtergroup-userExpLevel": "ระดับผู้เชี่ยวชาญ (สำหรับผู้ใช้ที่ลงทะเบียนเท่านั้น)",
-       "rcfilters-filter-userExpLevel-newcomer-label": "ผู้ที่มาใหม่",
-       "rcfilters-filter-userExpLevel-experienced-label": "ผู้ใช้ที่มีความเชี่ยวชาญ",
+       "rcfilters-filter-user-experience-level-newcomer-label": "ผู้ที่มาใหม่",
+       "rcfilters-filter-user-experience-level-experienced-label": "ผู้ใช้ที่มีความเชี่ยวชาญ",
        "rcnotefrom": "ด้านล่างเป็นการเปลี่ยนแปลงตั้งแต่ <strong>$3, $4</strong> (แสดงมากสุด <strong>$1</strong>)",
        "rclistfrom": "แสดงการเปลี่ยนแปลงใหม่เริ่มตั้งแต่ $2, $3",
        "rcshowhideminor": "$1การแก้ไขเล็กน้อย",
        "rcshowhidecategorization": "$1การจัดหมวดหมู่หน้า",
        "rcshowhidecategorization-show": "แสดง",
        "rcshowhidecategorization-hide": "ซ่อน",
-       "rclinks": "แสดงการปรับปรุงล่าสุด $1 รายการ ในช่วง $2 วันที่ผ่านมา<br />$3",
+       "rclinks": "แสดงการปรับปรุงล่าสุด $1 รายการ ในช่วง $2 วันที่ผ่านมา",
        "diff": "ต่าง",
        "hist": "ประวัติ",
        "hide": "ซ่อน",
        "undeleteviewlink": "ดู",
        "undeleteinvert": "กลับการเลือก",
        "undeletecomment": "เหตุผล:",
-       "undeletedrevisions": "กู้คืนการแก้ไข $1 รุ่นแล้ว",
-       "undeletedrevisions-files": "กู้คืน $1 รุ่นและ $2 ไฟล์แล้ว",
-       "undeletedfiles": "กู้คืน $1 ไฟล์แล้ว",
        "cannotundelete": "การกู้คืนล้มเหลว:\n$1",
        "undeletedpage": "<strong>กู้คืน $1 แล้ว</strong>\n\nดู[[Special:Log/delete|ปูมการลบ]] สำหรับบันทึกรายชื่อการลบและการกู้คืนล่าสุด",
        "undelete-header": "ดู [[Special:Log/delete|ปูมการลบ]] สำหรับหน้าที่ถูกลบล่าสุด",
        "log-name-tag": "ปูมป้ายระบุ",
        "log-description-tag": "หน้านี้แสดงเมื่อผู้ใช้เพิ่มหรือลบ[[Special:Tags|ป้ายระบุ]]จากรุ่นแก้ไขหรือรายการปูมอันใดอันหนึ่ง ปูมนี้ไม่แสดงรายการการกระทำติดป้ายระบุเมื่อเกิดเป็นส่้วนหนึ่งของการแก้ไข การลบหรือการกระทำที่คล้ายกัน",
        "rightsnone": "(ไม่มี)",
-       "revdelete-summary": "คำอธิบายโดยย่อ",
        "feedback-adding": "เพิ่มคำติชมเข้าไปที่หน้า...",
        "feedback-bugcheck": "ยอดเยี่ยม! เพียงตรวจสอบว่าจุดบกพร่องนั้นมิใช่หนึ่งใน[$1 จุดบกพร่องที่ทราบแล้ว]",
        "feedback-bugnew": "ฉันตรวจสอบแล้ว รายงานจุดบกพร่องใหม่",
index 5d6b0b2..e7a0985 100644 (file)
@@ -10,7 +10,8 @@
                        "Runningfridgesrule",
                        "The Evil IP address",
                        "아라",
-                       "Macofe"
+                       "Macofe",
+                       "Stephanecbisson"
                ]
        },
        "tog-underline": "Çykgytlaryň aşagyny çyz:",
        "externaldberror": "Ýa tassyklama maglumat bazasynyň säwligi bar ýa-da öz ulanyjy hasabyňyzy täzelemegiňize rugsat berilmeýär.",
        "login": "Hasaba gir",
        "nav-login-createaccount": "Hasaba gir / Hasap döret",
-       "userlogin": "Hasaba gir / täze hasap aç",
-       "userloginnocreate": "Sessiýa aç",
        "logout": "Hasapdan çyk",
        "userlogout": "Hasapdan çyk",
        "notloggedin": "Hasaba girmänsiňiz",
-       "nologin": "Siziň heniz hasabyňyz ýokmy? '''$1'''",
-       "nologinlink": "Onda özüňize bir hasap ediniň",
        "createaccount": "Täze hasap aç",
-       "gotaccount": "Eýýäm hasap açdyňyzmy? '''$1'''.",
-       "gotaccountlink": "Onda giriberiň!",
-       "userlogin-resetlink": "Giriş maglumatlaryňyzy ýatdan çykardyňyzmy?",
        "createaccountmail": "e-poçta bilen",
-       "createaccountreason": "Sebäp:",
        "badretype": "Girizen parollaryňyz biri-birine gabat gelmeýär.",
        "userexists": "Girizen ulanyjy adyňyz ulanylýar.\nBaşga bir at saýlamagyňyzy haýyş edýäris.",
        "loginerror": "Hasaba girmekde säwlik",
        "saveprefs": "Ýazdyr",
        "restoreprefs": "Ähli gaýybana sazlamalary dikelt",
        "prefs-editing": "Redaktirleme",
-       "rows": "Hatarlar:",
-       "columns": "Sütünler:",
        "searchresultshead": "Gözleg",
        "stub-threshold": "<a href=\"#\" class=\"stub\">Ownuk makala çykgydynyň</a> formaty üçin bosaga (baýt):",
        "stub-threshold-disabled": "Ýapyk",
        "userrights-reason": "Sebäp:",
        "userrights-no-interwiki": "Başga wikilerdäki ulanyjy hukuklaryny redaktirlemäge ygtyýaryňyz ýok.",
        "userrights-nodatabase": "$1 maglumat bazasy ýok ýa-da ol lokal däl.",
-       "userrights-nologin": "Ulanyjy hukuklaryny bermek üçin administrator hasaby bilen [[Special:UserLogin|sessiýa açmagyňyz]] zerurdyr.",
-       "userrights-notallowed": "Siziň hasabyňyzyň ulanyjy hukuklaryny bermäge ygtyýary ýok.",
        "userrights-changeable-col": "Üýtgedip bilýän toparlaryňyz",
        "userrights-unchangeable-col": "Üýtgedip bilmeýän toparlaryňyz",
        "group": "Topar:",
        "right-protect": "Gorag derejelerini üýtget we goragly sahypalary redaktirle",
        "right-editprotected": "Goragly sahypalary redaktirle (goragy kaskadlamazdan)",
        "right-editinterface": "Ulanyjy interfeýsini redaktirle",
-       "right-editusercssjs": "Başga ulanyjylaryň CSS we JS faýllaryny redaktirle",
        "right-editusercss": "Başga ulanyjylaryň CSS faýllaryny redaktirle",
        "right-edituserjs": "Başga ulanyjylaryň JS faýllaryny redaktirle",
        "right-rollback": "Belli bir sahypany redaktirlän iň soňky ulanyjynyň özgerdişlerini dessine öňki katdyna getir",
        "rcshowhideanons": "anonim ulanyjylary $1",
        "rcshowhidepatr": "patrullyk edilen özgerdişleri $1",
        "rcshowhidemine": "özgerdişlerimi $1",
-       "rclinks": "Soňky $2 günde edilen iň soňky $1 üýtgeşmäni görkez;<br /> $3",
+       "rclinks": "Soňky $2 günde edilen iň soňky $1 üýtgeşmäni görkez;",
        "diff": "tapawut",
        "hist": "taryh",
        "hide": "Gizle",
        "undeleteviewlink": "gör",
        "undeleteinvert": "Saýlanmadyklar",
        "undeletecomment": "Sebäp:",
-       "undeletedrevisions": "{{PLURAL:$1|1 wersiýa|$1 wersiýa}} dikeldildi",
-       "undeletedrevisions-files": "{{PLURAL:$1|1 wersiýa|$1 wersiýa}} we {{PLURAL:$2|1 faýl|$2 faýl}} dikeldildi",
-       "undeletedfiles": "{{PLURAL:$1|1 faýl|$1 faýl}} dikeldildi",
        "cannotundelete": "Yzyna dikeltmeklik başa barmady;\nkimdir biri eýýäm sahypany yzyna dikelden bolmagy ahmal.",
        "undeletedpage": "'''$1 yzyna dikeldildi'''\n\nÝaňy-ýakyndaky öçürmeleriň we dikeltmeleriň ýazgysy üçin [[Special:Log/delete|öçürme gündeligine]] serediň.",
        "undelete-header": "Ýaňy-ýakynda öçürilen sahypalary görmek üçin [[Special:Log/delete|öçürme gündeligine]] serediň.",
        "revdelete-restricted": "administratorlara goýlan çäklendirmeler",
        "revdelete-unrestricted": "administratorlardan aýyrylan çäklendirmeler",
        "rightsnone": "(hiç biri)",
-       "revdelete-summary": "özgerdiş mazmuny",
        "searchsuggest-search": "Gözleg",
        "searchsuggest-containing": "öz içine alýar...",
        "expandtemplates": "Şablonlary giňelt",
index 8c16c16..75bd123 100644 (file)
        "right-protect": "Baguhin ang mga antas ng panananggalang at baguhin ang mga pahinang nakasanggalang",
        "right-editprotected": "Baguhin ang mga pahinang nakasanggalang (walang baita-baitang na panananggalang)",
        "right-editinterface": "Baguhin ang ugnayang-hangganan ng tagagamit",
-       "right-editusercssjs": "Baguhin ang mga talaksang CSS at JS ng ibang mga tagagamit",
        "right-editusercss": "Baguhin ang mga talaksang CSS ng ibang mga tagagamit",
        "right-edituserjs": "Baguhin ang mga talaksang JS ng ibang mga tagagamit",
        "right-rollback": "Mabilisang pagulungin pabalik sa dati ang mga pagbabago ng huling tagagamit na nagbago ng isang partikular na pahina",
        "rcshowhidemine": "$1 ang mga pagbabago ko",
        "rcshowhidemine-show": "Ipakita",
        "rcshowhidemine-hide": "Itago",
-       "rclinks": "Ipakita ang huling $1 mga pagbabago sa loob ng huling $2 mga araw<br />$3",
+       "rclinks": "Ipakita ang huling $1 mga pagbabago sa loob ng huling $2 mga araw",
        "diff": "pagkakaiba",
        "hist": "kasaysayan",
        "hide": "Itago",
        "undeleteviewlink": "tingnan",
        "undeleteinvert": "Baligtarin ang pagpili/pilian",
        "undeletecomment": "Dahilan:",
-       "undeletedrevisions": "{{PLURAL:$1|1 pagbabago|$1 mga pagbabagong}} naibalik na",
-       "undeletedrevisions-files": "{{PLURAL:$1|1 pagbabago|$1 mga pagbabago}} at {{PLURAL:$2|1 talaksang|$2 mga talaksang}} naibalik na",
-       "undeletedfiles": "{{PLURAL:$1|1 talaksang|$1 mga talaksang}} naibalik na",
        "cannotundelete": "Hindi matagumpay ang pagpapabalik mula sa pagkakabura; maaaring may isang nakauna na sa pagpapabalik ng pahina mula sa pagkakabura.",
        "undeletedpage": "'''Naibalik na ang $1'''\n\nTingnan ang [[Special:Log/delete|talaan ng pagbubura]] para sa isang talaan ng mga kamakailan lamang na mga pagbubura at mga pagbabalik mula sa pagkakabura.",
        "undelete-header": "Tingnan ang [[Special:Log/delete|talaan ng pagbubura]] para sa kamakailan lamang na  binura/naburang mga pahina.",
        "confirmrecreate-noreason": "Binura ng tagagamit na si [[User:$1|$1]] ([[User talk:$1|talk]]) ang pahinang ito pagkaraang simulan mo ang pagbago.  Mangyaring tiyakan na nais mo talagang muling likhain ang pahinang ito.",
        "recreate": "Likhain muli",
        "unit-pixel": "px",
+       "confirm-purge-title": "Paglilinis ng pahina",
        "confirm_purge_button": "Sige/Ayos 'yan/Okey",
        "confirm-purge-top": "Linisin/hawiin ang taguan ng pahinang ito?",
        "confirm-purge-bottom": "Nililinis ng pagdadalisay ng isang pahina ang taguan at mapipilitang palitawin ang pinakapangkasalukuyang bersyon.",
index b9f1bc2..ab7005d 100644 (file)
        "yourpasswordagain": "Пароли сәнибәтон гырдә карде:",
        "login": "Ыштәни едаштеј",
        "nav-login-createaccount": "Ыштәни едаштеј / ыштәни ғејд кардовнијеј",
-       "userlogin": "Ыштәни едаштеј / ыштәни ғејд кардовнијеј",
-       "userloginnocreate": "Ыштәни едаштеј",
        "logout": "Системәдә кој орохнијеј",
        "userlogout": "Системәдә кој орохнијеј",
        "notloggedin": "Ыштәни едаштәнијоне",
-       "nologin": "Иштирок кардәкәси сәһифә ни? '''$1'''.",
-       "nologinlink": "Иштирокәкә сәһифә офәје",
        "createaccount": "Нујә иштирокәкә ғејд кардеј",
-       "gotaccount": "Шымә ыштәни ғејд кардәјоне? $1.",
-       "gotaccountlink": "Ыштәни едаштеј",
-       "userlogin-resetlink": "Бә системә дәше мәлумоти јодәдә бекардәјоне?",
        "createaccountmail": "бә е-номә",
-       "createaccountreason": "Сәбәб:",
        "mailmypassword": "Нујә парол вығандеј бә Е-номә.",
        "loginlanguagelabel": "Зывон: $1",
        "pt-login": "Dəşi",
        "prefs-changeemail": "Е-номә дәгиш кардеј",
        "prefs-email": "Е-номә кукон",
        "saveprefs": "Огәтеј",
-       "rows": "Сәтырон:",
        "searchresultshead": "Нәве",
        "timezoneregion-america": "Америка",
        "timezoneregion-europe": "Авропа",
        "rcshowhideanons": "$1 әнәномә иштирокәкон",
        "rcshowhidepatr": "$1 осә кардә быә дәгишон",
        "rcshowhidemine": "$1 ыштә дәгишон",
-       "rclinks": "Нишо дој охонә $1 дәгишон бә охонәни $2 ружон<br />$3",
+       "rclinks": "Нишо дој охонә $1 дәгишон бә охонәни $2 ружон",
        "diff": "фәрғ.",
        "hist": "тарых",
        "hide": "Нијо кардеј",
index 812e34d..a9458ce 100644 (file)
        "yourdomainname": "ho ngāueʻanga",
        "login": "Kau ki ai",
        "nav-login-createaccount": "Kau ki ai",
-       "userlogin": "Kau ki ai",
        "logout": "ʻAlu mamaʻo",
        "userlogout": "ʻAlu mamaʻo",
        "notloggedin": "ʻIkai kau-ki-ai",
-       "nologin": "Teʻeki maʻu haʻo tohi-kau-ki-ai? '''$1'''.",
-       "nologinlink": "Fakatupu hoʻo tohi-kau-ki-ai",
        "createaccount": "Fakatupu ʻa e tohi-kau-ki-ai",
-       "gotaccount": "ʻOsi maʻu ʻa e tohi-kau-ki-ai? '''$1'''.",
-       "gotaccountlink": "Kau ki ai",
        "createaccountmail": "ʻi he tohila",
        "badretype": "ʻOku kehe hoʻo ongo leatapu.",
        "loginerror": "Halaʻi kau-ki-ai",
        "prefs-misc": "Kehekehe",
        "saveprefs": "Haofaki",
        "prefs-editing": "ʻOku fatu",
-       "rows": "Ngaahi ʻotu:",
-       "columns": "Vahaʻa laini:",
        "searchresultshead": "Kumi",
        "recentchangescount": "Ngaahi ʻuluʻitohi ʻoku ʻasi ʻi he toki liliu, hisitōlia peesi, mo e hokohoko:",
        "savedprefs": "Kuo haofaki hoʻo faʻiteliha.",
        "rcshowhideliu": "$1 kau ʻetita ʻoku kau-ki-ai",
        "rcshowhideanons": "$1 kau ʻetita taʻehingoa",
        "rcshowhidemine": "$1 fatu ʻaʻaku",
-       "rclinks": "ʻAsi mai ha liliu ʻe $1 lolotonga ha ʻaho ʻe $2 fakamuimui<br />$3",
+       "rclinks": "ʻAsi mai ha liliu ʻe $1 lolotonga ha ʻaho ʻe $2 fakamuimui",
        "diff": "kehe",
        "hist": "hisi",
        "hide": "Toi",
        "undeletebtn": "Fakafoki",
        "undeletelink": "fakafoki",
        "undeletecomment": "Fakamatala:",
-       "undeletedrevisions": "Kuo fakafoki ʻa e paaki ʻe $1",
-       "undeletedfiles": "Kuo fakafoki ʻa e faile ʻe $1",
        "cannotundelete": "Naʻe movete ʻa e taʻetāmateʻi; mahalo pē kuo taʻetāmateʻi ʻuluaki ia ʻe he ʻetita kehe.",
        "undeletedpage": "'''Kuo fakafoki ko e $1'''\n\nVakai ki he [[Special:Log/delete|hokohoko tāmateʻi]] ki he lekooti ʻo e ngaahi tāmateʻi mo e taʻetāmateʻi onopooni.",
        "namespace": "Vā hingoa:",
index 540bb8f..30cc60b 100644 (file)
@@ -92,7 +92,8 @@
                        "Alikaan",
                        "By erdo can",
                        "1917 Ekim Devrimi",
-                       "Asmen"
+                       "Asmen",
+                       "Stephanecbisson"
                ]
        },
        "tog-underline": "Bağlantıların altını çizme:",
        "unprotectthispage": "Bu sayfanın korumasını değiştir",
        "newpage": "Yeni sayfa",
        "talkpage": "Tartışma sayfası",
-       "talkpagelinktext": "Mesaj",
+       "talkpagelinktext": "mesaj",
        "specialpage": "Özel sayfa",
        "personaltools": "Kişisel araçlar",
        "articlepage": "İçerik sayfasını gör",
        "privacypage": "Project:Gizlilik Politikası",
        "badaccess": "İzin hatası",
        "badaccess-group0": "Bu işlemi yapma yetkiniz yok.",
-       "badaccess-groups": "Yapmak istediğiniz işlem, sadece {{PLURAL:$2|şu gruptaki|şu gruplardaki}} kullanıcılar tarafından yapılabilir: $1",
+       "badaccess-groups": "İstediğiniz işlem, $1 {{PLURAL:$2|grubundaki|gruplarındaki}} kullanıcılarla sınırlıdır.",
        "versionrequired": "MediaWiki'nin $1 sürümü gerekiyor",
        "versionrequiredtext": "Bu sayfayı kullanmak için MediaWiki'nin $1 sürümü gerekmektedir. [[Special:Version|Sürüm sayfasına]] bakınız.",
        "ok": "Tamam",
        "newmessagesdifflinkplural": "son {{PLURAL:$1|değişiklik|değişiklik}}",
        "youhavenewmessagesmulti": "$1'de yeni mesajınız var",
        "editsection": "düzenle",
-       "editold": "değiştir",
+       "editold": "düzenle",
        "viewsourceold": "kaynağı gör",
-       "editlink": "değiştir",
+       "editlink": "düzenle",
        "viewsourcelink": "kaynağı gör",
        "editsectionhint": "Değiştirilen bölüm: $1",
        "toc": "İçindekiler",
        "unexpected": "beklenmeyen değer: \"$1\"=\"$2\".",
        "formerror": "Hata: Form gönderilemiyor.",
        "badarticleerror": "Bu işlem bu sayfada gerçekleştirilemez.",
-       "cannotdelete": "\"$1\" sayfa ya da dosyası silinemedi.\nBaşka bir kullanıcı tarafından zaten silinmiş olabilir.",
+       "cannotdelete": "\"$1\" adlı sayfa veya dosya silinemedi.\nBaşka bir kullanıcı tarafından daha önce silinmiş olabilir.",
        "cannotdelete-title": "\"$1\" sayfası silinemiyor",
        "delete-hook-aborted": "Silme işlemi uzantı kancası tarafından durduruldu. \nBir açıklama sunulmadı.",
        "no-null-revision": "\"$1\" sayfası için yeni boş bir sürüm oluşturulamadı",
        "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",
+       "passwordremindertitle": "{{SITENAME}} için yeni geçici parola",
        "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",
        "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",
-       "acct_creation_throttle_hit": "Sizin IP adresinizi kullanarak bu vikiyi ziyaret edenler $2 içinde {{PLURAL:$1|1 hesap|$1 hesap}} oluşturdu, bu sayı bu zaman aralığında izin verilen azami sayıdır.\nSonuç olarak, bu IP adresini kullanan ziyaretçiler şu anda daha fazla hesap açamazlar.",
+       "acct_creation_throttle_hit": "Sizin IP adresinizi kullanarak bu vikiyi ziyaret edenler son $2 içinde $1 hesap oluşturdu ve bu sayı bu zaman aralığında izin verilen azami sayıdır.\nSonuç olarak, bu IP adresini kullanan ziyaretçiler şu anda daha fazla hesap açamazlar.",
        "emailauthenticated": "E-posta adresiniz $2 $3 tarihinde onaylandı.",
        "emailnotauthenticated": "E-posta adresiniz henüz onaylanmadı.\nAşağıdaki işlevlerin hiçbiri için e-posta gönderilmeyecektir.",
        "noemailprefs": "Bu özelliklerin çalışması için bir e-posta adresi belirtiniz.",
        "oldpassword": "Eski parola",
        "newpassword": "Yeni parola",
        "retypenew": "Yeni parolayı tekrar girin",
-       "resetpass_submit": "Şifreyi ayarlayın ve oturum açın",
+       "resetpass_submit": "Parola belirle ve oturum aç",
        "changepassword-success": "Parolanız değiştirildi!",
        "changepassword-throttled": "Çok fazla yeni oturum açma girişiminde bulundunuz.\nLütfen tekrar denemeden önce $1 bekleyin.",
        "botpasswords": "Bot parolaları",
        "botpasswords-summary": "<em>Bot şifreleri,</em> hesabın ana giriş kimlik bilgilerini kullanmadan API aracılığıyla bir kullanıcı hesabına erişime izin verir. Bir bot şifresi ile giriş yaptığınızda mevcut kullanıcı hakları kısıtlanabilir.\n\nBunu neden yapmak isteyebileceğinizi bilmiyorsanız, yapmayınız. Hiç kimse sizden bunlardan birini üretip onlara vermenizi istememelidir.",
-       "botpasswords-disabled": "Bot şifreleri devre dışı.",
-       "botpasswords-no-central-id": "Bot şifresini kullanmak için, merkezi bir hesap ile giriş yapmalısınız.",
-       "botpasswords-existing": "Mevcut bot şifreleri",
-       "botpasswords-createnew": "Yeni bir bot şifresi oluştur",
-       "botpasswords-editexisting": "Mevcut bir bot şifresini düzenle",
+       "botpasswords-disabled": "Bot parolaları devre dışı.",
+       "botpasswords-no-central-id": "Bot parolaları kullanmak için, merkezi bir hesap ile oturum açmalısınız.",
+       "botpasswords-existing": "Mevcut bot parolaları",
+       "botpasswords-createnew": "Yeni bir bot parolası oluştur",
+       "botpasswords-editexisting": "Mevcut bir bot parolasını düzenle",
        "botpasswords-label-appid": "Bot ismi:",
        "botpasswords-label-create": "Oluştur",
        "botpasswords-label-update": "Güncelle",
        "botpasswords-bad-appid": "Bot ismi \"$1\" geçerli değil.",
        "botpasswords-insert-failed": "Bot adı \"$1\" eklenemedi. Zaten eklenmiş olmalı?",
        "botpasswords-update-failed": "Bot ismini \"$1\" olarak güncelleme başarısız oldu. Silinmiş olabilir mi?",
-       "botpasswords-created-title": "Bot şifresi oluşturuldu.",
-       "botpasswords-created-body": "\"$2\" adlı kullanıcının \"$1\" isimli botu için şifre oluşturuldu.",
-       "botpasswords-updated-title": "Bot şifresi guncellendi",
-       "botpasswords-updated-body": "\"$2\" adlı kullanıcının \"$1\" isimli botunun şifresi güncellendi.",
-       "botpasswords-deleted-title": "Bot şifresi silindi.",
-       "botpasswords-deleted-body": "\"$2\" adlı kullanıcının \"$1\" isimli botunun şifresi silindi.",
+       "botpasswords-created-title": "Bot parolası oluşturuldu",
+       "botpasswords-created-body": "\"$2\" adlı kullanıcının \"$1\" adlı botu için bot parolası oluşturuldu.",
+       "botpasswords-updated-title": "Bot parolası güncellendi",
+       "botpasswords-updated-body": "\"$2\" adlı kullanıcının \"$1\" adlı botunun bot parolası güncellendi.",
+       "botpasswords-deleted-title": "Bot parolası silindi",
+       "botpasswords-deleted-body": "\"$2\" adlı kullanıcının \"$1\" adlı botunun bot parolası silindi.",
        "botpasswords-newpassword": "<strong>$1</strong> ile oturum açmak için yeni şifre: <strong>$2</strong>. <em>İlerde başvurmak için lütfen kaydedin.</em>",
        "botpasswords-no-provider": "BotPasswordsSessionProvider kullanılamaz.",
-       "botpasswords-restriction-failed": "Bot şifresi sınırlamaları oturum açmayı engelledi.",
-       "botpasswords-invalid-name": "Belirtilen kullanıcı adı bot şifresi ayırıcısını içermiyor (\"$1\").",
+       "botpasswords-restriction-failed": "Bot parolası kısıtlamaları bu oturum açma işlemini önlemektedir.",
+       "botpasswords-invalid-name": "Belirtilen kullanıcı adı bot parolası ayırıcısı içermiyor (\"$1\").",
        "resetpass_forbidden": "Parolalar değiştirilememektedir",
-       "resetpass_forbidden-reason": "Şifre değiştirilemedi: $1",
+       "resetpass_forbidden-reason": "Parolalar değiştirilemez: $1",
        "resetpass-no-info": "Bu sayfaya doğrudan erişmek için oturum açmanız gereklidir.",
        "resetpass-submit-loggedin": "Parolayı değiştir",
        "resetpass-submit-cancel": "İptal",
        "token_suffix_mismatch": "'''Değişikliğiniz geri çevrildi çünkü alıcınız düzenleme kutucuğundaki noktalama işaretlerini bozdu.\nDeğişikliğiniz, sayfa metninde bozulmayı önlemek için geri çevrildi.\nEğer sorunlu bir web-tabanlı anonim proksi servisi kullanıyorsanız bu olay bazen gerçekleşebilir.'''",
        "edit_form_incomplete": "'''Değişiklik formu için bazı sunuculara erişilemedi; yaptığınız değişiklikler bozulmamıştır, gözden geçirip tekrar deneyiniz.'''",
        "editing": "\"$1\" sayfasını değiştirmektesiniz",
-       "creating": "Oluşturuluyor $1",
+       "creating": "$1 sayfasını oluşturuyorsunuz",
        "editingsection": "\"$1\" sayfasında bölüm değiştirmektesiniz",
-       "editingcomment": "$1 değiştiriliyor (yeni bölüm)",
+       "editingcomment": "$1 düzenleniyor (yeni bölüm)",
        "editconflict": "Değişiklik çakışması: $1",
        "explainconflict": "Siz sayfayı değiştirirken başka biri de değişiklik yaptı.\nYukarıdaki yazı sayfanın şu anki halini göstermektedir.\nSizin değişiklikleriniz alta gösterilmiştir. Son değişiklerinizi yazının içine eklemeniz gerekecektir.\n\"{{int:savearticle}}\"e bastığınızda '''sadece''' yukarıdaki yazı kaydedilecektir.",
        "yourtext": "Sizin metniniz",
        "revdelete-offender": "Revizyon yazarı:",
        "suppressionlog": "Gizleme günlüğü",
        "suppressionlogtext": "Aşağıdaki, hizmetlilerden gizlenen içerik içeren silinmelerin ve engellemelerin listesidir.\nŞu anda işlevsel olan yasak ve engellemelerin listesi için [[Special:BlockList|engelleme listesine]] bakın.",
-       "mergehistory": "Sayfa geçmişlerini takas et.",
+       "mergehistory": "Sayfa geçmişlerini birleştir",
        "mergehistory-header": "Bu sayfa, bir kaynak sayfanın geçmiş revizyonlarını yeni bir sayfaya birleştirmenize olanak sağlar.\nBu değişikliğin geçmişe ait sayfa devamlılığını devam ettirdiğinden emin olun.",
        "mergehistory-box": "İki sayfanın revizyonlarını birleştir:",
        "mergehistory-from": "Kaynak sayfa:",
        "mergehistory-same-destination": "Kaynak ve hedef sayfaları aynı olamaz",
        "mergehistory-reason": "Sebep:",
        "mergehistory-revisionrow": "$1 ($2) $3 . . $4 $5 $6",
-       "mergelog": "Birleştirme kaydı",
+       "mergelog": "Birleştirme günlüğü",
        "revertmerge": "Ayır",
        "mergelogpagetext": "Aşağıdaki liste, sayfaların geçmiş versiyonlarının birbirleriyle en son birleştirilmelerini içerir",
        "history-title": "\"$1\" sayfasının geçmişi",
        "searchprofile-images-tooltip": "Dosya ara",
        "searchprofile-everything-tooltip": "Tüm içerikte ara (tartışma sayfaları dahil)",
        "searchprofile-advanced-tooltip": "Özel ad alanlarında ara",
-       "search-result-size": "$1 ({{PLURAL:$2|1 kelime|$2 kelime}})",
+       "search-result-size": "$1 ($2 sözcük)",
        "search-result-category-size": "{{PLURAL:$1|1 üye|$1 üye}} ({{PLURAL:$2|1 altkategori|$2 altkategori}}, {{PLURAL:$3|1 dosya|$3 dosya}})",
        "search-redirect": "($1 sayfasından yönlendirme)",
        "search-section": "($1 bölümü)",
        "grouppage-bureaucrat": "{{ns:project}}:Bürokratlar",
        "grouppage-suppress": "{{ns:project}}:Gözetmen",
        "right-read": "Sayfaları oku",
-       "right-edit": "Sayfaları değiştir",
+       "right-edit": "Sayfaları düzenle",
        "right-createpage": "Sayfa oluştur (tartışma sayfası olmayan)",
        "right-createtalk": "Tartışma sayfaları oluştur",
        "right-createaccount": "Yeni kullanıcı hesapları yarat",
        "right-editsemiprotected": "\"{{int:protect-level-autoconfirmed}}\" olarak korunan sayfalarda değişiklik yap",
        "right-editcontentmodel": "Sayfanın içerik modelini düzenle",
        "right-editinterface": "Kullanıcı arayüzünü değiştirmek",
-       "right-editusercssjs": "Diğer kullanıcıların CSS ve JS dosyalarında değişiklik yap",
        "right-editusercss": "Diğer kullanıcıların CSS dosyalarında değişiklik yap",
        "right-edituserjs": "Diğer kullanıcıların JS dosyalarında değişiklik yap",
        "right-editmyusercss": "Kendi kullanıcı CSS dosyaları düzenle",
        "rcfilters-invalid-filter": "Geçersiz süzgeç",
        "rcfilters-empty-filter": "Etkin süzgeç bulunmuyor. Tüm katkıları gösteriliyor.",
        "rcfilters-filterlist-title": "Süzgeçler",
+       "rcfilters-filterlist-whatsthis": "Bu nedir?",
        "rcfilters-filterlist-feedbacklink": "Yeni (beta) süzgeçler konusunda geribildirim verin",
        "rcfilters-highlightbutton-title": "Sonuçları vurgula",
        "rcfilters-highlightmenu-title": "Bir renk seçin",
        "rcfilters-filter-unpatrolled-label": "Devriye onayından geçmemiş",
        "rcfilters-filter-unpatrolled-description": "Devriye onayından geçmiş olarak işaretlenmeyen düzenlemeler.",
        "rcfilters-filtergroup-significance": "Önem",
-       "rcfilters-filter-minor-label": "Küçük değişiklikler",
+       "rcfilters-filter-minor-label": "Küçük düzenlemeler",
        "rcfilters-filter-minor-description": "Yazarın küçük olarak etiketlediği düzenlemeler.",
-       "rcfilters-filter-major-label": "Küçük olmayan değişiklikler",
+       "rcfilters-filter-major-label": "Küçük olmayan düzenlemeler",
        "rcfilters-filter-major-description": "Küçük olarak etiketlenmemiş düzenlemeler.",
        "rcfilters-filtergroup-changetype": "Değişiklik türü",
        "rcfilters-filter-pageedits-label": "Sayfa düzenlemeleri",
        "rcfilters-filter-categorization-label": "Kategori değişiklikleri",
        "rcfilters-filter-categorization-description": "Kategorilere eklenen veya kaldırılan sayfaların kayıtları.",
        "rcfilters-filter-logactions-label": "Günlüğü tutulan işlemler",
+       "rcfilters-filter-logactions-description": "Hizmetli işlemleri, hesap oluşturmalar, sayfa silmeler, yüklemeler....",
        "rcnotefrom": "<strong>$3, $4</strong> tarihinden itibaren yapılan {{PLURAL:$5|değişiklik|değişiklik}} aşağıdadır (<strong>$1</strong> tarhine kadar olanlar gösterilmektedir).",
        "rclistfrom": "$3 $2 tarihinden itibaren yeni değişiklikleri göster",
        "rcshowhideminor": "Küçük değişiklikleri $1",
        "rcshowhidecategorization": "sayfa kategorizasyonunu $1",
        "rcshowhidecategorization-show": "göster",
        "rcshowhidecategorization-hide": "gizle",
-       "rclinks": "Son $2 günde yapılan son $1 değişikliği göster;<br /> $3",
+       "rclinks": "Son $2 günde yapılan son $1 değişikliği göster;",
        "diff": "fark",
        "hist": "geçmiş",
        "hide": "gizle",
        "filerevert-submit": "Eski haline döndür",
        "filerevert-success": "'''[[Media:$1|$1]]''' dosyası [$4 $3, $2 tarihli sürüme] geri döndürüldü.",
        "filerevert-badversion": "Bu dosyanın verilen zaman bilgisine sahip önceki bir yerel sürümü yok.",
-       "filedelete": "Sil $1",
+       "filedelete": "$1 adlı dosyayı sil",
        "filedelete-legend": "Dosya sil",
        "filedelete-intro": "'''[[Media:$1|$1]]''' dosyasını tüm geçmişiyle birlikte silmek üzeresiniz.",
        "filedelete-intro-old": "'''[[Media:$1|$1]]''' dosyasının [$4 $3, $2] tarihli sürümünü siliyorsunuz.",
        "filedelete-comment": "Neden:",
-       "filedelete-submit": "sil",
+       "filedelete-submit": "Sil",
        "filedelete-success": "'''$1''' silindi.",
        "filedelete-success-old": "'''[[Media:$1|$1]]''' dosyasının $3, $2 tarihli sürümü silindi.",
        "filedelete-nofile": "'''$1''' mevcut değildir.",
        "pageswithprop-submit": "Git",
        "pageswithprop-prophidden-long": "uzun metin özellik değeri gizlendi ($1)",
        "pageswithprop-prophidden-binary": "ikili özellik değeri gizlendi ($1)",
-       "doubleredirects": "Çift yönlendirmeler",
+       "doubleredirects": "Yönlendirmeye olan yönlendirmeler",
        "doubleredirectstext": "Bu sayfa diğer yönlendirme sayfalarına yönlendirme yapan sayfaları listeler.\nHer satırın içerdiği bağlantılar; birinci ve ikinci yönlendirme, ayrıca ikinci yönlendirmenin hedefi, ki bu genelde birinci yönlendirmenin göstermesi gereken \"gerçek\" hedef sayfasıdır.\n<del>Üstü çizili</del> girdiler çözülmüştür.",
        "double-redirect-fixed-move": "[[$1]] taşındı.\nYönlendirme otomatik olarak güncellendi ve [[$2]] sayfasına yönlendirildi.",
        "double-redirect-fixed-maintenance": "[[$1]] sayfasından [[$2]] sayfasına yapılan çift yönlendirme otomatik olarak düzeltiliyor.",
        "double-redirect-fixer": "Yönlendirme tamircisi",
-       "brokenredirects": "Boş yönlendirmeler",
+       "brokenredirects": "Var olmayan sayfalara yönlendirmeler",
        "brokenredirectstext": "Aşağıdaki yönlendirmeler varolmayan sayfalara bağlantı veriyor:",
-       "brokenredirects-edit": "değiştir",
+       "brokenredirects-edit": "düzenle",
        "brokenredirects-delete": "sil",
        "withoutinterwiki": "Diğer dillere bağlantısı olmayan sayfalar",
        "withoutinterwiki-summary": "Aşağıda listelenen sayfalar diğer dillere bağlantı içermemektedir:",
        "mostlinkedtemplates": "En çok dahil edilen sayfalar",
        "mostcategories": "En fazla kategoriye bağlanmış sayfalar",
        "mostimages": "En çok bağlantı verilmiş dosyalar",
-       "mostinterwikis": "En çok interwiki'ye sahip sayfalar",
+       "mostinterwikis": "En çok intervikiye sahip sayfalar",
        "mostrevisions": "En çok değişikliğe uğramış sayfalar",
        "prefixindex": "Önek ile tüm sayfalar",
        "prefixindex-namespace": "Önek ile tüm sayfalar ($1 ad alanında)",
        "allarticles": "Tüm maddeler",
        "allinnamespace": "Tüm sayfalar ($1 sayfaları)",
        "allpagessubmit": "Getir",
-       "allpagesprefix": "Buraya yazdığınız harflerle başlayan sayfaları listeleyin:",
+       "allpagesprefix": "Şu öneke sahip sayfaları görüntüle:",
        "allpagesbadtitle": "Girilen sayfa ismi diller arası bağlantı ya da vikiler arası bağlantı içerdiğinden geçerli değil. Başlıklarda kullanılması yasak olan bir ya da daha çok karakter içeriyor olabilir.",
        "allpages-bad-ns": "{{SITENAME}} sitesinde \"$1\" ad alanı yok.",
        "allpages-hide-redirects": "Yönlendirmeleri gizle",
        "emailuser-title-target": "Bu {{GENDER:$1|kullanıcıya}} e-posta gönder",
        "emailuser-title-notarget": "Kullanıcı e-posta",
        "emailpagetext": "Bu {{GENDER:$1|kullanıcıya}} e-posta iletisi göndermek için aşağıdaki formu kullanabilirsiniz.\n[[Special:Preferences|Kullanıcı tercihlerinizde]] girdiğiniz e-posta adresiniz, e-postanın \"From (Kimden)\" adresinde görünecektir, bu yüzden alıcı size doğrudan yanıt verebilecektir.",
-       "defemailsubject": "\"$1\" kullanıcısından {{SITENAME}} e-postası",
+       "defemailsubject": "\"$1\" adlı kullanıcıdan {{SITENAME}} e-postası",
        "usermaildisabled": "Kullanıcı e-postası devre dışı",
        "usermaildisabledtext": "Bu vikide diğer kullanıcılara e-posta gönderemezsiniz",
        "noemailtitle": "e-posta adresi yok",
        "emailfrom": "Kimden:",
        "emailto": "Kime:",
        "emailsubject": "Konu:",
-       "emailmessage": "E-posta:",
+       "emailmessage": "İleti:",
        "emailsend": "Gönder",
        "emailccme": "Mesajın bir kopyasını da bana gönder.",
        "emailccsubject": "$1'e gönderdiğiniz mesajın kopyası: $2",
        "emailsent": "E-posta gönderildi",
-       "emailsenttext": "E-postaz gönderildi.",
+       "emailsenttext": "E-posta iletiniz gönderildi.",
        "emailuserfooter": "Bu e-posta $1 tarafından $2 kullanıcısına, {{SITENAME}} sitesindeki \"Kullanıcıya e-posta gönder\" (\"{{int:emailuser}}\") fonksiyonu ile gönderilmiştir.",
        "usermessage-summary": "Sistem mesajı bırakın.",
        "usermessage-editor": "Sistem habercisi",
        "excontentauthor": "eski içerik: '$1' ('[[Special:Contributions/$2|$2]]' katkıda bulunmuş olan tek kullanıcı)",
        "exbeforeblank": "Silinmeden önceki içerik: '$1'",
        "delete-confirm": "\"$1\" sayfasını sil",
-       "delete-legend": "sil",
+       "delete-legend": "Sil",
        "historywarning": "<strong>Uyarı:</strong> Silmek üzere olduğunuz sayfanın yaklaşık olarak $1 sürüme sahip bir geçmişi var:",
        "historyaction-submit": "Göster",
        "confirmdeletetext": "Bu sayfayı veya dosyayı tüm geçmişi ile birlikte veritabanından kalıcı olarak silmek üzeresiniz.\nBu işlemden kaynaklı doğabilecek sonuçların farkında iseniz ve işlemin [[{{MediaWiki:Policy-url}}|Silme kurallarına]] uygun olduğuna eminseniz, işlemi onaylayın.",
        "actionfailed": "İşlem başarısız oldu",
        "deletedtext": "\"$1\" silindi.\nYakın zamanda silinenleri görmek için: $2.",
        "dellogpage": "Silme günlüğü",
-       "dellogpagetext": "Aşağıdaki liste son silme kayıtlarıdır.",
+       "dellogpagetext": "Aşağıda en son silme işlemlerinin bir listesi bulunmaktadır.",
        "deletionlog": "silme günlüğü",
        "reverted": "Önceki sürüm geri getirildi",
        "deletecomment": "Neden:",
        "rollbackfailed": "geri alma işlemi başarısız",
        "cantrollback": "Sayfaya son katkıda bulunan kullanıcı, sayfaya katkıda bulunmuş tek kişi olduğu için, değişiklikler geri alınamıyor.",
        "alreadyrolled": "[[User:$2|$2]] ([[User talk:$2|Tartışma]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) tarafından [[:$1]] sayfasında yapılmış son değişiklik geri döndürülemiyor;\nbaşka birisi sayfada değişiklik yaptı ya da sayfayı geri döndürdü.\n\nSon değişikliği yapan: [[User:$3|$3]] ([[User talk:$3|Tartışma]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
-       "editcomment": "Değişiklik özeti: <em>$1</em> idi.",
+       "editcomment": "Düzenleme özeti şöyleydi: <em>$1</em>.",
        "revertpage": "[[Special:Contributions/$2|$2]] [[User talk:$2|mesaj]] tarafından yapılan değişiklikler geri alınarak, [[User:$1|$1]] tarafından değiştirilmiş önceki sürüm geri getirildi.",
        "revertpage-nouser": "Gizli bir kullanıcı tarafından yapılan değişiklikler geri alınarak {{GENDER:$1|[[User:$1|$1]]}} tarafından yapılan son revizyon geri getirildi",
        "rollback-success": "$1 tarafından yapılan değişiklikler geri alınarak;\n$2 tarafından değiştirilmiş önceki sürüme geri dönüldü.",
        "sessionfailure-title": "Oturum başarısızlığı",
        "sessionfailure": "Giriş oturumunuzla ilgili bir sorun var gibi görünüyor;\nbu eylem, oturum gaspına karşı önlem olarak iptal edildi.\nLütfen \"geri\" gidin ve geldiğiniz sayfayı yeniden yükleyin, sonra tekrar deneyin.",
+       "changecontentmodel": "Bir sayfanın içerik modelini değiştir",
        "changecontentmodel-title-label": "Sayfa başlığı",
        "changecontentmodel-model-label": "Yeni içerik modeli",
        "changecontentmodel-reason-label": "Gerekçe:",
        "logentry-contentmodel-change-revert": "Eski haline döndür",
        "protectlogpage": "Koruma günlüğü",
        "protectlogtext": "Aşağıdaki, sayfa korumalarına değişikliklerin bir listesidir.\nŞu anda uygulanan sayfa korumaları için [[Special:ProtectedPages|koruma altına alınmış sayfalar listesine]] bakabilirsiniz.",
-       "protectedarticle": "\"[[$1]]\" koruma altında alındı",
+       "protectedarticle": "\"[[$1]]\" adlı sayfayı koruma altına aldı",
        "modifiedarticleprotection": "\"[[$1]]\" için koruma düzeyi değiştirildi",
        "unprotectedarticle": "koruma kaldırıldı: \"[[$1]]\"",
        "movedarticleprotection": "koruma ayarları \"[[$2]]\" sayfasından \"[[$1]]\" sayfasına taşındı",
+       "protectedarticle-comment": "\"[[$1]]\" adlı sayfayı {{GENDER:$2|koruma altına aldı}}",
        "modifiedarticleprotection-comment": "\"[[$1]]\" için {{GENDER:$2|koruma düzeyini değiştirdi}}",
        "protect-title": "\"$1\" için bir koruma seviyesi seçiniz",
        "protect-title-notallowed": "\"$1\" için koruma seviyesini görüntüleyin",
        "minimum-size": "En küçük boyut",
        "maximum-size": "En büyük boyut:",
        "pagesize": "(bayt)",
-       "restriction-edit": "değiştir",
+       "restriction-edit": "Düzenle",
        "restriction-move": "Taşı",
        "restriction-create": "Oluştur",
        "restriction-upload": "Yükle",
        "undeleteviewlink": "görüntüle",
        "undeleteinvert": "Seçimi ters çevir",
        "undeletecomment": "Neden:",
-       "undeletedrevisions": "Toplam {{PLURAL:$1|1 kayıt|$1 kayıt}} geri getirildi.",
-       "undeletedrevisions-files": "{{PLURAL:$1|1 revizyon|$1 revizyon}} ve {{PLURAL:$2|1 dosya|$2 dosya}} eski konumuna getirildi",
-       "undeletedfiles": "{{PLURAL:$1|1 dosya|$1 dosya}} geri getirildi.",
-       "cannotundelete": "Silme başarısız oldu:\n$1",
+       "cannotundelete": "Geri getirme işlemlerinden bazıları veya tümü 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": "Yakın zamanda silinen sayfaları görmek için [[Special:Log/delete|silme günlüğü]]ne bakın.",
        "undelete-search-title": "Silinen sayfaları ara",
        "sp-contributions-newbies": "Sadece yeni kullanıcıların katkılarını göster",
        "sp-contributions-newbies-sub": "Yeni kullanıcılar için",
        "sp-contributions-newbies-title": "Yeni hesaplar için kullanıcı katkıları",
-       "sp-contributions-blocklog": "Engel kaydı",
+       "sp-contributions-blocklog": "engelleme günlüğü",
        "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",
        "blockip": "{{GENDER:$1|Kullanıcıyı}} engelle",
        "blockip-legend": "Kullanıcıyı engelle",
        "blockiptext": "Aşağıdaki formu kullanarak belli bir IP'nin veya kayıtlı kullanıcının değişiklik yapmasını engelleyebilirsiniz. Bu sadece vandalizmi engellemek için ve [[{{MediaWiki:Policy-url}}|kurallara]] uygun olarak yapılmalı. Aşağıya mutlaka engelleme ile ilgili bir açıklama yazınız. (örnek: -Şu- sayfalarda vandalizm yapmıştır).",
-       "ipaddressorusername": "IP adresi veya kullanıcı adı",
+       "ipaddressorusername": "IP adresi veya kullanıcı adı:",
        "ipbexpiry": "Bitiş süresi",
        "ipbreason": "Neden:",
        "ipbreason-dropdown": "*Genel engelleme nedenleri\n** Yanlış bilgi eklemek\n** Sayfalardan içeriği çıkarmak\n** Dış sitelere spam bağlantı vermek\n** Sayfalara mantıksız/anlaşılmaz sözler eklemek\n** Tehditvari davranış/Taciz\n** Birden fazla hesabı kötüye kullanmak\n** Kabul edilemez kullanıcı adı",
        "ipb-change-block": "Bu ayarlarla kullanıcıyı yeniden engelle",
        "ipb-confirm": "Engeli onayla",
        "badipaddress": "Geçersiz IP adresi",
-       "blockipsuccesssub": "IP adresi engelleme işlemi başarılı oldu",
+       "blockipsuccesssub": "Engelleme başarılı oldu",
        "blockipsuccesstext": "[[Special:Contributions/$1|$1]] engellendi.<br />\nEngellemeleri gözden geçirmek için [[Special:BlockList|engel listesine]] bakınız.",
        "ipb-blockingself": "Kendinizi engellemek üzeresiniz! Bunu yapmak istediğinizden emin misiniz?",
        "ipb-confirmhideuser": "\"Kullanıcıyı gizle\" seçiliyken bir kullanıcı engellemek üzeresiniz. Bu, kullanıcının adını tüm listeler ile günlük girişlerinde bastıracaktır. Bunu yapmak istediğinizden emin misiniz?",
        "ipb-confirmaction": "Bunu gerçekten yapmak istediğinize eminseniz, lütfen en alttaki \"{{int:ipb-confirm}}\" alanını işaretleyin.",
        "ipb-edit-dropdown": "Engelleme nedenleri düzenle",
        "ipb-unblock-addr": "$1 için engellemeyi kaldır",
-       "ipb-unblock": "Engellemeyi kaldır",
+       "ipb-unblock": "Bir kullanıcı adı veya IP adresinin engellemesini kaldır",
        "ipb-blocklist": "Mevcut olan engellemeleri göster",
        "ipb-blocklist-contribs": "{{GENDER:$1|$1}} için katkılar",
        "unblockip": "Kullanıcının engellemesini kaldır",
        "unblockiptext": "Daha önceden engellenmiş bir IP adresine ya da kullanıcı adına yazma erişimini geri vermek için aşağıdaki formu kullanın.",
        "ipusubmit": "Bu engellemeyi kaldır",
        "unblocked": "[[User:$1|$1]] - engelleme kaldırıldı",
-       "unblocked-range": "$1 engeli kaldırıldı",
+       "unblocked-range": "$1 adlı kullanıcının engeli kaldırıldı.",
        "unblocked-id": "$1 engeli çıkarıldı",
-       "unblocked-ip": "[[Special:Contributions/$1|$1]] engellenmiştir.",
+       "unblocked-ip": "[[Special:Contributions/$1|$1]] adlı kullanıcının engeli kaldırıldı.",
        "blocklist": "Engellenmiş kullanıcılar",
        "ipblocklist": "Engellenmiş kullanıcılar",
        "ipblocklist-legend": "Engellenen kullanıcı ara",
        "blocklist-target": "Hedef",
        "blocklist-expiry": "Bitiş tarihi",
        "blocklist-by": "Engeli veren hizmetli",
-       "blocklist-params": "Engel parametreleri",
+       "blocklist-params": "Engelleme parametreleri",
        "blocklist-reason": "Gerekçe",
        "ipblocklist-submit": "Ara",
        "ipblocklist-localblock": "Yerel engelleme",
        "ipblocklist-otherblocks": "Diğer {{PLURAL:$1|engelleme|engellemeler}}",
        "infiniteblock": "Süresiz",
        "expiringblock": "$1 $2 tarihinde doluyor",
-       "anononlyblock": "sadece anonim",
+       "anononlyblock": "yalnızca anonim",
        "noautoblockblock": "otomatik engelleme devre dışı bırakıldı",
-       "createaccountblock": "hesap açımı engellendi",
+       "createaccountblock": "hesap oluşturma devre dışı bırakıldı",
        "emailblock": "e-posta engellendi",
        "blocklist-nousertalk": "kendi mesaj sayfasını değiştiremez",
        "ipblocklist-empty": "Engelleme listesi boş.",
        "ipblocklist-no-results": "İstenen IP adresi ya da kullanıcı adı engellenmedi.",
        "blocklink": "engelle",
-       "unblocklink": "engeli kaldır",
+       "unblocklink": "engellemeyi kaldır",
        "change-blocklink": "engeli değiştir",
        "contribslink": "katkılar",
        "emaillink": "e-posta gönder",
        "autoblocker": "Otomatik olarak engellendiniz çünkü yakın zamanda IP adresiniz \"[[User:$1|$1]]\" kullanıcısı tarafından  kullanılmıştır. $1 isimli kullanıcının engellenmesi için verilen sebep: \"'''$2'''\"",
-       "blocklogpage": "Engel kaydı",
+       "blocklogpage": "Engelleme günlüğü",
        "blocklog-showlog": "Bu kullanıcı daha önceden engellenmiş.\nEngelleme günlüğü referans için aşağıda sağlanmıştır:",
        "blocklog-showsuppresslog": "Bu kullanıcı daha önceden engellenmiş ve gizlenmiş.\nGizleme günlüğü referans için aşağıda sağlanmıştır:",
-       "blocklogentry": ", [[$1]] kullanıcısını engelledi, engelleme süresi: $2 $3",
-       "reblock-logentry": "[[$1]] için bitiş tarihi $2 $3 olmak üzere engelleme ayarlarını değiştirdi",
+       "blocklogentry": ", [[$1]] adlı kullanıcıyı $2 süreyle ve $3 gerekçesiyle engelledi.",
+       "reblock-logentry": ", [[$1]] adlı kullanıcı için engelleme ayarlarını değiştirdi ve bitiş süresini $2 olarak belirledi $3",
        "blocklogtext": "Bu, kullanıcı engelleme ve engel kaldırma işlemlerinin bir günlüğüdür.\nOtomatik olarak engellenen IP adresleri listelenmemiştir.\nŞu anda geçerli yasaklama ve engellemelerin listesi için [[Special:BlockList|engelleme listesi]]ne bakın.",
-       "unblocklogentry": "$1 kullanıcının engellemesi kaldırıldı",
+       "unblocklogentry": ", $1 adlı kullanıcının engellemesini kaldırdı",
        "block-log-flags-anononly": "sadece anonim kullanıcılar",
-       "block-log-flags-nocreate": "hesap yaratımı engellendi",
+       "block-log-flags-nocreate": "hesap oluşturma devre dışı bırakıldı",
        "block-log-flags-noautoblock": "Otomatik engelleme iptal edildi",
        "block-log-flags-noemail": "e-posta engellendi",
        "block-log-flags-nousertalk": "kendi mesaj sayfasını değiştiremez",
        "cant-move-to-category-page": "Bir sayfayı, bir kategoriye taşımaya izniniz yok.",
        "newtitle": "Yeni başlık:",
        "move-watch": "Bu sayfayı izle",
-       "movepagebtn": "İsmi değiştir",
+       "movepagebtn": "Sayfayı taşı",
        "pagemovedsub": "İsim değişikliği tamamlandı.",
        "movepage-moved": "'''\"$1\",  \"$2\" sayfasına taşındı'''",
        "movepage-moved-redirect": "Bir yönlendirme oluşturuldu.",
        "movepage-page-moved": "$1 sayfası $2 sayfasına taşındı.",
        "movepage-page-unmoved": "$1 sayfası $2 başlığına taşınamıyor.",
        "movepage-max-pages": "En fazla $1 {{PLURAL:$1|sayfa|sayfa}} taşındı ve daha fazlası otomatik olarak taşınamaz.",
-       "movelogpage": "Taşıma kaydı",
+       "movelogpage": "Taşıma günlüğü",
        "movelogpagetext": "Aşağıda bulunan liste adı değiştirilmiş sayfaları gösterir.",
        "movesubpage": "{{PLURAL:$1|Alt sayfa|Alt sayfalar}}",
        "movesubpagetext": "Bu sayfanın aşağıda gösterilen $1 {{PLURAL:$1|altsayfası|altsayfası}} vardır.",
        "allmessagesname": "Ad",
        "allmessagesdefault": "Varsayılan ileti metni",
        "allmessagescurrent": "Kullanımdaki metin",
-       "allmessagestext": "Bu liste  MediaWiki ad alanında mevcut olan sistem mesajlarının listesidir.\nGenel MediaWiki yerelleştirmesine katkıda bulunmak isterseniz, lütfen [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation MediaWiki Yerelleştirmesi] ve [https://translatewiki.net translatewiki.net] sayfalarını ziyaret edin.",
-       "allmessagesnotsupportedDB": "'''$wgUseDatabaseMessages''' kapalı olduğu için '''{{ns:special}}:Allmessages''' kullanıma açık değil.",
+       "allmessagestext": "Bu liste, MediaWiki ad alanında bulunan sistem iletilerinin listesidir.\nGenel MediaWiki yerelleştirmesine katkıda bulunmak isterseniz, lütfen [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation MediaWiki Yerelleştirmesi] ve [https://translatewiki.net translatewiki.net] sayfalarını ziyaret edin.",
+       "allmessagesnotsupportedDB": "Bu sayfa kullanılamıyor, çünkü <strong>$wgUseDatabaseMessages</strong> devre dışı bırakıldı.",
        "allmessages-filter-legend": "Filtre",
        "allmessages-filter": "Özelleştirme durumuna göre filtrele:",
        "allmessages-filter-unmodified": "Değiştirilmemiş",
        "thumbnail_gd-library": "Eksik GD kütüphanesi yapılandırması: kayıp fonksiyon $1",
        "thumbnail_image-missing": "Dosya kayıp gibi görünüyor: $1",
        "thumbnail_image-failure-limit": "Yakın zamanda bu küçük resmin oluşturulması için çok fazla başarısız  girişim oldu ($1 ya da daha fazla). Lütfen daha sonra yeniden deneyin.",
-       "import": "Sayfaları aktar",
+       "import": "Sayfaları içe aktar",
        "importinterwiki": "Başka bir vikiden içe aktar",
        "import-interwiki-text": "İçe aktarmak için bir viki ve sayfa başlığı seçin.\nRevizyon tarihleri ve yazarların isimleri korunacaktır.\nBütün vikilerarası içe aktarım eylemleri [[Special:Log/import|içe aktarım günlüğünde]] kaydedilmektedir.",
        "import-interwiki-sourcewiki": "Kaynak viki:",
        "patrol-log-page": "Devriye günlüğü",
        "patrol-log-header": "Bu gözlenmiş revizyonların günlüğüdür.",
        "log-show-hide-patrol": "Gözetim günlüğünü $1",
-       "log-show-hide-tag": "$1 Etiket günlüğü",
+       "log-show-hide-tag": "Etiket günlüğünü $1",
        "deletedrevision": "$1 sayılı eski sürüm silindi.",
        "filedeleteerror-short": "$1 dosyanın silinmesinde hata oldu",
        "filedeleteerror-long": "Dosyayı silerken hatalarla karşılaşıldı:\n\n$1",
        "unit-pixel": "px",
        "confirm_purge_button": "Tamam",
        "confirm-purge-top": "Sayfa önbelleği temizlensin mi?",
-       "confirm-purge-bottom": "Bir sayfayı tasfiye etmek önbelleği temizler ve en güncel sürümün görünmesine zorlar.",
+       "confirm-purge-bottom": "Sayfa temizleme işlemi önbelleğin temizlenmesini sağlar ve güncel sürümü görünmeye zorlar.",
        "confirm-watch-button": "TAMAM",
        "confirm-watch-top": "Bu sayfayı izleme listenize ekleyin",
        "confirm-unwatch-button": "TAMAM",
        "table_pager_limit_submit": "Git",
        "table_pager_empty": "Sonuç yok",
        "autosumm-blank": "Sayfa boşaltıldı",
-       "autosumm-replace": "Sayfa içeriği '$1' ile değiştiriliyor",
+       "autosumm-replace": "Sayfa içeriği '$1' ile değiştirildi",
        "autoredircomment": "[[$1]] sayfasına yönlendirildi",
-       "autosumm-new": "Yeni sayfa: \"$1\"",
+       "autosumm-new": "\"$1\" içeriğiyle yeni sayfa oluşturdu",
        "autosumm-newblank": "Boş bir sayfa oluşturdu",
        "lag-warn-normal": "$1 {{PLURAL:$1|saniyeden|saniyeden}} yeni değişiklikler bu listede görünmeyebilir.",
        "lag-warn-high": "Veritabanı sunucusundaki aşırı gecikmeden dolayı, $1 {{PLURAL:$1|saniyeden|saniyeden}} yeni değişiklikler bu listede görünmeyebilir.",
        "revdelete-uname-unhid": "kullanıcı adı gösterildi",
        "revdelete-restricted": "hizmetliler için uygulanmış kısıtlamalar",
        "revdelete-unrestricted": "hizmetliler için kaldırılmış kısıtlamalar",
-       "logentry-block-block": "$1 {{GENDER:$2|engelledi}} {{GENDER:$4|$3}} engelleme süresi: $5 $6",
-       "logentry-block-unblock": "$1 kullanıcısının {{GENDER:$2|engeli kaldırıldı}} {{GENDER:$4|$3}}",
-       "logentry-block-reblock": "$1, {{GENDER:$4|$3}} kullanıcısının engellenme süresini $5 $6 olarak {{GENDER:$2|değiştirdi}}",
+       "logentry-block-block": "$1, {{GENDER:$4|$3}} adlı kullanıcıyı $5 süreyle {{GENDER:$2|engelledi}} $6",
+       "logentry-block-unblock": "$1, {{GENDER:$4|$3}} adlı kullanıcının {{GENDER:$2|engelini kaldırdı}}",
+       "logentry-block-reblock": "$1, {{GENDER:$4|$3}} adlı kullanıcının engellenme süresini $5 olarak {{GENDER:$2|değiştirdi}} $6",
        "logentry-suppress-block": "{{GENDER:$4|$3}} $1 tarafından {{GENDER:$2|engellendi}} Zamanaşımı: $5 $6",
        "logentry-suppress-reblock": "$1 {{GENDER:$2|changed}} block settings for {{GENDER:$4|$3}} engelleme süresi $5 $6",
        "logentry-import-upload": "$1 dosya yükleme ile {{GENDER:$2|içe aktardı}}: $3",
        "logentry-newusers-create2": "$3 kullanıcı hesabı $1 tarafından {{GENDER:$2|oluşturuldu}}",
        "logentry-newusers-byemail": "$3 kullanıcı hesabı $1 tarafından {{GENDER:$2|oluşturuldu}} ve şifre e-posta ile gönderildi",
        "logentry-newusers-autocreate": "$1 kullanıcı hesabı otomatik olarak {{GENDER:$2|oluşturuldu}}",
+       "logentry-protect-unprotect": "$1, $3 sayfasının korumasını {{GENDER:$2|kaldırdı}}",
        "logentry-rights-rights": "$1, $3 için grup üyeliğini $4 iken $5 olarak {{GENDER:$2|değiştirdi}}",
        "logentry-rights-rights-legacy": "$1, $3 için grup üyeliğini {{GENDER:$2|değiştirdi}}",
        "logentry-rights-autopromote": "$1, $4 iken $5 olarak otomatik {{GENDER:$2|terfi edildi}}",
        "api-error-stashfailed": "İç hata: Sunucu, geçici dosyaları kaybetti.",
        "api-error-unknown-warning": "Bilinmeyen uyarı: $1",
        "api-error-unknownerror": "Bilinmeyen hata: \"$1\".",
-       "duration-seconds": "$1 {{PLURAL:$1|saniye|saniye}}",
+       "duration-seconds": "$1 saniye",
        "duration-minutes": "$1 {{PLURAL:$1|dakika|dakika}}",
        "duration-hours": "$1 {{PLURAL:$1|saat|saat}}",
        "duration-days": "$1 {{PLURAL:$1|gün|gün}}",
        "headline-anchor-title": "Bu bölüme bağlantı",
        "special-characters-group-latin": "Latin",
        "special-characters-group-latinextended": "Genişletilmiş Latince",
-       "special-characters-group-ipa": "UFA",
+       "special-characters-group-ipa": "IPA",
        "special-characters-group-symbols": "Simgeler",
        "special-characters-group-greek": "Yunan",
        "special-characters-group-greekextended": "Genişletilmiş Yunanca",
index a32a979..3af41fc 100644 (file)
        "yourpasswordagain": "Naqla ḥreto kṭaw uQliḍo:",
        "login": "3bar",
        "nav-login-createaccount": "3bar / Hway Hadomo",
-       "userlogin": "3bar / Hway Hadomo",
-       "userloginnocreate": "3bar",
        "logout": "Nfoqo",
        "userlogout": "Nfoqo",
        "notloggedin": "Heş lo3abirat.",
-       "nologin": "Heş lawit Hadomo? $1",
-       "nologinlink": "Hway Hadomo",
        "createaccount": "Hway Hadomo",
-       "gotaccount": "Ma hawit ste Hadomo? $1",
-       "gotaccountlink": "3bar",
-       "userlogin-resetlink": "Ṫa³at uQliḍayḍox?",
        "createaccountmail": "buEmail",
        "wrongpassword": "uQliḍayḍux fawdo yo.\nMjarab Naqla ḥreto.",
        "wrongpasswordempty": "Lo msta³melux uQliḍayḍux.\nMjarab Naqla ḥreto.",
        "rcshowhideanons": "$1 Hadomo nuxroyo",
        "rcshowhidepatr": "$1 patrolled edits",
        "rcshowhidemine": "aMaṫwoṭayḍi ($1)",
-       "rclinks": "Maḥway li $1 aŞuḥlofe ḥaroye men meqım $2 Yawme hul u³do. <br />$3",
+       "rclinks": "Maḥway li $1 aŞuḥlofe ḥaroye men meqım $2 Yawme hul u³do.",
        "diff": "Frişuṭo",
        "hist": "Maktabzabno",
        "hide": "Tlay",
index 6d971d5..fb9184f 100644 (file)
        "yourpasswordagain": "Thlela u hoxa ritompfungulo ra wena:",
        "login": "Pfula u nghena",
        "nav-login-createaccount": "Pfula unghena / Tumbuluxa akhawunti",
-       "userlogin": "Pfula unghena / Tumbuluxa akhawunti",
-       "userloginnocreate": "Pfula unghena",
        "logout": "Pfala u famba",
        "userlogout": "Pfala u famba",
        "notloggedin": "A wusipfula unghena",
-       "nologin": "Xana upfumala akhawunti? $1.",
-       "nologinlink": "Tumbuluxa akhawunti",
        "createaccount": "Tumbuluxa akhawunti",
-       "gotaccount": "Xna una akhawunti hi khale? $1.",
-       "gotaccountlink": "Pfula unghena",
-       "userlogin-resetlink": "Xana u rivele vuxokoxoko bya wena byo pfula unghena?",
-       "createaccountreason": "Xivangelo:",
        "loginsuccess": "'''Ule ndzeni ka {{SITENAME}} tani hi \"$1\".'''",
        "mailmypassword": "Rhumela vito-mpfungulo lerintwsa",
        "loginlanguagelabel": "Ririmi: $1",
        "rcshowhideanons": "$1 wa vatirhisi lava tumbeleke",
        "rcshowhidepatr": "$1 mundzulamiso leyi languteriweke",
        "rcshowhidemine": "$1 wa mindzulamiso ya mina",
-       "rclinks": "Kumba $1 ya ku cinca eka $2 wa masiku lamahundzeke<br />$3",
+       "rclinks": "Kumba $1 ya ku cinca eka $2 wa masiku lamahundzeke",
        "diff": "Hamban",
        "hist": "Matimu",
        "hide": "Tumbeta",
index 2646210..68b03fd 100644 (file)
        "rcshowhidecategorization": "битләрне төркемләүне $1",
        "rcshowhidecategorization-show": "Күрсәт",
        "rcshowhidecategorization-hide": "Яшер",
-       "rclinks": "Соңгы $2 көн эчендә ясалган $1 үзгәртүне күрсәт<br />$3",
+       "rclinks": "Соңгы $2 көн эчендә ясалган $1 үзгәртүне күрсәт",
        "diff": "аерма",
        "hist": "тарих",
        "hide": "Яшер",
        "undeleteviewlink": "карау",
        "undeleteinvert": "Киресен сайлау",
        "undeletecomment": "Сәбәп:",
-       "undeletedrevisions": "$1 {{PLURAL:$1|үзгәреш}} яңадан {{PLURAL:$1|торгызылды}}",
        "undelete-search-submit": "Эзләү",
        "undelete-error-long": "Файлны торгызу вакытында хаталар чыкты:\n\n$1",
        "undelete-show-file-submit": "Әйе",
index 8e77204..996035d 100644 (file)
        "externaldberror": "Tışqı mäğlümat bazası yärdämendä awtentifikatsiä ütkändä xata çıqtı, yäisä tışqı xisap yazmağızğa üzgäreşlär kertü xoquqığız yuq.",
        "login": "Kerü",
        "nav-login-createaccount": "Kerü / terkälü",
-       "userlogin": "Kerü / terkälü",
-       "userloginnocreate": "Kerü",
        "logout": "Çığu",
        "userlogout": "Çığu",
        "notloggedin": "Sez xisap yazmağızğa kermägänsez",
-       "nologin": "Qullanuçı isemeñ yuqmı? '''$1'''",
-       "nologinlink": "Xisap yazması tözegez",
        "createaccount": "Yaña qullanuçı terkäw",
-       "gotaccount": "Sez inde terkäldegezme? '''$1'''.",
-       "gotaccountlink": "Kerü",
        "userlogin-resetpassword-link": "Sersüzegezne onıttığızmı?",
        "createacct-emailrequired": "Email adresı",
        "createacct-emailoptional": "Email adresı (kürsätü mäcbür tügel)",
        "createacct-another-email-ph": "Elektron xatlaşu adresığıznı kertegez",
        "createaccountmail": "Waqıtlıça oçraqlı sersüz qullan häm anı kürsätelgän elektron xatlaşu adresına yulla",
        "createacct-realname": "Çın isemegez (kürsätü mäcbüri tügel)",
-       "createaccountreason": "Säbäp:",
        "createacct-reason": "Säbäp",
        "createacct-reason-ph": "İkençe xisap yazmanı buldıru säbäben",
        "createacct-submit": "Xisap yazmağıznı tözegez",
        "saveprefs": "Saqlaw",
        "restoreprefs": "Baştağı köylänmälärne kire qaytaru",
        "prefs-editing": "Üzgärtü",
-       "rows": "Yullar:",
-       "columns": "Bağanalar:",
        "searchresultshead": "Ezläw",
        "stub-threshold": "<a href=\"#\" class=\"stub\">Yasalma sıltamalarnıñ</a> bizäleşe buyınça çikläwlär (baytlarda):",
        "stub-threshold-disabled": "Yabılğan",
        "rcshowhidemine": "minem üzgärtüläremne $1",
        "rcshowhidemine-show": "Kürsätü",
        "rcshowhidemine-hide": "Yäşerü",
-       "rclinks": "Soñğı $2 kön eçendä soñğı $1 üzgärtüne kürsät<br />$3",
+       "rclinks": "Soñğı $2 kön eçendä soñğı $1 üzgärtüne kürsät",
        "diff": "ayırma",
        "hist": "tarix",
        "hide": "yäşer",
        "revdelete-restricted": "çikläwlär idaräçelärgä dä qullanıla",
        "logentry-newusers-create": "$1 qullanuçı xisap yazması {{GENDER:$2|tözelde}}",
        "rightsnone": "(yuq)",
-       "revdelete-summary": "üzgärtülär taswirlaması",
        "feedback-back": "Kire qaytu",
        "feedback-cancel": "Baş tartu",
        "feedback-close": "Yasaldı",
index c357658..9b9a469 100644 (file)
        "yourpasswordagain": "Чажыт сөзүңерни катап бижиңер:",
        "login": "Кирери",
        "nav-login-createaccount": "Кирери / бүрүткел бижикти чогаадыры",
-       "userlogin": "Кирери / бүрүткел бижикти чогаадыры",
-       "userloginnocreate": "Кирери",
        "logout": "Үнери",
        "userlogout": "Үнери",
        "notloggedin": "Кирбес",
-       "nologin": "Силерде бүрүткел бижик чок? $1",
-       "nologinlink": "Бүрүткел бижикти бүдүрери",
        "createaccount": "Бүрүткел бижикти бүдүрери",
-       "gotaccount": "Силер бүрүтекнип алдыңар де? '''$1'''.",
-       "gotaccountlink": "Кирер",
-       "userlogin-resetlink": "Кирер бижик-саныңар уттуп алдыңар бе?",
        "createaccountmail": "Э-чагаадан",
-       "createaccountreason": "Чылдагаан:",
        "badretype": "Силерниң парлаан чажыт сөзүңер таарышпас.",
        "userexists": "Силерниң парлаан адыңар амгы үеде ажыглаттынып турар.\nӨске аттан шилип алыңар.",
        "loginerror": "Кирип шыдавадың, сени танываан боор",
        "right-move": "Арыннарны шимчээри",
        "right-movefile": "Файлдарны шимчээри",
        "right-writeapi": "API-ни бижикке ажыглаары",
-       "right-editusercssjs": "Өске ажыглакчыларның CSS база Javascript файлдарын өскертири.",
        "right-editusercss": "Өске ажыглакчыларның CSS файлдарын өскертири.",
        "right-edituserjs": "Өске ажыглакчыларның JavaScript файлдарын өскертири.",
        "newuserlogpage": "Киржикчилер бүрүткээр дептер",
        "rcshowhidemine": "$1 боттуң эдилгелери",
        "rcshowhidemine-show": "көргүзер",
        "rcshowhidemine-hide": "чажырар",
-       "rclinks": "Чоокку $2 хүн иштинде сөөлгү $1 өскерлиишкиннерни көргүзер<br />$3",
+       "rclinks": "Чоокку $2 хүн иштинде сөөлгү $1 өскерлиишкиннерни көргүзер",
        "diff": "ылгал",
        "hist": "төөгү",
        "hide": "Чажырар",
index a5dbfef..33020c4 100644 (file)
        "category_header": "«$1» категориысь бамъёс",
        "subcategories": "Подкатегориос",
        "category-media-header": "«$1» категориысь файлъёс",
-       "category-empty": "''Та категориын али бамъёс но, файлъёс но ӧвӧл.''",
+       "category-empty": "<em>Та категориын али бамъёс но, файлъёс но ӧвӧл.</em>",
        "hidden-categories": "{{PLURAL:$1|1=Ватэм категория|Ватэм категориос}}",
        "hidden-category-category": "Ватэм категориос",
        "category-subcat-count": "{{PLURAL:$2|1=Со категориын одӥг подкатегория гинэ.|Возьматэмын $1 {{PLURAL:$1|подкатегория|подкатегориос}} $2 пӧлысь.}}",
        "viewyourtext": "Тӥ быгатӥськоды та бамез <strong>тӥляд тупатонъёстылэсь</strong> кодзэс учкыны но кӧчырыны.",
        "protectedinterface": "Та бам возе интерфейс текстэз та викилэн программной обеспечениезлы. Вандализмез палэнтон понна со утемын воштонъёслэсь.\nВань викиослы берыктэмъёсты ватсалляны яке вошъяны вылысь, тауна, MediaWiki локализацияя сайтэ выжелэ — [https://translatewiki.net/ translatewiki.net].",
        "editinginterface": "<strong>Сак луэ:</strong> Тӥ тупатӥськоды бамез, кудӥз возе программной обеспеченилэсь интерфейс текстсэ.\nТа бамез тупатон воштоз интерфейсэз возьматонэз мукет викиавторъёслы та викиын.",
-       "namespaceprotected": "Тон дорын редактировать карыны бам ӧвӧл юаське <кужмо>$1</strong> инты нимъёс.",
+       "namespaceprotected": "Тон дорын редактировать карыны бам ӧвӧл юаське <strong>$1</strong> инты нимъёс.",
        "exception-nologin": "Ӧд пыре системае",
        "logouttext": "<strong>Тӥ ужан сеансэз йылпумъяды.</strong>\n\nКуд-огез бамъёс возьматӥськыны на быгато озьы, тӥ авторизовать каремын на кадь. Талы пумит нюръяськон понна бушатэ браузерлэсь кэшсэ.",
        "welcomeuser": "Гажаса ӧтиськом, $1!",
        "yourdomainname": "Тӥляд доменды:",
        "login": "Пырыны",
        "nav-login-createaccount": "Нимдэс вераны / Регистрациез ортчытыны",
-       "userlogin": "Регистрациез ортчытыны яке Википедие пырыны",
-       "userloginnocreate": "Пырыны",
        "logout": "Кошкыны",
        "userlogout": "Потыны",
        "notloggedin": "Ӧд пыре системае",
        "userlogin-noaccount": "Ас учётной записьты ӧвӧл?",
        "userlogin-joinproject": "Проектэ пыриськоно",
-       "nologin": "Учётной запись ӧвӧл? $1.",
-       "nologinlink": "Учётной записез кылдытыны",
        "createaccount": "Выль викиавторлэн регистрациез",
-       "gotaccountlink": "Пырелэ",
        "userlogin-resetpassword-link": "Тӥлесьтыд парольдэс куштыны?",
        "userlogin-helplink2": "Пыронъя юрттэт",
        "createacct-emailrequired": "Электрон почталэн адресэз",
        "currentrevisionlink": "Алиез версия",
        "cur": "али",
        "last": "азьв.",
-       "history-fieldset-title": "Историез учкыны",
-       "history-show-deleted": "Ӵушылэмъёссэ гинэ",
+       "history-fieldset-title": "Историез воштӥськон понна",
+       "history-show-deleted": "Ӵотаны ӵушылэмъёссэ гинэ",
        "rev-delundel": "возьматыны/ватыны",
        "rev-showdeleted": "возьматоно",
        "revdelete-show-file-submit": "Бен",
        "prefs-editing": "Тупатон",
        "yourlanguage": "Интерфейслэн кылыз:",
        "prefs-preview": "Бамез эскерон",
-       "userrights": "Пыриськисьлэн правоосыныз кивалтон",
+       "userrights": "Пыриськисьлэн правоосыныз",
        "editusergroup": "Викиавторлэсь группаоссэ возьматыны",
        "group-autoconfirmed": "Авто-юнматэм викиавторъёс",
        "group-bot": "Ботъёс",
        "rcshowhidemine-hide": "Ватыны",
        "rcshowhidecategorization-show": "Возьматыны",
        "rcshowhidecategorization-hide": "Ватыны",
-       "rclinks": "Возьматыны $1 берло воштонэз $2 нуналскын<br />$3",
+       "rclinks": "Возьматыны $1 берло воштонэз $2 нуналскын",
        "diff": "пӧрт.",
        "hist": "история",
        "hide": "Ватыны",
        "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|1=Метка|Меткаос}}]]: $2)",
        "tags-title": "Меткаос",
        "logentry-delete-delete": "$1 {{GENDER:$2|быдтӥз}} $3 бамез",
-       "logentry-delete-restore": "$1 {{GENDER:$2|берен сётӥз}} $3 бамез",
+       "logentry-delete-restore": "$1 {{GENDER:$2|берен сётӥз}} $3 бамез ($4)",
        "logentry-block-block": "$1 {{GENDER:$2|заблокировать кариз}} {{GENDER:$4|$3}} дырлы: $5 $6",
+       "logentry-block-unblock": "$1 {{GENDER:$2|разблокировать кариз}} {{GENDER:$4|$3}}",
        "logentry-block-reblock": "$1 {{GENDER:$2|воштӥз}} блокировкалэсь йылпумъянзэ {{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",
index edd0508..85af31a 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": "تىزىمغا كىرىش تەپسىلاتىنى ئۇنۇتتىڭىز؟",
        "userlogin-resetpassword-link": "پارولىڭىزنى ئۇنتۇپ قالدىڭىزمۇ؟",
        "userlogin-loggedin": "سىز ئاللىقاچان {{GENDER:$1|$1}} ھالىتىدە تىزىمغا كىرىپ بولدىڭىز. تۆۋەندىكىلەرنى تولدۇرۇپ باشقا ئىشلەتكۈچى ھالىتىدە تىزىمغا كىرىڭ.",
        "userlogin-createanother": "باشقا ھېسابات قۇرىمەن",
        "createacct-another-email-ph": "ئېلخەت ئادرېسى كىرگۈزۈڭ",
        "createaccountmail": "ۋاقىتلىق ئىختىيارىي پارولنى ئىشلەت ھەمدە بەلگىلەنگەن ئېلېكتىرونلۇق خەت ئادرېسىغا ئەۋەت",
        "createacct-realname": "ھەقىقى ئىسمىڭىز (ئىختىيارى)",
-       "createaccountreason": "سەۋەب:",
        "createacct-reason": "سەۋەبى",
        "createacct-reason-ph": "نېمىشقا باشقا ھېسابات قۇرماقچى بولدىڭىز",
        "createacct-submit": "ھېساباتىڭىزنى قۇرۇڭ",
        "passwordreset-emaildisabled": "بۇ ۋىكىدا ئېلخەت ئىقتىدار چەكلەنگەن.",
        "passwordreset-username": "ئىشلەتكۈچى نامى:",
        "passwordreset-domain": "دائىرە:",
-       "passwordreset-capture": "ھاسىل قىلىنغان ئېلخەتنى كۆرسىتەمدۇ؟",
-       "passwordreset-capture-help": "ئەگەر بۇ رامكا تاللانسا، ئېلخەت (ۋاقىتلىق پارولنى ئۆز ئىچىگە ئالىدۇ) كۆرسىتىپ ئىشلەتكۈچىگە يوللايدۇ.",
        "passwordreset-email": "ئېلخەت ئادرېس",
        "passwordreset-emailtitle": "{{SITENAME}} دىكى ھېسابات تەپسىلاتى",
        "passwordreset-emailtext-ip": "باشقىلار (بەلكىم سىز، IP ئادرېسى $1) {{SITENAME}} ($4) دىكى پارولنى قايتا بېكىتىشنى ئىلتىماس قىلدى. تۆۋەندىكى ئىشلەتكۈچىنىڭ {{PLURAL:$3|ھېسابات|ھېسابات}}ى مۇشۇ ئېلخەتكە باغلانغان:\n\n$2\n\n{{PLURAL:$3|بۇ ۋاقىتلىق پارول|بۇ ۋاقىتلىق پارول}} {{PLURAL:$5|بىر كۈن|$5 كۈن}}دە ۋاقتى ئۆتىدۇ. ئەگەر بۇ مەشغۇلاتنى سىز ئىلتىماس قىلغان بولسىڭىز، دەرھال تىزىمغا كىرىپ يېڭى پارولدىن بىرنى تاللاڭ.\nسىز بەلگىلىگەن يېڭى پارول  {{PLURAL:$5|كۈن|$5 كۈن}}دە ۋاقتى توشىدۇ. ئەگەر باشقىلار ئىلتىماس قىلغان بولسا ياكى ئۆزىڭىز بەلگىلىگەن پارول ئېسىڭىزگە كېلىپ ئۇنى ئۆزگەرتمىسىڭىز، \nبۇ ئۇچۇرغا پەرۋا قىلماي ئۆزىڭىزنىڭ كونا پارولىنى ئىشلىتىۋېرىڭ.",
        "saveprefs": "ساقلا",
        "restoreprefs": "بارلىق كۆڭۈلدىكى تەڭشەكنى ئەسلىگە كەلتۈر (بارلىق بۆلەكلەردە)",
        "prefs-editing": "تەھرىر",
-       "rows": "قۇر:",
-       "columns": "ستون:",
        "searchresultshead": "ئىزدە",
        "stub-threshold": "<a href=\"#\" class=\"stub\">قىسقا بەت ئۇلانمىسى</a> فورمات چەك قىممىتى (بايت) :",
        "stub-threshold-disabled": "چەكلەنگەن",
        "userrights-reason": "سەۋەب:",
        "userrights-no-interwiki": "باشقا wiki دىكى ئىشلەتكۈچىلەرنىڭ ھوقۇقىنى ئۆزگەرتىش ھوقۇقىڭىز يوق.",
        "userrights-nodatabase": "$1 ساندان مەۋجۇد ئەمەس ياكى يەرلىك ئوروندا ئەمەس.",
-       "userrights-nologin": "سىز چوقۇم باشقۇرغۇچى سۈپىتىدە [[Special:UserLogin|تىزىمغا كىر]]ىپ ئاندىن ئىشلەتكۈچى ھوقۇقىنى بەلگىلىيەلەيسىز.",
-       "userrights-notallowed": "ھېساباتىڭىزنىڭ ئىشلەتكۈچى ھوقۇقىنى قوشۇش ياكى ئۆزگەرتىش ھوقۇقى يوق.",
        "userrights-changeable-col": "سىز ئۆزگەرتەلەيدىغان گۇرۇپپا",
        "userrights-unchangeable-col": "سىز ئۆزگەرتەلمەيدىغان گۇرۇپپا",
        "userrights-irreversible-marker": "$1*",
        "right-protect": "قوغداش دەرىجىسىنى ئۆزگەرتىپ، قوغدالغان بەتنى تەھرىرلە",
        "right-editprotected": "قوغدالغان بەتنى تەھرىرلە (زەنجىرسىمان قۇلۇپلانمىغان)",
        "right-editinterface": "ئىشلەتكۈچى كۆرۈنمە يۈزىنى تەھرىرلە",
-       "right-editusercssjs": "باشقا ئىشلەتكۈچىنىڭ CSS ۋە JS ھۆججىتىنى تەھرىرلە",
        "right-editusercss": "باشقا ئىشلەتكۈچىنىڭ CSS ھۆججىتىنى تەھرىرلە",
        "right-edituserjs": "باشقا ئىشلەتكۈچىنىڭ  JS ھۆججىتىنى تەھرىرلە",
        "right-editmyusercss": "ئۆزىڭىزنىڭ CSS ھۆججىتىڭىزنى تەھرىرلەڭ",
        "right-siteadmin": "ساندان قۇلۇپلا ۋە قۇلۇپ ئاچ",
        "right-override-export-depth": "بەت قەۋەتلىك ئۇلىنىشى بار بەتنى چىقار",
        "right-sendemail": "باشقا ئىشلەتكۈچىگە ئېلخەت يوللا",
-       "right-passwordreset": "پارول ئەسلىگە قايتۇرۇش ئېلخەت ئادرېس كۆرۈش.",
        "newuserlogpage": "ئىشلەتكۈچى قۇرغان خاتىرە",
        "newuserlogpagetext": "(چەكلەنگەن)",
        "rightslog": "ئىشلەتكۈچى ھوقۇق خاتىرىسى",
        "rcshowhideanons": "$1 ئىمزاسىز ئىشلەتكۈچى تەھرىرى",
        "rcshowhidepatr": "$1 كۆزىتىلگەن تەھرىر",
        "rcshowhidemine": "$1 مېنىڭ تەھرىرىم",
-       "rclinks": "يېقىنقى $2 كۈن ئىچىدىكى ئەڭ يېڭى  $1 قېتىملىق ئۆزگەرتىشنى كۆرسەت. <br />$3",
+       "rclinks": "يېقىنقى $2 كۈن ئىچىدىكى ئەڭ يېڭى  $1 قېتىملىق ئۆزگەرتىشنى كۆرسەت.",
        "diff": "پەرق",
        "hist": "تارىخ",
        "hide": "يوشۇر",
        "undeleteviewlink": "كۆرسەت",
        "undeleteinvert": "ئەكسىچە تاللا",
        "undeletecomment": "سەۋەب:",
-       "undeletedrevisions": "{{PLURAL:$1|1 تۈزىتىش|$1 تۈزىتىش}} ئەسلىگە كەلتۈرۈلدى",
-       "undeletedrevisions-files": "{{PLURAL:$1|1 تۈزىتىش|$1 تۈزىتىش}} ۋە {{PLURAL:$2|1 ھۆججەت|$2 ھۆججەت}}  ئەسلىگە كەلتۈرۈلدى",
-       "undeletedfiles": "{{PLURAL:$1|1 ھۆججەت|$1 ھۆججەت}}  ئەسلىگە كەلتۈرۈلدى",
        "cannotundelete": "ئەسلىگە كەلتۈرۈش مەغلۇپ بولدى:\n$1",
        "undeletedpage": "'''$1 ئەسلىگە كەلتۈرۈلدى'''\n\n [[Special:Log/delete|ئۆچۈرۈش خاتىرىسى]]دىن پايدىلىنىپ ئۆچۈر ۋە ئەسلىگە كەلتۈر خاتىرىسىنى كۆرۈڭ.",
        "undelete-header": "يېقىنقى خاتىرىنى سۈرۈشتۈرمەكچى بولسىڭىز [[Special:Log/delete|ئۆچۈرۈش خاتىرىسى]]دىن پايدىلىنىڭ.",
        "logentry-rights-rights-legacy": "$3 نىڭ ئىشلەتكۈچى گۇرۇپپىسىنى $1 ئۆزگەرتتى",
        "logentry-rights-autopromote": "$1 نىڭ ئىشلەتكۈچى گۇرۇپپىسى ئۆزلۈكىدىن $4 دىن $5 غا يۈكسەلدى",
        "rightsnone": "(يوق)",
-       "revdelete-summary": "ئۈزۈندە تەھرىرلە",
        "feedback-adding": "قايتۇرما ئىنكاسنى بەتكە قوشۇۋاتىدۇ…",
        "feedback-bugcheck": "قالتىس! كەمتۈكنىڭ ئاللىبۇرۇن يوللانغان [$1 مەلۇملۇق كەمتۈك] ياكى ئەمەسلىكىنى تەكشۈرۈڭ.",
        "feedback-bugnew": "تەكشۈردۈم. يېڭى بىر كەمتۈك دوكلات قىل",
        "feedback-thanks": "كۆپ رەھمەت! قايتۇرما ئىنكاسىڭىز \"[$2 $1]\" بەتكە يوللاندى.",
        "searchsuggest-search": "ئىزدەش",
        "searchsuggest-containing": "ئىچىدە…",
-       "api-error-badaccess-groups": "ھۆججەتنى بۇ ۋىكىغا يۈكلەش ھوقۇقىڭىز يوق.",
        "api-error-badtoken": "ئىچكى خاتالىق: سۆزلىشىش ئىناۋەتسىز.",
-       "api-error-copyuploaddisabled": "URL ئارقىلىق يوللايدىغان ئىقتىدارنى بۇ مۇلازىمېتىر چەكلىگەن.",
-       "api-error-duplicate": "تورتۇرادا ئوخشاش مەزمۇندىكى {{PLURAL:$1|is باشقا ھۆججەت|بەزى باشقا ھۆججەتلەر}} مەۋجۇت.",
-       "api-error-duplicate-archive": "تورتۇرادا ئىلگىرى ئوخشاش مەزمۇن بار {{PLURAL:$1|was باشقا بىر ھۆججەت|were باشقا ھۆججەتلەر}} مەۋجۇت ئەمما ئۆچۈرۈلگەن.",
-       "api-error-empty-file": "يوللىغان ھۆججىتىڭىز بوش.",
        "api-error-emptypage": "يېڭىدىن قۇرۇش، قۇرۇق بەت يول قۇيۇلمايدۇ.",
-       "api-error-fetchfileerror": "ئىچكى خاتالىق: ھۆججەتكە ئېرىشىۋاتقاندا خاتالىق كۆرۈلدى.",
-       "api-error-fileexists-forbidden": "\"$1\" ئاتلىق ھۆججەت مەۋجۇت، ئۇنى قاپلىغىلى بولمايدۇ.",
-       "api-error-fileexists-shared-forbidden": "\"$1\" ئاتلىق ھۆججەت ھەمبەھىر ۋاستە ئامبىرىدا مەۋجۇت، ئۇنى قاپلىغىلى بولمايدۇ.",
-       "api-error-file-too-large": "يوللىغان ھۆججىتىڭىز بەك چوڭ.",
-       "api-error-filename-tooshort": "ھۆججەت ئاتى بەك قىسقا.",
-       "api-error-filetype-banned": "بۇ خىل ھۆججەت چەكلەنگەن.",
-       "api-error-filetype-banned-type": "$1 {{PLURAL:$4| ھۆججەت تىپىنى قوللىمايدۇ}}. قوللايدىغان {{PLURAL:$3|ھۆججەت تىپى}} $2.",
-       "api-error-filetype-missing": "بۇ ھۆججەتنىڭ كېڭەيتىلگەن ئاتى يوق.",
-       "api-error-hookaborted": "سىز سىنىغان ئۆزگەرتىشنى قىستۇرما توختاتتى.",
-       "api-error-http": "ئىچكى خاتالىق:مۇلازىمېتىرغا باغلىنالمىدى.",
-       "api-error-illegal-filename": "ھۆججەت ئاتىغا يول قويمايدۇ.",
-       "api-error-internal-error": "ئىچكى خاتالىق:سىز يۈكلىگەن ھۆججەتنى بىرتەرەپ قېلىش جەريانىدا مەسىلە كۆرۈلدى.",
-       "api-error-invalid-file-key": "ئىچكى خاتالىق: ۋاقىتلىق ساقلىغۇچتا ھۆججەت تېپىلمىدى.",
-       "api-error-missingparam": "ئىچكى خاتالىق: ئىلتىماستا پارامېتىر كەم.",
-       "api-error-missingresult": "ئىچكى خاتالىق: كۆچۈرۈشنىڭ مۇۋەپپەقىيەتلىك ياكى ئەمەسلىكىنى جەزملىيەلمىدى.",
-       "api-error-mustbeloggedin": "ھۆججەت يوللاش ئۈچۈن تىزىملىتىڭ.",
-       "api-error-mustbeposted": "ئىچكى خاتالىق: ئىلتىماستا HTTP POST زۆرۈر.",
-       "api-error-noimageinfo": "مۇۋەپپەقىيەتلىك يۈكلەندى ئەمما مۇلازىمېتىر ھۆججەتكە مۇناسىۋەتلىك ئۇچۇر بەرمىدى.",
-       "api-error-nomodule": "ئىچكى خاتالىق: يۈكلەش مودېل توپلىمى يوق.",
-       "api-error-ok-but-empty": "ئىچكى خاتالىق: مۇلازىمېتىردا ئىنكاس يوق.",
-       "api-error-overwrite": "مەۋجۇد ھۆججەت قاپلاشقا يول قويمايدۇ.",
-       "api-error-stashfailed": "ئىچكى خاتالىق: مۇلازىمېتىر ۋاقىتلىق ھۆججەتنى ساقلىيالمىدى.",
        "api-error-publishfailed": "ئىچكى خاتالىق: مۇلازىمېتىر ۋاقىتلىق ھۆججەتنى تارقىتالمىدى.",
-       "api-error-timeout": "مۇلازىمەت كومپيۇتېر كۆتكەن ۋاقتا ئىنكاس قايتۇرمىدى.",
-       "api-error-unclassified": "نامەلۇم خاتالىق كۆرۈلدى.",
-       "api-error-unknown-code": "نامەلۇم خاتالىق:\"$1\"",
-       "api-error-unknown-error": "ئىچكى خاتالىق: ھۆججىتىڭىزنى يۈكلەشنى سىناۋاتقاندا خاتالىق كۆرۈلدى.",
+       "api-error-stashfailed": "ئىچكى خاتالىق: مۇلازىمېتىر ۋاقىتلىق ھۆججەتنى ساقلىيالمىدى.",
        "api-error-unknown-warning": "نامەلۇم ئاگاھلاندۇرۇش:\"$1\"",
        "api-error-unknownerror": "نامەلۇم خاتالىق:\"$1\"",
-       "api-error-uploaddisabled": "بۇقامۇسدا يوللاش مەجرۇھنى قىلىندى.",
-       "api-error-verification-error": "ھۆججەت بۇزۇلغان بولۇشى مۇمكىن ياكى كېڭەيتىلگەن ئاتى خاتا.",
        "duration-seconds": "$1 {{PLURAL:$1|سېكۇنت}}",
        "duration-minutes": "$1 {{PLURAL:$1|مىنۇت}}",
        "duration-hours": "$1 {{PLURAL:$1|سائەت}}",
index 656d81a..b0220e4 100644 (file)
        "redirectedfrom": "(Перенаправлено з $1)",
        "redirectpagesub": "Сторінка-перенаправлення",
        "redirectto": "Перенаправити на:",
-       "lastmodifiedat": "ЦÑ\8e Ñ\81Ñ\82оÑ\80Ñ\96нкÑ\83 Ð²Ð¾Ñ\81Ñ\82аннÑ\94 Ð·Ð¼Ñ\96нено: $2, $1.",
+       "lastmodifiedat": "ЦÑ\8e Ñ\81Ñ\82оÑ\80Ñ\96нкÑ\83 Ð²Ð¾Ñ\81Ñ\82аннÑ\94 Ð²Ñ\96дÑ\80едаговано Ð¾ $2, $1.",
        "viewcount": "Цю сторінку переглядали $1 {{PLURAL:$1|раз|рази|разів}}.",
        "protectedpage": "Захищена сторінка",
        "jumpto": "Перейти до:",
        "readonlywarning": "<strong>Попередження: База даних заблокована на обслуговування, тому, на даний момент, ви не можете записати ваші зміни.\n</strong>\nМожливо, вам варто скопіювати текст у файл на вашому комп'ютері й зберегти його на пізніше.\n\nАдміністратор, що заблокував базу даних, залишив наступне пояснення: $1",
        "protectedpagewarning": "'''Попередження: Ця сторінка була захищена від змін так, що тільки користувачі з правами адміністратора можуть її редагувати.'''\nОстанній запис журналу наведений нижче для довідки:",
        "semiprotectedpagewarning": "'''Зауваження:''' Ця сторінка захищена так, що її можуть редагувати тільки зареєстровані користувачі.\nОстанній запис журналу наведений нижче для довідки:",
-       "cascadeprotectedwarning": "<strong>Попередження:</strong> Цю сторінку можуть редагувати лише користувачі з правами адміністратора, оскільки вона включена на {{PLURAL:$1|1=сторінці|сторінках}}, де встановлено каскадний захист:",
+       "cascadeprotectedwarning": "<strong>Попередження:</strong> Цю сторінку можуть редагувати лише користувачі зі [[Special:ListGroupRights|специфічними правами]], оскільки вона включена на {{PLURAL:$1|1=сторінці|сторінках}}, де встановлено каскадний захист:",
        "titleprotectedwarning": "'''Попередження. Ця сторінка була захищена так, що для її створення потрібні [[Special:ListGroupRights|особливі права]].'''\nОстанній запис журналу наведений нижче для довідки:",
        "templatesused": "{{PLURAL:$1|1=Шаблон, використаний|Шаблони, використані}} на цій сторінці:",
        "templatesusedpreview": "{{PLURAL:$1|1=Шаблон, використаний|Шаблони, використані}} у цьому попередньому перегляді:",
        "userrights-lookup-user": "Виберіть користувача",
        "userrights-user-editname": "Введіть ім'я користувача:",
        "editusergroup": "Завантажити групи користувачів",
-       "editinguser": "Зміна прав {{GENDER:$1|користувача}} <strong>[[User:$1|$1]]</strong> $2",
+       "editinguser": "Зміна прав {{GENDER:$1|користувача|користувачки}} <strong>[[User:$1|$1]]</strong> $2",
        "viewinguserrights": "Перегляд прав {{GENDER:$1|користувача|користувачки}} <strong>[[User:$1|$1]]</strong> $2",
        "userrights-editusergroup": "Змінити групи {{GENDER:$1|користувача|користувачки}}",
        "userrights-viewusergroup": "Перегляд груп {{GENDER:$1|користувача|користувачки}}",
        "right-editsemiprotected": "редагування сторінок з рівнем захисту «{{int:protect-level-autoconfirmed}}»",
        "right-editcontentmodel": "Редагувати модель вмісту сторінки",
        "right-editinterface": "редагування інтерфейсу користувача",
-       "right-editusercssjs": "редагування CSS- і JS-файлів інших користувачів",
        "right-editusercss": "редагування CSS-файлів інших користувачів",
        "right-edituserjs": "редагування JS-файлів інших користувачів",
        "right-editmyusercss": "редагування власних CSS-файлів користувача",
        "rcfilters-hideminor-conflicts-typeofchange": "Певні типи змін не можна позначити як «незначні», тож цей фільтр конфліктує з такими фільтрами за типом змін: $1",
        "rcfilters-typeofchange-conflicts-hideminor": "Цей фільтр за типом змін конфліктує з фільтром «Незначні редагування». Певні типи змін не можна позначати як «незначні».",
        "rcnotefrom": "Нижче знаходяться {{PLURAL:$5|редагування}} з <strong>$3, $4</strong> (відображено до <strong>$1</strong>).",
+       "rclistfromreset": "Скинути вибір дати",
        "rclistfrom": "Показати редагування починаючи з $3 $2.",
        "rcshowhideminor": "$1 незначні редагування",
        "rcshowhideminor-show": "Показати",
        "rcshowhidecategorization": "$1 категоризацію сторінок",
        "rcshowhidecategorization-show": "Показати",
        "rcshowhidecategorization-hide": "Приховати",
-       "rclinks": "Показати останні $1 редагувань за $2 днів<br />$3",
+       "rclinks": "Показати останні $1 редагувань за $2 днів",
        "diff": "різн.",
        "hist": "історія",
        "hide": "сховати",
        "php-uploaddisabledtext": "Завантаження файлів вимкнене у налаштуваннях PHP. Будь ласка, перевірте значення file_uploads.",
        "uploadscripted": "Файл містить HTML-код або скрипт, який може неправильно обробитися браузером.",
        "upload-scripted-pi-callback": "Неможливо завантажити файл, що містить інструкції опрацювання таблиці стилів XML.",
+       "upload-scripted-dtd": "Неможливо завантажувати SVG-файли, які містять нестандартну декларацію DTD.",
        "uploaded-script-svg": " \t\t\nЗнайдений небезпечний елемент з підтримкою сценаріїв «$1» в завантаженому файлі SVG.",
        "uploaded-hostile-svg": " \t\nЗнайдений небезпечний CSS-код в елементі стилю завантаженого файлу SVG.",
        "uploaded-event-handler-on-svg": " \t\nУстановка атрибутів обробника подій <code>$1=\"$2\"</code> не дозволено для SVG-файлів.",
        "undeleteviewlink": "переглянути",
        "undeleteinvert": "Інвертувати виділення",
        "undeletecomment": "Причина:",
-       "undeletedrevisions": "$1 {{PLURAL:$1|редагування|редагування|редагувань}} відновлено",
-       "undeletedrevisions-files": "$1 {{PLURAL:$1|версія|версії|версій}} та $2 {{PLURAL:$2|файл|файли|файлів}} відновлено",
-       "undeletedfiles": "$1 {{PLURAL:$1|файл|файли|файлів}} відновлено",
        "cannotundelete": "Частина або вся процедура відновлення зазнала невдачі:\n$1",
        "undeletedpage": "'''Сторінка «$1» відновлена'''\n\nДив. [[Special:Log/delete|список вилучень]], щоб дізнатися про останні вилучення та відновлення.",
        "undelete-header": "Список нещодавно вилучених сторінок можна переглянути в [[Special:Log/delete|журналі вилучень]].",
        "sp-contributions-uploads": "завантаження",
        "sp-contributions-logs": "журнали",
        "sp-contributions-talk": "обговорення",
-       "sp-contributions-userrights": "управління правами користувача",
+       "sp-contributions-userrights": "управління правами {{GENDER:$1|користувача|користувачки}}",
        "sp-contributions-blocked-notice": "Цей користувач наразі заблокований. Останній запис у журналі блокувань такий:",
        "sp-contributions-blocked-notice-anon": "Доступ з цієї IP-адреси зараз заблокований.\nДалі наведено останній запис з журналу блокувань:",
        "sp-contributions-search": "Пошук внеску",
        "unblocked-id": "Блокування $1 було зняте.",
        "unblocked-ip": "[[Special:Contributions/$1|$1]] розблоковано.",
        "blocklist": "Заблоковані користувачі",
+       "autoblocklist": "Автоблокування",
+       "autoblocklist-submit": "Пошук",
+       "autoblocklist-legend": "Вивести список автоблокувань",
+       "autoblocklist-localblocks": "{{PLURAL:$1|Локальне|Локальні}} автоблокування",
+       "autoblocklist-empty": "Список автоблокувань порожній.",
+       "autoblocklist-otherblocks": "{{PLURAL:$1|Інше|Інші}} автоблокування",
        "ipblocklist": "Список заблокованих адрес та користувачів",
        "ipblocklist-legend": "Пошук заблокованого користувача",
        "blocklist-userblocks": "Сховати блокування облікових записів",
        "tooltip-pt-mycontris": "{{GENDER:|Ваш}} внесок",
        "tooltip-pt-anoncontribs": "Список редагувань, зроблених з цієї IP-адреси",
        "tooltip-pt-login": "Заохочуємо Вас увійти в систему, але це необов'язково.",
+       "tooltip-pt-login-private": "Вам треба увійти в систему, щоб використовувати цю вікі",
        "tooltip-pt-logout": "Вийти з системи",
        "tooltip-pt-createaccount": "Пропонуємо створити обліковий запис і увійти в систему; однак, це не обов'язково",
        "tooltip-ca-talk": "Обговорення змісту сторінки",
        "anonymous": "{{PLURAL:$1|1=Анонімний користувач|Анонімні користувачі}} {{grammar:genitive|{{SITENAME}}}}",
        "siteuser": "Користувач {{grammar:genitive|{{SITENAME}}}} $1",
        "anonuser": "анонімний користувач {{grammar:genitive|{{SITENAME}}}} $1",
-       "lastmodifiedatby": "Ð\9eÑ\81Ñ\82аннÑ\8f Ð·Ð¼Ñ\96на $2, $1 ÐºÐ¾Ñ\80иÑ\81Ñ\82Ñ\83ваÑ\87ем $3.",
+       "lastmodifiedatby": "ЦÑ\8e Ñ\81Ñ\82оÑ\80Ñ\96нкÑ\83 Ð²Ð¾Ñ\81Ñ\82аннÑ\94 Ð²Ñ\96дÑ\80едаговано $3 Ð¾ $2, $1.",
        "othercontribs": "Базується на праці $1.",
        "others": "інші",
        "siteusers": "{{PLURAL:$2|1={{GENDER:$1|Користувач|Користувачка}}|Користувачі}} {{grammar:genitive|{{SITENAME}}}} $1",
        "confirmrecreate-noreason": "{{GENDER:$1|Користувач|Користувачка}} [[User:$1|$1]] ([[User talk:$1|обговорення]]) {{GENDER:$1|вилучив|вилучила}} цю сторінку після того, як Ви її почали редагувати. Будь ласка, підтвердіть, що Ви дійсно хочете її відновити.",
        "recreate": "Повторно створити",
        "unit-pixel": " пікс.",
+       "confirm-purge-title": "Очистити кеш цієї сторінки",
        "confirm_purge_button": "Гаразд",
        "confirm-purge-top": "Очистити кеш цієї сторінки?",
        "confirm-purge-bottom": "Після очищення кешу сторінки буде показана її остання версія.",
        "htmlform-user-not-valid": "<strong>$1</strong> не є дійсним іменем користувача.",
        "logentry-delete-delete": "$1 {{GENDER:$2|вилучив|вилучила}} сторінку $3",
        "logentry-delete-delete_redir": "$1 {{GENDER:$2|вилучив|вилучила}} перенаправлення $3 шляхом перезапису",
-       "logentry-delete-restore": "$1 {{GENDER:$2|відновив|відновила}} сторінку $3",
+       "logentry-delete-restore": "$1 {{GENDER:$2|відновив|відновила}} сторінку $3 ($4)",
+       "logentry-delete-restore-nocount": "$1 {{GENDER:$2|відновив|відновила}} сторінку $3",
+       "restore-count-revisions": "{{PLURAL:$1|$1 версія|$1 версії|$1 версій}}",
+       "restore-count-files": "{{PLURAL:$1|$1 файл|$1 файли|$1 файлів}}",
        "logentry-delete-event": "$1 {{GENDER:$2|змінив|змінила}} видимість {{PLURAL:$5 запису журналу|$5 записів журналу}} на $3: $4",
        "logentry-delete-revision": "$1 {{GENDER:$2|змінив|змінила}} видимість {{PLURAL:$5|$5 версії|$5 версій}} на сторінці $3: $4",
        "logentry-delete-event-legacy": "$1 {{GENDER:$2|змінив|змінила}} видимість записів журналу подій $3",
        "special-characters-group-thai": "Тайські",
        "special-characters-group-lao": "Лаоські",
        "special-characters-group-khmer": "Кхмерські",
+       "special-characters-group-canadianaboriginal": "Письмо канадських аборигенів",
        "special-characters-title-endash": "коротке тире",
        "special-characters-title-emdash": "довге тире",
        "special-characters-title-minus": "мінус",
        "restrictionsfield-help": "Одна IP-адреса або CIDR-діапазон на рядок. Щоб увімкнути все, використайте:<pre>0.0.0.0/0\n::/0</pre>",
        "revid": "версія $1",
        "pageid": "ID сторінки $1",
-       "rawhtml-notallowed": "Теги &lt;html&gt; не можна використовувати за межами звичайних сторінок."
+       "rawhtml-notallowed": "Теги &lt;html&gt; не можна використовувати за межами звичайних сторінок.",
+       "gotointerwiki": "Ви покидаєте сайт {{SITENAME}}",
+       "gotointerwiki-invalid": "Вказана назва була неприпустимою.",
+       "gotointerwiki-external": "Ви збираєтесь покинути сайт {{SITENAME}}, щоб відвідати проект [[$2]], який є окремим веб-сайтом.\n\n[$1 Клацніть тут, щоб продовжити, перейшовши до $1].",
+       "undelete-cantedit": "Ви не можете відновити цю сторінку, оскільки Ви не маєте прав на редагування цієї сторінки.",
+       "undelete-cantcreate": "Ви не можете відновити цю сторінку, оскільки сторінка з такою назвою не існує, і Ви не маєте прав на створення цієї сторінки."
 }
index 860697d..865d096 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}}  پہلے سے داخل نوشتہ (logged in) ہیں۔\nدوسرے کھاتہ سے داخل ہونے کے لیے درج ذیل خانے پر کریں۔",
        "createaccountmail": "عارضی پاسورڈ استعمال کریں اور اسے متعینہ برقی ڈاک پتہ پر ارسال کریں",
        "createaccountmail-help": "پاس ورڈ معلوم کیے بغیر کسی دوسرے شخص کا کھاتہ بنانے کے لیے اسے استعمال کیا جا سکتا ہے۔",
        "createacct-realname": "اصلی نام (اختیاری)",
-       "createaccountreason": "وجہ:",
        "createacct-reason": "وجہ",
        "createacct-reason-ph": "آپ دوسرا کھاتہ کیوں تخلیق کررہے ہیں",
        "createacct-reason-help": "نوشتہ کھاتہ سازی میں نظر آنے والا پیغام",
        "right-editsemiprotected": "\"{{int:protect-level-autoconfirmed}}\" کے طور پر محفوظ صفحات میں ترمیم",
        "right-editcontentmodel": "صفحہ کے مواد کے ماڈل میں ترمیم",
        "right-editinterface": "صارف انٹرفیس میں ترمیم",
-       "right-editusercssjs": "دیگر صارفین کی سی ایس ایس اور جاوا اسکرپٹ فائلوں میں ترمیم",
        "right-editusercss": "دیگر صارفین کی سی ایس ایس فائلوں میں ترمیم",
        "right-edituserjs": "دیگر صارفین کی جاوا اسکرپٹ فائلوں میں ترمیم",
        "right-editmyusercss": "اپنی ذاتی سی ایس ایس فائلوں میں ترمیم",
        "rcshowhidecategorization": "صفحاتی زمرہ بندی $1",
        "rcshowhidecategorization-show": "دکھائیں",
        "rcshowhidecategorization-hide": "چھپائیں",
-       "rclinks": "آخری $2 روز میں ہونے والی $1 تبدیلیوں کا مشاہدہ کریں<br />$3",
+       "rclinks": "آخری $2 روز میں ہونے والی $1 تبدیلیوں کا مشاہدہ کریں",
        "diff": "فرق",
        "hist": "تاریخچہ",
        "hide": "چھـپائیں",
        "undeleteviewlink": "دکھاؤ",
        "undeleteinvert": "انتخاب بالعکس",
        "undeletecomment": "وجہ:",
-       "undeletedrevisions": "{{PLURAL:$1|1 نظر ثانی|$1 نظر ثانیاں}} بحال",
-       "undeletedrevisions-files": "{{PLURAL:$1|1 نسخہ|$1 نسخے}} اور {{PLURAL:$2|1 فائل|$2 فائلیں}} بحال",
-       "undeletedfiles": "{{PLURAL:$1|1 فائل|$1 فائل}} بحال کی {{PLURAL:$1|گئی|گئیں}}",
        "cannotundelete": "کلی یا جزوی طور پر بحالی کا اقدام ناکام رہا:\n$1",
        "undeletedpage": "<strong>$1 کو بحال کر دیا گیا</strong>\n\nحالیہ حذف شدگیوں اور بحالیوں کا نوشتہ دیکھنے کے لیے [[Special:Log/delete|نوشتہ حذف شدگی]] ملاحظہ فرمائیں۔",
        "undelete-header": "حالیہ حذف شدہ صفحات کے لیے [[Special:Log/delete|نوشتۂ حذف شدگی]] دیکھیں۔",
        "logentry-tag-update-revision": "$1 نے صفحہ $3 کے نسخہ $4 پر موجود ٹیگوں کو {{GENDER:$2|تازہ کیا}} ({{PLURAL:$7|شامل کیا گیا|شامل کیے گئے}} $6؛ {{PLURAL:$9|حذف کیا گیا|حذف کیے گئے}} $8)",
        "logentry-tag-update-logentry": "$1 نے صفحہ $3 کے اندراج نوشتہ $5 پر موجود ٹیگوں کو {{GENDER:$2|تازہ کیا}} ({{PLURAL:$7|شامل کیا گیا|شامل کیے گئے}} $6؛ {{PLURAL:$9|حذف کیا گیا|حذف کیے گئے}} $8)",
        "rightsnone": "(کچھ نہیں)",
-       "revdelete-summary": "خلاصۂ تدوین",
        "feedback-adding": "صفحہ میں تبصرہ درج کیا جا رہا ہے۔۔۔",
        "feedback-back": "واپس",
        "feedback-bugcheck": "زبردست! جانچ لیں کہ کہیں پہلے ہی [$1 اس کی اطلاع نہ دے دی گئی ہو]۔",
index 99ab540..f07f473 100644 (file)
        "password-change-forbidden": "Siz bu vikida maxfiy soʻzni oʻzgartira olmaysiz.",
        "login": "Kirish",
        "nav-login-createaccount": "Kirish / Hisob yaratish",
-       "userlogin": "Kirish / Hisob yaratish",
-       "userloginnocreate": "Kirish",
        "logout": "Chiqish",
        "userlogout": "Chiqish",
        "notloggedin": "Siz tizimga kirmagansiz",
        "userlogin-noaccount": "Hisobingiz yoʻqmi?",
        "userlogin-joinproject": "{{SITENAME}}ga aʼzo boʻlish",
-       "nologin": "Hisobingiz yoʻqmi? '''$1'''.",
-       "nologinlink": "Hisob yaratish",
        "createaccount": "Hisob yaratish",
-       "gotaccount": "Hisobingiz bormi? '''$1'''.",
-       "gotaccountlink": "Kirish",
-       "userlogin-resetlink": "Kirish maʻlumotlaringiz esdan chiqdimi?",
        "userlogin-resetpassword-link": "Maxfiy so‘zni unutib qoʻydingizmi?",
        "userlogin-helplink2": "Kirish uchun yordam",
        "userlogin-loggedin": "Siz {{GENDER:$1|$1}} nomi bilan kirgansiz.\nBoshqa hisob raqami orqali kirish uchun quyidagi formadan foydalaning.",
        "createacct-another-email-ph": "Elektron pochta manzilini kiriting",
        "createaccountmail": "Tasodifan tanlab beriladigan vaqtinchalik maxfiy soʻzdan foydalanish (elektron pochta manzilingizga joʻnatiladi)",
        "createacct-realname": "Haqiqiy ismi (ixtiyoriy)",
-       "createaccountreason": "Sabab:",
        "createacct-reason": "Sabab",
        "createacct-reason-ph": "Nimaga yana boshqa hisob yaratyapsiz",
        "createacct-submit": "Hisob yaratish",
        "passwordreset-emaildisabled": "Email xususiyatlari ushbu vikida oʻchirib qoʻyilgan.",
        "passwordreset-username": "Foydalanuvchi nomi:",
        "passwordreset-domain": "Domen:",
-       "passwordreset-capture": "Xatni koʻrmoqchimisiz?",
        "passwordreset-email": "Elektron pochta manzilingiz:",
        "passwordreset-emailelement": "Foydalanuvchi ismi: \n$1\n\nVaqtinchalik maxfiy so'z: \n$2",
        "changeemail": "Elektron pochta manzilini oʻzgartirish",
        "saveprefs": "Saqlash",
        "restoreprefs": "Barcha moslamalarni dastlabki holatiga qaytarish",
        "prefs-editing": "Tahrirlash",
-       "rows": "Qatorlar soni:",
-       "columns": "Ustunlar soni:",
        "searchresultshead": "Qidiruv",
        "stub-threshold": "<a href=\"#\" class=\"stub\">Chala maqolalarga</a> ishorat keltirish uchun pastki chegara:",
        "stub-threshold-disabled": "Oʻchirib qoʻyilgan",
        "rcshowhidemine": "Oʻz tahrirlarimni $1",
        "rcshowhidemine-show": "koʻrsat",
        "rcshowhidemine-hide": "yashir",
-       "rclinks": "Oxirgi $2 kun ichida sodir boʻlgan $1 ta oʻzgarish koʻrsatildi<br />$3",
+       "rclinks": "Oxirgi $2 kun ichida sodir boʻlgan $1 ta oʻzgarish koʻrsatildi",
        "diff": "farq",
        "hist": "tarix",
        "hide": "yashir",
        "undeleteviewlink": "koʻrib chiqish",
        "undeleteinvert": "Tanlash tartibini almashtirish",
        "undeletecomment": "Sababi:",
-       "undeletedrevisions": "{{PLURAL:$1|1 ta oʻzgarish|$1 ta tahrirlar}} tiklandi",
-       "undeletedfiles": "{{PLURAL:$1|Bitta fayl|$1 ta fayl}} tiklandi",
        "undelete-search-title": "O'chirilgan sahifalarni qidirish",
        "undelete-search-box": "O'chirilgan sahifalarni qidirish",
        "undelete-search-prefix": "Bundan boshlangan sahifalarni koʻrsatish:",
        "feedback-close": "Bajarildi",
        "searchsuggest-search": "Qidiruv",
        "searchsuggest-containing": "ichida bu boʻlgan...",
-       "api-error-unknown-code": "Noaniq xato: \"$1\".",
        "api-error-unknownerror": "Noaniq xato: \"$1\".",
        "limitreport-title": "Tahlillagich maʼlumotlari:",
        "special-characters-group-latin": "Lotin",
index c72fc02..a12b4fc 100644 (file)
        "externaldberror": "Se xè verifegà n'erore con el server de autenticasion esterno, opure no se dispone de łe autorizasion nesesarie par ajornare el proprio aceso esterno.",
        "login": "Entra",
        "nav-login-createaccount": "Entra / Regìstrete",
-       "userlogin": "Entra / Regìstrete",
-       "userloginnocreate": "Entra",
        "logout": "Và fora",
        "userlogout": "và fora",
        "notloggedin": "No te sì entrà col to nome utente",
        "userlogin-noaccount": "Gheto mia na utensa?",
        "userlogin-joinproject": "Unìssete a {{SITENAME}}",
-       "nologin": "No te sito gnancora iscrito? '''$1'''.",
-       "nologinlink": "Falo desso",
        "createaccount": "Crea un utente novo",
-       "gotaccount": "Sito zà iscrito? '''$1'''.",
-       "gotaccountlink": "Entra",
-       "userlogin-resetlink": "Desmentegà i to dati d'aceso?",
        "userlogin-resetpassword-link": "Te gheto desmentegà ła paroła d'ordine?",
        "userlogin-helplink2": "Ajuto par 'ndar drento",
        "createacct-emailrequired": "Indirisso e-mail",
        "createacct-another-email-ph": "Inserissi l'indirizo de e-mail",
        "createaccountmail": "Dopara na password caxuałe tenporanea e inviała al indiriso e-mail spesifegà cuà soto",
        "createacct-realname": "Nome reale (opsionale)",
-       "createaccountreason": "Motivassion:",
        "createacct-reason": "Motivo",
        "createacct-reason-ph": "Com'èla te sì drio crear n'altra utensa",
        "createacct-submit": "Crea la to utensa",
        "right-protect": "Canbiar i livèi de protezion e modificar le pagine protete ricorsivamente",
        "right-editprotected": "Modifica pagine protete",
        "right-editinterface": "Modifica l'interfacia utente",
-       "right-editusercssjs": "Modifica i file CSS e JS de altri utenti",
        "right-editusercss": "Modifica i file CSS de altri utenti",
        "right-edituserjs": "Modifica i file JS de altri utenti",
        "right-rollback": "Anula in prèssia le modifiche fate da l'ultimo utente su na pagina particolar.",
        "rcshowhidemine": "$1 i me canbiamenti",
        "rcshowhidemine-show": "Mostra",
        "rcshowhidemine-hide": "Scondi",
-       "rclinks": "Fà védar i ultimi $1 canbiamenti fati in tei ultimi $2 zorni<br />$3",
+       "rclinks": "Fà védar i ultimi $1 canbiamenti fati in tei ultimi $2 zorni",
        "diff": "dif",
        "hist": "stor",
        "hide": "scondi",
        "undeleteviewlink": "varda",
        "undeleteinvert": "Inverti selession",
        "undeletecomment": "Motivassion:",
-       "undeletedrevisions": "{{PLURAL:$1|Una revision recuperà|$1 revision recuperà}}",
-       "undeletedrevisions-files": "{{PLURAL:$1|Una revision|$1 revision}} e $2 file recuperà",
-       "undeletedfiles": "{{PLURAL:$1|Un file recuperà|$1 file recuperà}}",
        "cannotundelete": "Ripristino nó riusìo:\n$1",
        "undeletedpage": "'''$1 la xè stà recuperà'''\n\nConsulta el [[Special:Log/delete|registro de le scancełassion]] par vardare łe scancełassion e i recuperi pì reçenti.",
        "undelete-header": "Varda el [[Special:Log/delete|registro de le scancelazion]] par védar le scancelazion piassè reçenti.",
        "logentry-rights-autopromote": "$1 {{GENDER:$2|el|la}} xe stà automategamente promoso/a da $4 a $5",
        "logentry-upload-upload": "$1 {{GENDER:$2|el|la}} gà cargà $3",
        "rightsnone": "(nissun)",
-       "revdelete-summary": "modifica ogeto",
        "feedback-adding": "Inserimento del feedback inte ła pàjina...",
        "feedback-back": "Indrìo",
        "feedback-bugcheck": "Otimo! Verifega che nó 'l sia xà infrà i [$1 bug conosui].",
index f22471c..06a9678 100644 (file)
        "externaldberror": "Ozaižihe petuz autentifikacijan, kudamb tehtihe andmusiden irdbazan turbiš, aigan, vai teile ei ulotu oiktusid toižetada ičetoi irdregistracijad.",
        "login": "Kirjutadas sistemha",
        "nav-login-createaccount": "Kirjutadas / Sada registracii",
-       "userlogin": "Kirjutadas / Sada registracii",
-       "userloginnocreate": "Kirjutagatoiš sistemha",
        "logout": "Lähtta",
        "userlogout": "Lähtta",
        "notloggedin": "Tö et olgoi kirjutanus sistemha",
        "userlogin-joinproject": "Ühtne {{SITENAME}}-saiha",
-       "nologin": "Ku tö et völ olgoi sanuded registracijad, '''$1'''.",
-       "nologinlink": "Sada registracii",
        "createaccount": "Sada registracii",
-       "gotaccount": "Ku teil om jo registracii, '''$1'''.",
-       "gotaccountlink": "Kirjutagatoiš sistemha",
-       "userlogin-resetlink": "Unohtid-ik andmused tulendan täht?",
        "userlogin-helplink2": "Abu tulendanke sistemha",
        "createacct-emailrequired": "E-počtal adres",
        "createacct-email-ph": "Kirjutagat teiden e-počtan adres",
        "createacct-another-email-ph": "Kirjutagat e-počtan adres",
        "createaccountmail": "Kävutagat aigaline statjaline peitsana i oigekat ozutadud e-počtan adresale",
        "createacct-realname": "Todesine nimi (opcionaline)",
-       "createaccountreason": "Sü:",
        "createacct-reason": "Sü",
        "createacct-reason-ph": "Mikš sädad kävutajanprofilid?",
        "createacct-submit": "Säta kävutajanprofil'",
        "passwordreset": "Peitsanan alustuz",
        "passwordreset-username": "Kävutajan nimi:",
        "passwordreset-domain": "Domen",
-       "passwordreset-capture": "Ozutada-k loptud kirjeine?",
        "passwordreset-email": "E-počtan adres:",
        "passwordreset-emailelement": "Kävutajannimi: \n$1\n\nAigaline peitsana: \n$2",
        "passwordreset-emailsentemail": "Muštatai kirjeine uden peitsananke oigetihe e-počtadme.",
        "saveprefs": "Kirjutada",
        "restoreprefs": "Endištada kaik augotižjärgendused (kaikiš sekcijoiš)",
        "prefs-editing": "Redaktiruind",
-       "rows": "Rivid:",
-       "columns": "Pachid:",
        "searchresultshead": "Ecind",
        "stub-threshold": "Nägutesen märitamižen künduz <a href=\"#\" class=\"stub\">kosketust otetile</a> (baitoiš)",
        "stub-threshold-disabled": "Ei ole kävutamas",
        "userrights-reason": "Sü:",
        "userrights-no-interwiki": "Teile ei sa toižetada toižiden wikiden kävutajiden oiktusid.",
        "userrights-nodatabase": "Andmusiden $1-bazad ei ole vai se ei ole lokaline.",
-       "userrights-nologin": "Teile pidab [[Special:UserLogin|kirjutadas sistemha]] administratoran oiktusidenke, miše antta oiktusid kävutajile.",
-       "userrights-notallowed": "Teiden kävutajan registracijanke ei sa antta oiktusid toižile kävutajile da heitta toižiden kävutajiden oiktusid.",
        "userrights-changeable-col": "Gruppad, kudambad teile sab toižetada",
        "userrights-unchangeable-col": "Gruppad, kudambid teile ei sa toižetada",
        "userrights-irreversible-marker": "$1*",
        "right-protect": "Vajehtada lehtpoliden kaičendan tazopind i redaktiruida kaitud lehtpoled",
        "right-editprotected": "Redaktiruida kaitud lehtpoled (kaskadkaičemata)",
        "right-editinterface": "Redaktiruida kävutajan intefeis",
-       "right-editusercssjs": "Redaktiruida toižiden kävutajiden CSS- da JS-failad",
        "right-editusercss": "Redaktiruida toižiden kävutajiden CSS-failad",
        "right-edituserjs": "Redaktiruida toižiden kävutajiden JS-failad",
        "right-noratelimit": "Ei ole kaidendust piguden mödhe",
        "right-userrights-interwiki": "Toižetada toižiden wiki-saitoiden kävutajiden oiktused",
        "right-siteadmin": "Luklostada da avaita andmusiden baz",
        "right-sendemail": "Oigeta e-počtad toižile kävutajile",
-       "right-passwordreset": "Kacta e-kirjeižid peitsanan toižetandanke",
        "newuserlogpage": "Kävutajiden registracijan aigkirj",
        "newuserlogpagetext": "Tantoi registriruidud kävutajiden nimikirjutez.",
        "rightslog": "Kävutajan oiktusiden aigkirj",
        "rcshowhidemine": "$1 ičein redakcijad",
        "rcshowhidemine-show": "Ozutada",
        "rcshowhidemine-hide": "Peitta",
-       "rclinks": "Ozutada jäl'gmäižed $1 toižetust $2 päiväs<br />$3",
+       "rclinks": "Ozutada jäl'gmäižed $1 toižetust $2 päiväs",
        "diff": "erod",
        "hist": "istorii",
        "hide": "Peitta",
        "undeleteviewlink": "nähta",
        "undeleteinvert": "Käta erigoittud sanad vastkarin",
        "undeletecomment": "Kommentarii:",
-       "undeletedrevisions": "{{PLURAL:$1|1 toižetuz|$1 toižetust}} om endištadud",
-       "undeletedrevisions-files": "{{PLURAL:$1|1 toižetuz|$1 toižetust}} da {{PLURAL:$2|1 fail|$2 failad}} oma endištadud",
-       "undeletedfiles": "{{PLURAL:$1|1 fail om|$1 failad oma}} endištadud",
        "cannotundelete": "Endištandan petuz:\n$1",
        "undeletedpage": "'''$1-lehtpol' om endištadud'''\n\nKc. [[Special:Log/delete|čudandoiden aigkirj]], miše tedištada tantoižiš čudandoiš da endištandoiš.",
        "undelete-header": "Kc. [[Special:Log/delete|čudendoiden aigkirj]], miše tedištada tantoi čudud lehtpoliš.",
        "revdelete-unrestricted": "kaidendused heittud administratoriden täht",
        "logentry-newusers-create": "{{GENDER:$2|tegihe}} $1-kävutajaks",
        "rightsnone": "(ei ole)",
-       "revdelete-summary": "kaik toižetused",
        "feedback-cancel": "Heitta pätand",
        "feedback-close": "Vaumiž",
        "feedback-error2": "Petuz. Ei voi redaktiruida",
        "feedback-subject": "Tem:",
        "searchsuggest-search": "Ectä",
        "searchsuggest-containing": "mülütajad...",
-       "api-error-empty-file": "Teil oigetud fail om pall'az.",
-       "api-error-fetchfileerror": "Südäipetuz: mi-se läksi värin failad sades.",
-       "api-error-filename-tooshort": "Lühudahk failannimi.",
-       "api-error-filetype-banned": "Nece failtip om kel'tud.",
-       "api-error-filetype-banned-type": "$1 {{PLURAL:$4|om laskmatoi failantip|oma laskmatomad failantipad}}. Lasktud {{PLURAL:$3|failantip om|failantipad oma}} $2.",
-       "api-error-illegal-filename": "Kel'tud failannimi.",
-       "api-error-unclassified": "Tundmatoi petuz.",
-       "api-error-unknown-code": "Tundmatoi petuz: \"$1\"",
        "api-error-unknown-warning": "Tadmatoi varutuz: $1",
        "api-error-unknownerror": "Tundmatoi petuz: \"$1\"",
        "duration-seconds": "$1 {{PLURAL:$1|sekund|sekunad}}",
index 4250b0c..efec69e 100644 (file)
@@ -35,7 +35,8 @@
                        "Matma Rex",
                        "Xð",
                        "Nguyên Lê",
-                       "Asmen"
+                       "Asmen",
+                       "Stephanecbisson"
                ]
        },
        "tog-underline": "Gạch chân liên kết:",
        "right-editsemiprotected": "Sửa trang khóa ở mức “{{int:protect-level-autoconfirmed}}”",
        "right-editcontentmodel": "Sửa kiểu nội dung của trang",
        "right-editinterface": "Sửa giao diện người dùng",
-       "right-editusercssjs": "Sửa tập tin CSS và JS của người dùng khác",
        "right-editusercss": "Sửa tập tin CSS của người dùng khác",
        "right-edituserjs": "Sửa đổi tập tin JavaScript của người dùng khác",
        "right-editmyusercss": "Sửa đổi tập tin CSS cá nhân của mình",
        "rcshowhidecategorization": "$1 tác vụ xếp thể loại",
        "rcshowhidecategorization-show": "Hiện",
        "rcshowhidecategorization-hide": "Ẩn",
-       "rclinks": "Xem $1 sửa đổi gần đây nhất trong $2 ngày qua; $3.",
+       "rclinks": "Xem $1 sửa đổi gần đây nhất trong $2 ngày qua;",
        "diff": "khác",
        "hist": "sử",
        "hide": "Ẩn",
        "undeleteviewlink": "xem",
        "undeleteinvert": "Đảo sự lựa chọn",
        "undeletecomment": "Lý do:",
-       "undeletedrevisions": "$1 phiên bản được phục hồi",
-       "undeletedrevisions-files": "$1 phiên bản và $2 tập tin đã được phục hồi",
-       "undeletedfiles": "$1 tập tin đã được phục hồi",
        "cannotundelete": "Phục hồi bị thất bại một phần hoặc hoàn toàn:\n$1",
        "undeletedpage": "'''$1 đã được khôi phục'''\n\nXem nhật trình xóa và phục hồi các trang gần đây tại [[Special:Log/delete|nhật trình xóa]].",
        "undelete-header": "Xem các trang bị xóa gần đây tại [[Special:Log/delete|nhật trình xóa]].",
index c4d76c3..802c49c 100644 (file)
        "yourpasswordagain": "Bassworrd widderhulln:",
        "login": "Ôômeldn",
        "nav-login-createaccount": "Oomeldn / Ghondoo ooleeng",
-       "userlogin": "Ôômeldn / Als Bajdräächâr ajschrajm",
        "logout": "Abmeldn",
        "userlogout": "Abmeldn",
-       "nologin": "Du hast ka Nutzergonto? $1",
-       "nologinlink": "Sich als najâr Ôôgmeldâr ôômäldn",
        "createaccount": "Nutzergonto olegn",
-       "gotaccount": "Du host scho a Benudtzergondo? $1",
-       "gotaccountlink": "Omeldn",
-       "userlogin-resetlink": "Omeldedadn vergessn?",
        "mailmypassword": " najs passwôrd iwâr iimejl dsuschign lasn",
        "loginlanguagelabel": "Sproch: $1",
        "changepassword": "S'bhaswôrd ändârn",
        "saveprefs": "Aâjschdelungn schbajchrn",
        "restoreprefs": "Uf dii uur-ajschdelungn dsrig",
        "prefs-editing": "Bearbajdungs-fenschdâr",
-       "rows": "Soofiil dsajln:",
-       "columns": "Soofiil schbaldn",
        "searchresultshead": "Suuchn",
        "recentchangesdays": "Wiifiil dääch dsrig baj  „Ledschdn ändrungn“",
        "recentchangesdays-max": "Hegschdns $1 {{PLURAL:$1|daach|dääch}}",
        "rcshowhideanons": "$1 uuôôgmäldâde bearbajdâr",
        "rcshowhidepatr": "Gondrollierde Ändrunga $1",
        "rcshowhidemine": "Ajchne bajdrääch $1",
-       "rclinks": "Dsajch dii ledsdn $1 ändrunga fo di ledsdn $2 dooch.<br />$3",
+       "rclinks": "Dsajch dii ledsdn $1 ändrunga fo di ledsdn $2 dooch.",
        "diff": "undârschiid",
        "hist": "Wärsjoonsfolche",
        "hide": "fârschdegn",
index 52d2d5b..43c4d5c 100644 (file)
        "externaldberror": "U ejenon fümükamapöl plödik nünödema, u no dalol atimükön kali plödik ola.",
        "login": "Nunädolös obi",
        "nav-login-createaccount": "Nunädön oki / jafön kali",
-       "userlogin": "Nunädön oki / jafön kali",
-       "userloginnocreate": "Nunädön oki",
        "logout": "Senunädön oki",
        "userlogout": "Senunädön oki",
        "notloggedin": "No enunädol oli",
        "userlogin-noaccount": "No labol-li kali?",
        "userlogin-joinproject": "Sogolös oki lä {{SITENAME}}",
-       "nologin": "No labol-li kali? $1.",
-       "nologinlink": "Jafolös bali",
        "createaccount": "Jafön kali",
-       "gotaccount": "Ya labol-li kali? '''$1'''.",
-       "gotaccountlink": "Nunädolös obi",
-       "userlogin-resetlink": "Eglömol-li nünis kala olik?",
        "userlogin-resetpassword-link": "Eglömol-li letavödi olik?",
        "createacct-emailrequired": "Ladet leäktronik",
        "createaccountmail": "me pot leäktronik",
-       "createaccountreason": "Kod:",
        "createacct-reason": "Kod",
        "createacct-submit": "Jafön kali olik",
        "createacct-benefit-body1": "{{PLURAL:$1|redakam|redakams}}",
        "saveprefs": "Dakipolöd",
        "restoreprefs": "Geikön lü paramets kösömik valik",
        "prefs-editing": "Redakam",
-       "rows": "Kedets:",
-       "columns": "Padüls:",
        "searchresultshead": "Suk",
        "stub-threshold": "Soliad pro fomätam <a href=\"#\" class=\"stub\">sidayümas</a> (jöläts):",
        "recentchangesdays": "Dels ad pajonön in votükams nulik:",
        "userrights-reason": "Kod:",
        "userrights-no-interwiki": "No labol däli ad votükön gebanagitätis in vüks votik.",
        "userrights-nodatabase": "Nünodem: $1 no dabinon, u no binon topik.",
-       "userrights-nologin": "Mutol [[Special:UserLogin|nunädön oli]] me guvanakal ad dalön gevön gitätis gebanes.",
-       "userrights-notallowed": "No labol däli ad läükön u moükön gebanagitätis.",
        "userrights-changeable-col": "Grups fa ol votükoviks",
        "userrights-unchangeable-col": "Grups fa ol nevotükoviks",
        "group": "Grup:",
        "right-protect": "Votükön jelanivodis e redakön padis pejelöl",
        "right-editprotected": "Bevobön padis pejelöl äs \"{{int:protect-level-sysop}}\"",
        "right-editinterface": "Votükön gebanaloveikömi",
-       "right-editusercssjs": "Redakön ragivis-CSS e -JS gebanas votik",
        "right-editusercss": "Redakön ragivis-CSS gebanas votik",
        "right-edituserjs": "Redakön ragivis-JS gebanas votik",
        "right-rollback": "Sädunön vifiko redakamis gebana lätik, kel äredakon padi semik.",
        "rcshowhidemine": "$1 redakamis obik",
        "rcshowhidemine-show": "Jonön",
        "rcshowhidemine-hide": "Klänedön",
-       "rclinks": "Jonön votükamis lätik $1 ün dels lätik $2<br />$3",
+       "rclinks": "Jonön votükamis lätik $1 ün dels lätik $2",
        "diff": "dif",
        "hist": "jen",
        "hide": "Klänedön",
        "undeleteviewlink": "logön",
        "undeleteinvert": "Väli güükön",
        "undeletecomment": "Kod:",
-       "undeletedrevisions": "Moükam {{PLURAL:$1|revida 1 pesädunon|revidas $1 pesädunons}}",
-       "undeletedrevisions-files": "Moükam {{PLURAL:$1|revida 1|revidas $1}} e {{PLURAL:$2|ragiva 1|ragivas $2}} pesädunons",
-       "undeletedfiles": "Moükam {{PLURAL:$1|ragiva 1|ragivas $1}} pesädunon",
        "cannotundelete": "Sädunam moükama no eplöpon: $1",
        "undeletedpage": "'''Moükam pada: $1 pesädunon'''\n\nLogolös [[Special:Log/delete|lisedi moükamas]] if vilol kontrolön moükamis e sädunamis brefabüikis.",
        "undelete-header": "Logolös [[Special:Log/delete|jenotalisedi moükamas]] ad tuvön padis brefabüo pemoükölis.",
        "logentry-block-unblock": "$1 {{GENDER:$2|eblokon}} {{GENDER:$4|hieli $3|jieli $3|eli $3}}",
        "logentry-newusers-create": "Gebanakal: $1 pejafon",
        "rightsnone": "(nonik)",
-       "revdelete-summary": "plän redakama",
        "feedback-subject": "Yegäd:",
        "searchsuggest-search": "Suk",
        "searchsuggest-containing": "ninädöl...",
index d1460b8..6976ff0 100644 (file)
        "yourpasswordagain": "Tõissaga salain-sõna:",
        "login": "Cirjut süäme",
        "nav-login-createaccount": "Cirjut süäme vai registriiroit cäüttijässi",
-       "userlogin": "Cirjut süäme",
-       "userloginnocreate": "Cirjut süäme",
        "logout": "Cirjut uloz",
        "userlogout": "Cirjut uloz",
-       "nologin": "Kui Teille veel ebõõ cäüttijänimi, '''$1'''.",
-       "nologinlink": "võitta loovva luguu",
        "createaccount": "Uusi cäüttijää",
-       "gotaccount": "Tüü õõttõ jo registreerittu? $1.",
-       "gotaccountlink": "Cirjut süäme",
-       "userlogin-resetlink": "Vai unõhtittõ õma loginass?",
-       "createaccountreason": "Süü:",
        "mailmypassword": "Lähet uusi salasõna elektropoštiikaa",
        "loginlanguagelabel": "Ceeli: $1",
        "resetpass-submit-cancel": "Otmeńoit",
        "rcshowhideanons": "$1 anonüümid cäüttijäd",
        "rcshowhidepatr": "Tarkasõttu kõrjausije $1",
        "rcshowhidemine": "$1 õmad muutussõd",
-       "rclinks": "Näüt viimõiss $1 muutuhsõiss viimõizõ $2 päivää ajalt.<br />$3",
+       "rclinks": "Näüt viimõiss $1 muutuhsõiss viimõizõ $2 päivää ajalt.",
        "diff": "vahõ",
        "hist": "istori",
        "hide": "Salauta",
index 84edb29..68a23a5 100644 (file)
@@ -9,7 +9,8 @@
                        "Trixt",
                        "Võrok",
                        "아라",
-                       "Macofe"
+                       "Macofe",
+                       "Stephanecbisson"
                ]
        },
        "tog-underline": "Lingiq ala tõmmadaq",
        "externaldberror": "Välitsen kimmästegemisteedüskogon om viga vai olõ-i sul lubat umma pruukjanimme muutaq.",
        "login": "Nimega sisseminek",
        "nav-login-createaccount": "Mineq nimega sisse",
-       "userlogin": "Mineq nimega sisse vai luuq pruukjanimi",
-       "userloginnocreate": "Nimega sisseminek",
        "logout": "Nime alt välläminek",
        "userlogout": "Mineq nime alt vällä",
        "notloggedin": "Olõ-i nimega sisse mint",
        "userlogin-noaccount": "Sul olõ-i viil pruukjanimme?",
        "userlogin-joinproject": "Nakkaq {{SITENAME}} pruukjas!",
-       "nologin": "Sul olõ-i viil pruukjanimme? '''$1'''.",
-       "nologinlink": "Tiiq hindäle pruukjanimi",
        "createaccount": "Tiiq pruukjanimi ärq",
-       "gotaccount": "Ku sul jo om uma pruukjanimi, sis '''$1'''.",
-       "gotaccountlink": "võit nimega sisse minnäq",
-       "userlogin-resetlink": "Kas olõt uma salasõna ärq unõhtanuq?",
        "userlogin-resetpassword-link": "Kas salasõna läts' meelest ärq?",
        "userlogin-helplink2": "Nimega sisseminemise abi",
        "userlogin-createanother": "Luuq tõõnõ konto",
        "createacct-another-email-ph": "Kirodaq e-postiaadrõss",
        "createaccountmail": "Pruugiq aotlist johuslist salasõnna ja saadaq tuu annõdu aadrõsi pääle",
        "createacct-realname": "Peris nimi (või ka kirotamalda jättäq)",
-       "createaccountreason": "Põhjus:",
        "createacct-reason": "Põhjus",
        "createacct-reason-ph": "Mille tahat luvvaq tõõsõ pruukjakonto?",
        "createacct-submit": "Luuq konto",
        "prefs-misc": "Muuq säädmiseq",
        "saveprefs": "Pästäq säädmiseq ärq",
        "prefs-editing": "Toimõnduskasti suurus",
-       "rows": "Rito",
-       "columns": "Tulpõ",
        "searchresultshead": "Otsminõ",
        "stub-threshold": "<a href=\"#\" class=\"stub\">Kehväkese lehe</a> näütämispiir (baidõn):",
        "recentchangesdays": "Päivi, midä näüdädäq viimätsin muutmiisin",
        "rcshowhidemine": "$1 mu toimõndusõq.",
        "rcshowhidemine-show": "näütäq",
        "rcshowhidemine-hide": "Käkiq ärq",
-       "rclinks": "Näütäq viimädseq $1 muutmist, miä ommaq tettüq viimädse $2 päävä seen. $3",
+       "rclinks": "Näütäq viimädseq $1 muutmist, miä ommaq tettüq viimädse $2 päävä seen.",
        "diff": "lahk",
        "hist": "aol",
        "hide": "Käkitäseq",
        "undeletelink": "kaeq/tiiq tagasi",
        "undeleteviewlink": "näütäq",
        "undeletecomment": "Kommõntaar:",
-       "undeletedrevisions": "$1 {{PLURAL:$1|kujo|kujjo}} tagasi tett",
-       "undeletedrevisions-files": "$1 {{PLURAL:$1|kujo|kujjo}} ja $2 {{PLURAL:$2|teedüstü|teedüstüt}} tagasi tett",
-       "undeletedfiles": "$1 {{PLURAL:$1|teedüstü|teedüstüt}} tagasi tett",
        "cannotundelete": "Tagasitegemine lää-s kõrda; kiäki tõõnõ või-ollaq lehe jo tagasi tennüq.",
        "undeletedpage": "'''$1 om tagasi tett'''\n\nPerämäidsi kistutuisi ja tagasitegemiisi saat kaiaq [[Special:Log/delete|kistutamiisi nimekiräst]].",
        "undelete-header": "Perämäidsi kistutuisi saat kaiaq [[Special:Log/delete|kistutamiisi nimekiräst]].",
index 0d7e00a..ee899de 100644 (file)
        "rcshowhidecategorization": "$1 li categorijhaedjes des pådjes",
        "rcshowhidecategorization-show": "Mostrer",
        "rcshowhidecategorization-hide": "Catchî",
-       "rclinks": "Mostrer les $1 dierins candjmints des dierins $2 djoûs.<br />$3",
+       "rclinks": "Mostrer les $1 dierins candjmints des dierins $2 djoûs.",
        "diff": "dif.",
        "hist": "ist.",
        "hide": "catch.",
        "undeletelink": "vey/rapexhî",
        "undeleteviewlink": "vey",
        "undeletecomment": "Råjhon:",
-       "undeletedrevisions": "{{PLURAL:$1|1 modêye|$1 modêyes}} di rapexheyes",
-       "undeletedrevisions-files": "{{PLURAL:$1|1 modêye|$1 modêyes}} et {{PLURAL:$2|1 fitchî|$2 fitchîs}} di rapexhîs",
-       "undeletedfiles": "{{PLURAL:$1|1 fitchî|$1 fitchîs}} di rapexhîs",
        "cannotundelete": "Li rapexhaedje a fwait berwete; motoit bén k' ene ôte sakî l' a ddja rapexhî.",
        "undeletedpage": "'''Li pådje $1 a stî rapexheye.'''\n\nLoukîz l' [[Special:Log/delete|djournå des disfaçaedjes]] po ene djivêye des dierins disfaçaedjes eyet rapexhaedjes.",
        "undelete-search-submit": "Cweri",
index 172f08b..3983d8a 100644 (file)
        "externaldberror": "Mayda authenticaton database error o diri ka tinutugotan pag-update an imo akwant ha gawas.",
        "login": "Mag ''log in''",
        "nav-login-createaccount": "Magpalista nga masakob / paghimo hin bag-o nga akawnt",
-       "userlogin": "Magpasabot nga masakob / paghimo hin akawnt",
-       "userloginnocreate": "Magpasabot nga masakob",
        "logout": "Mag ''log out''",
        "userlogout": "Mag ''log out''",
        "notloggedin": "Diri naka-log in",
        "userlogin-noaccount": "Waray ka akawnt?",
        "userlogin-joinproject": "Tambong ha {{SITENAME}}",
-       "nologin": "Waray ka akawnt? $1.",
-       "nologinlink": "Paghimo hin akawnt",
        "createaccount": "Himo-a an akawnt",
-       "gotaccount": "¿Mayda kana akawnt? $1.",
-       "gotaccountlink": "Sakob",
-       "userlogin-resetlink": "Nangalimot han imo detalye han pagsakob?",
        "userlogin-resetpassword-link": "¿Nangalimot ka han imo tigaman-pansulod?",
        "userlogin-helplink2": "Pabúlig hin pagsakob",
        "userlogin-loggedin": "Nakalog-in kana komo hi {{GENDER:$1|$1}}.\nGamiti an porma ha ubos para makalog-in komo iba nga gumaramit.",
        "createacct-another-email-ph": "Igbutang an email address",
        "createaccountmail": "Gamiti hin temporaryo nga bisan ano nag password ngan igpadangat ngada ha espesipikado nga e-mail address",
        "createacct-realname": "Tinuod nga ngaran (opsyonal)",
-       "createaccountreason": "Rason:",
        "createacct-reason": "Rason",
        "createacct-reason-ph": "Kay ano nahimo ka hin usa pa nga akawnt",
        "createacct-submit": "Ighimo an im account",
        "right-hideuser": "Pugnga an uska agnay-hin-gumaramit, tago-a ito tikang ha publiko",
        "right-unblockself": "Lugaring nga makakatanggal han pagpugong",
        "right-editinterface": "Igliwat an user interface",
-       "right-editusercssjs": "Igliwat an kanan iba mga gumaramit nga mga paypay han CSS ngan JavaScript",
        "right-editusercss": "Igliwat an kanan iba mga gumaramit nga mga paypay han CSS",
        "right-edituserjs": "Iliwat an kanan iba mga gumaramit nga paypay han JavaScript",
        "right-viewmywatchlist": "Kitaa an imo kalugaringon nga talaan hin barantayon",
        "rcshowhidemine-hide": "Tago-a",
        "rcshowhidecategorization-show": "Pakit-a",
        "rcshowhidecategorization-hide": "Tago-a",
-       "rclinks": "Igpakita an katapusan nga $1 nga pagbabag-o ha sulod han urhi nga $2 ka mga adlaw<br />$3",
+       "rclinks": "Igpakita an katapusan nga $1 nga pagbabag-o ha sulod han urhi nga $2 ka mga adlaw",
        "diff": "kaibhan",
        "hist": "kaagi",
        "hide": "Tago-a",
index dbee858..fffb4fa 100644 (file)
        "externaldberror": "Njuumte judd na ci dàttub njoxe bi, walla day ni rekk amuloo sañ-sañu yeesal sa sàqum biti.",
        "login": "xammeeku",
        "nav-login-createaccount": "Dugg / Bindu",
-       "userlogin": "Dugg / Bindu",
        "logout": "Génnu",
        "userlogout": "Génnu",
        "notloggedin": "Duggoo de",
        "userlogin-noaccount": "Amagoo am sàq?",
        "userlogin-joinproject": "Bindu ci {{SITENAME}}",
-       "nologin": "Sosagoo am sàq ? '''$1'''.",
-       "nologinlink": "Sos ko leegi",
        "createaccount": "Sos am sàq",
-       "gotaccount": "Sos nga am sàq? '''$1'''.",
-       "gotaccountlink": "Dugg",
        "userlogin-resetpassword-link": "Danga fàtte sa baatujàll?",
        "userlogin-helplink2": "Ndimbal ñeel dugg gi",
        "createacct-emailoptional": "Màkkaanu m-bataaxal (mu-neex-la)",
        "saveprefs": "Wattu",
        "restoreprefs": "Delloo say tànneef nañu meloon ca sag mbindu",
        "prefs-editing": "Boyotu coppite",
-       "rows": "Rëdd:",
-       "columns": "Kenu :",
        "searchresultshead": "Seet",
        "recentchangesdays": "Limu bes yi nga koy wone ci coppite yu mujj yi :",
        "recentchangesdays-max": "(bi ëpp $1 {{PLURAL:$1|bés|bés}})",
        "userrights-reason": "Ngirte :",
        "userrights-no-interwiki": "Amoo sañ-sañu soppi sañ-sañi jëfandikukat yi ci yeneen wiki",
        "userrights-nodatabase": "Dàttub njoxe bii « $1 » amul walla nekkul ci barab bi.",
-       "userrights-nologin": "Faaw nga  [[Special:UserLogin|dugg]] ak sàqum ab yorkat ngir man a soppi sañ-sañi ab jëfandukukat.",
-       "userrights-notallowed": "Sa sàq amul sañ-sañ ngir man a joxi sañ-sañ ab jëfandikukat.",
        "userrights-changeable-col": "Mbooloo yees man a soppi",
        "userrights-unchangeable-col": "Mbooloo yees manuta soppi",
        "userrights-irreversible-marker": "$1*",
        "right-protect": "Soppi tolluwaayu kaaraange gi te soppi xët yees aar",
        "right-editprotected": "Soppi xët yees aar",
        "right-editinterface": "Soppi jokkalekaayu jëfandikukat bi",
-       "right-editusercssjs": "Soppi dencukaay yu CSS ak  JS yu yeneen jëfandikukat",
        "right-editusercss": "Soppi dencukaay yu CSS yu yeneen jëfandikukat",
        "right-edituserjs": "Soppi dencukaay yu JS yu yeneen jëfandikukat",
        "right-rollback": "Loppanti gu gaaw gu coppite yub jëfandikukat bu mujj ci wenn xët wi",
        "rcshowhidemine": "$1 samay cëru",
        "rcshowhidemine-show": "Wone",
        "rcshowhidemine-hide": "Nëbb",
-       "rclinks": "Wone $1 coppite yi mujj ci $2  fan yi mujj <br />$3.",
+       "rclinks": "Wone $1 coppite yi mujj ci $2  fan yi mujj",
        "diff": "wuute",
        "hist": "jaar",
        "hide": "Nëbb",
        "undeleteviewlink": "wone",
        "undeleteinvert": "Jallarbi fal gi",
        "undeletecomment": "Tënk :",
-       "undeletedrevisions": "$1 {{PLURAL:$1|delloowaat nañ ab sumb|delloowaat nañ $1 sumb}}",
-       "undeletedrevisions-files": "$1 {{PLURAL:$1|sumb|sumb}} ak $2 {{PLURAL:$2|ŋara|ŋara}} loppanti nañu leen",
-       "undeletedfiles": "{{PLURAL:$1|1 dencukaay|$1 dencukaay}} lañu delloowaat",
        "cannotundelete": "Delloowaat gi antuwul. Xéj-na keneen delloowaat na ko ba noppi.",
        "undeletedpage": "'''Xët wii di $1 delloowaat nañu ko.'''\n\nSaytul [[Special:Log/delete|jaar-jaaru far bi]] ngir xool far yi ak delloowaat yu mujj yi.",
        "undelete-header": "Saltul [[Special:Log/delete|jaar-jaaru far bi ]] ngir xool far yi mujj.",
        "logentry-newusers-create": "Sàqum jëfandikukat $1 sos nañu ko",
        "logentry-upload-upload": "$1 {{GENDER:$2|moo yeb}} $3",
        "rightsnone": "(menn)",
-       "revdelete-summary": "soppi tënk gi",
        "searchsuggest-search": "Seet"
 }
index 5f342a8..93b3753 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": "忘记登录细节?",
        "userlogin-resetpassword-link": "忘脱密码?",
        "userlogin-helplink2": "登录帮忙",
        "userlogin-loggedin": "你侬用{{GENDER:$1|$1}}登进来哉。用下向个表以别样身份登进。",
        "createacct-another-email-ph": "电子信地址打进去",
        "createaccountmail": "拿临时随机密码发到指定个电邮地址",
        "createacct-realname": "真名字(随意)",
-       "createaccountreason": "理由:",
        "createacct-reason": "理由:",
        "createacct-reason-ph": "为何物建别样账号",
        "createacct-submit": "建立侬个账号",
        "saveprefs": "保存",
        "restoreprefs": "复原全部默认设定",
        "prefs-editing": "编辑",
-       "rows": "行数:",
-       "columns": "列数:",
        "searchresultshead": "搜索",
        "stub-threshold": "短链接格式阈值($1):",
        "stub-threshold-disabled": "停用",
        "rcshowhidemine-show": "显示",
        "rcshowhidemine-hide": "囥脱",
        "rcshowhidecategorization-hide": "囥脱",
-       "rclinks": "显示来拉上个 $2 日里向个最近 $1 趟改动<br />$3",
+       "rclinks": "显示来拉上个 $2 日里向个最近 $1 趟改动",
        "diff": "两样",
        "hist": "历史",
        "hide": "囥脱",
        "logentry-rights-rights": "$1{{GENDER:$2|更改}}{{GENDER:$6|$3}}个用户组从$4到$5",
        "logentry-upload-upload": "$1{{GENDER:$2|上传}}$3",
        "rightsnone": "(呒)",
-       "revdelete-summary": "编辑摘要",
        "feedback-thanks-title": "谢谢侬!",
        "searchsuggest-search": "搜寻{{SITENAME}}",
        "pagelang-language": "闲话"
index c27fc60..f8d6a09 100644 (file)
        "yourdomainname": "Тана домен:",
        "login": "Орлһн",
        "nav-login-createaccount": "Орх/бүрткгдх",
-       "userlogin": "Орх/бүрткгдх",
-       "userloginnocreate": "Орх",
        "logout": "Һарх",
        "userlogout": "Һарх",
        "notloggedin": "Та орсн уга",
-       "nologin": "Бичгдлһгот? '''$1'''.",
-       "nologinlink": "Бичгдлһн бүтәх",
        "createaccount": "Бичгдлһн бүтәх",
-       "gotaccount": "Бичгдлһтәт? '''$1'''.",
-       "gotaccountlink": "Ортн",
        "createaccountmail": "электрона улаһар",
        "userexists": "Эн нер олзлдг юмн.\nБуйн болтха, талдан нернь автн.",
        "loginerror": "Орлһна эндү",
        "saveprefs": "Хадһлх",
        "restoreprefs": "Хамг таарсн көг босхх (цуг салвр)",
        "prefs-editing": "Ясвр",
-       "rows": "Мөрд:",
-       "columns": "Бахд:",
        "savedprefs": "Тана көгүдиг хадһлв.",
        "timezonelegend": "Цагин бүс:",
        "localtime": "Бәәрн цаг:",
        "rcshowhideliu": "$1 бүрткгдсн демнәч",
        "rcshowhideanons": "нерго демнәчнр $1",
        "rcshowhidemine": "мини ясвр $1",
-       "rclinks": "Отхн $1 ясвр, сүл $2 өдрмүдт үзүлх<br />$3",
+       "rclinks": "Отхн  $2 өдрә $1 ясвр үзүлх",
        "diff": "йилһ",
        "hist": "тууҗ",
        "hide": "Нуух",
index 8093c68..8ff3439 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": "გუგოჭყორდესო მიშაულარო საჭირო ინფორმაციაქ?",
        "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-submit": "გონწყით თქვენ ანგარიში",
        "right-editsemiprotected": "გვერდების რედაქტირება რომლებიც დაცულია როგორც „{{int:protect-level-autoconfirmed}}“",
        "right-editcontentmodel": "გვერდის კონტენტური მოდელის რედაქტირება",
        "right-editinterface": "მომხმარებლის ინტერფეისის შეცვლა",
-       "right-editusercssjs": "სხვა მომხმარებლების CSS და JavaScript ფაილების შესწორება",
        "right-editusercss": "სხვა მომხმარებლების CSS-ფაილების შესწორება",
        "right-edituserjs": "სხვა მომხმარებლების JavaScript-ფაილების შესწორება",
        "right-editmyusercss": "თქვენი საკუთარი CSS-ფაილების რედაქტირება",
        "rcshowhidecategorization": "$1 ხასჷლაშ კატეროტიზაცია",
        "rcshowhidecategorization-show": "ძირაფა",
        "rcshowhidecategorization-hide": "ტყობინაფა",
-       "rclinks": "ეკონია $2 დღას ღოლამირ ეკონია $1 თირაფეფიშ ძირაფა <br />$3",
+       "rclinks": "ეკონია $2 დღას ღოლამირ ეკონია $1 თირაფეფიშ ძირაფა",
        "diff": "შხვანერობა",
        "hist": "ისტ.",
        "hide": "ტყობინაფა",
        "logentry-newusers-create": "{{GENDER:$2|დორსხუაფილი რე}} მახვარებუშ ანგარიში $1",
        "logentry-upload-upload": "მახვარებუქ $1 {{GENDER:$2|ეხარგუ}} $3",
        "rightsnone": "(არცერთი)",
-       "revdelete-summary": "ცვლილებების აღწერა",
        "feedback-adding": "თქვენი შეფასების შენახვა...",
        "feedback-back": "უკან",
        "feedback-bugcheck": "კარგია! გთხოვთ, კიდევ ერთხელ შეამოწმეთ, ხომ არ არის აქ რომელიმე უკვე [$1 ნაცნობი შეცდომა].",
index e8d2ac7..b1c6de4 100644 (file)
        "right-editsemiprotected": "רעדאַגירן בלעטער געשיצט ווי \"{{int:protect-level-autoconfirmed}}\"",
        "right-editcontentmodel": "רעדאקטירן אינהאלט־מאדעל פון א בלאט",
        "right-editinterface": "רעדאַקטירן די באַניצער אייבערפֿלאַך",
-       "right-editusercssjs": "רעדאַקטירן אַנדערע באַניצערס CSS און JS טעקעס",
        "right-editusercss": "רעדאַקטירן אַנדערע באַניצערס CSS טעקעס",
        "right-edituserjs": "רעדאַקטירן אַנדערע באַניצערס JS טעקעס",
        "right-editmyusercss": "רעדאקטירע אײַערע אייגענע באניצער CSS טעקעס",
        "rcshowhidecategorization": "$1 בלאט קאטעגאריזירונג",
        "rcshowhidecategorization-show": "ווײַזן",
        "rcshowhidecategorization-hide": "באַהאַלטן",
-       "rclinks": "װײַזן די לעצטע $1 ענדערונגען אין די לעצטע $2 טעג.<br />$3",
+       "rclinks": "װײַזן די לעצטע $1 ענדערונגען אין די לעצטע $2 טעג.",
        "diff": "אונטערשייד",
        "hist": "היסטאריע",
        "hide": "באַהאַלטן",
        "undeleteviewlink": "באַקוקן",
        "undeleteinvert": "איבערקערן דעם אויסקלויב",
        "undeletecomment": "אורזאַך:",
-       "undeletedrevisions": "{{PLURAL:$1|1 רעוויזיע|$1 רעוויזיעס}} צוריקגעשטעלט",
-       "undeletedrevisions-files": "{{PLURAL:$1|1 רעוויזיע|$1 רעוויזיעס}} און  {{PLURAL:$2|1 טעקע|$2 טעקעס}} צוריקגעשטעלט",
-       "undeletedfiles": "{{PLURAL:$1|1 טעקע|$1 טעקעס}} צוריקגעשטעלט",
        "cannotundelete": "טייל אדער גארע צוריקשטעלונג איז דורכגעפאלן: $1",
        "undeletedpage": "'''דער בלאט $1 איז געווארן צוריקגעשטעלט.'''\n\nזעט דעם [[Special:Log/delete| אויסמעקן לאג]] פֿאר א ליסטע פון די לעצטע אויסגעמעקטע און צוריקגעשטעלטע בלעטער.",
        "undelete-header": "זעט [[Special:Log/delete|דעם אויסמעקונג זשורנאַל]] פֿאַר בלעטער וואָס זענען לעצטנס געווארן אויסגעמעקט recently deleted pages.",
index bd8577c..5498202 100644 (file)
        "externaldberror": "Bóyá àsìṣe ìfidájú ibùdó dátà ló ṣẹlẹ̀ tàbí ẹ kò jẹ́ gbígbà ní ààyè láti sọ àpamọ́ òde yín di ọ̀tun.",
        "login": "Ìjáwọlé",
        "nav-login-createaccount": "Ìwọlé / Ìforúkọ sílẹ̀",
-       "userlogin": "Ìwọlé / ìforúkọ sílẹ̀",
-       "userloginnocreate": "Ìjáwọlé",
        "logout": "Ìjáde",
        "userlogout": "Ìjáde",
        "notloggedin": "Ẹ kò tí w'ọlé",
        "userlogin-noaccount": "Ṣé ẹ kò ní àkópamọ́?",
        "userlogin-joinproject": "Ẹ darapọ̀mọ́ {{SITENAME}}",
-       "nologin": "Ṣé ẹ fẹ́ wọlé? '''$1'''.",
-       "nologinlink": "Ìforúkọsílẹ̀",
        "createaccount": "Ẹ fi orúkọ sílẹ̀",
-       "gotaccount": "Ṣé ẹ ti ní àpamọ́ tẹ́lẹ̀? '''$1'''.",
-       "gotaccountlink": "Ẹ w'ọlé",
-       "userlogin-resetlink": "À bí ẹ gbàgbé ìwọlé yín?",
        "userlogin-resetpassword-link": "Ṣé ẹ ti gbàgbé ọ̀rọ̀ìpamọ́ yín?",
        "userlogin-helplink2": "Ìrànlọ́wọ́ láti wọlé",
        "userlogin-loggedin": "Ẹ pilẹ̀ ti jáwọlé bíi {{GENDER:$1|$1}}.\nẸ lo fọ́ọ̀mù ìsàlẹ̀ látí jáwọlé gẹ́gẹ́ bíi oníṣe míràn.",
        "createacct-email-ph": "Ẹ kọ àdírẹ̀sì email yín",
        "createaccountmail": "Lo ọ̀rọ̀ìpamọ́ àrìnnàkò ìgbàdíẹ̀ ná, kí o sì fi ránsẹ́ sí àdírẹ̀sì email tó wà nísàlẹ̀",
        "createacct-realname": "Orúkọ yín gangan (kò pọndandan)",
-       "createaccountreason": "Ìdíẹ̀:",
        "createacct-reason": "Ìdí",
        "createacct-reason-ph": "Ìdí tí ẹ ṣe fẹ́ dá àkópamọ́ míràn",
        "createacct-submit": "Ìdá àkópamọ́ yín",
        "saveprefs": "Ìmúpamọ́",
        "restoreprefs": "Ìdápadà gbogbo áwọn ìtò àtìbẹ̀rẹ̀ (nínú gbogbo àwọn abala)",
        "prefs-editing": "Àtúnṣe ṣíṣẹ",
-       "rows": "Àwọn ìtẹ̀lé gbọlọjọ:",
-       "columns": "Àwọn ìtẹ̀lé gogoro:",
        "searchresultshead": "Àwárí",
        "stub-threshold": "Àlà fún idárú <a href=\"#\" class=\"stub\">àjàpọ̀ ẹ̀kúnrẹ́rẹ́</a> (bytes):",
        "stub-threshold-disabled": "Dídálẹ́kun",
        "right-protect": "Ìyípadà àwọn ìpele àbò àti àtúnṣe àwọn ojúewé aláàbò",
        "right-editprotected": "Àtúnṣe àwọn ojúewé aláàbò (láìsí àbò àjámọ́ra)",
        "right-editinterface": "Àtúnṣe ìfojúkojú oníṣe",
-       "right-editusercssjs": "Àtúnṣe àwọn fáìlì CSS àti JS ti àwọn oníṣe mìíràn",
        "right-editusercss": "Àtúnṣe àwọn fáìlì CSS ti àwọn oníṣe mìíràn",
        "right-edituserjs": "Àtúnṣe àwọn fáìlì JS ti àwọn oníṣe mìíràn",
        "right-rollback": "Kíákíá yí àwọn àtúnṣe oníṣe tó ṣàtúnṣe ojúewé kan pàtó gbẹ̀yìn sẹ́yìn",
        "rcshowhidemine": "$1 àwọn àtúnṣe mi",
        "rcshowhidemine-show": "Fi hàn",
        "rcshowhidemine-hide": "Ìbòmọ́lẹ̀",
-       "rclinks": "Ṣ'àfihàn àtúnṣe $1 tó kẹ̀yìn ní ọjọ́ $2 sẹ́yìn<br />$3",
+       "rclinks": "Ṣ'àfihàn àtúnṣe $1 tó kẹ̀yìn ní ọjọ́ $2 sẹ́yìn",
        "diff": "ìyàtọ̀",
        "hist": "ìtàn",
        "hide": "Ìbòmọ́lẹ̀",
        "undeleteviewlink": "wo",
        "undeleteinvert": "Pàṣípààrọ̀ àsàyàn",
        "undeletecomment": "Ìdíẹ̀:",
-       "undeletedrevisions": "{{PLURAL:$1|Àtúnyẹ̀wò 1|Àwọn àtúnyẹ̀wò $1}} ti jẹ́ dídápadà",
-       "undeletedrevisions-files": "{{PLURAL:$1|Àtúnyẹ̀wò 1|Àwọn àtúnyẹ̀wò $1}} àti {{PLURAL:$2|fáìlì 1|àwọn fáìlì $2}} ti jẹ́ dídápadà",
-       "undeletedfiles": "{{PLURAL:$1|Fáílì 1|Àwọn fáìlì $1}} ti jẹ́ dídápadà",
        "cannotundelete": "Ìdápadà ìparẹ́ kùnà:\n$1",
        "undeletedpage": "'''$1 ti jẹ́ dídápadà'''\n\nẸ wo [[Special:Log/delete|àkọọ́lẹ̀ ìparẹ́]] fún àkọpamọ́ àwọn ìparẹ́ àti ìdápadà àìpẹ́.",
        "undelete-header": "Ẹ wo [[Special:Log/delete|àkọọ́lẹ̀ ìparẹ́]] fún àwọn ojúewé píparẹ́ láìpẹ́",
        "logentry-rights-autopromote": "$1 jẹ́ {{GENDER:$2|gbígbénípòga}} nífúnraẹni láti $4 sí $5",
        "logentry-upload-upload": "Ó dàfikún",
        "rightsnone": "(kòsí)",
-       "revdelete-summary": "àkótán àtúnṣe",
        "feedback-adding": "Ìfikún ìdáhùn sí ojúewé...",
        "feedback-bugcheck": "Ó dáa bẹ́ẹ̀! Ẹ rí pé kò í ṣe ìkan nínú [$1 àwọn ìsòrò tí a ti mọ̀ tẹ́lẹ̀].",
        "feedback-bugnew": "Mo ti yẹ́wò. Fi ìsòrò sùn",
        "feedback-thanks": "Adúpẹ́! Ìdáhùn yín ti jẹ́ fífikún sí ojúewé \"[$2 $1]\".",
        "searchsuggest-search": "Ṣàwárí",
        "searchsuggest-containing": "tó ní...",
-       "api-error-badaccess-groups": "Ẹ kò ní àṣẹ láti ru fáìlì wọlé sí orí wiki yìí.",
        "api-error-badtoken": "Àsìṣe inú: Ìdáramọ̀ búburú.",
-       "api-error-copyuploaddisabled": "Ìrùsókè pẹ̀lú URL jẹ́ dídálẹ́kun lórí ẹ̀rọ-ìpèsè yìí.",
-       "api-error-duplicate": "{{PLURAL:$1|Fáìlì míràn|Àwọn fáìlì míràn}} kan tilẹ̀ wà lórí ibiìtàkùn pẹ̀lú àkóónú kannáà.",
-       "api-error-duplicate-archive": "{{PLURAL:$1|Fáìlì míràn|Àwọn fáìlì míràn}} kan tilẹ̀ wà lórí ibiìtàkùn pẹ̀lú àkóónú kannáà, sùgbọ́n {{PLURAL:$1|ó|wọ́n}} ti jẹ́ píparẹ́.",
-       "api-error-empty-file": "Fáílì tí ẹ fisílẹ̀ jẹ́ òfo.",
        "api-error-emptypage": "Ẹ kò ní àyè láti dá ojúewé tuntun tó jẹ́ òfo.",
-       "api-error-fetchfileerror": "Àsìṣe inú: Kò le mú fáìlì ná jáde nítorí àsìṣe.",
-       "api-error-fileexists-forbidden": "Fáìlì kan wà pẹ̀lú orúkọ \"$1\", kò ṣe é kọlélórí.",
-       "api-error-fileexists-shared-forbidden": "Fáìlì kan wà pẹ̀lú orúkọ \"$1\" nínú ibi àkójọsí fáìlì, kò ṣe é kọlélórí.",
-       "api-error-file-too-large": "Fáílì tí ẹ fisílẹ̀ jẹ́ tí tóbijù.",
-       "api-error-filename-tooshort": "Orúkọ fáílì kéréjú bó ṣe yẹ lọ.",
-       "api-error-filetype-banned": "Irú fáílì yìí ti jẹ́ dídí lọ́nà.",
-       "api-error-filetype-banned-type": "$1 {{PLURAL:$4|kíì ṣe|kìí ṣe àwọn}} irú fáìlì tí à gbàláyè. {{PLURAL:$3|Irú fáìlì|Àwọn irú fáìlì}} tí à gbàláyè ni $2.",
-       "api-error-filetype-missing": "Orúkọ fáìlì kò ní ìfàgùn.",
-       "api-error-hookaborted": "Ìtúndáṣe tí ẹ fẹ́ ṣe ti jẹ́ dídálẹ́kun látọwọ́ ìfàgùn.",
-       "api-error-http": "Àsìṣe inú: Ìfarakan ẹ̀rọ-ìpèsè kò ṣe é ṣe.",
-       "api-error-illegal-filename": "Orúkọ fáílì yìí kò jẹ́ gbígbàláàyè.",
-       "api-error-internal-error": "Àsìṣe inú: Wàhálà wáyé láti ṣe ìgbéṣe ìrùsókè yín lórí wiki yìí.",
-       "api-error-invalid-file-key": "Àsìṣe inú: Fáìlì kò sí nínú ibi ìfipamọ́ ìgbàdíẹ̀.",
-       "api-error-missingparam": "Àsìṣe inú: Kò sí pàrámítà tó tọrọ.",
-       "api-error-missingresult": "Àsìṣe inú: Kò le sọ bóyá àwòkọ yọrí sí rere.",
-       "api-error-mustbeloggedin": "Ẹ gbọ́dọ̀ wọlé láti ru fáìlì sókè.",
-       "api-error-mustbeposted": "Àsìṣe inú: Ìtọrọ bèèrè fún HTTP POST.",
-       "api-error-noimageinfo": "Ìrùsòkè jásí rere, sùgbọ́n ẹ̀rọ-ìpèsè kò sọ ohùn kankan nípa fáìlì ọ̀hún.",
-       "api-error-nomodule": "Àsìṣe inú: Ẹyọ ìrùsókè kankan kò sí.",
-       "api-error-ok-but-empty": "Àsìṣe inú: Kò sí ìdáhùn látọwọ́ ẹ̀rọ-ìpèsè.",
-       "api-error-overwrite": "Ìkọlélórí fáìlì tó wà kò jẹ́ gbígbà ní àyè.",
-       "api-error-stashfailed": "Àsìṣe inú: Ẹ̀rọ-ìpèsè kùnà láti fi fáìlì ìgbàdíẹ̀ pamọ́.",
        "api-error-publishfailed": "Àṣìṣe inú: Ẹ̀rọ-ìpèsè kùnà láti tẹ fáìlì ìgbàdíẹ̀ jáde.",
-       "api-error-timeout": "Ẹ̀rọ-ìpèsè kò dáhùn ní àrin àsìkò tó yẹ.",
-       "api-error-unclassified": "Àsìṣe àìdámọ̀ kan ti ṣẹlẹ̀.",
-       "api-error-unknown-code": "Àsìṣe aláìlójúùtú: \"$1\".",
-       "api-error-unknown-error": "Àsìṣe inú: Àsìṣe ṣẹlẹ̀ láti ṣe ìrùsókè fáìlì yín.",
+       "api-error-stashfailed": "Àsìṣe inú: Ẹ̀rọ-ìpèsè kùnà láti fi fáìlì ìgbàdíẹ̀ pamọ́.",
        "api-error-unknown-warning": "Ìkìlọ̀ àìmọ̀: \"$1\".",
        "api-error-unknownerror": "Àsìṣe aláìlójúùtú: \"$1\".",
-       "api-error-uploaddisabled": "Ìdálẹ́kun ìrùsókè lórí wiki yìí.",
-       "api-error-verification-error": "Fáìlì náà le ti bàjẹ́, tàbí ó ní ìfàgún tí kò yẹ.",
        "duration-seconds": "{{PLURAL:$1|ìṣẹ́júkejì|ìṣẹ́júkejì}} $1",
        "duration-minutes": "{{PLURAL:$1|ìṣẹ́jú|ìṣẹ́jú}} $1",
        "duration-hours": "{{PLURAL:$1|wákàtí|wákàtí}} $1",
index 6486ad3..e9d31c9 100644 (file)
        "changepassword-throttled": "你已經試咗太多次簽到動作。\n請等$1再試過。",
        "botpasswords": "機械人密碼",
        "botpasswords-disabled": "唔俾用機械人密碼。",
+       "botpasswords-existing": "而家已經有嘅機械人密碼",
+       "botpasswords-createnew": "整一個新嘅機械人密碼",
        "botpasswords-label-create": "創造",
        "botpasswords-label-update": "上載",
        "botpasswords-label-cancel": "取消",
        "prefs-help-prefershttps": "呢項喜好設定會喺你下次簽到先至開始生效。",
        "prefswarning-warning": "你改嘅喜好設定改動重未記低。\n如果你未撳「$1」就走咗,你嘅喜好設定唔會有更新。",
        "prefs-tabs-navigation-hint": "貼士:可以用鍵盤嘅←或→掣睇一覽內嘅分頁",
-       "userrights": "用戶權限管理",
-       "userrights-lookup-user": "管理用戶組",
+       "userrights": "用戶嘅權限",
+       "userrights-lookup-user": "揀一個用戶",
        "userrights-user-editname": "輸入一個用戶名:",
        "editusergroup": "編輯用戶組",
        "editinguser": "改緊<strong>[[User:$1|$1]]</strong>嘅用戶權限 $2",
        "userrights-expiry": "到期:",
        "userrights-expiry-existing": "現時到期嘅時間: $2 $3",
        "userrights-expiry-othertime": "其它時間:",
+       "userrights-invalid-expiry": "組\"$1\"嘅過期時間冇效",
        "userrights-conflict": "用戶權限更改有衝突!請再睇過同確認你嘅改動。",
        "group": "組:",
        "group-user": "用戶",
        "right-editsemiprotected": "改保護等級係「{{int:protect-level-autoconfirmed}}」嘅版面",
        "right-editcontentmodel": "改版面嘅內容模型",
        "right-editinterface": "編輯用戶界面",
-       "right-editusercssjs": "編輯其他用戶嘅CSS同埋JavaScript檔",
        "right-editusercss": "編輯其他用戶嘅CSS檔",
        "right-edituserjs": "編輯其他用戶嘅JavaScript檔",
        "right-editmyusercss": "編輯戶口嘅CSS文件",
        "rcshowhidecategorization": "$1 頁面分類",
        "rcshowhidecategorization-show": "顯示",
        "rcshowhidecategorization-hide": "收埋",
-       "rclinks": "顯示最後$1次喺$2日內嘅更改<br />$3",
+       "rclinks": "顯示最後$1次喺$2日內嘅更改",
        "diff": "差異",
        "hist": "歷史",
        "hide": "隱藏",
        "undeleteviewlink": "睇",
        "undeleteinvert": "反選",
        "undeletecomment": "原因:",
-       "undeletedrevisions": "$1個修訂已經救返",
-       "undeletedrevisions-files": "$1個修訂同$2個檔案已經救返",
-       "undeletedfiles": "$1個檔案已經救返",
        "cannotundelete": "救唔到:\n$1",
        "undeletedpage": "'''$1已經成功救返'''\n\n最近嘅刪除同恢復記錄請睇[[Special:Log/delete]]。",
        "undelete-header": "睇吓[[Special:Log/delete|刪除日誌]]去睇之前刪除嘅頁頁。",
index 9a3a44f..d1933a9 100644 (file)
        "externaldberror": "Der is een fout opetreeën bie 't anmelden bie de database of je ei hin toestemmieng jen externe gebruker bie te werken.",
        "login": "Anmelden",
        "nav-login-createaccount": "Anmelden / Inschrieven",
-       "userlogin": "Anmelden / Inschrieven",
        "logout": "Ofmelden",
        "userlogout": "Ofmelden",
        "notloggedin": "Nie anemeld",
-       "nologin": "Nog hin gebrukersnaem? $1.",
-       "nologinlink": "Mik een gebruker an",
        "createaccount": "Gebruker anmaeken",
-       "gotaccount": "È je a een gebrukersnaem? '''$1'''.",
-       "gotaccountlink": "Anmelden",
-       "userlogin-resetlink": "Ben jie je anmeldgegevens vergeet'n?",
        "createaccountmail": "per e-mail",
        "badretype": "De wachtwoôrden die-a je ingegeven typ bin nie eênder.",
        "userexists": "De hekozen gebrukersnaem is a in gebruuk.\nKies asjeblieft een aore naem.",
        "prefs-misc": "Rest",
        "saveprefs": "Opslaene",
        "prefs-editing": "Bewerken",
-       "rows": "Rehels:",
-       "columns": "Kolomm'n:",
        "searchresultshead": "Zoek",
        "stub-threshold": "Drempel voe markerieng <a href=\"#\" class=\"stub\">stompje</a>:",
        "recentchangesdays": "Antal daehen weer te heven in Juust angepast:",
        "userrights-reason": "Reeën voe 't verandern:",
        "userrights-no-interwiki": "Je ei hin rechen om gebrukersrechen op aore wiki's te wiezigen.",
        "userrights-nodatabase": "Database $1 besti nie of is hin plaetselijke database.",
-       "userrights-nologin": "Je mò jen eihen[[Special:UserLogin|anmelden]] mie een gebruker mie de juuste rechen om gebrukersrechen toe te wiezen.",
-       "userrights-notallowed": "Je ei hin rechen om gebrukersrechen toe te wiezen.",
        "userrights-changeable-col": "Hroep'n die a je kan beheern",
        "userrights-unchangeable-col": "Hroep'n die a je nie kan beheern",
        "group": "Hroep:",
        "rcshowhideanons": "$1 anonieme gebrukers",
        "rcshowhidepatr": "hecontroleerde bewerkiengen $1",
        "rcshowhidemine": "$1 mien bewerkiengen",
-       "rclinks": "Bekiek de lèste $1 wiezigingen in de lèste $2 daegen<br />$3",
+       "rclinks": "Bekiek de lèste $1 wiezigingen in de lèste $2 daegen",
        "diff": "wiez",
        "hist": "hesch",
        "hide": "Verberge",
        "revdelete-restricted": "ei beperkiengen an beheêrders opeleid",
        "revdelete-unrestricted": "ei beperkiengen voe beheêrders opeheven",
        "rightsnone": "(hin)",
-       "revdelete-summary": "saemenvattieng bewerken",
        "searchsuggest-search": "Zoek"
 }
index 909a0bb..4a08678 100644 (file)
        "redirectedfrom": "(重定向自$1)",
        "redirectpagesub": "重定向页面",
        "redirectto": "重定向至:",
-       "lastmodifiedat": "本页面最后修改于$1 $2。",
+       "lastmodifiedat": "本页面最后编辑于$1 $2。",
        "viewcount": "本页面已经被访问过{{PLURAL:$1|$1次}}。",
        "protectedpage": "受保护页面",
        "jumpto": "跳转至:",
        "readonlywarning": "<strong>警告:数据库被锁定以进行维护,所以您目前将无法保存您的编辑。</strong>您可以将您的文本复制粘贴到一个文本文档并保存它,以便稍后更改。\n\n锁定数据库的系统管理员做出如下解释:$1",
        "protectedpagewarning": "<strong>警告:本页面已被保护,只有拥有管理员权限的用户可以编辑。</strong>下面提供最后的日志条目以供参考:",
        "semiprotectedpagewarning": "<strong>注意:</strong>本页面已被保护,只有注册用户可以编辑。下面提供最后的日志条目以供参考:",
-       "cascadeprotectedwarning": "<strong>警告:</strong>本页面已经被保护,只有拥有管理员权限的用户可以编辑,因为它被嵌入于以下启用连锁保护的{{PLURAL:$1|页面}}中:",
+       "cascadeprotectedwarning": "<strong>警告:</strong>本页面已经被保护,只有拥有[[Special:ListGroupRights|特定权限]]的用户可以编辑,因为它被嵌入于以下启用连锁保护的{{PLURAL:$1|页面}}中:",
        "titleprotectedwarning": "<strong>警告:本页面已被保护,创建本页面需要[[Special:ListGroupRights|特定权限]]。</strong>下面提供最后的日志条目以供参考:",
        "templatesused": "该页面使用的{{PLURAL:$1|模板}}:",
        "templatesusedpreview": "本预览使用的{{PLURAL:$1|模板}}:",
        "saveusergroups": "保存{{GENDER:$1|用户}}组",
        "userrights-groupsmember": "用户组:",
        "userrights-groupsmember-auto": "自动用户组:",
-       "userrights-groups-help": "您可以更改该用户的用户组:\n* 选中的选项框表示该用户属于该用户组。\n* 未选中的选项框表示该用户不属于该用户组。\n* 星号(*)表示一旦您被添加至该用户组后,您不能亲自移除其权限,反之亦然。\n* 井号(#)表示您只可以推迟该用户组的过期时间;您不能将其提前。",
+       "userrights-groups-help": "您可以更改该用户的用户组:\n* 选中的选项框表示该用户属于该用户组。\n* 未选中的选项框表示该用户不属于该用户组。\n* 星号(*)表示一旦您被添加至该用户组后,您不能亲自移除其权限,反之亦然。\n* 井号(#)表示您只可以推迟该用户组成员的过期时间;您不能将其提前。",
        "userrights-reason": "原因:",
        "userrights-no-interwiki": "您并没有权限去编辑在其它wiki上的用户权限。",
        "userrights-nodatabase": "数据库$1不存在或并非为本地的。",
        "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-cannot-shorten-expiry": "您不能将用户组“$1”成员的过期时间提前。只有拥有添加或移除该组权限的用户可以将其提前。",
        "userrights-conflict": "用户权限的更改存在冲突!请检查并确认您的更改。",
        "group": "用户组:",
        "group-user": "用户",
        "right-editsemiprotected": "编辑保护级别为“{{int:protect-level-autoconfirmed}}”的页面",
        "right-editcontentmodel": "编辑页面的内容模型",
        "right-editinterface": "编辑用户界面",
-       "right-editusercssjs": "编辑其他用户的CSS和JavaScript文件",
        "right-editusercss": "编辑其他用户的CSS文件",
        "right-edituserjs": "编辑其他用户的JavaScript文件",
        "right-editmyusercss": "编辑您的用户CSS文件",
        "rcfilters-hideminor-conflicts-typeofchange": "某种更改类型不可指定为“小编辑”,因此该过滤器与以下更改类型过滤器相冲突:$1",
        "rcfilters-typeofchange-conflicts-hideminor": "这种更改类型过滤器与“小编辑”过滤器相冲突。某种更改类型不可指定为“小编辑”。",
        "rcnotefrom": "下面{{PLURAL:$5|是}}<strong>$3 $4</strong>之后的更改(最多显示<strong>$1</strong>个)。",
+       "rclistfromreset": "重置时间选择",
        "rclistfrom": "显示$3 $2之后的新更改",
        "rcshowhideminor": "$1小编辑",
        "rcshowhideminor-show": "显示",
        "rcshowhidecategorization": "$1页面分类",
        "rcshowhidecategorization-show": "显示",
        "rcshowhidecategorization-hide": "隐藏",
-       "rclinks": "显示过去$2天的最后$1个更改<br />$3",
+       "rclinks": "显示过去$2天的最后$1个更改",
        "diff": "差异",
        "hist": "历史",
        "hide": "隐藏",
        "php-uploaddisabledtext": "PHP文件上传停用。请检查file_uploads设置。",
        "uploadscripted": "该文件包含可能被网络浏览器错误解释的 HTML 或脚本代码。",
        "upload-scripted-pi-callback": "不能上传包含XML-stylesheet处理命令的文件。",
+       "upload-scripted-dtd": "不能上传包含非标准DTD声明的SVG文件。",
        "uploaded-script-svg": "在上传的SVG文件中找到可编写脚本的元素“$1”。",
        "uploaded-hostile-svg": "在上传的SVG文件中的样式元素中找到不安全CSS。",
        "uploaded-event-handler-on-svg": "在SVG文件中不允许设置event-handler属性<code>$1=\"$2\"</code>。",
        "undeleteviewlink": "查看",
        "undeleteinvert": "反向选择",
        "undeletecomment": "原因:",
-       "undeletedrevisions": "还原{{PLURAL:$1|$1个版本}}",
-       "undeletedrevisions-files": "还原{{PLURAL:$1|$1个版本}}和{{PLURAL:$2|$2个文件}}",
-       "undeletedfiles": "还原{{PLURAL:$1|$1个文件}}",
        "cannotundelete": "部分或全部还原删除失败:$1",
        "undeletedpage": "<strong>$1已经被还原</strong>\n\n最近的删除和还原记录请见[[Special:Log/delete|删除日志]]。",
        "undelete-header": "如要查询最近的记录请参阅[[Special:Log/delete|删除日志]]。",
        "sp-contributions-uploads": "上传",
        "sp-contributions-logs": "日志",
        "sp-contributions-talk": "讨论",
-       "sp-contributions-userrights": "用户权限管理",
+       "sp-contributions-userrights": "{{GENDER:$1|用户}}权限管理",
        "sp-contributions-blocked-notice": "这位用户目前正在被封禁。最近的封禁日志记录在下面提供以供参考:",
        "sp-contributions-blocked-notice-anon": "这个IP地址目前正在被封禁。最近的封禁日志记录在下面提供以供参考:",
        "sp-contributions-search": "搜索贡献",
        "unblocked-id": "封禁$1已被解除",
        "unblocked-ip": "[[Special:Contributions/$1|$1]]已解封。",
        "blocklist": "被封禁用户",
+       "autoblocklist": "自动封禁",
+       "autoblocklist-submit": "搜索",
+       "autoblocklist-legend": "自动封禁列表",
+       "autoblocklist-localblocks": "本地{{PLURAL:$1|自动封禁}}",
+       "autoblocklist-empty": "自动封禁列表为空。",
+       "autoblocklist-otherblocks": "其他{{PLURAL:$1|自动封禁}}",
        "ipblocklist": "被封禁用户",
        "ipblocklist-legend": "查找被封禁用户",
        "blocklist-userblocks": "隐藏账户封禁",
        "tooltip-pt-mycontris": "{{GENDER:|您}}的贡献的列表",
        "tooltip-pt-anoncontribs": "来自此IP地址的编辑列表",
        "tooltip-pt-login": "我们鼓励您登录;然而,这不是强制性的",
+       "tooltip-pt-login-private": "您需要登录以使用此wiki",
        "tooltip-pt-logout": "退出登录",
        "tooltip-pt-createaccount": "建议您创建一个账户并登录,但这不是强制的",
        "tooltip-ca-talk": "关于内容页面的讨论",
        "anonymous": "{{SITENAME}}匿名{{PLURAL:$1|用户}}",
        "siteuser": "{{SITENAME}}用户$1",
        "anonuser": "{{SITENAME}}匿名用户$1",
-       "lastmodifiedatby": "本页面被$3最后修改于$1 $2。",
+       "lastmodifiedatby": "本页面被$3最后编辑于$1 $2。",
        "othercontribs": "基于$1的劳动成果。",
        "others": "其他",
        "siteusers": "{{SITENAME}}{{PLURAL:$2|{{GENDER:$1|用户}}}}$1",
        "confirmrecreate": "在您开始编辑后,[[User:$1|$1]]([[User talk:$1|讨论]])因以下列原因{{GENDER:$1|删除}}了该页面:\n: <em>$2</em>\n请确认在您重新创建页面前三思。",
        "confirmrecreate-noreason": "用户 [[User:$1|$1]]([[User talk:$1|talk]]) 在您开始编辑之后{{GENDER:$1|删除}}此页面。请确认您确实要重新创建此页面。",
        "recreate": "重新创建",
+       "confirm-purge-title": "刷新本页",
        "confirm_purge_button": "确定",
        "confirm-purge-top": "要清除此页面的缓存吗?",
        "confirm-purge-bottom": "清除页面数据会清除缓存并强制显示最近的版本。",
        "specialpages-group-spam": "反垃圾链接工具",
        "specialpages-group-developer": "开发者工具",
        "blankpage": "空白页面",
-       "intentionallyblankpage": "这个页面被故意留为空白",
+       "intentionallyblankpage": "此页特意留白。",
        "external_image_whitelist": " #请原样保留本行文字<pre>\n#请在下面输入正则表达式片段(//之间的部份)\n#这些项目将会匹配外部图像的URL\n#匹配的项目将显示为图像,否则只会显示图像的链接\n#以#开头的行被视为评论\n#不区分大小写\n\n#请在本行上面输入所有正则表达式片段。请原样保留本行文字</pre>",
        "tags": "有效的更改标签",
        "tag-filter": "[[Special:Tags|标签]]过滤器:",
        "htmlform-user-not-valid": "<strong>$1</strong>不是一个有效的用户名。",
        "logentry-delete-delete": "$1{{GENDER:$2|删除}}页面$3",
        "logentry-delete-delete_redir": "$1通过覆盖{{GENDER:$2|删除}}重定向$3",
-       "logentry-delete-restore": "$1{{GENDER:$2|还原}}页面$3",
+       "logentry-delete-restore": "$1{{GENDER:$2|还原}}页面$3($4)",
+       "logentry-delete-restore-nocount": "$1{{GENDER:$2|还原}}页面$3",
+       "restore-count-revisions": "{{PLURAL:$1|$1个修订版本}}",
+       "restore-count-files": "{{PLURAL:$1|$1个文件}}",
        "logentry-delete-event": "$1{{GENDER:$2|更改}}$3的{{PLURAL:$5|$5个日志事件}}的可见性:$4",
        "logentry-delete-revision": "$1{{GENDER:$2|更改}}页面$3的{{PLURAL:$5|$5个版本}}的可见性:$4",
        "logentry-delete-event-legacy": "$1{{GENDER:$2|更改}}$3的日志事件的可见性",
        "special-characters-group-thai": "泰语",
        "special-characters-group-lao": "老挝语",
        "special-characters-group-khmer": "高棉语字母",
+       "special-characters-group-canadianaboriginal": "加拿大原住民音节文字",
        "special-characters-title-endash": "短划线",
        "special-characters-title-emdash": "长划线",
        "special-characters-title-minus": "减号",
        "restrictionsfield-help": "每行一个IP地址或CIDR段。要启用任何地址或地址段,可使用:<pre>0.0.0.0/0\n::/0</pre>",
        "revid": "修订版本$1",
        "pageid": "页面ID$1",
-       "rawhtml-notallowed": "&lt;html&gt;标签不能在一般页面以外使用。"
+       "rawhtml-notallowed": "&lt;html&gt;标签不能在一般页面以外使用。",
+       "gotointerwiki": "离开{{SITENAME}}",
+       "gotointerwiki-invalid": "指定的标题无效。",
+       "gotointerwiki-external": "您将要离开{{SITENAME}}来访问[[$2]],这是一个独立网站。\n\n[$1 点此继续访问$1]。",
+       "undelete-cantedit": "您不能还原该页面,因为您未被允许编辑该页面。",
+       "undelete-cantcreate": "您不能还原该页面,因为没有使用该页面名称的现有页面,并且您未被允许编辑该页面。"
 }
index eda13db..516e9ed 100644 (file)
        "redirectpagesub": "重新導向頁面",
        "redirectto": "重新導向至:",
        "lastmodifiedat": "此頁面最後修改於 $1 $2。",
-       "viewcount": "此頁面已被檢è¦\96é\81\8e {{PLURAL:$1|$1 æ¬¡}}ã\80\82",
+       "viewcount": "此頁面已被å­\98å\8f\96é\81\8e {{PLURAL:$1|$1 æ¬¡}}ã\80\82",
        "protectedpage": "受保護頁面",
        "jumpto": "前往:",
        "jumptonavigation": "導覽",
        "viewsourcetext": "您可以檢視並複製此頁面的原始碼。",
        "viewyourtext": "您可以檢視並複製此頁面中<strong>您編輯</strong>的原始碼。",
        "protectedinterface": "本頁用來提供此 Wiki 軟體介面上的文字,並且已被設為保護以防止惡意修改。\n如欲增加或修改 Wiki 的翻譯,請至 [https://translatewiki.net/ translatewiki.net] 上的 MediaWiki 在地化專案。",
-       "editinginterface": "<strong>警告:</strong>您正在編輯的頁面文字是用來作為軟體介面使用。\n變更此頁面將會影響其他使用者在此 Wiki 上看到的使用者介面。",
+       "editinginterface": "<strong>警告:</strong>您正在編輯的頁面文字是用來提供軟體介面使用。\n變更此頁面將會影響其他使用者在此 Wiki 上看到的使用者介面。",
        "translateinterface": "如欲修改 Wiki 的翻譯,請至 [https://translatewiki.net/ translatewiki.net] 上的 MediaWiki 在地化專案。",
        "cascadeprotected": "此頁面被保護無法編輯,因為此頁面被以下開啟 \"連鎖保護\" 選項的{{PLURAL:$1|一頁|數頁}}保護頁面引用:\n$2",
        "namespaceprotected": "您沒有權限編輯 <strong>$1</strong> 命名空間的頁面。",
        "userlogin-remembermypassword": "記住我的登入狀態",
        "userlogin-signwithsecure": "使用安全連線",
        "cannotlogin-title": "無法登入",
-       "cannotlogin-text": "無法登入",
+       "cannotlogin-text": "無法登入",
        "cannotloginnow-title": "現在無法登入",
        "cannotloginnow-text": "使用 $1 時無法登入。",
        "cannotcreateaccount-title": "無法建立帳號",
        "noemailprefs": "在您的偏好設定中設定電子郵件地址,讓您可以使用這些功能。",
        "emailconfirmlink": "確認您的電子郵件地址",
        "invalidemailaddress": "無法接受格式不正確的電子郵件地址,請輸入正確的電子郵件地址格式或略過填寫該欄位。",
-       "cannotchangeemail": "此 Wiki 禁止變更帳號的電子郵件地址。",
+       "cannotchangeemail": "此 Wiki 禁止更改帳號的電子郵件地址。",
        "emaildisabled": "此網站不能傳送電子郵件。",
        "accountcreated": "已建立帳號",
        "accountcreatedtext": "使用者帳號 [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|對話]]) 已建立。",
        "saveusergroups": "儲存{{GENDER:$1|使用者}}群組",
        "userrights-groupsmember": "所屬群組:",
        "userrights-groupsmember-auto": "所屬隱含群組:",
-       "userrights-groups-help": "您可以更改此使用者所屬的群組:\n* 已勾選的核選方塊代表該使用者屬於該群組。\n* 未勾選的核選方塊代表該使用者不屬於該群組。\n* 有 * 號標示代表一旦加入該群組後便不能移除,反之亦然。\n* 有 # 號標示代表您只能延後此群組的期限,您無法將其提前。",
+       "userrights-groups-help": "您可以更改此使用者所屬的群組:\n* 已勾選的核選方塊代表該使用者屬於該群組。\n* 未勾選的核選方塊代表該使用者不屬於該群組。\n* 有 * 號標示代表一旦加入該群組後便不能移除,反之亦然。\n* 有 # 號標示代表您只能延後此群組成員的期限,您無法將其提前。",
        "userrights-reason": "原因:",
        "userrights-no-interwiki": "您沒有權限去編輯其他 Wiki 上的使用者權限。",
        "userrights-nodatabase": "資料庫 $1 不存在或不在本地主機的。",
        "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-cannot-shorten-expiry": "您無法提前群組 \"$1\" 中成員的期限。只有擁有新增與移除此群組權限的使用者可以將期限提前。",
        "userrights-conflict": "使用者權限變更發生衝突!請檢閱並確認你的變更。",
        "group": "群組:",
        "group-user": "使用者",
        "right-editsemiprotected": "編輯保護層級為 \"{{int:protect-level-autoconfirmed}}\" 的頁面",
        "right-editcontentmodel": "編輯頁面的內容模型",
        "right-editinterface": "編輯使用者介面",
-       "right-editusercssjs": "編輯其他使用者的 CSS 與 JavaScript 檔",
        "right-editusercss": "編輯其他使用者的 CSS 檔",
        "right-edituserjs": "編輯其他使用者的 JavaScript 檔",
        "right-editmyusercss": "編輯自己的使用者 CSS 檔",
        "action-writeapi": "使用寫入 API",
        "action-delete": "刪除此頁面",
        "action-deleterevision": "刪除修訂",
-       "action-deletelogentry": "å\88 é\99¤æ\97¥èª\8cè¨\98é\8c\84",
+       "action-deletelogentry": "å\88ªé\99¤æ\97¥èª\8cé \85ç\9b®",
        "action-deletedhistory": "檢視頁面的刪除歷史",
        "action-deletedtext": "查看已刪除的修訂版本文字",
        "action-browsearchive": "搜尋已刪除頁面",
        "rcshowhidecategorization": "$1 頁面分類",
        "rcshowhidecategorization-show": "顯示",
        "rcshowhidecategorization-hide": "隱藏",
-       "rclinks": "顯示最近 $2 天內的 $1 次變更。<br />$3",
+       "rclinks": "顯示最近 $2 天內的 $1 次變更。",
        "diff": "差異",
        "hist": "歷史",
        "hide": "隱藏",
        "uploadstash-summary": "此頁面可存取已上傳或還在上傳程序但尚未在 Wiki 公開的檔案,這些檔案除了上傳的使用者本身外,其他人尚無法查看。",
        "uploadstash-clear": "清除儲藏庫檔案",
        "uploadstash-nofiles": "您沒有儲藏的檔案。",
-       "uploadstash-badtoken": "執行動作失敗。您的編輯資訊可能已經過期,請重新再試。",
+       "uploadstash-badtoken": "執行動作失敗。您的編輯憑証可能已經過期,請重新再試。",
        "uploadstash-errclear": "清除檔案失敗。",
        "uploadstash-refresh": "更新檔案清單",
        "uploadstash-thumbnail": "檢視縮圖",
        "undeleteviewlink": "檢視",
        "undeleteinvert": "反向選擇",
        "undeletecomment": "原因:",
-       "undeletedrevisions": "{{PLURAL:$1|$1 個修訂}}已還原",
-       "undeletedrevisions-files": "{{PLURAL:$1|$1 個修訂}}與 {{PLURAL:$2|$2 個檔案}}已還原",
-       "undeletedfiles": "{{PLURAL:$1|$1}} 個檔案已還原",
        "cannotundelete": "部份或全部的取消刪除失敗:\n$1",
        "undeletedpage": "<strong>$1 已還原</strong>\n\n請參考 [[Special:Log/delete|刪除日誌]] 以查詢最近刪除及還原的記錄。",
        "undelete-header": "請參考 [[Special:Log/delete|刪除日誌]] 查詢最近刪除的頁面。",
        "unblocked-id": "已經移除 $1 的封鎖。",
        "unblocked-ip": "[[Special:Contributions/$1|$1]] 已解除封鎖。",
        "blocklist": "已封鎖的使用者",
+       "autoblocklist-submit": "搜尋",
        "ipblocklist": "已封鎖的使用者",
        "ipblocklist-legend": "搜尋已封鎖的使用者",
        "blocklist-userblocks": "隱藏帳號封鎖",
        "import": "匯入頁面",
        "importinterwiki": "從其他 wiki 匯入",
        "import-interwiki-text": "請選擇一個 Wiki 與頁面標題以進行匯入。\n會同時記錄修訂日期和編輯者的名稱。\n所有的從跨 Wiki 匯入操作都會被記錄在 [[Special:Log/import|匯入日誌]]。",
-       "import-interwiki-sourcewiki": "來源 wiki:",
+       "import-interwiki-sourcewiki": "來源 Wiki:",
        "import-interwiki-sourcepage": "來源頁面:",
        "import-interwiki-history": "複製此頁面的所有歷史修訂",
        "import-interwiki-templates": "包含所有模板",
        "specialpages-group-spam": "反垃圾訊息工具",
        "specialpages-group-developer": "開發人員工具",
        "blankpage": "空白頁面",
-       "intentionallyblankpage": "此頁面被故意設為空白。",
+       "intentionallyblankpage": "此頁故意留白。",
        "external_image_whitelist": " #請勿修改本行文字<pre>\n#請於下方填寫正規表示法 (只需 // 之間的內容)\n#將會檢查外部連結的圖片是否符合這些條件\n#符合條件的連結會以圖片顯示,否則只顯示連結\n#以 # 開頭的行會被做為註解\n#此條件不區分大小寫\n\n#請將所有正規表示法輸入在此行上方,請勿修改本行文字</pre>",
        "tags": "有效變更標籤",
        "tag-filter": "[[Special:Tags|標籤]]搜尋:",
        "logentry-suppress-event-legacy": "$1 {{GENDER:$2|已暗中變更}} $3 中日誌的可見性",
        "logentry-suppress-revision-legacy": "$1 {{GENDER:$2|已暗中更改}}頁面 $3 中修訂的可見性",
        "revdelete-content-hid": "已隱藏內容",
-       "revdelete-summary-hid": "已隱藏摘要",
+       "revdelete-summary-hid": "已隱藏編輯摘要",
        "revdelete-uname-hid": "隱藏使用者名稱",
        "revdelete-content-unhid": "取消隱藏內容",
        "revdelete-summary-unhid": "取消隱藏編輯摘要",
        "authmanager-authn-no-local-user": "提供的憑證沒有與任何在此 wiki 上的使用者相關聯。",
        "authmanager-authn-no-local-user-link": "提供的憑證有效但沒有與任何在此 wiki 上的使用者相關聯。請採用其他方式登入,或建立新使用者,您將會有選項可以連結您先前的憑證到新帳號。",
        "authmanager-authn-autocreate-failed": "自動建立本地帳號失敗:$1",
-       "authmanager-change-not-supported": "提供的認證無法變更,因為尚無法使用。",
+       "authmanager-change-not-supported": "提供的憑証無法變更,因為尚無法使用。",
        "authmanager-create-disabled": "已關閉帳號自動建立。",
        "authmanager-create-from-login": "要建立您的帳號,請先填寫此欄位。",
        "authmanager-create-not-in-progress": "帳號建立尚未進行或連線階段資料已遺失,請重頭再開始。",
        "authpage-cannot-link-continue": "無法繼續帳號連結,您的連線階段似乎已逾時。",
        "cannotauth-not-allowed-title": "權限不足",
        "cannotauth-not-allowed": "您不被允許使用此頁面",
-       "changecredentials": "變更認證",
+       "changecredentials": "變更憑証",
        "changecredentials-submit": "變更認證",
        "changecredentials-invalidsubpage": "$1 不是有效的憑証類型。",
        "changecredentials-success": "已變更您的認證。",
-       "removecredentials": "移除認證",
+       "removecredentials": "移除憑証",
        "removecredentials-submit": "移除認證",
        "removecredentials-invalidsubpage": "$1 不是有效的憑証類型。",
        "removecredentials-success": "已移除您的憑證。",
-       "credentialsform-provider": "認證類型:",
+       "credentialsform-provider": "憑証類型:",
        "credentialsform-account": "帳號名稱:",
        "cannotlink-no-provider-title": "沒有可連結的帳號",
        "cannotlink-no-provider": "沒有可連結的帳號。",
        "unlinkaccounts": "取消連結帳號",
        "unlinkaccounts-success": "已取消連結帳號。",
        "authenticationdatachange-ignored": "認証資料變更未被處理,可能未設定提供者?",
-       "userjsispublic": "è«\8b注æ\84\8fï¼\9aJavaScript å­\90é \81é\9d¢å\8f¯è¢«å\85¶ä»\96使ç\94¨è\80\85檢è¦\96ï¼\8cä¸\8dæ\87\89å\8c\85å\90«æ\86\91証資料。",
-       "usercssispublic": "è«\8b注æ\84\8fï¼\9aCSS å­\90é \81é\9d¢å\8f¯è¢«å\85¶ä»\96使ç\94¨è\80\85檢è¦\96ï¼\8cä¸\8dæ\87\89å\8c\85å\90«æ\86\91証資料。",
+       "userjsispublic": "è«\8b注æ\84\8fï¼\9aJavaScript å­\90é \81é\9d¢å\8f¯è¢«å\85¶ä»\96使ç\94¨è\80\85檢è¦\96ï¼\8cä¸\8dæ\87\89å\8c\85å\90«æ©\9få¯\86資料。",
+       "usercssispublic": "è«\8b注æ\84\8fï¼\9aCSS å­\90é \81é\9d¢å\8f¯è¢«å\85¶ä»\96使ç\94¨è\80\85檢è¦\96ï¼\8cä¸\8dæ\87\89å\8c\85å\90«æ©\9få¯\86資料。",
        "restrictionsfield-badip": "無效的 IP 位址或範圍:$1",
        "restrictionsfield-label": "允許的 IP 範圍:",
        "restrictionsfield-help": "一個 IP 位址或 CIDR 範圍一行,要開啟所有範圍可使用:<pre>0.0.0.0/0\n::/0</pre>",
index 4dedc47..7adf9c0 100644 (file)
@@ -8,4 +8,23 @@
  *
  */
 
+$namespaceNames = [
+       NS_MEDIA            => 'मिडिया',
+       NS_SPECIAL          => 'बिशेष',
+       NS_TALK             => 'कुरणि',
+       NS_USER             => 'प्रयोगकर्ता',
+       NS_USER_TALK        => 'प्रयोगकर्ता_कुरणि',
+       NS_PROJECT_TALK     => '$1_वार्ता',
+       NS_FILE             => 'चित्र',
+       NS_FILE_TALK        => 'चित्र_कुरणि',
+       NS_MEDIAWIKI        => 'मिडियाविकि',
+       NS_MEDIAWIKI_TALK   => 'मिडियाविकि_कुरणि',
+       NS_TEMPLATE         => 'ढाँचा',
+       NS_TEMPLATE_TALK    => 'ढाँचा_कुरणि',
+       NS_HELP             => 'मद्दत',
+       NS_HELP_TALK        => 'मद्दत_कुरणि',
+       NS_CATEGORY         => 'श्रेणी',
+       NS_CATEGORY_TALK    => 'श्रेणी_कुरणि',
+];
+
 $fallback = 'ne';
index b9280ea..ac9f1b7 100644 (file)
@@ -400,6 +400,7 @@ $specialPageAliases = [
        'ApiHelp'                   => [ 'ApiHelp' ],
        'ApiSandbox'                => [ 'ApiSandbox' ],
        'Ancientpages'              => [ 'AncientPages' ],
+       'AutoblockList'             => [ 'AutoblockList', 'ListAutoblocks' ],
        'Badtitle'                  => [ 'Badtitle' ],
        'Blankpage'                 => [ 'BlankPage' ],
        'Block'                     => [ 'Block', 'BlockIP', 'BlockUser' ],
@@ -427,6 +428,7 @@ $specialPageAliases = [
        'Fewestrevisions'           => [ 'FewestRevisions' ],
        'FileDuplicateSearch'       => [ 'FileDuplicateSearch' ],
        'Filepath'                  => [ 'FilePath' ],
+       'GoToInterwiki'             => [ 'GoToInterwiki' ],
        'Import'                    => [ 'Import' ],
        'Invalidateemail'           => [ 'InvalidateEmail' ],
        'JavaScriptTest'            => [ 'JavaScriptTest' ],
index 28c69df..fcc12c9 100644 (file)
@@ -15,8 +15,8 @@ $namespaceNames = [
        NS_USER             => 'Kasutaja',
        NS_USER_TALK        => 'Kasutaja_arutelu',
        NS_PROJECT_TALK     => '{{GRAMMAR:genitive|$1}}_arutelu',
-       NS_FILE             => 'Pilt',
-       NS_FILE_TALK        => 'Pildi_arutelu',
+       NS_FILE             => 'Fail',
+       NS_FILE_TALK        => 'Faili_arutelu',
        NS_MEDIAWIKI        => 'MediaWiki',
        NS_MEDIAWIKI_TALK   => 'MediaWiki_arutelu',
        NS_TEMPLATE         => 'Mall',
@@ -29,6 +29,8 @@ $namespaceNames = [
 
 $namespaceAliases = [
        '$1_arutelu' => NS_PROJECT_TALK,
+       'Pilt' => NS_FILE,
+       'Pildi_arutelu' => NS_FILE_TALK,
 ];
 
 $specialPageAliases = [
index a8080c5..478a0c4 100644 (file)
@@ -25,6 +25,8 @@
 require_once __DIR__ . '/../includes/PHPVersionCheck.php';
 wfEntryPointCheck( 'cli' );
 
+use Wikimedia\Rdbms\DBReplicationWaitError;
+
 /**
  * @defgroup MaintenanceArchive Maintenance archives
  * @ingroup Maintenance
@@ -40,6 +42,7 @@ use Wikimedia\Rdbms\IDatabase;
 use MediaWiki\Logger\LoggerFactory;
 use MediaWiki\MediaWikiServices;
 use Wikimedia\Rdbms\LBFactory;
+use Wikimedia\Rdbms\IMaintainableDatabase;
 
 /**
  * Abstract maintenance class for quickly writing and churning out
@@ -106,7 +109,7 @@ abstract class Maintenance {
 
        /**
         * Used by getDB() / setDB()
-        * @var Database
+        * @var IMaintainableDatabase
         */
        private $mDb = null;
 
@@ -206,7 +209,7 @@ abstract class Maintenance {
         * @param string $description The description of the param to show on --help
         * @param bool $required Is the param required?
         * @param bool $withArg Is an argument required with this option?
-        * @param string $shortName Character to use as short name
+        * @param string|bool $shortName Character to use as short name
         * @param bool $multiOccurrence Can this option be passed multiple times?
         */
        protected function addOption( $name, $description, $required = false,
@@ -1243,7 +1246,7 @@ abstract class Maintenance {
         * @param integer $db DB index (DB_REPLICA/DB_MASTER)
         * @param array $groups; default: empty array
         * @param string|bool $wiki; default: current wiki
-        * @return Database
+        * @return IMaintainableDatabase
         */
        protected function getDB( $db, $groups = [], $wiki = false ) {
                if ( is_null( $this->mDb ) ) {
@@ -1256,7 +1259,7 @@ abstract class Maintenance {
        /**
         * Sets database object to be returned by getDB().
         *
-        * @param IDatabase $db Database object to be used
+        * @param IDatabase $db
         */
        public function setDB( IDatabase $db ) {
                $this->mDb = $db;
@@ -1318,7 +1321,7 @@ abstract class Maintenance {
 
        /**
         * Lock the search index
-        * @param Database &$db
+        * @param IMaintainableDatabase &$db
         */
        private function lockSearchindex( $db ) {
                $write = [ 'searchindex' ];
@@ -1336,7 +1339,7 @@ abstract class Maintenance {
 
        /**
         * Unlock the tables
-        * @param Database &$db
+        * @param IMaintainableDatabase &$db
         */
        private function unlockSearchindex( $db ) {
                $db->unlockTables( __CLASS__ . '::' . __METHOD__ );
@@ -1345,7 +1348,7 @@ abstract class Maintenance {
        /**
         * Unlock and lock again
         * Since the lock is low-priority, queued reads will be able to complete
-        * @param Database &$db
+        * @param IMaintainableDatabase &$db
         */
        private function relockSearchindex( $db ) {
                $this->unlockSearchindex( $db );
@@ -1356,7 +1359,7 @@ abstract class Maintenance {
         * Perform a search index update with locking
         * @param int $maxLockTime The maximum time to keep the search index locked.
         * @param string $callback The function that will update the function.
-        * @param Database $dbw
+        * @param IMaintainableDatabase $dbw
         * @param array $results
         */
        public function updateSearchIndex( $maxLockTime, $callback, $dbw, $results ) {
@@ -1392,7 +1395,7 @@ abstract class Maintenance {
 
        /**
         * Update the searchindex table for a given pageid
-        * @param Database $dbw A database write handle
+        * @param IDatabase $dbw A database write handle
         * @param int $pageId The page ID to update.
         * @return null|string
         */
diff --git a/maintenance/archives/patch-rename-ar_usertext_timestamp.sql b/maintenance/archives/patch-rename-ar_usertext_timestamp.sql
new file mode 100644 (file)
index 0000000..658c179
--- /dev/null
@@ -0,0 +1,7 @@
+-- Rename the archive.ar_usertext_timestamp index to usertext_timestamp.
+-- This is for MySQL only and is only necessary on wikis freshly installed on
+-- 1.28.0 when bug T154872 was present. The patch will probably be removed in
+-- 1.29 since we plan on renaming the index properly to ar_usertext_timestamp.
+ALTER TABLE /*$wgDBprefix*/archive
+       DROP INDEX ar_usertext_timestamp,
+       ADD INDEX usertext_timestamp (ar_user_text,ar_timestamp);
index 0beff7c..13362e0 100644 (file)
@@ -23,6 +23,8 @@
 
 require __DIR__ . '/../commandLine.inc';
 
+use Wikimedia\Rdbms\IMaintainableDatabase;
+
 /**
  * Maintenance script that upgrade for log_id/log_deleted fields in a
  * replication-safe way.
@@ -32,7 +34,7 @@ require __DIR__ . '/../commandLine.inc';
 class UpdateLogging {
 
        /**
-        * @var Database
+        * @var IMaintainableDatabase
         */
        public $dbw;
        public $batchSize = 1000;
index 5fab082..638e47e 100644 (file)
@@ -34,67 +34,99 @@ require_once __DIR__ . '/../Maintenance.php';
  * @ingroup Benchmark
  */
 abstract class Benchmarker extends Maintenance {
-       private $results;
+       protected $defaultCount = 100;
 
        public function __construct() {
                parent::__construct();
-               $this->addOption( 'count', "How many times to run a benchmark", false, true );
+               $this->addOption( 'count', 'How many times to run a benchmark', false, true );
        }
 
        public function bench( array $benchs ) {
-               $bench_number = 0;
-               $count = $this->getOption( 'count', 100 );
-
-               foreach ( $benchs as $bench ) {
-                       // handle empty args
-                       if ( !array_key_exists( 'args', $bench ) ) {
+               $this->startBench();
+               $count = $this->getOption( 'count', $this->defaultCount );
+               foreach ( $benchs as $key => $bench ) {
+                       // Default to no arguments
+                       if ( !isset( $bench['args'] ) ) {
                                $bench['args'] = [];
                        }
 
-                       $bench_number++;
-                       $start = microtime( true );
+                       // Optional setup called outside time measure
+                       if ( isset( $bench['setup'] ) ) {
+                               call_user_func( $bench['setup'] );
+                       }
+
+                       // Run benchmarks
+                       $times = [];
                        for ( $i = 0; $i < $count; $i++ ) {
+                               $t = microtime( true );
                                call_user_func_array( $bench['function'], $bench['args'] );
+                               $t = ( microtime( true ) - $t ) * 1000;
+                               $times[] = $t;
+                       }
+
+                       // Collect metrics
+                       sort( $times, SORT_NUMERIC );
+                       $min = $times[0];
+                       $max = end( $times );
+                       if ( $count % 2 ) {
+                               $median = $times[ ( $count - 1 ) / 2 ];
+                       } else {
+                               $median = ( $times[$count / 2] + $times[$count / 2 - 1] ) / 2;
                        }
-                       $delta = microtime( true ) - $start;
+                       $total = array_sum( $times );
+                       $mean = $total / $count;
 
-                       // function passed as a callback
-                       if ( is_array( $bench['function'] ) ) {
-                               $ret = get_class( $bench['function'][0] ) . '->' . $bench['function'][1];
-                               $bench['function'] = $ret;
+                       // Name defaults to name of called function
+                       if ( is_string( $key ) ) {
+                               $name = $key;
+                       } else {
+                               if ( is_array( $bench['function'] ) ) {
+                                       $name = get_class( $bench['function'][0] ) . '::' . $bench['function'][1];
+                               } else {
+                                       $name = strval( $bench['function'] );
+                               }
+                               $name = sprintf( "%s(%s)",
+                                       $name,
+                                       implode( ', ', $bench['args'] )
+                               );
                        }
 
-                       $this->results[$bench_number] = [
-                               'function' => $bench['function'],
-                               'arguments' => $bench['args'],
+                       $this->addResult( [
+                               'name' => $name,
                                'count' => $count,
-                               'delta' => $delta,
-                               'average' => $delta / $count,
-                       ];
+                               'total' => $total,
+                               'min' => $min,
+                               'median' => $median,
+                               'mean' => $mean,
+                               'max' => $max,
+                       ] );
                }
        }
 
-       public function getFormattedResults() {
-               $ret = sprintf( "Running PHP version %s (%s) on %s %s %s\n\n",
-                       phpversion(),
-                       php_uname( 'm' ),
-                       php_uname( 's' ),
-                       php_uname( 'r' ),
-                       php_uname( 'v' )
+       public function startBench() {
+               $this->output(
+                       sprintf( "Running PHP version %s (%s) on %s %s %s\n\n",
+                               phpversion(),
+                               php_uname( 'm' ),
+                               php_uname( 's' ),
+                               php_uname( 'r' ),
+                               php_uname( 'v' )
+                       )
                );
-               foreach ( $this->results as $res ) {
-                       // show function with args
-                       $ret .= sprintf( "%s times: function %s(%s) :\n",
-                               $res['count'],
-                               $res['function'],
-                               implode( ', ', $res['arguments'] )
-                       );
-                       $ret .= sprintf( "   %6.2fms (%6.2fms each)\n",
-                               $res['delta'] * 1000,
-                               $res['average'] * 1000
+       }
+
+       public function addResult( $res ) {
+               $ret = sprintf( "%s\n  %' 6s: %d\n",
+                       $res['name'],
+                       'times',
+                       $res['count']
+               );
+               foreach ( [ 'total', 'min', 'median', 'mean', 'max' ] as $metric ) {
+                       $ret .= sprintf( "  %' 6s: %6.2fms\n",
+                               $metric,
+                               $res[$metric]
                        );
                }
-
-               return $ret;
+               $this->output( "$ret\n" );
        }
 }
index 5b64bee..0e3cd73 100644 (file)
@@ -42,20 +42,19 @@ class BenchHttpHttps extends Benchmarker {
                        [ 'function' => [ $this, 'getHTTP' ] ],
                        [ 'function' => [ $this, 'getHTTPS' ] ],
                ] );
-               print $this->getFormattedResults();
        }
 
-       static function doRequest( $proto ) {
+       private function doRequest( $proto ) {
                Http::get( "$proto://localhost/", [], __METHOD__ );
        }
 
        // bench function 1
-       function getHTTP() {
+       protected function getHTTP() {
                $this->doRequest( 'http' );
        }
 
        // bench function 2
-       function getHTTPS() {
+       protected function getHTTPS() {
                $this->doRequest( 'https' );
        }
 }
index c8a9055..86bcc8a 100644 (file)
@@ -60,13 +60,11 @@ class BenchWikimediaBaseConvert extends Benchmarker {
                                'args' => [ $number, $inbase, $outbase, 0, true, 'gmp' ]
                        ],
                ] );
-
-               $this->output( $this->getFormattedResults() );
        }
 
        protected static function makeRandomNumber( $base, $length ) {
-               $baseChars = "0123456789abcdefghijklmnopqrstuvwxyz";
-               $res = "";
+               $baseChars = '0123456789abcdefghijklmnopqrstuvwxyz';
+               $res = '';
                for ( $i = 0; $i < $length; $i++ ) {
                        $res .= $baseChars[mt_rand( 0, $base - 1 )];
                }
index 2a8d79a..0a999ec 100644 (file)
 
 require_once __DIR__ . '/Benchmarker.php';
 
+use Wikimedia\Rdbms\IDatabase;
+use Wikimedia\Rdbms\IMaintainableDatabase;
+
 /**
  * Maintenance script that benchmarks SQL DELETE vs SQL TRUNCATE.
  *
  * @ingroup Benchmark
  */
 class BenchmarkDeleteTruncate extends Benchmarker {
+       protected $defaultCount = 10;
+
        public function __construct() {
                parent::__construct();
                $this->addDescription( 'Benchmarks SQL DELETE vs SQL TRUNCATE.' );
@@ -43,33 +48,30 @@ class BenchmarkDeleteTruncate extends Benchmarker {
   text varbinary(255) NOT NULL
 );" );
 
-               $this->insertData( $dbw );
-
-               $start = microtime( true );
-
-               $this->delete( $dbw );
-
-               $end = microtime( true );
-
-               echo "Delete: " . sprintf( "%6.3fms", ( $end - $start ) * 1000 );
-               echo "\r\n";
-
-               $this->insertData( $dbw );
-
-               $start = microtime( true );
-
-               $this->truncate( $dbw );
-
-               $end = microtime( true );
-
-               echo "Truncate: " . sprintf( "%6.3fms", ( $end - $start ) * 1000 );
-               echo "\r\n";
+               $this->bench( [
+                       'Delete' => [
+                               'setup' => function () use ( $dbw ) {
+                                       $this->insertData( $dbw );
+                               },
+                               'function' => function () use ( $dbw ) {
+                                       $this->delete( $dbw );
+                               }
+                       ],
+                       'Truncate' => [
+                               'setup' => function () use ( $dbw ) {
+                                       $this->insertData( $dbw );
+                               },
+                               'function' => function () use ( $dbw ) {
+                                       $this->truncate( $dbw );
+                               }
+                       ]
+               ] );
 
                $dbw->dropTable( 'test' );
        }
 
        /**
-        * @param Database $dbw
+        * @param IDatabase $dbw
         * @return void
         */
        private function insertData( $dbw ) {
@@ -82,7 +84,7 @@ class BenchmarkDeleteTruncate extends Benchmarker {
        }
 
        /**
-        * @param Database $dbw
+        * @param IDatabase $dbw
         * @return void
         */
        private function delete( $dbw ) {
@@ -90,7 +92,7 @@ class BenchmarkDeleteTruncate extends Benchmarker {
        }
 
        /**
-        * @param Database $dbw
+        * @param IMaintainableDatabase $dbw
         * @return void
         */
        private function truncate( $dbw ) {
@@ -99,5 +101,5 @@ class BenchmarkDeleteTruncate extends Benchmarker {
        }
 }
 
-$maintClass = "BenchmarkDeleteTruncate";
+$maintClass = 'BenchmarkDeleteTruncate';
 require_once RUN_MAINTENANCE_IF_MAIN;
index 46c9d39..843ef7c 100644 (file)
@@ -42,11 +42,10 @@ class BenchIfSwitch extends Benchmarker {
                        [ 'function' => [ $this, 'doElseIf' ] ],
                        [ 'function' => [ $this, 'doSwitch' ] ],
                ] );
-               print $this->getFormattedResults();
        }
 
        // bench function 1
-       function doElseIf() {
+       protected function doElseIf() {
                $a = 'z';
                if ( $a == 'a' ) {
                } elseif ( $a == 'b' ) {
@@ -69,7 +68,7 @@ class BenchIfSwitch extends Benchmarker {
        }
 
        // bench function 2
-       function doSwitch() {
+       protected function doSwitch() {
                $a = 'z';
                switch ( $a ) {
                        case 'b':
index 156f8fc..55c7159 100644 (file)
@@ -51,22 +51,21 @@ class BenchStrtrStrReplace extends Benchmarker {
                        [ 'function' => [ $this, 'benchstrtr_indirect' ] ],
                        [ 'function' => [ $this, 'benchstr_replace_indirect' ] ],
                ] );
-               print $this->getFormattedResults();
        }
 
-       function benchstrtr() {
+       protected function benchstrtr() {
                strtr( "[[MediaWiki:Some_random_test_page]]", "_", " " );
        }
 
-       function benchstr_replace() {
+       protected function benchstr_replace() {
                str_replace( "_", " ", "[[MediaWiki:Some_random_test_page]]" );
        }
 
-       function benchstrtr_indirect() {
+       protected function benchstrtr_indirect() {
                bfNormalizeTitleStrTr( "[[MediaWiki:Some_random_test_page]]" );
        }
 
-       function benchstr_replace_indirect() {
+       protected function benchstr_replace_indirect() {
                bfNormalizeTitleStrReplace( "[[MediaWiki:Some_random_test_page]]" );
        }
 }
index b2f7e96..3091de6 100644 (file)
@@ -32,6 +32,8 @@ require_once __DIR__ . '/Benchmarker.php';
 class BenchUtf8TitleCheck extends Benchmarker {
        private $data;
 
+       private $isutf8;
+
        public function __construct() {
                parent::__construct();
 
@@ -84,29 +86,26 @@ class BenchUtf8TitleCheck extends Benchmarker {
                        ];
                }
                $this->bench( $benchmarks );
-               print $this->getFormattedResults();
        }
 
-       private $isutf8;
-
-       function use_regexp( $s ) {
+       protected function use_regexp( $s ) {
                $this->isutf8 = preg_match( '/^([\x00-\x7f]|[\xc0-\xdf][\x80-\xbf]|' .
                        '[\xe0-\xef][\x80-\xbf]{2}|[\xf0-\xf7][\x80-\xbf]{3})+$/', $s );
        }
 
-       function use_regexp_non_capturing( $s ) {
+       protected function use_regexp_non_capturing( $s ) {
                // Same as above with a non-capturing subgroup.
                $this->isutf8 = preg_match( '/^(?:[\x00-\x7f]|[\xc0-\xdf][\x80-\xbf]|' .
                        '[\xe0-\xef][\x80-\xbf]{2}|[\xf0-\xf7][\x80-\xbf]{3})+$/', $s );
        }
 
-       function use_regexp_once_only( $s ) {
+       protected function use_regexp_once_only( $s ) {
                // Same as above with a once-only subgroup.
                $this->isutf8 = preg_match( '/^(?>[\x00-\x7f]|[\xc0-\xdf][\x80-\xbf]|' .
                        '[\xe0-\xef][\x80-\xbf]{2}|[\xf0-\xf7][\x80-\xbf]{3})+$/', $s );
        }
 
-       function use_mb_check_encoding( $s ) {
+       protected function use_mb_check_encoding( $s ) {
                $this->isutf8 = mb_check_encoding( $s, 'UTF-8' );
        }
 }
index ac0caf6..960ef0e 100644 (file)
@@ -42,20 +42,19 @@ class BenchWfIsWindows extends Benchmarker {
                        [ 'function' => [ $this, 'wfIsWindows' ] ],
                        [ 'function' => [ $this, 'wfIsWindowsCached' ] ],
                ] );
-               print $this->getFormattedResults();
        }
 
-       static function is_win() {
+       protected static function is_win() {
                return substr( php_uname(), 0, 7 ) == 'Windows';
        }
 
        // bench function 1
-       function wfIsWindows() {
+       protected function wfIsWindows() {
                return self::is_win();
        }
 
        // bench function 2
-       function wfIsWindowsCached() {
+       protected function wfIsWindowsCached() {
                static $isWindows = null;
                if ( $isWindows == null ) {
                        $isWindows = self::is_win();
index 70f3654..675d069 100644 (file)
@@ -24,6 +24,7 @@
 require_once __DIR__ . '/Maintenance.php';
 
 use Wikimedia\Rdbms\ResultWrapper;
+use Wikimedia\Rdbms\IDatabase;
 
 /**
  * Maintenance script to convert user options to the new `user_properties` table.
@@ -76,7 +77,7 @@ class ConvertUserOptions extends Maintenance {
 
        /**
         * @param ResultWrapper $res
-        * @param Database $dbw
+        * @param IDatabase $dbw
         * @return null|int
         */
        function convertOptionBatch( $res, $dbw ) {
index df496d4..e99f2b0 100644 (file)
@@ -26,6 +26,8 @@
 
 require_once __DIR__ . '/Maintenance.php';
 
+use Wikimedia\Rdbms\IDatabase;
+
 /**
  * Maintenance script that deletes revisions which refer to a nonexisting page.
  *
@@ -83,7 +85,7 @@ class DeleteOrphanedRevisions extends Maintenance {
         * Do this inside a transaction
         *
         * @param array $id Array of revision id values
-        * @param Database $dbw Database class (needs to be a master)
+        * @param IDatabase $dbw Master DB handle
         */
        private function deleteRevs( $id, &$dbw ) {
                if ( !is_array( $id ) ) {
index 0111ac5..3abbdab 100644 (file)
@@ -86,7 +86,6 @@ class DeleteRevision extends Maintenance {
                                );
                                $dbw->delete( 'revision', [ 'rev_id' => $revID ] );
                                if ( $pageLatest == $revID ) {
-                                       // Database integrity
                                        $newLatest = $dbw->selectField(
                                                'revision',
                                                'rev_id',
index a2a06d2..e7ba8fa 100644 (file)
@@ -1322,7 +1322,6 @@ edittoken
 edittools
 editurl
 editusercss
-editusercssjs
 edituserjs
 edoe
 egrave
@@ -1398,7 +1397,6 @@ epcampus
 epcoordinator
 epinstructor
 eponline
-eqiad
 erevoke
 errno
 error
@@ -4571,7 +4569,6 @@ wmls
 wmlsc
 wmlscript
 wmlscriptc
-wmnet
 wordcount
 wordprocessingml
 wordwg
index 9f983c1..6dbad94 100644 (file)
@@ -117,7 +117,7 @@ abstract class DumpIterator extends Maintenance {
        /**
         * Callback function for each revision, child classes should override
         * processRevision instead.
-        * @param Database $rev
+        * @param WikiRevision $rev
         */
        public function handleRevision( $rev ) {
                $title = $rev->getTitle();
index 5d92eec..581f0d7 100644 (file)
@@ -27,7 +27,7 @@
 require_once __DIR__ . '/backup.inc';
 require_once __DIR__ . '/../includes/export/WikiExporter.php';
 
-use Wikimedia\Rdbms\LoadBalancer;
+use Wikimedia\Rdbms\IMaintainableDatabase;
 
 /**
  * @ingroup Maintenance
@@ -88,7 +88,7 @@ class TextPassDumper extends BackupDumper {
        protected $checkpointFiles = [];
 
        /**
-        * @var Database
+        * @var IMaintainableDatabase
         */
        protected $db;
 
index 9dee6e5..9c5a375 100644 (file)
@@ -24,6 +24,8 @@
 
 require_once __DIR__ . '/Maintenance.php';
 
+use Wikimedia\Rdbms\IDatabase;
+
 /**
  * Maintenance script used to fetch page text in a subprocess.
  *
@@ -71,7 +73,7 @@ class FetchText extends Maintenance {
 
        /**
         * May throw a database error if, say, the server dies during query.
-        * @param Database $db
+        * @param IDatabase $db
         * @param int $id The old_id
         * @return string
         */
index 80e8011..0bd627f 100644 (file)
  * @ingroup Maintenance
  */
 
+require_once __DIR__ . '/Maintenance.php';
+
 use MediaWiki\Linker\LinkTarget;
 use MediaWiki\MediaWikiServices;
 use Wikimedia\Rdbms\ResultWrapper;
-
-require_once __DIR__ . '/Maintenance.php';
+use Wikimedia\Rdbms\IMaintainableDatabase;
 
 /**
  * Maintenance script that checks for articles to fix after
@@ -39,7 +40,7 @@ require_once __DIR__ . '/Maintenance.php';
 class NamespaceConflictChecker extends Maintenance {
 
        /**
-        * @var Database
+        * @var IMaintainableDatabase
         */
        protected $db;
 
index ba1e879..48c3d37 100644 (file)
@@ -19,6 +19,8 @@
  * @ingroup Maintenance
  */
 
+use Wikimedia\Rdbms\DBQueryError;
+
 /**
  * When using shared tables that are referenced by foreign keys on local
  * tables you have to change the constraints on local tables.
index 2da8830..e36c5b6 100644 (file)
@@ -30,6 +30,8 @@
 
 require_once __DIR__ . '/Maintenance.php';
 
+use Wikimedia\Rdbms\IMaintainableDatabase;
+
 /**
  * Maintenance script that looks for 'orphan' revisions hooked to pages which
  * don't exist and 'childless' pages with no revisions.
@@ -56,7 +58,7 @@ class Orphans extends Maintenance {
 
        /**
         * Lock the appropriate tables for the script
-        * @param Database $db
+        * @param IMaintainableDatabase $db
         * @param string[] $extraTable The name of any extra tables to lock (eg: text)
         */
        private function lockTables( $db, $extraTable = [] ) {
index b41e0e0..7d83180 100644 (file)
 
 require_once __DIR__ . '/Maintenance.php';
 
+use Wikimedia\Rdbms\IDatabase;
+
 /**
  * Usage:
  *  populateContentModel.php --ns=1 --table=page
  */
 class PopulateContentModel extends Maintenance {
        protected $wikiId;
-
+       /** @var WANObjectCache */
        protected $wanCache;
 
        public function __construct() {
@@ -78,7 +80,7 @@ class PopulateContentModel extends Maintenance {
                $this->wanCache->delete( $revisionKey );
        }
 
-       private function updatePageRows( Database $dbw, $pageIds, $model ) {
+       private function updatePageRows( IDatabase $dbw, $pageIds, $model ) {
                $count = count( $pageIds );
                $this->output( "Setting $count rows to $model..." );
                $dbw->update(
@@ -91,7 +93,7 @@ class PopulateContentModel extends Maintenance {
                $this->output( "done.\n" );
        }
 
-       protected function populatePage( Database $dbw, $ns ) {
+       protected function populatePage( IDatabase $dbw, $ns ) {
                $toSave = [];
                $lastId = 0;
                $nsCondition = $ns === 'all' ? [] : [ 'page_namespace' => $ns ];
@@ -123,7 +125,7 @@ class PopulateContentModel extends Maintenance {
                }
        }
 
-       private function updateRevisionOrArchiveRows( Database $dbw, $ids, $model, $table ) {
+       private function updateRevisionOrArchiveRows( IDatabase $dbw, $ids, $model, $table ) {
                $prefix = $table === 'archive' ? 'ar' : 'rev';
                $model_column = "{$prefix}_content_model";
                $format_column = "{$prefix}_content_format";
@@ -142,7 +144,7 @@ class PopulateContentModel extends Maintenance {
                $this->output( "done.\n" );
        }
 
-       protected function populateRevisionOrArchive( Database $dbw, $table, $ns ) {
+       protected function populateRevisionOrArchive( IDatabase $dbw, $table, $ns ) {
                $prefix = $table === 'archive' ? 'ar' : 'rev';
                $model_column = "{$prefix}_content_model";
                $format_column = "{$prefix}_content_format";
index ac87cf3..5d5da89 100644 (file)
@@ -23,6 +23,8 @@
 
 require_once __DIR__ . '/Maintenance.php';
 
+use Wikimedia\Rdbms\IDatabase;
+
 /**
  * Maintenance script to populate the rc_source field.
  *
@@ -83,7 +85,7 @@ class PopulateRecentChangesSource extends LoggedUpdateMaintenance {
                return __CLASS__;
        }
 
-       protected function buildUpdateCondition( Database $dbw ) {
+       protected function buildUpdateCondition( IDatabase $dbw ) {
                $rcNew = $dbw->addQuotes( RC_NEW );
                $rcSrcNew = $dbw->addQuotes( RecentChange::SRC_NEW );
                $rcEdit = $dbw->addQuotes( RC_EDIT );
index 3520279..04ac967 100644 (file)
@@ -41,7 +41,7 @@ class RebuildFileCache extends Maintenance {
        }
 
        public function finalSetup() {
-               global $wgDebugToolbar, $wgUseFileCache, $wgReadOnly;
+               global $wgDebugToolbar, $wgUseFileCache;
 
                $this->enabled = $wgUseFileCache;
                // Script will handle capturing output and saving it itself
@@ -50,7 +50,8 @@ class RebuildFileCache extends Maintenance {
                // Has to be done before Setup.php initialize MWDebug
                $wgDebugToolbar = false;
                //  Avoid DB writes (like enotif/counters)
-               $wgReadOnly = 'Building cache'; // avoid DB writes (like enotif/counters)
+               MediaWiki\MediaWikiServices::getInstance()->getReadOnlyMode()
+                       ->setReason( 'Building cache' );
 
                parent::finalSetup();
        }
index 6aa1f37..109350c 100644 (file)
@@ -32,6 +32,8 @@
 
 require_once __DIR__ . '/Maintenance.php';
 
+use Wikimedia\Rdbms\IMaintainableDatabase;
+
 /**
  * Maintenance script to update image metadata records.
  *
@@ -40,7 +42,7 @@ require_once __DIR__ . '/Maintenance.php';
 class ImageBuilder extends Maintenance {
 
        /**
-        * @var Database
+        * @var IMaintainableDatabase
         */
        protected $dbw;
 
@@ -61,7 +63,8 @@ class ImageBuilder extends Maintenance {
                $this->dbw = $this->getDB( DB_MASTER );
                $this->dryrun = $this->hasOption( 'dry-run' );
                if ( $this->dryrun ) {
-                       $GLOBALS['wgReadOnly'] = 'Dry run mode, image upgrades are suppressed';
+                       MediaWiki\MediaWikiServices::getInstance()->getReadOnlyMode()
+                               ->setReason( 'Dry run mode, image upgrades are suppressed' );
                }
 
                if ( $this->hasOption( 'missing' ) ) {
index b7f0762..faa4d96 100644 (file)
@@ -27,6 +27,9 @@
 
 require_once __DIR__ . '/Maintenance.php';
 
+use Wikimedia\Rdbms\IMaintainableDatabase;
+use Wikimedia\Rdbms\DatabaseSqlite;
+
 /**
  * Maintenance script that rebuilds search index table from scratch.
  *
@@ -36,7 +39,7 @@ class RebuildTextIndex extends Maintenance {
        const RTI_CHUNK_SIZE = 500;
 
        /**
-        * @var Database
+        * @var IMaintainableDatabase
         */
        private $db;
 
index 372c352..b557f3d 100644 (file)
@@ -29,6 +29,9 @@
 
 require_once __DIR__ . '/Maintenance.php';
 
+use Wikimedia\Rdbms\IDatabase;
+use Wikimedia\Rdbms\IMaintainableDatabase;
+
 /**
  * Maintenance script to refresh image metadata fields.
  *
@@ -37,7 +40,7 @@ require_once __DIR__ . '/Maintenance.php';
 class RefreshImageMetadata extends Maintenance {
 
        /**
-        * @var Database
+        * @var IMaintainableDatabase
         */
        protected $dbw;
 
@@ -205,7 +208,7 @@ class RefreshImageMetadata extends Maintenance {
        }
 
        /**
-        * @param Database $dbw
+        * @param IDatabase $dbw
         * @return array
         */
        function getConditions( $dbw ) {
index 67f7780..a6cd548 100644 (file)
@@ -390,7 +390,7 @@ class RefreshLinks extends Maintenance {
         * By specifying a null $start or $end, it is also possible to create
         * half-bounded or unbounded intervals using this function.
         *
-        * @param IDatabase $db Database connection
+        * @param IDatabase $db
         * @param string $var Field name
         * @param mixed $start First value to include or null
         * @param mixed $end Last value to include or null
index b03620d..36e55f3 100644 (file)
@@ -26,6 +26,7 @@ require_once __DIR__ . '/Maintenance.php';
 
 use Wikimedia\Rdbms\ResultWrapper;
 use Wikimedia\Rdbms\IDatabase;
+use Wikimedia\Rdbms\DBQueryError;
 
 /**
  * Maintenance script that sends SQL queries from the specified file to the database.
@@ -77,7 +78,7 @@ class MwSql extends Maintenance {
                        $index = DB_MASTER;
                }
 
-               /** @var Database $db DB handle for the appropriate cluster/wiki */
+               /** @var IDatabase $db DB handle for the appropriate cluster/wiki */
                $db = $lb->getConnection( $index, [], $wiki );
                if ( $replicaDB != '' && $db->getLBInfo( 'master' ) !== null ) {
                        $this->error( "The server selected ({$db->getServer()}) is not a replica DB.", 1 );
index 33ca0ff..117e9cc 100644 (file)
@@ -21,6 +21,9 @@
  * @ingroup Maintenance
  */
 
+use Wikimedia\Rdbms\DatabaseSqlite;
+use Wikimedia\Rdbms\DBError;
+
 /**
  * This class contains code common to different SQLite-related maintenance scripts
  *
index 4f22843..b4514ec 100644 (file)
@@ -22,6 +22,8 @@
  * @see wfWaitForSlaves()
  */
 
+use Wikimedia\Rdbms\DBConnectionError;
+
 require __DIR__ . '/../commandLine.inc';
 
 if ( count( $args ) < 1 ) {
index d96cecd..5f705ba 100755 (executable)
@@ -27,6 +27,8 @@
 
 require_once __DIR__ . '/Maintenance.php';
 
+use Wikimedia\Rdbms\IMaintainableDatabase;
+
 /**
  * Maintenance script to run database schema updates.
  *
@@ -145,7 +147,7 @@ class UpdateMediaWiki extends Maintenance {
 
                $this->output( "Going to run database updates for " . wfWikiID() . "\n" );
                if ( $db->getType() === 'sqlite' ) {
-                       /** @var Database|DatabaseSqlite $db */
+                       /** @var IMaintainableDatabase|DatabaseSqlite $db */
                        $this->output( "Using SQLite file: '{$db->getDbFilePath()}'\n" );
                }
                $this->output( "Depending on the size of your database this may take a while!\n" );
index e70a176..84fc2d2 100644 (file)
@@ -26,6 +26,8 @@
 
 require_once __DIR__ . '/Maintenance.php';
 
+use Wikimedia\Rdbms\IDatabase;
+
 /**
  * Maintenance script that will find all rows in the categorylinks table
  * whose collation is out-of-date.
@@ -242,7 +244,7 @@ TEXT
         * Return an SQL expression selecting rows which sort above the given row,
         * assuming an ordering of cl_collation, cl_to, cl_type, cl_from
         * @param stdClass $row
-        * @param Database $dbw
+        * @param IDatabase $dbw
         * @return string
         */
        function getBatchCondition( $row, $dbw ) {
index 762c5e7..55f36a3 100644 (file)
     "grunt-karma": "2.0.0",
     "grunt-stylelint": "0.7.0",
     "grunt-webdriver": "2.0.3",
-    "karma": "1.1.0",
+    "karma": "1.5.0",
     "karma-chrome-launcher": "2.0.0",
-    "karma-firefox-launcher": "1.0.0",
+    "karma-firefox-launcher": "1.0.1",
     "karma-mocha-reporter": "2.2.3",
     "karma-qunit": "1.0.0",
-    "qunitjs": "1.22.0",
+    "qunitjs": "1.23.1",
     "stylelint-config-wikimedia": "0.4.1",
     "wdio-junit-reporter": "0.2.0",
     "wdio-mocha-framework": "0.5.8",
index 33bdcb9..71a5f61 100644 (file)
@@ -132,9 +132,14 @@ return [
        /* jQuery */
 
        'jquery' => [
-               'scripts' => [
-                       'resources/lib/jquery/jquery.js',
-               ],
+               'scripts' => ( $GLOBALS['wgUsejQueryThree'] ?
+                       [
+                               'resources/lib/jquery/jquery3.js',
+                               'resources/lib/jquery/jquery.migrate.js',
+                       ] : [
+                               'resources/lib/jquery/jquery.js',
+                       ]
+               ),
                'raw' => true,
                'targets' => [ 'desktop', 'mobile' ],
        ],
@@ -1751,11 +1756,12 @@ return [
        'mediawiki.rcfilters.filters.ui' => [
                'scripts' => [
                        'resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.CheckboxInputWidget.js',
-                       'resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.FiltersListWidget.js',
-                       'resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.FilterGroupWidget.js',
-                       'resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.FilterItemWidget.js',
-                       'resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.CapsuleItemWidget.js',
-                       'resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.FilterCapsuleMultiselectWidget.js',
+                       'resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.FilterTagMultiselectWidget.js',
+                       'resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.FilterMenuOptionWidget.js',
+                       'resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.FilterMenuSectionOptionWidget.js',
+                       'resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.FilterTagItemWidget.js',
+                       'resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.FilterMenuHeaderWidget.js',
+                       'resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.FilterFloatingMenuSelectWidget.js',
                        'resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.FilterWrapperWidget.js',
                        'resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.ChangesListWrapperWidget.js',
                        'resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.FormWrapperWidget.js',
@@ -1769,12 +1775,13 @@ return [
                        'resources/src/mediawiki.rcfilters/styles/mw.rcfilters.variables.less',
                        'resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.less',
                        'resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.Overlay.less',
-                       'resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.FilterItemWidget.less',
-                       'resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.CapsuleItemWidget.less',
-                       'resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.FilterGroupWidget.less',
-                       'resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.FiltersListWidget.less',
+                       'resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.FilterTagMultiselectWidget.less',
+                       'resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.FilterMenuOptionWidget.less',
+                       'resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.FilterMenuSectionOptionWidget.less',
+                       'resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.FilterTagItemWidget.less',
+                       'resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.FilterMenuHeaderWidget.less',
+                       'resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.FilterFloatingMenuSelectWidget.less',
                        'resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.FilterWrapperWidget.less',
-                       'resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.FilterCapsuleMultiselectWidget.less',
                        'resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.ChangesListWrapperWidget.less',
                        'resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.HighlightColorPickerWidget.less',
                        'resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.FilterItemHighlightButton.less',
@@ -2151,7 +2158,6 @@ return [
        ],
        'mediawiki.legacy.wikibits' => [
                'scripts' => 'resources/src/mediawiki.legacy/wikibits.js',
-               'dependencies' => 'mediawiki.util',
                'targets' => [ 'desktop', 'mobile' ],
        ],
 
diff --git a/resources/lib/jquery/jquery.migrate.js b/resources/lib/jquery/jquery.migrate.js
new file mode 100644 (file)
index 0000000..05b1a80
--- /dev/null
@@ -0,0 +1,540 @@
+/*!
+ * jQuery Migrate - v3.0.0 - 2016-06-09
+ * Copyright jQuery Foundation and other contributors
+ */
+(function( jQuery, window ) {
+"use strict";
+
+
+jQuery.migrateVersion = "3.0.0";
+
+
+( function() {
+
+       // Support: IE9 only
+       // IE9 only creates console object when dev tools are first opened
+       // Also, avoid Function#bind here to simplify PhantomJS usage
+       var log = window.console && window.console.log &&
+                       function() { window.console.log.apply( window.console, arguments ); },
+               rbadVersions = /^[12]\./;
+
+       if ( !log ) {
+               return;
+       }
+
+       // Need jQuery 3.0.0+ and no older Migrate loaded
+       if ( !jQuery || rbadVersions.test( jQuery.fn.jquery ) ) {
+               log( "JQMIGRATE: jQuery 3.0.0+ REQUIRED" );
+       }
+       if ( jQuery.migrateWarnings ) {
+               log( "JQMIGRATE: Migrate plugin loaded multiple times" );
+       }
+
+       // Show a message on the console so devs know we're active
+       log( "JQMIGRATE: Migrate is installed" +
+               ( jQuery.migrateMute ? "" : " with logging active" ) +
+               ", version " + jQuery.migrateVersion );
+
+} )();
+
+var warnedAbout = {};
+
+// List of warnings already given; public read only
+jQuery.migrateWarnings = [];
+
+// Set to false to disable traces that appear with warnings
+if ( jQuery.migrateTrace === undefined ) {
+       jQuery.migrateTrace = true;
+}
+
+// Forget any warnings we've already given; public
+jQuery.migrateReset = function() {
+       warnedAbout = {};
+       jQuery.migrateWarnings.length = 0;
+};
+
+function migrateWarn( msg ) {
+       var console = window.console;
+       if ( !warnedAbout[ msg ] ) {
+               warnedAbout[ msg ] = true;
+               jQuery.migrateWarnings.push( msg );
+               if ( console && console.warn && !jQuery.migrateMute ) {
+                       console.warn( "JQMIGRATE: " + msg );
+                       if ( jQuery.migrateTrace && console.trace ) {
+                               console.trace();
+                       }
+               }
+       }
+}
+
+function migrateWarnProp( obj, prop, value, msg ) {
+       Object.defineProperty( obj, prop, {
+               configurable: true,
+               enumerable: true,
+               get: function() {
+                       migrateWarn( msg );
+                       return value;
+               }
+       } );
+}
+
+if ( document.compatMode === "BackCompat" ) {
+
+       // JQuery has never supported or tested Quirks Mode
+       migrateWarn( "jQuery is not compatible with Quirks Mode" );
+}
+
+
+var oldInit = jQuery.fn.init,
+       oldIsNumeric = jQuery.isNumeric,
+       oldFind = jQuery.find,
+       rattrHashTest = /\[(\s*[-\w]+\s*)([~|^$*]?=)\s*([-\w#]*?#[-\w#]*)\s*\]/,
+       rattrHashGlob = /\[(\s*[-\w]+\s*)([~|^$*]?=)\s*([-\w#]*?#[-\w#]*)\s*\]/g;
+
+jQuery.fn.init = function( arg1 ) {
+       var args = Array.prototype.slice.call( arguments );
+
+       if ( typeof arg1 === "string" && arg1 === "#" ) {
+
+               // JQuery( "#" ) is a bogus ID selector, but it returned an empty set before jQuery 3.0
+               migrateWarn( "jQuery( '#' ) is not a valid selector" );
+               args[ 0 ] = [];
+       }
+
+       return oldInit.apply( this, args );
+};
+jQuery.fn.init.prototype = jQuery.fn;
+
+jQuery.find = function( selector ) {
+       var args = Array.prototype.slice.call( arguments );
+
+       // Support: PhantomJS 1.x
+       // String#match fails to match when used with a //g RegExp, only on some strings
+       if ( typeof selector === "string" && rattrHashTest.test( selector ) ) {
+
+               // The nonstandard and undocumented unquoted-hash was removed in jQuery 1.12.0
+               // First see if qS thinks it's a valid selector, if so avoid a false positive
+               try {
+                       document.querySelector( selector );
+               } catch ( err1 ) {
+
+                       // Didn't *look* valid to qSA, warn and try quoting what we think is the value
+                       selector = selector.replace( rattrHashGlob, function( _, attr, op, value ) {
+                               return "[" + attr + op + "\"" + value + "\"]";
+                       } );
+
+                       // If the regexp *may* have created an invalid selector, don't update it
+                       // Note that there may be false alarms if selector uses jQuery extensions
+                       try {
+                               document.querySelector( selector );
+                               migrateWarn( "Attribute selector with '#' must be quoted: " + args[ 0 ] );
+                               args[ 0 ] = selector;
+                       } catch ( err2 ) {
+                               migrateWarn( "Attribute selector with '#' was not fixed: " + args[ 0 ] );
+                       }
+               }
+       }
+
+       return oldFind.apply( this, args );
+};
+
+// Copy properties attached to original jQuery.find method (e.g. .attr, .isXML)
+var findProp;
+for ( findProp in oldFind ) {
+       if ( Object.prototype.hasOwnProperty.call( oldFind, findProp ) ) {
+               jQuery.find[ findProp ] = oldFind[ findProp ];
+       }
+}
+
+// The number of elements contained in the matched element set
+jQuery.fn.size = function() {
+       migrateWarn( "jQuery.fn.size() is deprecated; use the .length property" );
+       return this.length;
+};
+
+jQuery.parseJSON = function() {
+       migrateWarn( "jQuery.parseJSON is deprecated; use JSON.parse" );
+       return JSON.parse.apply( null, arguments );
+};
+
+jQuery.isNumeric = function( val ) {
+
+       // The jQuery 2.2.3 implementation of isNumeric
+       function isNumeric2( obj ) {
+               var realStringObj = obj && obj.toString();
+               return !jQuery.isArray( obj ) && ( realStringObj - parseFloat( realStringObj ) + 1 ) >= 0;
+       }
+
+       var newValue = oldIsNumeric( val ),
+               oldValue = isNumeric2( val );
+
+       if ( newValue !== oldValue ) {
+               migrateWarn( "jQuery.isNumeric() should not be called on constructed objects" );
+       }
+
+       return oldValue;
+};
+
+migrateWarnProp( jQuery, "unique", jQuery.uniqueSort,
+       "jQuery.unique is deprecated, use jQuery.uniqueSort" );
+
+// Now jQuery.expr.pseudos is the standard incantation
+migrateWarnProp( jQuery.expr, "filters", jQuery.expr.pseudos,
+       "jQuery.expr.filters is now jQuery.expr.pseudos" );
+migrateWarnProp( jQuery.expr, ":", jQuery.expr.pseudos,
+       "jQuery.expr[\":\"] is now jQuery.expr.pseudos" );
+
+
+var oldAjax = jQuery.ajax;
+
+jQuery.ajax = function( ) {
+       var jQXHR = oldAjax.apply( this, arguments );
+
+       // Be sure we got a jQXHR (e.g., not sync)
+       if ( jQXHR.promise ) {
+               migrateWarnProp( jQXHR, "success", jQXHR.done,
+                       "jQXHR.success is deprecated and removed" );
+               migrateWarnProp( jQXHR, "error", jQXHR.fail,
+                       "jQXHR.error is deprecated and removed" );
+               migrateWarnProp( jQXHR, "complete", jQXHR.always,
+                       "jQXHR.complete is deprecated and removed" );
+       }
+
+       return jQXHR;
+};
+
+
+var oldRemoveAttr = jQuery.fn.removeAttr,
+       oldToggleClass = jQuery.fn.toggleClass,
+       rmatchNonSpace = /\S+/g;
+
+jQuery.fn.removeAttr = function( name ) {
+       var self = this;
+
+       jQuery.each( name.match( rmatchNonSpace ), function( i, attr ) {
+               if ( jQuery.expr.match.bool.test( attr ) ) {
+                       migrateWarn( "jQuery.fn.removeAttr no longer sets boolean properties: " + attr );
+                       self.prop( attr, false );
+               }
+       } );
+
+       return oldRemoveAttr.apply( this, arguments );
+};
+
+jQuery.fn.toggleClass = function( state ) {
+
+       // Only deprecating no-args or single boolean arg
+       if ( state !== undefined && typeof state !== "boolean" ) {
+               return oldToggleClass.apply( this, arguments );
+       }
+
+       migrateWarn( "jQuery.fn.toggleClass( boolean ) is deprecated" );
+
+       // Toggle entire class name of each element
+       return this.each( function() {
+               var className = this.getAttribute && this.getAttribute( "class" ) || "";
+
+               if ( className ) {
+                       jQuery.data( this, "__className__", className );
+               }
+
+               // If the element has a class name or if we're passed `false`,
+               // then remove the whole classname (if there was one, the above saved it).
+               // Otherwise bring back whatever was previously saved (if anything),
+               // falling back to the empty string if nothing was stored.
+               if ( this.setAttribute ) {
+                       this.setAttribute( "class",
+                               className || state === false ?
+                               "" :
+                               jQuery.data( this, "__className__" ) || ""
+                       );
+               }
+       } );
+};
+
+
+var internalSwapCall = false;
+
+// If this version of jQuery has .swap(), don't false-alarm on internal uses
+if ( jQuery.swap ) {
+       jQuery.each( [ "height", "width", "reliableMarginRight" ], function( _, name ) {
+               var oldHook = jQuery.cssHooks[ name ] && jQuery.cssHooks[ name ].get;
+
+               if ( oldHook ) {
+                       jQuery.cssHooks[ name ].get = function() {
+                               var ret;
+
+                               internalSwapCall = true;
+                               ret = oldHook.apply( this, arguments );
+                               internalSwapCall = false;
+                               return ret;
+                       };
+               }
+       } );
+}
+
+jQuery.swap = function( elem, options, callback, args ) {
+       var ret, name,
+               old = {};
+
+       if ( !internalSwapCall ) {
+               migrateWarn( "jQuery.swap() is undocumented and deprecated" );
+       }
+
+       // Remember the old values, and insert the new ones
+       for ( name in options ) {
+               old[ name ] = elem.style[ name ];
+               elem.style[ name ] = options[ name ];
+       }
+
+       ret = callback.apply( elem, args || [] );
+
+       // Revert the old values
+       for ( name in options ) {
+               elem.style[ name ] = old[ name ];
+       }
+
+       return ret;
+};
+
+var oldData = jQuery.data;
+
+jQuery.data = function( elem, name, value ) {
+       var curData;
+
+       // If the name is transformed, look for the un-transformed name in the data object
+       if ( name && name !== jQuery.camelCase( name ) ) {
+               curData = jQuery.hasData( elem ) && oldData.call( this, elem );
+               if ( curData && name in curData ) {
+                       migrateWarn( "jQuery.data() always sets/gets camelCased names: " + name );
+                       if ( arguments.length > 2 ) {
+                               curData[ name ] = value;
+                       }
+                       return curData[ name ];
+               }
+       }
+
+       return oldData.apply( this, arguments );
+};
+
+var oldTweenRun = jQuery.Tween.prototype.run;
+
+jQuery.Tween.prototype.run = function( percent ) {
+       if ( jQuery.easing[ this.easing ].length > 1 ) {
+               migrateWarn(
+                       "easing function " +
+                       "\"jQuery.easing." + this.easing.toString() +
+                       "\" should use only first argument"
+               );
+
+               jQuery.easing[ this.easing ] = jQuery.easing[ this.easing ].bind(
+                       jQuery.easing,
+                       percent, this.options.duration * percent, 0, 1, this.options.duration
+               );
+       }
+
+       oldTweenRun.apply( this, arguments );
+};
+
+var oldLoad = jQuery.fn.load,
+       originalFix = jQuery.event.fix;
+
+jQuery.event.props = [];
+jQuery.event.fixHooks = {};
+
+jQuery.event.fix = function( originalEvent ) {
+       var event,
+               type = originalEvent.type,
+               fixHook = this.fixHooks[ type ],
+               props = jQuery.event.props;
+
+       if ( props.length ) {
+               migrateWarn( "jQuery.event.props are deprecated and removed: " + props.join() );
+               while ( props.length ) {
+                       jQuery.event.addProp( props.pop() );
+               }
+       }
+
+       if ( fixHook && !fixHook._migrated_ ) {
+               fixHook._migrated_ = true;
+               migrateWarn( "jQuery.event.fixHooks are deprecated and removed: " + type );
+               if ( ( props = fixHook.props ) && props.length ) {
+                       while ( props.length ) {
+                          jQuery.event.addProp( props.pop() );
+                       }
+               }
+       }
+
+       event = originalFix.call( this, originalEvent );
+
+       return fixHook && fixHook.filter ? fixHook.filter( event, originalEvent ) : event;
+};
+
+jQuery.each( [ "load", "unload", "error" ], function( _, name ) {
+
+       jQuery.fn[ name ] = function() {
+               var args = Array.prototype.slice.call( arguments, 0 );
+
+               // If this is an ajax load() the first arg should be the string URL;
+               // technically this could also be the "Anything" arg of the event .load()
+               // which just goes to show why this dumb signature has been deprecated!
+               // jQuery custom builds that exclude the Ajax module justifiably die here.
+               if ( name === "load" && typeof args[ 0 ] === "string" ) {
+                       return oldLoad.apply( this, args );
+               }
+
+               migrateWarn( "jQuery.fn." + name + "() is deprecated" );
+
+               args.splice( 0, 0, name );
+               if ( arguments.length ) {
+                       return this.on.apply( this, args );
+               }
+
+               // Use .triggerHandler here because:
+               // - load and unload events don't need to bubble, only applied to window or image
+               // - error event should not bubble to window, although it does pre-1.7
+               // See http://bugs.jquery.com/ticket/11820
+               this.triggerHandler.apply( this, args );
+               return this;
+       };
+
+} );
+
+// Trigger "ready" event only once, on document ready
+jQuery( function() {
+       jQuery( document ).triggerHandler( "ready" );
+} );
+
+jQuery.event.special.ready = {
+       setup: function() {
+               if ( this === document ) {
+                       migrateWarn( "'ready' event is deprecated" );
+               }
+       }
+};
+
+jQuery.fn.extend( {
+
+       bind: function( types, data, fn ) {
+               migrateWarn( "jQuery.fn.bind() is deprecated" );
+               return this.on( types, null, data, fn );
+       },
+       unbind: function( types, fn ) {
+               migrateWarn( "jQuery.fn.unbind() is deprecated" );
+               return this.off( types, null, fn );
+       },
+       delegate: function( selector, types, data, fn ) {
+               migrateWarn( "jQuery.fn.delegate() is deprecated" );
+               return this.on( types, selector, data, fn );
+       },
+       undelegate: function( selector, types, fn ) {
+               migrateWarn( "jQuery.fn.undelegate() is deprecated" );
+               return arguments.length === 1 ?
+                       this.off( selector, "**" ) :
+                       this.off( types, selector || "**", fn );
+       }
+} );
+
+
+var oldOffset = jQuery.fn.offset;
+
+jQuery.fn.offset = function() {
+       var docElem,
+               elem = this[ 0 ],
+               origin = { top: 0, left: 0 };
+
+       if ( !elem || !elem.nodeType ) {
+               migrateWarn( "jQuery.fn.offset() requires a valid DOM element" );
+               return origin;
+       }
+
+       docElem = ( elem.ownerDocument || document ).documentElement;
+       if ( !jQuery.contains( docElem, elem ) ) {
+               migrateWarn( "jQuery.fn.offset() requires an element connected to a document" );
+               return origin;
+       }
+
+       return oldOffset.apply( this, arguments );
+};
+
+
+var oldParam = jQuery.param;
+
+jQuery.param = function( data, traditional ) {
+       var ajaxTraditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional;
+
+       if ( traditional === undefined && ajaxTraditional ) {
+
+               migrateWarn( "jQuery.param() no longer uses jQuery.ajaxSettings.traditional" );
+               traditional = ajaxTraditional;
+       }
+
+       return oldParam.call( this, data, traditional );
+};
+
+var oldSelf = jQuery.fn.andSelf || jQuery.fn.addBack;
+
+jQuery.fn.andSelf = function() {
+       migrateWarn( "jQuery.fn.andSelf() replaced by jQuery.fn.addBack()" );
+       return oldSelf.apply( this, arguments );
+};
+
+
+var oldDeferred = jQuery.Deferred,
+       tuples = [
+
+               // Action, add listener, callbacks, .then handlers, final state
+               [ "resolve", "done", jQuery.Callbacks( "once memory" ),
+                       jQuery.Callbacks( "once memory" ), "resolved" ],
+               [ "reject", "fail", jQuery.Callbacks( "once memory" ),
+                       jQuery.Callbacks( "once memory" ), "rejected" ],
+               [ "notify", "progress", jQuery.Callbacks( "memory" ),
+                       jQuery.Callbacks( "memory" ) ]
+       ];
+
+jQuery.Deferred = function( func ) {
+       var deferred = oldDeferred(),
+               promise = deferred.promise();
+
+       deferred.pipe = promise.pipe = function( /* fnDone, fnFail, fnProgress */ ) {
+               var fns = arguments;
+
+               migrateWarn( "deferred.pipe() is deprecated" );
+
+               return jQuery.Deferred( function( newDefer ) {
+                       jQuery.each( tuples, function( i, tuple ) {
+                               var fn = jQuery.isFunction( fns[ i ] ) && fns[ i ];
+
+                               // Deferred.done(function() { bind to newDefer or newDefer.resolve })
+                               // deferred.fail(function() { bind to newDefer or newDefer.reject })
+                               // deferred.progress(function() { bind to newDefer or newDefer.notify })
+                               deferred[ tuple[ 1 ] ]( function() {
+                                       var returned = fn && fn.apply( this, arguments );
+                                       if ( returned && jQuery.isFunction( returned.promise ) ) {
+                                               returned.promise()
+                                                       .done( newDefer.resolve )
+                                                       .fail( newDefer.reject )
+                                                       .progress( newDefer.notify );
+                                       } else {
+                                               newDefer[ tuple[ 0 ] + "With" ](
+                                                       this === promise ? newDefer.promise() : this,
+                                                       fn ? [ returned ] : arguments
+                                               );
+                                       }
+                               } );
+                       } );
+                       fns = null;
+               } ).promise();
+
+       };
+
+       if ( func ) {
+               func.call( deferred, deferred );
+       }
+
+       return deferred;
+};
+
+
+
+})( jQuery, window );
diff --git a/resources/lib/jquery/jquery3.js b/resources/lib/jquery/jquery3.js
new file mode 100644 (file)
index 0000000..d2d8ca4
--- /dev/null
@@ -0,0 +1,10253 @@
+/*!
+ * jQuery JavaScript Library v3.2.1
+ * https://jquery.com/
+ *
+ * Includes Sizzle.js
+ * https://sizzlejs.com/
+ *
+ * Copyright JS Foundation and other contributors
+ * Released under the MIT license
+ * https://jquery.org/license
+ *
+ * Date: 2017-03-20T18:59Z
+ */
+( function( global, factory ) {
+
+       "use strict";
+
+       if ( typeof module === "object" && typeof module.exports === "object" ) {
+
+               // For CommonJS and CommonJS-like environments where a proper `window`
+               // is present, execute the factory and get jQuery.
+               // For environments that do not have a `window` with a `document`
+               // (such as Node.js), expose a factory as module.exports.
+               // This accentuates the need for the creation of a real `window`.
+               // e.g. var jQuery = require("jquery")(window);
+               // See ticket #14549 for more info.
+               module.exports = global.document ?
+                       factory( global, true ) :
+                       function( w ) {
+                               if ( !w.document ) {
+                                       throw new Error( "jQuery requires a window with a document" );
+                               }
+                               return factory( w );
+                       };
+       } else {
+               factory( global );
+       }
+
+// Pass this if window is not defined yet
+} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) {
+
+// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1
+// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode
+// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common
+// enough that all such attempts are guarded in a try block.
+"use strict";
+
+var arr = [];
+
+var document = window.document;
+
+var getProto = Object.getPrototypeOf;
+
+var slice = arr.slice;
+
+var concat = arr.concat;
+
+var push = arr.push;
+
+var indexOf = arr.indexOf;
+
+var class2type = {};
+
+var toString = class2type.toString;
+
+var hasOwn = class2type.hasOwnProperty;
+
+var fnToString = hasOwn.toString;
+
+var ObjectFunctionString = fnToString.call( Object );
+
+var support = {};
+
+
+
+       function DOMEval( code, doc ) {
+               doc = doc || document;
+
+               var script = doc.createElement( "script" );
+
+               script.text = code;
+               doc.head.appendChild( script ).parentNode.removeChild( script );
+       }
+/* global Symbol */
+// Defining this global in .eslintrc.json would create a danger of using the global
+// unguarded in another place, it seems safer to define global only for this module
+
+
+
+var
+       version = "3.2.1",
+
+       // Define a local copy of jQuery
+       jQuery = function( selector, context ) {
+
+               // The jQuery object is actually just the init constructor 'enhanced'
+               // Need init if jQuery is called (just allow error to be thrown if not included)
+               return new jQuery.fn.init( selector, context );
+       },
+
+       // Support: Android <=4.0 only
+       // Make sure we trim BOM and NBSP
+       rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,
+
+       // Matches dashed string for camelizing
+       rmsPrefix = /^-ms-/,
+       rdashAlpha = /-([a-z])/g,
+
+       // Used by jQuery.camelCase as callback to replace()
+       fcamelCase = function( all, letter ) {
+               return letter.toUpperCase();
+       };
+
+jQuery.fn = jQuery.prototype = {
+
+       // The current version of jQuery being used
+       jquery: version,
+
+       constructor: jQuery,
+
+       // The default length of a jQuery object is 0
+       length: 0,
+
+       toArray: function() {
+               return slice.call( this );
+       },
+
+       // Get the Nth element in the matched element set OR
+       // Get the whole matched element set as a clean array
+       get: function( num ) {
+
+               // Return all the elements in a clean array
+               if ( num == null ) {
+                       return slice.call( this );
+               }
+
+               // Return just the one element from the set
+               return num < 0 ? this[ num + this.length ] : this[ num ];
+       },
+
+       // Take an array of elements and push it onto the stack
+       // (returning the new matched element set)
+       pushStack: function( elems ) {
+
+               // Build a new jQuery matched element set
+               var ret = jQuery.merge( this.constructor(), elems );
+
+               // Add the old object onto the stack (as a reference)
+               ret.prevObject = this;
+
+               // Return the newly-formed element set
+               return ret;
+       },
+
+       // Execute a callback for every element in the matched set.
+       each: function( callback ) {
+               return jQuery.each( this, callback );
+       },
+
+       map: function( callback ) {
+               return this.pushStack( jQuery.map( this, function( elem, i ) {
+                       return callback.call( elem, i, elem );
+               } ) );
+       },
+
+       slice: function() {
+               return this.pushStack( slice.apply( this, arguments ) );
+       },
+
+       first: function() {
+               return this.eq( 0 );
+       },
+
+       last: function() {
+               return this.eq( -1 );
+       },
+
+       eq: function( i ) {
+               var len = this.length,
+                       j = +i + ( i < 0 ? len : 0 );
+               return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );
+       },
+
+       end: function() {
+               return this.prevObject || this.constructor();
+       },
+
+       // For internal use only.
+       // Behaves like an Array's method, not like a jQuery method.
+       push: push,
+       sort: arr.sort,
+       splice: arr.splice
+};
+
+jQuery.extend = jQuery.fn.extend = function() {
+       var options, name, src, copy, copyIsArray, clone,
+               target = arguments[ 0 ] || {},
+               i = 1,
+               length = arguments.length,
+               deep = false;
+
+       // Handle a deep copy situation
+       if ( typeof target === "boolean" ) {
+               deep = target;
+
+               // Skip the boolean and the target
+               target = arguments[ i ] || {};
+               i++;
+       }
+
+       // Handle case when target is a string or something (possible in deep copy)
+       if ( typeof target !== "object" && !jQuery.isFunction( target ) ) {
+               target = {};
+       }
+
+       // Extend jQuery itself if only one argument is passed
+       if ( i === length ) {
+               target = this;
+               i--;
+       }
+
+       for ( ; i < length; i++ ) {
+
+               // Only deal with non-null/undefined values
+               if ( ( options = arguments[ i ] ) != null ) {
+
+                       // Extend the base object
+                       for ( name in options ) {
+                               src = target[ name ];
+                               copy = options[ name ];
+
+                               // Prevent never-ending loop
+                               if ( target === copy ) {
+                                       continue;
+                               }
+
+                               // Recurse if we're merging plain objects or arrays
+                               if ( deep && copy && ( jQuery.isPlainObject( copy ) ||
+                                       ( copyIsArray = Array.isArray( copy ) ) ) ) {
+
+                                       if ( copyIsArray ) {
+                                               copyIsArray = false;
+                                               clone = src && Array.isArray( src ) ? src : [];
+
+                                       } else {
+                                               clone = src && jQuery.isPlainObject( src ) ? src : {};
+                                       }
+
+                                       // Never move original objects, clone them
+                                       target[ name ] = jQuery.extend( deep, clone, copy );
+
+                               // Don't bring in undefined values
+                               } else if ( copy !== undefined ) {
+                                       target[ name ] = copy;
+                               }
+                       }
+               }
+       }
+
+       // Return the modified object
+       return target;
+};
+
+jQuery.extend( {
+
+       // Unique for each copy of jQuery on the page
+       expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ),
+
+       // Assume jQuery is ready without the ready module
+       isReady: true,
+
+       error: function( msg ) {
+               throw new Error( msg );
+       },
+
+       noop: function() {},
+
+       isFunction: function( obj ) {
+               return jQuery.type( obj ) === "function";
+       },
+
+       isWindow: function( obj ) {
+               return obj != null && obj === obj.window;
+       },
+
+       isNumeric: function( obj ) {
+
+               // As of jQuery 3.0, isNumeric is limited to
+               // strings and numbers (primitives or objects)
+               // that can be coerced to finite numbers (gh-2662)
+               var type = jQuery.type( obj );
+               return ( type === "number" || type === "string" ) &&
+
+                       // parseFloat NaNs numeric-cast false positives ("")
+                       // ...but misinterprets leading-number strings, particularly hex literals ("0x...")
+                       // subtraction forces infinities to NaN
+                       !isNaN( obj - parseFloat( obj ) );
+       },
+
+       isPlainObject: function( obj ) {
+               var proto, Ctor;
+
+               // Detect obvious negatives
+               // Use toString instead of jQuery.type to catch host objects
+               if ( !obj || toString.call( obj ) !== "[object Object]" ) {
+                       return false;
+               }
+
+               proto = getProto( obj );
+
+               // Objects with no prototype (e.g., `Object.create( null )`) are plain
+               if ( !proto ) {
+                       return true;
+               }
+
+               // Objects with prototype are plain iff they were constructed by a global Object function
+               Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor;
+               return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString;
+       },
+
+       isEmptyObject: function( obj ) {
+
+               /* eslint-disable no-unused-vars */
+               // See https://github.com/eslint/eslint/issues/6125
+               var name;
+
+               for ( name in obj ) {
+                       return false;
+               }
+               return true;
+       },
+
+       type: function( obj ) {
+               if ( obj == null ) {
+                       return obj + "";
+               }
+
+               // Support: Android <=2.3 only (functionish RegExp)
+               return typeof obj === "object" || typeof obj === "function" ?
+                       class2type[ toString.call( obj ) ] || "object" :
+                       typeof obj;
+       },
+
+       // Evaluates a script in a global context
+       globalEval: function( code ) {
+               DOMEval( code );
+       },
+
+       // Convert dashed to camelCase; used by the css and data modules
+       // Support: IE <=9 - 11, Edge 12 - 13
+       // Microsoft forgot to hump their vendor prefix (#9572)
+       camelCase: function( string ) {
+               return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
+       },
+
+       each: function( obj, callback ) {
+               var length, i = 0;
+
+               if ( isArrayLike( obj ) ) {
+                       length = obj.length;
+                       for ( ; i < length; i++ ) {
+                               if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
+                                       break;
+                               }
+                       }
+               } else {
+                       for ( i in obj ) {
+                               if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
+                                       break;
+                               }
+                       }
+               }
+
+               return obj;
+       },
+
+       // Support: Android <=4.0 only
+       trim: function( text ) {
+               return text == null ?
+                       "" :
+                       ( text + "" ).replace( rtrim, "" );
+       },
+
+       // results is for internal usage only
+       makeArray: function( arr, results ) {
+               var ret = results || [];
+
+               if ( arr != null ) {
+                       if ( isArrayLike( Object( arr ) ) ) {
+                               jQuery.merge( ret,
+                                       typeof arr === "string" ?
+                                       [ arr ] : arr
+                               );
+                       } else {
+                               push.call( ret, arr );
+                       }
+               }
+
+               return ret;
+       },
+
+       inArray: function( elem, arr, i ) {
+               return arr == null ? -1 : indexOf.call( arr, elem, i );
+       },
+
+       // Support: Android <=4.0 only, PhantomJS 1 only
+       // push.apply(_, arraylike) throws on ancient WebKit
+       merge: function( first, second ) {
+               var len = +second.length,
+                       j = 0,
+                       i = first.length;
+
+               for ( ; j < len; j++ ) {
+                       first[ i++ ] = second[ j ];
+               }
+
+               first.length = i;
+
+               return first;
+       },
+
+       grep: function( elems, callback, invert ) {
+               var callbackInverse,
+                       matches = [],
+                       i = 0,
+                       length = elems.length,
+                       callbackExpect = !invert;
+
+               // Go through the array, only saving the items
+               // that pass the validator function
+               for ( ; i < length; i++ ) {
+                       callbackInverse = !callback( elems[ i ], i );
+                       if ( callbackInverse !== callbackExpect ) {
+                               matches.push( elems[ i ] );
+                       }
+               }
+
+               return matches;
+       },
+
+       // arg is for internal usage only
+       map: function( elems, callback, arg ) {
+               var length, value,
+                       i = 0,
+                       ret = [];
+
+               // Go through the array, translating each of the items to their new values
+               if ( isArrayLike( elems ) ) {
+                       length = elems.length;
+                       for ( ; i < length; i++ ) {
+                               value = callback( elems[ i ], i, arg );
+
+                               if ( value != null ) {
+                                       ret.push( value );
+                               }
+                       }
+
+               // Go through every key on the object,
+               } else {
+                       for ( i in elems ) {
+                               value = callback( elems[ i ], i, arg );
+
+                               if ( value != null ) {
+                                       ret.push( value );
+                               }
+                       }
+               }
+
+               // Flatten any nested arrays
+               return concat.apply( [], ret );
+       },
+
+       // A global GUID counter for objects
+       guid: 1,
+
+       // Bind a function to a context, optionally partially applying any
+       // arguments.
+       proxy: function( fn, context ) {
+               var tmp, args, proxy;
+
+               if ( typeof context === "string" ) {
+                       tmp = fn[ context ];
+                       context = fn;
+                       fn = tmp;
+               }
+
+               // Quick check to determine if target is callable, in the spec
+               // this throws a TypeError, but we will just return undefined.
+               if ( !jQuery.isFunction( fn ) ) {
+                       return undefined;
+               }
+
+               // Simulated bind
+               args = slice.call( arguments, 2 );
+               proxy = function() {
+                       return fn.apply( context || this, args.concat( slice.call( arguments ) ) );
+               };
+
+               // Set the guid of unique handler to the same of original handler, so it can be removed
+               proxy.guid = fn.guid = fn.guid || jQuery.guid++;
+
+               return proxy;
+       },
+
+       now: Date.now,
+
+       // jQuery.support is not used in Core but other projects attach their
+       // properties to it so it needs to exist.
+       support: support
+} );
+
+if ( typeof Symbol === "function" ) {
+       jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];
+}
+
+// Populate the class2type map
+jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ),
+function( i, name ) {
+       class2type[ "[object " + name + "]" ] = name.toLowerCase();
+} );
+
+function isArrayLike( obj ) {
+
+       // Support: real iOS 8.2 only (not reproducible in simulator)
+       // `in` check used to prevent JIT error (gh-2145)
+       // hasOwn isn't used here due to false negatives
+       // regarding Nodelist length in IE
+       var length = !!obj && "length" in obj && obj.length,
+               type = jQuery.type( obj );
+
+       if ( type === "function" || jQuery.isWindow( obj ) ) {
+               return false;
+       }
+
+       return type === "array" || length === 0 ||
+               typeof length === "number" && length > 0 && ( length - 1 ) in obj;
+}
+var Sizzle =
+/*!
+ * Sizzle CSS Selector Engine v2.3.3
+ * https://sizzlejs.com/
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license
+ * http://jquery.org/license
+ *
+ * Date: 2016-08-08
+ */
+(function( window ) {
+
+var i,
+       support,
+       Expr,
+       getText,
+       isXML,
+       tokenize,
+       compile,
+       select,
+       outermostContext,
+       sortInput,
+       hasDuplicate,
+
+       // Local document vars
+       setDocument,
+       document,
+       docElem,
+       documentIsHTML,
+       rbuggyQSA,
+       rbuggyMatches,
+       matches,
+       contains,
+
+       // Instance-specific data
+       expando = "sizzle" + 1 * new Date(),
+       preferredDoc = window.document,
+       dirruns = 0,
+       done = 0,
+       classCache = createCache(),
+       tokenCache = createCache(),
+       compilerCache = createCache(),
+       sortOrder = function( a, b ) {
+               if ( a === b ) {
+                       hasDuplicate = true;
+               }
+               return 0;
+       },
+
+       // Instance methods
+       hasOwn = ({}).hasOwnProperty,
+       arr = [],
+       pop = arr.pop,
+       push_native = arr.push,
+       push = arr.push,
+       slice = arr.slice,
+       // Use a stripped-down indexOf as it's faster than native
+       // https://jsperf.com/thor-indexof-vs-for/5
+       indexOf = function( list, elem ) {
+               var i = 0,
+                       len = list.length;
+               for ( ; i < len; i++ ) {
+                       if ( list[i] === elem ) {
+                               return i;
+                       }
+               }
+               return -1;
+       },
+
+       booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",
+
+       // Regular expressions
+
+       // http://www.w3.org/TR/css3-selectors/#whitespace
+       whitespace = "[\\x20\\t\\r\\n\\f]",
+
+       // http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier
+       identifier = "(?:\\\\.|[\\w-]|[^\0-\\xa0])+",
+
+       // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors
+       attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace +
+               // Operator (capture 2)
+               "*([*^$|!~]?=)" + whitespace +
+               // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]"
+               "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace +
+               "*\\]",
+
+       pseudos = ":(" + identifier + ")(?:\\((" +
+               // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:
+               // 1. quoted (capture 3; capture 4 or capture 5)
+               "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" +
+               // 2. simple (capture 6)
+               "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" +
+               // 3. anything else (capture 2)
+               ".*" +
+               ")\\)|)",
+
+       // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter
+       rwhitespace = new RegExp( whitespace + "+", "g" ),
+       rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ),
+
+       rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ),
+       rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ),
+
+       rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ),
+
+       rpseudo = new RegExp( pseudos ),
+       ridentifier = new RegExp( "^" + identifier + "$" ),
+
+       matchExpr = {
+               "ID": new RegExp( "^#(" + identifier + ")" ),
+               "CLASS": new RegExp( "^\\.(" + identifier + ")" ),
+               "TAG": new RegExp( "^(" + identifier + "|[*])" ),
+               "ATTR": new RegExp( "^" + attributes ),
+               "PSEUDO": new RegExp( "^" + pseudos ),
+               "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace +
+                       "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace +
+                       "*(\\d+)|))" + whitespace + "*\\)|)", "i" ),
+               "bool": new RegExp( "^(?:" + booleans + ")$", "i" ),
+               // For use in libraries implementing .is()
+               // We use this for POS matching in `select`
+               "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" +
+                       whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" )
+       },
+
+       rinputs = /^(?:input|select|textarea|button)$/i,
+       rheader = /^h\d$/i,
+
+       rnative = /^[^{]+\{\s*\[native \w/,
+
+       // Easily-parseable/retrievable ID or TAG or CLASS selectors
+       rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
+
+       rsibling = /[+~]/,
+
+       // CSS escapes
+       // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters
+       runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ),
+       funescape = function( _, escaped, escapedWhitespace ) {
+               var high = "0x" + escaped - 0x10000;
+               // NaN means non-codepoint
+               // Support: Firefox<24
+               // Workaround erroneous numeric interpretation of +"0x"
+               return high !== high || escapedWhitespace ?
+                       escaped :
+                       high < 0 ?
+                               // BMP codepoint
+                               String.fromCharCode( high + 0x10000 ) :
+                               // Supplemental Plane codepoint (surrogate pair)
+                               String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );
+       },
+
+       // CSS string/identifier serialization
+       // https://drafts.csswg.org/cssom/#common-serializing-idioms
+       rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,
+       fcssescape = function( ch, asCodePoint ) {
+               if ( asCodePoint ) {
+
+                       // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER
+                       if ( ch === "\0" ) {
+                               return "\uFFFD";
+                       }
+
+                       // Control characters and (dependent upon position) numbers get escaped as code points
+                       return ch.slice( 0, -1 ) + "\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " ";
+               }
+
+               // Other potentially-special ASCII characters get backslash-escaped
+               return "\\" + ch;
+       },
+
+       // Used for iframes
+       // See setDocument()
+       // Removing the function wrapper causes a "Permission Denied"
+       // error in IE
+       unloadHandler = function() {
+               setDocument();
+       },
+
+       disabledAncestor = addCombinator(
+               function( elem ) {
+                       return elem.disabled === true && ("form" in elem || "label" in elem);
+               },
+               { dir: "parentNode", next: "legend" }
+       );
+
+// Optimize for push.apply( _, NodeList )
+try {
+       push.apply(
+               (arr = slice.call( preferredDoc.childNodes )),
+               preferredDoc.childNodes
+       );
+       // Support: Android<4.0
+       // Detect silently failing push.apply
+       arr[ preferredDoc.childNodes.length ].nodeType;
+} catch ( e ) {
+       push = { apply: arr.length ?
+
+               // Leverage slice if possible
+               function( target, els ) {
+                       push_native.apply( target, slice.call(els) );
+               } :
+
+               // Support: IE<9
+               // Otherwise append directly
+               function( target, els ) {
+                       var j = target.length,
+                               i = 0;
+                       // Can't trust NodeList.length
+                       while ( (target[j++] = els[i++]) ) {}
+                       target.length = j - 1;
+               }
+       };
+}
+
+function Sizzle( selector, context, results, seed ) {
+       var m, i, elem, nid, match, groups, newSelector,
+               newContext = context && context.ownerDocument,
+
+               // nodeType defaults to 9, since context defaults to document
+               nodeType = context ? context.nodeType : 9;
+
+       results = results || [];
+
+       // Return early from calls with invalid selector or context
+       if ( typeof selector !== "string" || !selector ||
+               nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {
+
+               return results;
+       }
+
+       // Try to shortcut find operations (as opposed to filters) in HTML documents
+       if ( !seed ) {
+
+               if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {
+                       setDocument( context );
+               }
+               context = context || document;
+
+               if ( documentIsHTML ) {
+
+                       // If the selector is sufficiently simple, try using a "get*By*" DOM method
+                       // (excepting DocumentFragment context, where the methods don't exist)
+                       if ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) {
+
+                               // ID selector
+                               if ( (m = match[1]) ) {
+
+                                       // Document context
+                                       if ( nodeType === 9 ) {
+                                               if ( (elem = context.getElementById( m )) ) {
+
+                                                       // Support: IE, Opera, Webkit
+                                                       // TODO: identify versions
+                                                       // getElementById can match elements by name instead of ID
+                                                       if ( elem.id === m ) {
+                                                               results.push( elem );
+                                                               return results;
+                                                       }
+                                               } else {
+                                                       return results;
+                                               }
+
+                                       // Element context
+                                       } else {
+
+                                               // Support: IE, Opera, Webkit
+                                               // TODO: identify versions
+                                               // getElementById can match elements by name instead of ID
+                                               if ( newContext && (elem = newContext.getElementById( m )) &&
+                                                       contains( context, elem ) &&
+                                                       elem.id === m ) {
+
+                                                       results.push( elem );
+                                                       return results;
+                                               }
+                                       }
+
+                               // Type selector
+                               } else if ( match[2] ) {
+                                       push.apply( results, context.getElementsByTagName( selector ) );
+                                       return results;
+
+                               // Class selector
+                               } else if ( (m = match[3]) && support.getElementsByClassName &&
+                                       context.getElementsByClassName ) {
+
+                                       push.apply( results, context.getElementsByClassName( m ) );
+                                       return results;
+                               }
+                       }
+
+                       // Take advantage of querySelectorAll
+                       if ( support.qsa &&
+                               !compilerCache[ selector + " " ] &&
+                               (!rbuggyQSA || !rbuggyQSA.test( selector )) ) {
+
+                               if ( nodeType !== 1 ) {
+                                       newContext = context;
+                                       newSelector = selector;
+
+                               // qSA looks outside Element context, which is not what we want
+                               // Thanks to Andrew Dupont for this workaround technique
+                               // Support: IE <=8
+                               // Exclude object elements
+                               } else if ( context.nodeName.toLowerCase() !== "object" ) {
+
+                                       // Capture the context ID, setting it first if necessary
+                                       if ( (nid = context.getAttribute( "id" )) ) {
+                                               nid = nid.replace( rcssescape, fcssescape );
+                                       } else {
+                                               context.setAttribute( "id", (nid = expando) );
+                                       }
+
+                                       // Prefix every selector in the list
+                                       groups = tokenize( selector );
+                                       i = groups.length;
+                                       while ( i-- ) {
+                                               groups[i] = "#" + nid + " " + toSelector( groups[i] );
+                                       }
+                                       newSelector = groups.join( "," );
+
+                                       // Expand context for sibling selectors
+                                       newContext = rsibling.test( selector ) && testContext( context.parentNode ) ||
+                                               context;
+                               }
+
+                               if ( newSelector ) {
+                                       try {
+                                               push.apply( results,
+                                                       newContext.querySelectorAll( newSelector )
+                                               );
+                                               return results;
+                                       } catch ( qsaError ) {
+                                       } finally {
+                                               if ( nid === expando ) {
+                                                       context.removeAttribute( "id" );
+                                               }
+                                       }
+                               }
+                       }
+               }
+       }
+
+       // All others
+       return select( selector.replace( rtrim, "$1" ), context, results, seed );
+}
+
+/**
+ * Create key-value caches of limited size
+ * @returns {function(string, object)} Returns the Object data after storing it on itself with
+ *     property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)
+ *     deleting the oldest entry
+ */
+function createCache() {
+       var keys = [];
+
+       function cache( key, value ) {
+               // Use (key + " ") to avoid collision with native prototype properties (see Issue #157)
+               if ( keys.push( key + " " ) > Expr.cacheLength ) {
+                       // Only keep the most recent entries
+                       delete cache[ keys.shift() ];
+               }
+               return (cache[ key + " " ] = value);
+       }
+       return cache;
+}
+
+/**
+ * Mark a function for special use by Sizzle
+ * @param {Function} fn The function to mark
+ */
+function markFunction( fn ) {
+       fn[ expando ] = true;
+       return fn;
+}
+
+/**
+ * Support testing using an element
+ * @param {Function} fn Passed the created element and returns a boolean result
+ */
+function assert( fn ) {
+       var el = document.createElement("fieldset");
+
+       try {
+               return !!fn( el );
+       } catch (e) {
+               return false;
+       } finally {
+               // Remove from its parent by default
+               if ( el.parentNode ) {
+                       el.parentNode.removeChild( el );
+               }
+               // release memory in IE
+               el = null;
+       }
+}
+
+/**
+ * Adds the same handler for all of the specified attrs
+ * @param {String} attrs Pipe-separated list of attributes
+ * @param {Function} handler The method that will be applied
+ */
+function addHandle( attrs, handler ) {
+       var arr = attrs.split("|"),
+               i = arr.length;
+
+       while ( i-- ) {
+               Expr.attrHandle[ arr[i] ] = handler;
+       }
+}
+
+/**
+ * Checks document order of two siblings
+ * @param {Element} a
+ * @param {Element} b
+ * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b
+ */
+function siblingCheck( a, b ) {
+       var cur = b && a,
+               diff = cur && a.nodeType === 1 && b.nodeType === 1 &&
+                       a.sourceIndex - b.sourceIndex;
+
+       // Use IE sourceIndex if available on both nodes
+       if ( diff ) {
+               return diff;
+       }
+
+       // Check if b follows a
+       if ( cur ) {
+               while ( (cur = cur.nextSibling) ) {
+                       if ( cur === b ) {
+                               return -1;
+                       }
+               }
+       }
+
+       return a ? 1 : -1;
+}
+
+/**
+ * Returns a function to use in pseudos for input types
+ * @param {String} type
+ */
+function createInputPseudo( type ) {
+       return function( elem ) {
+               var name = elem.nodeName.toLowerCase();
+               return name === "input" && elem.type === type;
+       };
+}
+
+/**
+ * Returns a function to use in pseudos for buttons
+ * @param {String} type
+ */
+function createButtonPseudo( type ) {
+       return function( elem ) {
+               var name = elem.nodeName.toLowerCase();
+               return (name === "input" || name === "button") && elem.type === type;
+       };
+}
+
+/**
+ * Returns a function to use in pseudos for :enabled/:disabled
+ * @param {Boolean} disabled true for :disabled; false for :enabled
+ */
+function createDisabledPseudo( disabled ) {
+
+       // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable
+       return function( elem ) {
+
+               // Only certain elements can match :enabled or :disabled
+               // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled
+               // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled
+               if ( "form" in elem ) {
+
+                       // Check for inherited disabledness on relevant non-disabled elements:
+                       // * listed form-associated elements in a disabled fieldset
+                       //   https://html.spec.whatwg.org/multipage/forms.html#category-listed
+                       //   https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled
+                       // * option elements in a disabled optgroup
+                       //   https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled
+                       // All such elements have a "form" property.
+                       if ( elem.parentNode && elem.disabled === false ) {
+
+                               // Option elements defer to a parent optgroup if present
+                               if ( "label" in elem ) {
+                                       if ( "label" in elem.parentNode ) {
+                                               return elem.parentNode.disabled === disabled;
+                                       } else {
+                                               return elem.disabled === disabled;
+                                       }
+                               }
+
+                               // Support: IE 6 - 11
+                               // Use the isDisabled shortcut property to check for disabled fieldset ancestors
+                               return elem.isDisabled === disabled ||
+
+                                       // Where there is no isDisabled, check manually
+                                       /* jshint -W018 */
+                                       elem.isDisabled !== !disabled &&
+                                               disabledAncestor( elem ) === disabled;
+                       }
+
+                       return elem.disabled === disabled;
+
+               // Try to winnow out elements that can't be disabled before trusting the disabled property.
+               // Some victims get caught in our net (label, legend, menu, track), but it shouldn't
+               // even exist on them, let alone have a boolean value.
+               } else if ( "label" in elem ) {
+                       return elem.disabled === disabled;
+               }
+
+               // Remaining elements are neither :enabled nor :disabled
+               return false;
+       };
+}
+
+/**
+ * Returns a function to use in pseudos for positionals
+ * @param {Function} fn
+ */
+function createPositionalPseudo( fn ) {
+       return markFunction(function( argument ) {
+               argument = +argument;
+               return markFunction(function( seed, matches ) {
+                       var j,
+                               matchIndexes = fn( [], seed.length, argument ),
+                               i = matchIndexes.length;
+
+                       // Match elements found at the specified indexes
+                       while ( i-- ) {
+                               if ( seed[ (j = matchIndexes[i]) ] ) {
+                                       seed[j] = !(matches[j] = seed[j]);
+                               }
+                       }
+               });
+       });
+}
+
+/**
+ * Checks a node for validity as a Sizzle context
+ * @param {Element|Object=} context
+ * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value
+ */
+function testContext( context ) {
+       return context && typeof context.getElementsByTagName !== "undefined" && context;
+}
+
+// Expose support vars for convenience
+support = Sizzle.support = {};
+
+/**
+ * Detects XML nodes
+ * @param {Element|Object} elem An element or a document
+ * @returns {Boolean} True iff elem is a non-HTML XML node
+ */
+isXML = Sizzle.isXML = function( elem ) {
+       // documentElement is verified for cases where it doesn't yet exist
+       // (such as loading iframes in IE - #4833)
+       var documentElement = elem && (elem.ownerDocument || elem).documentElement;
+       return documentElement ? documentElement.nodeName !== "HTML" : false;
+};
+
+/**
+ * Sets document-related variables once based on the current document
+ * @param {Element|Object} [doc] An element or document object to use to set the document
+ * @returns {Object} Returns the current document
+ */
+setDocument = Sizzle.setDocument = function( node ) {
+       var hasCompare, subWindow,
+               doc = node ? node.ownerDocument || node : preferredDoc;
+
+       // Return early if doc is invalid or already selected
+       if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {
+               return document;
+       }
+
+       // Update global variables
+       document = doc;
+       docElem = document.documentElement;
+       documentIsHTML = !isXML( document );
+
+       // Support: IE 9-11, Edge
+       // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936)
+       if ( preferredDoc !== document &&
+               (subWindow = document.defaultView) && subWindow.top !== subWindow ) {
+
+               // Support: IE 11, Edge
+               if ( subWindow.addEventListener ) {
+                       subWindow.addEventListener( "unload", unloadHandler, false );
+
+               // Support: IE 9 - 10 only
+               } else if ( subWindow.attachEvent ) {
+                       subWindow.attachEvent( "onunload", unloadHandler );
+               }
+       }
+
+       /* Attributes
+       ---------------------------------------------------------------------- */
+
+       // Support: IE<8
+       // Verify that getAttribute really returns attributes and not properties
+       // (excepting IE8 booleans)
+       support.attributes = assert(function( el ) {
+               el.className = "i";
+               return !el.getAttribute("className");
+       });
+
+       /* getElement(s)By*
+       ---------------------------------------------------------------------- */
+
+       // Check if getElementsByTagName("*") returns only elements
+       support.getElementsByTagName = assert(function( el ) {
+               el.appendChild( document.createComment("") );
+               return !el.getElementsByTagName("*").length;
+       });
+
+       // Support: IE<9
+       support.getElementsByClassName = rnative.test( document.getElementsByClassName );
+
+       // Support: IE<10
+       // Check if getElementById returns elements by name
+       // The broken getElementById methods don't pick up programmatically-set names,
+       // so use a roundabout getElementsByName test
+       support.getById = assert(function( el ) {
+               docElem.appendChild( el ).id = expando;
+               return !document.getElementsByName || !document.getElementsByName( expando ).length;
+       });
+
+       // ID filter and find
+       if ( support.getById ) {
+               Expr.filter["ID"] = function( id ) {
+                       var attrId = id.replace( runescape, funescape );
+                       return function( elem ) {
+                               return elem.getAttribute("id") === attrId;
+                       };
+               };
+               Expr.find["ID"] = function( id, context ) {
+                       if ( typeof context.getElementById !== "undefined" && documentIsHTML ) {
+                               var elem = context.getElementById( id );
+                               return elem ? [ elem ] : [];
+                       }
+               };
+       } else {
+               Expr.filter["ID"] =  function( id ) {
+                       var attrId = id.replace( runescape, funescape );
+                       return function( elem ) {
+                               var node = typeof elem.getAttributeNode !== "undefined" &&
+                                       elem.getAttributeNode("id");
+                               return node && node.value === attrId;
+                       };
+               };
+
+               // Support: IE 6 - 7 only
+               // getElementById is not reliable as a find shortcut
+               Expr.find["ID"] = function( id, context ) {
+                       if ( typeof context.getElementById !== "undefined" && documentIsHTML ) {
+                               var node, i, elems,
+                                       elem = context.getElementById( id );
+
+                               if ( elem ) {
+
+                                       // Verify the id attribute
+                                       node = elem.getAttributeNode("id");
+                                       if ( node && node.value === id ) {
+                                               return [ elem ];
+                                       }
+
+                                       // Fall back on getElementsByName
+                                       elems = context.getElementsByName( id );
+                                       i = 0;
+                                       while ( (elem = elems[i++]) ) {
+                                               node = elem.getAttributeNode("id");
+                                               if ( node && node.value === id ) {
+                                                       return [ elem ];
+                                               }
+                                       }
+                               }
+
+                               return [];
+                       }
+               };
+       }
+
+       // Tag
+       Expr.find["TAG"] = support.getElementsByTagName ?
+               function( tag, context ) {
+                       if ( typeof context.getElementsByTagName !== "undefined" ) {
+                               return context.getElementsByTagName( tag );
+
+                       // DocumentFragment nodes don't have gEBTN
+                       } else if ( support.qsa ) {
+                               return context.querySelectorAll( tag );
+                       }
+               } :
+
+               function( tag, context ) {
+                       var elem,
+                               tmp = [],
+                               i = 0,
+                               // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too
+                               results = context.getElementsByTagName( tag );
+
+                       // Filter out possible comments
+                       if ( tag === "*" ) {
+                               while ( (elem = results[i++]) ) {
+                                       if ( elem.nodeType === 1 ) {
+                                               tmp.push( elem );
+                                       }
+                               }
+
+                               return tmp;
+                       }
+                       return results;
+               };
+
+       // Class
+       Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) {
+               if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) {
+                       return context.getElementsByClassName( className );
+               }
+       };
+
+       /* QSA/matchesSelector
+       ---------------------------------------------------------------------- */
+
+       // QSA and matchesSelector support
+
+       // matchesSelector(:active) reports false when true (IE9/Opera 11.5)
+       rbuggyMatches = [];
+
+       // qSa(:focus) reports false when true (Chrome 21)
+       // We allow this because of a bug in IE8/9 that throws an error
+       // whenever `document.activeElement` is accessed on an iframe
+       // So, we allow :focus to pass through QSA all the time to avoid the IE error
+       // See https://bugs.jquery.com/ticket/13378
+       rbuggyQSA = [];
+
+       if ( (support.qsa = rnative.test( document.querySelectorAll )) ) {
+               // Build QSA regex
+               // Regex strategy adopted from Diego Perini
+               assert(function( el ) {
+                       // Select is set to empty string on purpose
+                       // This is to test IE's treatment of not explicitly
+                       // setting a boolean content attribute,
+                       // since its presence should be enough
+                       // https://bugs.jquery.com/ticket/12359
+                       docElem.appendChild( el ).innerHTML = "<a id='" + expando + "'></a>" +
+                               "<select id='" + expando + "-\r\\' msallowcapture=''>" +
+                               "<option selected=''></option></select>";
+
+                       // Support: IE8, Opera 11-12.16
+                       // Nothing should be selected when empty strings follow ^= or $= or *=
+                       // The test attribute must be unknown in Opera but "safe" for WinRT
+                       // https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section
+                       if ( el.querySelectorAll("[msallowcapture^='']").length ) {
+                               rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" );
+                       }
+
+                       // Support: IE8
+                       // Boolean attributes and "value" are not treated correctly
+                       if ( !el.querySelectorAll("[selected]").length ) {
+                               rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" );
+                       }
+
+                       // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+
+                       if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) {
+                               rbuggyQSA.push("~=");
+                       }
+
+                       // Webkit/Opera - :checked should return selected option elements
+                       // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
+                       // IE8 throws error here and will not see later tests
+                       if ( !el.querySelectorAll(":checked").length ) {
+                               rbuggyQSA.push(":checked");
+                       }
+
+                       // Support: Safari 8+, iOS 8+
+                       // https://bugs.webkit.org/show_bug.cgi?id=136851
+                       // In-page `selector#id sibling-combinator selector` fails
+                       if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) {
+                               rbuggyQSA.push(".#.+[+~]");
+                       }
+               });
+
+               assert(function( el ) {
+                       el.innerHTML = "<a href='' disabled='disabled'></a>" +
+                               "<select disabled='disabled'><option/></select>";
+
+                       // Support: Windows 8 Native Apps
+                       // The type and name attributes are restricted during .innerHTML assignment
+                       var input = document.createElement("input");
+                       input.setAttribute( "type", "hidden" );
+                       el.appendChild( input ).setAttribute( "name", "D" );
+
+                       // Support: IE8
+                       // Enforce case-sensitivity of name attribute
+                       if ( el.querySelectorAll("[name=d]").length ) {
+                               rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" );
+                       }
+
+                       // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)
+                       // IE8 throws error here and will not see later tests
+                       if ( el.querySelectorAll(":enabled").length !== 2 ) {
+                               rbuggyQSA.push( ":enabled", ":disabled" );
+                       }
+
+                       // Support: IE9-11+
+                       // IE's :disabled selector does not pick up the children of disabled fieldsets
+                       docElem.appendChild( el ).disabled = true;
+                       if ( el.querySelectorAll(":disabled").length !== 2 ) {
+                               rbuggyQSA.push( ":enabled", ":disabled" );
+                       }
+
+                       // Opera 10-11 does not throw on post-comma invalid pseudos
+                       el.querySelectorAll("*,:x");
+                       rbuggyQSA.push(",.*:");
+               });
+       }
+
+       if ( (support.matchesSelector = rnative.test( (matches = docElem.matches ||
+               docElem.webkitMatchesSelector ||
+               docElem.mozMatchesSelector ||
+               docElem.oMatchesSelector ||
+               docElem.msMatchesSelector) )) ) {
+
+               assert(function( el ) {
+                       // Check to see if it's possible to do matchesSelector
+                       // on a disconnected node (IE 9)
+                       support.disconnectedMatch = matches.call( el, "*" );
+
+                       // This should fail with an exception
+                       // Gecko does not error, returns false instead
+                       matches.call( el, "[s!='']:x" );
+                       rbuggyMatches.push( "!=", pseudos );
+               });
+       }
+
+       rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") );
+       rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") );
+
+       /* Contains
+       ---------------------------------------------------------------------- */
+       hasCompare = rnative.test( docElem.compareDocumentPosition );
+
+       // Element contains another
+       // Purposefully self-exclusive
+       // As in, an element does not contain itself
+       contains = hasCompare || rnative.test( docElem.contains ) ?
+               function( a, b ) {
+                       var adown = a.nodeType === 9 ? a.documentElement : a,
+                               bup = b && b.parentNode;
+                       return a === bup || !!( bup && bup.nodeType === 1 && (
+                               adown.contains ?
+                                       adown.contains( bup ) :
+                                       a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16
+                       ));
+               } :
+               function( a, b ) {
+                       if ( b ) {
+                               while ( (b = b.parentNode) ) {
+                                       if ( b === a ) {
+                                               return true;
+                                       }
+                               }
+                       }
+                       return false;
+               };
+
+       /* Sorting
+       ---------------------------------------------------------------------- */
+
+       // Document order sorting
+       sortOrder = hasCompare ?
+       function( a, b ) {
+
+               // Flag for duplicate removal
+               if ( a === b ) {
+                       hasDuplicate = true;
+                       return 0;
+               }
+
+               // Sort on method existence if only one input has compareDocumentPosition
+               var compare = !a.compareDocumentPosition - !b.compareDocumentPosition;
+               if ( compare ) {
+                       return compare;
+               }
+
+               // Calculate position if both inputs belong to the same document
+               compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?
+                       a.compareDocumentPosition( b ) :
+
+                       // Otherwise we know they are disconnected
+                       1;
+
+               // Disconnected nodes
+               if ( compare & 1 ||
+                       (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {
+
+                       // Choose the first element that is related to our preferred document
+                       if ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {
+                               return -1;
+                       }
+                       if ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {
+                               return 1;
+                       }
+
+                       // Maintain original order
+                       return sortInput ?
+                               ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :
+                               0;
+               }
+
+               return compare & 4 ? -1 : 1;
+       } :
+       function( a, b ) {
+               // Exit early if the nodes are identical
+               if ( a === b ) {
+                       hasDuplicate = true;
+                       return 0;
+               }
+
+               var cur,
+                       i = 0,
+                       aup = a.parentNode,
+                       bup = b.parentNode,
+                       ap = [ a ],
+                       bp = [ b ];
+
+               // Parentless nodes are either documents or disconnected
+               if ( !aup || !bup ) {
+                       return a === document ? -1 :
+                               b === document ? 1 :
+                               aup ? -1 :
+                               bup ? 1 :
+                               sortInput ?
+                               ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :
+                               0;
+
+               // If the nodes are siblings, we can do a quick check
+               } else if ( aup === bup ) {
+                       return siblingCheck( a, b );
+               }
+
+               // Otherwise we need full lists of their ancestors for comparison
+               cur = a;
+               while ( (cur = cur.parentNode) ) {
+                       ap.unshift( cur );
+               }
+               cur = b;
+               while ( (cur = cur.parentNode) ) {
+                       bp.unshift( cur );
+               }
+
+               // Walk down the tree looking for a discrepancy
+               while ( ap[i] === bp[i] ) {
+                       i++;
+               }
+
+               return i ?
+                       // Do a sibling check if the nodes have a common ancestor
+                       siblingCheck( ap[i], bp[i] ) :
+
+                       // Otherwise nodes in our document sort first
+                       ap[i] === preferredDoc ? -1 :
+                       bp[i] === preferredDoc ? 1 :
+                       0;
+       };
+
+       return document;
+};
+
+Sizzle.matches = function( expr, elements ) {
+       return Sizzle( expr, null, null, elements );
+};
+
+Sizzle.matchesSelector = function( elem, expr ) {
+       // Set document vars if needed
+       if ( ( elem.ownerDocument || elem ) !== document ) {
+               setDocument( elem );
+       }
+
+       // Make sure that attribute selectors are quoted
+       expr = expr.replace( rattributeQuotes, "='$1']" );
+
+       if ( support.matchesSelector && documentIsHTML &&
+               !compilerCache[ expr + " " ] &&
+               ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&
+               ( !rbuggyQSA     || !rbuggyQSA.test( expr ) ) ) {
+
+               try {
+                       var ret = matches.call( elem, expr );
+
+                       // IE 9's matchesSelector returns false on disconnected nodes
+                       if ( ret || support.disconnectedMatch ||
+                                       // As well, disconnected nodes are said to be in a document
+                                       // fragment in IE 9
+                                       elem.document && elem.document.nodeType !== 11 ) {
+                               return ret;
+                       }
+               } catch (e) {}
+       }
+
+       return Sizzle( expr, document, null, [ elem ] ).length > 0;
+};
+
+Sizzle.contains = function( context, elem ) {
+       // Set document vars if needed
+       if ( ( context.ownerDocument || context ) !== document ) {
+               setDocument( context );
+       }
+       return contains( context, elem );
+};
+
+Sizzle.attr = function( elem, name ) {
+       // Set document vars if needed
+       if ( ( elem.ownerDocument || elem ) !== document ) {
+               setDocument( elem );
+       }
+
+       var fn = Expr.attrHandle[ name.toLowerCase() ],
+               // Don't get fooled by Object.prototype properties (jQuery #13807)
+               val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?
+                       fn( elem, name, !documentIsHTML ) :
+                       undefined;
+
+       return val !== undefined ?
+               val :
+               support.attributes || !documentIsHTML ?
+                       elem.getAttribute( name ) :
+                       (val = elem.getAttributeNode(name)) && val.specified ?
+                               val.value :
+                               null;
+};
+
+Sizzle.escape = function( sel ) {
+       return (sel + "").replace( rcssescape, fcssescape );
+};
+
+Sizzle.error = function( msg ) {
+       throw new Error( "Syntax error, unrecognized expression: " + msg );
+};
+
+/**
+ * Document sorting and removing duplicates
+ * @param {ArrayLike} results
+ */
+Sizzle.uniqueSort = function( results ) {
+       var elem,
+               duplicates = [],
+               j = 0,
+               i = 0;
+
+       // Unless we *know* we can detect duplicates, assume their presence
+       hasDuplicate = !support.detectDuplicates;
+       sortInput = !support.sortStable && results.slice( 0 );
+       results.sort( sortOrder );
+
+       if ( hasDuplicate ) {
+               while ( (elem = results[i++]) ) {
+                       if ( elem === results[ i ] ) {
+                               j = duplicates.push( i );
+                       }
+               }
+               while ( j-- ) {
+                       results.splice( duplicates[ j ], 1 );
+               }
+       }
+
+       // Clear input after sorting to release objects
+       // See https://github.com/jquery/sizzle/pull/225
+       sortInput = null;
+
+       return results;
+};
+
+/**
+ * Utility function for retrieving the text value of an array of DOM nodes
+ * @param {Array|Element} elem
+ */
+getText = Sizzle.getText = function( elem ) {
+       var node,
+               ret = "",
+               i = 0,
+               nodeType = elem.nodeType;
+
+       if ( !nodeType ) {
+               // If no nodeType, this is expected to be an array
+               while ( (node = elem[i++]) ) {
+                       // Do not traverse comment nodes
+                       ret += getText( node );
+               }
+       } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {
+               // Use textContent for elements
+               // innerText usage removed for consistency of new lines (jQuery #11153)
+               if ( typeof elem.textContent === "string" ) {
+                       return elem.textContent;
+               } else {
+                       // Traverse its children
+                       for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
+                               ret += getText( elem );
+                       }
+               }
+       } else if ( nodeType === 3 || nodeType === 4 ) {
+               return elem.nodeValue;
+       }
+       // Do not include comment or processing instruction nodes
+
+       return ret;
+};
+
+Expr = Sizzle.selectors = {
+
+       // Can be adjusted by the user
+       cacheLength: 50,
+
+       createPseudo: markFunction,
+
+       match: matchExpr,
+
+       attrHandle: {},
+
+       find: {},
+
+       relative: {
+               ">": { dir: "parentNode", first: true },
+               " ": { dir: "parentNode" },
+               "+": { dir: "previousSibling", first: true },
+               "~": { dir: "previousSibling" }
+       },
+
+       preFilter: {
+               "ATTR": function( match ) {
+                       match[1] = match[1].replace( runescape, funescape );
+
+                       // Move the given value to match[3] whether quoted or unquoted
+                       match[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape );
+
+                       if ( match[2] === "~=" ) {
+                               match[3] = " " + match[3] + " ";
+                       }
+
+                       return match.slice( 0, 4 );
+               },
+
+               "CHILD": function( match ) {
+                       /* matches from matchExpr["CHILD"]
+                               1 type (only|nth|...)
+                               2 what (child|of-type)
+                               3 argument (even|odd|\d*|\d*n([+-]\d+)?|...)
+                               4 xn-component of xn+y argument ([+-]?\d*n|)
+                               5 sign of xn-component
+                               6 x of xn-component
+                               7 sign of y-component
+                               8 y of y-component
+                       */
+                       match[1] = match[1].toLowerCase();
+
+                       if ( match[1].slice( 0, 3 ) === "nth" ) {
+                               // nth-* requires argument
+                               if ( !match[3] ) {
+                                       Sizzle.error( match[0] );
+                               }
+
+                               // numeric x and y parameters for Expr.filter.CHILD
+                               // remember that false/true cast respectively to 0/1
+                               match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) );
+                               match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" );
+
+                       // other types prohibit arguments
+                       } else if ( match[3] ) {
+                               Sizzle.error( match[0] );
+                       }
+
+                       return match;
+               },
+
+               "PSEUDO": function( match ) {
+                       var excess,
+                               unquoted = !match[6] && match[2];
+
+                       if ( matchExpr["CHILD"].test( match[0] ) ) {
+                               return null;
+                       }
+
+                       // Accept quoted arguments as-is
+                       if ( match[3] ) {
+                               match[2] = match[4] || match[5] || "";
+
+                       // Strip excess characters from unquoted arguments
+                       } else if ( unquoted && rpseudo.test( unquoted ) &&
+                               // Get excess from tokenize (recursively)
+                               (excess = tokenize( unquoted, true )) &&
+                               // advance to the next closing parenthesis
+                               (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) {
+
+                               // excess is a negative index
+                               match[0] = match[0].slice( 0, excess );
+                               match[2] = unquoted.slice( 0, excess );
+                       }
+
+                       // Return only captures needed by the pseudo filter method (type and argument)
+                       return match.slice( 0, 3 );
+               }
+       },
+
+       filter: {
+
+               "TAG": function( nodeNameSelector ) {
+                       var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();
+                       return nodeNameSelector === "*" ?
+                               function() { return true; } :
+                               function( elem ) {
+                                       return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;
+                               };
+               },
+
+               "CLASS": function( className ) {
+                       var pattern = classCache[ className + " " ];
+
+                       return pattern ||
+                               (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) &&
+                               classCache( className, function( elem ) {
+                                       return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== "undefined" && elem.getAttribute("class") || "" );
+                               });
+               },
+
+               "ATTR": function( name, operator, check ) {
+                       return function( elem ) {
+                               var result = Sizzle.attr( elem, name );
+
+                               if ( result == null ) {
+                                       return operator === "!=";
+                               }
+                               if ( !operator ) {
+                                       return true;
+                               }
+
+                               result += "";
+
+                               return operator === "=" ? result === check :
+                                       operator === "!=" ? result !== check :
+                                       operator === "^=" ? check && result.indexOf( check ) === 0 :
+                                       operator === "*=" ? check && result.indexOf( check ) > -1 :
+                                       operator === "$=" ? check && result.slice( -check.length ) === check :
+                                       operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 :
+                                       operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" :
+                                       false;
+                       };
+               },
+
+               "CHILD": function( type, what, argument, first, last ) {
+                       var simple = type.slice( 0, 3 ) !== "nth",
+                               forward = type.slice( -4 ) !== "last",
+                               ofType = what === "of-type";
+
+                       return first === 1 && last === 0 ?
+
+                               // Shortcut for :nth-*(n)
+                               function( elem ) {
+                                       return !!elem.parentNode;
+                               } :
+
+                               function( elem, context, xml ) {
+                                       var cache, uniqueCache, outerCache, node, nodeIndex, start,
+                                               dir = simple !== forward ? "nextSibling" : "previousSibling",
+                                               parent = elem.parentNode,
+                                               name = ofType && elem.nodeName.toLowerCase(),
+                                               useCache = !xml && !ofType,
+                                               diff = false;
+
+                                       if ( parent ) {
+
+                                               // :(first|last|only)-(child|of-type)
+                                               if ( simple ) {
+                                                       while ( dir ) {
+                                                               node = elem;
+                                                               while ( (node = node[ dir ]) ) {
+                                                                       if ( ofType ?
+                                                                               node.nodeName.toLowerCase() === name :
+                                                                               node.nodeType === 1 ) {
+
+                                                                               return false;
+                                                                       }
+                                                               }
+                                                               // Reverse direction for :only-* (if we haven't yet done so)
+                                                               start = dir = type === "only" && !start && "nextSibling";
+                                                       }
+                                                       return true;
+                                               }
+
+                                               start = [ forward ? parent.firstChild : parent.lastChild ];
+
+                                               // non-xml :nth-child(...) stores cache data on `parent`
+                                               if ( forward && useCache ) {
+
+                                                       // Seek `elem` from a previously-cached index
+
+                                                       // ...in a gzip-friendly way
+                                                       node = parent;
+                                                       outerCache = node[ expando ] || (node[ expando ] = {});
+
+                                                       // Support: IE <9 only
+                                                       // Defend against cloned attroperties (jQuery gh-1709)
+                                                       uniqueCache = outerCache[ node.uniqueID ] ||
+                                                               (outerCache[ node.uniqueID ] = {});
+
+                                                       cache = uniqueCache[ type ] || [];
+                                                       nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];
+                                                       diff = nodeIndex && cache[ 2 ];
+                                                       node = nodeIndex && parent.childNodes[ nodeIndex ];
+
+                                                       while ( (node = ++nodeIndex && node && node[ dir ] ||
+
+                                                               // Fallback to seeking `elem` from the start
+                                                               (diff = nodeIndex = 0) || start.pop()) ) {
+
+                                                               // When found, cache indexes on `parent` and break
+                                                               if ( node.nodeType === 1 && ++diff && node === elem ) {
+                                                                       uniqueCache[ type ] = [ dirruns, nodeIndex, diff ];
+                                                                       break;
+                                                               }
+                                                       }
+
+                                               } else {
+                                                       // Use previously-cached element index if available
+                                                       if ( useCache ) {
+                                                               // ...in a gzip-friendly way
+                                                               node = elem;
+                                                               outerCache = node[ expando ] || (node[ expando ] = {});
+
+                                                               // Support: IE <9 only
+                                                               // Defend against cloned attroperties (jQuery gh-1709)
+                                                               uniqueCache = outerCache[ node.uniqueID ] ||
+                                                                       (outerCache[ node.uniqueID ] = {});
+
+                                                               cache = uniqueCache[ type ] || [];
+                                                               nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];
+                                                               diff = nodeIndex;
+                                                       }
+
+                                                       // xml :nth-child(...)
+                                                       // or :nth-last-child(...) or :nth(-last)?-of-type(...)
+                                                       if ( diff === false ) {
+                                                               // Use the same loop as above to seek `elem` from the start
+                                                               while ( (node = ++nodeIndex && node && node[ dir ] ||
+                                                                       (diff = nodeIndex = 0) || start.pop()) ) {
+
+                                                                       if ( ( ofType ?
+                                                                               node.nodeName.toLowerCase() === name :
+                                                                               node.nodeType === 1 ) &&
+                                                                               ++diff ) {
+
+                                                                               // Cache the index of each encountered element
+                                                                               if ( useCache ) {
+                                                                                       outerCache = node[ expando ] || (node[ expando ] = {});
+
+                                                                                       // Support: IE <9 only
+                                                                                       // Defend against cloned attroperties (jQuery gh-1709)
+                                                                                       uniqueCache = outerCache[ node.uniqueID ] ||
+                                                                                               (outerCache[ node.uniqueID ] = {});
+
+                                                                                       uniqueCache[ type ] = [ dirruns, diff ];
+                                                                               }
+
+                                                                               if ( node === elem ) {
+                                                                                       break;
+                                                                               }
+                                                                       }
+                                                               }
+                                                       }
+                                               }
+
+                                               // Incorporate the offset, then check against cycle size
+                                               diff -= last;
+                                               return diff === first || ( diff % first === 0 && diff / first >= 0 );
+                                       }
+                               };
+               },
+
+               "PSEUDO": function( pseudo, argument ) {
+                       // pseudo-class names are case-insensitive
+                       // http://www.w3.org/TR/selectors/#pseudo-classes
+                       // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters
+                       // Remember that setFilters inherits from pseudos
+                       var args,
+                               fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||
+                                       Sizzle.error( "unsupported pseudo: " + pseudo );
+
+                       // The user may use createPseudo to indicate that
+                       // arguments are needed to create the filter function
+                       // just as Sizzle does
+                       if ( fn[ expando ] ) {
+                               return fn( argument );
+                       }
+
+                       // But maintain support for old signatures
+                       if ( fn.length > 1 ) {
+                               args = [ pseudo, pseudo, "", argument ];
+                               return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?
+                                       markFunction(function( seed, matches ) {
+                                               var idx,
+                                                       matched = fn( seed, argument ),
+                                                       i = matched.length;
+                                               while ( i-- ) {
+                                                       idx = indexOf( seed, matched[i] );
+                                                       seed[ idx ] = !( matches[ idx ] = matched[i] );
+                                               }
+                                       }) :
+                                       function( elem ) {
+                                               return fn( elem, 0, args );
+                                       };
+                       }
+
+                       return fn;
+               }
+       },
+
+       pseudos: {
+               // Potentially complex pseudos
+               "not": markFunction(function( selector ) {
+                       // Trim the selector passed to compile
+                       // to avoid treating leading and trailing
+                       // spaces as combinators
+                       var input = [],
+                               results = [],
+                               matcher = compile( selector.replace( rtrim, "$1" ) );
+
+                       return matcher[ expando ] ?
+                               markFunction(function( seed, matches, context, xml ) {
+                                       var elem,
+                                               unmatched = matcher( seed, null, xml, [] ),
+                                               i = seed.length;
+
+                                       // Match elements unmatched by `matcher`
+                                       while ( i-- ) {
+                                               if ( (elem = unmatched[i]) ) {
+                                                       seed[i] = !(matches[i] = elem);
+                                               }
+                                       }
+                               }) :
+                               function( elem, context, xml ) {
+                                       input[0] = elem;
+                                       matcher( input, null, xml, results );
+                                       // Don't keep the element (issue #299)
+                                       input[0] = null;
+                                       return !results.pop();
+                               };
+               }),
+
+               "has": markFunction(function( selector ) {
+                       return function( elem ) {
+                               return Sizzle( selector, elem ).length > 0;
+                       };
+               }),
+
+               "contains": markFunction(function( text ) {
+                       text = text.replace( runescape, funescape );
+                       return function( elem ) {
+                               return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;
+                       };
+               }),
+
+               // "Whether an element is represented by a :lang() selector
+               // is based solely on the element's language value
+               // being equal to the identifier C,
+               // or beginning with the identifier C immediately followed by "-".
+               // The matching of C against the element's language value is performed case-insensitively.
+               // The identifier C does not have to be a valid language name."
+               // http://www.w3.org/TR/selectors/#lang-pseudo
+               "lang": markFunction( function( lang ) {
+                       // lang value must be a valid identifier
+                       if ( !ridentifier.test(lang || "") ) {
+                               Sizzle.error( "unsupported lang: " + lang );
+                       }
+                       lang = lang.replace( runescape, funescape ).toLowerCase();
+                       return function( elem ) {
+                               var elemLang;
+                               do {
+                                       if ( (elemLang = documentIsHTML ?
+                                               elem.lang :
+                                               elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) {
+
+                                               elemLang = elemLang.toLowerCase();
+                                               return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0;
+                                       }
+                               } while ( (elem = elem.parentNode) && elem.nodeType === 1 );
+                               return false;
+                       };
+               }),
+
+               // Miscellaneous
+               "target": function( elem ) {
+                       var hash = window.location && window.location.hash;
+                       return hash && hash.slice( 1 ) === elem.id;
+               },
+
+               "root": function( elem ) {
+                       return elem === docElem;
+               },
+
+               "focus": function( elem ) {
+                       return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);
+               },
+
+               // Boolean properties
+               "enabled": createDisabledPseudo( false ),
+               "disabled": createDisabledPseudo( true ),
+
+               "checked": function( elem ) {
+                       // In CSS3, :checked should return both checked and selected elements
+                       // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
+                       var nodeName = elem.nodeName.toLowerCase();
+                       return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected);
+               },
+
+               "selected": function( elem ) {
+                       // Accessing this property makes selected-by-default
+                       // options in Safari work properly
+                       if ( elem.parentNode ) {
+                               elem.parentNode.selectedIndex;
+                       }
+
+                       return elem.selected === true;
+               },
+
+               // Contents
+               "empty": function( elem ) {
+                       // http://www.w3.org/TR/selectors/#empty-pseudo
+                       // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),
+                       //   but not by others (comment: 8; processing instruction: 7; etc.)
+                       // nodeType < 6 works because attributes (2) do not appear as children
+                       for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
+                               if ( elem.nodeType < 6 ) {
+                                       return false;
+                               }
+                       }
+                       return true;
+               },
+
+               "parent": function( elem ) {
+                       return !Expr.pseudos["empty"]( elem );
+               },
+
+               // Element/input types
+               "header": function( elem ) {
+                       return rheader.test( elem.nodeName );
+               },
+
+               "input": function( elem ) {
+                       return rinputs.test( elem.nodeName );
+               },
+
+               "button": function( elem ) {
+                       var name = elem.nodeName.toLowerCase();
+                       return name === "input" && elem.type === "button" || name === "button";
+               },
+
+               "text": function( elem ) {
+                       var attr;
+                       return elem.nodeName.toLowerCase() === "input" &&
+                               elem.type === "text" &&
+
+                               // Support: IE<8
+                               // New HTML5 attribute values (e.g., "search") appear with elem.type === "text"
+                               ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" );
+               },
+
+               // Position-in-collection
+               "first": createPositionalPseudo(function() {
+                       return [ 0 ];
+               }),
+
+               "last": createPositionalPseudo(function( matchIndexes, length ) {
+                       return [ length - 1 ];
+               }),
+
+               "eq": createPositionalPseudo(function( matchIndexes, length, argument ) {
+                       return [ argument < 0 ? argument + length : argument ];
+               }),
+
+               "even": createPositionalPseudo(function( matchIndexes, length ) {
+                       var i = 0;
+                       for ( ; i < length; i += 2 ) {
+                               matchIndexes.push( i );
+                       }
+                       return matchIndexes;
+               }),
+
+               "odd": createPositionalPseudo(function( matchIndexes, length ) {
+                       var i = 1;
+                       for ( ; i < length; i += 2 ) {
+                               matchIndexes.push( i );
+                       }
+                       return matchIndexes;
+               }),
+
+               "lt": createPositionalPseudo(function( matchIndexes, length, argument ) {
+                       var i = argument < 0 ? argument + length : argument;
+                       for ( ; --i >= 0; ) {
+                               matchIndexes.push( i );
+                       }
+                       return matchIndexes;
+               }),
+
+               "gt": createPositionalPseudo(function( matchIndexes, length, argument ) {
+                       var i = argument < 0 ? argument + length : argument;
+                       for ( ; ++i < length; ) {
+                               matchIndexes.push( i );
+                       }
+                       return matchIndexes;
+               })
+       }
+};
+
+Expr.pseudos["nth"] = Expr.pseudos["eq"];
+
+// Add button/input type pseudos
+for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {
+       Expr.pseudos[ i ] = createInputPseudo( i );
+}
+for ( i in { submit: true, reset: true } ) {
+       Expr.pseudos[ i ] = createButtonPseudo( i );
+}
+
+// Easy API for creating new setFilters
+function setFilters() {}
+setFilters.prototype = Expr.filters = Expr.pseudos;
+Expr.setFilters = new setFilters();
+
+tokenize = Sizzle.tokenize = function( selector, parseOnly ) {
+       var matched, match, tokens, type,
+               soFar, groups, preFilters,
+               cached = tokenCache[ selector + " " ];
+
+       if ( cached ) {
+               return parseOnly ? 0 : cached.slice( 0 );
+       }
+
+       soFar = selector;
+       groups = [];
+       preFilters = Expr.preFilter;
+
+       while ( soFar ) {
+
+               // Comma and first run
+               if ( !matched || (match = rcomma.exec( soFar )) ) {
+                       if ( match ) {
+                               // Don't consume trailing commas as valid
+                               soFar = soFar.slice( match[0].length ) || soFar;
+                       }
+                       groups.push( (tokens = []) );
+               }
+
+               matched = false;
+
+               // Combinators
+               if ( (match = rcombinators.exec( soFar )) ) {
+                       matched = match.shift();
+                       tokens.push({
+                               value: matched,
+                               // Cast descendant combinators to space
+                               type: match[0].replace( rtrim, " " )
+                       });
+                       soFar = soFar.slice( matched.length );
+               }
+
+               // Filters
+               for ( type in Expr.filter ) {
+                       if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||
+                               (match = preFilters[ type ]( match ))) ) {
+                               matched = match.shift();
+                               tokens.push({
+                                       value: matched,
+                                       type: type,
+                                       matches: match
+                               });
+                               soFar = soFar.slice( matched.length );
+                       }
+               }
+
+               if ( !matched ) {
+                       break;
+               }
+       }
+
+       // Return the length of the invalid excess
+       // if we're just parsing
+       // Otherwise, throw an error or return tokens
+       return parseOnly ?
+               soFar.length :
+               soFar ?
+                       Sizzle.error( selector ) :
+                       // Cache the tokens
+                       tokenCache( selector, groups ).slice( 0 );
+};
+
+function toSelector( tokens ) {
+       var i = 0,
+               len = tokens.length,
+               selector = "";
+       for ( ; i < len; i++ ) {
+               selector += tokens[i].value;
+       }
+       return selector;
+}
+
+function addCombinator( matcher, combinator, base ) {
+       var dir = combinator.dir,
+               skip = combinator.next,
+               key = skip || dir,
+               checkNonElements = base && key === "parentNode",
+               doneName = done++;
+
+       return combinator.first ?
+               // Check against closest ancestor/preceding element
+               function( elem, context, xml ) {
+                       while ( (elem = elem[ dir ]) ) {
+                               if ( elem.nodeType === 1 || checkNonElements ) {
+                                       return matcher( elem, context, xml );
+                               }
+                       }
+                       return false;
+               } :
+
+               // Check against all ancestor/preceding elements
+               function( elem, context, xml ) {
+                       var oldCache, uniqueCache, outerCache,
+                               newCache = [ dirruns, doneName ];
+
+                       // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching
+                       if ( xml ) {
+                               while ( (elem = elem[ dir ]) ) {
+                                       if ( elem.nodeType === 1 || checkNonElements ) {
+                                               if ( matcher( elem, context, xml ) ) {
+                                                       return true;
+                                               }
+                                       }
+                               }
+                       } else {
+                               while ( (elem = elem[ dir ]) ) {
+                                       if ( elem.nodeType === 1 || checkNonElements ) {
+                                               outerCache = elem[ expando ] || (elem[ expando ] = {});
+
+                                               // Support: IE <9 only
+                                               // Defend against cloned attroperties (jQuery gh-1709)
+                                               uniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {});
+
+                                               if ( skip && skip === elem.nodeName.toLowerCase() ) {
+                                                       elem = elem[ dir ] || elem;
+                                               } else if ( (oldCache = uniqueCache[ key ]) &&
+                                                       oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {
+
+                                                       // Assign to newCache so results back-propagate to previous elements
+                                                       return (newCache[ 2 ] = oldCache[ 2 ]);
+                                               } else {
+                                                       // Reuse newcache so results back-propagate to previous elements
+                                                       uniqueCache[ key ] = newCache;
+
+                                                       // A match means we're done; a fail means we have to keep checking
+                                                       if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {
+                                                               return true;
+                                                       }
+                                               }
+                                       }
+                               }
+                       }
+                       return false;
+               };
+}
+
+function elementMatcher( matchers ) {
+       return matchers.length > 1 ?
+               function( elem, context, xml ) {
+                       var i = matchers.length;
+                       while ( i-- ) {
+                               if ( !matchers[i]( elem, context, xml ) ) {
+                                       return false;
+                               }
+                       }
+                       return true;
+               } :
+               matchers[0];
+}
+
+function multipleContexts( selector, contexts, results ) {
+       var i = 0,
+               len = contexts.length;
+       for ( ; i < len; i++ ) {
+               Sizzle( selector, contexts[i], results );
+       }
+       return results;
+}
+
+function condense( unmatched, map, filter, context, xml ) {
+       var elem,
+               newUnmatched = [],
+               i = 0,
+               len = unmatched.length,
+               mapped = map != null;
+
+       for ( ; i < len; i++ ) {
+               if ( (elem = unmatched[i]) ) {
+                       if ( !filter || filter( elem, context, xml ) ) {
+                               newUnmatched.push( elem );
+                               if ( mapped ) {
+                                       map.push( i );
+                               }
+                       }
+               }
+       }
+
+       return newUnmatched;
+}
+
+function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {
+       if ( postFilter && !postFilter[ expando ] ) {
+               postFilter = setMatcher( postFilter );
+       }
+       if ( postFinder && !postFinder[ expando ] ) {
+               postFinder = setMatcher( postFinder, postSelector );
+       }
+       return markFunction(function( seed, results, context, xml ) {
+               var temp, i, elem,
+                       preMap = [],
+                       postMap = [],
+                       preexisting = results.length,
+
+                       // Get initial elements from seed or context
+                       elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ),
+
+                       // Prefilter to get matcher input, preserving a map for seed-results synchronization
+                       matcherIn = preFilter && ( seed || !selector ) ?
+                               condense( elems, preMap, preFilter, context, xml ) :
+                               elems,
+
+                       matcherOut = matcher ?
+                               // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,
+                               postFinder || ( seed ? preFilter : preexisting || postFilter ) ?
+
+                                       // ...intermediate processing is necessary
+                                       [] :
+
+                                       // ...otherwise use results directly
+                                       results :
+                               matcherIn;
+
+               // Find primary matches
+               if ( matcher ) {
+                       matcher( matcherIn, matcherOut, context, xml );
+               }
+
+               // Apply postFilter
+               if ( postFilter ) {
+                       temp = condense( matcherOut, postMap );
+                       postFilter( temp, [], context, xml );
+
+                       // Un-match failing elements by moving them back to matcherIn
+                       i = temp.length;
+                       while ( i-- ) {
+                               if ( (elem = temp[i]) ) {
+                                       matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);
+                               }
+                       }
+               }
+
+               if ( seed ) {
+                       if ( postFinder || preFilter ) {
+                               if ( postFinder ) {
+                                       // Get the final matcherOut by condensing this intermediate into postFinder contexts
+                                       temp = [];
+                                       i = matcherOut.length;
+                                       while ( i-- ) {
+                                               if ( (elem = matcherOut[i]) ) {
+                                                       // Restore matcherIn since elem is not yet a final match
+                                                       temp.push( (matcherIn[i] = elem) );
+                                               }
+                                       }
+                                       postFinder( null, (matcherOut = []), temp, xml );
+                               }
+
+                               // Move matched elements from seed to results to keep them synchronized
+                               i = matcherOut.length;
+                               while ( i-- ) {
+                                       if ( (elem = matcherOut[i]) &&
+                                               (temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) {
+
+                                               seed[temp] = !(results[temp] = elem);
+                                       }
+                               }
+                       }
+
+               // Add elements to results, through postFinder if defined
+               } else {
+                       matcherOut = condense(
+                               matcherOut === results ?
+                                       matcherOut.splice( preexisting, matcherOut.length ) :
+                                       matcherOut
+                       );
+                       if ( postFinder ) {
+                               postFinder( null, results, matcherOut, xml );
+                       } else {
+                               push.apply( results, matcherOut );
+                       }
+               }
+       });
+}
+
+function matcherFromTokens( tokens ) {
+       var checkContext, matcher, j,
+               len = tokens.length,
+               leadingRelative = Expr.relative[ tokens[0].type ],
+               implicitRelative = leadingRelative || Expr.relative[" "],
+               i = leadingRelative ? 1 : 0,
+
+               // The foundational matcher ensures that elements are reachable from top-level context(s)
+               matchContext = addCombinator( function( elem ) {
+                       return elem === checkContext;
+               }, implicitRelative, true ),
+               matchAnyContext = addCombinator( function( elem ) {
+                       return indexOf( checkContext, elem ) > -1;
+               }, implicitRelative, true ),
+               matchers = [ function( elem, context, xml ) {
+                       var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (
+                               (checkContext = context).nodeType ?
+                                       matchContext( elem, context, xml ) :
+                                       matchAnyContext( elem, context, xml ) );
+                       // Avoid hanging onto element (issue #299)
+                       checkContext = null;
+                       return ret;
+               } ];
+
+       for ( ; i < len; i++ ) {
+               if ( (matcher = Expr.relative[ tokens[i].type ]) ) {
+                       matchers = [ addCombinator(elementMatcher( matchers ), matcher) ];
+               } else {
+                       matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );
+
+                       // Return special upon seeing a positional matcher
+                       if ( matcher[ expando ] ) {
+                               // Find the next relative operator (if any) for proper handling
+                               j = ++i;
+                               for ( ; j < len; j++ ) {
+                                       if ( Expr.relative[ tokens[j].type ] ) {
+                                               break;
+                                       }
+                               }
+                               return setMatcher(
+                                       i > 1 && elementMatcher( matchers ),
+                                       i > 1 && toSelector(
+                                               // If the preceding token was a descendant combinator, insert an implicit any-element `*`
+                                               tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" })
+                                       ).replace( rtrim, "$1" ),
+                                       matcher,
+                                       i < j && matcherFromTokens( tokens.slice( i, j ) ),
+                                       j < len && matcherFromTokens( (tokens = tokens.slice( j )) ),
+                                       j < len && toSelector( tokens )
+                               );
+                       }
+                       matchers.push( matcher );
+               }
+       }
+
+       return elementMatcher( matchers );
+}
+
+function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
+       var bySet = setMatchers.length > 0,
+               byElement = elementMatchers.length > 0,
+               superMatcher = function( seed, context, xml, results, outermost ) {
+                       var elem, j, matcher,
+                               matchedCount = 0,
+                               i = "0",
+                               unmatched = seed && [],
+                               setMatched = [],
+                               contextBackup = outermostContext,
+                               // We must always have either seed elements or outermost context
+                               elems = seed || byElement && Expr.find["TAG"]( "*", outermost ),
+                               // Use integer dirruns iff this is the outermost matcher
+                               dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),
+                               len = elems.length;
+
+                       if ( outermost ) {
+                               outermostContext = context === document || context || outermost;
+                       }
+
+                       // Add elements passing elementMatchers directly to results
+                       // Support: IE<9, Safari
+                       // Tolerate NodeList properties (IE: "length"; Safari: <number>) matching elements by id
+                       for ( ; i !== len && (elem = elems[i]) != null; i++ ) {
+                               if ( byElement && elem ) {
+                                       j = 0;
+                                       if ( !context && elem.ownerDocument !== document ) {
+                                               setDocument( elem );
+                                               xml = !documentIsHTML;
+                                       }
+                                       while ( (matcher = elementMatchers[j++]) ) {
+                                               if ( matcher( elem, context || document, xml) ) {
+                                                       results.push( elem );
+                                                       break;
+                                               }
+                                       }
+                                       if ( outermost ) {
+                                               dirruns = dirrunsUnique;
+                                       }
+                               }
+
+                               // Track unmatched elements for set filters
+                               if ( bySet ) {
+                                       // They will have gone through all possible matchers
+                                       if ( (elem = !matcher && elem) ) {
+                                               matchedCount--;
+                                       }
+
+                                       // Lengthen the array for every element, matched or not
+                                       if ( seed ) {
+                                               unmatched.push( elem );
+                                       }
+                               }
+                       }
+
+                       // `i` is now the count of elements visited above, and adding it to `matchedCount`
+                       // makes the latter nonnegative.
+                       matchedCount += i;
+
+                       // Apply set filters to unmatched elements
+                       // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`
+                       // equals `i`), unless we didn't visit _any_ elements in the above loop because we have
+                       // no element matchers and no seed.
+                       // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that
+                       // case, which will result in a "00" `matchedCount` that differs from `i` but is also
+                       // numerically zero.
+                       if ( bySet && i !== matchedCount ) {
+                               j = 0;
+                               while ( (matcher = setMatchers[j++]) ) {
+                                       matcher( unmatched, setMatched, context, xml );
+                               }
+
+                               if ( seed ) {
+                                       // Reintegrate element matches to eliminate the need for sorting
+                                       if ( matchedCount > 0 ) {
+                                               while ( i-- ) {
+                                                       if ( !(unmatched[i] || setMatched[i]) ) {
+                                                               setMatched[i] = pop.call( results );
+                                                       }
+                                               }
+                                       }
+
+                                       // Discard index placeholder values to get only actual matches
+                                       setMatched = condense( setMatched );
+                               }
+
+                               // Add matches to results
+                               push.apply( results, setMatched );
+
+                               // Seedless set matches succeeding multiple successful matchers stipulate sorting
+                               if ( outermost && !seed && setMatched.length > 0 &&
+                                       ( matchedCount + setMatchers.length ) > 1 ) {
+
+                                       Sizzle.uniqueSort( results );
+                               }
+                       }
+
+                       // Override manipulation of globals by nested matchers
+                       if ( outermost ) {
+                               dirruns = dirrunsUnique;
+                               outermostContext = contextBackup;
+                       }
+
+                       return unmatched;
+               };
+
+       return bySet ?
+               markFunction( superMatcher ) :
+               superMatcher;
+}
+
+compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {
+       var i,
+               setMatchers = [],
+               elementMatchers = [],
+               cached = compilerCache[ selector + " " ];
+
+       if ( !cached ) {
+               // Generate a function of recursive functions that can be used to check each element
+               if ( !match ) {
+                       match = tokenize( selector );
+               }
+               i = match.length;
+               while ( i-- ) {
+                       cached = matcherFromTokens( match[i] );
+                       if ( cached[ expando ] ) {
+                               setMatchers.push( cached );
+                       } else {
+                               elementMatchers.push( cached );
+                       }
+               }
+
+               // Cache the compiled function
+               cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );
+
+               // Save selector and tokenization
+               cached.selector = selector;
+       }
+       return cached;
+};
+
+/**
+ * A low-level selection function that works with Sizzle's compiled
+ *  selector functions
+ * @param {String|Function} selector A selector or a pre-compiled
+ *  selector function built with Sizzle.compile
+ * @param {Element} context
+ * @param {Array} [results]
+ * @param {Array} [seed] A set of elements to match against
+ */
+select = Sizzle.select = function( selector, context, results, seed ) {
+       var i, tokens, token, type, find,
+               compiled = typeof selector === "function" && selector,
+               match = !seed && tokenize( (selector = compiled.selector || selector) );
+
+       results = results || [];
+
+       // Try to minimize operations if there is only one selector in the list and no seed
+       // (the latter of which guarantees us context)
+       if ( match.length === 1 ) {
+
+               // Reduce context if the leading compound selector is an ID
+               tokens = match[0] = match[0].slice( 0 );
+               if ( tokens.length > 2 && (token = tokens[0]).type === "ID" &&
+                               context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[1].type ] ) {
+
+                       context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];
+                       if ( !context ) {
+                               return results;
+
+                       // Precompiled matchers will still verify ancestry, so step up a level
+                       } else if ( compiled ) {
+                               context = context.parentNode;
+                       }
+
+                       selector = selector.slice( tokens.shift().value.length );
+               }
+
+               // Fetch a seed set for right-to-left matching
+               i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length;
+               while ( i-- ) {
+                       token = tokens[i];
+
+                       // Abort if we hit a combinator
+                       if ( Expr.relative[ (type = token.type) ] ) {
+                               break;
+                       }
+                       if ( (find = Expr.find[ type ]) ) {
+                               // Search, expanding context for leading sibling combinators
+                               if ( (seed = find(
+                                       token.matches[0].replace( runescape, funescape ),
+                                       rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context
+                               )) ) {
+
+                                       // If seed is empty or no tokens remain, we can return early
+                                       tokens.splice( i, 1 );
+                                       selector = seed.length && toSelector( tokens );
+                                       if ( !selector ) {
+                                               push.apply( results, seed );
+                                               return results;
+                                       }
+
+                                       break;
+                               }
+                       }
+               }
+       }
+
+       // Compile and execute a filtering function if one is not provided
+       // Provide `match` to avoid retokenization if we modified the selector above
+       ( compiled || compile( selector, match ) )(
+               seed,
+               context,
+               !documentIsHTML,
+               results,
+               !context || rsibling.test( selector ) && testContext( context.parentNode ) || context
+       );
+       return results;
+};
+
+// One-time assignments
+
+// Sort stability
+support.sortStable = expando.split("").sort( sortOrder ).join("") === expando;
+
+// Support: Chrome 14-35+
+// Always assume duplicates if they aren't passed to the comparison function
+support.detectDuplicates = !!hasDuplicate;
+
+// Initialize against the default document
+setDocument();
+
+// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)
+// Detached nodes confoundingly follow *each other*
+support.sortDetached = assert(function( el ) {
+       // Should return 1, but returns 4 (following)
+       return el.compareDocumentPosition( document.createElement("fieldset") ) & 1;
+});
+
+// Support: IE<8
+// Prevent attribute/property "interpolation"
+// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx
+if ( !assert(function( el ) {
+       el.innerHTML = "<a href='#'></a>";
+       return el.firstChild.getAttribute("href") === "#" ;
+}) ) {
+       addHandle( "type|href|height|width", function( elem, name, isXML ) {
+               if ( !isXML ) {
+                       return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 );
+               }
+       });
+}
+
+// Support: IE<9
+// Use defaultValue in place of getAttribute("value")
+if ( !support.attributes || !assert(function( el ) {
+       el.innerHTML = "<input/>";
+       el.firstChild.setAttribute( "value", "" );
+       return el.firstChild.getAttribute( "value" ) === "";
+}) ) {
+       addHandle( "value", function( elem, name, isXML ) {
+               if ( !isXML && elem.nodeName.toLowerCase() === "input" ) {
+                       return elem.defaultValue;
+               }
+       });
+}
+
+// Support: IE<9
+// Use getAttributeNode to fetch booleans when getAttribute lies
+if ( !assert(function( el ) {
+       return el.getAttribute("disabled") == null;
+}) ) {
+       addHandle( booleans, function( elem, name, isXML ) {
+               var val;
+               if ( !isXML ) {
+                       return elem[ name ] === true ? name.toLowerCase() :
+                                       (val = elem.getAttributeNode( name )) && val.specified ?
+                                       val.value :
+                               null;
+               }
+       });
+}
+
+return Sizzle;
+
+})( window );
+
+
+
+jQuery.find = Sizzle;
+jQuery.expr = Sizzle.selectors;
+
+// Deprecated
+jQuery.expr[ ":" ] = jQuery.expr.pseudos;
+jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;
+jQuery.text = Sizzle.getText;
+jQuery.isXMLDoc = Sizzle.isXML;
+jQuery.contains = Sizzle.contains;
+jQuery.escapeSelector = Sizzle.escape;
+
+
+
+
+var dir = function( elem, dir, until ) {
+       var matched = [],
+               truncate = until !== undefined;
+
+       while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {
+               if ( elem.nodeType === 1 ) {
+                       if ( truncate && jQuery( elem ).is( until ) ) {
+                               break;
+                       }
+                       matched.push( elem );
+               }
+       }
+       return matched;
+};
+
+
+var siblings = function( n, elem ) {
+       var matched = [];
+
+       for ( ; n; n = n.nextSibling ) {
+               if ( n.nodeType === 1 && n !== elem ) {
+                       matched.push( n );
+               }
+       }
+
+       return matched;
+};
+
+
+var rneedsContext = jQuery.expr.match.needsContext;
+
+
+
+function nodeName( elem, name ) {
+
+  return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
+
+};
+var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i );
+
+
+
+var risSimple = /^.[^:#\[\.,]*$/;
+
+// Implement the identical functionality for filter and not
+function winnow( elements, qualifier, not ) {
+       if ( jQuery.isFunction( qualifier ) ) {
+               return jQuery.grep( elements, function( elem, i ) {
+                       return !!qualifier.call( elem, i, elem ) !== not;
+               } );
+       }
+
+       // Single element
+       if ( qualifier.nodeType ) {
+               return jQuery.grep( elements, function( elem ) {
+                       return ( elem === qualifier ) !== not;
+               } );
+       }
+
+       // Arraylike of elements (jQuery, arguments, Array)
+       if ( typeof qualifier !== "string" ) {
+               return jQuery.grep( elements, function( elem ) {
+                       return ( indexOf.call( qualifier, elem ) > -1 ) !== not;
+               } );
+       }
+
+       // Simple selector that can be filtered directly, removing non-Elements
+       if ( risSimple.test( qualifier ) ) {
+               return jQuery.filter( qualifier, elements, not );
+       }
+
+       // Complex selector, compare the two sets, removing non-Elements
+       qualifier = jQuery.filter( qualifier, elements );
+       return jQuery.grep( elements, function( elem ) {
+               return ( indexOf.call( qualifier, elem ) > -1 ) !== not && elem.nodeType === 1;
+       } );
+}
+
+jQuery.filter = function( expr, elems, not ) {
+       var elem = elems[ 0 ];
+
+       if ( not ) {
+               expr = ":not(" + expr + ")";
+       }
+
+       if ( elems.length === 1 && elem.nodeType === 1 ) {
+               return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];
+       }
+
+       return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {
+               return elem.nodeType === 1;
+       } ) );
+};
+
+jQuery.fn.extend( {
+       find: function( selector ) {
+               var i, ret,
+                       len = this.length,
+                       self = this;
+
+               if ( typeof selector !== "string" ) {
+                       return this.pushStack( jQuery( selector ).filter( function() {
+                               for ( i = 0; i < len; i++ ) {
+                                       if ( jQuery.contains( self[ i ], this ) ) {
+                                               return true;
+                                       }
+                               }
+                       } ) );
+               }
+
+               ret = this.pushStack( [] );
+
+               for ( i = 0; i < len; i++ ) {
+                       jQuery.find( selector, self[ i ], ret );
+               }
+
+               return len > 1 ? jQuery.uniqueSort( ret ) : ret;
+       },
+       filter: function( selector ) {
+               return this.pushStack( winnow( this, selector || [], false ) );
+       },
+       not: function( selector ) {
+               return this.pushStack( winnow( this, selector || [], true ) );
+       },
+       is: function( selector ) {
+               return !!winnow(
+                       this,
+
+                       // If this is a positional/relative selector, check membership in the returned set
+                       // so $("p:first").is("p:last") won't return true for a doc with two "p".
+                       typeof selector === "string" && rneedsContext.test( selector ) ?
+                               jQuery( selector ) :
+                               selector || [],
+                       false
+               ).length;
+       }
+} );
+
+
+// Initialize a jQuery object
+
+
+// A central reference to the root jQuery(document)
+var rootjQuery,
+
+       // A simple way to check for HTML strings
+       // Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
+       // Strict HTML recognition (#11290: must start with <)
+       // Shortcut simple #id case for speed
+       rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,
+
+       init = jQuery.fn.init = function( selector, context, root ) {
+               var match, elem;
+
+               // HANDLE: $(""), $(null), $(undefined), $(false)
+               if ( !selector ) {
+                       return this;
+               }
+
+               // Method init() accepts an alternate rootjQuery
+               // so migrate can support jQuery.sub (gh-2101)
+               root = root || rootjQuery;
+
+               // Handle HTML strings
+               if ( typeof selector === "string" ) {
+                       if ( selector[ 0 ] === "<" &&
+                               selector[ selector.length - 1 ] === ">" &&
+                               selector.length >= 3 ) {
+
+                               // Assume that strings that start and end with <> are HTML and skip the regex check
+                               match = [ null, selector, null ];
+
+                       } else {
+                               match = rquickExpr.exec( selector );
+                       }
+
+                       // Match html or make sure no context is specified for #id
+                       if ( match && ( match[ 1 ] || !context ) ) {
+
+                               // HANDLE: $(html) -> $(array)
+                               if ( match[ 1 ] ) {
+                                       context = context instanceof jQuery ? context[ 0 ] : context;
+
+                                       // Option to run scripts is true for back-compat
+                                       // Intentionally let the error be thrown if parseHTML is not present
+                                       jQuery.merge( this, jQuery.parseHTML(
+                                               match[ 1 ],
+                                               context && context.nodeType ? context.ownerDocument || context : document,
+                                               true
+                                       ) );
+
+                                       // HANDLE: $(html, props)
+                                       if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {
+                                               for ( match in context ) {
+
+                                                       // Properties of context are called as methods if possible
+                                                       if ( jQuery.isFunction( this[ match ] ) ) {
+                                                               this[ match ]( context[ match ] );
+
+                                                       // ...and otherwise set as attributes
+                                                       } else {
+                                                               this.attr( match, context[ match ] );
+                                                       }
+                                               }
+                                       }
+
+                                       return this;
+
+                               // HANDLE: $(#id)
+                               } else {
+                                       elem = document.getElementById( match[ 2 ] );
+
+                                       if ( elem ) {
+
+                                               // Inject the element directly into the jQuery object
+                                               this[ 0 ] = elem;
+                                               this.length = 1;
+                                       }
+                                       return this;
+                               }
+
+                       // HANDLE: $(expr, $(...))
+                       } else if ( !context || context.jquery ) {
+                               return ( context || root ).find( selector );
+
+                       // HANDLE: $(expr, context)
+                       // (which is just equivalent to: $(context).find(expr)
+                       } else {
+                               return this.constructor( context ).find( selector );
+                       }
+
+               // HANDLE: $(DOMElement)
+               } else if ( selector.nodeType ) {
+                       this[ 0 ] = selector;
+                       this.length = 1;
+                       return this;
+
+               // HANDLE: $(function)
+               // Shortcut for document ready
+               } else if ( jQuery.isFunction( selector ) ) {
+                       return root.ready !== undefined ?
+                               root.ready( selector ) :
+
+                               // Execute immediately if ready is not present
+                               selector( jQuery );
+               }
+
+               return jQuery.makeArray( selector, this );
+       };
+
+// Give the init function the jQuery prototype for later instantiation
+init.prototype = jQuery.fn;
+
+// Initialize central reference
+rootjQuery = jQuery( document );
+
+
+var rparentsprev = /^(?:parents|prev(?:Until|All))/,
+
+       // Methods guaranteed to produce a unique set when starting from a unique set
+       guaranteedUnique = {
+               children: true,
+               contents: true,
+               next: true,
+               prev: true
+       };
+
+jQuery.fn.extend( {
+       has: function( target ) {
+               var targets = jQuery( target, this ),
+                       l = targets.length;
+
+               return this.filter( function() {
+                       var i = 0;
+                       for ( ; i < l; i++ ) {
+                               if ( jQuery.contains( this, targets[ i ] ) ) {
+                                       return true;
+                               }
+                       }
+               } );
+       },
+
+       closest: function( selectors, context ) {
+               var cur,
+                       i = 0,
+                       l = this.length,
+                       matched = [],
+                       targets = typeof selectors !== "string" && jQuery( selectors );
+
+               // Positional selectors never match, since there's no _selection_ context
+               if ( !rneedsContext.test( selectors ) ) {
+                       for ( ; i < l; i++ ) {
+                               for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {
+
+                                       // Always skip document fragments
+                                       if ( cur.nodeType < 11 && ( targets ?
+                                               targets.index( cur ) > -1 :
+
+                                               // Don't pass non-elements to Sizzle
+                                               cur.nodeType === 1 &&
+                                                       jQuery.find.matchesSelector( cur, selectors ) ) ) {
+
+                                               matched.push( cur );
+                                               break;
+                                       }
+                               }
+                       }
+               }
+
+               return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );
+       },
+
+       // Determine the position of an element within the set
+       index: function( elem ) {
+
+               // No argument, return index in parent
+               if ( !elem ) {
+                       return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;
+               }
+
+               // Index in selector
+               if ( typeof elem === "string" ) {
+                       return indexOf.call( jQuery( elem ), this[ 0 ] );
+               }
+
+               // Locate the position of the desired element
+               return indexOf.call( this,
+
+                       // If it receives a jQuery object, the first element is used
+                       elem.jquery ? elem[ 0 ] : elem
+               );
+       },
+
+       add: function( selector, context ) {
+               return this.pushStack(
+                       jQuery.uniqueSort(
+                               jQuery.merge( this.get(), jQuery( selector, context ) )
+                       )
+               );
+       },
+
+       addBack: function( selector ) {
+               return this.add( selector == null ?
+                       this.prevObject : this.prevObject.filter( selector )
+               );
+       }
+} );
+
+function sibling( cur, dir ) {
+       while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}
+       return cur;
+}
+
+jQuery.each( {
+       parent: function( elem ) {
+               var parent = elem.parentNode;
+               return parent && parent.nodeType !== 11 ? parent : null;
+       },
+       parents: function( elem ) {
+               return dir( elem, "parentNode" );
+       },
+       parentsUntil: function( elem, i, until ) {
+               return dir( elem, "parentNode", until );
+       },
+       next: function( elem ) {
+               return sibling( elem, "nextSibling" );
+       },
+       prev: function( elem ) {
+               return sibling( elem, "previousSibling" );
+       },
+       nextAll: function( elem ) {
+               return dir( elem, "nextSibling" );
+       },
+       prevAll: function( elem ) {
+               return dir( elem, "previousSibling" );
+       },
+       nextUntil: function( elem, i, until ) {
+               return dir( elem, "nextSibling", until );
+       },
+       prevUntil: function( elem, i, until ) {
+               return dir( elem, "previousSibling", until );
+       },
+       siblings: function( elem ) {
+               return siblings( ( elem.parentNode || {} ).firstChild, elem );
+       },
+       children: function( elem ) {
+               return siblings( elem.firstChild );
+       },
+       contents: function( elem ) {
+        if ( nodeName( elem, "iframe" ) ) {
+            return elem.contentDocument;
+        }
+
+        // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only
+        // Treat the template element as a regular one in browsers that
+        // don't support it.
+        if ( nodeName( elem, "template" ) ) {
+            elem = elem.content || elem;
+        }
+
+        return jQuery.merge( [], elem.childNodes );
+       }
+}, function( name, fn ) {
+       jQuery.fn[ name ] = function( until, selector ) {
+               var matched = jQuery.map( this, fn, until );
+
+               if ( name.slice( -5 ) !== "Until" ) {
+                       selector = until;
+               }
+
+               if ( selector && typeof selector === "string" ) {
+                       matched = jQuery.filter( selector, matched );
+               }
+
+               if ( this.length > 1 ) {
+
+                       // Remove duplicates
+                       if ( !guaranteedUnique[ name ] ) {
+                               jQuery.uniqueSort( matched );
+                       }
+
+                       // Reverse order for parents* and prev-derivatives
+                       if ( rparentsprev.test( name ) ) {
+                               matched.reverse();
+                       }
+               }
+
+               return this.pushStack( matched );
+       };
+} );
+var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g );
+
+
+
+// Convert String-formatted options into Object-formatted ones
+function createOptions( options ) {
+       var object = {};
+       jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {
+               object[ flag ] = true;
+       } );
+       return object;
+}
+
+/*
+ * Create a callback list using the following parameters:
+ *
+ *     options: an optional list of space-separated options that will change how
+ *                     the callback list behaves or a more traditional option object
+ *
+ * By default a callback list will act like an event callback list and can be
+ * "fired" multiple times.
+ *
+ * Possible options:
+ *
+ *     once:                   will ensure the callback list can only be fired once (like a Deferred)
+ *
+ *     memory:                 will keep track of previous values and will call any callback added
+ *                                     after the list has been fired right away with the latest "memorized"
+ *                                     values (like a Deferred)
+ *
+ *     unique:                 will ensure a callback can only be added once (no duplicate in the list)
+ *
+ *     stopOnFalse:    interrupt callings when a callback returns false
+ *
+ */
+jQuery.Callbacks = function( options ) {
+
+       // Convert options from String-formatted to Object-formatted if needed
+       // (we check in cache first)
+       options = typeof options === "string" ?
+               createOptions( options ) :
+               jQuery.extend( {}, options );
+
+       var // Flag to know if list is currently firing
+               firing,
+
+               // Last fire value for non-forgettable lists
+               memory,
+
+               // Flag to know if list was already fired
+               fired,
+
+               // Flag to prevent firing
+               locked,
+
+               // Actual callback list
+               list = [],
+
+               // Queue of execution data for repeatable lists
+               queue = [],
+
+               // Index of currently firing callback (modified by add/remove as needed)
+               firingIndex = -1,
+
+               // Fire callbacks
+               fire = function() {
+
+                       // Enforce single-firing
+                       locked = locked || options.once;
+
+                       // Execute callbacks for all pending executions,
+                       // respecting firingIndex overrides and runtime changes
+                       fired = firing = true;
+                       for ( ; queue.length; firingIndex = -1 ) {
+                               memory = queue.shift();
+                               while ( ++firingIndex < list.length ) {
+
+                                       // Run callback and check for early termination
+                                       if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&
+                                               options.stopOnFalse ) {
+
+                                               // Jump to end and forget the data so .add doesn't re-fire
+                                               firingIndex = list.length;
+                                               memory = false;
+                                       }
+                               }
+                       }
+
+                       // Forget the data if we're done with it
+                       if ( !options.memory ) {
+                               memory = false;
+                       }
+
+                       firing = false;
+
+                       // Clean up if we're done firing for good
+                       if ( locked ) {
+
+                               // Keep an empty list if we have data for future add calls
+                               if ( memory ) {
+                                       list = [];
+
+                               // Otherwise, this object is spent
+                               } else {
+                                       list = "";
+                               }
+                       }
+               },
+
+               // Actual Callbacks object
+               self = {
+
+                       // Add a callback or a collection of callbacks to the list
+                       add: function() {
+                               if ( list ) {
+
+                                       // If we have memory from a past run, we should fire after adding
+                                       if ( memory && !firing ) {
+                                               firingIndex = list.length - 1;
+                                               queue.push( memory );
+                                       }
+
+                                       ( function add( args ) {
+                                               jQuery.each( args, function( _, arg ) {
+                                                       if ( jQuery.isFunction( arg ) ) {
+                                                               if ( !options.unique || !self.has( arg ) ) {
+                                                                       list.push( arg );
+                                                               }
+                                                       } else if ( arg && arg.length && jQuery.type( arg ) !== "string" ) {
+
+                                                               // Inspect recursively
+                                                               add( arg );
+                                                       }
+                                               } );
+                                       } )( arguments );
+
+                                       if ( memory && !firing ) {
+                                               fire();
+                                       }
+                               }
+                               return this;
+                       },
+
+                       // Remove a callback from the list
+                       remove: function() {
+                               jQuery.each( arguments, function( _, arg ) {
+                                       var index;
+                                       while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {
+                                               list.splice( index, 1 );
+
+                                               // Handle firing indexes
+                                               if ( index <= firingIndex ) {
+                                                       firingIndex--;
+                                               }
+                                       }
+                               } );
+                               return this;
+                       },
+
+                       // Check if a given callback is in the list.
+                       // If no argument is given, return whether or not list has callbacks attached.
+                       has: function( fn ) {
+                               return fn ?
+                                       jQuery.inArray( fn, list ) > -1 :
+                                       list.length > 0;
+                       },
+
+                       // Remove all callbacks from the list
+                       empty: function() {
+                               if ( list ) {
+                                       list = [];
+                               }
+                               return this;
+                       },
+
+                       // Disable .fire and .add
+                       // Abort any current/pending executions
+                       // Clear all callbacks and values
+                       disable: function() {
+                               locked = queue = [];
+                               list = memory = "";
+                               return this;
+                       },
+                       disabled: function() {
+                               return !list;
+                       },
+
+                       // Disable .fire
+                       // Also disable .add unless we have memory (since it would have no effect)
+                       // Abort any pending executions
+                       lock: function() {
+                               locked = queue = [];
+                               if ( !memory && !firing ) {
+                                       list = memory = "";
+                               }
+                               return this;
+                       },
+                       locked: function() {
+                               return !!locked;
+                       },
+
+                       // Call all callbacks with the given context and arguments
+                       fireWith: function( context, args ) {
+                               if ( !locked ) {
+                                       args = args || [];
+                                       args = [ context, args.slice ? args.slice() : args ];
+                                       queue.push( args );
+                                       if ( !firing ) {
+                                               fire();
+                                       }
+                               }
+                               return this;
+                       },
+
+                       // Call all the callbacks with the given arguments
+                       fire: function() {
+                               self.fireWith( this, arguments );
+                               return this;
+                       },
+
+                       // To know if the callbacks have already been called at least once
+                       fired: function() {
+                               return !!fired;
+                       }
+               };
+
+       return self;
+};
+
+
+function Identity( v ) {
+       return v;
+}
+function Thrower( ex ) {
+       throw ex;
+}
+
+function adoptValue( value, resolve, reject, noValue ) {
+       var method;
+
+       try {
+
+               // Check for promise aspect first to privilege synchronous behavior
+               if ( value && jQuery.isFunction( ( method = value.promise ) ) ) {
+                       method.call( value ).done( resolve ).fail( reject );
+
+               // Other thenables
+               } else if ( value && jQuery.isFunction( ( method = value.then ) ) ) {
+                       method.call( value, resolve, reject );
+
+               // Other non-thenables
+               } else {
+
+                       // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:
+                       // * false: [ value ].slice( 0 ) => resolve( value )
+                       // * true: [ value ].slice( 1 ) => resolve()
+                       resolve.apply( undefined, [ value ].slice( noValue ) );
+               }
+
+       // For Promises/A+, convert exceptions into rejections
+       // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in
+       // Deferred#then to conditionally suppress rejection.
+       } catch ( value ) {
+
+               // Support: Android 4.0 only
+               // Strict mode functions invoked without .call/.apply get global-object context
+               reject.apply( undefined, [ value ] );
+       }
+}
+
+jQuery.extend( {
+
+       Deferred: function( func ) {
+               var tuples = [
+
+                               // action, add listener, callbacks,
+                               // ... .then handlers, argument index, [final state]
+                               [ "notify", "progress", jQuery.Callbacks( "memory" ),
+                                       jQuery.Callbacks( "memory" ), 2 ],
+                               [ "resolve", "done", jQuery.Callbacks( "once memory" ),
+                                       jQuery.Callbacks( "once memory" ), 0, "resolved" ],
+                               [ "reject", "fail", jQuery.Callbacks( "once memory" ),
+                                       jQuery.Callbacks( "once memory" ), 1, "rejected" ]
+                       ],
+                       state = "pending",
+                       promise = {
+                               state: function() {
+                                       return state;
+                               },
+                               always: function() {
+                                       deferred.done( arguments ).fail( arguments );
+                                       return this;
+                               },
+                               "catch": function( fn ) {
+                                       return promise.then( null, fn );
+                               },
+
+                               // Keep pipe for back-compat
+                               pipe: function( /* fnDone, fnFail, fnProgress */ ) {
+                                       var fns = arguments;
+
+                                       return jQuery.Deferred( function( newDefer ) {
+                                               jQuery.each( tuples, function( i, tuple ) {
+
+                                                       // Map tuples (progress, done, fail) to arguments (done, fail, progress)
+                                                       var fn = jQuery.isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ];
+
+                                                       // deferred.progress(function() { bind to newDefer or newDefer.notify })
+                                                       // deferred.done(function() { bind to newDefer or newDefer.resolve })
+                                                       // deferred.fail(function() { bind to newDefer or newDefer.reject })
+                                                       deferred[ tuple[ 1 ] ]( function() {
+                                                               var returned = fn && fn.apply( this, arguments );
+                                                               if ( returned && jQuery.isFunction( returned.promise ) ) {
+                                                                       returned.promise()
+                                                                               .progress( newDefer.notify )
+                                                                               .done( newDefer.resolve )
+                                                                               .fail( newDefer.reject );
+                                                               } else {
+                                                                       newDefer[ tuple[ 0 ] + "With" ](
+                                                                               this,
+                                                                               fn ? [ returned ] : arguments
+                                                                       );
+                                                               }
+                                                       } );
+                                               } );
+                                               fns = null;
+                                       } ).promise();
+                               },
+                               then: function( onFulfilled, onRejected, onProgress ) {
+                                       var maxDepth = 0;
+                                       function resolve( depth, deferred, handler, special ) {
+                                               return function() {
+                                                       var that = this,
+                                                               args = arguments,
+                                                               mightThrow = function() {
+                                                                       var returned, then;
+
+                                                                       // Support: Promises/A+ section 2.3.3.3.3
+                                                                       // https://promisesaplus.com/#point-59
+                                                                       // Ignore double-resolution attempts
+                                                                       if ( depth < maxDepth ) {
+                                                                               return;
+                                                                       }
+
+                                                                       returned = handler.apply( that, args );
+
+                                                                       // Support: Promises/A+ section 2.3.1
+                                                                       // https://promisesaplus.com/#point-48
+                                                                       if ( returned === deferred.promise() ) {
+                                                                               throw new TypeError( "Thenable self-resolution" );
+                                                                       }
+
+                                                                       // Support: Promises/A+ sections 2.3.3.1, 3.5
+                                                                       // https://promisesaplus.com/#point-54
+                                                                       // https://promisesaplus.com/#point-75
+                                                                       // Retrieve `then` only once
+                                                                       then = returned &&
+
+                                                                               // Support: Promises/A+ section 2.3.4
+                                                                               // https://promisesaplus.com/#point-64
+                                                                               // Only check objects and functions for thenability
+                                                                               ( typeof returned === "object" ||
+                                                                                       typeof returned === "function" ) &&
+                                                                               returned.then;
+
+                                                                       // Handle a returned thenable
+                                                                       if ( jQuery.isFunction( then ) ) {
+
+                                                                               // Special processors (notify) just wait for resolution
+                                                                               if ( special ) {
+                                                                                       then.call(
+                                                                                               returned,
+                                                                                               resolve( maxDepth, deferred, Identity, special ),
+                                                                                               resolve( maxDepth, deferred, Thrower, special )
+                                                                                       );
+
+                                                                               // Normal processors (resolve) also hook into progress
+                                                                               } else {
+
+                                                                                       // ...and disregard older resolution values
+                                                                                       maxDepth++;
+
+                                                                                       then.call(
+                                                                                               returned,
+                                                                                               resolve( maxDepth, deferred, Identity, special ),
+                                                                                               resolve( maxDepth, deferred, Thrower, special ),
+                                                                                               resolve( maxDepth, deferred, Identity,
+                                                                                                       deferred.notifyWith )
+                                                                                       );
+                                                                               }
+
+                                                                       // Handle all other returned values
+                                                                       } else {
+
+                                                                               // Only substitute handlers pass on context
+                                                                               // and multiple values (non-spec behavior)
+                                                                               if ( handler !== Identity ) {
+                                                                                       that = undefined;
+                                                                                       args = [ returned ];
+                                                                               }
+
+                                                                               // Process the value(s)
+                                                                               // Default process is resolve
+                                                                               ( special || deferred.resolveWith )( that, args );
+                                                                       }
+                                                               },
+
+                                                               // Only normal processors (resolve) catch and reject exceptions
+                                                               process = special ?
+                                                                       mightThrow :
+                                                                       function() {
+                                                                               try {
+                                                                                       mightThrow();
+                                                                               } catch ( e ) {
+
+                                                                                       if ( jQuery.Deferred.exceptionHook ) {
+                                                                                               jQuery.Deferred.exceptionHook( e,
+                                                                                                       process.stackTrace );
+                                                                                       }
+
+                                                                                       // Support: Promises/A+ section 2.3.3.3.4.1
+                                                                                       // https://promisesaplus.com/#point-61
+                                                                                       // Ignore post-resolution exceptions
+                                                                                       if ( depth + 1 >= maxDepth ) {
+
+                                                                                               // Only substitute handlers pass on context
+                                                                                               // and multiple values (non-spec behavior)
+                                                                                               if ( handler !== Thrower ) {
+                                                                                                       that = undefined;
+                                                                                                       args = [ e ];
+                                                                                               }
+
+                                                                                               deferred.rejectWith( that, args );
+                                                                                       }
+                                                                               }
+                                                                       };
+
+                                                       // Support: Promises/A+ section 2.3.3.3.1
+                                                       // https://promisesaplus.com/#point-57
+                                                       // Re-resolve promises immediately to dodge false rejection from
+                                                       // subsequent errors
+                                                       if ( depth ) {
+                                                               process();
+                                                       } else {
+
+                                                               // Call an optional hook to record the stack, in case of exception
+                                                               // since it's otherwise lost when execution goes async
+                                                               if ( jQuery.Deferred.getStackHook ) {
+                                                                       process.stackTrace = jQuery.Deferred.getStackHook();
+                                                               }
+                                                               window.setTimeout( process );
+                                                       }
+                                               };
+                                       }
+
+                                       return jQuery.Deferred( function( newDefer ) {
+
+                                               // progress_handlers.add( ... )
+                                               tuples[ 0 ][ 3 ].add(
+                                                       resolve(
+                                                               0,
+                                                               newDefer,
+                                                               jQuery.isFunction( onProgress ) ?
+                                                                       onProgress :
+                                                                       Identity,
+                                                               newDefer.notifyWith
+                                                       )
+                                               );
+
+                                               // fulfilled_handlers.add( ... )
+                                               tuples[ 1 ][ 3 ].add(
+                                                       resolve(
+                                                               0,
+                                                               newDefer,
+                                                               jQuery.isFunction( onFulfilled ) ?
+                                                                       onFulfilled :
+                                                                       Identity
+                                                       )
+                                               );
+
+                                               // rejected_handlers.add( ... )
+                                               tuples[ 2 ][ 3 ].add(
+                                                       resolve(
+                                                               0,
+                                                               newDefer,
+                                                               jQuery.isFunction( onRejected ) ?
+                                                                       onRejected :
+                                                                       Thrower
+                                                       )
+                                               );
+                                       } ).promise();
+                               },
+
+                               // Get a promise for this deferred
+                               // If obj is provided, the promise aspect is added to the object
+                               promise: function( obj ) {
+                                       return obj != null ? jQuery.extend( obj, promise ) : promise;
+                               }
+                       },
+                       deferred = {};
+
+               // Add list-specific methods
+               jQuery.each( tuples, function( i, tuple ) {
+                       var list = tuple[ 2 ],
+                               stateString = tuple[ 5 ];
+
+                       // promise.progress = list.add
+                       // promise.done = list.add
+                       // promise.fail = list.add
+                       promise[ tuple[ 1 ] ] = list.add;
+
+                       // Handle state
+                       if ( stateString ) {
+                               list.add(
+                                       function() {
+
+                                               // state = "resolved" (i.e., fulfilled)
+                                               // state = "rejected"
+                                               state = stateString;
+                                       },
+
+                                       // rejected_callbacks.disable
+                                       // fulfilled_callbacks.disable
+                                       tuples[ 3 - i ][ 2 ].disable,
+
+                                       // progress_callbacks.lock
+                                       tuples[ 0 ][ 2 ].lock
+                               );
+                       }
+
+                       // progress_handlers.fire
+                       // fulfilled_handlers.fire
+                       // rejected_handlers.fire
+                       list.add( tuple[ 3 ].fire );
+
+                       // deferred.notify = function() { deferred.notifyWith(...) }
+                       // deferred.resolve = function() { deferred.resolveWith(...) }
+                       // deferred.reject = function() { deferred.rejectWith(...) }
+                       deferred[ tuple[ 0 ] ] = function() {
+                               deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments );
+                               return this;
+                       };
+
+                       // deferred.notifyWith = list.fireWith
+                       // deferred.resolveWith = list.fireWith
+                       // deferred.rejectWith = list.fireWith
+                       deferred[ tuple[ 0 ] + "With" ] = list.fireWith;
+               } );
+
+               // Make the deferred a promise
+               promise.promise( deferred );
+
+               // Call given func if any
+               if ( func ) {
+                       func.call( deferred, deferred );
+               }
+
+               // All done!
+               return deferred;
+       },
+
+       // Deferred helper
+       when: function( singleValue ) {
+               var
+
+                       // count of uncompleted subordinates
+                       remaining = arguments.length,
+
+                       // count of unprocessed arguments
+                       i = remaining,
+
+                       // subordinate fulfillment data
+                       resolveContexts = Array( i ),
+                       resolveValues = slice.call( arguments ),
+
+                       // the master Deferred
+                       master = jQuery.Deferred(),
+
+                       // subordinate callback factory
+                       updateFunc = function( i ) {
+                               return function( value ) {
+                                       resolveContexts[ i ] = this;
+                                       resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;
+                                       if ( !( --remaining ) ) {
+                                               master.resolveWith( resolveContexts, resolveValues );
+                                       }
+                               };
+                       };
+
+               // Single- and empty arguments are adopted like Promise.resolve
+               if ( remaining <= 1 ) {
+                       adoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject,
+                               !remaining );
+
+                       // Use .then() to unwrap secondary thenables (cf. gh-3000)
+                       if ( master.state() === "pending" ||
+                               jQuery.isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) {
+
+                               return master.then();
+                       }
+               }
+
+               // Multiple arguments are aggregated like Promise.all array elements
+               while ( i-- ) {
+                       adoptValue( resolveValues[ i ], updateFunc( i ), master.reject );
+               }
+
+               return master.promise();
+       }
+} );
+
+
+// These usually indicate a programmer mistake during development,
+// warn about them ASAP rather than swallowing them by default.
+var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;
+
+jQuery.Deferred.exceptionHook = function( error, stack ) {
+
+       // Support: IE 8 - 9 only
+       // Console exists when dev tools are open, which can happen at any time
+       if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) {
+               window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack );
+       }
+};
+
+
+
+
+jQuery.readyException = function( error ) {
+       window.setTimeout( function() {
+               throw error;
+       } );
+};
+
+
+
+
+// The deferred used on DOM ready
+var readyList = jQuery.Deferred();
+
+jQuery.fn.ready = function( fn ) {
+
+       readyList
+               .then( fn )
+
+               // Wrap jQuery.readyException in a function so that the lookup
+               // happens at the time of error handling instead of callback
+               // registration.
+               .catch( function( error ) {
+                       jQuery.readyException( error );
+               } );
+
+       return this;
+};
+
+jQuery.extend( {
+
+       // Is the DOM ready to be used? Set to true once it occurs.
+       isReady: false,
+
+       // A counter to track how many items to wait for before
+       // the ready event fires. See #6781
+       readyWait: 1,
+
+       // Handle when the DOM is ready
+       ready: function( wait ) {
+
+               // Abort if there are pending holds or we're already ready
+               if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {
+                       return;
+               }
+
+               // Remember that the DOM is ready
+               jQuery.isReady = true;
+
+               // If a normal DOM Ready event fired, decrement, and wait if need be
+               if ( wait !== true && --jQuery.readyWait > 0 ) {
+                       return;
+               }
+
+               // If there are functions bound, to execute
+               readyList.resolveWith( document, [ jQuery ] );
+       }
+} );
+
+jQuery.ready.then = readyList.then;
+
+// The ready event handler and self cleanup method
+function completed() {
+       document.removeEventListener( "DOMContentLoaded", completed );
+       window.removeEventListener( "load", completed );
+       jQuery.ready();
+}
+
+// Catch cases where $(document).ready() is called
+// after the browser event has already occurred.
+// Support: IE <=9 - 10 only
+// Older IE sometimes signals "interactive" too soon
+if ( document.readyState === "complete" ||
+       ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) {
+
+       // Handle it asynchronously to allow scripts the opportunity to delay ready
+       window.setTimeout( jQuery.ready );
+
+} else {
+
+       // Use the handy event callback
+       document.addEventListener( "DOMContentLoaded", completed );
+
+       // A fallback to window.onload, that will always work
+       window.addEventListener( "load", completed );
+}
+
+
+
+
+// Multifunctional method to get and set values of a collection
+// The value/s can optionally be executed if it's a function
+var access = function( elems, fn, key, value, chainable, emptyGet, raw ) {
+       var i = 0,
+               len = elems.length,
+               bulk = key == null;
+
+       // Sets many values
+       if ( jQuery.type( key ) === "object" ) {
+               chainable = true;
+               for ( i in key ) {
+                       access( elems, fn, i, key[ i ], true, emptyGet, raw );
+               }
+
+       // Sets one value
+       } else if ( value !== undefined ) {
+               chainable = true;
+
+               if ( !jQuery.isFunction( value ) ) {
+                       raw = true;
+               }
+
+               if ( bulk ) {
+
+                       // Bulk operations run against the entire set
+                       if ( raw ) {
+                               fn.call( elems, value );
+                               fn = null;
+
+                       // ...except when executing function values
+                       } else {
+                               bulk = fn;
+                               fn = function( elem, key, value ) {
+                                       return bulk.call( jQuery( elem ), value );
+                               };
+                       }
+               }
+
+               if ( fn ) {
+                       for ( ; i < len; i++ ) {
+                               fn(
+                                       elems[ i ], key, raw ?
+                                       value :
+                                       value.call( elems[ i ], i, fn( elems[ i ], key ) )
+                               );
+                       }
+               }
+       }
+
+       if ( chainable ) {
+               return elems;
+       }
+
+       // Gets
+       if ( bulk ) {
+               return fn.call( elems );
+       }
+
+       return len ? fn( elems[ 0 ], key ) : emptyGet;
+};
+var acceptData = function( owner ) {
+
+       // Accepts only:
+       //  - Node
+       //    - Node.ELEMENT_NODE
+       //    - Node.DOCUMENT_NODE
+       //  - Object
+       //    - Any
+       return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );
+};
+
+
+
+
+function Data() {
+       this.expando = jQuery.expando + Data.uid++;
+}
+
+Data.uid = 1;
+
+Data.prototype = {
+
+       cache: function( owner ) {
+
+               // Check if the owner object already has a cache
+               var value = owner[ this.expando ];
+
+               // If not, create one
+               if ( !value ) {
+                       value = {};
+
+                       // We can accept data for non-element nodes in modern browsers,
+                       // but we should not, see #8335.
+                       // Always return an empty object.
+                       if ( acceptData( owner ) ) {
+
+                               // If it is a node unlikely to be stringify-ed or looped over
+                               // use plain assignment
+                               if ( owner.nodeType ) {
+                                       owner[ this.expando ] = value;
+
+                               // Otherwise secure it in a non-enumerable property
+                               // configurable must be true to allow the property to be
+                               // deleted when data is removed
+                               } else {
+                                       Object.defineProperty( owner, this.expando, {
+                                               value: value,
+                                               configurable: true
+                                       } );
+                               }
+                       }
+               }
+
+               return value;
+       },
+       set: function( owner, data, value ) {
+               var prop,
+                       cache = this.cache( owner );
+
+               // Handle: [ owner, key, value ] args
+               // Always use camelCase key (gh-2257)
+               if ( typeof data === "string" ) {
+                       cache[ jQuery.camelCase( data ) ] = value;
+
+               // Handle: [ owner, { properties } ] args
+               } else {
+
+                       // Copy the properties one-by-one to the cache object
+                       for ( prop in data ) {
+                               cache[ jQuery.camelCase( prop ) ] = data[ prop ];
+                       }
+               }
+               return cache;
+       },
+       get: function( owner, key ) {
+               return key === undefined ?
+                       this.cache( owner ) :
+
+                       // Always use camelCase key (gh-2257)
+                       owner[ this.expando ] && owner[ this.expando ][ jQuery.camelCase( key ) ];
+       },
+       access: function( owner, key, value ) {
+
+               // In cases where either:
+               //
+               //   1. No key was specified
+               //   2. A string key was specified, but no value provided
+               //
+               // Take the "read" path and allow the get method to determine
+               // which value to return, respectively either:
+               //
+               //   1. The entire cache object
+               //   2. The data stored at the key
+               //
+               if ( key === undefined ||
+                               ( ( key && typeof key === "string" ) && value === undefined ) ) {
+
+                       return this.get( owner, key );
+               }
+
+               // When the key is not a string, or both a key and value
+               // are specified, set or extend (existing objects) with either:
+               //
+               //   1. An object of properties
+               //   2. A key and value
+               //
+               this.set( owner, key, value );
+
+               // Since the "set" path can have two possible entry points
+               // return the expected data based on which path was taken[*]
+               return value !== undefined ? value : key;
+       },
+       remove: function( owner, key ) {
+               var i,
+                       cache = owner[ this.expando ];
+
+               if ( cache === undefined ) {
+                       return;
+               }
+
+               if ( key !== undefined ) {
+
+                       // Support array or space separated string of keys
+                       if ( Array.isArray( key ) ) {
+
+                               // If key is an array of keys...
+                               // We always set camelCase keys, so remove that.
+                               key = key.map( jQuery.camelCase );
+                       } else {
+                               key = jQuery.camelCase( key );
+
+                               // If a key with the spaces exists, use it.
+                               // Otherwise, create an array by matching non-whitespace
+                               key = key in cache ?
+                                       [ key ] :
+                                       ( key.match( rnothtmlwhite ) || [] );
+                       }
+
+                       i = key.length;
+
+                       while ( i-- ) {
+                               delete cache[ key[ i ] ];
+                       }
+               }
+
+               // Remove the expando if there's no more data
+               if ( key === undefined || jQuery.isEmptyObject( cache ) ) {
+
+                       // Support: Chrome <=35 - 45
+                       // Webkit & Blink performance suffers when deleting properties
+                       // from DOM nodes, so set to undefined instead
+                       // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)
+                       if ( owner.nodeType ) {
+                               owner[ this.expando ] = undefined;
+                       } else {
+                               delete owner[ this.expando ];
+                       }
+               }
+       },
+       hasData: function( owner ) {
+               var cache = owner[ this.expando ];
+               return cache !== undefined && !jQuery.isEmptyObject( cache );
+       }
+};
+var dataPriv = new Data();
+
+var dataUser = new Data();
+
+
+
+//     Implementation Summary
+//
+//     1. Enforce API surface and semantic compatibility with 1.9.x branch
+//     2. Improve the module's maintainability by reducing the storage
+//             paths to a single mechanism.
+//     3. Use the same single mechanism to support "private" and "user" data.
+//     4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData)
+//     5. Avoid exposing implementation details on user objects (eg. expando properties)
+//     6. Provide a clear path for implementation upgrade to WeakMap in 2014
+
+var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,
+       rmultiDash = /[A-Z]/g;
+
+function getData( data ) {
+       if ( data === "true" ) {
+               return true;
+       }
+
+       if ( data === "false" ) {
+               return false;
+       }
+
+       if ( data === "null" ) {
+               return null;
+       }
+
+       // Only convert to a number if it doesn't change the string
+       if ( data === +data + "" ) {
+               return +data;
+       }
+
+       if ( rbrace.test( data ) ) {
+               return JSON.parse( data );
+       }
+
+       return data;
+}
+
+function dataAttr( elem, key, data ) {
+       var name;
+
+       // If nothing was found internally, try to fetch any
+       // data from the HTML5 data-* attribute
+       if ( data === undefined && elem.nodeType === 1 ) {
+               name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase();
+               data = elem.getAttribute( name );
+
+               if ( typeof data === "string" ) {
+                       try {
+                               data = getData( data );
+                       } catch ( e ) {}
+
+                       // Make sure we set the data so it isn't changed later
+                       dataUser.set( elem, key, data );
+               } else {
+                       data = undefined;
+               }
+       }
+       return data;
+}
+
+jQuery.extend( {
+       hasData: function( elem ) {
+               return dataUser.hasData( elem ) || dataPriv.hasData( elem );
+       },
+
+       data: function( elem, name, data ) {
+               return dataUser.access( elem, name, data );
+       },
+
+       removeData: function( elem, name ) {
+               dataUser.remove( elem, name );
+       },
+
+       // TODO: Now that all calls to _data and _removeData have been replaced
+       // with direct calls to dataPriv methods, these can be deprecated.
+       _data: function( elem, name, data ) {
+               return dataPriv.access( elem, name, data );
+       },
+
+       _removeData: function( elem, name ) {
+               dataPriv.remove( elem, name );
+       }
+} );
+
+jQuery.fn.extend( {
+       data: function( key, value ) {
+               var i, name, data,
+                       elem = this[ 0 ],
+                       attrs = elem && elem.attributes;
+
+               // Gets all values
+               if ( key === undefined ) {
+                       if ( this.length ) {
+                               data = dataUser.get( elem );
+
+                               if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) {
+                                       i = attrs.length;
+                                       while ( i-- ) {
+
+                                               // Support: IE 11 only
+                                               // The attrs elements can be null (#14894)
+                                               if ( attrs[ i ] ) {
+                                                       name = attrs[ i ].name;
+                                                       if ( name.indexOf( "data-" ) === 0 ) {
+                                                               name = jQuery.camelCase( name.slice( 5 ) );
+                                                               dataAttr( elem, name, data[ name ] );
+                                                       }
+                                               }
+                                       }
+                                       dataPriv.set( elem, "hasDataAttrs", true );
+                               }
+                       }
+
+                       return data;
+               }
+
+               // Sets multiple values
+               if ( typeof key === "object" ) {
+                       return this.each( function() {
+                               dataUser.set( this, key );
+                       } );
+               }
+
+               return access( this, function( value ) {
+                       var data;
+
+                       // The calling jQuery object (element matches) is not empty
+                       // (and therefore has an element appears at this[ 0 ]) and the
+                       // `value` parameter was not undefined. An empty jQuery object
+                       // will result in `undefined` for elem = this[ 0 ] which will
+                       // throw an exception if an attempt to read a data cache is made.
+                       if ( elem && value === undefined ) {
+
+                               // Attempt to get data from the cache
+                               // The key will always be camelCased in Data
+                               data = dataUser.get( elem, key );
+                               if ( data !== undefined ) {
+                                       return data;
+                               }
+
+                               // Attempt to "discover" the data in
+                               // HTML5 custom data-* attrs
+                               data = dataAttr( elem, key );
+                               if ( data !== undefined ) {
+                                       return data;
+                               }
+
+                               // We tried really hard, but the data doesn't exist.
+                               return;
+                       }
+
+                       // Set the data...
+                       this.each( function() {
+
+                               // We always store the camelCased key
+                               dataUser.set( this, key, value );
+                       } );
+               }, null, value, arguments.length > 1, null, true );
+       },
+
+       removeData: function( key ) {
+               return this.each( function() {
+                       dataUser.remove( this, key );
+               } );
+       }
+} );
+
+
+jQuery.extend( {
+       queue: function( elem, type, data ) {
+               var queue;
+
+               if ( elem ) {
+                       type = ( type || "fx" ) + "queue";
+                       queue = dataPriv.get( elem, type );
+
+                       // Speed up dequeue by getting out quickly if this is just a lookup
+                       if ( data ) {
+                               if ( !queue || Array.isArray( data ) ) {
+                                       queue = dataPriv.access( elem, type, jQuery.makeArray( data ) );
+                               } else {
+                                       queue.push( data );
+                               }
+                       }
+                       return queue || [];
+               }
+       },
+
+       dequeue: function( elem, type ) {
+               type = type || "fx";
+
+               var queue = jQuery.queue( elem, type ),
+                       startLength = queue.length,
+                       fn = queue.shift(),
+                       hooks = jQuery._queueHooks( elem, type ),
+                       next = function() {
+                               jQuery.dequeue( elem, type );
+                       };
+
+               // If the fx queue is dequeued, always remove the progress sentinel
+               if ( fn === "inprogress" ) {
+                       fn = queue.shift();
+                       startLength--;
+               }
+
+               if ( fn ) {
+
+                       // Add a progress sentinel to prevent the fx queue from being
+                       // automatically dequeued
+                       if ( type === "fx" ) {
+                               queue.unshift( "inprogress" );
+                       }
+
+                       // Clear up the last queue stop function
+                       delete hooks.stop;
+                       fn.call( elem, next, hooks );
+               }
+
+               if ( !startLength && hooks ) {
+                       hooks.empty.fire();
+               }
+       },
+
+       // Not public - generate a queueHooks object, or return the current one
+       _queueHooks: function( elem, type ) {
+               var key = type + "queueHooks";
+               return dataPriv.get( elem, key ) || dataPriv.access( elem, key, {
+                       empty: jQuery.Callbacks( "once memory" ).add( function() {
+                               dataPriv.remove( elem, [ type + "queue", key ] );
+                       } )
+               } );
+       }
+} );
+
+jQuery.fn.extend( {
+       queue: function( type, data ) {
+               var setter = 2;
+
+               if ( typeof type !== "string" ) {
+                       data = type;
+                       type = "fx";
+                       setter--;
+               }
+
+               if ( arguments.length < setter ) {
+                       return jQuery.queue( this[ 0 ], type );
+               }
+
+               return data === undefined ?
+                       this :
+                       this.each( function() {
+                               var queue = jQuery.queue( this, type, data );
+
+                               // Ensure a hooks for this queue
+                               jQuery._queueHooks( this, type );
+
+                               if ( type === "fx" && queue[ 0 ] !== "inprogress" ) {
+                                       jQuery.dequeue( this, type );
+                               }
+                       } );
+       },
+       dequeue: function( type ) {
+               return this.each( function() {
+                       jQuery.dequeue( this, type );
+               } );
+       },
+       clearQueue: function( type ) {
+               return this.queue( type || "fx", [] );
+       },
+
+       // Get a promise resolved when queues of a certain type
+       // are emptied (fx is the type by default)
+       promise: function( type, obj ) {
+               var tmp,
+                       count = 1,
+                       defer = jQuery.Deferred(),
+                       elements = this,
+                       i = this.length,
+                       resolve = function() {
+                               if ( !( --count ) ) {
+                                       defer.resolveWith( elements, [ elements ] );
+                               }
+                       };
+
+               if ( typeof type !== "string" ) {
+                       obj = type;
+                       type = undefined;
+               }
+               type = type || "fx";
+
+               while ( i-- ) {
+                       tmp = dataPriv.get( elements[ i ], type + "queueHooks" );
+                       if ( tmp && tmp.empty ) {
+                               count++;
+                               tmp.empty.add( resolve );
+                       }
+               }
+               resolve();
+               return defer.promise( obj );
+       }
+} );
+var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source;
+
+var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" );
+
+
+var cssExpand = [ "Top", "Right", "Bottom", "Left" ];
+
+var isHiddenWithinTree = function( elem, el ) {
+
+               // isHiddenWithinTree might be called from jQuery#filter function;
+               // in that case, element will be second argument
+               elem = el || elem;
+
+               // Inline style trumps all
+               return elem.style.display === "none" ||
+                       elem.style.display === "" &&
+
+                       // Otherwise, check computed style
+                       // Support: Firefox <=43 - 45
+                       // Disconnected elements can have computed display: none, so first confirm that elem is
+                       // in the document.
+                       jQuery.contains( elem.ownerDocument, elem ) &&
+
+                       jQuery.css( elem, "display" ) === "none";
+       };
+
+var swap = function( elem, options, callback, args ) {
+       var ret, name,
+               old = {};
+
+       // Remember the old values, and insert the new ones
+       for ( name in options ) {
+               old[ name ] = elem.style[ name ];
+               elem.style[ name ] = options[ name ];
+       }
+
+       ret = callback.apply( elem, args || [] );
+
+       // Revert the old values
+       for ( name in options ) {
+               elem.style[ name ] = old[ name ];
+       }
+
+       return ret;
+};
+
+
+
+
+function adjustCSS( elem, prop, valueParts, tween ) {
+       var adjusted,
+               scale = 1,
+               maxIterations = 20,
+               currentValue = tween ?
+                       function() {
+                               return tween.cur();
+                       } :
+                       function() {
+                               return jQuery.css( elem, prop, "" );
+                       },
+               initial = currentValue(),
+               unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ),
+
+               // Starting value computation is required for potential unit mismatches
+               initialInUnit = ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) &&
+                       rcssNum.exec( jQuery.css( elem, prop ) );
+
+       if ( initialInUnit && initialInUnit[ 3 ] !== unit ) {
+
+               // Trust units reported by jQuery.css
+               unit = unit || initialInUnit[ 3 ];
+
+               // Make sure we update the tween properties later on
+               valueParts = valueParts || [];
+
+               // Iteratively approximate from a nonzero starting point
+               initialInUnit = +initial || 1;
+
+               do {
+
+                       // If previous iteration zeroed out, double until we get *something*.
+                       // Use string for doubling so we don't accidentally see scale as unchanged below
+                       scale = scale || ".5";
+
+                       // Adjust and apply
+                       initialInUnit = initialInUnit / scale;
+                       jQuery.style( elem, prop, initialInUnit + unit );
+
+               // Update scale, tolerating zero or NaN from tween.cur()
+               // Break the loop if scale is unchanged or perfect, or if we've just had enough.
+               } while (
+                       scale !== ( scale = currentValue() / initial ) && scale !== 1 && --maxIterations
+               );
+       }
+
+       if ( valueParts ) {
+               initialInUnit = +initialInUnit || +initial || 0;
+
+               // Apply relative offset (+=/-=) if specified
+               adjusted = valueParts[ 1 ] ?
+                       initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :
+                       +valueParts[ 2 ];
+               if ( tween ) {
+                       tween.unit = unit;
+                       tween.start = initialInUnit;
+                       tween.end = adjusted;
+               }
+       }
+       return adjusted;
+}
+
+
+var defaultDisplayMap = {};
+
+function getDefaultDisplay( elem ) {
+       var temp,
+               doc = elem.ownerDocument,
+               nodeName = elem.nodeName,
+               display = defaultDisplayMap[ nodeName ];
+
+       if ( display ) {
+               return display;
+       }
+
+       temp = doc.body.appendChild( doc.createElement( nodeName ) );
+       display = jQuery.css( temp, "display" );
+
+       temp.parentNode.removeChild( temp );
+
+       if ( display === "none" ) {
+               display = "block";
+       }
+       defaultDisplayMap[ nodeName ] = display;
+
+       return display;
+}
+
+function showHide( elements, show ) {
+       var display, elem,
+               values = [],
+               index = 0,
+               length = elements.length;
+
+       // Determine new display value for elements that need to change
+       for ( ; index < length; index++ ) {
+               elem = elements[ index ];
+               if ( !elem.style ) {
+                       continue;
+               }
+
+               display = elem.style.display;
+               if ( show ) {
+
+                       // Since we force visibility upon cascade-hidden elements, an immediate (and slow)
+                       // check is required in this first loop unless we have a nonempty display value (either
+                       // inline or about-to-be-restored)
+                       if ( display === "none" ) {
+                               values[ index ] = dataPriv.get( elem, "display" ) || null;
+                               if ( !values[ index ] ) {
+                                       elem.style.display = "";
+                               }
+                       }
+                       if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) {
+                               values[ index ] = getDefaultDisplay( elem );
+                       }
+               } else {
+                       if ( display !== "none" ) {
+                               values[ index ] = "none";
+
+                               // Remember what we're overwriting
+                               dataPriv.set( elem, "display", display );
+                       }
+               }
+       }
+
+       // Set the display of the elements in a second loop to avoid constant reflow
+       for ( index = 0; index < length; index++ ) {
+               if ( values[ index ] != null ) {
+                       elements[ index ].style.display = values[ index ];
+               }
+       }
+
+       return elements;
+}
+
+jQuery.fn.extend( {
+       show: function() {
+               return showHide( this, true );
+       },
+       hide: function() {
+               return showHide( this );
+       },
+       toggle: function( state ) {
+               if ( typeof state === "boolean" ) {
+                       return state ? this.show() : this.hide();
+               }
+
+               return this.each( function() {
+                       if ( isHiddenWithinTree( this ) ) {
+                               jQuery( this ).show();
+                       } else {
+                               jQuery( this ).hide();
+                       }
+               } );
+       }
+} );
+var rcheckableType = ( /^(?:checkbox|radio)$/i );
+
+var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]+)/i );
+
+var rscriptType = ( /^$|\/(?:java|ecma)script/i );
+
+
+
+// We have to close these tags to support XHTML (#13200)
+var wrapMap = {
+
+       // Support: IE <=9 only
+       option: [ 1, "<select multiple='multiple'>", "</select>" ],
+
+       // XHTML parsers do not magically insert elements in the
+       // same way that tag soup parsers do. So we cannot shorten
+       // this by omitting <tbody> or other required elements.
+       thead: [ 1, "<table>", "</table>" ],
+       col: [ 2, "<table><colgroup>", "</colgroup></table>" ],
+       tr: [ 2, "<table><tbody>", "</tbody></table>" ],
+       td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
+
+       _default: [ 0, "", "" ]
+};
+
+// Support: IE <=9 only
+wrapMap.optgroup = wrapMap.option;
+
+wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
+wrapMap.th = wrapMap.td;
+
+
+function getAll( context, tag ) {
+
+       // Support: IE <=9 - 11 only
+       // Use typeof to avoid zero-argument method invocation on host objects (#15151)
+       var ret;
+
+       if ( typeof context.getElementsByTagName !== "undefined" ) {
+               ret = context.getElementsByTagName( tag || "*" );
+
+       } else if ( typeof context.querySelectorAll !== "undefined" ) {
+               ret = context.querySelectorAll( tag || "*" );
+
+       } else {
+               ret = [];
+       }
+
+       if ( tag === undefined || tag && nodeName( context, tag ) ) {
+               return jQuery.merge( [ context ], ret );
+       }
+
+       return ret;
+}
+
+
+// Mark scripts as having already been evaluated
+function setGlobalEval( elems, refElements ) {
+       var i = 0,
+               l = elems.length;
+
+       for ( ; i < l; i++ ) {
+               dataPriv.set(
+                       elems[ i ],
+                       "globalEval",
+                       !refElements || dataPriv.get( refElements[ i ], "globalEval" )
+               );
+       }
+}
+
+
+var rhtml = /<|&#?\w+;/;
+
+function buildFragment( elems, context, scripts, selection, ignored ) {
+       var elem, tmp, tag, wrap, contains, j,
+               fragment = context.createDocumentFragment(),
+               nodes = [],
+               i = 0,
+               l = elems.length;
+
+       for ( ; i < l; i++ ) {
+               elem = elems[ i ];
+
+               if ( elem || elem === 0 ) {
+
+                       // Add nodes directly
+                       if ( jQuery.type( elem ) === "object" ) {
+
+                               // Support: Android <=4.0 only, PhantomJS 1 only
+                               // push.apply(_, arraylike) throws on ancient WebKit
+                               jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );
+
+                       // Convert non-html into a text node
+                       } else if ( !rhtml.test( elem ) ) {
+                               nodes.push( context.createTextNode( elem ) );
+
+                       // Convert html into DOM nodes
+                       } else {
+                               tmp = tmp || fragment.appendChild( context.createElement( "div" ) );
+
+                               // Deserialize a standard representation
+                               tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase();
+                               wrap = wrapMap[ tag ] || wrapMap._default;
+                               tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];
+
+                               // Descend through wrappers to the right content
+                               j = wrap[ 0 ];
+                               while ( j-- ) {
+                                       tmp = tmp.lastChild;
+                               }
+
+                               // Support: Android <=4.0 only, PhantomJS 1 only
+                               // push.apply(_, arraylike) throws on ancient WebKit
+                               jQuery.merge( nodes, tmp.childNodes );
+
+                               // Remember the top-level container
+                               tmp = fragment.firstChild;
+
+                               // Ensure the created nodes are orphaned (#12392)
+                               tmp.textContent = "";
+                       }
+               }
+       }
+
+       // Remove wrapper from fragment
+       fragment.textContent = "";
+
+       i = 0;
+       while ( ( elem = nodes[ i++ ] ) ) {
+
+               // Skip elements already in the context collection (trac-4087)
+               if ( selection && jQuery.inArray( elem, selection ) > -1 ) {
+                       if ( ignored ) {
+                               ignored.push( elem );
+                       }
+                       continue;
+               }
+
+               contains = jQuery.contains( elem.ownerDocument, elem );
+
+               // Append to fragment
+               tmp = getAll( fragment.appendChild( elem ), "script" );
+
+               // Preserve script evaluation history
+               if ( contains ) {
+                       setGlobalEval( tmp );
+               }
+
+               // Capture executables
+               if ( scripts ) {
+                       j = 0;
+                       while ( ( elem = tmp[ j++ ] ) ) {
+                               if ( rscriptType.test( elem.type || "" ) ) {
+                                       scripts.push( elem );
+                               }
+                       }
+               }
+       }
+
+       return fragment;
+}
+
+
+( function() {
+       var fragment = document.createDocumentFragment(),
+               div = fragment.appendChild( document.createElement( "div" ) ),
+               input = document.createElement( "input" );
+
+       // Support: Android 4.0 - 4.3 only
+       // Check state lost if the name is set (#11217)
+       // Support: Windows Web Apps (WWA)
+       // `name` and `type` must use .setAttribute for WWA (#14901)
+       input.setAttribute( "type", "radio" );
+       input.setAttribute( "checked", "checked" );
+       input.setAttribute( "name", "t" );
+
+       div.appendChild( input );
+
+       // Support: Android <=4.1 only
+       // Older WebKit doesn't clone checked state correctly in fragments
+       support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;
+
+       // Support: IE <=11 only
+       // Make sure textarea (and checkbox) defaultValue is properly cloned
+       div.innerHTML = "<textarea>x</textarea>";
+       support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;
+} )();
+var documentElement = document.documentElement;
+
+
+
+var
+       rkeyEvent = /^key/,
+       rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,
+       rtypenamespace = /^([^.]*)(?:\.(.+)|)/;
+
+function returnTrue() {
+       return true;
+}
+
+function returnFalse() {
+       return false;
+}
+
+// Support: IE <=9 only
+// See #13393 for more info
+function safeActiveElement() {
+       try {
+               return document.activeElement;
+       } catch ( err ) { }
+}
+
+function on( elem, types, selector, data, fn, one ) {
+       var origFn, type;
+
+       // Types can be a map of types/handlers
+       if ( typeof types === "object" ) {
+
+               // ( types-Object, selector, data )
+               if ( typeof selector !== "string" ) {
+
+                       // ( types-Object, data )
+                       data = data || selector;
+                       selector = undefined;
+               }
+               for ( type in types ) {
+                       on( elem, type, selector, data, types[ type ], one );
+               }
+               return elem;
+       }
+
+       if ( data == null && fn == null ) {
+
+               // ( types, fn )
+               fn = selector;
+               data = selector = undefined;
+       } else if ( fn == null ) {
+               if ( typeof selector === "string" ) {
+
+                       // ( types, selector, fn )
+                       fn = data;
+                       data = undefined;
+               } else {
+
+                       // ( types, data, fn )
+                       fn = data;
+                       data = selector;
+                       selector = undefined;
+               }
+       }
+       if ( fn === false ) {
+               fn = returnFalse;
+       } else if ( !fn ) {
+               return elem;
+       }
+
+       if ( one === 1 ) {
+               origFn = fn;
+               fn = function( event ) {
+
+                       // Can use an empty set, since event contains the info
+                       jQuery().off( event );
+                       return origFn.apply( this, arguments );
+               };
+
+               // Use same guid so caller can remove using origFn
+               fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );
+       }
+       return elem.each( function() {
+               jQuery.event.add( this, types, fn, data, selector );
+       } );
+}
+
+/*
+ * Helper functions for managing events -- not part of the public interface.
+ * Props to Dean Edwards' addEvent library for many of the ideas.
+ */
+jQuery.event = {
+
+       global: {},
+
+       add: function( elem, types, handler, data, selector ) {
+
+               var handleObjIn, eventHandle, tmp,
+                       events, t, handleObj,
+                       special, handlers, type, namespaces, origType,
+                       elemData = dataPriv.get( elem );
+
+               // Don't attach events to noData or text/comment nodes (but allow plain objects)
+               if ( !elemData ) {
+                       return;
+               }
+
+               // Caller can pass in an object of custom data in lieu of the handler
+               if ( handler.handler ) {
+                       handleObjIn = handler;
+                       handler = handleObjIn.handler;
+                       selector = handleObjIn.selector;
+               }
+
+               // Ensure that invalid selectors throw exceptions at attach time
+               // Evaluate against documentElement in case elem is a non-element node (e.g., document)
+               if ( selector ) {
+                       jQuery.find.matchesSelector( documentElement, selector );
+               }
+
+               // Make sure that the handler has a unique ID, used to find/remove it later
+               if ( !handler.guid ) {
+                       handler.guid = jQuery.guid++;
+               }
+
+               // Init the element's event structure and main handler, if this is the first
+               if ( !( events = elemData.events ) ) {
+                       events = elemData.events = {};
+               }
+               if ( !( eventHandle = elemData.handle ) ) {
+                       eventHandle = elemData.handle = function( e ) {
+
+                               // Discard the second event of a jQuery.event.trigger() and
+                               // when an event is called after a page has unloaded
+                               return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ?
+                                       jQuery.event.dispatch.apply( elem, arguments ) : undefined;
+                       };
+               }
+
+               // Handle multiple events separated by a space
+               types = ( types || "" ).match( rnothtmlwhite ) || [ "" ];
+               t = types.length;
+               while ( t-- ) {
+                       tmp = rtypenamespace.exec( types[ t ] ) || [];
+                       type = origType = tmp[ 1 ];
+                       namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort();
+
+                       // There *must* be a type, no attaching namespace-only handlers
+                       if ( !type ) {
+                               continue;
+                       }
+
+                       // If event changes its type, use the special event handlers for the changed type
+                       special = jQuery.event.special[ type ] || {};
+
+                       // If selector defined, determine special event api type, otherwise given type
+                       type = ( selector ? special.delegateType : special.bindType ) || type;
+
+                       // Update special based on newly reset type
+                       special = jQuery.event.special[ type ] || {};
+
+                       // handleObj is passed to all event handlers
+                       handleObj = jQuery.extend( {
+                               type: type,
+                               origType: origType,
+                               data: data,
+                               handler: handler,
+                               guid: handler.guid,
+                               selector: selector,
+                               needsContext: selector && jQuery.expr.match.needsContext.test( selector ),
+                               namespace: namespaces.join( "." )
+                       }, handleObjIn );
+
+                       // Init the event handler queue if we're the first
+                       if ( !( handlers = events[ type ] ) ) {
+                               handlers = events[ type ] = [];
+                               handlers.delegateCount = 0;
+
+                               // Only use addEventListener if the special events handler returns false
+                               if ( !special.setup ||
+                                       special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
+
+                                       if ( elem.addEventListener ) {
+                                               elem.addEventListener( type, eventHandle );
+                                       }
+                               }
+                       }
+
+                       if ( special.add ) {
+                               special.add.call( elem, handleObj );
+
+                               if ( !handleObj.handler.guid ) {
+                                       handleObj.handler.guid = handler.guid;
+                               }
+                       }
+
+                       // Add to the element's handler list, delegates in front
+                       if ( selector ) {
+                               handlers.splice( handlers.delegateCount++, 0, handleObj );
+                       } else {
+                               handlers.push( handleObj );
+                       }
+
+                       // Keep track of which events have ever been used, for event optimization
+                       jQuery.event.global[ type ] = true;
+               }
+
+       },
+
+       // Detach an event or set of events from an element
+       remove: function( elem, types, handler, selector, mappedTypes ) {
+
+               var j, origCount, tmp,
+                       events, t, handleObj,
+                       special, handlers, type, namespaces, origType,
+                       elemData = dataPriv.hasData( elem ) && dataPriv.get( elem );
+
+               if ( !elemData || !( events = elemData.events ) ) {
+                       return;
+               }
+
+               // Once for each type.namespace in types; type may be omitted
+               types = ( types || "" ).match( rnothtmlwhite ) || [ "" ];
+               t = types.length;
+               while ( t-- ) {
+                       tmp = rtypenamespace.exec( types[ t ] ) || [];
+                       type = origType = tmp[ 1 ];
+                       namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort();
+
+                       // Unbind all events (on this namespace, if provided) for the element
+                       if ( !type ) {
+                               for ( type in events ) {
+                                       jQuery.event.remove( elem, type + types[ t ], handler, selector, true );
+                               }
+                               continue;
+                       }
+
+                       special = jQuery.event.special[ type ] || {};
+                       type = ( selector ? special.delegateType : special.bindType ) || type;
+                       handlers = events[ type ] || [];
+                       tmp = tmp[ 2 ] &&
+                               new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" );
+
+                       // Remove matching events
+                       origCount = j = handlers.length;
+                       while ( j-- ) {
+                               handleObj = handlers[ j ];
+
+                               if ( ( mappedTypes || origType === handleObj.origType ) &&
+                                       ( !handler || handler.guid === handleObj.guid ) &&
+                                       ( !tmp || tmp.test( handleObj.namespace ) ) &&
+                                       ( !selector || selector === handleObj.selector ||
+                                               selector === "**" && handleObj.selector ) ) {
+                                       handlers.splice( j, 1 );
+
+                                       if ( handleObj.selector ) {
+                                               handlers.delegateCount--;
+                                       }
+                                       if ( special.remove ) {
+                                               special.remove.call( elem, handleObj );
+                                       }
+                               }
+                       }
+
+                       // Remove generic event handler if we removed something and no more handlers exist
+                       // (avoids potential for endless recursion during removal of special event handlers)
+                       if ( origCount && !handlers.length ) {
+                               if ( !special.teardown ||
+                                       special.teardown.call( elem, namespaces, elemData.handle ) === false ) {
+
+                                       jQuery.removeEvent( elem, type, elemData.handle );
+                               }
+
+                               delete events[ type ];
+                       }
+               }
+
+               // Remove data and the expando if it's no longer used
+               if ( jQuery.isEmptyObject( events ) ) {
+                       dataPriv.remove( elem, "handle events" );
+               }
+       },
+
+       dispatch: function( nativeEvent ) {
+
+               // Make a writable jQuery.Event from the native event object
+               var event = jQuery.event.fix( nativeEvent );
+
+               var i, j, ret, matched, handleObj, handlerQueue,
+                       args = new Array( arguments.length ),
+                       handlers = ( dataPriv.get( this, "events" ) || {} )[ event.type ] || [],
+                       special = jQuery.event.special[ event.type ] || {};
+
+               // Use the fix-ed jQuery.Event rather than the (read-only) native event
+               args[ 0 ] = event;
+
+               for ( i = 1; i < arguments.length; i++ ) {
+                       args[ i ] = arguments[ i ];
+               }
+
+               event.delegateTarget = this;
+
+               // Call the preDispatch hook for the mapped type, and let it bail if desired
+               if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {
+                       return;
+               }
+
+               // Determine handlers
+               handlerQueue = jQuery.event.handlers.call( this, event, handlers );
+
+               // Run delegates first; they may want to stop propagation beneath us
+               i = 0;
+               while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {
+                       event.currentTarget = matched.elem;
+
+                       j = 0;
+                       while ( ( handleObj = matched.handlers[ j++ ] ) &&
+                               !event.isImmediatePropagationStopped() ) {
+
+                               // Triggered event must either 1) have no namespace, or 2) have namespace(s)
+                               // a subset or equal to those in the bound event (both can have no namespace).
+                               if ( !event.rnamespace || event.rnamespace.test( handleObj.namespace ) ) {
+
+                                       event.handleObj = handleObj;
+                                       event.data = handleObj.data;
+
+                                       ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||
+                                               handleObj.handler ).apply( matched.elem, args );
+
+                                       if ( ret !== undefined ) {
+                                               if ( ( event.result = ret ) === false ) {
+                                                       event.preventDefault();
+                                                       event.stopPropagation();
+                                               }
+                                       }
+                               }
+                       }
+               }
+
+               // Call the postDispatch hook for the mapped type
+               if ( special.postDispatch ) {
+                       special.postDispatch.call( this, event );
+               }
+
+               return event.result;
+       },
+
+       handlers: function( event, handlers ) {
+               var i, handleObj, sel, matchedHandlers, matchedSelectors,
+                       handlerQueue = [],
+                       delegateCount = handlers.delegateCount,
+                       cur = event.target;
+
+               // Find delegate handlers
+               if ( delegateCount &&
+
+                       // Support: IE <=9
+                       // Black-hole SVG <use> instance trees (trac-13180)
+                       cur.nodeType &&
+
+                       // Support: Firefox <=42
+                       // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)
+                       // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click
+                       // Support: IE 11 only
+                       // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343)
+                       !( event.type === "click" && event.button >= 1 ) ) {
+
+                       for ( ; cur !== this; cur = cur.parentNode || this ) {
+
+                               // Don't check non-elements (#13208)
+                               // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)
+                               if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) {
+                                       matchedHandlers = [];
+                                       matchedSelectors = {};
+                                       for ( i = 0; i < delegateCount; i++ ) {
+                                               handleObj = handlers[ i ];
+
+                                               // Don't conflict with Object.prototype properties (#13203)
+                                               sel = handleObj.selector + " ";
+
+                                               if ( matchedSelectors[ sel ] === undefined ) {
+                                                       matchedSelectors[ sel ] = handleObj.needsContext ?
+                                                               jQuery( sel, this ).index( cur ) > -1 :
+                                                               jQuery.find( sel, this, null, [ cur ] ).length;
+                                               }
+                                               if ( matchedSelectors[ sel ] ) {
+                                                       matchedHandlers.push( handleObj );
+                                               }
+                                       }
+                                       if ( matchedHandlers.length ) {
+                                               handlerQueue.push( { elem: cur, handlers: matchedHandlers } );
+                                       }
+                               }
+                       }
+               }
+
+               // Add the remaining (directly-bound) handlers
+               cur = this;
+               if ( delegateCount < handlers.length ) {
+                       handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );
+               }
+
+               return handlerQueue;
+       },
+
+       addProp: function( name, hook ) {
+               Object.defineProperty( jQuery.Event.prototype, name, {
+                       enumerable: true,
+                       configurable: true,
+
+                       get: jQuery.isFunction( hook ) ?
+                               function() {
+                                       if ( this.originalEvent ) {
+                                                       return hook( this.originalEvent );
+                                       }
+                               } :
+                               function() {
+                                       if ( this.originalEvent ) {
+                                                       return this.originalEvent[ name ];
+                                       }
+                               },
+
+                       set: function( value ) {
+                               Object.defineProperty( this, name, {
+                                       enumerable: true,
+                                       configurable: true,
+                                       writable: true,
+                                       value: value
+                               } );
+                       }
+               } );
+       },
+
+       fix: function( originalEvent ) {
+               return originalEvent[ jQuery.expando ] ?
+                       originalEvent :
+                       new jQuery.Event( originalEvent );
+       },
+
+       special: {
+               load: {
+
+                       // Prevent triggered image.load events from bubbling to window.load
+                       noBubble: true
+               },
+               focus: {
+
+                       // Fire native event if possible so blur/focus sequence is correct
+                       trigger: function() {
+                               if ( this !== safeActiveElement() && this.focus ) {
+                                       this.focus();
+                                       return false;
+                               }
+                       },
+                       delegateType: "focusin"
+               },
+               blur: {
+                       trigger: function() {
+                               if ( this === safeActiveElement() && this.blur ) {
+                                       this.blur();
+                                       return false;
+                               }
+                       },
+                       delegateType: "focusout"
+               },
+               click: {
+
+                       // For checkbox, fire native event so checked state will be right
+                       trigger: function() {
+                               if ( this.type === "checkbox" && this.click && nodeName( this, "input" ) ) {
+                                       this.click();
+                                       return false;
+                               }
+                       },
+
+                       // For cross-browser consistency, don't fire native .click() on links
+                       _default: function( event ) {
+                               return nodeName( event.target, "a" );
+                       }
+               },
+
+               beforeunload: {
+                       postDispatch: function( event ) {
+
+                               // Support: Firefox 20+
+                               // Firefox doesn't alert if the returnValue field is not set.
+                               if ( event.result !== undefined && event.originalEvent ) {
+                                       event.originalEvent.returnValue = event.result;
+                               }
+                       }
+               }
+       }
+};
+
+jQuery.removeEvent = function( elem, type, handle ) {
+
+       // This "if" is needed for plain objects
+       if ( elem.removeEventListener ) {
+               elem.removeEventListener( type, handle );
+       }
+};
+
+jQuery.Event = function( src, props ) {
+
+       // Allow instantiation without the 'new' keyword
+       if ( !( this instanceof jQuery.Event ) ) {
+               return new jQuery.Event( src, props );
+       }
+
+       // Event object
+       if ( src && src.type ) {
+               this.originalEvent = src;
+               this.type = src.type;
+
+               // Events bubbling up the document may have been marked as prevented
+               // by a handler lower down the tree; reflect the correct value.
+               this.isDefaultPrevented = src.defaultPrevented ||
+                               src.defaultPrevented === undefined &&
+
+                               // Support: Android <=2.3 only
+                               src.returnValue === false ?
+                       returnTrue :
+                       returnFalse;
+
+               // Create target properties
+               // Support: Safari <=6 - 7 only
+               // Target should not be a text node (#504, #13143)
+               this.target = ( src.target && src.target.nodeType === 3 ) ?
+                       src.target.parentNode :
+                       src.target;
+
+               this.currentTarget = src.currentTarget;
+               this.relatedTarget = src.relatedTarget;
+
+       // Event type
+       } else {
+               this.type = src;
+       }
+
+       // Put explicitly provided properties onto the event object
+       if ( props ) {
+               jQuery.extend( this, props );
+       }
+
+       // Create a timestamp if incoming event doesn't have one
+       this.timeStamp = src && src.timeStamp || jQuery.now();
+
+       // Mark it as fixed
+       this[ jQuery.expando ] = true;
+};
+
+// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
+// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
+jQuery.Event.prototype = {
+       constructor: jQuery.Event,
+       isDefaultPrevented: returnFalse,
+       isPropagationStopped: returnFalse,
+       isImmediatePropagationStopped: returnFalse,
+       isSimulated: false,
+
+       preventDefault: function() {
+               var e = this.originalEvent;
+
+               this.isDefaultPrevented = returnTrue;
+
+               if ( e && !this.isSimulated ) {
+                       e.preventDefault();
+               }
+       },
+       stopPropagation: function() {
+               var e = this.originalEvent;
+
+               this.isPropagationStopped = returnTrue;
+
+               if ( e && !this.isSimulated ) {
+                       e.stopPropagation();
+               }
+       },
+       stopImmediatePropagation: function() {
+               var e = this.originalEvent;
+
+               this.isImmediatePropagationStopped = returnTrue;
+
+               if ( e && !this.isSimulated ) {
+                       e.stopImmediatePropagation();
+               }
+
+               this.stopPropagation();
+       }
+};
+
+// Includes all common event props including KeyEvent and MouseEvent specific props
+jQuery.each( {
+       altKey: true,
+       bubbles: true,
+       cancelable: true,
+       changedTouches: true,
+       ctrlKey: true,
+       detail: true,
+       eventPhase: true,
+       metaKey: true,
+       pageX: true,
+       pageY: true,
+       shiftKey: true,
+       view: true,
+       "char": true,
+       charCode: true,
+       key: true,
+       keyCode: true,
+       button: true,
+       buttons: true,
+       clientX: true,
+       clientY: true,
+       offsetX: true,
+       offsetY: true,
+       pointerId: true,
+       pointerType: true,
+       screenX: true,
+       screenY: true,
+       targetTouches: true,
+       toElement: true,
+       touches: true,
+
+       which: function( event ) {
+               var button = event.button;
+
+               // Add which for key events
+               if ( event.which == null && rkeyEvent.test( event.type ) ) {
+                       return event.charCode != null ? event.charCode : event.keyCode;
+               }
+
+               // Add which for click: 1 === left; 2 === middle; 3 === right
+               if ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) {
+                       if ( button & 1 ) {
+                               return 1;
+                       }
+
+                       if ( button & 2 ) {
+                               return 3;
+                       }
+
+                       if ( button & 4 ) {
+                               return 2;
+                       }
+
+                       return 0;
+               }
+
+               return event.which;
+       }
+}, jQuery.event.addProp );
+
+// Create mouseenter/leave events using mouseover/out and event-time checks
+// so that event delegation works in jQuery.
+// Do the same for pointerenter/pointerleave and pointerover/pointerout
+//
+// Support: Safari 7 only
+// Safari sends mouseenter too often; see:
+// https://bugs.chromium.org/p/chromium/issues/detail?id=470258
+// for the description of the bug (it existed in older Chrome versions as well).
+jQuery.each( {
+       mouseenter: "mouseover",
+       mouseleave: "mouseout",
+       pointerenter: "pointerover",
+       pointerleave: "pointerout"
+}, function( orig, fix ) {
+       jQuery.event.special[ orig ] = {
+               delegateType: fix,
+               bindType: fix,
+
+               handle: function( event ) {
+                       var ret,
+                               target = this,
+                               related = event.relatedTarget,
+                               handleObj = event.handleObj;
+
+                       // For mouseenter/leave call the handler if related is outside the target.
+                       // NB: No relatedTarget if the mouse left/entered the browser window
+                       if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {
+                               event.type = handleObj.origType;
+                               ret = handleObj.handler.apply( this, arguments );
+                               event.type = fix;
+                       }
+                       return ret;
+               }
+       };
+} );
+
+jQuery.fn.extend( {
+
+       on: function( types, selector, data, fn ) {
+               return on( this, types, selector, data, fn );
+       },
+       one: function( types, selector, data, fn ) {
+               return on( this, types, selector, data, fn, 1 );
+       },
+       off: function( types, selector, fn ) {
+               var handleObj, type;
+               if ( types && types.preventDefault && types.handleObj ) {
+
+                       // ( event )  dispatched jQuery.Event
+                       handleObj = types.handleObj;
+                       jQuery( types.delegateTarget ).off(
+                               handleObj.namespace ?
+                                       handleObj.origType + "." + handleObj.namespace :
+                                       handleObj.origType,
+                               handleObj.selector,
+                               handleObj.handler
+                       );
+                       return this;
+               }
+               if ( typeof types === "object" ) {
+
+                       // ( types-object [, selector] )
+                       for ( type in types ) {
+                               this.off( type, selector, types[ type ] );
+                       }
+                       return this;
+               }
+               if ( selector === false || typeof selector === "function" ) {
+
+                       // ( types [, fn] )
+                       fn = selector;
+                       selector = undefined;
+               }
+               if ( fn === false ) {
+                       fn = returnFalse;
+               }
+               return this.each( function() {
+                       jQuery.event.remove( this, types, fn, selector );
+               } );
+       }
+} );
+
+
+var
+
+       /* eslint-disable max-len */
+
+       // See https://github.com/eslint/eslint/issues/3229
+       rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi,
+
+       /* eslint-enable */
+
+       // Support: IE <=10 - 11, Edge 12 - 13
+       // In IE/Edge using regex groups here causes severe slowdowns.
+       // See https://connect.microsoft.com/IE/feedback/details/1736512/
+       rnoInnerhtml = /<script|<style|<link/i,
+
+       // checked="checked" or checked
+       rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
+       rscriptTypeMasked = /^true\/(.*)/,
+       rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;
+
+// Prefer a tbody over its parent table for containing new rows
+function manipulationTarget( elem, content ) {
+       if ( nodeName( elem, "table" ) &&
+               nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) {
+
+               return jQuery( ">tbody", elem )[ 0 ] || elem;
+       }
+
+       return elem;
+}
+
+// Replace/restore the type attribute of script elements for safe DOM manipulation
+function disableScript( elem ) {
+       elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type;
+       return elem;
+}
+function restoreScript( elem ) {
+       var match = rscriptTypeMasked.exec( elem.type );
+
+       if ( match ) {
+               elem.type = match[ 1 ];
+       } else {
+               elem.removeAttribute( "type" );
+       }
+
+       return elem;
+}
+
+function cloneCopyEvent( src, dest ) {
+       var i, l, type, pdataOld, pdataCur, udataOld, udataCur, events;
+
+       if ( dest.nodeType !== 1 ) {
+               return;
+       }
+
+       // 1. Copy private data: events, handlers, etc.
+       if ( dataPriv.hasData( src ) ) {
+               pdataOld = dataPriv.access( src );
+               pdataCur = dataPriv.set( dest, pdataOld );
+               events = pdataOld.events;
+
+               if ( events ) {
+                       delete pdataCur.handle;
+                       pdataCur.events = {};
+
+                       for ( type in events ) {
+                               for ( i = 0, l = events[ type ].length; i < l; i++ ) {
+                                       jQuery.event.add( dest, type, events[ type ][ i ] );
+                               }
+                       }
+               }
+       }
+
+       // 2. Copy user data
+       if ( dataUser.hasData( src ) ) {
+               udataOld = dataUser.access( src );
+               udataCur = jQuery.extend( {}, udataOld );
+
+               dataUser.set( dest, udataCur );
+       }
+}
+
+// Fix IE bugs, see support tests
+function fixInput( src, dest ) {
+       var nodeName = dest.nodeName.toLowerCase();
+
+       // Fails to persist the checked state of a cloned checkbox or radio button.
+       if ( nodeName === "input" && rcheckableType.test( src.type ) ) {
+               dest.checked = src.checked;
+
+       // Fails to return the selected option to the default selected state when cloning options
+       } else if ( nodeName === "input" || nodeName === "textarea" ) {
+               dest.defaultValue = src.defaultValue;
+       }
+}
+
+function domManip( collection, args, callback, ignored ) {
+
+       // Flatten any nested arrays
+       args = concat.apply( [], args );
+
+       var fragment, first, scripts, hasScripts, node, doc,
+               i = 0,
+               l = collection.length,
+               iNoClone = l - 1,
+               value = args[ 0 ],
+               isFunction = jQuery.isFunction( value );
+
+       // We can't cloneNode fragments that contain checked, in WebKit
+       if ( isFunction ||
+                       ( l > 1 && typeof value === "string" &&
+                               !support.checkClone && rchecked.test( value ) ) ) {
+               return collection.each( function( index ) {
+                       var self = collection.eq( index );
+                       if ( isFunction ) {
+                               args[ 0 ] = value.call( this, index, self.html() );
+                       }
+                       domManip( self, args, callback, ignored );
+               } );
+       }
+
+       if ( l ) {
+               fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );
+               first = fragment.firstChild;
+
+               if ( fragment.childNodes.length === 1 ) {
+                       fragment = first;
+               }
+
+               // Require either new content or an interest in ignored elements to invoke the callback
+               if ( first || ignored ) {
+                       scripts = jQuery.map( getAll( fragment, "script" ), disableScript );
+                       hasScripts = scripts.length;
+
+                       // Use the original fragment for the last item
+                       // instead of the first because it can end up
+                       // being emptied incorrectly in certain situations (#8070).
+                       for ( ; i < l; i++ ) {
+                               node = fragment;
+
+                               if ( i !== iNoClone ) {
+                                       node = jQuery.clone( node, true, true );
+
+                                       // Keep references to cloned scripts for later restoration
+                                       if ( hasScripts ) {
+
+                                               // Support: Android <=4.0 only, PhantomJS 1 only
+                                               // push.apply(_, arraylike) throws on ancient WebKit
+                                               jQuery.merge( scripts, getAll( node, "script" ) );
+                                       }
+                               }
+
+                               callback.call( collection[ i ], node, i );
+                       }
+
+                       if ( hasScripts ) {
+                               doc = scripts[ scripts.length - 1 ].ownerDocument;
+
+                               // Reenable scripts
+                               jQuery.map( scripts, restoreScript );
+
+                               // Evaluate executable scripts on first document insertion
+                               for ( i = 0; i < hasScripts; i++ ) {
+                                       node = scripts[ i ];
+                                       if ( rscriptType.test( node.type || "" ) &&
+                                               !dataPriv.access( node, "globalEval" ) &&
+                                               jQuery.contains( doc, node ) ) {
+
+                                               if ( node.src ) {
+
+                                                       // Optional AJAX dependency, but won't run scripts if not present
+                                                       if ( jQuery._evalUrl ) {
+                                                               jQuery._evalUrl( node.src );
+                                                       }
+                                               } else {
+                                                       DOMEval( node.textContent.replace( rcleanScript, "" ), doc );
+                                               }
+                                       }
+                               }
+                       }
+               }
+       }
+
+       return collection;
+}
+
+function remove( elem, selector, keepData ) {
+       var node,
+               nodes = selector ? jQuery.filter( selector, elem ) : elem,
+               i = 0;
+
+       for ( ; ( node = nodes[ i ] ) != null; i++ ) {
+               if ( !keepData && node.nodeType === 1 ) {
+                       jQuery.cleanData( getAll( node ) );
+               }
+
+               if ( node.parentNode ) {
+                       if ( keepData && jQuery.contains( node.ownerDocument, node ) ) {
+                               setGlobalEval( getAll( node, "script" ) );
+                       }
+                       node.parentNode.removeChild( node );
+               }
+       }
+
+       return elem;
+}
+
+jQuery.extend( {
+       htmlPrefilter: function( html ) {
+               return html.replace( rxhtmlTag, "<$1></$2>" );
+       },
+
+       clone: function( elem, dataAndEvents, deepDataAndEvents ) {
+               var i, l, srcElements, destElements,
+                       clone = elem.cloneNode( true ),
+                       inPage = jQuery.contains( elem.ownerDocument, elem );
+
+               // Fix IE cloning issues
+               if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&
+                               !jQuery.isXMLDoc( elem ) ) {
+
+                       // We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2
+                       destElements = getAll( clone );
+                       srcElements = getAll( elem );
+
+                       for ( i = 0, l = srcElements.length; i < l; i++ ) {
+                               fixInput( srcElements[ i ], destElements[ i ] );
+                       }
+               }
+
+               // Copy the events from the original to the clone
+               if ( dataAndEvents ) {
+                       if ( deepDataAndEvents ) {
+                               srcElements = srcElements || getAll( elem );
+                               destElements = destElements || getAll( clone );
+
+                               for ( i = 0, l = srcElements.length; i < l; i++ ) {
+                                       cloneCopyEvent( srcElements[ i ], destElements[ i ] );
+                               }
+                       } else {
+                               cloneCopyEvent( elem, clone );
+                       }
+               }
+
+               // Preserve script evaluation history
+               destElements = getAll( clone, "script" );
+               if ( destElements.length > 0 ) {
+                       setGlobalEval( destElements, !inPage && getAll( elem, "script" ) );
+               }
+
+               // Return the cloned set
+               return clone;
+       },
+
+       cleanData: function( elems ) {
+               var data, elem, type,
+                       special = jQuery.event.special,
+                       i = 0;
+
+               for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {
+                       if ( acceptData( elem ) ) {
+                               if ( ( data = elem[ dataPriv.expando ] ) ) {
+                                       if ( data.events ) {
+                                               for ( type in data.events ) {
+                                                       if ( special[ type ] ) {
+                                                               jQuery.event.remove( elem, type );
+
+                                                       // This is a shortcut to avoid jQuery.event.remove's overhead
+                                                       } else {
+                                                               jQuery.removeEvent( elem, type, data.handle );
+                                                       }
+                                               }
+                                       }
+
+                                       // Support: Chrome <=35 - 45+
+                                       // Assign undefined instead of using delete, see Data#remove
+                                       elem[ dataPriv.expando ] = undefined;
+                               }
+                               if ( elem[ dataUser.expando ] ) {
+
+                                       // Support: Chrome <=35 - 45+
+                                       // Assign undefined instead of using delete, see Data#remove
+                                       elem[ dataUser.expando ] = undefined;
+                               }
+                       }
+               }
+       }
+} );
+
+jQuery.fn.extend( {
+       detach: function( selector ) {
+               return remove( this, selector, true );
+       },
+
+       remove: function( selector ) {
+               return remove( this, selector );
+       },
+
+       text: function( value ) {
+               return access( this, function( value ) {
+                       return value === undefined ?
+                               jQuery.text( this ) :
+                               this.empty().each( function() {
+                                       if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
+                                               this.textContent = value;
+                                       }
+                               } );
+               }, null, value, arguments.length );
+       },
+
+       append: function() {
+               return domManip( this, arguments, function( elem ) {
+                       if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
+                               var target = manipulationTarget( this, elem );
+                               target.appendChild( elem );
+                       }
+               } );
+       },
+
+       prepend: function() {
+               return domManip( this, arguments, function( elem ) {
+                       if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
+                               var target = manipulationTarget( this, elem );
+                               target.insertBefore( elem, target.firstChild );
+                       }
+               } );
+       },
+
+       before: function() {
+               return domManip( this, arguments, function( elem ) {
+                       if ( this.parentNode ) {
+                               this.parentNode.insertBefore( elem, this );
+                       }
+               } );
+       },
+
+       after: function() {
+               return domManip( this, arguments, function( elem ) {
+                       if ( this.parentNode ) {
+                               this.parentNode.insertBefore( elem, this.nextSibling );
+                       }
+               } );
+       },
+
+       empty: function() {
+               var elem,
+                       i = 0;
+
+               for ( ; ( elem = this[ i ] ) != null; i++ ) {
+                       if ( elem.nodeType === 1 ) {
+
+                               // Prevent memory leaks
+                               jQuery.cleanData( getAll( elem, false ) );
+
+                               // Remove any remaining nodes
+                               elem.textContent = "";
+                       }
+               }
+
+               return this;
+       },
+
+       clone: function( dataAndEvents, deepDataAndEvents ) {
+               dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
+               deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
+
+               return this.map( function() {
+                       return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
+               } );
+       },
+
+       html: function( value ) {
+               return access( this, function( value ) {
+                       var elem = this[ 0 ] || {},
+                               i = 0,
+                               l = this.length;
+
+                       if ( value === undefined && elem.nodeType === 1 ) {
+                               return elem.innerHTML;
+                       }
+
+                       // See if we can take a shortcut and just use innerHTML
+                       if ( typeof value === "string" && !rnoInnerhtml.test( value ) &&
+                               !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) {
+
+                               value = jQuery.htmlPrefilter( value );
+
+                               try {
+                                       for ( ; i < l; i++ ) {
+                                               elem = this[ i ] || {};
+
+                                               // Remove element nodes and prevent memory leaks
+                                               if ( elem.nodeType === 1 ) {
+                                                       jQuery.cleanData( getAll( elem, false ) );
+                                                       elem.innerHTML = value;
+                                               }
+                                       }
+
+                                       elem = 0;
+
+                               // If using innerHTML throws an exception, use the fallback method
+                               } catch ( e ) {}
+                       }
+
+                       if ( elem ) {
+                               this.empty().append( value );
+                       }
+               }, null, value, arguments.length );
+       },
+
+       replaceWith: function() {
+               var ignored = [];
+
+               // Make the changes, replacing each non-ignored context element with the new content
+               return domManip( this, arguments, function( elem ) {
+                       var parent = this.parentNode;
+
+                       if ( jQuery.inArray( this, ignored ) < 0 ) {
+                               jQuery.cleanData( getAll( this ) );
+                               if ( parent ) {
+                                       parent.replaceChild( elem, this );
+                               }
+                       }
+
+               // Force callback invocation
+               }, ignored );
+       }
+} );
+
+jQuery.each( {
+       appendTo: "append",
+       prependTo: "prepend",
+       insertBefore: "before",
+       insertAfter: "after",
+       replaceAll: "replaceWith"
+}, function( name, original ) {
+       jQuery.fn[ name ] = function( selector ) {
+               var elems,
+                       ret = [],
+                       insert = jQuery( selector ),
+                       last = insert.length - 1,
+                       i = 0;
+
+               for ( ; i <= last; i++ ) {
+                       elems = i === last ? this : this.clone( true );
+                       jQuery( insert[ i ] )[ original ]( elems );
+
+                       // Support: Android <=4.0 only, PhantomJS 1 only
+                       // .get() because push.apply(_, arraylike) throws on ancient WebKit
+                       push.apply( ret, elems.get() );
+               }
+
+               return this.pushStack( ret );
+       };
+} );
+var rmargin = ( /^margin/ );
+
+var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" );
+
+var getStyles = function( elem ) {
+
+               // Support: IE <=11 only, Firefox <=30 (#15098, #14150)
+               // IE throws on elements created in popups
+               // FF meanwhile throws on frame elements through "defaultView.getComputedStyle"
+               var view = elem.ownerDocument.defaultView;
+
+               if ( !view || !view.opener ) {
+                       view = window;
+               }
+
+               return view.getComputedStyle( elem );
+       };
+
+
+
+( function() {
+
+       // Executing both pixelPosition & boxSizingReliable tests require only one layout
+       // so they're executed at the same time to save the second computation.
+       function computeStyleTests() {
+
+               // This is a singleton, we need to execute it only once
+               if ( !div ) {
+                       return;
+               }
+
+               div.style.cssText =
+                       "box-sizing:border-box;" +
+                       "position:relative;display:block;" +
+                       "margin:auto;border:1px;padding:1px;" +
+                       "top:1%;width:50%";
+               div.innerHTML = "";
+               documentElement.appendChild( container );
+
+               var divStyle = window.getComputedStyle( div );
+               pixelPositionVal = divStyle.top !== "1%";
+
+               // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44
+               reliableMarginLeftVal = divStyle.marginLeft === "2px";
+               boxSizingReliableVal = divStyle.width === "4px";
+
+               // Support: Android 4.0 - 4.3 only
+               // Some styles come back with percentage values, even though they shouldn't
+               div.style.marginRight = "50%";
+               pixelMarginRightVal = divStyle.marginRight === "4px";
+
+               documentElement.removeChild( container );
+
+               // Nullify the div so it wouldn't be stored in the memory and
+               // it will also be a sign that checks already performed
+               div = null;
+       }
+
+       var pixelPositionVal, boxSizingReliableVal, pixelMarginRightVal, reliableMarginLeftVal,
+               container = document.createElement( "div" ),
+               div = document.createElement( "div" );
+
+       // Finish early in limited (non-browser) environments
+       if ( !div.style ) {
+               return;
+       }
+
+       // Support: IE <=9 - 11 only
+       // Style of cloned element affects source element cloned (#8908)
+       div.style.backgroundClip = "content-box";
+       div.cloneNode( true ).style.backgroundClip = "";
+       support.clearCloneStyle = div.style.backgroundClip === "content-box";
+
+       container.style.cssText = "border:0;width:8px;height:0;top:0;left:-9999px;" +
+               "padding:0;margin-top:1px;position:absolute";
+       container.appendChild( div );
+
+       jQuery.extend( support, {
+               pixelPosition: function() {
+                       computeStyleTests();
+                       return pixelPositionVal;
+               },
+               boxSizingReliable: function() {
+                       computeStyleTests();
+                       return boxSizingReliableVal;
+               },
+               pixelMarginRight: function() {
+                       computeStyleTests();
+                       return pixelMarginRightVal;
+               },
+               reliableMarginLeft: function() {
+                       computeStyleTests();
+                       return reliableMarginLeftVal;
+               }
+       } );
+} )();
+
+
+function curCSS( elem, name, computed ) {
+       var width, minWidth, maxWidth, ret,
+
+               // Support: Firefox 51+
+               // Retrieving style before computed somehow
+               // fixes an issue with getting wrong values
+               // on detached elements
+               style = elem.style;
+
+       computed = computed || getStyles( elem );
+
+       // getPropertyValue is needed for:
+       //   .css('filter') (IE 9 only, #12537)
+       //   .css('--customProperty) (#3144)
+       if ( computed ) {
+               ret = computed.getPropertyValue( name ) || computed[ name ];
+
+               if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) {
+                       ret = jQuery.style( elem, name );
+               }
+
+               // A tribute to the "awesome hack by Dean Edwards"
+               // Android Browser returns percentage for some values,
+               // but width seems to be reliably pixels.
+               // This is against the CSSOM draft spec:
+               // https://drafts.csswg.org/cssom/#resolved-values
+               if ( !support.pixelMarginRight() && rnumnonpx.test( ret ) && rmargin.test( name ) ) {
+
+                       // Remember the original values
+                       width = style.width;
+                       minWidth = style.minWidth;
+                       maxWidth = style.maxWidth;
+
+                       // Put in the new values to get a computed value out
+                       style.minWidth = style.maxWidth = style.width = ret;
+                       ret = computed.width;
+
+                       // Revert the changed values
+                       style.width = width;
+                       style.minWidth = minWidth;
+                       style.maxWidth = maxWidth;
+               }
+       }
+
+       return ret !== undefined ?
+
+               // Support: IE <=9 - 11 only
+               // IE returns zIndex value as an integer.
+               ret + "" :
+               ret;
+}
+
+
+function addGetHookIf( conditionFn, hookFn ) {
+
+       // Define the hook, we'll check on the first run if it's really needed.
+       return {
+               get: function() {
+                       if ( conditionFn() ) {
+
+                               // Hook not needed (or it's not possible to use it due
+                               // to missing dependency), remove it.
+                               delete this.get;
+                               return;
+                       }
+
+                       // Hook needed; redefine it so that the support test is not executed again.
+                       return ( this.get = hookFn ).apply( this, arguments );
+               }
+       };
+}
+
+
+var
+
+       // Swappable if display is none or starts with table
+       // except "table", "table-cell", or "table-caption"
+       // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display
+       rdisplayswap = /^(none|table(?!-c[ea]).+)/,
+       rcustomProp = /^--/,
+       cssShow = { position: "absolute", visibility: "hidden", display: "block" },
+       cssNormalTransform = {
+               letterSpacing: "0",
+               fontWeight: "400"
+       },
+
+       cssPrefixes = [ "Webkit", "Moz", "ms" ],
+       emptyStyle = document.createElement( "div" ).style;
+
+// Return a css property mapped to a potentially vendor prefixed property
+function vendorPropName( name ) {
+
+       // Shortcut for names that are not vendor prefixed
+       if ( name in emptyStyle ) {
+               return name;
+       }
+
+       // Check for vendor prefixed names
+       var capName = name[ 0 ].toUpperCase() + name.slice( 1 ),
+               i = cssPrefixes.length;
+
+       while ( i-- ) {
+               name = cssPrefixes[ i ] + capName;
+               if ( name in emptyStyle ) {
+                       return name;
+               }
+       }
+}
+
+// Return a property mapped along what jQuery.cssProps suggests or to
+// a vendor prefixed property.
+function finalPropName( name ) {
+       var ret = jQuery.cssProps[ name ];
+       if ( !ret ) {
+               ret = jQuery.cssProps[ name ] = vendorPropName( name ) || name;
+       }
+       return ret;
+}
+
+function setPositiveNumber( elem, value, subtract ) {
+
+       // Any relative (+/-) values have already been
+       // normalized at this point
+       var matches = rcssNum.exec( value );
+       return matches ?
+
+               // Guard against undefined "subtract", e.g., when used as in cssHooks
+               Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) :
+               value;
+}
+
+function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {
+       var i,
+               val = 0;
+
+       // If we already have the right measurement, avoid augmentation
+       if ( extra === ( isBorderBox ? "border" : "content" ) ) {
+               i = 4;
+
+       // Otherwise initialize for horizontal or vertical properties
+       } else {
+               i = name === "width" ? 1 : 0;
+       }
+
+       for ( ; i < 4; i += 2 ) {
+
+               // Both box models exclude margin, so add it if we want it
+               if ( extra === "margin" ) {
+                       val += jQuery.css( elem, extra + cssExpand[ i ], true, styles );
+               }
+
+               if ( isBorderBox ) {
+
+                       // border-box includes padding, so remove it if we want content
+                       if ( extra === "content" ) {
+                               val -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
+                       }
+
+                       // At this point, extra isn't border nor margin, so remove border
+                       if ( extra !== "margin" ) {
+                               val -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
+                       }
+               } else {
+
+                       // At this point, extra isn't content, so add padding
+                       val += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
+
+                       // At this point, extra isn't content nor padding, so add border
+                       if ( extra !== "padding" ) {
+                               val += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
+                       }
+               }
+       }
+
+       return val;
+}
+
+function getWidthOrHeight( elem, name, extra ) {
+
+       // Start with computed style
+       var valueIsBorderBox,
+               styles = getStyles( elem ),
+               val = curCSS( elem, name, styles ),
+               isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box";
+
+       // Computed unit is not pixels. Stop here and return.
+       if ( rnumnonpx.test( val ) ) {
+               return val;
+       }
+
+       // Check for style in case a browser which returns unreliable values
+       // for getComputedStyle silently falls back to the reliable elem.style
+       valueIsBorderBox = isBorderBox &&
+               ( support.boxSizingReliable() || val === elem.style[ name ] );
+
+       // Fall back to offsetWidth/Height when value is "auto"
+       // This happens for inline elements with no explicit setting (gh-3571)
+       if ( val === "auto" ) {
+               val = elem[ "offset" + name[ 0 ].toUpperCase() + name.slice( 1 ) ];
+       }
+
+       // Normalize "", auto, and prepare for extra
+       val = parseFloat( val ) || 0;
+
+       // Use the active box-sizing model to add/subtract irrelevant styles
+       return ( val +
+               augmentWidthOrHeight(
+                       elem,
+                       name,
+                       extra || ( isBorderBox ? "border" : "content" ),
+                       valueIsBorderBox,
+                       styles
+               )
+       ) + "px";
+}
+
+jQuery.extend( {
+
+       // Add in style property hooks for overriding the default
+       // behavior of getting and setting a style property
+       cssHooks: {
+               opacity: {
+                       get: function( elem, computed ) {
+                               if ( computed ) {
+
+                                       // We should always get a number back from opacity
+                                       var ret = curCSS( elem, "opacity" );
+                                       return ret === "" ? "1" : ret;
+                               }
+                       }
+               }
+       },
+
+       // Don't automatically add "px" to these possibly-unitless properties
+       cssNumber: {
+               "animationIterationCount": true,
+               "columnCount": true,
+               "fillOpacity": true,
+               "flexGrow": true,
+               "flexShrink": true,
+               "fontWeight": true,
+               "lineHeight": true,
+               "opacity": true,
+               "order": true,
+               "orphans": true,
+               "widows": true,
+               "zIndex": true,
+               "zoom": true
+       },
+
+       // Add in properties whose names you wish to fix before
+       // setting or getting the value
+       cssProps: {
+               "float": "cssFloat"
+       },
+
+       // Get and set the style property on a DOM Node
+       style: function( elem, name, value, extra ) {
+
+               // Don't set styles on text and comment nodes
+               if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
+                       return;
+               }
+
+               // Make sure that we're working with the right name
+               var ret, type, hooks,
+                       origName = jQuery.camelCase( name ),
+                       isCustomProp = rcustomProp.test( name ),
+                       style = elem.style;
+
+               // Make sure that we're working with the right name. We don't
+               // want to query the value if it is a CSS custom property
+               // since they are user-defined.
+               if ( !isCustomProp ) {
+                       name = finalPropName( origName );
+               }
+
+               // Gets hook for the prefixed version, then unprefixed version
+               hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
+
+               // Check if we're setting a value
+               if ( value !== undefined ) {
+                       type = typeof value;
+
+                       // Convert "+=" or "-=" to relative numbers (#7345)
+                       if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {
+                               value = adjustCSS( elem, name, ret );
+
+                               // Fixes bug #9237
+                               type = "number";
+                       }
+
+                       // Make sure that null and NaN values aren't set (#7116)
+                       if ( value == null || value !== value ) {
+                               return;
+                       }
+
+                       // If a number was passed in, add the unit (except for certain CSS properties)
+                       if ( type === "number" ) {
+                               value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" );
+                       }
+
+                       // background-* props affect original clone's values
+                       if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) {
+                               style[ name ] = "inherit";
+                       }
+
+                       // If a hook was provided, use that value, otherwise just set the specified value
+                       if ( !hooks || !( "set" in hooks ) ||
+                               ( value = hooks.set( elem, value, extra ) ) !== undefined ) {
+
+                               if ( isCustomProp ) {
+                                       style.setProperty( name, value );
+                               } else {
+                                       style[ name ] = value;
+                               }
+                       }
+
+               } else {
+
+                       // If a hook was provided get the non-computed value from there
+                       if ( hooks && "get" in hooks &&
+                               ( ret = hooks.get( elem, false, extra ) ) !== undefined ) {
+
+                               return ret;
+                       }
+
+                       // Otherwise just get the value from the style object
+                       return style[ name ];
+               }
+       },
+
+       css: function( elem, name, extra, styles ) {
+               var val, num, hooks,
+                       origName = jQuery.camelCase( name ),
+                       isCustomProp = rcustomProp.test( name );
+
+               // Make sure that we're working with the right name. We don't
+               // want to modify the value if it is a CSS custom property
+               // since they are user-defined.
+               if ( !isCustomProp ) {
+                       name = finalPropName( origName );
+               }
+
+               // Try prefixed name followed by the unprefixed name
+               hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
+
+               // If a hook was provided get the computed value from there
+               if ( hooks && "get" in hooks ) {
+                       val = hooks.get( elem, true, extra );
+               }
+
+               // Otherwise, if a way to get the computed value exists, use that
+               if ( val === undefined ) {
+                       val = curCSS( elem, name, styles );
+               }
+
+               // Convert "normal" to computed value
+               if ( val === "normal" && name in cssNormalTransform ) {
+                       val = cssNormalTransform[ name ];
+               }
+
+               // Make numeric if forced or a qualifier was provided and val looks numeric
+               if ( extra === "" || extra ) {
+                       num = parseFloat( val );
+                       return extra === true || isFinite( num ) ? num || 0 : val;
+               }
+
+               return val;
+       }
+} );
+
+jQuery.each( [ "height", "width" ], function( i, name ) {
+       jQuery.cssHooks[ name ] = {
+               get: function( elem, computed, extra ) {
+                       if ( computed ) {
+
+                               // Certain elements can have dimension info if we invisibly show them
+                               // but it must have a current display style that would benefit
+                               return rdisplayswap.test( jQuery.css( elem, "display" ) ) &&
+
+                                       // Support: Safari 8+
+                                       // Table columns in Safari have non-zero offsetWidth & zero
+                                       // getBoundingClientRect().width unless display is changed.
+                                       // Support: IE <=11 only
+                                       // Running getBoundingClientRect on a disconnected node
+                                       // in IE throws an error.
+                                       ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ?
+                                               swap( elem, cssShow, function() {
+                                                       return getWidthOrHeight( elem, name, extra );
+                                               } ) :
+                                               getWidthOrHeight( elem, name, extra );
+                       }
+               },
+
+               set: function( elem, value, extra ) {
+                       var matches,
+                               styles = extra && getStyles( elem ),
+                               subtract = extra && augmentWidthOrHeight(
+                                       elem,
+                                       name,
+                                       extra,
+                                       jQuery.css( elem, "boxSizing", false, styles ) === "border-box",
+                                       styles
+                               );
+
+                       // Convert to pixels if value adjustment is needed
+                       if ( subtract && ( matches = rcssNum.exec( value ) ) &&
+                               ( matches[ 3 ] || "px" ) !== "px" ) {
+
+                               elem.style[ name ] = value;
+                               value = jQuery.css( elem, name );
+                       }
+
+                       return setPositiveNumber( elem, value, subtract );
+               }
+       };
+} );
+
+jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,
+       function( elem, computed ) {
+               if ( computed ) {
+                       return ( parseFloat( curCSS( elem, "marginLeft" ) ) ||
+                               elem.getBoundingClientRect().left -
+                                       swap( elem, { marginLeft: 0 }, function() {
+                                               return elem.getBoundingClientRect().left;
+                                       } )
+                               ) + "px";
+               }
+       }
+);
+
+// These hooks are used by animate to expand properties
+jQuery.each( {
+       margin: "",
+       padding: "",
+       border: "Width"
+}, function( prefix, suffix ) {
+       jQuery.cssHooks[ prefix + suffix ] = {
+               expand: function( value ) {
+                       var i = 0,
+                               expanded = {},
+
+                               // Assumes a single number if not a string
+                               parts = typeof value === "string" ? value.split( " " ) : [ value ];
+
+                       for ( ; i < 4; i++ ) {
+                               expanded[ prefix + cssExpand[ i ] + suffix ] =
+                                       parts[ i ] || parts[ i - 2 ] || parts[ 0 ];
+                       }
+
+                       return expanded;
+               }
+       };
+
+       if ( !rmargin.test( prefix ) ) {
+               jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;
+       }
+} );
+
+jQuery.fn.extend( {
+       css: function( name, value ) {
+               return access( this, function( elem, name, value ) {
+                       var styles, len,
+                               map = {},
+                               i = 0;
+
+                       if ( Array.isArray( name ) ) {
+                               styles = getStyles( elem );
+                               len = name.length;
+
+                               for ( ; i < len; i++ ) {
+                                       map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );
+                               }
+
+                               return map;
+                       }
+
+                       return value !== undefined ?
+                               jQuery.style( elem, name, value ) :
+                               jQuery.css( elem, name );
+               }, name, value, arguments.length > 1 );
+       }
+} );
+
+
+function Tween( elem, options, prop, end, easing ) {
+       return new Tween.prototype.init( elem, options, prop, end, easing );
+}
+jQuery.Tween = Tween;
+
+Tween.prototype = {
+       constructor: Tween,
+       init: function( elem, options, prop, end, easing, unit ) {
+               this.elem = elem;
+               this.prop = prop;
+               this.easing = easing || jQuery.easing._default;
+               this.options = options;
+               this.start = this.now = this.cur();
+               this.end = end;
+               this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" );
+       },
+       cur: function() {
+               var hooks = Tween.propHooks[ this.prop ];
+
+               return hooks && hooks.get ?
+                       hooks.get( this ) :
+                       Tween.propHooks._default.get( this );
+       },
+       run: function( percent ) {
+               var eased,
+                       hooks = Tween.propHooks[ this.prop ];
+
+               if ( this.options.duration ) {
+                       this.pos = eased = jQuery.easing[ this.easing ](
+                               percent, this.options.duration * percent, 0, 1, this.options.duration
+                       );
+               } else {
+                       this.pos = eased = percent;
+               }
+               this.now = ( this.end - this.start ) * eased + this.start;
+
+               if ( this.options.step ) {
+                       this.options.step.call( this.elem, this.now, this );
+               }
+
+               if ( hooks && hooks.set ) {
+                       hooks.set( this );
+               } else {
+                       Tween.propHooks._default.set( this );
+               }
+               return this;
+       }
+};
+
+Tween.prototype.init.prototype = Tween.prototype;
+
+Tween.propHooks = {
+       _default: {
+               get: function( tween ) {
+                       var result;
+
+                       // Use a property on the element directly when it is not a DOM element,
+                       // or when there is no matching style property that exists.
+                       if ( tween.elem.nodeType !== 1 ||
+                               tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {
+                               return tween.elem[ tween.prop ];
+                       }
+
+                       // Passing an empty string as a 3rd parameter to .css will automatically
+                       // attempt a parseFloat and fallback to a string if the parse fails.
+                       // Simple values such as "10px" are parsed to Float;
+                       // complex values such as "rotate(1rad)" are returned as-is.
+                       result = jQuery.css( tween.elem, tween.prop, "" );
+
+                       // Empty strings, null, undefined and "auto" are converted to 0.
+                       return !result || result === "auto" ? 0 : result;
+               },
+               set: function( tween ) {
+
+                       // Use step hook for back compat.
+                       // Use cssHook if its there.
+                       // Use .style if available and use plain properties where available.
+                       if ( jQuery.fx.step[ tween.prop ] ) {
+                               jQuery.fx.step[ tween.prop ]( tween );
+                       } else if ( tween.elem.nodeType === 1 &&
+                               ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null ||
+                                       jQuery.cssHooks[ tween.prop ] ) ) {
+                               jQuery.style( tween.elem, tween.prop, tween.now + tween.unit );
+                       } else {
+                               tween.elem[ tween.prop ] = tween.now;
+                       }
+               }
+       }
+};
+
+// Support: IE <=9 only
+// Panic based approach to setting things on disconnected nodes
+Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {
+       set: function( tween ) {
+               if ( tween.elem.nodeType && tween.elem.parentNode ) {
+                       tween.elem[ tween.prop ] = tween.now;
+               }
+       }
+};
+
+jQuery.easing = {
+       linear: function( p ) {
+               return p;
+       },
+       swing: function( p ) {
+               return 0.5 - Math.cos( p * Math.PI ) / 2;
+       },
+       _default: "swing"
+};
+
+jQuery.fx = Tween.prototype.init;
+
+// Back compat <1.8 extension point
+jQuery.fx.step = {};
+
+
+
+
+var
+       fxNow, inProgress,
+       rfxtypes = /^(?:toggle|show|hide)$/,
+       rrun = /queueHooks$/;
+
+function schedule() {
+       if ( inProgress ) {
+               if ( document.hidden === false && window.requestAnimationFrame ) {
+                       window.requestAnimationFrame( schedule );
+               } else {
+                       window.setTimeout( schedule, jQuery.fx.interval );
+               }
+
+               jQuery.fx.tick();
+       }
+}
+
+// Animations created synchronously will run synchronously
+function createFxNow() {
+       window.setTimeout( function() {
+               fxNow = undefined;
+       } );
+       return ( fxNow = jQuery.now() );
+}
+
+// Generate parameters to create a standard animation
+function genFx( type, includeWidth ) {
+       var which,
+               i = 0,
+               attrs = { height: type };
+
+       // If we include width, step value is 1 to do all cssExpand values,
+       // otherwise step value is 2 to skip over Left and Right
+       includeWidth = includeWidth ? 1 : 0;
+       for ( ; i < 4; i += 2 - includeWidth ) {
+               which = cssExpand[ i ];
+               attrs[ "margin" + which ] = attrs[ "padding" + which ] = type;
+       }
+
+       if ( includeWidth ) {
+               attrs.opacity = attrs.width = type;
+       }
+
+       return attrs;
+}
+
+function createTween( value, prop, animation ) {
+       var tween,
+               collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ),
+               index = 0,
+               length = collection.length;
+       for ( ; index < length; index++ ) {
+               if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {
+
+                       // We're done with this property
+                       return tween;
+               }
+       }
+}
+
+function defaultPrefilter( elem, props, opts ) {
+       var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,
+               isBox = "width" in props || "height" in props,
+               anim = this,
+               orig = {},
+               style = elem.style,
+               hidden = elem.nodeType && isHiddenWithinTree( elem ),
+               dataShow = dataPriv.get( elem, "fxshow" );
+
+       // Queue-skipping animations hijack the fx hooks
+       if ( !opts.queue ) {
+               hooks = jQuery._queueHooks( elem, "fx" );
+               if ( hooks.unqueued == null ) {
+                       hooks.unqueued = 0;
+                       oldfire = hooks.empty.fire;
+                       hooks.empty.fire = function() {
+                               if ( !hooks.unqueued ) {
+                                       oldfire();
+                               }
+                       };
+               }
+               hooks.unqueued++;
+
+               anim.always( function() {
+
+                       // Ensure the complete handler is called before this completes
+                       anim.always( function() {
+                               hooks.unqueued--;
+                               if ( !jQuery.queue( elem, "fx" ).length ) {
+                                       hooks.empty.fire();
+                               }
+                       } );
+               } );
+       }
+
+       // Detect show/hide animations
+       for ( prop in props ) {
+               value = props[ prop ];
+               if ( rfxtypes.test( value ) ) {
+                       delete props[ prop ];
+                       toggle = toggle || value === "toggle";
+                       if ( value === ( hidden ? "hide" : "show" ) ) {
+
+                               // Pretend to be hidden if this is a "show" and
+                               // there is still data from a stopped show/hide
+                               if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) {
+                                       hidden = true;
+
+                               // Ignore all other no-op show/hide data
+                               } else {
+                                       continue;
+                               }
+                       }
+                       orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );
+               }
+       }
+
+       // Bail out if this is a no-op like .hide().hide()
+       propTween = !jQuery.isEmptyObject( props );
+       if ( !propTween && jQuery.isEmptyObject( orig ) ) {
+               return;
+       }
+
+       // Restrict "overflow" and "display" styles during box animations
+       if ( isBox && elem.nodeType === 1 ) {
+
+               // Support: IE <=9 - 11, Edge 12 - 13
+               // Record all 3 overflow attributes because IE does not infer the shorthand
+               // from identically-valued overflowX and overflowY
+               opts.overflow = [ style.overflow, style.overflowX, style.overflowY ];
+
+               // Identify a display type, preferring old show/hide data over the CSS cascade
+               restoreDisplay = dataShow && dataShow.display;
+               if ( restoreDisplay == null ) {
+                       restoreDisplay = dataPriv.get( elem, "display" );
+               }
+               display = jQuery.css( elem, "display" );
+               if ( display === "none" ) {
+                       if ( restoreDisplay ) {
+                               display = restoreDisplay;
+                       } else {
+
+                               // Get nonempty value(s) by temporarily forcing visibility
+                               showHide( [ elem ], true );
+                               restoreDisplay = elem.style.display || restoreDisplay;
+                               display = jQuery.css( elem, "display" );
+                               showHide( [ elem ] );
+                       }
+               }
+
+               // Animate inline elements as inline-block
+               if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) {
+                       if ( jQuery.css( elem, "float" ) === "none" ) {
+
+                               // Restore the original display value at the end of pure show/hide animations
+                               if ( !propTween ) {
+                                       anim.done( function() {
+                                               style.display = restoreDisplay;
+                                       } );
+                                       if ( restoreDisplay == null ) {
+                                               display = style.display;
+                                               restoreDisplay = display === "none" ? "" : display;
+                                       }
+                               }
+                               style.display = "inline-block";
+                       }
+               }
+       }
+
+       if ( opts.overflow ) {
+               style.overflow = "hidden";
+               anim.always( function() {
+                       style.overflow = opts.overflow[ 0 ];
+                       style.overflowX = opts.overflow[ 1 ];
+                       style.overflowY = opts.overflow[ 2 ];
+               } );
+       }
+
+       // Implement show/hide animations
+       propTween = false;
+       for ( prop in orig ) {
+
+               // General show/hide setup for this element animation
+               if ( !propTween ) {
+                       if ( dataShow ) {
+                               if ( "hidden" in dataShow ) {
+                                       hidden = dataShow.hidden;
+                               }
+                       } else {
+                               dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } );
+                       }
+
+                       // Store hidden/visible for toggle so `.stop().toggle()` "reverses"
+                       if ( toggle ) {
+                               dataShow.hidden = !hidden;
+                       }
+
+                       // Show elements before animating them
+                       if ( hidden ) {
+                               showHide( [ elem ], true );
+                       }
+
+                       /* eslint-disable no-loop-func */
+
+                       anim.done( function() {
+
+                       /* eslint-enable no-loop-func */
+
+                               // The final step of a "hide" animation is actually hiding the element
+                               if ( !hidden ) {
+                                       showHide( [ elem ] );
+                               }
+                               dataPriv.remove( elem, "fxshow" );
+                               for ( prop in orig ) {
+                                       jQuery.style( elem, prop, orig[ prop ] );
+                               }
+                       } );
+               }
+
+               // Per-property setup
+               propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );
+               if ( !( prop in dataShow ) ) {
+                       dataShow[ prop ] = propTween.start;
+                       if ( hidden ) {
+                               propTween.end = propTween.start;
+                               propTween.start = 0;
+                       }
+               }
+       }
+}
+
+function propFilter( props, specialEasing ) {
+       var index, name, easing, value, hooks;
+
+       // camelCase, specialEasing and expand cssHook pass
+       for ( index in props ) {
+               name = jQuery.camelCase( index );
+               easing = specialEasing[ name ];
+               value = props[ index ];
+               if ( Array.isArray( value ) ) {
+                       easing = value[ 1 ];
+                       value = props[ index ] = value[ 0 ];
+               }
+
+               if ( index !== name ) {
+                       props[ name ] = value;
+                       delete props[ index ];
+               }
+
+               hooks = jQuery.cssHooks[ name ];
+               if ( hooks && "expand" in hooks ) {
+                       value = hooks.expand( value );
+                       delete props[ name ];
+
+                       // Not quite $.extend, this won't overwrite existing keys.
+                       // Reusing 'index' because we have the correct "name"
+                       for ( index in value ) {
+                               if ( !( index in props ) ) {
+                                       props[ index ] = value[ index ];
+                                       specialEasing[ index ] = easing;
+                               }
+                       }
+               } else {
+                       specialEasing[ name ] = easing;
+               }
+       }
+}
+
+function Animation( elem, properties, options ) {
+       var result,
+               stopped,
+               index = 0,
+               length = Animation.prefilters.length,
+               deferred = jQuery.Deferred().always( function() {
+
+                       // Don't match elem in the :animated selector
+                       delete tick.elem;
+               } ),
+               tick = function() {
+                       if ( stopped ) {
+                               return false;
+                       }
+                       var currentTime = fxNow || createFxNow(),
+                               remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),
+
+                               // Support: Android 2.3 only
+                               // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)
+                               temp = remaining / animation.duration || 0,
+                               percent = 1 - temp,
+                               index = 0,
+                               length = animation.tweens.length;
+
+                       for ( ; index < length; index++ ) {
+                               animation.tweens[ index ].run( percent );
+                       }
+
+                       deferred.notifyWith( elem, [ animation, percent, remaining ] );
+
+                       // If there's more to do, yield
+                       if ( percent < 1 && length ) {
+                               return remaining;
+                       }
+
+                       // If this was an empty animation, synthesize a final progress notification
+                       if ( !length ) {
+                               deferred.notifyWith( elem, [ animation, 1, 0 ] );
+                       }
+
+                       // Resolve the animation and report its conclusion
+                       deferred.resolveWith( elem, [ animation ] );
+                       return false;
+               },
+               animation = deferred.promise( {
+                       elem: elem,
+                       props: jQuery.extend( {}, properties ),
+                       opts: jQuery.extend( true, {
+                               specialEasing: {},
+                               easing: jQuery.easing._default
+                       }, options ),
+                       originalProperties: properties,
+                       originalOptions: options,
+                       startTime: fxNow || createFxNow(),
+                       duration: options.duration,
+                       tweens: [],
+                       createTween: function( prop, end ) {
+                               var tween = jQuery.Tween( elem, animation.opts, prop, end,
+                                               animation.opts.specialEasing[ prop ] || animation.opts.easing );
+                               animation.tweens.push( tween );
+                               return tween;
+                       },
+                       stop: function( gotoEnd ) {
+                               var index = 0,
+
+                                       // If we are going to the end, we want to run all the tweens
+                                       // otherwise we skip this part
+                                       length = gotoEnd ? animation.tweens.length : 0;
+                               if ( stopped ) {
+                                       return this;
+                               }
+                               stopped = true;
+                               for ( ; index < length; index++ ) {
+                                       animation.tweens[ index ].run( 1 );
+                               }
+
+                               // Resolve when we played the last frame; otherwise, reject
+                               if ( gotoEnd ) {
+                                       deferred.notifyWith( elem, [ animation, 1, 0 ] );
+                                       deferred.resolveWith( elem, [ animation, gotoEnd ] );
+                               } else {
+                                       deferred.rejectWith( elem, [ animation, gotoEnd ] );
+                               }
+                               return this;
+                       }
+               } ),
+               props = animation.props;
+
+       propFilter( props, animation.opts.specialEasing );
+
+       for ( ; index < length; index++ ) {
+               result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );
+               if ( result ) {
+                       if ( jQuery.isFunction( result.stop ) ) {
+                               jQuery._queueHooks( animation.elem, animation.opts.queue ).stop =
+                                       jQuery.proxy( result.stop, result );
+                       }
+                       return result;
+               }
+       }
+
+       jQuery.map( props, createTween, animation );
+
+       if ( jQuery.isFunction( animation.opts.start ) ) {
+               animation.opts.start.call( elem, animation );
+       }
+
+       // Attach callbacks from options
+       animation
+               .progress( animation.opts.progress )
+               .done( animation.opts.done, animation.opts.complete )
+               .fail( animation.opts.fail )
+               .always( animation.opts.always );
+
+       jQuery.fx.timer(
+               jQuery.extend( tick, {
+                       elem: elem,
+                       anim: animation,
+                       queue: animation.opts.queue
+               } )
+       );
+
+       return animation;
+}
+
+jQuery.Animation = jQuery.extend( Animation, {
+
+       tweeners: {
+               "*": [ function( prop, value ) {
+                       var tween = this.createTween( prop, value );
+                       adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );
+                       return tween;
+               } ]
+       },
+
+       tweener: function( props, callback ) {
+               if ( jQuery.isFunction( props ) ) {
+                       callback = props;
+                       props = [ "*" ];
+               } else {
+                       props = props.match( rnothtmlwhite );
+               }
+
+               var prop,
+                       index = 0,
+                       length = props.length;
+
+               for ( ; index < length; index++ ) {
+                       prop = props[ index ];
+                       Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];
+                       Animation.tweeners[ prop ].unshift( callback );
+               }
+       },
+
+       prefilters: [ defaultPrefilter ],
+
+       prefilter: function( callback, prepend ) {
+               if ( prepend ) {
+                       Animation.prefilters.unshift( callback );
+               } else {
+                       Animation.prefilters.push( callback );
+               }
+       }
+} );
+
+jQuery.speed = function( speed, easing, fn ) {
+       var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : {
+               complete: fn || !fn && easing ||
+                       jQuery.isFunction( speed ) && speed,
+               duration: speed,
+               easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing
+       };
+
+       // Go to the end state if fx are off
+       if ( jQuery.fx.off ) {
+               opt.duration = 0;
+
+       } else {
+               if ( typeof opt.duration !== "number" ) {
+                       if ( opt.duration in jQuery.fx.speeds ) {
+                               opt.duration = jQuery.fx.speeds[ opt.duration ];
+
+                       } else {
+                               opt.duration = jQuery.fx.speeds._default;
+                       }
+               }
+       }
+
+       // Normalize opt.queue - true/undefined/null -> "fx"
+       if ( opt.queue == null || opt.queue === true ) {
+               opt.queue = "fx";
+       }
+
+       // Queueing
+       opt.old = opt.complete;
+
+       opt.complete = function() {
+               if ( jQuery.isFunction( opt.old ) ) {
+                       opt.old.call( this );
+               }
+
+               if ( opt.queue ) {
+                       jQuery.dequeue( this, opt.queue );
+               }
+       };
+
+       return opt;
+};
+
+jQuery.fn.extend( {
+       fadeTo: function( speed, to, easing, callback ) {
+
+               // Show any hidden elements after setting opacity to 0
+               return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show()
+
+                       // Animate to the value specified
+                       .end().animate( { opacity: to }, speed, easing, callback );
+       },
+       animate: function( prop, speed, easing, callback ) {
+               var empty = jQuery.isEmptyObject( prop ),
+                       optall = jQuery.speed( speed, easing, callback ),
+                       doAnimation = function() {
+
+                               // Operate on a copy of prop so per-property easing won't be lost
+                               var anim = Animation( this, jQuery.extend( {}, prop ), optall );
+
+                               // Empty animations, or finishing resolves immediately
+                               if ( empty || dataPriv.get( this, "finish" ) ) {
+                                       anim.stop( true );
+                               }
+                       };
+                       doAnimation.finish = doAnimation;
+
+               return empty || optall.queue === false ?
+                       this.each( doAnimation ) :
+                       this.queue( optall.queue, doAnimation );
+       },
+       stop: function( type, clearQueue, gotoEnd ) {
+               var stopQueue = function( hooks ) {
+                       var stop = hooks.stop;
+                       delete hooks.stop;
+                       stop( gotoEnd );
+               };
+
+               if ( typeof type !== "string" ) {
+                       gotoEnd = clearQueue;
+                       clearQueue = type;
+                       type = undefined;
+               }
+               if ( clearQueue && type !== false ) {
+                       this.queue( type || "fx", [] );
+               }
+
+               return this.each( function() {
+                       var dequeue = true,
+                               index = type != null && type + "queueHooks",
+                               timers = jQuery.timers,
+                               data = dataPriv.get( this );
+
+                       if ( index ) {
+                               if ( data[ index ] && data[ index ].stop ) {
+                                       stopQueue( data[ index ] );
+                               }
+                       } else {
+                               for ( index in data ) {
+                                       if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {
+                                               stopQueue( data[ index ] );
+                                       }
+                               }
+                       }
+
+                       for ( index = timers.length; index--; ) {
+                               if ( timers[ index ].elem === this &&
+                                       ( type == null || timers[ index ].queue === type ) ) {
+
+                                       timers[ index ].anim.stop( gotoEnd );
+                                       dequeue = false;
+                                       timers.splice( index, 1 );
+                               }
+                       }
+
+                       // Start the next in the queue if the last step wasn't forced.
+                       // Timers currently will call their complete callbacks, which
+                       // will dequeue but only if they were gotoEnd.
+                       if ( dequeue || !gotoEnd ) {
+                               jQuery.dequeue( this, type );
+                       }
+               } );
+       },
+       finish: function( type ) {
+               if ( type !== false ) {
+                       type = type || "fx";
+               }
+               return this.each( function() {
+                       var index,
+                               data = dataPriv.get( this ),
+                               queue = data[ type + "queue" ],
+                               hooks = data[ type + "queueHooks" ],
+                               timers = jQuery.timers,
+                               length = queue ? queue.length : 0;
+
+                       // Enable finishing flag on private data
+                       data.finish = true;
+
+                       // Empty the queue first
+                       jQuery.queue( this, type, [] );
+
+                       if ( hooks && hooks.stop ) {
+                               hooks.stop.call( this, true );
+                       }
+
+                       // Look for any active animations, and finish them
+                       for ( index = timers.length; index--; ) {
+                               if ( timers[ index ].elem === this && timers[ index ].queue === type ) {
+                                       timers[ index ].anim.stop( true );
+                                       timers.splice( index, 1 );
+                               }
+                       }
+
+                       // Look for any animations in the old queue and finish them
+                       for ( index = 0; index < length; index++ ) {
+                               if ( queue[ index ] && queue[ index ].finish ) {
+                                       queue[ index ].finish.call( this );
+                               }
+                       }
+
+                       // Turn off finishing flag
+                       delete data.finish;
+               } );
+       }
+} );
+
+jQuery.each( [ "toggle", "show", "hide" ], function( i, name ) {
+       var cssFn = jQuery.fn[ name ];
+       jQuery.fn[ name ] = function( speed, easing, callback ) {
+               return speed == null || typeof speed === "boolean" ?
+                       cssFn.apply( this, arguments ) :
+                       this.animate( genFx( name, true ), speed, easing, callback );
+       };
+} );
+
+// Generate shortcuts for custom animations
+jQuery.each( {
+       slideDown: genFx( "show" ),
+       slideUp: genFx( "hide" ),
+       slideToggle: genFx( "toggle" ),
+       fadeIn: { opacity: "show" },
+       fadeOut: { opacity: "hide" },
+       fadeToggle: { opacity: "toggle" }
+}, function( name, props ) {
+       jQuery.fn[ name ] = function( speed, easing, callback ) {
+               return this.animate( props, speed, easing, callback );
+       };
+} );
+
+jQuery.timers = [];
+jQuery.fx.tick = function() {
+       var timer,
+               i = 0,
+               timers = jQuery.timers;
+
+       fxNow = jQuery.now();
+
+       for ( ; i < timers.length; i++ ) {
+               timer = timers[ i ];
+
+               // Run the timer and safely remove it when done (allowing for external removal)
+               if ( !timer() && timers[ i ] === timer ) {
+                       timers.splice( i--, 1 );
+               }
+       }
+
+       if ( !timers.length ) {
+               jQuery.fx.stop();
+       }
+       fxNow = undefined;
+};
+
+jQuery.fx.timer = function( timer ) {
+       jQuery.timers.push( timer );
+       jQuery.fx.start();
+};
+
+jQuery.fx.interval = 13;
+jQuery.fx.start = function() {
+       if ( inProgress ) {
+               return;
+       }
+
+       inProgress = true;
+       schedule();
+};
+
+jQuery.fx.stop = function() {
+       inProgress = null;
+};
+
+jQuery.fx.speeds = {
+       slow: 600,
+       fast: 200,
+
+       // Default speed
+       _default: 400
+};
+
+
+// Based off of the plugin by Clint Helfers, with permission.
+// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/
+jQuery.fn.delay = function( time, type ) {
+       time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;
+       type = type || "fx";
+
+       return this.queue( type, function( next, hooks ) {
+               var timeout = window.setTimeout( next, time );
+               hooks.stop = function() {
+                       window.clearTimeout( timeout );
+               };
+       } );
+};
+
+
+( function() {
+       var input = document.createElement( "input" ),
+               select = document.createElement( "select" ),
+               opt = select.appendChild( document.createElement( "option" ) );
+
+       input.type = "checkbox";
+
+       // Support: Android <=4.3 only
+       // Default value for a checkbox should be "on"
+       support.checkOn = input.value !== "";
+
+       // Support: IE <=11 only
+       // Must access selectedIndex to make default options select
+       support.optSelected = opt.selected;
+
+       // Support: IE <=11 only
+       // An input loses its value after becoming a radio
+       input = document.createElement( "input" );
+       input.value = "t";
+       input.type = "radio";
+       support.radioValue = input.value === "t";
+} )();
+
+
+var boolHook,
+       attrHandle = jQuery.expr.attrHandle;
+
+jQuery.fn.extend( {
+       attr: function( name, value ) {
+               return access( this, jQuery.attr, name, value, arguments.length > 1 );
+       },
+
+       removeAttr: function( name ) {
+               return this.each( function() {
+                       jQuery.removeAttr( this, name );
+               } );
+       }
+} );
+
+jQuery.extend( {
+       attr: function( elem, name, value ) {
+               var ret, hooks,
+                       nType = elem.nodeType;
+
+               // Don't get/set attributes on text, comment and attribute nodes
+               if ( nType === 3 || nType === 8 || nType === 2 ) {
+                       return;
+               }
+
+               // Fallback to prop when attributes are not supported
+               if ( typeof elem.getAttribute === "undefined" ) {
+                       return jQuery.prop( elem, name, value );
+               }
+
+               // Attribute hooks are determined by the lowercase version
+               // Grab necessary hook if one is defined
+               if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
+                       hooks = jQuery.attrHooks[ name.toLowerCase() ] ||
+                               ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );
+               }
+
+               if ( value !== undefined ) {
+                       if ( value === null ) {
+                               jQuery.removeAttr( elem, name );
+                               return;
+                       }
+
+                       if ( hooks && "set" in hooks &&
+                               ( ret = hooks.set( elem, value, name ) ) !== undefined ) {
+                               return ret;
+                       }
+
+                       elem.setAttribute( name, value + "" );
+                       return value;
+               }
+
+               if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {
+                       return ret;
+               }
+
+               ret = jQuery.find.attr( elem, name );
+
+               // Non-existent attributes return null, we normalize to undefined
+               return ret == null ? undefined : ret;
+       },
+
+       attrHooks: {
+               type: {
+                       set: function( elem, value ) {
+                               if ( !support.radioValue && value === "radio" &&
+                                       nodeName( elem, "input" ) ) {
+                                       var val = elem.value;
+                                       elem.setAttribute( "type", value );
+                                       if ( val ) {
+                                               elem.value = val;
+                                       }
+                                       return value;
+                               }
+                       }
+               }
+       },
+
+       removeAttr: function( elem, value ) {
+               var name,
+                       i = 0,
+
+                       // Attribute names can contain non-HTML whitespace characters
+                       // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2
+                       attrNames = value && value.match( rnothtmlwhite );
+
+               if ( attrNames && elem.nodeType === 1 ) {
+                       while ( ( name = attrNames[ i++ ] ) ) {
+                               elem.removeAttribute( name );
+                       }
+               }
+       }
+} );
+
+// Hooks for boolean attributes
+boolHook = {
+       set: function( elem, value, name ) {
+               if ( value === false ) {
+
+                       // Remove boolean attributes when set to false
+                       jQuery.removeAttr( elem, name );
+               } else {
+                       elem.setAttribute( name, name );
+               }
+               return name;
+       }
+};
+
+jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) {
+       var getter = attrHandle[ name ] || jQuery.find.attr;
+
+       attrHandle[ name ] = function( elem, name, isXML ) {
+               var ret, handle,
+                       lowercaseName = name.toLowerCase();
+
+               if ( !isXML ) {
+
+                       // Avoid an infinite loop by temporarily removing this function from the getter
+                       handle = attrHandle[ lowercaseName ];
+                       attrHandle[ lowercaseName ] = ret;
+                       ret = getter( elem, name, isXML ) != null ?
+                               lowercaseName :
+                               null;
+                       attrHandle[ lowercaseName ] = handle;
+               }
+               return ret;
+       };
+} );
+
+
+
+
+var rfocusable = /^(?:input|select|textarea|button)$/i,
+       rclickable = /^(?:a|area)$/i;
+
+jQuery.fn.extend( {
+       prop: function( name, value ) {
+               return access( this, jQuery.prop, name, value, arguments.length > 1 );
+       },
+
+       removeProp: function( name ) {
+               return this.each( function() {
+                       delete this[ jQuery.propFix[ name ] || name ];
+               } );
+       }
+} );
+
+jQuery.extend( {
+       prop: function( elem, name, value ) {
+               var ret, hooks,
+                       nType = elem.nodeType;
+
+               // Don't get/set properties on text, comment and attribute nodes
+               if ( nType === 3 || nType === 8 || nType === 2 ) {
+                       return;
+               }
+
+               if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
+
+                       // Fix name and attach hooks
+                       name = jQuery.propFix[ name ] || name;
+                       hooks = jQuery.propHooks[ name ];
+               }
+
+               if ( value !== undefined ) {
+                       if ( hooks && "set" in hooks &&
+                               ( ret = hooks.set( elem, value, name ) ) !== undefined ) {
+                               return ret;
+                       }
+
+                       return ( elem[ name ] = value );
+               }
+
+               if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {
+                       return ret;
+               }
+
+               return elem[ name ];
+       },
+
+       propHooks: {
+               tabIndex: {
+                       get: function( elem ) {
+
+                               // Support: IE <=9 - 11 only
+                               // elem.tabIndex doesn't always return the
+                               // correct value when it hasn't been explicitly set
+                               // https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
+                               // Use proper attribute retrieval(#12072)
+                               var tabindex = jQuery.find.attr( elem, "tabindex" );
+
+                               if ( tabindex ) {
+                                       return parseInt( tabindex, 10 );
+                               }
+
+                               if (
+                                       rfocusable.test( elem.nodeName ) ||
+                                       rclickable.test( elem.nodeName ) &&
+                                       elem.href
+                               ) {
+                                       return 0;
+                               }
+
+                               return -1;
+                       }
+               }
+       },
+
+       propFix: {
+               "for": "htmlFor",
+               "class": "className"
+       }
+} );
+
+// Support: IE <=11 only
+// Accessing the selectedIndex property
+// forces the browser to respect setting selected
+// on the option
+// The getter ensures a default option is selected
+// when in an optgroup
+// eslint rule "no-unused-expressions" is disabled for this code
+// since it considers such accessions noop
+if ( !support.optSelected ) {
+       jQuery.propHooks.selected = {
+               get: function( elem ) {
+
+                       /* eslint no-unused-expressions: "off" */
+
+                       var parent = elem.parentNode;
+                       if ( parent && parent.parentNode ) {
+                               parent.parentNode.selectedIndex;
+                       }
+                       return null;
+               },
+               set: function( elem ) {
+
+                       /* eslint no-unused-expressions: "off" */
+
+                       var parent = elem.parentNode;
+                       if ( parent ) {
+                               parent.selectedIndex;
+
+                               if ( parent.parentNode ) {
+                                       parent.parentNode.selectedIndex;
+                               }
+                       }
+               }
+       };
+}
+
+jQuery.each( [
+       "tabIndex",
+       "readOnly",
+       "maxLength",
+       "cellSpacing",
+       "cellPadding",
+       "rowSpan",
+       "colSpan",
+       "useMap",
+       "frameBorder",
+       "contentEditable"
+], function() {
+       jQuery.propFix[ this.toLowerCase() ] = this;
+} );
+
+
+
+
+       // Strip and collapse whitespace according to HTML spec
+       // https://html.spec.whatwg.org/multipage/infrastructure.html#strip-and-collapse-whitespace
+       function stripAndCollapse( value ) {
+               var tokens = value.match( rnothtmlwhite ) || [];
+               return tokens.join( " " );
+       }
+
+
+function getClass( elem ) {
+       return elem.getAttribute && elem.getAttribute( "class" ) || "";
+}
+
+jQuery.fn.extend( {
+       addClass: function( value ) {
+               var classes, elem, cur, curValue, clazz, j, finalValue,
+                       i = 0;
+
+               if ( jQuery.isFunction( value ) ) {
+                       return this.each( function( j ) {
+                               jQuery( this ).addClass( value.call( this, j, getClass( this ) ) );
+                       } );
+               }
+
+               if ( typeof value === "string" && value ) {
+                       classes = value.match( rnothtmlwhite ) || [];
+
+                       while ( ( elem = this[ i++ ] ) ) {
+                               curValue = getClass( elem );
+                               cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " );
+
+                               if ( cur ) {
+                                       j = 0;
+                                       while ( ( clazz = classes[ j++ ] ) ) {
+                                               if ( cur.indexOf( " " + clazz + " " ) < 0 ) {
+                                                       cur += clazz + " ";
+                                               }
+                                       }
+
+                                       // Only assign if different to avoid unneeded rendering.
+                                       finalValue = stripAndCollapse( cur );
+                                       if ( curValue !== finalValue ) {
+                                               elem.setAttribute( "class", finalValue );
+                                       }
+                               }
+                       }
+               }
+
+               return this;
+       },
+
+       removeClass: function( value ) {
+               var classes, elem, cur, curValue, clazz, j, finalValue,
+                       i = 0;
+
+               if ( jQuery.isFunction( value ) ) {
+                       return this.each( function( j ) {
+                               jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );
+                       } );
+               }
+
+               if ( !arguments.length ) {
+                       return this.attr( "class", "" );
+               }
+
+               if ( typeof value === "string" && value ) {
+                       classes = value.match( rnothtmlwhite ) || [];
+
+                       while ( ( elem = this[ i++ ] ) ) {
+                               curValue = getClass( elem );
+
+                               // This expression is here for better compressibility (see addClass)
+                               cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " );
+
+                               if ( cur ) {
+                                       j = 0;
+                                       while ( ( clazz = classes[ j++ ] ) ) {
+
+                                               // Remove *all* instances
+                                               while ( cur.indexOf( " " + clazz + " " ) > -1 ) {
+                                                       cur = cur.replace( " " + clazz + " ", " " );
+                                               }
+                                       }
+
+                                       // Only assign if different to avoid unneeded rendering.
+                                       finalValue = stripAndCollapse( cur );
+                                       if ( curValue !== finalValue ) {
+                                               elem.setAttribute( "class", finalValue );
+                                       }
+                               }
+                       }
+               }
+
+               return this;
+       },
+
+       toggleClass: function( value, stateVal ) {
+               var type = typeof value;
+
+               if ( typeof stateVal === "boolean" && type === "string" ) {
+                       return stateVal ? this.addClass( value ) : this.removeClass( value );
+               }
+
+               if ( jQuery.isFunction( value ) ) {
+                       return this.each( function( i ) {
+                               jQuery( this ).toggleClass(
+                                       value.call( this, i, getClass( this ), stateVal ),
+                                       stateVal
+                               );
+                       } );
+               }
+
+               return this.each( function() {
+                       var className, i, self, classNames;
+
+                       if ( type === "string" ) {
+
+                               // Toggle individual class names
+                               i = 0;
+                               self = jQuery( this );
+                               classNames = value.match( rnothtmlwhite ) || [];
+
+                               while ( ( className = classNames[ i++ ] ) ) {
+
+                                       // Check each className given, space separated list
+                                       if ( self.hasClass( className ) ) {
+                                               self.removeClass( className );
+                                       } else {
+                                               self.addClass( className );
+                                       }
+                               }
+
+                       // Toggle whole class name
+                       } else if ( value === undefined || type === "boolean" ) {
+                               className = getClass( this );
+                               if ( className ) {
+
+                                       // Store className if set
+                                       dataPriv.set( this, "__className__", className );
+                               }
+
+                               // If the element has a class name or if we're passed `false`,
+                               // then remove the whole classname (if there was one, the above saved it).
+                               // Otherwise bring back whatever was previously saved (if anything),
+                               // falling back to the empty string if nothing was stored.
+                               if ( this.setAttribute ) {
+                                       this.setAttribute( "class",
+                                               className || value === false ?
+                                               "" :
+                                               dataPriv.get( this, "__className__" ) || ""
+                                       );
+                               }
+                       }
+               } );
+       },
+
+       hasClass: function( selector ) {
+               var className, elem,
+                       i = 0;
+
+               className = " " + selector + " ";
+               while ( ( elem = this[ i++ ] ) ) {
+                       if ( elem.nodeType === 1 &&
+                               ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) {
+                                       return true;
+                       }
+               }
+
+               return false;
+       }
+} );
+
+
+
+
+var rreturn = /\r/g;
+
+jQuery.fn.extend( {
+       val: function( value ) {
+               var hooks, ret, isFunction,
+                       elem = this[ 0 ];
+
+               if ( !arguments.length ) {
+                       if ( elem ) {
+                               hooks = jQuery.valHooks[ elem.type ] ||
+                                       jQuery.valHooks[ elem.nodeName.toLowerCase() ];
+
+                               if ( hooks &&
+                                       "get" in hooks &&
+                                       ( ret = hooks.get( elem, "value" ) ) !== undefined
+                               ) {
+                                       return ret;
+                               }
+
+                               ret = elem.value;
+
+                               // Handle most common string cases
+                               if ( typeof ret === "string" ) {
+                                       return ret.replace( rreturn, "" );
+                               }
+
+                               // Handle cases where value is null/undef or number
+                               return ret == null ? "" : ret;
+                       }
+
+                       return;
+               }
+
+               isFunction = jQuery.isFunction( value );
+
+               return this.each( function( i ) {
+                       var val;
+
+                       if ( this.nodeType !== 1 ) {
+                               return;
+                       }
+
+                       if ( isFunction ) {
+                               val = value.call( this, i, jQuery( this ).val() );
+                       } else {
+                               val = value;
+                       }
+
+                       // Treat null/undefined as ""; convert numbers to string
+                       if ( val == null ) {
+                               val = "";
+
+                       } else if ( typeof val === "number" ) {
+                               val += "";
+
+                       } else if ( Array.isArray( val ) ) {
+                               val = jQuery.map( val, function( value ) {
+                                       return value == null ? "" : value + "";
+                               } );
+                       }
+
+                       hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];
+
+                       // If set returns undefined, fall back to normal setting
+                       if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) {
+                               this.value = val;
+                       }
+               } );
+       }
+} );
+
+jQuery.extend( {
+       valHooks: {
+               option: {
+                       get: function( elem ) {
+
+                               var val = jQuery.find.attr( elem, "value" );
+                               return val != null ?
+                                       val :
+
+                                       // Support: IE <=10 - 11 only
+                                       // option.text throws exceptions (#14686, #14858)
+                                       // Strip and collapse whitespace
+                                       // https://html.spec.whatwg.org/#strip-and-collapse-whitespace
+                                       stripAndCollapse( jQuery.text( elem ) );
+                       }
+               },
+               select: {
+                       get: function( elem ) {
+                               var value, option, i,
+                                       options = elem.options,
+                                       index = elem.selectedIndex,
+                                       one = elem.type === "select-one",
+                                       values = one ? null : [],
+                                       max = one ? index + 1 : options.length;
+
+                               if ( index < 0 ) {
+                                       i = max;
+
+                               } else {
+                                       i = one ? index : 0;
+                               }
+
+                               // Loop through all the selected options
+                               for ( ; i < max; i++ ) {
+                                       option = options[ i ];
+
+                                       // Support: IE <=9 only
+                                       // IE8-9 doesn't update selected after form reset (#2551)
+                                       if ( ( option.selected || i === index ) &&
+
+                                                       // Don't return options that are disabled or in a disabled optgroup
+                                                       !option.disabled &&
+                                                       ( !option.parentNode.disabled ||
+                                                               !nodeName( option.parentNode, "optgroup" ) ) ) {
+
+                                               // Get the specific value for the option
+                                               value = jQuery( option ).val();
+
+                                               // We don't need an array for one selects
+                                               if ( one ) {
+                                                       return value;
+                                               }
+
+                                               // Multi-Selects return an array
+                                               values.push( value );
+                                       }
+                               }
+
+                               return values;
+                       },
+
+                       set: function( elem, value ) {
+                               var optionSet, option,
+                                       options = elem.options,
+                                       values = jQuery.makeArray( value ),
+                                       i = options.length;
+
+                               while ( i-- ) {
+                                       option = options[ i ];
+
+                                       /* eslint-disable no-cond-assign */
+
+                                       if ( option.selected =
+                                               jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1
+                                       ) {
+                                               optionSet = true;
+                                       }
+
+                                       /* eslint-enable no-cond-assign */
+                               }
+
+                               // Force browsers to behave consistently when non-matching value is set
+                               if ( !optionSet ) {
+                                       elem.selectedIndex = -1;
+                               }
+                               return values;
+                       }
+               }
+       }
+} );
+
+// Radios and checkboxes getter/setter
+jQuery.each( [ "radio", "checkbox" ], function() {
+       jQuery.valHooks[ this ] = {
+               set: function( elem, value ) {
+                       if ( Array.isArray( value ) ) {
+                               return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );
+                       }
+               }
+       };
+       if ( !support.checkOn ) {
+               jQuery.valHooks[ this ].get = function( elem ) {
+                       return elem.getAttribute( "value" ) === null ? "on" : elem.value;
+               };
+       }
+} );
+
+
+
+
+// Return jQuery for attributes-only inclusion
+
+
+var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/;
+
+jQuery.extend( jQuery.event, {
+
+       trigger: function( event, data, elem, onlyHandlers ) {
+
+               var i, cur, tmp, bubbleType, ontype, handle, special,
+                       eventPath = [ elem || document ],
+                       type = hasOwn.call( event, "type" ) ? event.type : event,
+                       namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : [];
+
+               cur = tmp = elem = elem || document;
+
+               // Don't do events on text and comment nodes
+               if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
+                       return;
+               }
+
+               // focus/blur morphs to focusin/out; ensure we're not firing them right now
+               if ( rfocusMorph.test( type + jQuery.event.triggered ) ) {
+                       return;
+               }
+
+               if ( type.indexOf( "." ) > -1 ) {
+
+                       // Namespaced trigger; create a regexp to match event type in handle()
+                       namespaces = type.split( "." );
+                       type = namespaces.shift();
+                       namespaces.sort();
+               }
+               ontype = type.indexOf( ":" ) < 0 && "on" + type;
+
+               // Caller can pass in a jQuery.Event object, Object, or just an event type string
+               event = event[ jQuery.expando ] ?
+                       event :
+                       new jQuery.Event( type, typeof event === "object" && event );
+
+               // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)
+               event.isTrigger = onlyHandlers ? 2 : 3;
+               event.namespace = namespaces.join( "." );
+               event.rnamespace = event.namespace ?
+                       new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) :
+                       null;
+
+               // Clean up the event in case it is being reused
+               event.result = undefined;
+               if ( !event.target ) {
+                       event.target = elem;
+               }
+
+               // Clone any incoming data and prepend the event, creating the handler arg list
+               data = data == null ?
+                       [ event ] :
+                       jQuery.makeArray( data, [ event ] );
+
+               // Allow special events to draw outside the lines
+               special = jQuery.event.special[ type ] || {};
+               if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {
+                       return;
+               }
+
+               // Determine event propagation path in advance, per W3C events spec (#9951)
+               // Bubble up to document, then to window; watch for a global ownerDocument var (#9724)
+               if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {
+
+                       bubbleType = special.delegateType || type;
+                       if ( !rfocusMorph.test( bubbleType + type ) ) {
+                               cur = cur.parentNode;
+                       }
+                       for ( ; cur; cur = cur.parentNode ) {
+                               eventPath.push( cur );
+                               tmp = cur;
+                       }
+
+                       // Only add window if we got to document (e.g., not plain obj or detached DOM)
+                       if ( tmp === ( elem.ownerDocument || document ) ) {
+                               eventPath.push( tmp.defaultView || tmp.parentWindow || window );
+                       }
+               }
+
+               // Fire handlers on the event path
+               i = 0;
+               while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {
+
+                       event.type = i > 1 ?
+                               bubbleType :
+                               special.bindType || type;
+
+                       // jQuery handler
+                       handle = ( dataPriv.get( cur, "events" ) || {} )[ event.type ] &&
+                               dataPriv.get( cur, "handle" );
+                       if ( handle ) {
+                               handle.apply( cur, data );
+                       }
+
+                       // Native handler
+                       handle = ontype && cur[ ontype ];
+                       if ( handle && handle.apply && acceptData( cur ) ) {
+                               event.result = handle.apply( cur, data );
+                               if ( event.result === false ) {
+                                       event.preventDefault();
+                               }
+                       }
+               }
+               event.type = type;
+
+               // If nobody prevented the default action, do it now
+               if ( !onlyHandlers && !event.isDefaultPrevented() ) {
+
+                       if ( ( !special._default ||
+                               special._default.apply( eventPath.pop(), data ) === false ) &&
+                               acceptData( elem ) ) {
+
+                               // Call a native DOM method on the target with the same name as the event.
+                               // Don't do default actions on window, that's where global variables be (#6170)
+                               if ( ontype && jQuery.isFunction( elem[ type ] ) && !jQuery.isWindow( elem ) ) {
+
+                                       // Don't re-trigger an onFOO event when we call its FOO() method
+                                       tmp = elem[ ontype ];
+
+                                       if ( tmp ) {
+                                               elem[ ontype ] = null;
+                                       }
+
+                                       // Prevent re-triggering of the same event, since we already bubbled it above
+                                       jQuery.event.triggered = type;
+                                       elem[ type ]();
+                                       jQuery.event.triggered = undefined;
+
+                                       if ( tmp ) {
+                                               elem[ ontype ] = tmp;
+                                       }
+                               }
+                       }
+               }
+
+               return event.result;
+       },
+
+       // Piggyback on a donor event to simulate a different one
+       // Used only for `focus(in | out)` events
+       simulate: function( type, elem, event ) {
+               var e = jQuery.extend(
+                       new jQuery.Event(),
+                       event,
+                       {
+                               type: type,
+                               isSimulated: true
+                       }
+               );
+
+               jQuery.event.trigger( e, null, elem );
+       }
+
+} );
+
+jQuery.fn.extend( {
+
+       trigger: function( type, data ) {
+               return this.each( function() {
+                       jQuery.event.trigger( type, data, this );
+               } );
+       },
+       triggerHandler: function( type, data ) {
+               var elem = this[ 0 ];
+               if ( elem ) {
+                       return jQuery.event.trigger( type, data, elem, true );
+               }
+       }
+} );
+
+
+jQuery.each( ( "blur focus focusin focusout resize scroll click dblclick " +
+       "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
+       "change select submit keydown keypress keyup contextmenu" ).split( " " ),
+       function( i, name ) {
+
+       // Handle event binding
+       jQuery.fn[ name ] = function( data, fn ) {
+               return arguments.length > 0 ?
+                       this.on( name, null, data, fn ) :
+                       this.trigger( name );
+       };
+} );
+
+jQuery.fn.extend( {
+       hover: function( fnOver, fnOut ) {
+               return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
+       }
+} );
+
+
+
+
+support.focusin = "onfocusin" in window;
+
+
+// Support: Firefox <=44
+// Firefox doesn't have focus(in | out) events
+// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787
+//
+// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1
+// focus(in | out) events fire after focus & blur events,
+// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order
+// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857
+if ( !support.focusin ) {
+       jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) {
+
+               // Attach a single capturing handler on the document while someone wants focusin/focusout
+               var handler = function( event ) {
+                       jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) );
+               };
+
+               jQuery.event.special[ fix ] = {
+                       setup: function() {
+                               var doc = this.ownerDocument || this,
+                                       attaches = dataPriv.access( doc, fix );
+
+                               if ( !attaches ) {
+                                       doc.addEventListener( orig, handler, true );
+                               }
+                               dataPriv.access( doc, fix, ( attaches || 0 ) + 1 );
+                       },
+                       teardown: function() {
+                               var doc = this.ownerDocument || this,
+                                       attaches = dataPriv.access( doc, fix ) - 1;
+
+                               if ( !attaches ) {
+                                       doc.removeEventListener( orig, handler, true );
+                                       dataPriv.remove( doc, fix );
+
+                               } else {
+                                       dataPriv.access( doc, fix, attaches );
+                               }
+                       }
+               };
+       } );
+}
+var location = window.location;
+
+var nonce = jQuery.now();
+
+var rquery = ( /\?/ );
+
+
+
+// Cross-browser xml parsing
+jQuery.parseXML = function( data ) {
+       var xml;
+       if ( !data || typeof data !== "string" ) {
+               return null;
+       }
+
+       // Support: IE 9 - 11 only
+       // IE throws on parseFromString with invalid input.
+       try {
+               xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" );
+       } catch ( e ) {
+               xml = undefined;
+       }
+
+       if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) {
+               jQuery.error( "Invalid XML: " + data );
+       }
+       return xml;
+};
+
+
+var
+       rbracket = /\[\]$/,
+       rCRLF = /\r?\n/g,
+       rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,
+       rsubmittable = /^(?:input|select|textarea|keygen)/i;
+
+function buildParams( prefix, obj, traditional, add ) {
+       var name;
+
+       if ( Array.isArray( obj ) ) {
+
+               // Serialize array item.
+               jQuery.each( obj, function( i, v ) {
+                       if ( traditional || rbracket.test( prefix ) ) {
+
+                               // Treat each array item as a scalar.
+                               add( prefix, v );
+
+                       } else {
+
+                               // Item is non-scalar (array or object), encode its numeric index.
+                               buildParams(
+                                       prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]",
+                                       v,
+                                       traditional,
+                                       add
+                               );
+                       }
+               } );
+
+       } else if ( !traditional && jQuery.type( obj ) === "object" ) {
+
+               // Serialize object item.
+               for ( name in obj ) {
+                       buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
+               }
+
+       } else {
+
+               // Serialize scalar item.
+               add( prefix, obj );
+       }
+}
+
+// Serialize an array of form elements or a set of
+// key/values into a query string
+jQuery.param = function( a, traditional ) {
+       var prefix,
+               s = [],
+               add = function( key, valueOrFunction ) {
+
+                       // If value is a function, invoke it and use its return value
+                       var value = jQuery.isFunction( valueOrFunction ) ?
+                               valueOrFunction() :
+                               valueOrFunction;
+
+                       s[ s.length ] = encodeURIComponent( key ) + "=" +
+                               encodeURIComponent( value == null ? "" : value );
+               };
+
+       // If an array was passed in, assume that it is an array of form elements.
+       if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
+
+               // Serialize the form elements
+               jQuery.each( a, function() {
+                       add( this.name, this.value );
+               } );
+
+       } else {
+
+               // If traditional, encode the "old" way (the way 1.3.2 or older
+               // did it), otherwise encode params recursively.
+               for ( prefix in a ) {
+                       buildParams( prefix, a[ prefix ], traditional, add );
+               }
+       }
+
+       // Return the resulting serialization
+       return s.join( "&" );
+};
+
+jQuery.fn.extend( {
+       serialize: function() {
+               return jQuery.param( this.serializeArray() );
+       },
+       serializeArray: function() {
+               return this.map( function() {
+
+                       // Can add propHook for "elements" to filter or add form elements
+                       var elements = jQuery.prop( this, "elements" );
+                       return elements ? jQuery.makeArray( elements ) : this;
+               } )
+               .filter( function() {
+                       var type = this.type;
+
+                       // Use .is( ":disabled" ) so that fieldset[disabled] works
+                       return this.name && !jQuery( this ).is( ":disabled" ) &&
+                               rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&
+                               ( this.checked || !rcheckableType.test( type ) );
+               } )
+               .map( function( i, elem ) {
+                       var val = jQuery( this ).val();
+
+                       if ( val == null ) {
+                               return null;
+                       }
+
+                       if ( Array.isArray( val ) ) {
+                               return jQuery.map( val, function( val ) {
+                                       return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
+                               } );
+                       }
+
+                       return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
+               } ).get();
+       }
+} );
+
+
+var
+       r20 = /%20/g,
+       rhash = /#.*$/,
+       rantiCache = /([?&])_=[^&]*/,
+       rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg,
+
+       // #7653, #8125, #8152: local protocol detection
+       rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,
+       rnoContent = /^(?:GET|HEAD)$/,
+       rprotocol = /^\/\//,
+
+       /* Prefilters
+        * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
+        * 2) These are called:
+        *    - BEFORE asking for a transport
+        *    - AFTER param serialization (s.data is a string if s.processData is true)
+        * 3) key is the dataType
+        * 4) the catchall symbol "*" can be used
+        * 5) execution will start with transport dataType and THEN continue down to "*" if needed
+        */
+       prefilters = {},
+
+       /* Transports bindings
+        * 1) key is the dataType
+        * 2) the catchall symbol "*" can be used
+        * 3) selection will start with transport dataType and THEN go to "*" if needed
+        */
+       transports = {},
+
+       // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression
+       allTypes = "*/".concat( "*" ),
+
+       // Anchor tag for parsing the document origin
+       originAnchor = document.createElement( "a" );
+       originAnchor.href = location.href;
+
+// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
+function addToPrefiltersOrTransports( structure ) {
+
+       // dataTypeExpression is optional and defaults to "*"
+       return function( dataTypeExpression, func ) {
+
+               if ( typeof dataTypeExpression !== "string" ) {
+                       func = dataTypeExpression;
+                       dataTypeExpression = "*";
+               }
+
+               var dataType,
+                       i = 0,
+                       dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || [];
+
+               if ( jQuery.isFunction( func ) ) {
+
+                       // For each dataType in the dataTypeExpression
+                       while ( ( dataType = dataTypes[ i++ ] ) ) {
+
+                               // Prepend if requested
+                               if ( dataType[ 0 ] === "+" ) {
+                                       dataType = dataType.slice( 1 ) || "*";
+                                       ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );
+
+                               // Otherwise append
+                               } else {
+                                       ( structure[ dataType ] = structure[ dataType ] || [] ).push( func );
+                               }
+                       }
+               }
+       };
+}
+
+// Base inspection function for prefilters and transports
+function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {
+
+       var inspected = {},
+               seekingTransport = ( structure === transports );
+
+       function inspect( dataType ) {
+               var selected;
+               inspected[ dataType ] = true;
+               jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {
+                       var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );
+                       if ( typeof dataTypeOrTransport === "string" &&
+                               !seekingTransport && !inspected[ dataTypeOrTransport ] ) {
+
+                               options.dataTypes.unshift( dataTypeOrTransport );
+                               inspect( dataTypeOrTransport );
+                               return false;
+                       } else if ( seekingTransport ) {
+                               return !( selected = dataTypeOrTransport );
+                       }
+               } );
+               return selected;
+       }
+
+       return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" );
+}
+
+// A special extend for ajax options
+// that takes "flat" options (not to be deep extended)
+// Fixes #9887
+function ajaxExtend( target, src ) {
+       var key, deep,
+               flatOptions = jQuery.ajaxSettings.flatOptions || {};
+
+       for ( key in src ) {
+               if ( src[ key ] !== undefined ) {
+                       ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];
+               }
+       }
+       if ( deep ) {
+               jQuery.extend( true, target, deep );
+       }
+
+       return target;
+}
+
+/* Handles responses to an ajax request:
+ * - finds the right dataType (mediates between content-type and expected dataType)
+ * - returns the corresponding response
+ */
+function ajaxHandleResponses( s, jqXHR, responses ) {
+
+       var ct, type, finalDataType, firstDataType,
+               contents = s.contents,
+               dataTypes = s.dataTypes;
+
+       // Remove auto dataType and get content-type in the process
+       while ( dataTypes[ 0 ] === "*" ) {
+               dataTypes.shift();
+               if ( ct === undefined ) {
+                       ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" );
+               }
+       }
+
+       // Check if we're dealing with a known content-type
+       if ( ct ) {
+               for ( type in contents ) {
+                       if ( contents[ type ] && contents[ type ].test( ct ) ) {
+                               dataTypes.unshift( type );
+                               break;
+                       }
+               }
+       }
+
+       // Check to see if we have a response for the expected dataType
+       if ( dataTypes[ 0 ] in responses ) {
+               finalDataType = dataTypes[ 0 ];
+       } else {
+
+               // Try convertible dataTypes
+               for ( type in responses ) {
+                       if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) {
+                               finalDataType = type;
+                               break;
+                       }
+                       if ( !firstDataType ) {
+                               firstDataType = type;
+                       }
+               }
+
+               // Or just use first one
+               finalDataType = finalDataType || firstDataType;
+       }
+
+       // If we found a dataType
+       // We add the dataType to the list if needed
+       // and return the corresponding response
+       if ( finalDataType ) {
+               if ( finalDataType !== dataTypes[ 0 ] ) {
+                       dataTypes.unshift( finalDataType );
+               }
+               return responses[ finalDataType ];
+       }
+}
+
+/* Chain conversions given the request and the original response
+ * Also sets the responseXXX fields on the jqXHR instance
+ */
+function ajaxConvert( s, response, jqXHR, isSuccess ) {
+       var conv2, current, conv, tmp, prev,
+               converters = {},
+
+               // Work with a copy of dataTypes in case we need to modify it for conversion
+               dataTypes = s.dataTypes.slice();
+
+       // Create converters map with lowercased keys
+       if ( dataTypes[ 1 ] ) {
+               for ( conv in s.converters ) {
+                       converters[ conv.toLowerCase() ] = s.converters[ conv ];
+               }
+       }
+
+       current = dataTypes.shift();
+
+       // Convert to each sequential dataType
+       while ( current ) {
+
+               if ( s.responseFields[ current ] ) {
+                       jqXHR[ s.responseFields[ current ] ] = response;
+               }
+
+               // Apply the dataFilter if provided
+               if ( !prev && isSuccess && s.dataFilter ) {
+                       response = s.dataFilter( response, s.dataType );
+               }
+
+               prev = current;
+               current = dataTypes.shift();
+
+               if ( current ) {
+
+                       // There's only work to do if current dataType is non-auto
+                       if ( current === "*" ) {
+
+                               current = prev;
+
+                       // Convert response if prev dataType is non-auto and differs from current
+                       } else if ( prev !== "*" && prev !== current ) {
+
+                               // Seek a direct converter
+                               conv = converters[ prev + " " + current ] || converters[ "* " + current ];
+
+                               // If none found, seek a pair
+                               if ( !conv ) {
+                                       for ( conv2 in converters ) {
+
+                                               // If conv2 outputs current
+                                               tmp = conv2.split( " " );
+                                               if ( tmp[ 1 ] === current ) {
+
+                                                       // If prev can be converted to accepted input
+                                                       conv = converters[ prev + " " + tmp[ 0 ] ] ||
+                                                               converters[ "* " + tmp[ 0 ] ];
+                                                       if ( conv ) {
+
+                                                               // Condense equivalence converters
+                                                               if ( conv === true ) {
+                                                                       conv = converters[ conv2 ];
+
+                                                               // Otherwise, insert the intermediate dataType
+                                                               } else if ( converters[ conv2 ] !== true ) {
+                                                                       current = tmp[ 0 ];
+                                                                       dataTypes.unshift( tmp[ 1 ] );
+                                                               }
+                                                               break;
+                                                       }
+                                               }
+                                       }
+                               }
+
+                               // Apply converter (if not an equivalence)
+                               if ( conv !== true ) {
+
+                                       // Unless errors are allowed to bubble, catch and return them
+                                       if ( conv && s.throws ) {
+                                               response = conv( response );
+                                       } else {
+                                               try {
+                                                       response = conv( response );
+                                               } catch ( e ) {
+                                                       return {
+                                                               state: "parsererror",
+                                                               error: conv ? e : "No conversion from " + prev + " to " + current
+                                                       };
+                                               }
+                                       }
+                               }
+                       }
+               }
+       }
+
+       return { state: "success", data: response };
+}
+
+jQuery.extend( {
+
+       // Counter for holding the number of active queries
+       active: 0,
+
+       // Last-Modified header cache for next request
+       lastModified: {},
+       etag: {},
+
+       ajaxSettings: {
+               url: location.href,
+               type: "GET",
+               isLocal: rlocalProtocol.test( location.protocol ),
+               global: true,
+               processData: true,
+               async: true,
+               contentType: "application/x-www-form-urlencoded; charset=UTF-8",
+
+               /*
+               timeout: 0,
+               data: null,
+               dataType: null,
+               username: null,
+               password: null,
+               cache: null,
+               throws: false,
+               traditional: false,
+               headers: {},
+               */
+
+               accepts: {
+                       "*": allTypes,
+                       text: "text/plain",
+                       html: "text/html",
+                       xml: "application/xml, text/xml",
+                       json: "application/json, text/javascript"
+               },
+
+               contents: {
+                       xml: /\bxml\b/,
+                       html: /\bhtml/,
+                       json: /\bjson\b/
+               },
+
+               responseFields: {
+                       xml: "responseXML",
+                       text: "responseText",
+                       json: "responseJSON"
+               },
+
+               // Data converters
+               // Keys separate source (or catchall "*") and destination types with a single space
+               converters: {
+
+                       // Convert anything to text
+                       "* text": String,
+
+                       // Text to html (true = no transformation)
+                       "text html": true,
+
+                       // Evaluate text as a json expression
+                       "text json": JSON.parse,
+
+                       // Parse text as xml
+                       "text xml": jQuery.parseXML
+               },
+
+               // For options that shouldn't be deep extended:
+               // you can add your own custom options here if
+               // and when you create one that shouldn't be
+               // deep extended (see ajaxExtend)
+               flatOptions: {
+                       url: true,
+                       context: true
+               }
+       },
+
+       // Creates a full fledged settings object into target
+       // with both ajaxSettings and settings fields.
+       // If target is omitted, writes into ajaxSettings.
+       ajaxSetup: function( target, settings ) {
+               return settings ?
+
+                       // Building a settings object
+                       ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :
+
+                       // Extending ajaxSettings
+                       ajaxExtend( jQuery.ajaxSettings, target );
+       },
+
+       ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),
+       ajaxTransport: addToPrefiltersOrTransports( transports ),
+
+       // Main method
+       ajax: function( url, options ) {
+
+               // If url is an object, simulate pre-1.5 signature
+               if ( typeof url === "object" ) {
+                       options = url;
+                       url = undefined;
+               }
+
+               // Force options to be an object
+               options = options || {};
+
+               var transport,
+
+                       // URL without anti-cache param
+                       cacheURL,
+
+                       // Response headers
+                       responseHeadersString,
+                       responseHeaders,
+
+                       // timeout handle
+                       timeoutTimer,
+
+                       // Url cleanup var
+                       urlAnchor,
+
+                       // Request state (becomes false upon send and true upon completion)
+                       completed,
+
+                       // To know if global events are to be dispatched
+                       fireGlobals,
+
+                       // Loop variable
+                       i,
+
+                       // uncached part of the url
+                       uncached,
+
+                       // Create the final options object
+                       s = jQuery.ajaxSetup( {}, options ),
+
+                       // Callbacks context
+                       callbackContext = s.context || s,
+
+                       // Context for global events is callbackContext if it is a DOM node or jQuery collection
+                       globalEventContext = s.context &&
+                               ( callbackContext.nodeType || callbackContext.jquery ) ?
+                                       jQuery( callbackContext ) :
+                                       jQuery.event,
+
+                       // Deferreds
+                       deferred = jQuery.Deferred(),
+                       completeDeferred = jQuery.Callbacks( "once memory" ),
+
+                       // Status-dependent callbacks
+                       statusCode = s.statusCode || {},
+
+                       // Headers (they are sent all at once)
+                       requestHeaders = {},
+                       requestHeadersNames = {},
+
+                       // Default abort message
+                       strAbort = "canceled",
+
+                       // Fake xhr
+                       jqXHR = {
+                               readyState: 0,
+
+                               // Builds headers hashtable if needed
+                               getResponseHeader: function( key ) {
+                                       var match;
+                                       if ( completed ) {
+                                               if ( !responseHeaders ) {
+                                                       responseHeaders = {};
+                                                       while ( ( match = rheaders.exec( responseHeadersString ) ) ) {
+                                                               responseHeaders[ match[ 1 ].toLowerCase() ] = match[ 2 ];
+                                                       }
+                                               }
+                                               match = responseHeaders[ key.toLowerCase() ];
+                                       }
+                                       return match == null ? null : match;
+                               },
+
+                               // Raw string
+                               getAllResponseHeaders: function() {
+                                       return completed ? responseHeadersString : null;
+                               },
+
+                               // Caches the header
+                               setRequestHeader: function( name, value ) {
+                                       if ( completed == null ) {
+                                               name = requestHeadersNames[ name.toLowerCase() ] =
+                                                       requestHeadersNames[ name.toLowerCase() ] || name;
+                                               requestHeaders[ name ] = value;
+                                       }
+                                       return this;
+                               },
+
+                               // Overrides response content-type header
+                               overrideMimeType: function( type ) {
+                                       if ( completed == null ) {
+                                               s.mimeType = type;
+                                       }
+                                       return this;
+                               },
+
+                               // Status-dependent callbacks
+                               statusCode: function( map ) {
+                                       var code;
+                                       if ( map ) {
+                                               if ( completed ) {
+
+                                                       // Execute the appropriate callbacks
+                                                       jqXHR.always( map[ jqXHR.status ] );
+                                               } else {
+
+                                                       // Lazy-add the new callbacks in a way that preserves old ones
+                                                       for ( code in map ) {
+                                                               statusCode[ code ] = [ statusCode[ code ], map[ code ] ];
+                                                       }
+                                               }
+                                       }
+                                       return this;
+                               },
+
+                               // Cancel the request
+                               abort: function( statusText ) {
+                                       var finalText = statusText || strAbort;
+                                       if ( transport ) {
+                                               transport.abort( finalText );
+                                       }
+                                       done( 0, finalText );
+                                       return this;
+                               }
+                       };
+
+               // Attach deferreds
+               deferred.promise( jqXHR );
+
+               // Add protocol if not provided (prefilters might expect it)
+               // Handle falsy url in the settings object (#10093: consistency with old signature)
+               // We also use the url parameter if available
+               s.url = ( ( url || s.url || location.href ) + "" )
+                       .replace( rprotocol, location.protocol + "//" );
+
+               // Alias method option to type as per ticket #12004
+               s.type = options.method || options.type || s.method || s.type;
+
+               // Extract dataTypes list
+               s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ];
+
+               // A cross-domain request is in order when the origin doesn't match the current origin.
+               if ( s.crossDomain == null ) {
+                       urlAnchor = document.createElement( "a" );
+
+                       // Support: IE <=8 - 11, Edge 12 - 13
+                       // IE throws exception on accessing the href property if url is malformed,
+                       // e.g. http://example.com:80x/
+                       try {
+                               urlAnchor.href = s.url;
+
+                               // Support: IE <=8 - 11 only
+                               // Anchor's host property isn't correctly set when s.url is relative
+                               urlAnchor.href = urlAnchor.href;
+                               s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !==
+                                       urlAnchor.protocol + "//" + urlAnchor.host;
+                       } catch ( e ) {
+
+                               // If there is an error parsing the URL, assume it is crossDomain,
+                               // it can be rejected by the transport if it is invalid
+                               s.crossDomain = true;
+                       }
+               }
+
+               // Convert data if not already a string
+               if ( s.data && s.processData && typeof s.data !== "string" ) {
+                       s.data = jQuery.param( s.data, s.traditional );
+               }
+
+               // Apply prefilters
+               inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
+
+               // If request was aborted inside a prefilter, stop there
+               if ( completed ) {
+                       return jqXHR;
+               }
+
+               // We can fire global events as of now if asked to
+               // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)
+               fireGlobals = jQuery.event && s.global;
+
+               // Watch for a new set of requests
+               if ( fireGlobals && jQuery.active++ === 0 ) {
+                       jQuery.event.trigger( "ajaxStart" );
+               }
+
+               // Uppercase the type
+               s.type = s.type.toUpperCase();
+
+               // Determine if request has content
+               s.hasContent = !rnoContent.test( s.type );
+
+               // Save the URL in case we're toying with the If-Modified-Since
+               // and/or If-None-Match header later on
+               // Remove hash to simplify url manipulation
+               cacheURL = s.url.replace( rhash, "" );
+
+               // More options handling for requests with no content
+               if ( !s.hasContent ) {
+
+                       // Remember the hash so we can put it back
+                       uncached = s.url.slice( cacheURL.length );
+
+                       // If data is available, append data to url
+                       if ( s.data ) {
+                               cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data;
+
+                               // #9682: remove data so that it's not used in an eventual retry
+                               delete s.data;
+                       }
+
+                       // Add or update anti-cache param if needed
+                       if ( s.cache === false ) {
+                               cacheURL = cacheURL.replace( rantiCache, "$1" );
+                               uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce++ ) + uncached;
+                       }
+
+                       // Put hash and anti-cache on the URL that will be requested (gh-1732)
+                       s.url = cacheURL + uncached;
+
+               // Change '%20' to '+' if this is encoded form body content (gh-2658)
+               } else if ( s.data && s.processData &&
+                       ( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) {
+                       s.data = s.data.replace( r20, "+" );
+               }
+
+               // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
+               if ( s.ifModified ) {
+                       if ( jQuery.lastModified[ cacheURL ] ) {
+                               jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] );
+                       }
+                       if ( jQuery.etag[ cacheURL ] ) {
+                               jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] );
+                       }
+               }
+
+               // Set the correct header, if data is being sent
+               if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
+                       jqXHR.setRequestHeader( "Content-Type", s.contentType );
+               }
+
+               // Set the Accepts header for the server, depending on the dataType
+               jqXHR.setRequestHeader(
+                       "Accept",
+                       s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?
+                               s.accepts[ s.dataTypes[ 0 ] ] +
+                                       ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) :
+                               s.accepts[ "*" ]
+               );
+
+               // Check for headers option
+               for ( i in s.headers ) {
+                       jqXHR.setRequestHeader( i, s.headers[ i ] );
+               }
+
+               // Allow custom headers/mimetypes and early abort
+               if ( s.beforeSend &&
+                       ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {
+
+                       // Abort if not done already and return
+                       return jqXHR.abort();
+               }
+
+               // Aborting is no longer a cancellation
+               strAbort = "abort";
+
+               // Install callbacks on deferreds
+               completeDeferred.add( s.complete );
+               jqXHR.done( s.success );
+               jqXHR.fail( s.error );
+
+               // Get transport
+               transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
+
+               // If no transport, we auto-abort
+               if ( !transport ) {
+                       done( -1, "No Transport" );
+               } else {
+                       jqXHR.readyState = 1;
+
+                       // Send global event
+                       if ( fireGlobals ) {
+                               globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
+                       }
+
+                       // If request was aborted inside ajaxSend, stop there
+                       if ( completed ) {
+                               return jqXHR;
+                       }
+
+                       // Timeout
+                       if ( s.async && s.timeout > 0 ) {
+                               timeoutTimer = window.setTimeout( function() {
+                                       jqXHR.abort( "timeout" );
+                               }, s.timeout );
+                       }
+
+                       try {
+                               completed = false;
+                               transport.send( requestHeaders, done );
+                       } catch ( e ) {
+
+                               // Rethrow post-completion exceptions
+                               if ( completed ) {
+                                       throw e;
+                               }
+
+                               // Propagate others as results
+                               done( -1, e );
+                       }
+               }
+
+               // Callback for when everything is done
+               function done( status, nativeStatusText, responses, headers ) {
+                       var isSuccess, success, error, response, modified,
+                               statusText = nativeStatusText;
+
+                       // Ignore repeat invocations
+                       if ( completed ) {
+                               return;
+                       }
+
+                       completed = true;
+
+                       // Clear timeout if it exists
+                       if ( timeoutTimer ) {
+                               window.clearTimeout( timeoutTimer );
+                       }
+
+                       // Dereference transport for early garbage collection
+                       // (no matter how long the jqXHR object will be used)
+                       transport = undefined;
+
+                       // Cache response headers
+                       responseHeadersString = headers || "";
+
+                       // Set readyState
+                       jqXHR.readyState = status > 0 ? 4 : 0;
+
+                       // Determine if successful
+                       isSuccess = status >= 200 && status < 300 || status === 304;
+
+                       // Get response data
+                       if ( responses ) {
+                               response = ajaxHandleResponses( s, jqXHR, responses );
+                       }
+
+                       // Convert no matter what (that way responseXXX fields are always set)
+                       response = ajaxConvert( s, response, jqXHR, isSuccess );
+
+                       // If successful, handle type chaining
+                       if ( isSuccess ) {
+
+                               // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
+                               if ( s.ifModified ) {
+                                       modified = jqXHR.getResponseHeader( "Last-Modified" );
+                                       if ( modified ) {
+                                               jQuery.lastModified[ cacheURL ] = modified;
+                                       }
+                                       modified = jqXHR.getResponseHeader( "etag" );
+                                       if ( modified ) {
+                                               jQuery.etag[ cacheURL ] = modified;
+                                       }
+                               }
+
+                               // if no content
+                               if ( status === 204 || s.type === "HEAD" ) {
+                                       statusText = "nocontent";
+
+                               // if not modified
+                               } else if ( status === 304 ) {
+                                       statusText = "notmodified";
+
+                               // If we have data, let's convert it
+                               } else {
+                                       statusText = response.state;
+                                       success = response.data;
+                                       error = response.error;
+                                       isSuccess = !error;
+                               }
+                       } else {
+
+                               // Extract error from statusText and normalize for non-aborts
+                               error = statusText;
+                               if ( status || !statusText ) {
+                                       statusText = "error";
+                                       if ( status < 0 ) {
+                                               status = 0;
+                                       }
+                               }
+                       }
+
+                       // Set data for the fake xhr object
+                       jqXHR.status = status;
+                       jqXHR.statusText = ( nativeStatusText || statusText ) + "";
+
+                       // Success/Error
+                       if ( isSuccess ) {
+                               deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
+                       } else {
+                               deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
+                       }
+
+                       // Status-dependent callbacks
+                       jqXHR.statusCode( statusCode );
+                       statusCode = undefined;
+
+                       if ( fireGlobals ) {
+                               globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError",
+                                       [ jqXHR, s, isSuccess ? success : error ] );
+                       }
+
+                       // Complete
+                       completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );
+
+                       if ( fireGlobals ) {
+                               globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] );
+
+                               // Handle the global AJAX counter
+                               if ( !( --jQuery.active ) ) {
+                                       jQuery.event.trigger( "ajaxStop" );
+                               }
+                       }
+               }
+
+               return jqXHR;
+       },
+
+       getJSON: function( url, data, callback ) {
+               return jQuery.get( url, data, callback, "json" );
+       },
+
+       getScript: function( url, callback ) {
+               return jQuery.get( url, undefined, callback, "script" );
+       }
+} );
+
+jQuery.each( [ "get", "post" ], function( i, method ) {
+       jQuery[ method ] = function( url, data, callback, type ) {
+
+               // Shift arguments if data argument was omitted
+               if ( jQuery.isFunction( data ) ) {
+                       type = type || callback;
+                       callback = data;
+                       data = undefined;
+               }
+
+               // The url can be an options object (which then must have .url)
+               return jQuery.ajax( jQuery.extend( {
+                       url: url,
+                       type: method,
+                       dataType: type,
+                       data: data,
+                       success: callback
+               }, jQuery.isPlainObject( url ) && url ) );
+       };
+} );
+
+
+jQuery._evalUrl = function( url ) {
+       return jQuery.ajax( {
+               url: url,
+
+               // Make this explicit, since user can override this through ajaxSetup (#11264)
+               type: "GET",
+               dataType: "script",
+               cache: true,
+               async: false,
+               global: false,
+               "throws": true
+       } );
+};
+
+
+jQuery.fn.extend( {
+       wrapAll: function( html ) {
+               var wrap;
+
+               if ( this[ 0 ] ) {
+                       if ( jQuery.isFunction( html ) ) {
+                               html = html.call( this[ 0 ] );
+                       }
+
+                       // The elements to wrap the target around
+                       wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );
+
+                       if ( this[ 0 ].parentNode ) {
+                               wrap.insertBefore( this[ 0 ] );
+                       }
+
+                       wrap.map( function() {
+                               var elem = this;
+
+                               while ( elem.firstElementChild ) {
+                                       elem = elem.firstElementChild;
+                               }
+
+                               return elem;
+                       } ).append( this );
+               }
+
+               return this;
+       },
+
+       wrapInner: function( html ) {
+               if ( jQuery.isFunction( html ) ) {
+                       return this.each( function( i ) {
+                               jQuery( this ).wrapInner( html.call( this, i ) );
+                       } );
+               }
+
+               return this.each( function() {
+                       var self = jQuery( this ),
+                               contents = self.contents();
+
+                       if ( contents.length ) {
+                               contents.wrapAll( html );
+
+                       } else {
+                               self.append( html );
+                       }
+               } );
+       },
+
+       wrap: function( html ) {
+               var isFunction = jQuery.isFunction( html );
+
+               return this.each( function( i ) {
+                       jQuery( this ).wrapAll( isFunction ? html.call( this, i ) : html );
+               } );
+       },
+
+       unwrap: function( selector ) {
+               this.parent( selector ).not( "body" ).each( function() {
+                       jQuery( this ).replaceWith( this.childNodes );
+               } );
+               return this;
+       }
+} );
+
+
+jQuery.expr.pseudos.hidden = function( elem ) {
+       return !jQuery.expr.pseudos.visible( elem );
+};
+jQuery.expr.pseudos.visible = function( elem ) {
+       return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );
+};
+
+
+
+
+jQuery.ajaxSettings.xhr = function() {
+       try {
+               return new window.XMLHttpRequest();
+       } catch ( e ) {}
+};
+
+var xhrSuccessStatus = {
+
+               // File protocol always yields status code 0, assume 200
+               0: 200,
+
+               // Support: IE <=9 only
+               // #1450: sometimes IE returns 1223 when it should be 204
+               1223: 204
+       },
+       xhrSupported = jQuery.ajaxSettings.xhr();
+
+support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported );
+support.ajax = xhrSupported = !!xhrSupported;
+
+jQuery.ajaxTransport( function( options ) {
+       var callback, errorCallback;
+
+       // Cross domain only allowed if supported through XMLHttpRequest
+       if ( support.cors || xhrSupported && !options.crossDomain ) {
+               return {
+                       send: function( headers, complete ) {
+                               var i,
+                                       xhr = options.xhr();
+
+                               xhr.open(
+                                       options.type,
+                                       options.url,
+                                       options.async,
+                                       options.username,
+                                       options.password
+                               );
+
+                               // Apply custom fields if provided
+                               if ( options.xhrFields ) {
+                                       for ( i in options.xhrFields ) {
+                                               xhr[ i ] = options.xhrFields[ i ];
+                                       }
+                               }
+
+                               // Override mime type if needed
+                               if ( options.mimeType && xhr.overrideMimeType ) {
+                                       xhr.overrideMimeType( options.mimeType );
+                               }
+
+                               // X-Requested-With header
+                               // For cross-domain requests, seeing as conditions for a preflight are
+                               // akin to a jigsaw puzzle, we simply never set it to be sure.
+                               // (it can always be set on a per-request basis or even using ajaxSetup)
+                               // For same-domain requests, won't change header if already provided.
+                               if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) {
+                                       headers[ "X-Requested-With" ] = "XMLHttpRequest";
+                               }
+
+                               // Set headers
+                               for ( i in headers ) {
+                                       xhr.setRequestHeader( i, headers[ i ] );
+                               }
+
+                               // Callback
+                               callback = function( type ) {
+                                       return function() {
+                                               if ( callback ) {
+                                                       callback = errorCallback = xhr.onload =
+                                                               xhr.onerror = xhr.onabort = xhr.onreadystatechange = null;
+
+                                                       if ( type === "abort" ) {
+                                                               xhr.abort();
+                                                       } else if ( type === "error" ) {
+
+                                                               // Support: IE <=9 only
+                                                               // On a manual native abort, IE9 throws
+                                                               // errors on any property access that is not readyState
+                                                               if ( typeof xhr.status !== "number" ) {
+                                                                       complete( 0, "error" );
+                                                               } else {
+                                                                       complete(
+
+                                                                               // File: protocol always yields status 0; see #8605, #14207
+                                                                               xhr.status,
+                                                                               xhr.statusText
+                                                                       );
+                                                               }
+                                                       } else {
+                                                               complete(
+                                                                       xhrSuccessStatus[ xhr.status ] || xhr.status,
+                                                                       xhr.statusText,
+
+                                                                       // Support: IE <=9 only
+                                                                       // IE9 has no XHR2 but throws on binary (trac-11426)
+                                                                       // For XHR2 non-text, let the caller handle it (gh-2498)
+                                                                       ( xhr.responseType || "text" ) !== "text"  ||
+                                                                       typeof xhr.responseText !== "string" ?
+                                                                               { binary: xhr.response } :
+                                                                               { text: xhr.responseText },
+                                                                       xhr.getAllResponseHeaders()
+                                                               );
+                                                       }
+                                               }
+                                       };
+                               };
+
+                               // Listen to events
+                               xhr.onload = callback();
+                               errorCallback = xhr.onerror = callback( "error" );
+
+                               // Support: IE 9 only
+                               // Use onreadystatechange to replace onabort
+                               // to handle uncaught aborts
+                               if ( xhr.onabort !== undefined ) {
+                                       xhr.onabort = errorCallback;
+                               } else {
+                                       xhr.onreadystatechange = function() {
+
+                                               // Check readyState before timeout as it changes
+                                               if ( xhr.readyState === 4 ) {
+
+                                                       // Allow onerror to be called first,
+                                                       // but that will not handle a native abort
+                                                       // Also, save errorCallback to a variable
+                                                       // as xhr.onerror cannot be accessed
+                                                       window.setTimeout( function() {
+                                                               if ( callback ) {
+                                                                       errorCallback();
+                                                               }
+                                                       } );
+                                               }
+                                       };
+                               }
+
+                               // Create the abort callback
+                               callback = callback( "abort" );
+
+                               try {
+
+                                       // Do send the request (this may raise an exception)
+                                       xhr.send( options.hasContent && options.data || null );
+                               } catch ( e ) {
+
+                                       // #14683: Only rethrow if this hasn't been notified as an error yet
+                                       if ( callback ) {
+                                               throw e;
+                                       }
+                               }
+                       },
+
+                       abort: function() {
+                               if ( callback ) {
+                                       callback();
+                               }
+                       }
+               };
+       }
+} );
+
+
+
+
+// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)
+jQuery.ajaxPrefilter( function( s ) {
+       if ( s.crossDomain ) {
+               s.contents.script = false;
+       }
+} );
+
+// Install script dataType
+jQuery.ajaxSetup( {
+       accepts: {
+               script: "text/javascript, application/javascript, " +
+                       "application/ecmascript, application/x-ecmascript"
+       },
+       contents: {
+               script: /\b(?:java|ecma)script\b/
+       },
+       converters: {
+               "text script": function( text ) {
+                       jQuery.globalEval( text );
+                       return text;
+               }
+       }
+} );
+
+// Handle cache's special case and crossDomain
+jQuery.ajaxPrefilter( "script", function( s ) {
+       if ( s.cache === undefined ) {
+               s.cache = false;
+       }
+       if ( s.crossDomain ) {
+               s.type = "GET";
+       }
+} );
+
+// Bind script tag hack transport
+jQuery.ajaxTransport( "script", function( s ) {
+
+       // This transport only deals with cross domain requests
+       if ( s.crossDomain ) {
+               var script, callback;
+               return {
+                       send: function( _, complete ) {
+                               script = jQuery( "<script>" ).prop( {
+                                       charset: s.scriptCharset,
+                                       src: s.url
+                               } ).on(
+                                       "load error",
+                                       callback = function( evt ) {
+                                               script.remove();
+                                               callback = null;
+                                               if ( evt ) {
+                                                       complete( evt.type === "error" ? 404 : 200, evt.type );
+                                               }
+                                       }
+                               );
+
+                               // Use native DOM manipulation to avoid our domManip AJAX trickery
+                               document.head.appendChild( script[ 0 ] );
+                       },
+                       abort: function() {
+                               if ( callback ) {
+                                       callback();
+                               }
+                       }
+               };
+       }
+} );
+
+
+
+
+var oldCallbacks = [],
+       rjsonp = /(=)\?(?=&|$)|\?\?/;
+
+// Default jsonp settings
+jQuery.ajaxSetup( {
+       jsonp: "callback",
+       jsonpCallback: function() {
+               var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce++ ) );
+               this[ callback ] = true;
+               return callback;
+       }
+} );
+
+// Detect, normalize options and install callbacks for jsonp requests
+jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
+
+       var callbackName, overwritten, responseContainer,
+               jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?
+                       "url" :
+                       typeof s.data === "string" &&
+                               ( s.contentType || "" )
+                                       .indexOf( "application/x-www-form-urlencoded" ) === 0 &&
+                               rjsonp.test( s.data ) && "data"
+               );
+
+       // Handle iff the expected data type is "jsonp" or we have a parameter to set
+       if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) {
+
+               // Get callback name, remembering preexisting value associated with it
+               callbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ?
+                       s.jsonpCallback() :
+                       s.jsonpCallback;
+
+               // Insert callback into url or form data
+               if ( jsonProp ) {
+                       s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName );
+               } else if ( s.jsonp !== false ) {
+                       s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName;
+               }
+
+               // Use data converter to retrieve json after script execution
+               s.converters[ "script json" ] = function() {
+                       if ( !responseContainer ) {
+                               jQuery.error( callbackName + " was not called" );
+                       }
+                       return responseContainer[ 0 ];
+               };
+
+               // Force json dataType
+               s.dataTypes[ 0 ] = "json";
+
+               // Install callback
+               overwritten = window[ callbackName ];
+               window[ callbackName ] = function() {
+                       responseContainer = arguments;
+               };
+
+               // Clean-up function (fires after converters)
+               jqXHR.always( function() {
+
+                       // If previous value didn't exist - remove it
+                       if ( overwritten === undefined ) {
+                               jQuery( window ).removeProp( callbackName );
+
+                       // Otherwise restore preexisting value
+                       } else {
+                               window[ callbackName ] = overwritten;
+                       }
+
+                       // Save back as free
+                       if ( s[ callbackName ] ) {
+
+                               // Make sure that re-using the options doesn't screw things around
+                               s.jsonpCallback = originalSettings.jsonpCallback;
+
+                               // Save the callback name for future use
+                               oldCallbacks.push( callbackName );
+                       }
+
+                       // Call if it was a function and we have a response
+                       if ( responseContainer && jQuery.isFunction( overwritten ) ) {
+                               overwritten( responseContainer[ 0 ] );
+                       }
+
+                       responseContainer = overwritten = undefined;
+               } );
+
+               // Delegate to script
+               return "script";
+       }
+} );
+
+
+
+
+// Support: Safari 8 only
+// In Safari 8 documents created via document.implementation.createHTMLDocument
+// collapse sibling forms: the second one becomes a child of the first one.
+// Because of that, this security measure has to be disabled in Safari 8.
+// https://bugs.webkit.org/show_bug.cgi?id=137337
+support.createHTMLDocument = ( function() {
+       var body = document.implementation.createHTMLDocument( "" ).body;
+       body.innerHTML = "<form></form><form></form>";
+       return body.childNodes.length === 2;
+} )();
+
+
+// Argument "data" should be string of html
+// context (optional): If specified, the fragment will be created in this context,
+// defaults to document
+// keepScripts (optional): If true, will include scripts passed in the html string
+jQuery.parseHTML = function( data, context, keepScripts ) {
+       if ( typeof data !== "string" ) {
+               return [];
+       }
+       if ( typeof context === "boolean" ) {
+               keepScripts = context;
+               context = false;
+       }
+
+       var base, parsed, scripts;
+
+       if ( !context ) {
+
+               // Stop scripts or inline event handlers from being executed immediately
+               // by using document.implementation
+               if ( support.createHTMLDocument ) {
+                       context = document.implementation.createHTMLDocument( "" );
+
+                       // Set the base href for the created document
+                       // so any parsed elements with URLs
+                       // are based on the document's URL (gh-2965)
+                       base = context.createElement( "base" );
+                       base.href = document.location.href;
+                       context.head.appendChild( base );
+               } else {
+                       context = document;
+               }
+       }
+
+       parsed = rsingleTag.exec( data );
+       scripts = !keepScripts && [];
+
+       // Single tag
+       if ( parsed ) {
+               return [ context.createElement( parsed[ 1 ] ) ];
+       }
+
+       parsed = buildFragment( [ data ], context, scripts );
+
+       if ( scripts && scripts.length ) {
+               jQuery( scripts ).remove();
+       }
+
+       return jQuery.merge( [], parsed.childNodes );
+};
+
+
+/**
+ * Load a url into a page
+ */
+jQuery.fn.load = function( url, params, callback ) {
+       var selector, type, response,
+               self = this,
+               off = url.indexOf( " " );
+
+       if ( off > -1 ) {
+               selector = stripAndCollapse( url.slice( off ) );
+               url = url.slice( 0, off );
+       }
+
+       // If it's a function
+       if ( jQuery.isFunction( params ) ) {
+
+               // We assume that it's the callback
+               callback = params;
+               params = undefined;
+
+       // Otherwise, build a param string
+       } else if ( params && typeof params === "object" ) {
+               type = "POST";
+       }
+
+       // If we have elements to modify, make the request
+       if ( self.length > 0 ) {
+               jQuery.ajax( {
+                       url: url,
+
+                       // If "type" variable is undefined, then "GET" method will be used.
+                       // Make value of this field explicit since
+                       // user can override it through ajaxSetup method
+                       type: type || "GET",
+                       dataType: "html",
+                       data: params
+               } ).done( function( responseText ) {
+
+                       // Save response for use in complete callback
+                       response = arguments;
+
+                       self.html( selector ?
+
+                               // If a selector was specified, locate the right elements in a dummy div
+                               // Exclude scripts to avoid IE 'Permission Denied' errors
+                               jQuery( "<div>" ).append( jQuery.parseHTML( responseText ) ).find( selector ) :
+
+                               // Otherwise use the full result
+                               responseText );
+
+               // If the request succeeds, this function gets "data", "status", "jqXHR"
+               // but they are ignored because response was set above.
+               // If it fails, this function gets "jqXHR", "status", "error"
+               } ).always( callback && function( jqXHR, status ) {
+                       self.each( function() {
+                               callback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );
+                       } );
+               } );
+       }
+
+       return this;
+};
+
+
+
+
+// Attach a bunch of functions for handling common AJAX events
+jQuery.each( [
+       "ajaxStart",
+       "ajaxStop",
+       "ajaxComplete",
+       "ajaxError",
+       "ajaxSuccess",
+       "ajaxSend"
+], function( i, type ) {
+       jQuery.fn[ type ] = function( fn ) {
+               return this.on( type, fn );
+       };
+} );
+
+
+
+
+jQuery.expr.pseudos.animated = function( elem ) {
+       return jQuery.grep( jQuery.timers, function( fn ) {
+               return elem === fn.elem;
+       } ).length;
+};
+
+
+
+
+jQuery.offset = {
+       setOffset: function( elem, options, i ) {
+               var curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,
+                       position = jQuery.css( elem, "position" ),
+                       curElem = jQuery( elem ),
+                       props = {};
+
+               // Set position first, in-case top/left are set even on static elem
+               if ( position === "static" ) {
+                       elem.style.position = "relative";
+               }
+
+               curOffset = curElem.offset();
+               curCSSTop = jQuery.css( elem, "top" );
+               curCSSLeft = jQuery.css( elem, "left" );
+               calculatePosition = ( position === "absolute" || position === "fixed" ) &&
+                       ( curCSSTop + curCSSLeft ).indexOf( "auto" ) > -1;
+
+               // Need to be able to calculate position if either
+               // top or left is auto and position is either absolute or fixed
+               if ( calculatePosition ) {
+                       curPosition = curElem.position();
+                       curTop = curPosition.top;
+                       curLeft = curPosition.left;
+
+               } else {
+                       curTop = parseFloat( curCSSTop ) || 0;
+                       curLeft = parseFloat( curCSSLeft ) || 0;
+               }
+
+               if ( jQuery.isFunction( options ) ) {
+
+                       // Use jQuery.extend here to allow modification of coordinates argument (gh-1848)
+                       options = options.call( elem, i, jQuery.extend( {}, curOffset ) );
+               }
+
+               if ( options.top != null ) {
+                       props.top = ( options.top - curOffset.top ) + curTop;
+               }
+               if ( options.left != null ) {
+                       props.left = ( options.left - curOffset.left ) + curLeft;
+               }
+
+               if ( "using" in options ) {
+                       options.using.call( elem, props );
+
+               } else {
+                       curElem.css( props );
+               }
+       }
+};
+
+jQuery.fn.extend( {
+       offset: function( options ) {
+
+               // Preserve chaining for setter
+               if ( arguments.length ) {
+                       return options === undefined ?
+                               this :
+                               this.each( function( i ) {
+                                       jQuery.offset.setOffset( this, options, i );
+                               } );
+               }
+
+               var doc, docElem, rect, win,
+                       elem = this[ 0 ];
+
+               if ( !elem ) {
+                       return;
+               }
+
+               // Return zeros for disconnected and hidden (display: none) elements (gh-2310)
+               // Support: IE <=11 only
+               // Running getBoundingClientRect on a
+               // disconnected node in IE throws an error
+               if ( !elem.getClientRects().length ) {
+                       return { top: 0, left: 0 };
+               }
+
+               rect = elem.getBoundingClientRect();
+
+               doc = elem.ownerDocument;
+               docElem = doc.documentElement;
+               win = doc.defaultView;
+
+               return {
+                       top: rect.top + win.pageYOffset - docElem.clientTop,
+                       left: rect.left + win.pageXOffset - docElem.clientLeft
+               };
+       },
+
+       position: function() {
+               if ( !this[ 0 ] ) {
+                       return;
+               }
+
+               var offsetParent, offset,
+                       elem = this[ 0 ],
+                       parentOffset = { top: 0, left: 0 };
+
+               // Fixed elements are offset from window (parentOffset = {top:0, left: 0},
+               // because it is its only offset parent
+               if ( jQuery.css( elem, "position" ) === "fixed" ) {
+
+                       // Assume getBoundingClientRect is there when computed position is fixed
+                       offset = elem.getBoundingClientRect();
+
+               } else {
+
+                       // Get *real* offsetParent
+                       offsetParent = this.offsetParent();
+
+                       // Get correct offsets
+                       offset = this.offset();
+                       if ( !nodeName( offsetParent[ 0 ], "html" ) ) {
+                               parentOffset = offsetParent.offset();
+                       }
+
+                       // Add offsetParent borders
+                       parentOffset = {
+                               top: parentOffset.top + jQuery.css( offsetParent[ 0 ], "borderTopWidth", true ),
+                               left: parentOffset.left + jQuery.css( offsetParent[ 0 ], "borderLeftWidth", true )
+                       };
+               }
+
+               // Subtract parent offsets and element margins
+               return {
+                       top: offset.top - parentOffset.top - jQuery.css( elem, "marginTop", true ),
+                       left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true )
+               };
+       },
+
+       // This method will return documentElement in the following cases:
+       // 1) For the element inside the iframe without offsetParent, this method will return
+       //    documentElement of the parent window
+       // 2) For the hidden or detached element
+       // 3) For body or html element, i.e. in case of the html node - it will return itself
+       //
+       // but those exceptions were never presented as a real life use-cases
+       // and might be considered as more preferable results.
+       //
+       // This logic, however, is not guaranteed and can change at any point in the future
+       offsetParent: function() {
+               return this.map( function() {
+                       var offsetParent = this.offsetParent;
+
+                       while ( offsetParent && jQuery.css( offsetParent, "position" ) === "static" ) {
+                               offsetParent = offsetParent.offsetParent;
+                       }
+
+                       return offsetParent || documentElement;
+               } );
+       }
+} );
+
+// Create scrollLeft and scrollTop methods
+jQuery.each( { scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function( method, prop ) {
+       var top = "pageYOffset" === prop;
+
+       jQuery.fn[ method ] = function( val ) {
+               return access( this, function( elem, method, val ) {
+
+                       // Coalesce documents and windows
+                       var win;
+                       if ( jQuery.isWindow( elem ) ) {
+                               win = elem;
+                       } else if ( elem.nodeType === 9 ) {
+                               win = elem.defaultView;
+                       }
+
+                       if ( val === undefined ) {
+                               return win ? win[ prop ] : elem[ method ];
+                       }
+
+                       if ( win ) {
+                               win.scrollTo(
+                                       !top ? val : win.pageXOffset,
+                                       top ? val : win.pageYOffset
+                               );
+
+                       } else {
+                               elem[ method ] = val;
+                       }
+               }, method, val, arguments.length );
+       };
+} );
+
+// Support: Safari <=7 - 9.1, Chrome <=37 - 49
+// Add the top/left cssHooks using jQuery.fn.position
+// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084
+// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347
+// getComputedStyle returns percent when specified for top/left/bottom/right;
+// rather than make the css module depend on the offset module, just check for it here
+jQuery.each( [ "top", "left" ], function( i, prop ) {
+       jQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,
+               function( elem, computed ) {
+                       if ( computed ) {
+                               computed = curCSS( elem, prop );
+
+                               // If curCSS returns percentage, fallback to offset
+                               return rnumnonpx.test( computed ) ?
+                                       jQuery( elem ).position()[ prop ] + "px" :
+                                       computed;
+                       }
+               }
+       );
+} );
+
+
+// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods
+jQuery.each( { Height: "height", Width: "width" }, function( name, type ) {
+       jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name },
+               function( defaultExtra, funcName ) {
+
+               // Margin is only for outerHeight, outerWidth
+               jQuery.fn[ funcName ] = function( margin, value ) {
+                       var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ),
+                               extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" );
+
+                       return access( this, function( elem, type, value ) {
+                               var doc;
+
+                               if ( jQuery.isWindow( elem ) ) {
+
+                                       // $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)
+                                       return funcName.indexOf( "outer" ) === 0 ?
+                                               elem[ "inner" + name ] :
+                                               elem.document.documentElement[ "client" + name ];
+                               }
+
+                               // Get document width or height
+                               if ( elem.nodeType === 9 ) {
+                                       doc = elem.documentElement;
+
+                                       // Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],
+                                       // whichever is greatest
+                                       return Math.max(
+                                               elem.body[ "scroll" + name ], doc[ "scroll" + name ],
+                                               elem.body[ "offset" + name ], doc[ "offset" + name ],
+                                               doc[ "client" + name ]
+                                       );
+                               }
+
+                               return value === undefined ?
+
+                                       // Get width or height on the element, requesting but not forcing parseFloat
+                                       jQuery.css( elem, type, extra ) :
+
+                                       // Set width or height on the element
+                                       jQuery.style( elem, type, value, extra );
+                       }, type, chainable ? margin : undefined, chainable );
+               };
+       } );
+} );
+
+
+jQuery.fn.extend( {
+
+       bind: function( types, data, fn ) {
+               return this.on( types, null, data, fn );
+       },
+       unbind: function( types, fn ) {
+               return this.off( types, null, fn );
+       },
+
+       delegate: function( selector, types, data, fn ) {
+               return this.on( types, selector, data, fn );
+       },
+       undelegate: function( selector, types, fn ) {
+
+               // ( namespace ) or ( selector, types [, fn] )
+               return arguments.length === 1 ?
+                       this.off( selector, "**" ) :
+                       this.off( types, selector || "**", fn );
+       }
+} );
+
+jQuery.holdReady = function( hold ) {
+       if ( hold ) {
+               jQuery.readyWait++;
+       } else {
+               jQuery.ready( true );
+       }
+};
+jQuery.isArray = Array.isArray;
+jQuery.parseJSON = JSON.parse;
+jQuery.nodeName = nodeName;
+
+
+
+
+// Register as a named AMD module, since jQuery can be concatenated with other
+// files that may use define, but not via a proper concatenation script that
+// understands anonymous AMD modules. A named AMD is safest and most robust
+// way to register. Lowercase jquery is used because AMD module names are
+// derived from file names, and jQuery is normally delivered in a lowercase
+// file name. Do this after creating the global so that if an AMD module wants
+// to call noConflict to hide this version of jQuery, it will work.
+
+// Note that for maximum portability, libraries that are not jQuery should
+// declare themselves as anonymous modules, and avoid setting a global if an
+// AMD loader is present. jQuery is a special case. For more information, see
+// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon
+
+if ( typeof define === "function" && define.amd ) {
+       define( "jquery", [], function() {
+               return jQuery;
+       } );
+}
+
+
+
+
+var
+
+       // Map over jQuery in case of overwrite
+       _jQuery = window.jQuery,
+
+       // Map over the $ in case of overwrite
+       _$ = window.$;
+
+jQuery.noConflict = function( deep ) {
+       if ( window.$ === jQuery ) {
+               window.$ = _$;
+       }
+
+       if ( deep && window.jQuery === jQuery ) {
+               window.jQuery = _jQuery;
+       }
+
+       return jQuery;
+};
+
+// Expose jQuery and $ identifiers, even in AMD
+// (#7102#comment:10, https://github.com/jquery/jquery/pull/557)
+// and CommonJS for browser emulators (#13566)
+if ( !noGlobal ) {
+       window.jQuery = window.$ = jQuery;
+}
+
+
+
+
+return jQuery;
+} );
index 546cc47..25aff68 100644 (file)
        "ooui-toolbar-more": "Liyané",
        "ooui-toolgroup-expand": "Liyané",
        "ooui-toolgroup-collapse": "Sacukupé",
-       "ooui-dialog-message-accept": "Ha'a",
+       "ooui-dialog-message-accept": "Oké",
        "ooui-dialog-message-reject": "Wurung",
        "ooui-dialog-process-error": "Ana sing klèru",
        "ooui-dialog-process-dismiss": "Tutup",
        "ooui-dialog-process-retry": "Jajal manèh",
-       "ooui-dialog-process-continue": "Banjuraké",
+       "ooui-dialog-process-continue": "Bacutaké",
        "ooui-selectfile-button-select": "Pilih barkas",
-       "ooui-selectfile-not-supported": "Barkas pilihan ora disengkuyung",
+       "ooui-selectfile-not-supported": "Ora bisa milih barkas",
        "ooui-selectfile-placeholder": "Ora ana barkas sing dipilih",
        "ooui-selectfile-dragdrop-placeholder": "Dèkèk barkas ing kéné"
 }
index f390b56..ef48f5b 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.20.2
+ * OOjs UI v0.21.1
  * 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-30T20:34:37Z
+ * Date: 2017-04-18T23:32:49Z
  */
 ( function ( OO ) {
 
index 624cc57..29b0874 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.20.2
+ * OOjs UI v0.21.1
  * 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-30T20:34:41Z
+ * Date: 2017-04-18T23:32:54Z
  */
 .oo-ui-element-hidden {
   display: none !important;
   cursor: pointer;
   display: inline-block;
   -webkit-box-sizing: border-box;
-     -moz-box-sizing: border-box;
-          box-sizing: border-box;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
   vertical-align: middle;
   font-family: inherit;
   font-size: inherit;
   white-space: nowrap;
   -webkit-touch-callout: none;
   -webkit-user-select: none;
-     -moz-user-select: none;
-      -ms-user-select: none;
-          user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
 }
 .oo-ui-buttonElement > .oo-ui-buttonElement-button::-moz-focus-inner {
   border-color: transparent;
   text-shadow: 0 1px 1px rgba(255, 255, 255, 0.5);
   border: 1px #c9c9c9 solid;
   -webkit-transition: border-color 100ms ease;
-     -moz-transition: border-color 100ms ease;
-          transition: border-color 100ms ease;
+  -moz-transition: border-color 100ms ease;
+  transition: border-color 100ms ease;
   background-color: #eeeeee;
   background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0, #fff), color-stop(100%, #ddd));
   background-image: -webkit-linear-gradient(top, #fff 0, #ddd 100%);
-  background-image:    -moz-linear-gradient(top, #fff 0, #ddd 100%);
-  background-image:         linear-gradient(to bottom, #fff 0, #ddd 100%);
+  background-image: -moz-linear-gradient(top, #fff 0, #ddd 100%);
+  background-image: linear-gradient(to bottom, #fff 0, #ddd 100%);
   -ms-filter: "progid:DXImageTransform.Microsoft.gradient( startColorstr='#ffffffff', endColorstr='#ffdddddd' )";
 }
 .oo-ui-buttonElement-framed > .oo-ui-buttonElement-button:hover,
   background-color: #eeeeee;
   background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0, #ddd), color-stop(100%, #fff));
   background-image: -webkit-linear-gradient(top, #ddd 0, #fff 100%);
-  background-image:    -moz-linear-gradient(top, #ddd 0, #fff 100%);
-  background-image:         linear-gradient(to bottom, #ddd 0, #fff 100%);
+  background-image: -moz-linear-gradient(top, #ddd 0, #fff 100%);
+  background-image: linear-gradient(to bottom, #ddd 0, #fff 100%);
   -ms-filter: "progid:DXImageTransform.Microsoft.gradient( startColorstr='#ffdddddd', endColorstr='#ffffffff' )";
 }
 .oo-ui-buttonElement-framed.oo-ui-iconElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
   background-color: #cde7f4;
   background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0, #eaf4fa), color-stop(100%, #b0d9ee));
   background-image: -webkit-linear-gradient(top, #eaf4fa 0, #b0d9ee 100%);
-  background-image:    -moz-linear-gradient(top, #eaf4fa 0, #b0d9ee 100%);
-  background-image:         linear-gradient(to bottom, #eaf4fa 0, #b0d9ee 100%);
+  background-image: -moz-linear-gradient(top, #eaf4fa 0, #b0d9ee 100%);
+  background-image: linear-gradient(to bottom, #eaf4fa 0, #b0d9ee 100%);
   -ms-filter: "progid:DXImageTransform.Microsoft.gradient( startColorstr='#ffeaf4fa', endColorstr='#ffb0d9ee' )";
 }
 .oo-ui-buttonElement-framed.oo-ui-flaggedElement-progressive > .oo-ui-buttonElement-button:hover,
   background-color: #cde7f4;
   background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0, #b0d9ee), color-stop(100%, #eaf4fa));
   background-image: -webkit-linear-gradient(top, #b0d9ee 0, #eaf4fa 100%);
-  background-image:    -moz-linear-gradient(top, #b0d9ee 0, #eaf4fa 100%);
-  background-image:         linear-gradient(to bottom, #b0d9ee 0, #eaf4fa 100%);
+  background-image: -moz-linear-gradient(top, #b0d9ee 0, #eaf4fa 100%);
+  background-image: linear-gradient(to bottom, #b0d9ee 0, #eaf4fa 100%);
   -ms-filter: "progid:DXImageTransform.Microsoft.gradient( startColorstr='#ffb0d9ee', endColorstr='#ffeaf4fa' )";
 }
 .oo-ui-buttonElement-framed.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button {
   background-color: #daf0bd;
   background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0, #f0fbe1), color-stop(100%, #c3e59a));
   background-image: -webkit-linear-gradient(top, #f0fbe1 0, #c3e59a 100%);
-  background-image:    -moz-linear-gradient(top, #f0fbe1 0, #c3e59a 100%);
-  background-image:         linear-gradient(to bottom, #f0fbe1 0, #c3e59a 100%);
+  background-image: -moz-linear-gradient(top, #f0fbe1 0, #c3e59a 100%);
+  background-image: linear-gradient(to bottom, #f0fbe1 0, #c3e59a 100%);
   -ms-filter: "progid:DXImageTransform.Microsoft.gradient( startColorstr='#fff0fbe1', endColorstr='#ffc3e59a' )";
 }
 .oo-ui-buttonElement-framed.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button:hover,
   background-color: #daf0bd;
   background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0, #c3e59a), color-stop(100%, #f0fbe1));
   background-image: -webkit-linear-gradient(top, #c3e59a 0, #f0fbe1 100%);
-  background-image:    -moz-linear-gradient(top, #c3e59a 0, #f0fbe1 100%);
-  background-image:         linear-gradient(to bottom, #c3e59a 0, #f0fbe1 100%);
+  background-image: -moz-linear-gradient(top, #c3e59a 0, #f0fbe1 100%);
+  background-image: linear-gradient(to bottom, #c3e59a 0, #f0fbe1 100%);
   -ms-filter: "progid:DXImageTransform.Microsoft.gradient( startColorstr='#ffc3e59a', endColorstr='#fff0fbe1' )";
 }
 .oo-ui-buttonElement-framed.oo-ui-flaggedElement-destructive > .oo-ui-buttonElement-button {
 .oo-ui-buttonElement-framed.oo-ui-widget-disabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button {
   opacity: 0.5;
   -webkit-transform: translateZ(0);
-          transform: translateZ(0);
+  transform: translateZ(0);
   box-shadow: none;
   color: #333;
   background: #eee;
 }
 .oo-ui-clippableElement-clippable {
   -webkit-box-sizing: border-box;
-     -moz-box-sizing: border-box;
-          box-sizing: border-box;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
   min-height: 3.125em;
 }
 .oo-ui-floatableElement {
@@ -483,7 +483,7 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout {
 .oo-ui-panelLayout-scrollable {
   overflow: auto;
   -webkit-transform: translateZ(0);
-          transform: translateZ(0);
+  transform: translateZ(0);
 }
 .oo-ui-panelLayout-expanded {
   position: absolute;
@@ -717,9 +717,9 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout {
 .oo-ui-popupWidget-head {
   -webkit-touch-callout: none;
   -webkit-user-select: none;
-     -moz-user-select: none;
-      -ms-user-select: none;
-          user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
 }
 .oo-ui-popupWidget-head > .oo-ui-buttonWidget {
   float: right;
@@ -814,8 +814,8 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout {
 }
 .oo-ui-popupWidget-transitioning .oo-ui-popupWidget-popup {
   -webkit-transition: width 100ms ease, height 100ms ease, left 100ms ease;
-     -moz-transition: width 100ms ease, height 100ms ease, left 100ms ease;
-          transition: width 100ms ease, height 100ms ease, left 100ms ease;
+  -moz-transition: width 100ms ease, height 100ms ease, left 100ms ease;
+  transition: width 100ms ease, height 100ms ease, left 100ms ease;
 }
 .oo-ui-popupWidget-head {
   height: 2.5em;
@@ -838,14 +838,6 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout {
 .oo-ui-popupButtonWidget .oo-ui-popupWidget {
   cursor: auto;
 }
-.oo-ui-popupButtonWidget-frameless-popup.oo-ui-popupWidget-anchored-top .oo-ui-popupWidget-anchor,
-.oo-ui-popupButtonWidget-frameless-popup.oo-ui-popupWidget-anchored-bottom .oo-ui-popupWidget-anchor {
-  margin-left: 0.9375em;
-}
-.oo-ui-popupButtonWidget-framed-popup.oo-ui-popupWidget-anchored-top .oo-ui-popupWidget-anchor,
-.oo-ui-popupButtonWidget-framed-popup.oo-ui-popupWidget-anchored-bottom .oo-ui-popupWidget-anchor {
-  margin-left: 1.2375em;
-}
 .oo-ui-inputWidget {
   margin-right: 0.5em;
 }
@@ -865,8 +857,8 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout {
   position: relative;
   vertical-align: middle;
   -webkit-box-sizing: border-box;
-     -moz-box-sizing: border-box;
-          box-sizing: border-box;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
   width: 100%;
   max-width: 50em;
 }
@@ -879,8 +871,8 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout {
   background-repeat: no-repeat;
   width: 100%;
   -webkit-box-sizing: border-box;
-     -moz-box-sizing: border-box;
-          box-sizing: border-box;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
 }
 .oo-ui-dropdownInputWidget.oo-ui-widget-enabled select {
   cursor: pointer;
@@ -917,8 +909,8 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout {
   position: relative;
   vertical-align: middle;
   -webkit-box-sizing: border-box;
-     -moz-box-sizing: border-box;
-          box-sizing: border-box;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
   width: 100%;
   max-width: 50em;
 }
@@ -927,8 +919,8 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout {
   display: block;
   width: 100%;
   -webkit-box-sizing: border-box;
-     -moz-box-sizing: border-box;
-          box-sizing: border-box;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
 }
 .oo-ui-textInputWidget textarea {
   overflow: auto;
@@ -965,9 +957,9 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout {
   height: 100%;
   -webkit-touch-callout: none;
   -webkit-user-select: none;
-     -moz-user-select: none;
-      -ms-user-select: none;
-          user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
 }
 .oo-ui-textInputWidget.oo-ui-widget-enabled > .oo-ui-iconElement-icon,
 .oo-ui-textInputWidget.oo-ui-widget-enabled > .oo-ui-indicatorElement-indicator {
@@ -977,19 +969,13 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout {
   cursor: pointer;
 }
 .oo-ui-textInputWidget.oo-ui-widget-disabled input,
-.oo-ui-textInputWidget.oo-ui-widget-disabled textarea {
-  -webkit-touch-callout: none;
-  -webkit-user-select: none;
-     -moz-user-select: none;
-      -ms-user-select: none;
-          user-select: none;
-}
+.oo-ui-textInputWidget.oo-ui-widget-disabled textarea,
 .oo-ui-textInputWidget.oo-ui-widget-disabled .oo-ui-labelElement-label {
   -webkit-touch-callout: none;
   -webkit-user-select: none;
-     -moz-user-select: none;
-      -ms-user-select: none;
-          user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
 }
 .oo-ui-textInputWidget.oo-ui-labelElement > .oo-ui-labelElement-label {
   display: block;
@@ -1023,8 +1009,8 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout {
   box-shadow: 0 0 0 #fff, inset 0 0.1em 0.2em #ddd;
   border-radius: 0.25em;
   -webkit-transition: border-color 250ms ease, box-shadow 250ms ease;
-     -moz-transition: border-color 250ms ease, box-shadow 250ms ease;
-          transition: border-color 250ms ease, box-shadow 250ms ease;
+  -moz-transition: border-color 250ms ease, box-shadow 250ms ease;
+  transition: border-color 250ms ease, box-shadow 250ms ease;
 }
 .oo-ui-textInputWidget input.oo-ui-pendingElement-pending,
 .oo-ui-textInputWidget textarea.oo-ui-pendingElement-pending {
@@ -1032,27 +1018,27 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout {
 }
 .oo-ui-textInputWidget input::-webkit-input-placeholder,
 .oo-ui-textInputWidget textarea::-webkit-input-placeholder {
-  color: #72777d;
+  color: #767676;
   opacity: 1;
 }
 .oo-ui-textInputWidget input:-ms-input-placeholder,
 .oo-ui-textInputWidget textarea:-ms-input-placeholder {
-  color: #72777d;
+  color: #767676;
   opacity: 1;
 }
 .oo-ui-textInputWidget input::-moz-placeholder,
 .oo-ui-textInputWidget textarea::-moz-placeholder {
-  color: #72777d;
+  color: #767676;
   opacity: 1;
 }
 .oo-ui-textInputWidget input:-moz-placeholder,
 .oo-ui-textInputWidget textarea:-moz-placeholder {
-  color: #72777d;
+  color: #767676;
   opacity: 1;
 }
 .oo-ui-textInputWidget input::placeholder,
 .oo-ui-textInputWidget textarea::placeholder {
-  color: #72777d;
+  color: #767676;
   opacity: 1;
 }
 .oo-ui-textInputWidget.oo-ui-widget-enabled input:focus,
@@ -1063,7 +1049,7 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout {
 }
 .oo-ui-textInputWidget.oo-ui-widget-enabled input[readonly],
 .oo-ui-textInputWidget.oo-ui-widget-enabled textarea[readonly] {
-  color: #777;
+  color: #767676;
 }
 .oo-ui-textInputWidget.oo-ui-widget-enabled.oo-ui-flaggedElement-invalid input,
 .oo-ui-textInputWidget.oo-ui-widget-enabled.oo-ui-flaggedElement-invalid textarea {
@@ -1103,7 +1089,7 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout {
 .oo-ui-textInputWidget > .oo-ui-labelElement-label {
   padding: 0.4em;
   line-height: 1.5em;
-  color: #888;
+  color: #767676;
 }
 .oo-ui-textInputWidget-labelPosition-after.oo-ui-indicatorElement > .oo-ui-labelElement-label {
   margin-right: 2.0875em;
@@ -1134,23 +1120,35 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout {
 .oo-ui-menuSelectWidget-invisible {
   display: none;
 }
-.oo-ui-menuOptionWidget .oo-ui-iconElement-icon {
-  display: none;
+.oo-ui-menuOptionWidget.oo-ui-optionWidget-selected {
+  background-color: transparent;
 }
 .oo-ui-menuOptionWidget.oo-ui-optionWidget-selected .oo-ui-iconElement-icon {
+  background-image: url('themes/apex/images/icons/check.png');
+  background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url('themes/apex/images/icons/check.svg');
+  background-image: linear-gradient(transparent, transparent), /* @embed */ url('themes/apex/images/icons/check.svg');
+  background-image: -o-linear-gradient(transparent, transparent), url('themes/apex/images/icons/check.png');
+  background-position: center center;
+  background-repeat: no-repeat;
+  background-size: contain;
   display: block;
-}
-.oo-ui-menuOptionWidget.oo-ui-optionWidget-selected {
-  background-color: transparent;
+  left: 0.5em;
+  top: 0;
+  min-width: 24px;
+  width: 1.875em;
+  min-height: 24px;
+  height: 100%;
 }
 .oo-ui-menuOptionWidget.oo-ui-optionWidget-highlighted,
 .oo-ui-menuOptionWidget.oo-ui-optionWidget-highlighted.oo-ui-optionWidget-selected {
   background-color: #e1f3ff;
 }
 .oo-ui-menuSectionOptionWidget {
-  cursor: default;
   padding: 0.33em 0.75em;
-  color: #888;
+  color: #767676;
+}
+.oo-ui-menuSectionOptionWidget.oo-ui-widget-enabled {
+  cursor: default;
 }
 .oo-ui-dropdownWidget {
   display: inline-block;
@@ -1161,6 +1159,7 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout {
   margin-right: 0.5em;
 }
 .oo-ui-dropdownWidget-handle {
+  position: relative;
   width: 100%;
   display: block;
   white-space: nowrap;
@@ -1169,12 +1168,12 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout {
   cursor: default;
   -webkit-touch-callout: none;
   -webkit-user-select: none;
-     -moz-user-select: none;
-      -ms-user-select: none;
-          user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
   -webkit-box-sizing: border-box;
-     -moz-box-sizing: border-box;
-          box-sizing: border-box;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
 }
 .oo-ui-dropdownWidget-handle .oo-ui-iconElement-icon,
 .oo-ui-dropdownWidget-handle .oo-ui-indicatorElement-indicator {
@@ -1263,7 +1262,11 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout {
   height: 2.5em;
   padding: 0;
 }
-.oo-ui-comboBoxInputWidget-php > .oo-ui-indicatorElement-indicator {
+.oo-ui-comboBoxInputWidget-php > .oo-ui-indicatorWidget {
+  display: block;
+  position: absolute;
+  top: 0;
+  height: 100%;
   pointer-events: none;
 }
 .oo-ui-comboBoxInputWidget:last-child {
@@ -1282,6 +1285,12 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout {
   visibility: visible;
   margin: 0.775em;
 }
+.oo-ui-comboBoxInputWidget-php .oo-ui-indicatorWidget {
+  right: 0;
+  max-height: 2.375em;
+  margin: 0;
+  margin-right: 0.775em;
+}
 .oo-ui-comboBoxInputWidget.oo-ui-widget-disabled .oo-ui-textInputWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator {
   cursor: default;
   opacity: 0.2;
@@ -1333,24 +1342,24 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout {
   height: 1em;
   border-right: 1px solid #ccc;
   -webkit-transition: width 250ms ease;
-     -moz-transition: width 250ms ease;
-          transition: width 250ms ease;
+  -moz-transition: width 250ms ease;
+  transition: width 250ms ease;
   background-color: #cde7f4;
   background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0, #eaf4fa), color-stop(100%, #b0d9ee));
   background-image: -webkit-linear-gradient(top, #eaf4fa 0, #b0d9ee 100%);
-  background-image:    -moz-linear-gradient(top, #eaf4fa 0, #b0d9ee 100%);
-  background-image:         linear-gradient(to bottom, #eaf4fa 0, #b0d9ee 100%);
+  background-image: -moz-linear-gradient(top, #eaf4fa 0, #b0d9ee 100%);
+  background-image: linear-gradient(to bottom, #eaf4fa 0, #b0d9ee 100%);
   -ms-filter: "progid:DXImageTransform.Microsoft.gradient( startColorstr='#ffeaf4fa', endColorstr='#ffb0d9ee' )";
 }
 .oo-ui-progressBarWidget-indeterminate .oo-ui-progressBarWidget-bar {
   -webkit-animation: oo-ui-progressBarWidget-slide 2s infinite linear;
-     -moz-animation: oo-ui-progressBarWidget-slide 2s infinite linear;
-          animation: oo-ui-progressBarWidget-slide 2s infinite linear;
+  -moz-animation: oo-ui-progressBarWidget-slide 2s infinite linear;
+  animation: oo-ui-progressBarWidget-slide 2s infinite linear;
   width: 40%;
   -webkit-transform: translate(-25%);
-     -moz-transform: translate(-25%);
-      -ms-transform: translate(-25%);
-          transform: translate(-25%);
+  -moz-transform: translate(-25%);
+  -ms-transform: translate(-25%);
+  transform: translate(-25%);
   border-left: 1px solid #a6cee1;
 }
 .oo-ui-progressBarWidget.oo-ui-widget-disabled {
@@ -1359,42 +1368,42 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout {
 @-webkit-keyframes oo-ui-progressBarWidget-slide {
   from {
     -webkit-transform: translate(-100%);
-       -moz-transform: translate(-100%);
-        -ms-transform: translate(-100%);
-            transform: translate(-100%);
+    -moz-transform: translate(-100%);
+    -ms-transform: translate(-100%);
+    transform: translate(-100%);
   }
   to {
     -webkit-transform: translate(350%);
-       -moz-transform: translate(350%);
-        -ms-transform: translate(350%);
-            transform: translate(350%);
+    -moz-transform: translate(350%);
+    -ms-transform: translate(350%);
+    transform: translate(350%);
   }
 }
 @-moz-keyframes oo-ui-progressBarWidget-slide {
   from {
     -webkit-transform: translate(-100%);
-       -moz-transform: translate(-100%);
-        -ms-transform: translate(-100%);
-            transform: translate(-100%);
+    -moz-transform: translate(-100%);
+    -ms-transform: translate(-100%);
+    transform: translate(-100%);
   }
   to {
     -webkit-transform: translate(350%);
-       -moz-transform: translate(350%);
-        -ms-transform: translate(350%);
-            transform: translate(350%);
+    -moz-transform: translate(350%);
+    -ms-transform: translate(350%);
+    transform: translate(350%);
   }
 }
 @keyframes oo-ui-progressBarWidget-slide {
   from {
     -webkit-transform: translate(-100%);
-       -moz-transform: translate(-100%);
-        -ms-transform: translate(-100%);
-            transform: translate(-100%);
+    -moz-transform: translate(-100%);
+    -ms-transform: translate(-100%);
+    transform: translate(-100%);
   }
   to {
     -webkit-transform: translate(350%);
-       -moz-transform: translate(350%);
-        -ms-transform: translate(350%);
-            transform: translate(350%);
+    -moz-transform: translate(350%);
+    -ms-transform: translate(350%);
+    transform: translate(350%);
   }
 }
index bff0f50..a994e00 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.20.2
+ * OOjs UI v0.21.1
  * 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-30T20:34:41Z
+ * Date: 2017-04-18T23:32:54Z
  */
 .oo-ui-element-hidden {
   display: none !important;
   cursor: pointer;
   display: inline-block;
   -webkit-box-sizing: border-box;
-     -moz-box-sizing: border-box;
-          box-sizing: border-box;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
   vertical-align: middle;
   font-family: inherit;
   font-size: inherit;
   white-space: nowrap;
   -webkit-touch-callout: none;
   -webkit-user-select: none;
-     -moz-user-select: none;
-      -ms-user-select: none;
-          user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
 }
 .oo-ui-buttonElement > .oo-ui-buttonElement-button::-moz-focus-inner {
   border-color: transparent;
   text-align: center;
 }
 .oo-ui-buttonElement > .oo-ui-buttonElement-button {
+  position: relative;
   font-weight: bold;
   text-decoration: none;
 }
 .oo-ui-buttonElement > .oo-ui-buttonElement-button:focus {
-  border-radius: 2px;
   outline: 0;
 }
-.oo-ui-buttonElement.oo-ui-iconElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator {
-  margin-right: 0.25em;
-  margin-left: 0.46875em;
+.oo-ui-buttonElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon,
+.oo-ui-buttonElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator {
+  position: absolute;
+  top: 0;
+  height: 100%;
+}
+.oo-ui-buttonElement.oo-ui-iconElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
+  display: block;
+}
+.oo-ui-buttonElement.oo-ui-labelElement > .oo-ui-buttonElement-button,
+.oo-ui-buttonElement > input.oo-ui-buttonElement-button {
+  line-height: 1;
+}
+.oo-ui-buttonElement.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
+  line-height: 1.172em;
+}
+.oo-ui-buttonElement.oo-ui-labelElement.oo-ui-iconElement > .oo-ui-buttonElement-button {
+  padding-left: 2.03125em;
+}
+.oo-ui-buttonElement.oo-ui-labelElement.oo-ui-indicatorElement > .oo-ui-buttonElement-button {
+  padding-right: 2.5em;
+}
+.oo-ui-buttonElement.oo-ui-indicatorElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator {
+  display: block;
+}
+.oo-ui-buttonElement.oo-ui-indicatorElement.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator,
+.oo-ui-buttonElement.oo-ui-indicatorElement.oo-ui-iconElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator {
+  right: 0.9375em;
 }
 .oo-ui-buttonElement.oo-ui-widget-enabled > .oo-ui-buttonElement-button {
   -webkit-transition: background-color 100ms, color 100ms, border-color 100ms, box-shadow 100ms;
-     -moz-transition: background-color 100ms, color 100ms, border-color 100ms, box-shadow 100ms;
-          transition: background-color 100ms, color 100ms, border-color 100ms, box-shadow 100ms;
+  -moz-transition: background-color 100ms, color 100ms, border-color 100ms, box-shadow 100ms;
+  transition: background-color 100ms, color 100ms, border-color 100ms, box-shadow 100ms;
 }
 .oo-ui-buttonElement.oo-ui-widget-enabled > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon,
 .oo-ui-buttonElement.oo-ui-widget-enabled > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator {
   opacity: 0.87;
   -webkit-transition: opacity 100ms;
-     -moz-transition: opacity 100ms;
-          transition: opacity 100ms;
+  -moz-transition: opacity 100ms;
+  transition: opacity 100ms;
 }
 .oo-ui-buttonElement.oo-ui-widget-enabled > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon.oo-ui-image-invert,
 .oo-ui-buttonElement.oo-ui-widget-enabled > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator.oo-ui-image-invert {
 .oo-ui-buttonElement.oo-ui-widget-enabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator {
   opacity: 1;
 }
-.oo-ui-buttonElement-frameless > .oo-ui-buttonElement-button .oo-ui-indicatorElement-indicator {
-  margin-right: 0;
+.oo-ui-buttonElement-frameless > .oo-ui-buttonElement-button {
+  border-radius: 1px;
 }
-.oo-ui-buttonElement-frameless.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
-  margin-left: 0.25em;
-  margin-right: 0.25em;
+.oo-ui-buttonElement-frameless.oo-ui-iconElement > .oo-ui-buttonElement-button {
+  min-width: 1.875em;
+  min-height: 1.875em;
 }
-.oo-ui-buttonElement-frameless > input.oo-ui-buttonElement-button {
-  padding-left: 0.25em;
-  padding-right: 0.25em;
+.oo-ui-buttonElement-frameless.oo-ui-iconElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
+  left: 0;
+}
+.oo-ui-buttonElement-frameless.oo-ui-labelElement > .oo-ui-buttonElement-button {
+  margin-left: -1px;
+  border-color: #fff;
+  border-color: transparent;
+  border-style: solid;
+  border-width: 1px;
+  padding: 0.3125em 0;
+}
+.oo-ui-buttonElement-frameless.oo-ui-indicatorElement > .oo-ui-buttonElement-button {
+  min-width: 0.9375em;
+  min-height: 0.9375em;
 }
 .oo-ui-buttonElement-frameless.oo-ui-widget-enabled > .oo-ui-buttonElement-button {
   color: #222;
   color: #444;
 }
 .oo-ui-buttonElement-frameless.oo-ui-widget-enabled > .oo-ui-buttonElement-button:focus {
-  box-shadow: inset 0 0 0 1px #36c, 0 0 0 1px #36c;
+  box-shadow: 0 0 0 2px #36c;
 }
 .oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-buttonElement-pressed > input.oo-ui-buttonElement-button,
 .oo-ui-buttonElement-frameless.oo-ui-widget-enabled.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button:active {
 .oo-ui-buttonElement-frameless.oo-ui-widget-disabled > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator {
   opacity: 0.51;
 }
-.oo-ui-buttonElement-framed.oo-ui-iconElement.oo-ui-labelElement > .oo-ui-buttonElement-button,
-.oo-ui-buttonElement-framed.oo-ui-iconElement.oo-ui-indicatorElement > .oo-ui-buttonElement-button {
-  padding-left: 2.4em;
-}
 .oo-ui-buttonElement-framed > .oo-ui-buttonElement-button {
-  position: relative;
   min-height: 2.5em;
   border-radius: 2px;
-  padding: 0.625em 1em 0.546875em;
+  padding: 0.625em 0.9375em 0.546875em;
 }
 .oo-ui-buttonElement-framed.oo-ui-iconElement > .oo-ui-buttonElement-button {
-  min-width: 3.125em;
-}
-.oo-ui-buttonElement-framed.oo-ui-labelElement > .oo-ui-buttonElement-button,
-.oo-ui-buttonElement-framed.oo-ui-indicatorElement > .oo-ui-buttonElement-button {
-  min-width: 0;
+  padding-left: 2.03125em;
 }
-.oo-ui-buttonElement-framed > input.oo-ui-buttonElement-button,
-.oo-ui-buttonElement-framed.oo-ui-labelElement > .oo-ui-buttonElement-button {
-  line-height: 1;
+.oo-ui-buttonElement-framed.oo-ui-iconElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
+  left: 0.546875em;
 }
-.oo-ui-buttonElement-framed.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
-  line-height: 1.172em;
+.oo-ui-buttonElement-framed.oo-ui-iconElement.oo-ui-labelElement > .oo-ui-buttonElement-button,
+.oo-ui-buttonElement-framed.oo-ui-iconElement.oo-ui-indicatorElement > .oo-ui-buttonElement-button {
+  padding-left: 2.5em;
 }
-.oo-ui-buttonElement-framed.oo-ui-iconElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
-  display: block;
-  position: absolute;
-  top: 0;
-  height: 100%;
-  left: 0.5625em;
+.oo-ui-buttonElement-framed.oo-ui-iconElement.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon,
+.oo-ui-buttonElement-framed.oo-ui-iconElement.oo-ui-indicatorElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon {
+  left: 0.46875em;
 }
-.oo-ui-buttonElement-framed.oo-ui-iconElement.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
-  margin-left: 0.3em;
+.oo-ui-buttonElement-framed.oo-ui-indicatorElement > .oo-ui-buttonElement-button {
+  padding-right: 2.03125em;
 }
-.oo-ui-buttonElement-framed.oo-ui-indicatorElement.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator,
-.oo-ui-buttonElement-framed.oo-ui-indicatorElement.oo-ui-iconElement:not( .oo-ui-labelElement ) > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator {
-  margin-left: 0.46875em;
-  margin-right: -0.275em;
+.oo-ui-buttonElement-framed.oo-ui-indicatorElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator {
+  right: 1.015625em;
 }
-.oo-ui-buttonElement-framed.oo-ui-indicatorElement.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator {
-  position: relative;
-  left: 0.2em;
+.oo-ui-buttonElement-framed.oo-ui-indicatorElement.oo-ui-labelElement > .oo-ui-buttonElement-button,
+.oo-ui-buttonElement-framed.oo-ui-indicatorElement.oo-ui-iconElement > .oo-ui-buttonElement-button {
+  padding-right: 2.5em;
 }
 .oo-ui-buttonElement-framed.oo-ui-widget-disabled > .oo-ui-buttonElement-button {
   background-color: #c8ccd1;
   color: #fff;
   border: 1px solid #c8ccd1;
 }
-.oo-ui-buttonElement-framed.oo-ui-widget-disabled + .oo-ui-widget-disabled > .oo-ui-buttonElement-button {
-  border-left-color: #fff;
-}
 .oo-ui-buttonElement-framed.oo-ui-widget-enabled > .oo-ui-buttonElement-button {
   background-color: #f8f9fa;
   color: #222;
 .oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-progressive > .oo-ui-buttonElement-button:active,
 .oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-progressive > .oo-ui-buttonElement-button:active:focus,
 .oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-progressive.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button,
-.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-progressive.oo-ui-buttonElement-active > .oo-ui-buttonElement-button {
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-progressive.oo-ui-buttonElement-active > .oo-ui-buttonElement-button,
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-progressive.oo-ui-popupToolGroup-active > .oo-ui-buttonElement-button {
   background-color: #eff3fa;
   color: #2a4b8d;
   border-color: #2a4b8d;
 .oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-progressive > .oo-ui-buttonElement-button:focus {
   border-color: #36c;
   box-shadow: inset 0 0 0 1px #36c;
+  outline: 0;
 }
 .oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button {
   color: #36c;
 .oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button:active,
 .oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button:active:focus,
 .oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button,
-.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive.oo-ui-buttonElement-active > .oo-ui-buttonElement-button {
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive.oo-ui-buttonElement-active > .oo-ui-buttonElement-button,
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive.oo-ui-popupToolGroup-active > .oo-ui-buttonElement-button {
   background-color: #eff3fa;
   color: #2a4b8d;
   border-color: #2a4b8d;
 .oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button:focus {
   border-color: #36c;
   box-shadow: inset 0 0 0 1px #36c;
+  outline: 0;
 }
 .oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive > .oo-ui-buttonElement-button {
   color: #d33;
 .oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive > .oo-ui-buttonElement-button:active,
 .oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive > .oo-ui-buttonElement-button:active:focus,
 .oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button,
-.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive.oo-ui-buttonElement-active > .oo-ui-buttonElement-button {
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive.oo-ui-buttonElement-active > .oo-ui-buttonElement-button,
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive.oo-ui-popupToolGroup-active > .oo-ui-buttonElement-button {
   background-color: #ffffff;
   color: #b32424;
   border-color: #b32424;
 .oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive > .oo-ui-buttonElement-button:focus {
   border-color: #d33;
   box-shadow: inset 0 0 0 1px #d33;
+  outline: 0;
 }
 .oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-progressive > .oo-ui-buttonElement-button {
   color: #fff;
 .oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-progressive > .oo-ui-buttonElement-button:active,
 .oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-progressive > .oo-ui-buttonElement-button:active:focus,
 .oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-progressive.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button,
-.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-progressive.oo-ui-buttonElement-active > .oo-ui-buttonElement-button {
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-progressive.oo-ui-buttonElement-active > .oo-ui-buttonElement-button,
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-progressive.oo-ui-popupToolGroup-active > .oo-ui-buttonElement-button {
   color: #fff;
   background-color: #2a4b8d;
   border-color: #2a4b8d;
 .oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-progressive > .oo-ui-buttonElement-button:focus {
   border-color: #36c;
   box-shadow: inset 0 0 0 1px #36c, inset 0 0 0 2px #fff;
+  outline: 0;
 }
 .oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button {
   color: #fff;
 .oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button:active,
 .oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button:active:focus,
 .oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-constructive.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button,
-.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-constructive.oo-ui-buttonElement-active > .oo-ui-buttonElement-button {
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-constructive.oo-ui-buttonElement-active > .oo-ui-buttonElement-button,
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-constructive.oo-ui-popupToolGroup-active > .oo-ui-buttonElement-button {
   color: #fff;
   background-color: #2a4b8d;
   border-color: #2a4b8d;
 .oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-constructive > .oo-ui-buttonElement-button:focus {
   border-color: #36c;
   box-shadow: inset 0 0 0 1px #36c, inset 0 0 0 2px #fff;
+  outline: 0;
 }
 .oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-destructive > .oo-ui-buttonElement-button {
   color: #fff;
 .oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-destructive > .oo-ui-buttonElement-button:active,
 .oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-destructive > .oo-ui-buttonElement-button:active:focus,
 .oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-destructive.oo-ui-buttonElement-pressed > .oo-ui-buttonElement-button,
-.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-destructive.oo-ui-buttonElement-active > .oo-ui-buttonElement-button {
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-destructive.oo-ui-buttonElement-active > .oo-ui-buttonElement-button,
+.oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-destructive.oo-ui-popupToolGroup-active > .oo-ui-buttonElement-button {
   color: #fff;
   background-color: #b32424;
   border-color: #b32424;
 .oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary.oo-ui-flaggedElement-destructive > .oo-ui-buttonElement-button:focus {
   border-color: #d33;
   box-shadow: inset 0 0 0 1px #d33, inset 0 0 0 2px #fff;
+  outline: 0;
 }
 .oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon,
 .oo-ui-buttonElement-framed.oo-ui-widget-enabled.oo-ui-flaggedElement-primary > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator {
 }
 .oo-ui-clippableElement-clippable {
   -webkit-box-sizing: border-box;
-     -moz-box-sizing: border-box;
-          box-sizing: border-box;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
   min-height: 3.125em;
 }
 .oo-ui-floatableElement {
@@ -627,7 +658,7 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout {
 .oo-ui-panelLayout-scrollable {
   overflow: auto;
   -webkit-transform: translateZ(0);
-          transform: translateZ(0);
+  transform: translateZ(0);
 }
 .oo-ui-panelLayout-expanded {
   position: absolute;
@@ -694,7 +725,8 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout {
   color: #72777d;
 }
 .oo-ui-decoratedOptionWidget {
-  padding: 0.5em 2em 0.5em 3em;
+  padding: 0.703125em 0.9375em 0.625em;
+  line-height: 1;
 }
 .oo-ui-decoratedOptionWidget .oo-ui-iconElement-icon,
 .oo-ui-decoratedOptionWidget .oo-ui-indicatorElement-indicator {
@@ -705,11 +737,20 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout {
   top: 0;
   height: 100%;
 }
+.oo-ui-decoratedOptionWidget.oo-ui-iconElement {
+  padding-left: 2.5em;
+}
 .oo-ui-decoratedOptionWidget.oo-ui-iconElement .oo-ui-iconElement-icon {
-  left: 0.5em;
+  left: 0.46875em;
+}
+.oo-ui-decoratedOptionWidget .oo-ui-labelElement-label {
+  line-height: 1.172em;
+}
+.oo-ui-decoratedOptionWidget.oo-ui-indicatorElement {
+  padding-right: 1.875em;
 }
 .oo-ui-decoratedOptionWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator {
-  right: 0.5em;
+  right: 0.9375em;
 }
 .oo-ui-decoratedOptionWidget.oo-ui-widget-disabled .oo-ui-iconElement-icon,
 .oo-ui-decoratedOptionWidget.oo-ui-widget-disabled .oo-ui-indicatorElement-indicator {
@@ -782,18 +823,21 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout {
   margin-right: 0;
 }
 .oo-ui-buttonGroupWidget .oo-ui-buttonElement-framed .oo-ui-buttonElement-button {
-  border-radius: 0;
   margin-left: -1px;
+  border-radius: 0;
 }
 .oo-ui-buttonGroupWidget .oo-ui-buttonElement-framed:first-child .oo-ui-buttonElement-button {
+  margin-left: 0;
   border-bottom-left-radius: 2px;
   border-top-left-radius: 2px;
-  margin-left: 0;
 }
 .oo-ui-buttonGroupWidget .oo-ui-buttonElement-framed:last-child .oo-ui-buttonElement-button {
   border-bottom-right-radius: 2px;
   border-top-right-radius: 2px;
 }
+.oo-ui-buttonGroupWidget .oo-ui-buttonElement-framed.oo-ui-widget-disabled + .oo-ui-widget-disabled > .oo-ui-buttonElement-button {
+  border-left-color: #fff;
+}
 .oo-ui-buttonGroupWidget.oo-ui-widget-enabled .oo-ui-buttonElement.oo-ui-widget-enabled > .oo-ui-buttonElement-button:hover,
 .oo-ui-buttonGroupWidget.oo-ui-widget-enabled .oo-ui-buttonElement.oo-ui-widget-enabled > .oo-ui-buttonElement-button:active {
   z-index: 1;
@@ -868,9 +912,9 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout {
 .oo-ui-popupWidget-head {
   -webkit-touch-callout: none;
   -webkit-user-select: none;
-     -moz-user-select: none;
-      -ms-user-select: none;
-          user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
 }
 .oo-ui-popupWidget-head > .oo-ui-buttonWidget {
   float: right;
@@ -965,8 +1009,8 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout {
 }
 .oo-ui-popupWidget-transitioning .oo-ui-popupWidget-popup {
   -webkit-transition: width 100ms, height 100ms, left 100ms;
-     -moz-transition: width 100ms, height 100ms, left 100ms;
-          transition: width 100ms, height 100ms, left 100ms;
+  -moz-transition: width 100ms, height 100ms, left 100ms;
+  transition: width 100ms, height 100ms, left 100ms;
 }
 .oo-ui-popupWidget-head {
   height: 2.5em;
@@ -989,14 +1033,6 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout {
 .oo-ui-popupButtonWidget .oo-ui-popupWidget {
   cursor: auto;
 }
-.oo-ui-popupButtonWidget-frameless-popup.oo-ui-popupWidget-anchored-top .oo-ui-popupWidget-anchor,
-.oo-ui-popupButtonWidget-frameless-popup.oo-ui-popupWidget-anchored-bottom .oo-ui-popupWidget-anchor {
-  margin-left: 0.9375em;
-}
-.oo-ui-popupButtonWidget-framed-popup.oo-ui-popupWidget-anchored-top .oo-ui-popupWidget-anchor,
-.oo-ui-popupButtonWidget-framed-popup.oo-ui-popupWidget-anchored-bottom .oo-ui-popupWidget-anchor {
-  margin-left: 1.5em;
-}
 .oo-ui-inputWidget {
   margin-right: 0.5em;
 }
@@ -1034,8 +1070,8 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout {
   background-repeat: no-repeat;
   background-size: 0 0;
   -webkit-box-sizing: border-box;
-     -moz-box-sizing: border-box;
-          box-sizing: border-box;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
   position: absolute;
   left: 0;
   width: 1.5625em;
@@ -1046,8 +1082,8 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout {
 .oo-ui-checkboxInputWidget [type='checkbox']:checked + span {
   background-image: url('themes/mediawiki/images/icons/check-invert.png');
   background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url('themes/mediawiki/images/icons/check-invert.svg');
-  background-image:         linear-gradient(transparent, transparent), /* @embed */ url('themes/mediawiki/images/icons/check-invert.svg');
-  background-image:      -o-linear-gradient(transparent, transparent), url('themes/mediawiki/images/icons/check-invert.png');
+  background-image: linear-gradient(transparent, transparent), /* @embed */ url('themes/mediawiki/images/icons/check-invert.svg');
+  background-image: -o-linear-gradient(transparent, transparent), url('themes/mediawiki/images/icons/check-invert.png');
   background-size: 90% 90%;
 }
 .oo-ui-checkboxInputWidget [type='checkbox']:disabled + span {
@@ -1064,8 +1100,8 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout {
 .oo-ui-checkboxInputWidget.oo-ui-widget-enabled [type='checkbox'] + span {
   cursor: pointer;
   -webkit-transition: background-color 100ms, background-size 100ms, border-color 100ms, box-shadow 100ms;
-     -moz-transition: background-color 100ms, background-size 100ms, border-color 100ms, box-shadow 100ms;
-          transition: background-color 100ms, background-size 100ms, border-color 100ms, box-shadow 100ms;
+  -moz-transition: background-color 100ms, background-size 100ms, border-color 100ms, box-shadow 100ms;
+  transition: background-color 100ms, background-size 100ms, border-color 100ms, box-shadow 100ms;
 }
 .oo-ui-checkboxInputWidget.oo-ui-widget-enabled [type='checkbox']:hover + span,
 .oo-ui-checkboxInputWidget.oo-ui-widget-enabled [type='checkbox']:focus:hover + span {
@@ -1115,8 +1151,8 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout {
   position: relative;
   vertical-align: middle;
   -webkit-box-sizing: border-box;
-     -moz-box-sizing: border-box;
-          box-sizing: border-box;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
   width: 100%;
   max-width: 50em;
 }
@@ -1129,8 +1165,8 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout {
   background-repeat: no-repeat;
   width: 100%;
   -webkit-box-sizing: border-box;
-     -moz-box-sizing: border-box;
-          box-sizing: border-box;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
 }
 .oo-ui-dropdownInputWidget.oo-ui-widget-enabled select {
   cursor: pointer;
@@ -1142,14 +1178,14 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout {
 }
 .oo-ui-dropdownInputWidget select {
   -webkit-appearance: none;
-     -moz-appearance: none;
-          appearance: none;
+  -moz-appearance: none;
+  appearance: none;
   -webkit-box-sizing: border-box;
-     -moz-box-sizing: border-box;
-          box-sizing: border-box;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
   border: 1px solid #a2a9b1;
   border-radius: 2px;
-  padding: 0.5em 1em;
+  padding: 0.625em 0.9375em 0.546875em;
   font-size: inherit;
   font-family: inherit;
   vertical-align: middle;
@@ -1161,20 +1197,20 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout {
   background-position: right 1.75em center;
   width: calc( 100% + 1em );
   height: 2.5em;
-  padding: 0 0 0 1em;
+  padding: 0 0 0 0.9375em;
 }
 .oo-ui-dropdownInputWidget option {
   font-size: inherit;
   font-family: inherit;
   height: 1.5em;
-  padding: 0.5em 1em;
+  padding: 0.625em 0.9375em;
 }
 .oo-ui-dropdownInputWidget.oo-ui-widget-enabled select {
   background-color: #f8f9fa;
   color: #222;
   -webkit-transition: background-color 100ms, border-color 100ms, box-shadow 100ms;
-     -moz-transition: background-color 100ms, border-color 100ms, box-shadow 100ms;
-          transition: background-color 100ms, border-color 100ms, box-shadow 100ms;
+  -moz-transition: background-color 100ms, border-color 100ms, box-shadow 100ms;
+  transition: background-color 100ms, border-color 100ms, box-shadow 100ms;
 }
 .oo-ui-dropdownInputWidget.oo-ui-widget-enabled select:hover {
   background-color: #fff;
@@ -1218,8 +1254,8 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout {
   position: absolute;
   left: 0;
   -webkit-box-sizing: border-box;
-     -moz-box-sizing: border-box;
-          box-sizing: border-box;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
   width: 1.5625em;
   height: 1.5625em;
   border: 1px solid #72777d;
@@ -1255,8 +1291,8 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout {
 .oo-ui-radioInputWidget.oo-ui-widget-enabled [type='radio'] + span {
   cursor: pointer;
   -webkit-transition: background-color 100ms, border-color 100ms, border-width 100ms;
-     -moz-transition: background-color 100ms, border-color 100ms, border-width 100ms;
-          transition: background-color 100ms, border-color 100ms, border-width 100ms;
+  -moz-transition: background-color 100ms, border-color 100ms, border-width 100ms;
+  transition: background-color 100ms, border-color 100ms, border-width 100ms;
 }
 .oo-ui-radioInputWidget.oo-ui-widget-enabled [type='radio']:hover + span {
   border-color: #36c;
@@ -1307,8 +1343,8 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout {
   position: relative;
   vertical-align: middle;
   -webkit-box-sizing: border-box;
-     -moz-box-sizing: border-box;
-          box-sizing: border-box;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
   width: 100%;
   max-width: 50em;
 }
@@ -1317,8 +1353,8 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout {
   display: block;
   width: 100%;
   -webkit-box-sizing: border-box;
-     -moz-box-sizing: border-box;
-          box-sizing: border-box;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
 }
 .oo-ui-textInputWidget textarea {
   overflow: auto;
@@ -1355,9 +1391,9 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout {
   height: 100%;
   -webkit-touch-callout: none;
   -webkit-user-select: none;
-     -moz-user-select: none;
-      -ms-user-select: none;
-          user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
 }
 .oo-ui-textInputWidget.oo-ui-widget-enabled > .oo-ui-iconElement-icon,
 .oo-ui-textInputWidget.oo-ui-widget-enabled > .oo-ui-indicatorElement-indicator {
@@ -1367,19 +1403,13 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout {
   cursor: pointer;
 }
 .oo-ui-textInputWidget.oo-ui-widget-disabled input,
-.oo-ui-textInputWidget.oo-ui-widget-disabled textarea {
-  -webkit-touch-callout: none;
-  -webkit-user-select: none;
-     -moz-user-select: none;
-      -ms-user-select: none;
-          user-select: none;
-}
+.oo-ui-textInputWidget.oo-ui-widget-disabled textarea,
 .oo-ui-textInputWidget.oo-ui-widget-disabled .oo-ui-labelElement-label {
   -webkit-touch-callout: none;
   -webkit-user-select: none;
-     -moz-user-select: none;
-      -ms-user-select: none;
-          user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
 }
 .oo-ui-textInputWidget.oo-ui-labelElement > .oo-ui-labelElement-label {
   display: block;
@@ -1410,7 +1440,7 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout {
   color: #000;
   border: 1px solid #a2a9b1;
   border-radius: 2px;
-  padding: 0.625em 0.546875em 0.546875em;
+  padding: 0.625em 0.625em 0.546875em;
 }
 .oo-ui-textInputWidget input {
   line-height: 1.172em;
@@ -1423,10 +1453,10 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout {
 }
 .oo-ui-textInputWidget.oo-ui-widget-enabled input,
 .oo-ui-textInputWidget.oo-ui-widget-enabled textarea {
-  box-shadow: inset 0 0 0 1px #fff;
+  box-shadow: inset 0 0 0 1px transparent;
   -webkit-transition: border-color 200ms cubic-bezier(0.39, 0.575, 0.565, 1), box-shadow 200ms cubic-bezier(0.39, 0.575, 0.565, 1);
-     -moz-transition: border-color 200ms cubic-bezier(0.39, 0.575, 0.565, 1), box-shadow 200ms cubic-bezier(0.39, 0.575, 0.565, 1);
-          transition: border-color 200ms cubic-bezier(0.39, 0.575, 0.565, 1), box-shadow 200ms cubic-bezier(0.39, 0.575, 0.565, 1);
+  -moz-transition: border-color 200ms cubic-bezier(0.39, 0.575, 0.565, 1), box-shadow 200ms cubic-bezier(0.39, 0.575, 0.565, 1);
+  transition: border-color 200ms cubic-bezier(0.39, 0.575, 0.565, 1), box-shadow 200ms cubic-bezier(0.39, 0.575, 0.565, 1);
 }
 .oo-ui-textInputWidget.oo-ui-widget-enabled input:hover,
 .oo-ui-textInputWidget.oo-ui-widget-enabled textarea:hover {
@@ -1440,7 +1470,7 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout {
 }
 .oo-ui-textInputWidget.oo-ui-widget-enabled input[readonly],
 .oo-ui-textInputWidget.oo-ui-widget-enabled textarea[readonly] {
-  color: #72777d;
+  background-color: #f8f9fa;
 }
 .oo-ui-textInputWidget.oo-ui-widget-enabled input[readonly]:hover,
 .oo-ui-textInputWidget.oo-ui-widget-enabled textarea[readonly]:hover {
@@ -1448,8 +1478,7 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout {
 }
 .oo-ui-textInputWidget.oo-ui-widget-enabled input[readonly]:focus,
 .oo-ui-textInputWidget.oo-ui-widget-enabled textarea[readonly]:focus {
-  border-color: #c8ccd1;
-  box-shadow: inset 0 0 0 1px #c8ccd1;
+  border-color: #36c;
 }
 .oo-ui-textInputWidget.oo-ui-widget-enabled input::-webkit-input-placeholder,
 .oo-ui-textInputWidget.oo-ui-widget-enabled textarea::-webkit-input-placeholder {
@@ -1513,34 +1542,31 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout {
 }
 .oo-ui-textInputWidget.oo-ui-iconElement input,
 .oo-ui-textInputWidget.oo-ui-iconElement textarea {
-  padding-left: 2.875em;
+  padding-left: 2.5em;
 }
 .oo-ui-textInputWidget.oo-ui-iconElement .oo-ui-iconElement-icon {
-  left: 0;
+  left: 0.46875em;
   max-height: 2.5em;
-  margin-left: 0.5em;
-  background-position: right center;
 }
 .oo-ui-textInputWidget.oo-ui-indicatorElement input,
 .oo-ui-textInputWidget.oo-ui-indicatorElement textarea {
-  padding-right: 2.4875em;
+  padding-right: 2.1875em;
 }
 .oo-ui-textInputWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator {
-  height: 100%;
   max-height: 2.5em;
-  margin: 0 0.775em;
+  margin-right: 0.9375em;
 }
 .oo-ui-textInputWidget > .oo-ui-labelElement-label {
   color: #72777d;
   margin-top: 1px;
-  padding: 0.625em 0.546875em 0.546875em;
+  padding: 0.625em 0 0.546875em 0.625em;
   line-height: 1.172em;
 }
 .oo-ui-textInputWidget-labelPosition-after.oo-ui-indicatorElement > .oo-ui-labelElement-label {
-  margin-right: 2.0875em;
+  margin-right: 2.5em;
 }
 .oo-ui-textInputWidget-labelPosition-before.oo-ui-iconElement > .oo-ui-labelElement-label {
-  margin-left: 2.475em;
+  padding-left: 2.5em;
 }
 .oo-ui-menuSelectWidget {
   position: absolute;
@@ -1566,16 +1592,9 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout {
   display: none;
 }
 .oo-ui-menuOptionWidget {
-  padding: 0.5em 1em;
   -webkit-transition: background-color 100ms, color 100ms;
-     -moz-transition: background-color 100ms, color 100ms;
-          transition: background-color 100ms, color 100ms;
-}
-.oo-ui-menuOptionWidget .oo-ui-iconElement-icon {
-  display: none;
-}
-.oo-ui-menuOptionWidget.oo-ui-optionWidget-selected .oo-ui-iconElement-icon {
-  display: block;
+  -moz-transition: background-color 100ms, color 100ms;
+  transition: background-color 100ms, color 100ms;
 }
 .oo-ui-menuOptionWidget.oo-ui-optionWidget-highlighted {
   background-color: #eaecf0;
@@ -1585,18 +1604,18 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout {
   background-color: #eaf3ff;
   color: #36c;
 }
-.oo-ui-menuOptionWidget.oo-ui-optionWidget-selected .oo-ui-iconElement-icon {
-  display: none;
-}
 .oo-ui-menuOptionWidget.oo-ui-optionWidget-selected.oo-ui-menuOptionWidget.oo-ui-optionWidget-highlighted,
 .oo-ui-menuOptionWidget.oo-ui-optionWidget-pressed.oo-ui-menuOptionWidget.oo-ui-optionWidget-highlighted {
   background-color: rgba(41, 98, 204, 0.1);
   color: #36c;
 }
 .oo-ui-menuSectionOptionWidget {
-  cursor: default;
   color: #72777d;
-  padding: 0.33em 0.75em;
+  padding: 0.703125em 0.9375em 0.3125em;
+  font-weight: bold;
+}
+.oo-ui-menuSectionOptionWidget.oo-ui-widget-enabled {
+  cursor: default;
 }
 .oo-ui-dropdownWidget {
   display: inline-block;
@@ -1606,6 +1625,7 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout {
   margin-right: 0.5em;
 }
 .oo-ui-dropdownWidget-handle {
+  position: relative;
   width: 100%;
   display: block;
   white-space: nowrap;
@@ -1614,12 +1634,12 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout {
   cursor: default;
   -webkit-touch-callout: none;
   -webkit-user-select: none;
-     -moz-user-select: none;
-      -ms-user-select: none;
-          user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
   -webkit-box-sizing: border-box;
-     -moz-box-sizing: border-box;
-          box-sizing: border-box;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
 }
 .oo-ui-dropdownWidget-handle .oo-ui-iconElement-icon,
 .oo-ui-dropdownWidget-handle .oo-ui-indicatorElement-indicator {
@@ -1634,29 +1654,33 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout {
   margin-right: 0;
 }
 .oo-ui-dropdownWidget-handle {
-  padding: 0.546875em 0;
-  height: 2.5em;
-  line-height: 1.275;
+  min-height: 2.5em;
   border: 1px solid #a2a9b1;
   border-radius: 2px;
-}
-.oo-ui-dropdownWidget-handle .oo-ui-indicatorElement-indicator {
-  right: 0;
-  margin: 0 0.775em;
+  padding: 0.625em 0.9375em 0.546875em;
+  line-height: 1;
 }
 .oo-ui-dropdownWidget-handle .oo-ui-iconElement-icon {
-  left: 0.25em;
-  margin: 0 0.3em;
+  left: 0.46875em;
+}
+.oo-ui-dropdownWidget-handle .oo-ui-indicatorElement-indicator {
+  right: 0.9375em;
 }
 .oo-ui-dropdownWidget-handle .oo-ui-labelElement-label {
-  margin: 0 1em;
+  line-height: 1.172em;
+}
+.oo-ui-dropdownWidget.oo-ui-iconElement .oo-ui-dropdownWidget-handle {
+  padding-left: 2.5em;
+}
+.oo-ui-dropdownWidget.oo-ui-indicatorElement .oo-ui-dropdownWidget-handle {
+  padding-right: 1.875em;
 }
 .oo-ui-dropdownWidget.oo-ui-widget-enabled .oo-ui-dropdownWidget-handle {
   background-color: #f8f9fa;
   color: #222;
   -webkit-transition: background-color 100ms, border-color 100ms, box-shadow 100ms;
-     -moz-transition: background-color 100ms, border-color 100ms, box-shadow 100ms;
-          transition: background-color 100ms, border-color 100ms, box-shadow 100ms;
+  -moz-transition: background-color 100ms, border-color 100ms, box-shadow 100ms;
+  transition: background-color 100ms, border-color 100ms, box-shadow 100ms;
 }
 .oo-ui-dropdownWidget.oo-ui-widget-enabled .oo-ui-dropdownWidget-handle:hover {
   background-color: #fff;
@@ -1680,8 +1704,8 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout {
 .oo-ui-dropdownWidget.oo-ui-widget-enabled .oo-ui-dropdownWidget-handle .oo-ui-indicatorElement-indicator {
   opacity: 0.87;
   -webkit-transition: opacity 100ms;
-     -moz-transition: opacity 100ms;
-          transition: opacity 100ms;
+  -moz-transition: opacity 100ms;
+  transition: opacity 100ms;
 }
 .oo-ui-dropdownWidget.oo-ui-widget-enabled.oo-ui-dropdownWidget-open .oo-ui-dropdownWidget-handle {
   background-color: #fff;
@@ -1702,12 +1726,6 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout {
 .oo-ui-dropdownWidget.oo-ui-widget-disabled .oo-ui-indicatorElement-indicator {
   opacity: 0.15;
 }
-.oo-ui-dropdownWidget.oo-ui-iconElement .oo-ui-dropdownWidget-handle .oo-ui-labelElement-label {
-  margin-left: 3em;
-}
-.oo-ui-dropdownWidget.oo-ui-indicatorElement .oo-ui-dropdownWidget-handle .oo-ui-labelElement-label {
-  margin-right: 2em;
-}
 .oo-ui-comboBoxInputWidget {
   display: inline-block;
   position: relative;
@@ -1742,7 +1760,11 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout {
   height: 2.5em;
   padding: 0;
 }
-.oo-ui-comboBoxInputWidget-php > .oo-ui-indicatorElement-indicator {
+.oo-ui-comboBoxInputWidget-php > .oo-ui-indicatorWidget {
+  display: block;
+  position: absolute;
+  top: 0;
+  height: 100%;
   pointer-events: none;
 }
 .oo-ui-comboBoxInputWidget input {
@@ -1757,20 +1779,26 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout {
   border-bottom-right-radius: 2px;
   border-right-width: 1px;
 }
-.oo-ui-comboBoxInputWidget-dropdownButton {
+.oo-ui-comboBoxInputWidget-dropdownButton.oo-ui-indicatorElement {
   width: 2.5em;
 }
-.oo-ui-comboBoxInputWidget-dropdownButton .oo-ui-buttonElement-button {
+.oo-ui-comboBoxInputWidget-dropdownButton.oo-ui-indicatorElement .oo-ui-buttonElement-button {
   min-width: 2.5em;
   min-height: 2.5em;
   padding-left: 0;
-  padding-right: 0;
 }
-.oo-ui-comboBoxInputWidget-dropdownButton .oo-ui-buttonElement-button,
-.oo-ui-comboBoxInputWidget-dropdownButton .oo-ui-buttonElement-button:focus {
+.oo-ui-comboBoxInputWidget-dropdownButton.oo-ui-indicatorElement .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator {
+  right: 0.703125em;
+}
+.oo-ui-comboBoxInputWidget-dropdownButton.oo-ui-indicatorElement .oo-ui-buttonElement-button,
+.oo-ui-comboBoxInputWidget-dropdownButton.oo-ui-indicatorElement .oo-ui-buttonElement-button:focus {
   border-top-left-radius: 0;
   border-bottom-left-radius: 0;
 }
+.oo-ui-comboBoxInputWidget-php .oo-ui-indicatorWidget {
+  right: 0.9375em;
+  margin: 0;
+}
 .oo-ui-comboBoxInputWidget.oo-ui-widget-disabled .oo-ui-indicatorElement-indicator {
   opacity: 1;
 }
@@ -1817,18 +1845,18 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout {
 .oo-ui-progressBarWidget-bar {
   height: 1em;
   -webkit-transition: width 200ms;
-     -moz-transition: width 200ms;
-          transition: width 200ms;
+  -moz-transition: width 200ms;
+  transition: width 200ms;
 }
 .oo-ui-progressBarWidget-indeterminate .oo-ui-progressBarWidget-bar {
   -webkit-animation: oo-ui-progressBarWidget-slide 2s infinite linear;
-     -moz-animation: oo-ui-progressBarWidget-slide 2s infinite linear;
-          animation: oo-ui-progressBarWidget-slide 2s infinite linear;
+  -moz-animation: oo-ui-progressBarWidget-slide 2s infinite linear;
+  animation: oo-ui-progressBarWidget-slide 2s infinite linear;
   width: 40%;
   -webkit-transform: translate(-25%);
-     -moz-transform: translate(-25%);
-      -ms-transform: translate(-25%);
-          transform: translate(-25%);
+  -moz-transform: translate(-25%);
+  -ms-transform: translate(-25%);
+  transform: translate(-25%);
   border-left-width: 1px;
 }
 .oo-ui-progressBarWidget.oo-ui-widget-enabled .oo-ui-progressBarWidget-bar {
@@ -1840,42 +1868,42 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout {
 @-webkit-keyframes oo-ui-progressBarWidget-slide {
   from {
     -webkit-transform: translate(-100%);
-       -moz-transform: translate(-100%);
-        -ms-transform: translate(-100%);
-            transform: translate(-100%);
+    -moz-transform: translate(-100%);
+    -ms-transform: translate(-100%);
+    transform: translate(-100%);
   }
   to {
     -webkit-transform: translate(350%);
-       -moz-transform: translate(350%);
-        -ms-transform: translate(350%);
-            transform: translate(350%);
+    -moz-transform: translate(350%);
+    -ms-transform: translate(350%);
+    transform: translate(350%);
   }
 }
 @-moz-keyframes oo-ui-progressBarWidget-slide {
   from {
     -webkit-transform: translate(-100%);
-       -moz-transform: translate(-100%);
-        -ms-transform: translate(-100%);
-            transform: translate(-100%);
+    -moz-transform: translate(-100%);
+    -ms-transform: translate(-100%);
+    transform: translate(-100%);
   }
   to {
     -webkit-transform: translate(350%);
-       -moz-transform: translate(350%);
-        -ms-transform: translate(350%);
-            transform: translate(350%);
+    -moz-transform: translate(350%);
+    -ms-transform: translate(350%);
+    transform: translate(350%);
   }
 }
 @keyframes oo-ui-progressBarWidget-slide {
   from {
     -webkit-transform: translate(-100%);
-       -moz-transform: translate(-100%);
-        -ms-transform: translate(-100%);
-            transform: translate(-100%);
+    -moz-transform: translate(-100%);
+    -ms-transform: translate(-100%);
+    transform: translate(-100%);
   }
   to {
     -webkit-transform: translate(350%);
-       -moz-transform: translate(350%);
-        -ms-transform: translate(350%);
-            transform: translate(350%);
+    -moz-transform: translate(350%);
+    -ms-transform: translate(350%);
+    transform: translate(350%);
   }
 }
index 44b21ab..c00d9a7 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.20.2
+ * OOjs UI v0.21.1
  * 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-30T20:34:37Z
+ * Date: 2017-04-18T23:32:49Z
  */
 ( function ( OO ) {
 
@@ -73,10 +73,10 @@ OO.ui.generateElementId = function () {
 
 /**
  * Check if an element is focusable.
- * Inspired from :focusable in jQueryUI v1.11.4 - 2015-04-14
+ * Inspired by :focusable in jQueryUI v1.11.4 - 2015-04-14
  *
  * @param {jQuery} $element Element to test
- * @return {boolean}
+ * @return {boolean} Element is focusable
  */
 OO.ui.isFocusableElement = function ( $element ) {
        var nodeName,
@@ -131,7 +131,7 @@ OO.ui.isFocusableElement = function ( $element ) {
  *
  * @param {jQuery} $container Container to search in
  * @param {boolean} [backwards] Search backwards
- * @return {jQuery} Focusable child, an empty jQuery object if none found
+ * @return {jQuery} Focusable child, or an empty jQuery object if none found
  */
 OO.ui.findFocusable = function ( $container, backwards ) {
        var $focusable = $( [] ),
@@ -235,10 +235,10 @@ OO.ui.contains = function ( containers, contained, matchContainers ) {
  *
  * Ported from: http://underscorejs.org/underscore.js
  *
- * @param {Function} func
- * @param {number} wait
- * @param {boolean} immediate
- * @return {Function}
+ * @param {Function} func Function to debounce
+ * @param {number} [wait=0] Wait period in milliseconds
+ * @param {boolean} [immediate] Trigger on leading edge
+ * @return {Function} Debounced function
  */
 OO.ui.debounce = function ( func, wait, immediate ) {
        var timeout;
@@ -264,7 +264,7 @@ OO.ui.debounce = function ( func, wait, immediate ) {
 /**
  * Puts a console warning with provided message.
  *
- * @param {string} message
+ * @param {string} message Message
  */
 OO.ui.warnDeprecation = function ( message ) {
        if ( OO.getProp( window, 'console', 'warn' ) !== undefined ) {
@@ -282,9 +282,9 @@ OO.ui.warnDeprecation = function ( message ) {
  * when the wrapper is called, return values from the function are entirely
  * discarded.
  *
- * @param {Function} func
- * @param {number} wait
- * @return {Function}
+ * @param {Function} func Function to throttle
+ * @param {number} wait Throttle window length, in milliseconds
+ * @return {Function} Throttled function
  */
 OO.ui.throttle = function ( func, wait ) {
        var context, args, timeout,
@@ -319,7 +319,7 @@ OO.ui.throttle = function ( func, wait ) {
 /**
  * A (possibly faster) way to get the current timestamp as an integer
  *
- * @return {number} Current timestamp
+ * @return {number} Current timestamp, in milliseconds since the Unix epoch
  */
 OO.ui.now = Date.now || function () {
        return new Date().getTime();
@@ -719,7 +719,7 @@ OO.ui.Element.static.unsafeInfuse = function ( idOrNode, domPromise ) {
                throw new Error( 'No infusion data found: ' + id );
        }
        try {
-               data = $.parseJSON( data );
+               data = JSON.parse( data );
        } catch ( _ ) {
                data = null;
        }
@@ -3583,9 +3583,11 @@ OO.ui.ButtonWidget.prototype.setNoFollow = function ( noFollow ) {
 // Override method visibility hints from ButtonElement
 /**
  * @method setActive
+ * @inheritdoc
  */
 /**
  * @method isActive
+ * @inheritdoc
  */
 
 /**
@@ -4560,7 +4562,7 @@ OO.ui.mixin.ClippableElement.prototype.isClippedVertically = function () {
 };
 
 /**
- * Set the ideal size. These are the dimensions the element will have when it's not being clipped.
+ * Set the ideal size. These are the dimensions #$clippable will have when it's not being clipped.
  *
  * @param {number|string} [width] Width as a number of pixels or CSS string with unit suffix
  * @param {number|string} [height] Height as a number of pixels or CSS string with unit suffix
@@ -4645,7 +4647,7 @@ OO.ui.mixin.ClippableElement.prototype.clip = function () {
        } else {
                this.$clippable.css( {
                        overflowX: '',
-                       width: this.idealWidth ? this.idealWidth - extraWidth : '',
+                       width: this.idealWidth || '',
                        maxWidth: Math.max( 0, allotedWidth )
                } );
        }
@@ -4661,7 +4663,7 @@ OO.ui.mixin.ClippableElement.prototype.clip = function () {
        } else {
                this.$clippable.css( {
                        overflowY: '',
-                       height: this.idealHeight ? this.idealHeight - extraHeight : '',
+                       height: this.idealHeight || '',
                        maxHeight: Math.max( 0, allotedHeight )
                } );
        }
@@ -4710,8 +4712,10 @@ OO.ui.mixin.ClippableElement.prototype.clip = function () {
  * @cfg {number} [height] Height of popup in pixels. Omit to use the automatic height.
  * @cfg {boolean} [anchor=true] Show anchor pointing to origin of popup
  * @cfg {string} [position='below'] Where to position the popup relative to $floatableContainer
- *  'above': Put popup above $floatableContainer; anchor points down to the start edge of $floatableContainer
- *  'below': Put popup below $floatableContainer; anchor points up to the start edge of $floatableContainer
+ *  'above': Put popup above $floatableContainer; anchor points down to the horizontal center
+ *           of $floatableContainer
+ *  'below': Put popup below $floatableContainer; anchor points up to the horizontal center
+ *           of $floatableContainer
  *  'before': Put popup to the left (LTR) / right (RTL) of $floatableContainer; anchor points
  *            endwards (right/left) to the vertical center of $floatableContainer
  *  'after': Put popup to the right (LTR) / left (RTL) of $floatableContainer; anchor points
@@ -4928,8 +4932,10 @@ OO.ui.PopupWidget.prototype.toggleAnchor = function ( show ) {
        if ( this.anchored !== show ) {
                if ( show ) {
                        this.$element.addClass( 'oo-ui-popupWidget-anchored' );
+                       this.$element.addClass( 'oo-ui-popupWidget-anchored-' + this.anchorEdge );
                } else {
                        this.$element.removeClass( 'oo-ui-popupWidget-anchored' );
+                       this.$element.removeClass( 'oo-ui-popupWidget-anchored-' + this.anchorEdge );
                }
                this.anchored = show;
        }
@@ -4947,7 +4953,9 @@ OO.ui.PopupWidget.prototype.setAnchorEdge = function ( edge ) {
                this.$element.removeClass( 'oo-ui-popupWidget-anchored-' + this.anchorEdge );
        }
        this.anchorEdge = edge;
-       this.$element.addClass( 'oo-ui-popupWidget-anchored-' + edge );
+       if ( this.anchored ) {
+               this.$element.addClass( 'oo-ui-popupWidget-anchored-' + edge );
+       }
 };
 
 /**
@@ -5148,8 +5156,7 @@ OO.ui.PopupWidget.prototype.computePosition = function () {
        }
 
        // Position the anchor (which is positioned relative to the popup) to point to $floatableContainer
-       // For popups above/below, we point to the start edge; for popups before/after, we point to the center
-       anchorPos = vertical ? ( floatablePos[ start ] + floatablePos[ end ] ) / 2 : floatablePos[ start ];
+       anchorPos = ( floatablePos[ start ] + floatablePos[ end ] ) / 2;
        anchorOffset = ( start === far ? -1 : 1 ) * ( anchorPos - popupPos[ start ] );
 
        // If the anchor is less than 2*anchorSize from either edge, move the popup to make more space
@@ -6607,9 +6614,6 @@ OO.mixinClass( OO.ui.DecoratedOptionWidget, OO.ui.mixin.IndicatorElement );
  * @param {Object} [config] Configuration options
  */
 OO.ui.MenuOptionWidget = function OoUiMenuOptionWidget( config ) {
-       // Configuration initialization
-       config = $.extend( { icon: 'check' }, config );
-
        // Parent constructor
        OO.ui.MenuOptionWidget.parent.call( this, config );
 
@@ -6734,8 +6738,10 @@ OO.ui.MenuSectionOptionWidget.static.highlightable = false;
  *  that toggles the menu's visibility on click, the menu will be hidden then re-shown when the user clicks
  *  that button, unless the button (or its parent widget) is passed in here.
  * @cfg {boolean} [autoHide=true] Hide the menu when the mouse is pressed outside the menu.
+ * @cfg {jQuery} [$autoCloseIgnore] If these elements are clicked, don't auto-hide the menu.
  * @cfg {boolean} [hideOnChoose=true] Hide the menu when the user chooses an option.
  * @cfg {boolean} [filterFromInput=false] Filter the displayed options from the input
+ * @cfg {boolean} [highlightOnFilter] Highlight the first result when filtering
  */
 OO.ui.MenuSelectWidget = function OoUiMenuSelectWidget( config ) {
        // Configuration initialization
@@ -6753,8 +6759,10 @@ OO.ui.MenuSelectWidget = function OoUiMenuSelectWidget( config ) {
        this.filterFromInput = !!config.filterFromInput;
        this.$input = config.$input ? config.$input : config.input ? config.input.$input : null;
        this.$widget = config.widget ? config.widget.$element : null;
+       this.$autoCloseIgnore = config.$autoCloseIgnore || $( [] );
        this.onDocumentMouseDownHandler = this.onDocumentMouseDown.bind( this );
        this.onInputEditHandler = OO.ui.debounce( this.updateItemVisibility.bind( this ), 100 );
+       this.highlightOnFilter = !!config.highlightOnFilter;
 
        // Initialization
        this.$element
@@ -6783,8 +6791,12 @@ OO.mixinClass( OO.ui.MenuSelectWidget, OO.ui.mixin.ClippableElement );
  */
 OO.ui.MenuSelectWidget.prototype.onDocumentMouseDown = function ( e ) {
        if (
-               !OO.ui.contains( this.$element[ 0 ], e.target, true ) &&
-               ( !this.$widget || !OO.ui.contains( this.$widget[ 0 ], e.target, true ) )
+               this.isVisible() &&
+               !OO.ui.contains(
+                               this.$element.add( this.$widget ).add( this.$autoCloseIgnore ).get(),
+                               e.target,
+                               true
+               )
        ) {
                this.toggle( false );
        }
@@ -6831,6 +6843,7 @@ OO.ui.MenuSelectWidget.prototype.onKeyDown = function ( e ) {
  */
 OO.ui.MenuSelectWidget.prototype.updateItemVisibility = function () {
        var i, item, visible, section, sectionEmpty,
+               firstItemFound = false,
                anyVisible = false,
                len = this.items.length,
                showAll = !this.isVisible(),
@@ -6852,6 +6865,11 @@ OO.ui.MenuSelectWidget.prototype.updateItemVisibility = function () {
                        anyVisible = anyVisible || visible;
                        sectionEmpty = sectionEmpty && !visible;
                        item.toggle( visible );
+                       if ( this.highlightOnFilter && visible && !firstItemFound ) {
+                               // Highlight the first item in the list
+                               this.highlightItem( item );
+                               firstItemFound = true;
+                       }
                }
        }
        // Process the final section
@@ -7832,6 +7850,7 @@ OO.ui.CheckboxMultiselectWidget.prototype.onClick = function ( e ) {
  *   Deprecated, omit this parameter and specify `$container` instead.
  * @param {Object} [config] Configuration options
  * @cfg {jQuery} [$container=inputWidget.$element] Element to render menu under
+ * @cfg {number} [width] Width of the menu
  */
 OO.ui.FloatingMenuSelectWidget = function OoUiFloatingMenuSelectWidget( inputWidget, config ) {
        // Allow 'inputWidget' parameter and config for backwards compatibility
@@ -7843,6 +7862,8 @@ OO.ui.FloatingMenuSelectWidget = function OoUiFloatingMenuSelectWidget( inputWid
        // Configuration initialization
        config = config || {};
 
+       this.width = config.width;
+
        // Parent constructor
        OO.ui.FloatingMenuSelectWidget.parent.call( this, config );
 
@@ -7864,9 +7885,18 @@ OO.ui.FloatingMenuSelectWidget = function OoUiFloatingMenuSelectWidget( inputWid
 OO.inheritClass( OO.ui.FloatingMenuSelectWidget, OO.ui.MenuSelectWidget );
 OO.mixinClass( OO.ui.FloatingMenuSelectWidget, OO.ui.mixin.FloatableElement );
 
+/* Events */
+
+/**
+ * @event ready
+ *
+ * The menu is ready: it is visible and has been positioned and clipped.
+ */
+
 /* Methods */
 
 /**
+ * @fires ready
  * @inheritdoc
  */
 OO.ui.FloatingMenuSelectWidget.prototype.toggle = function ( visible ) {
@@ -7876,7 +7906,7 @@ OO.ui.FloatingMenuSelectWidget.prototype.toggle = function ( visible ) {
 
        if ( change && visible ) {
                // Make sure the width is set before the parent method runs.
-               this.setIdealSize( this.$container.width() );
+               this.setIdealSize( this.width || this.$container.width() );
        }
 
        // Parent method
@@ -7885,6 +7915,9 @@ OO.ui.FloatingMenuSelectWidget.prototype.toggle = function ( visible ) {
 
        if ( change ) {
                this.togglePositioning( this.isVisible() );
+               if ( visible ) {
+                       this.emit( 'ready' );
+               }
        }
 
        return this;
@@ -8626,6 +8659,7 @@ OO.ui.DropdownInputWidget = function OoUiDropdownInputWidget( config ) {
        this.$element
                .addClass( 'oo-ui-dropdownInputWidget' )
                .append( this.dropdownWidget.$element );
+       this.setTabIndexedElement( null );
 };
 
 /* Setup */
@@ -8657,8 +8691,12 @@ OO.ui.DropdownInputWidget.prototype.onMenuSelect = function ( item ) {
  * @inheritdoc
  */
 OO.ui.DropdownInputWidget.prototype.setValue = function ( value ) {
+       var selected;
        value = this.cleanUpValue( value );
        this.dropdownWidget.getMenu().selectItemByData( value );
+       // Only allow setting values that are actually present in the dropdown
+       selected = this.dropdownWidget.getMenu().getSelectedItem();
+       value = selected ? selected.getData() : '';
        OO.ui.DropdownInputWidget.parent.prototype.setValue.call( this, value );
        return this;
 };
@@ -8904,6 +8942,7 @@ OO.ui.RadioSelectInputWidget = function OoUiRadioSelectInputWidget( config ) {
        this.$element
                .addClass( 'oo-ui-radioSelectInputWidget' )
                .append( this.radioSelectWidget.$element );
+       this.setTabIndexedElement( null );
 };
 
 /* Setup */
@@ -9560,14 +9599,14 @@ OO.ui.TextInputWidget.prototype.setRequired = function ( state ) {
        this.required = !!state;
        if ( this.required ) {
                this.$input
-                       .attr( 'required', 'required' )
+                       .prop( 'required', true )
                        .attr( 'aria-required', 'true' );
                if ( this.getIndicator() === null ) {
                        this.setIndicator( 'required' );
                }
        } else {
                this.$input
-                       .removeAttr( 'required' )
+                       .prop( 'required', false )
                        .removeAttr( 'aria-required' );
                if ( this.getIndicator() === 'required' ) {
                        this.setIndicator( null );
@@ -10259,9 +10298,14 @@ OO.ui.ComboBoxInputWidget = function OoUiComboBoxInputWidget( config ) {
                autocomplete: false
        }, config );
 
-       // ComboBoxInputWidget shouldn't support multiline
+       // ComboBoxInputWidget shouldn't support `multiline`
        config.multiline = false;
 
+       // See InputWidget#reusePreInfuseDOM about `config.$input`
+       if ( config.$input ) {
+               config.$input.removeAttr( 'list' );
+       }
+
        // Parent constructor
        OO.ui.ComboBoxInputWidget.parent.call( this, config );
 
index 8538b6e..60c67b6 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.20.2
+ * OOjs UI v0.21.1
  * 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-30T20:34:37Z
+ * Date: 2017-04-18T23:32:49Z
  */
 ( function ( OO ) {
 
@@ -48,14 +48,19 @@ OO.ui.MediaWikiTheme.prototype.getElementClasses = function ( element ) {
        if ( element.supports( [ 'hasFlag' ] ) ) {
                isFramed = element.supports( [ 'isFramed' ] ) && element.isFramed();
                isActive = element.supports( [ 'isActive' ] ) && element.isActive();
-               if ( isFramed && ( isActive || element.isDisabled() || element.hasFlag( 'primary' ) ) ) {
-                       // Button with a dark background, use white icon
+               if (
+                       // Button with a dark background
+                       isFramed && ( isActive || element.isDisabled() || element.hasFlag( 'primary' ) ) ||
+                       // Toolbar with a dark background
+                       OO.ui.ToolGroup && element instanceof OO.ui.ToolGroup && ( isActive || element.hasFlag( 'primary' ) )
+               ) {
+                       // … use white icon / indicator, regardless of other flags
                        variants.invert = true;
                } else if ( !isFramed && element.isDisabled() ) {
-                       // Frameless disabled button, always use black icon regardless of flags
+                       // Frameless disabled button, always use black icon / indicator regardless of other flags
                        variants.invert = false;
                } else if ( !element.isDisabled() ) {
-                       // Any other kind of button, use the right colored icon if available
+                       // Any other kind of button, use the right colored icon / indicator if available
                        variants.progressive = element.hasFlag( 'progressive' );
                        variants.constructive = element.hasFlag( 'constructive' );
                        variants.destructive = element.hasFlag( 'destructive' );
index 983bc69..53c5bf3 100644 (file)
@@ -1,21 +1,17 @@
 /*!
- * OOjs UI v0.20.2
+ * OOjs UI v0.21.1
  * 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-30T20:34:41Z
+ * Date: 2017-04-18T23:32:54Z
  */
 .oo-ui-popupTool .oo-ui-popupWidget-popup,
 .oo-ui-popupTool .oo-ui-popupWidget-anchor {
   z-index: 4;
 }
-.oo-ui-popupTool .oo-ui-popupWidget-anchored-top .oo-ui-popupWidget-anchor,
-.oo-ui-popupTool .oo-ui-popupWidget-anchored-bottom .oo-ui-popupWidget-anchor {
-  margin-left: 1.25em;
-}
 .oo-ui-toolGroupTool > .oo-ui-popupToolGroup {
   border: 0;
   border-radius: 0;
@@ -47,8 +43,8 @@
   border-radius: 0.3125em;
   border: 1px solid transparent;
   -webkit-transition: border-color 250ms ease;
-     -moz-transition: border-color 250ms ease;
-          transition: border-color 250ms ease;
+  -moz-transition: border-color 250ms ease;
+  transition: border-color 250ms ease;
 }
 .oo-ui-toolGroup-empty {
   display: none;
   border-color: rgba(0, 0, 0, 0.2);
   box-shadow: inset 0 0.0875em 0.0875em 0 rgba(0, 0, 0, 0.07);
   background-color: #f8fbfd;
-  background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0, #F1F7FB), color-stop(100%, #fff));
-  background-image: -webkit-linear-gradient(top, #F1F7FB 0, #fff 100%);
-  background-image:    -moz-linear-gradient(top, #F1F7FB 0, #fff 100%);
-  background-image:         linear-gradient(to bottom, #F1F7FB 0, #fff 100%);
+  background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0, #f1f7fb), color-stop(100%, #fff));
+  background-image: -webkit-linear-gradient(top, #f1f7fb 0, #fff 100%);
+  background-image: -moz-linear-gradient(top, #f1f7fb 0, #fff 100%);
+  background-image: linear-gradient(to bottom, #f1f7fb 0, #fff 100%);
   -ms-filter: "progid:DXImageTransform.Microsoft.gradient( startColorstr='#fff1f7fb', endColorstr='#ffffffff' )";
 }
 .oo-ui-barToolGroup.oo-ui-widget-enabled > .oo-ui-toolGroup-tools > .oo-ui-tool.oo-ui-tool-active.oo-ui-widget-enabled + .oo-ui-tool-active.oo-ui-widget-enabled {
 .oo-ui-toolbar-narrow .oo-ui-popupToolGroup.oo-ui-labelElement.oo-ui-indicatorElement .oo-ui-popupToolGroup-handle .oo-ui-labelElement-label {
   margin-right: 1.75em;
 }
+.oo-ui-popupToolGroup.oo-ui-flaggedElement-progressive > .oo-ui-popupToolGroup-handle {
+  border: 1px solid #a6cee1;
+  background-color: #cde7f4;
+  background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0, #eaf4fa), color-stop(100%, #b0d9ee));
+  background-image: -webkit-linear-gradient(top, #eaf4fa 0, #b0d9ee 100%);
+  background-image: -moz-linear-gradient(top, #eaf4fa 0, #b0d9ee 100%);
+  background-image: linear-gradient(to bottom, #eaf4fa 0, #b0d9ee 100%);
+  -ms-filter: "progid:DXImageTransform.Microsoft.gradient( startColorstr='#ffeaf4fa', endColorstr='#ffb0d9ee' )";
+}
+.oo-ui-popupToolGroup.oo-ui-flaggedElement-progressive > .oo-ui-popupToolGroup-handle:hover,
+.oo-ui-popupToolGroup.oo-ui-flaggedElement-progressive > .oo-ui-popupToolGroup-handle:focus {
+  border-color: #9dc2d4;
+}
+.oo-ui-popupToolGroup.oo-ui-flaggedElement-progressive.oo-ui-widget-enabled > .oo-ui-popupToolGroup-handle:active,
+.oo-ui-popupToolGroup.oo-ui-flaggedElement-progressive.oo-ui-popupToolGroup-active > .oo-ui-popupToolGroup-handle {
+  border: 1px solid #a6cee1;
+  background-color: #cde7f4;
+  background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0, #b0d9ee), color-stop(100%, #eaf4fa));
+  background-image: -webkit-linear-gradient(top, #b0d9ee 0, #eaf4fa 100%);
+  background-image: -moz-linear-gradient(top, #b0d9ee 0, #eaf4fa 100%);
+  background-image: linear-gradient(to bottom, #b0d9ee 0, #eaf4fa 100%);
+  -ms-filter: "progid:DXImageTransform.Microsoft.gradient( startColorstr='#ffb0d9ee', endColorstr='#ffeaf4fa' )";
+}
+.oo-ui-popupToolGroup.oo-ui-flaggedElement-constructive > .oo-ui-popupToolGroup-handle {
+  border: 1px solid #b8d892;
+  background-color: #daf0bd;
+  background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0, #f0fbe1), color-stop(100%, #c3e59a));
+  background-image: -webkit-linear-gradient(top, #f0fbe1 0, #c3e59a 100%);
+  background-image: -moz-linear-gradient(top, #f0fbe1 0, #c3e59a 100%);
+  background-image: linear-gradient(to bottom, #f0fbe1 0, #c3e59a 100%);
+  -ms-filter: "progid:DXImageTransform.Microsoft.gradient( startColorstr='#fff0fbe1', endColorstr='#ffc3e59a' )";
+}
+.oo-ui-popupToolGroup.oo-ui-flaggedElement-constructive > .oo-ui-popupToolGroup-handle:hover,
+.oo-ui-popupToolGroup.oo-ui-flaggedElement-constructive > .oo-ui-popupToolGroup-handle:focus {
+  border-color: #adcb89;
+}
+.oo-ui-popupToolGroup.oo-ui-flaggedElement-constructive.oo-ui-widget-enabled > .oo-ui-popupToolGroup-handle:active,
+.oo-ui-popupToolGroup.oo-ui-flaggedElement-constructive.oo-ui-popupToolGroup-active > .oo-ui-popupToolGroup-handle {
+  border: 1px solid #b8d892;
+  background-color: #daf0bd;
+  background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0, #c3e59a), color-stop(100%, #f0fbe1));
+  background-image: -webkit-linear-gradient(top, #c3e59a 0, #f0fbe1 100%);
+  background-image: -moz-linear-gradient(top, #c3e59a 0, #f0fbe1 100%);
+  background-image: linear-gradient(to bottom, #c3e59a 0, #f0fbe1 100%);
+  -ms-filter: "progid:DXImageTransform.Microsoft.gradient( startColorstr='#ffc3e59a', endColorstr='#fff0fbe1' )";
+}
+.oo-ui-popupToolGroup.oo-ui-flaggedElement-destructive > .oo-ui-popupToolGroup-handle {
+  color: #d45353;
+}
+.oo-ui-buttonGroupWidget .oo-ui-popupToolGroup {
+  margin-left: 0;
+}
+.oo-ui-buttonGroupWidget .oo-ui-popupToolGroup > .oo-ui-popupToolGroup-handle {
+  height: 2.3em;
+  border-radius: 0;
+  margin-left: -2px;
+}
+.oo-ui-buttonGroupWidget .oo-ui-popupToolGroup:first-child > .oo-ui-popupToolGroup-handle {
+  border-bottom-left-radius: 0.3em;
+  border-top-left-radius: 0.3em;
+  margin-left: 0;
+}
+.oo-ui-buttonGroupWidget .oo-ui-popupToolGroup:last-child {
+  margin-right: 0.5em;
+}
+.oo-ui-buttonGroupWidget .oo-ui-popupToolGroup:last-child > .oo-ui-popupToolGroup-handle {
+  border-bottom-right-radius: 0.3em;
+  border-top-right-radius: 0.3em;
+}
 .oo-ui-popupToolGroup-handle .oo-ui-indicatorElement-indicator {
   width: 0.9375em;
   height: 0.9375em;
   border-bottom-right-radius: 0;
   box-shadow: inset 0 0.0875em 0.0875em 0 rgba(0, 0, 0, 0.07);
   background-color: #f8fbfd;
-  background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0, #F1F7FB), color-stop(100%, #fff));
-  background-image: -webkit-linear-gradient(top, #F1F7FB 0, #fff 100%);
-  background-image:    -moz-linear-gradient(top, #F1F7FB 0, #fff 100%);
-  background-image:         linear-gradient(to bottom, #F1F7FB 0, #fff 100%);
+  background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0, #f1f7fb), color-stop(100%, #fff));
+  background-image: -webkit-linear-gradient(top, #f1f7fb 0, #fff 100%);
+  background-image: -moz-linear-gradient(top, #f1f7fb 0, #fff 100%);
+  background-image: linear-gradient(to bottom, #f1f7fb 0, #fff 100%);
   -ms-filter: "progid:DXImageTransform.Microsoft.gradient( startColorstr='#fff1f7fb', endColorstr='#ffffffff' )";
 }
 .oo-ui-popupToolGroup .oo-ui-toolGroup-tools {
   line-height: 2em;
 }
 .oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-tool-accel {
-  color: #888;
+  color: #767676;
 }
 .oo-ui-listToolGroup .oo-ui-tool {
   display: block;
   -webkit-box-sizing: border-box;
-     -moz-box-sizing: border-box;
-          box-sizing: border-box;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
 }
 .oo-ui-listToolGroup .oo-ui-toolGroup-tools {
   padding: 0.3125em;
   border-color: rgba(0, 0, 0, 0.1);
   box-shadow: inset 0 0.0875em 0.0875em 0 rgba(0, 0, 0, 0.07);
   background-color: #f8fbfd;
-  background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0, #F1F7FB), color-stop(100%, #fff));
-  background-image: -webkit-linear-gradient(top, #F1F7FB 0, #fff 100%);
-  background-image:    -moz-linear-gradient(top, #F1F7FB 0, #fff 100%);
-  background-image:         linear-gradient(to bottom, #F1F7FB 0, #fff 100%);
+  background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0, #f1f7fb), color-stop(100%, #fff));
+  background-image: -webkit-linear-gradient(top, #f1f7fb 0, #fff 100%);
+  background-image: -moz-linear-gradient(top, #f1f7fb 0, #fff 100%);
+  background-image: linear-gradient(to bottom, #f1f7fb 0, #fff 100%);
   -ms-filter: "progid:DXImageTransform.Microsoft.gradient( startColorstr='#fff1f7fb', endColorstr='#ffffffff' )";
 }
 .oo-ui-listToolGroup .oo-ui-tool-active.oo-ui-widget-enabled + .oo-ui-tool-active.oo-ui-widget-enabled {
 .oo-ui-menuToolGroup .oo-ui-tool-active .oo-ui-tool-link .oo-ui-iconElement-icon {
   background-image: url('themes/apex/images/icons/check.png');
   background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url('themes/apex/images/icons/check.svg');
-  background-image:         linear-gradient(transparent, transparent), /* @embed */ url('themes/apex/images/icons/check.svg');
-  background-image:      -o-linear-gradient(transparent, transparent), url('themes/apex/images/icons/check.png');
+  background-image: linear-gradient(transparent, transparent), /* @embed */ url('themes/apex/images/icons/check.svg');
+  background-image: -o-linear-gradient(transparent, transparent), url('themes/apex/images/icons/check.png');
   background-size: contain;
   background-position: center center;
   background-repeat: no-repeat;
 .oo-ui-toolbar-actions {
   -webkit-touch-callout: none;
   -webkit-user-select: none;
-     -moz-user-select: none;
-      -ms-user-select: none;
-          user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
 }
 .oo-ui-toolbar-tools {
   display: inline;
 .oo-ui-toolbar-actions .oo-ui-popupWidget {
   -webkit-touch-callout: default;
   -webkit-user-select: all;
-     -moz-user-select: all;
-      -ms-user-select: all;
-          user-select: all;
+  -moz-user-select: all;
+  -ms-user-select: all;
+  user-select: all;
 }
 .oo-ui-toolbar-bar {
   background-color: #f8fbfd;
   background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0, #fff), color-stop(100%, #F1F7FB));
   background-image: -webkit-linear-gradient(top, #fff 0, #F1F7FB 100%);
-  background-image:    -moz-linear-gradient(top, #fff 0, #F1F7FB 100%);
-  background-image:         linear-gradient(to bottom, #fff 0, #F1F7FB 100%);
+  background-image: -moz-linear-gradient(top, #fff 0, #F1F7FB 100%);
+  background-image: linear-gradient(to bottom, #fff 0, #F1F7FB 100%);
   -ms-filter: "progid:DXImageTransform.Microsoft.gradient( startColorstr='#ffffffff', endColorstr='#fff1f7fb' )";
 }
 .oo-ui-toolbar-position-top > .oo-ui-toolbar-bar {
index 502b7b1..a82a8b2 100644 (file)
@@ -1,31 +1,27 @@
 /*!
- * OOjs UI v0.20.2
+ * OOjs UI v0.21.1
  * 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-30T20:34:41Z
+ * Date: 2017-04-18T23:32:54Z
  */
 .oo-ui-tool.oo-ui-widget-enabled {
   -webkit-transition: background-color 100ms;
-     -moz-transition: background-color 100ms;
-          transition: background-color 100ms;
+  -moz-transition: background-color 100ms;
+  transition: background-color 100ms;
 }
 .oo-ui-tool.oo-ui-widget-enabled .oo-ui-tool-link .oo-ui-tool-title {
   -webkit-transition: color 100ms;
-     -moz-transition: color 100ms;
-          transition: color 100ms;
+  -moz-transition: color 100ms;
+  transition: color 100ms;
 }
 .oo-ui-popupTool .oo-ui-popupWidget-popup,
 .oo-ui-popupTool .oo-ui-popupWidget-anchor {
   z-index: 4;
 }
-.oo-ui-popupTool .oo-ui-popupWidget-anchored-top .oo-ui-popupWidget-anchor,
-.oo-ui-popupTool .oo-ui-popupWidget-anchored-bottom .oo-ui-popupWidget-anchor {
-  margin-left: 1.25em;
-}
 .oo-ui-toolGroupTool > .oo-ui-toolGroup {
   border-right: 0;
 }
 .oo-ui-barToolGroup.oo-ui-widget-enabled > .oo-ui-toolGroup-tools > .oo-ui-tool.oo-ui-widget-enabled > .oo-ui-tool-link .oo-ui-tool-title {
   color: #222;
   -webkit-transition: color 100ms;
-     -moz-transition: color 100ms;
-          transition: color 100ms;
+  -moz-transition: color 100ms;
+  transition: color 100ms;
 }
 .oo-ui-barToolGroup.oo-ui-widget-enabled > .oo-ui-toolGroup-tools > .oo-ui-tool.oo-ui-widget-enabled.oo-ui-tool-active {
   background-color: #eaf3ff;
 .oo-ui-toolbar-narrow .oo-ui-popupToolGroup.oo-ui-labelElement.oo-ui-indicatorElement .oo-ui-popupToolGroup-handle .oo-ui-labelElement-label {
   margin-right: 1.75em;
 }
+.oo-ui-popupToolGroup.oo-ui-labelElement:not( .oo-ui-indicatorElement ) .oo-ui-popupToolGroup-handle .oo-ui-labelElement-label {
+  margin: 0 0.5em;
+}
 .oo-ui-popupToolGroup-header {
   line-height: 2.6;
   margin: 0 0.6em;
   width: 0.9375em;
   height: 100%;
   margin: 0 0.5em;
-  opacity: 0.3;
+  opacity: 0.87;
 }
 .oo-ui-toolbar-narrow .oo-ui-popupToolGroup-handle .oo-ui-indicatorElement-indicator {
   right: -0.3125em;
 .oo-ui-toolbar-narrow .oo-ui-popupToolGroup-handle .oo-ui-iconElement-icon {
   left: 0;
 }
+.oo-ui-popupToolGroup:not( .oo-ui-labelElement ):not( .oo-ui-iconElement ) .oo-ui-indicatorElement-indicator {
+  opacity: 1;
+}
 .oo-ui-popupToolGroup .oo-ui-toolGroup-tools {
   margin: 0 -1px;
   border: 1px solid #c8ccd1;
 .oo-ui-popupToolGroup .oo-ui-tool-link {
   padding: 0.4em 0.625em;
   -webkit-box-sizing: border-box;
-     -moz-box-sizing: border-box;
-          box-sizing: border-box;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
 }
 .oo-ui-popupToolGroup .oo-ui-tool-link .oo-ui-iconElement-icon {
   height: 2.5em;
 }
 .oo-ui-popupToolGroup.oo-ui-widget-enabled {
   -webkit-transition: background-color 100ms, box-shadow 100ms;
-     -moz-transition: background-color 100ms, box-shadow 100ms;
-          transition: background-color 100ms, box-shadow 100ms;
+  -moz-transition: background-color 100ms, box-shadow 100ms;
+  transition: background-color 100ms, box-shadow 100ms;
 }
 .oo-ui-popupToolGroup.oo-ui-widget-enabled.oo-ui-popupToolGroup-active {
   box-shadow: inset 0 0.07em 0.07em 0 rgba(0, 0, 0, 0.07);
 .oo-ui-popupToolGroup.oo-ui-widget-enabled.oo-ui-popupToolGroup-active .oo-ui-tool-active.oo-ui-widget-enabled .oo-ui-tool-link .oo-ui-tool-title {
   color: #36c;
 }
-.oo-ui-popupToolGroup.oo-ui-widget-enabled-handle:hover {
+.oo-ui-popupToolGroup.oo-ui-widget-enabled > .oo-ui-popupToolGroup-handle {
+  -webkit-transition: background-color 100ms, box-shadow 100ms;
+  -moz-transition: background-color 100ms, box-shadow 100ms;
+  transition: background-color 100ms, box-shadow 100ms;
+}
+.oo-ui-popupToolGroup.oo-ui-widget-enabled > .oo-ui-popupToolGroup-handle:hover {
   background-color: #eaecf0;
 }
-.oo-ui-popupToolGroup.oo-ui-widget-enabled-handle:active {
+.oo-ui-popupToolGroup.oo-ui-widget-enabled > .oo-ui-popupToolGroup-handle:active {
   background-color: #eaf3ff;
 }
+.oo-ui-popupToolGroup.oo-ui-flaggedElement-progressive > .oo-ui-popupToolGroup-handle {
+  color: #fff;
+  background-color: #36c;
+  border-color: #36c;
+}
+.oo-ui-popupToolGroup.oo-ui-flaggedElement-progressive > .oo-ui-popupToolGroup-handle:hover {
+  background-color: #447ff5;
+  border-color: #447ff5;
+}
+.oo-ui-popupToolGroup.oo-ui-flaggedElement-progressive > .oo-ui-popupToolGroup-handle:active,
+.oo-ui-popupToolGroup.oo-ui-flaggedElement-progressive > .oo-ui-popupToolGroup-handle:active:focus,
+.oo-ui-popupToolGroup.oo-ui-flaggedElement-progressive.oo-ui-buttonElement-pressed > .oo-ui-popupToolGroup-handle,
+.oo-ui-popupToolGroup.oo-ui-flaggedElement-progressive.oo-ui-buttonElement-active > .oo-ui-popupToolGroup-handle,
+.oo-ui-popupToolGroup.oo-ui-flaggedElement-progressive.oo-ui-popupToolGroup-active > .oo-ui-popupToolGroup-handle {
+  color: #fff;
+  background-color: #2a4b8d;
+  border-color: #2a4b8d;
+  box-shadow: none;
+}
+.oo-ui-popupToolGroup.oo-ui-flaggedElement-progressive > .oo-ui-popupToolGroup-handle:focus {
+  border-color: #36c;
+  box-shadow: inset 0 0 0 1px #36c, inset 0 0 0 2px #fff;
+  outline: 0;
+}
+.oo-ui-popupToolGroup.oo-ui-flaggedElement-constructive > .oo-ui-popupToolGroup-handle {
+  color: #fff;
+  background-color: #36c;
+  border-color: #36c;
+}
+.oo-ui-popupToolGroup.oo-ui-flaggedElement-constructive > .oo-ui-popupToolGroup-handle:hover {
+  background-color: #447ff5;
+  border-color: #447ff5;
+}
+.oo-ui-popupToolGroup.oo-ui-flaggedElement-constructive > .oo-ui-popupToolGroup-handle:active,
+.oo-ui-popupToolGroup.oo-ui-flaggedElement-constructive > .oo-ui-popupToolGroup-handle:active:focus,
+.oo-ui-popupToolGroup.oo-ui-flaggedElement-constructive.oo-ui-buttonElement-pressed > .oo-ui-popupToolGroup-handle,
+.oo-ui-popupToolGroup.oo-ui-flaggedElement-constructive.oo-ui-buttonElement-active > .oo-ui-popupToolGroup-handle,
+.oo-ui-popupToolGroup.oo-ui-flaggedElement-constructive.oo-ui-popupToolGroup-active > .oo-ui-popupToolGroup-handle {
+  color: #fff;
+  background-color: #2a4b8d;
+  border-color: #2a4b8d;
+  box-shadow: none;
+}
+.oo-ui-popupToolGroup.oo-ui-flaggedElement-constructive > .oo-ui-popupToolGroup-handle:focus {
+  border-color: #36c;
+  box-shadow: inset 0 0 0 1px #36c, inset 0 0 0 2px #fff;
+  outline: 0;
+}
+.oo-ui-popupToolGroup.oo-ui-flaggedElement-destructive > .oo-ui-popupToolGroup-handle {
+  color: #fff;
+  background-color: #d33;
+  border-color: #d33;
+}
+.oo-ui-popupToolGroup.oo-ui-flaggedElement-destructive > .oo-ui-popupToolGroup-handle:hover {
+  background-color: #ff4242;
+  border-color: #ff4242;
+}
+.oo-ui-popupToolGroup.oo-ui-flaggedElement-destructive > .oo-ui-popupToolGroup-handle:active,
+.oo-ui-popupToolGroup.oo-ui-flaggedElement-destructive > .oo-ui-popupToolGroup-handle:active:focus,
+.oo-ui-popupToolGroup.oo-ui-flaggedElement-destructive.oo-ui-buttonElement-pressed > .oo-ui-popupToolGroup-handle,
+.oo-ui-popupToolGroup.oo-ui-flaggedElement-destructive.oo-ui-buttonElement-active > .oo-ui-popupToolGroup-handle,
+.oo-ui-popupToolGroup.oo-ui-flaggedElement-destructive.oo-ui-popupToolGroup-active > .oo-ui-popupToolGroup-handle {
+  color: #fff;
+  background-color: #b32424;
+  border-color: #b32424;
+  box-shadow: none;
+}
+.oo-ui-popupToolGroup.oo-ui-flaggedElement-destructive > .oo-ui-popupToolGroup-handle:focus {
+  border-color: #d33;
+  box-shadow: inset 0 0 0 1px #d33, inset 0 0 0 2px #fff;
+  outline: 0;
+}
 .oo-ui-listToolGroup .oo-ui-tool {
   display: block;
   -webkit-box-sizing: border-box;
-     -moz-box-sizing: border-box;
-          box-sizing: border-box;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
 }
 .oo-ui-listToolGroup .oo-ui-tool.oo-ui-widget-enabled:hover {
   background-color: #eaecf0;
 .oo-ui-menuToolGroup .oo-ui-tool-active .oo-ui-tool-link .oo-ui-iconElement-icon {
   background-image: url('themes/mediawiki/images/icons/check-progressive.png');
   background-image: -webkit-linear-gradient(transparent, transparent), /* @embed */ url('themes/mediawiki/images/icons/check-progressive.svg');
-  background-image:         linear-gradient(transparent, transparent), /* @embed */ url('themes/mediawiki/images/icons/check-progressive.svg');
-  background-image:      -o-linear-gradient(transparent, transparent), url('themes/mediawiki/images/icons/check-progressive.png');
+  background-image: linear-gradient(transparent, transparent), /* @embed */ url('themes/mediawiki/images/icons/check-progressive.svg');
+  background-image: -o-linear-gradient(transparent, transparent), url('themes/mediawiki/images/icons/check-progressive.png');
   background-size: contain;
   background-position: center center;
   background-repeat: no-repeat;
 .oo-ui-toolbar-actions {
   -webkit-touch-callout: none;
   -webkit-user-select: none;
-     -moz-user-select: none;
-      -ms-user-select: none;
-          user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
 }
 .oo-ui-toolbar-tools {
   display: inline;
 .oo-ui-toolbar-actions .oo-ui-popupWidget {
   -webkit-touch-callout: default;
   -webkit-user-select: all;
-     -moz-user-select: all;
-      -ms-user-select: all;
-          user-select: all;
+  -moz-user-select: all;
+  -ms-user-select: all;
+  user-select: all;
 }
 .oo-ui-toolbar-bar {
   background-color: #fff;
   background-color: transparent;
   box-shadow: none;
 }
-.oo-ui-toolbar-actions > .oo-ui-buttonElement.oo-ui-labelElement {
+.oo-ui-toolbar-narrow .oo-ui-toolbar-bar:after {
+  content: '';
+  display: block;
+  position: absolute;
+  top: 3.125em;
+  left: 0;
+  width: 100%;
+  height: 0;
+  border-bottom: 1px solid #c8ccd1;
+}
+.oo-ui-toolbar-actions > .oo-ui-buttonElement.oo-ui-labelElement,
+.oo-ui-toolbar-actions > .oo-ui-buttonElement.oo-ui-indicatorElement,
+.oo-ui-toolbar-actions > .oo-ui-buttonGroupWidget > .oo-ui-buttonElement.oo-ui-labelElement,
+.oo-ui-toolbar-actions > .oo-ui-buttonGroupWidget > .oo-ui-buttonElement.oo-ui-indicatorElement {
   margin: 0;
 }
-.oo-ui-toolbar-actions > .oo-ui-buttonElement.oo-ui-labelElement > .oo-ui-buttonElement-button {
+.oo-ui-toolbar-actions > .oo-ui-buttonElement.oo-ui-labelElement > .oo-ui-buttonElement-button,
+.oo-ui-toolbar-actions > .oo-ui-buttonElement.oo-ui-indicatorElement > .oo-ui-buttonElement-button,
+.oo-ui-toolbar-actions > .oo-ui-buttonGroupWidget > .oo-ui-buttonElement.oo-ui-labelElement > .oo-ui-buttonElement-button,
+.oo-ui-toolbar-actions > .oo-ui-buttonGroupWidget > .oo-ui-buttonElement.oo-ui-indicatorElement > .oo-ui-buttonElement-button {
   border: 0;
   border-radius: 0;
   padding: 0 0.3125em;
 }
-.oo-ui-toolbar-actions > .oo-ui-buttonElement.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
+.oo-ui-toolbar-actions > .oo-ui-buttonElement.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-labelElement-label,
+.oo-ui-toolbar-actions > .oo-ui-buttonElement.oo-ui-indicatorElement > .oo-ui-buttonElement-button > .oo-ui-labelElement-label,
+.oo-ui-toolbar-actions > .oo-ui-buttonGroupWidget > .oo-ui-buttonElement.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-labelElement-label,
+.oo-ui-toolbar-actions > .oo-ui-buttonGroupWidget > .oo-ui-buttonElement.oo-ui-indicatorElement > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
   margin: 0 1em;
   line-height: 3.125em;
 }
+.oo-ui-toolbar-actions > .oo-ui-buttonGroupWidget > .oo-ui-buttonElement.oo-ui-indicatorElement:not( .oo-ui-labelElement ) > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
+  margin: 0;
+}
+.oo-ui-toolbar-actions > .oo-ui-buttonGroupWidget > .oo-ui-buttonElement.oo-ui-indicatorElement:not( .oo-ui-labelElement ) > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator {
+  margin: 0 0.3125em;
+}
 .oo-ui-toolbar-actions > .oo-ui-toolbar:not( :last-child ) {
   border-right: 1px solid #c8ccd1;
 }
index 4cc0db1..9ef478b 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.20.2
+ * OOjs UI v0.21.1
  * 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-30T20:34:37Z
+ * Date: 2017-04-18T23:32:49Z
  */
 ( function ( OO ) {
 
@@ -1778,6 +1778,7 @@ OO.ui.BarToolGroup.static.name = 'bar';
  * @mixins OO.ui.mixin.IndicatorElement
  * @mixins OO.ui.mixin.LabelElement
  * @mixins OO.ui.mixin.TitledElement
+ * @mixins OO.ui.mixin.FlaggedElement
  * @mixins OO.ui.mixin.ClippableElement
  * @mixins OO.ui.mixin.TabIndexedElement
  *
@@ -1795,7 +1796,7 @@ OO.ui.PopupToolGroup = function OoUiPopupToolGroup( toolbar, config ) {
 
        // Configuration initialization
        config = $.extend( {
-               indicator: toolbar.position === 'bottom' ? 'up' : 'down'
+               indicator: config.indicator === undefined ? ( toolbar.position === 'bottom' ? 'up' : 'down' ) : config.indicator
        }, config );
 
        // Parent constructor
@@ -1812,6 +1813,7 @@ OO.ui.PopupToolGroup = function OoUiPopupToolGroup( toolbar, config ) {
        OO.ui.mixin.IndicatorElement.call( this, config );
        OO.ui.mixin.LabelElement.call( this, config );
        OO.ui.mixin.TitledElement.call( this, config );
+       OO.ui.mixin.FlaggedElement.call( this, config );
        OO.ui.mixin.ClippableElement.call( this, $.extend( {}, config, { $clippable: this.$group } ) );
        OO.ui.mixin.TabIndexedElement.call( this, $.extend( {}, config, { $tabIndexed: this.$handle } ) );
 
@@ -1826,6 +1828,7 @@ OO.ui.PopupToolGroup = function OoUiPopupToolGroup( toolbar, config ) {
        // Initialization
        this.$handle
                .addClass( 'oo-ui-popupToolGroup-handle' )
+               .attr( 'role', 'button' )
                .append( this.$icon, this.$label, this.$indicator );
        // If the pop-up should have a header, add it to the top of the toolGroup.
        // Note: If this feature is useful for other widgets, we could abstract it into an
@@ -1849,6 +1852,7 @@ OO.mixinClass( OO.ui.PopupToolGroup, OO.ui.mixin.IconElement );
 OO.mixinClass( OO.ui.PopupToolGroup, OO.ui.mixin.IndicatorElement );
 OO.mixinClass( OO.ui.PopupToolGroup, OO.ui.mixin.LabelElement );
 OO.mixinClass( OO.ui.PopupToolGroup, OO.ui.mixin.TitledElement );
+OO.mixinClass( OO.ui.PopupToolGroup, OO.ui.mixin.FlaggedElement );
 OO.mixinClass( OO.ui.PopupToolGroup, OO.ui.mixin.ClippableElement );
 OO.mixinClass( OO.ui.PopupToolGroup, OO.ui.mixin.TabIndexedElement );
 
index a9b31da..dc149fb 100644 (file)
@@ -1,26 +1,25 @@
 /*!
- * OOjs UI v0.20.2
+ * OOjs UI v0.21.1
  * 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-30T20:34:41Z
+ * Date: 2017-04-18T23:32:54Z
  */
-.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;
+  cursor: -moz-grab;
+  cursor: grab;
 }
 .oo-ui-draggableElement-handle:not( .oo-ui-draggableElement-undraggable ):active {
   cursor: url(images/grabbing.cur );
   cursor: -webkit-grabbing;
-  cursor:    -moz-grabbing;
-  cursor:         grabbing;
+  cursor: -moz-grabbing;
+  cursor: grabbing;
 }
 .oo-ui-draggableElement-handle.oo-ui-widget-disabled,
 .oo-ui-widget-disabled .oo-ui-draggableElement-handle {
@@ -38,8 +37,8 @@
 .oo-ui-bookletLayout-stackLayout > .oo-ui-panelLayout {
   width: 100%;
   -webkit-box-sizing: border-box;
-     -moz-box-sizing: border-box;
-          box-sizing: border-box;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
 }
 .oo-ui-bookletLayout-outlinePanel-editable > .oo-ui-outlineSelectWidget {
   position: absolute;
@@ -84,8 +83,8 @@
 .oo-ui-menuLayout-content {
   position: absolute;
   -webkit-transition: all 200ms ease;
-     -moz-transition: all 200ms ease;
-          transition: all 200ms ease;
+  -moz-transition: all 200ms ease;
+  transition: all 200ms ease;
 }
 .oo-ui-menuLayout-menu {
   height: 18em;
   vertical-align: middle;
   overflow: hidden;
   -webkit-box-sizing: border-box;
-     -moz-box-sizing: border-box;
-          box-sizing: border-box;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
   -webkit-transform: translateZ(0);
-          transform: translateZ(0);
+  transform: translateZ(0);
   height: 2em;
   width: 4em;
   border-radius: 1em;
   background-color: #eeeeee;
   background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0, #ddd), color-stop(100%, #fff));
   background-image: -webkit-linear-gradient(top, #ddd 0, #fff 100%);
-  background-image:    -moz-linear-gradient(top, #ddd 0, #fff 100%);
-  background-image:         linear-gradient(to bottom, #ddd 0, #fff 100%);
+  background-image: -moz-linear-gradient(top, #ddd 0, #fff 100%);
+  background-image: linear-gradient(to bottom, #ddd 0, #fff 100%);
   -ms-filter: "progid:DXImageTransform.Microsoft.gradient( startColorstr='#ffdddddd', endColorstr='#ffffffff' )";
 }
 .oo-ui-toggleSwitchWidget.oo-ui-widget-enabled {
   position: absolute;
   display: block;
   -webkit-box-sizing: border-box;
-     -moz-box-sizing: border-box;
-          box-sizing: border-box;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
 }
 .oo-ui-toggleSwitchWidget:last-child {
   margin-right: 0;
   box-shadow: 0 0.1em 0.25em rgba(0, 0, 0, 0.1);
   border: 1px #c9c9c9 solid;
   -webkit-transition: left 250ms ease, margin-left 250ms ease;
-     -moz-transition: left 250ms ease, margin-left 250ms ease;
-          transition: left 250ms ease, margin-left 250ms ease;
+  -moz-transition: left 250ms ease, margin-left 250ms ease;
+  transition: left 250ms ease, margin-left 250ms ease;
   background-color: #eeeeee;
   background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0, #fff), color-stop(100%, #ddd));
   background-image: -webkit-linear-gradient(top, #fff 0, #ddd 100%);
-  background-image:    -moz-linear-gradient(top, #fff 0, #ddd 100%);
-  background-image:         linear-gradient(to bottom, #fff 0, #ddd 100%);
+  background-image: -moz-linear-gradient(top, #fff 0, #ddd 100%);
+  background-image: linear-gradient(to bottom, #fff 0, #ddd 100%);
   -ms-filter: "progid:DXImageTransform.Microsoft.gradient( startColorstr='#ffffffff', endColorstr='#ffdddddd' )";
 }
 .oo-ui-toggleSwitchWidget-glow {
   border-radius: 1em;
   box-shadow: inset 0 1px 4px 0 rgba(0, 0, 0, 0.07);
   -webkit-transition: opacity 250ms ease;
-     -moz-transition: opacity 250ms ease;
-          transition: opacity 250ms ease;
+  -moz-transition: opacity 250ms ease;
+  transition: opacity 250ms ease;
   background-color: #cde7f4;
   background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0, #b0d9ee), color-stop(100%, #eaf4fa));
   background-image: -webkit-linear-gradient(top, #b0d9ee 0, #eaf4fa 100%);
-  background-image:    -moz-linear-gradient(top, #b0d9ee 0, #eaf4fa 100%);
-  background-image:         linear-gradient(to bottom, #b0d9ee 0, #eaf4fa 100%);
+  background-image: -moz-linear-gradient(top, #b0d9ee 0, #eaf4fa 100%);
+  background-image: linear-gradient(to bottom, #b0d9ee 0, #eaf4fa 100%);
   -ms-filter: "progid:DXImageTransform.Microsoft.gradient( startColorstr='#ffb0d9ee', endColorstr='#ffeaf4fa' )";
   -webkit-touch-callout: none;
   -webkit-user-select: none;
-     -moz-user-select: none;
-      -ms-user-select: none;
-          user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
 }
 .oo-ui-toggleWidget-off .oo-ui-toggleSwitchWidget-glow {
   opacity: 0;
   position: relative;
   overflow: hidden;
   -webkit-box-sizing: border-box;
-     -moz-box-sizing: border-box;
-          box-sizing: border-box;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
 }
 .oo-ui-selectFileWidget-info > .oo-ui-indicatorElement-indicator,
 .oo-ui-selectFileWidget-info > .oo-ui-iconElement-icon {
   cursor: default;
   -webkit-touch-callout: none;
   -webkit-user-select: none;
-     -moz-user-select: none;
-      -ms-user-select: none;
-          user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
 }
 .oo-ui-selectFileWidget-label {
   position: absolute;
 }
 .oo-ui-selectFileWidget-dropTarget .oo-ui-selectFileWidget-fileName {
   display: block;
-  padding-top: 0.5em;
-  padding-right: 2.375em;
-}
-.oo-ui-selectFileWidget-dropTarget .oo-ui-selectFileWidget-clearButton {
-  right: 0.5em;
 }
 .oo-ui-selectFileWidget-empty.oo-ui-selectFileWidget-dropTarget .oo-ui-selectFileWidget-thumbnail,
 .oo-ui-selectFileWidget-empty.oo-ui-selectFileWidget-dropTarget .oo-ui-selectFileWidget-info {
 .oo-ui-selectFileWidget-notsupported.oo-ui-selectFileWidget-dropTarget {
   -webkit-touch-callout: none;
   -webkit-user-select: none;
-     -moz-user-select: none;
-      -ms-user-select: none;
-          user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
 }
 .oo-ui-selectFileWidget-empty.oo-ui-widget-disabled.oo-ui-selectFileWidget-dropTarget,
 .oo-ui-selectFileWidget-notsupported.oo-ui-selectFileWidget-dropTarget,
 .oo-ui-selectFileWidget-notsupported.oo-ui-selectFileWidget-dropTarget {
   height: auto;
 }
-.oo-ui-selectFileWidget-notsupported.oo-ui-selectFileWidget-dropTarget .oo-ui-selectFileWidget-label {
-  padding: 1em;
-}
 .oo-ui-selectFileWidget:last-child {
   margin-right: 0;
 }
 }
 .oo-ui-selectFileWidget-label {
   -webkit-box-sizing: border-box;
-     -moz-box-sizing: border-box;
-          box-sizing: border-box;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
   left: 0.5em;
   right: 2.175em;
   line-height: 2.3em;
 .oo-ui-selectFileWidget-supported.oo-ui-widget-enabled.oo-ui-selectFileWidget-canDrop.oo-ui-selectFileWidget-dropTarget {
   background-color: #e1f3ff;
 }
+.oo-ui-selectFileWidget-notsupported .oo-ui-selectFileWidget-label {
+  padding: 1em;
+}
 .oo-ui-selectFileWidget-dropTarget {
   background-color: #fff;
   border: 1px solid #aaa;
   overflow: inherit;
   white-space: normal;
 }
+.oo-ui-selectFileWidget-dropTarget .oo-ui-selectFileWidget-fileName {
+  padding-top: 0.5em;
+  padding-right: 2.375em;
+}
+.oo-ui-selectFileWidget-dropTarget .oo-ui-selectFileWidget-clearButton {
+  right: 0.5em;
+}
 .oo-ui-selectFileWidget-empty.oo-ui-selectFileWidget-dropTarget {
   border-style: dashed;
 }
 .oo-ui-outlineOptionWidget {
   -webkit-touch-callout: none;
   -webkit-user-select: none;
-     -moz-user-select: none;
-      -ms-user-select: none;
-          user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
   font-size: 1.1em;
   padding: 0.75em;
 }
 .oo-ui-outlineControlsWidget-movers {
   float: left;
   -webkit-box-sizing: border-box;
-     -moz-box-sizing: border-box;
-          box-sizing: border-box;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
 }
 .oo-ui-outlineControlsWidget > .oo-ui-iconElement-icon {
   float: left;
   background-color: #fff;
   border-color: #ddd;
 }
+.oo-ui-tagMultiselectWidget {
+  display: inline-block;
+  position: relative;
+  width: 100%;
+  max-width: 50em;
+}
+.oo-ui-tagMultiselectWidget-handle {
+  width: 100%;
+  display: block;
+  position: relative;
+}
+.oo-ui-tagMultiselectWidget-handle > .oo-ui-iconElement-icon,
+.oo-ui-tagMultiselectWidget-handle > .oo-ui-indicatorElement-indicator {
+  position: absolute;
+  top: 0;
+  height: 100%;
+}
+.oo-ui-tagMultiselectWidget-content {
+  position: relative;
+}
+.oo-ui-tagMultiselectWidget-group {
+  display: inline;
+}
+.oo-ui-tagMultiselectWidget-outlined {
+  width: 100%;
+}
+.oo-ui-tagMultiselectWidget.oo-ui-widget-enabled.oo-ui-tagMultiselectWidget-inlined .oo-ui-tagMultiselectWidget-handle {
+  cursor: text;
+}
+.oo-ui-tagMultiselectWidget.oo-ui-widget-disabled .oo-ui-tagMultiselectWidget-content > input {
+  display: none;
+}
+.oo-ui-tagMultiselectWidget-focusTrap {
+  display: inline-block;
+  height: 1px;
+  width: 1px;
+}
+.oo-ui-tagMultiselectWidget-handle {
+  background-color: #fff;
+  cursor: text;
+  min-height: 2.4em;
+  margin-right: 0.5em;
+  padding: 0.15em 0.25em;
+  border: 1px solid rgba(0, 0, 0, 0.1);
+  border-radius: 0.25em;
+  -webkit-box-sizing: border-box;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+}
+.oo-ui-tagMultiselectWidget-handle:last-child {
+  margin-right: 0;
+}
+.oo-ui-tagMultiselectWidget-handle > .oo-ui-tagMultiselectWidget-content > input {
+  border: 0;
+  line-height: 1.675em;
+  margin: 0;
+  margin-left: 0.2em;
+  padding: 0;
+  font-size: inherit;
+  font-family: inherit;
+  background-color: transparent;
+  color: #000;
+  vertical-align: middle;
+}
+.oo-ui-tagMultiselectWidget-handle > .oo-ui-tagMultiselectWidget-content > input::-webkit-input-placeholder {
+  color: #767676;
+  opacity: 1;
+}
+.oo-ui-tagMultiselectWidget-handle > .oo-ui-tagMultiselectWidget-content > input:-ms-input-placeholder {
+  color: #767676;
+  opacity: 1;
+}
+.oo-ui-tagMultiselectWidget-handle > .oo-ui-tagMultiselectWidget-content > input::-moz-placeholder {
+  color: #767676;
+  opacity: 1;
+}
+.oo-ui-tagMultiselectWidget-handle > .oo-ui-tagMultiselectWidget-content > input:-moz-placeholder {
+  color: #767676;
+  opacity: 1;
+}
+.oo-ui-tagMultiselectWidget-handle > .oo-ui-tagMultiselectWidget-content > input::placeholder {
+  color: #767676;
+  opacity: 1;
+}
+.oo-ui-tagMultiselectWidget-handle > .oo-ui-tagMultiselectWidget-content > input:focus {
+  outline: 0;
+}
+.oo-ui-tagMultiselectWidget.oo-ui-iconElement .oo-ui-tagMultiselectWidget-handle {
+  padding-left: 2.475em;
+}
+.oo-ui-tagMultiselectWidget.oo-ui-iconElement .oo-ui-tagMultiselectWidget-handle > .oo-ui-iconElement-icon {
+  left: 0;
+  margin: 0 0.3em;
+}
+.oo-ui-tagMultiselectWidget.oo-ui-indicatorElement .oo-ui-tagMultiselectWidget-handle {
+  padding-right: 2.4875em;
+}
+.oo-ui-tagMultiselectWidget.oo-ui-indicatorElement .oo-ui-tagMultiselectWidget-handle > .oo-ui-indicatorElement-indicator {
+  right: 0;
+  margin: 0 0.775em;
+}
+.oo-ui-tagMultiselectWidget:hover .oo-ui-tagMultiselectWidget-handle {
+  border-color: rgba(0, 0, 0, 0.2);
+}
+.oo-ui-tagMultiselectWidget.oo-ui-widget-disabled .oo-ui-tagMultiselectWidget-handle {
+  color: #ccc;
+  text-shadow: 0 1px 1px #fff;
+  border-color: #ddd;
+  background-color: #f3f3f3;
+  cursor: default;
+}
+.oo-ui-tagMultiselectWidget.oo-ui-widget-disabled .oo-ui-tagMultiselectWidget-handle > .oo-ui-iconElement-icon,
+.oo-ui-tagMultiselectWidget.oo-ui-widget-disabled .oo-ui-tagMultiselectWidget-handle > .oo-ui-indicatorElement-indicator {
+  opacity: 0.2;
+}
+.oo-ui-tagMultiselectWidget-popup > .oo-ui-popupWidget-popup {
+  border: 0;
+}
+.oo-ui-tagItemWidget {
+  position: relative;
+  display: inline-block;
+  cursor: default;
+  white-space: nowrap;
+  width: auto;
+  max-width: 100%;
+  -webkit-box-sizing: border-box;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  vertical-align: middle;
+  padding: 0 0.4em;
+  margin: 0.1em;
+  height: 1.7em;
+  line-height: 1.7em;
+  background-color: #eeeeee;
+  background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0, #fff), color-stop(100%, #ddd));
+  background-image: -webkit-linear-gradient(top, #fff 0, #ddd 100%);
+  background-image: -moz-linear-gradient(top, #fff 0, #ddd 100%);
+  background-image: linear-gradient(to bottom, #fff 0, #ddd 100%);
+  -ms-filter: "progid:DXImageTransform.Microsoft.gradient( startColorstr='#ffffffff', endColorstr='#ffdddddd' )";
+  border: 1px solid #ccc;
+  color: #333;
+  border-radius: 0.25em;
+}
+.oo-ui-tagItemWidget.oo-ui-labelElement .oo-ui-labelElement-label {
+  display: inline-block;
+  text-overflow: ellipsis;
+  overflow: hidden;
+  cursor: text;
+}
+.oo-ui-tagItemWidget:focus {
+  outline: 0;
+  border-color: #087ecc;
+}
+.oo-ui-tagItemWidget.oo-ui-widget-disabled {
+  opacity: 0.5;
+  -webkit-transform: translateZ(0);
+  transform: translateZ(0);
+  box-shadow: none;
+  color: #333;
+  background: #eee;
+  border-color: #ccc;
+}
+.oo-ui-tagItemWidget > .oo-ui-buttonElement {
+  margin-top: -1.25em;
+  padding-left: 0.3em;
+}
 .oo-ui-capsuleMultiselectWidget {
   display: inline-block;
   position: relative;
   border: 1px solid rgba(0, 0, 0, 0.1);
   border-radius: 0.25em;
   -webkit-box-sizing: border-box;
-     -moz-box-sizing: border-box;
-          box-sizing: border-box;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
 }
 .oo-ui-capsuleMultiselectWidget-handle:last-child {
   margin-right: 0;
   vertical-align: middle;
 }
 .oo-ui-capsuleMultiselectWidget-handle > .oo-ui-capsuleMultiselectWidget-content > input::-webkit-input-placeholder {
-  color: #72777d;
+  color: #767676;
   opacity: 1;
 }
 .oo-ui-capsuleMultiselectWidget-handle > .oo-ui-capsuleMultiselectWidget-content > input:-ms-input-placeholder {
-  color: #72777d;
+  color: #767676;
   opacity: 1;
 }
 .oo-ui-capsuleMultiselectWidget-handle > .oo-ui-capsuleMultiselectWidget-content > input::-moz-placeholder {
-  color: #72777d;
+  color: #767676;
   opacity: 1;
 }
 .oo-ui-capsuleMultiselectWidget-handle > .oo-ui-capsuleMultiselectWidget-content > input:-moz-placeholder {
-  color: #72777d;
+  color: #767676;
   opacity: 1;
 }
 .oo-ui-capsuleMultiselectWidget-handle > .oo-ui-capsuleMultiselectWidget-content > input::placeholder {
-  color: #72777d;
+  color: #767676;
   opacity: 1;
 }
 .oo-ui-capsuleMultiselectWidget-handle > .oo-ui-capsuleMultiselectWidget-content > input:focus {
   width: auto;
   max-width: 100%;
   -webkit-box-sizing: border-box;
-     -moz-box-sizing: border-box;
-          box-sizing: border-box;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
   vertical-align: middle;
   padding: 0 0.4em;
   margin: 0.1em;
   background-color: #eeeeee;
   background-image: -webkit-gradient(linear, right top, right bottom, color-stop(0, #fff), color-stop(100%, #ddd));
   background-image: -webkit-linear-gradient(top, #fff 0, #ddd 100%);
-  background-image:    -moz-linear-gradient(top, #fff 0, #ddd 100%);
-  background-image:         linear-gradient(to bottom, #fff 0, #ddd 100%);
+  background-image: -moz-linear-gradient(top, #fff 0, #ddd 100%);
+  background-image: linear-gradient(to bottom, #fff 0, #ddd 100%);
   -ms-filter: "progid:DXImageTransform.Microsoft.gradient( startColorstr='#ffffffff', endColorstr='#ffdddddd' )";
   border: 1px solid #ccc;
-  color: #555;
+  color: #333;
   border-radius: 0.25em;
 }
 .oo-ui-capsuleItemWidget.oo-ui-labelElement .oo-ui-labelElement-label {
 .oo-ui-capsuleItemWidget.oo-ui-widget-disabled {
   opacity: 0.5;
   -webkit-transform: translateZ(0);
-          transform: translateZ(0);
+  transform: translateZ(0);
   box-shadow: none;
   color: #333;
   background: #eee;
index 8438a3d..9b06573 100644 (file)
@@ -1,26 +1,28 @@
 /*!
- * OOjs UI v0.20.2
+ * OOjs UI v0.21.1
  * 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-30T20:34:41Z
+ * Date: 2017-04-18T23:32:54Z
  */
-.oo-ui-draggableElement-handle:not( .oo-ui-draggableElement-undraggable ),
+.oo-ui-draggableElement {
+  padding: 1.0546875em 0.9375em 0.9375em;
+}
 .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;
+  cursor: -moz-grab;
+  cursor: grab;
 }
 .oo-ui-draggableElement-handle:not( .oo-ui-draggableElement-undraggable ):active {
   cursor: url(images/grabbing.cur );
   cursor: -webkit-grabbing;
-  cursor:    -moz-grabbing;
-  cursor:         grabbing;
+  cursor: -moz-grabbing;
+  cursor: grabbing;
 }
 .oo-ui-draggableElement-handle.oo-ui-widget-disabled,
 .oo-ui-widget-disabled .oo-ui-draggableElement-handle {
@@ -32,7 +34,7 @@
 .oo-ui-draggableGroupElement-horizontal .oo-ui-draggableElement {
   display: inline-block;
 }
-.oo-ui-draggableElement-handle:focus {
+.oo-ui-draggableElement-handle.oo-ui-widget-enabled:focus {
   border-radius: 2px;
   box-shadow: inset 0 0 0 1px #36c, 0 0 0 1px #36c;
   outline: 0;
@@ -43,8 +45,8 @@
 .oo-ui-bookletLayout-stackLayout > .oo-ui-panelLayout {
   width: 100%;
   -webkit-box-sizing: border-box;
-     -moz-box-sizing: border-box;
-          box-sizing: border-box;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
 }
 .oo-ui-bookletLayout-outlinePanel-editable > .oo-ui-outlineSelectWidget {
   position: absolute;
@@ -95,8 +97,8 @@
 .oo-ui-menuLayout-content {
   position: absolute;
   -webkit-transition: all 200ms ease;
-     -moz-transition: all 200ms ease;
-          transition: all 200ms ease;
+  -moz-transition: all 200ms ease;
+  transition: all 200ms ease;
 }
 .oo-ui-menuLayout-menu {
   height: 18em;
   outline: 0;
 }
 .oo-ui-buttonSelectWidget .oo-ui-buttonOptionWidget .oo-ui-buttonElement-button {
-  border-radius: 0;
   margin-left: -1px;
+  border-radius: 0;
 }
 .oo-ui-buttonSelectWidget .oo-ui-buttonOptionWidget:first-child .oo-ui-buttonElement-button {
+  margin-left: 0;
   border-bottom-left-radius: 2px;
   border-top-left-radius: 2px;
-  margin-left: 0;
 }
 .oo-ui-buttonSelectWidget .oo-ui-buttonOptionWidget:last-child .oo-ui-buttonElement-button {
   border-bottom-right-radius: 2px;
   border-top-right-radius: 2px;
 }
+.oo-ui-buttonSelectWidget .oo-ui-buttonOptionWidget.oo-ui-iconElement .oo-ui-iconElement-icon,
+.oo-ui-buttonSelectWidget .oo-ui-buttonOptionWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator {
+  position: absolute;
+}
+.oo-ui-buttonSelectWidget .oo-ui-buttonOptionWidget.oo-ui-widget-disabled + .oo-ui-widget-disabled > .oo-ui-buttonElement-button {
+  border-left-color: #fff;
+}
 .oo-ui-buttonSelectWidget.oo-ui-widget-enabled:focus .oo-ui-buttonOptionWidget.oo-ui-optionWidget-selected .oo-ui-buttonElement-button {
   border-color: #36c;
   box-shadow: inset 0 0 0 1px #36c, inset 0 0 0 2px #fff;
   vertical-align: middle;
   overflow: hidden;
   -webkit-box-sizing: border-box;
-     -moz-box-sizing: border-box;
-          box-sizing: border-box;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
   -webkit-transform: translateZ(0);
-          transform: translateZ(0);
+  transform: translateZ(0);
   background-color: #f8f9fa;
   width: 3.5em;
   min-height: 26px;
   border-radius: 1em;
   margin-right: 0.5em;
   -webkit-transition: background-color 250ms, border-color 250ms;
-     -moz-transition: background-color 250ms, border-color 250ms;
-          transition: background-color 250ms, border-color 250ms;
+  -moz-transition: background-color 250ms, border-color 250ms;
+  transition: background-color 250ms, border-color 250ms;
 }
 .oo-ui-toggleSwitchWidget.oo-ui-widget-enabled {
   cursor: pointer;
   position: absolute;
   display: block;
   -webkit-box-sizing: border-box;
-     -moz-box-sizing: border-box;
-          box-sizing: border-box;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
 }
 .oo-ui-toggleSwitchWidget:last-child {
   margin-right: 0;
   border-radius: 1em;
   z-index: 1;
   -webkit-transition: border-color 250ms;
-     -moz-transition: border-color 250ms;
-          transition: border-color 250ms;
+  -moz-transition: border-color 250ms;
+  transition: border-color 250ms;
 }
 .oo-ui-toggleSwitchWidget-grip {
   top: 0.3125em;
   height: 1.25em;
   border-radius: 1.25em;
   -webkit-transition: background-color 250ms, left 100ms, margin-left 100ms;
-     -moz-transition: background-color 250ms, left 100ms, margin-left 100ms;
-          transition: background-color 250ms, left 100ms, margin-left 100ms;
+  -moz-transition: background-color 250ms, left 100ms, margin-left 100ms;
+  transition: background-color 250ms, left 100ms, margin-left 100ms;
 }
 .oo-ui-toggleSwitchWidget-glow {
   display: none;
   position: relative;
   overflow: hidden;
   -webkit-box-sizing: border-box;
-     -moz-box-sizing: border-box;
-          box-sizing: border-box;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
 }
 .oo-ui-selectFileWidget-info > .oo-ui-indicatorElement-indicator,
 .oo-ui-selectFileWidget-info > .oo-ui-iconElement-icon {
   cursor: default;
   -webkit-touch-callout: none;
   -webkit-user-select: none;
-     -moz-user-select: none;
-      -ms-user-select: none;
-          user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
 }
 .oo-ui-selectFileWidget-label {
   position: absolute;
 }
 .oo-ui-selectFileWidget-dropTarget .oo-ui-selectFileWidget-fileName {
   display: block;
-  padding-top: 0.5em;
-  padding-right: 2.375em;
-}
-.oo-ui-selectFileWidget-dropTarget .oo-ui-selectFileWidget-clearButton {
-  right: 0.5em;
 }
 .oo-ui-selectFileWidget-empty.oo-ui-selectFileWidget-dropTarget .oo-ui-selectFileWidget-thumbnail,
 .oo-ui-selectFileWidget-empty.oo-ui-selectFileWidget-dropTarget .oo-ui-selectFileWidget-info {
 .oo-ui-selectFileWidget-notsupported.oo-ui-selectFileWidget-dropTarget {
   -webkit-touch-callout: none;
   -webkit-user-select: none;
-     -moz-user-select: none;
-      -ms-user-select: none;
-          user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
 }
 .oo-ui-selectFileWidget-empty.oo-ui-widget-disabled.oo-ui-selectFileWidget-dropTarget,
 .oo-ui-selectFileWidget-notsupported.oo-ui-selectFileWidget-dropTarget,
 .oo-ui-selectFileWidget-notsupported.oo-ui-selectFileWidget-dropTarget {
   height: auto;
 }
-.oo-ui-selectFileWidget-notsupported.oo-ui-selectFileWidget-dropTarget .oo-ui-selectFileWidget-label {
-  padding: 1em;
-}
 .oo-ui-selectFileWidget:last-child {
   margin-right: 0;
 }
   border-radius: 0 2px 2px 0;
 }
 .oo-ui-selectFileWidget-info {
-  height: 2.4em;
   background-color: #fff;
   border: 1px solid #a2a9b1;
   border-radius: 2px 0 0 2px;
-  border-width: 1px 0 1px 1px;
+  border-right-width: 0;
 }
 .oo-ui-selectFileWidget-info > .oo-ui-iconElement-icon {
-  left: 0;
-  margin-left: 0.5em;
+  top: -1px;
+  left: 0.46875em;
+  min-height: 2.5em;
+  margin-left: -1px;
 }
 .oo-ui-selectFileWidget-info > .oo-ui-indicatorElement-indicator {
-  right: 0;
-  margin-right: 0.775em;
+  top: -1px;
+  right: 0.9375em;
+  min-height: 2.5em;
 }
 .oo-ui-selectFileWidget-label {
   -webkit-box-sizing: border-box;
-     -moz-box-sizing: border-box;
-          box-sizing: border-box;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
   display: block;
   right: 2.375em;
   padding-top: 0.625em;
-  padding-left: 0.546875em;
+  padding-left: 0.625em;
   padding-bottom: 0.546875em;
   line-height: 1.172em;
   white-space: nowrap;
 }
 .oo-ui-selectFileWidget-clearButton {
   top: -1px;
-  right: 0;
+  right: 0.46875em;
   min-width: 24px;
   width: 1.875em;
   margin-right: 0;
   color: #72777d;
 }
 .oo-ui-selectFileWidget.oo-ui-iconElement .oo-ui-selectFileWidget-label {
-  left: 2.875em;
+  left: 2.5em;
 }
 .oo-ui-selectFileWidget.oo-ui-indicatorElement .oo-ui-selectFileWidget-label {
-  right: 4.4625em;
+  right: 3.75em;
   padding-left: 0;
 }
 .oo-ui-selectFileWidget.oo-ui-indicatorElement .oo-ui-selectFileWidget-clearButton {
   overflow: inherit;
   white-space: normal;
 }
+.oo-ui-selectFileWidget-dropTarget .oo-ui-selectFileWidget-fileName {
+  padding-right: 2.5em;
+}
+.oo-ui-selectFileWidget-dropTarget .oo-ui-selectFileWidget-clearButton {
+  top: 0;
+}
 .oo-ui-selectFileWidget-empty.oo-ui-widget-enabled.oo-ui-selectFileWidget-dropTarget {
   background-color: #fff;
   border-style: dashed;
   -webkit-transition: background-color 200ms cubic-bezier(0.39, 0.575, 0.565, 1), color 200ms cubic-bezier(0.39, 0.575, 0.565, 1), border-color 200ms cubic-bezier(0.39, 0.575, 0.565, 1);
-     -moz-transition: background-color 200ms cubic-bezier(0.39, 0.575, 0.565, 1), color 200ms cubic-bezier(0.39, 0.575, 0.565, 1), border-color 200ms cubic-bezier(0.39, 0.575, 0.565, 1);
-          transition: background-color 200ms cubic-bezier(0.39, 0.575, 0.565, 1), color 200ms cubic-bezier(0.39, 0.575, 0.565, 1), border-color 200ms cubic-bezier(0.39, 0.575, 0.565, 1);
+  -moz-transition: background-color 200ms cubic-bezier(0.39, 0.575, 0.565, 1), color 200ms cubic-bezier(0.39, 0.575, 0.565, 1), border-color 200ms cubic-bezier(0.39, 0.575, 0.565, 1);
+  transition: background-color 200ms cubic-bezier(0.39, 0.575, 0.565, 1), color 200ms cubic-bezier(0.39, 0.575, 0.565, 1), border-color 200ms cubic-bezier(0.39, 0.575, 0.565, 1);
 }
 .oo-ui-selectFileWidget-empty.oo-ui-widget-enabled.oo-ui-selectFileWidget-dropTarget:hover {
   border-color: #72777d;
   background-color: #eaf3ff;
   color: #36c;
 }
-.oo-ui-selectFileWidget.oo-ui-widget-disabled.oo-ui-selectFileWidget-dropTarget,
-.oo-ui-selectFileWidget-empty.oo-ui-widget-disabled.oo-ui-selectFileWidget-dropTarget,
-.oo-ui-selectFileWidget-notsupported.oo-ui-selectFileWidget-dropTarget {
-  background-color: #eaecf0;
-  border-color: #c8ccd1;
-}
 .oo-ui-selectFileWidget.oo-ui-widget-disabled .oo-ui-selectFileWidget-info,
-.oo-ui-selectFileWidget-empty.oo-ui-widget-disabled .oo-ui-selectFileWidget-info,
-.oo-ui-selectFileWidget-notsupported .oo-ui-selectFileWidget-info {
+.oo-ui-selectFileWidget-empty.oo-ui-widget-disabled .oo-ui-selectFileWidget-info {
   background-color: #eaecf0;
   color: #72777d;
   border-color: #c8ccd1;
   text-shadow: 0 1px 1px #fff;
 }
 .oo-ui-selectFileWidget.oo-ui-widget-disabled .oo-ui-selectFileWidget-info > .oo-ui-iconElement-icon,
-.oo-ui-selectFileWidget-empty.oo-ui-widget-disabled .oo-ui-selectFileWidget-info > .oo-ui-iconElement-icon,
-.oo-ui-selectFileWidget-notsupported .oo-ui-selectFileWidget-info > .oo-ui-iconElement-icon {
+.oo-ui-selectFileWidget-empty.oo-ui-widget-disabled .oo-ui-selectFileWidget-info > .oo-ui-iconElement-icon {
   opacity: 0.51;
 }
 .oo-ui-selectFileWidget.oo-ui-widget-disabled .oo-ui-selectFileWidget-info > .oo-ui-indicatorElement-indicator,
-.oo-ui-selectFileWidget-empty.oo-ui-widget-disabled .oo-ui-selectFileWidget-info > .oo-ui-indicatorElement-indicator,
-.oo-ui-selectFileWidget-notsupported .oo-ui-selectFileWidget-info > .oo-ui-indicatorElement-indicator {
+.oo-ui-selectFileWidget-empty.oo-ui-widget-disabled .oo-ui-selectFileWidget-info > .oo-ui-indicatorElement-indicator {
   opacity: 0.15;
 }
+.oo-ui-selectFileWidget.oo-ui-widget-disabled.oo-ui-selectFileWidget-dropTarget,
+.oo-ui-selectFileWidget-empty.oo-ui-widget-disabled.oo-ui-selectFileWidget-dropTarget {
+  background-color: #eaecf0;
+  border-color: #c8ccd1;
+}
+.oo-ui-selectFileWidget-notsupported .oo-ui-selectFileWidget-info {
+  background-color: #eaecf0;
+  color: #222;
+  border-color: #c8ccd1;
+}
+.oo-ui-selectFileWidget-notsupported.oo-ui-selectFileWidget-dropTarget {
+  background-color: #eaecf0;
+  border-color: #c8ccd1;
+}
+.oo-ui-selectFileWidget-notsupported.oo-ui-selectFileWidget-dropTarget .oo-ui-selectFileWidget-label {
+  padding: 1em 0.9375em;
+}
 .oo-ui-widget-disabled .oo-ui-selectFileWidget-dropLabel {
   display: none;
 }
 .oo-ui-outlineOptionWidget {
   -webkit-touch-callout: none;
   -webkit-user-select: none;
-     -moz-user-select: none;
-      -ms-user-select: none;
-          user-select: none;
-  font-size: 1.1em;
-  padding: 0.75em;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
+  padding: 1.0546875em 0.9375em 0.9375em;
   -webkit-transition: background-color 100ms, color 100ms;
-     -moz-transition: background-color 100ms, color 100ms;
-          transition: background-color 100ms, color 100ms;
+  -moz-transition: background-color 100ms, color 100ms;
+  transition: background-color 100ms, color 100ms;
 }
 .oo-ui-outlineOptionWidget.oo-ui-optionWidget-highlighted {
   background-color: #eaecf0;
   background-color: rgba(41, 98, 204, 0.1);
   color: #36c;
 }
-.oo-ui-outlineOptionWidget .oo-ui-iconElement-icon {
-  font-size: 90.90909%;
-}
 .oo-ui-outlineOptionWidget.oo-ui-indicatorElement .oo-ui-labelElement-label {
   padding-right: 1.5em;
 }
 .oo-ui-outlineOptionWidget.oo-ui-indicatorElement .oo-ui-indicatorElement-indicator {
   opacity: 0.5;
 }
-.oo-ui-outlineOptionWidget-level-0.oo-ui-iconElement {
-  padding-left: 2.571em;
+.oo-ui-outlineOptionWidget .oo-ui-labelElement-label {
+  font-size: 1.1em;
 }
 .oo-ui-outlineOptionWidget-level-1 {
   padding-left: 2.571em;
 .oo-ui-outlineControlsWidget-movers {
   float: left;
   -webkit-box-sizing: border-box;
-     -moz-box-sizing: border-box;
-          box-sizing: border-box;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
 }
 .oo-ui-outlineControlsWidget > .oo-ui-iconElement-icon {
   float: left;
   padding: 0.35em 1em;
   font-weight: bold;
   -webkit-transition: background-color 100ms, color 100ms;
-     -moz-transition: background-color 100ms, color 100ms;
-          transition: background-color 100ms, color 100ms;
+  -moz-transition: background-color 100ms, color 100ms;
+  transition: background-color 100ms, color 100ms;
 }
 .oo-ui-tabOptionWidget.oo-ui-widget-enabled:hover {
   background-color: rgba(255, 255, 255, 0.3);
   background-color: #fff;
   color: #000;
 }
+.oo-ui-tagMultiselectWidget {
+  display: inline-block;
+  position: relative;
+  width: 100%;
+  max-width: 50em;
+}
+.oo-ui-tagMultiselectWidget-handle {
+  width: 100%;
+  display: block;
+  position: relative;
+}
+.oo-ui-tagMultiselectWidget-handle > .oo-ui-iconElement-icon,
+.oo-ui-tagMultiselectWidget-handle > .oo-ui-indicatorElement-indicator {
+  position: absolute;
+  top: 0;
+  height: 100%;
+}
+.oo-ui-tagMultiselectWidget-content {
+  position: relative;
+}
+.oo-ui-tagMultiselectWidget-group {
+  display: inline;
+}
+.oo-ui-tagMultiselectWidget-outlined {
+  width: 100%;
+}
+.oo-ui-tagMultiselectWidget.oo-ui-widget-enabled.oo-ui-tagMultiselectWidget-inlined .oo-ui-tagMultiselectWidget-handle {
+  cursor: text;
+}
+.oo-ui-tagMultiselectWidget.oo-ui-widget-disabled .oo-ui-tagMultiselectWidget-content > input {
+  display: none;
+}
+.oo-ui-tagMultiselectWidget-focusTrap {
+  display: inline-block;
+  height: 1px;
+  width: 1px;
+}
+.oo-ui-tagMultiselectWidget-handle {
+  min-height: 2.4em;
+  margin-right: 0.5em;
+  padding: 0.15em 0.25em;
+  border: 1px solid #a2a9b1;
+  border-radius: 2px;
+  -webkit-box-sizing: border-box;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+}
+.oo-ui-tagMultiselectWidget-handle:last-child {
+  margin-right: 0;
+}
+.oo-ui-tagMultiselectWidget-handle > .oo-ui-tagMultiselectWidget-content > input {
+  border: 0;
+  line-height: 1.675;
+  margin: 0 0 0 0.2em;
+  padding: 0;
+  font-size: inherit;
+  font-family: inherit;
+  background-color: transparent;
+  color: #000;
+  vertical-align: middle;
+}
+.oo-ui-tagMultiselectWidget-handle > .oo-ui-tagMultiselectWidget-content > input::-webkit-input-placeholder {
+  color: #72777d;
+  opacity: 1;
+}
+.oo-ui-tagMultiselectWidget-handle > .oo-ui-tagMultiselectWidget-content > input:-ms-input-placeholder {
+  color: #72777d;
+  opacity: 1;
+}
+.oo-ui-tagMultiselectWidget-handle > .oo-ui-tagMultiselectWidget-content > input::-moz-placeholder {
+  color: #72777d;
+  opacity: 1;
+}
+.oo-ui-tagMultiselectWidget-handle > .oo-ui-tagMultiselectWidget-content > input:-moz-placeholder {
+  color: #72777d;
+  opacity: 1;
+}
+.oo-ui-tagMultiselectWidget-handle > .oo-ui-tagMultiselectWidget-content > input::placeholder {
+  color: #72777d;
+  opacity: 1;
+}
+.oo-ui-tagMultiselectWidget-handle > .oo-ui-tagMultiselectWidget-content > input:focus {
+  outline: 0;
+}
+.oo-ui-tagMultiselectWidget.oo-ui-iconElement .oo-ui-tagMultiselectWidget-handle {
+  padding-left: 2.475em;
+}
+.oo-ui-tagMultiselectWidget.oo-ui-iconElement .oo-ui-tagMultiselectWidget-handle > .oo-ui-iconElement-icon {
+  left: 0;
+  margin: 0 0.3em;
+}
+.oo-ui-tagMultiselectWidget.oo-ui-indicatorElement .oo-ui-tagMultiselectWidget-handle {
+  padding-right: 2.4875em;
+}
+.oo-ui-tagMultiselectWidget.oo-ui-indicatorElement .oo-ui-tagMultiselectWidget-handle > .oo-ui-indicatorElement-indicator {
+  right: 0;
+  margin: 0 0.775em;
+}
+.oo-ui-tagMultiselectWidget.oo-ui-widget-enabled .oo-ui-tagMultiselectWidget-handle {
+  background-color: #fff;
+  -webkit-transition: border-color 200ms cubic-bezier(0.39, 0.575, 0.565, 1), box-shadow 200ms cubic-bezier(0.39, 0.575, 0.565, 1);
+  -moz-transition: border-color 200ms cubic-bezier(0.39, 0.575, 0.565, 1), box-shadow 200ms cubic-bezier(0.39, 0.575, 0.565, 1);
+  transition: border-color 200ms cubic-bezier(0.39, 0.575, 0.565, 1), box-shadow 200ms cubic-bezier(0.39, 0.575, 0.565, 1);
+}
+.oo-ui-tagMultiselectWidget.oo-ui-widget-enabled:hover .oo-ui-tagMultiselectWidget-handle {
+  border-color: #72777d;
+}
+.oo-ui-tagMultiselectWidget.oo-ui-widget-enabled.oo-ui-tagMultiselectWidget-open .oo-ui-tagMultiselectWidget-handle {
+  border-color: #36c;
+  outline: 0;
+  box-shadow: inset 0 0 0 1px #36c;
+}
+.oo-ui-tagMultiselectWidget.oo-ui-widget-enabled.oo-ui-tagMultiselectWidget-outlined .oo-ui-tagMultiselectWidget-handle {
+  background-color: #f8f9fa;
+  border-bottom: 0;
+  border-bottom-left-radius: 0;
+  border-bottom-right-radius: 0;
+}
+.oo-ui-tagMultiselectWidget.oo-ui-widget-enabled.oo-ui-tagMultiselectWidget-outlined .oo-ui-tagMultiselectWidget-handle .oo-ui-tagItemWidget.oo-ui-widget-enabled {
+  background-color: #fff;
+}
+.oo-ui-tagMultiselectWidget.oo-ui-widget-enabled.oo-ui-tagMultiselectWidget-outlined .oo-ui-inputWidget-input {
+  border-top-left-radius: 0;
+  border-top-right-radius: 0;
+}
+.oo-ui-tagMultiselectWidget.oo-ui-widget-disabled .oo-ui-tagMultiselectWidget-handle {
+  color: #72777d;
+  text-shadow: 0 1px 1px #fff;
+  border-color: #c8ccd1;
+  background-color: #eaecf0;
+}
+.oo-ui-tagMultiselectWidget.oo-ui-widget-disabled .oo-ui-tagMultiselectWidget-handle > .oo-ui-iconElement-icon {
+  opacity: 0.51;
+}
+.oo-ui-tagMultiselectWidget.oo-ui-widget-disabled .oo-ui-tagMultiselectWidget-handle > .oo-ui-indicatorElement-indicator {
+  opacity: 0.15;
+}
+.oo-ui-tagItemWidget {
+  position: relative;
+  display: inline-block;
+  cursor: default;
+  white-space: nowrap;
+  -webkit-box-sizing: border-box;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  width: auto;
+  max-width: 100%;
+  height: 1.7em;
+  margin: 0.1em;
+  border: 1px solid #a2a9b1;
+  border-radius: 2px;
+  padding: 0 0.4em;
+  line-height: 1.7;
+  vertical-align: middle;
+}
+.oo-ui-tagItemWidget.oo-ui-labelElement .oo-ui-labelElement-label {
+  display: inline-block;
+  text-overflow: ellipsis;
+  overflow: hidden;
+  cursor: text;
+}
+.oo-ui-tagItemWidget.oo-ui-flaggedElement-invalid {
+  border-color: #d33;
+}
+.oo-ui-tagItemWidget.oo-ui-flaggedElement-invalid:hover {
+  border-color: #d33;
+}
+.oo-ui-tagItemWidget.oo-ui-flaggedElement-invalid:focus {
+  border-color: #d33;
+  box-shadow: inset 0 0 0 1px #d33;
+}
+.oo-ui-tagItemWidget.oo-ui-widget-enabled {
+  background-color: #f8f9fa;
+  color: #222;
+  padding-right: 1.5375em;
+  -webkit-transition: background-color 100ms, color 100ms, border-color 100ms, box-shadow 100ms;
+  -moz-transition: background-color 100ms, color 100ms, border-color 100ms, box-shadow 100ms;
+  transition: background-color 100ms, color 100ms, border-color 100ms, box-shadow 100ms;
+}
+.oo-ui-tagItemWidget.oo-ui-widget-enabled:hover {
+  background-color: #fff;
+  color: #444;
+  border-color: #a2a9b1;
+}
+.oo-ui-tagItemWidget.oo-ui-widget-enabled:focus {
+  border-color: #36c;
+  box-shadow: inset 0 0 0 1px #36c;
+  outline: 0;
+}
+.oo-ui-tagItemWidget.oo-ui-widget-enabled > .oo-ui-buttonElement {
+  display: block;
+  position: absolute;
+  top: 0;
+  right: 0;
+  bottom: 0;
+}
+.oo-ui-tagItemWidget.oo-ui-widget-enabled .oo-ui-buttonElement-button {
+  display: block;
+  width: 1.5375em;
+  height: 100%;
+}
+.oo-ui-tagItemWidget.oo-ui-widget-enabled .oo-ui-buttonElement-button .oo-ui-indicator-clear {
+  position: absolute;
+  top: 0;
+  right: 0.3em;
+  bottom: 0;
+  height: auto;
+}
+.oo-ui-tagItemWidget.oo-ui-widget-disabled {
+  background-color: #eaecf0;
+  color: #72777d;
+  border-color: #c8ccd1;
+  text-shadow: 0 1px 1px #fff;
+}
+.oo-ui-tagItemWidget.oo-ui-widget-disabled:focus {
+  outline: 0;
+}
+.oo-ui-tagItemWidget.oo-ui-widget-disabled > .oo-ui-buttonElement {
+  display: none;
+}
 .oo-ui-capsuleMultiselectWidget {
   display: inline-block;
   position: relative;
   border: 1px solid #a2a9b1;
   border-radius: 2px;
   -webkit-box-sizing: border-box;
-     -moz-box-sizing: border-box;
-          box-sizing: border-box;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
 }
 .oo-ui-capsuleMultiselectWidget-handle:last-child {
   margin-right: 0;
   outline: 0;
 }
 .oo-ui-capsuleMultiselectWidget.oo-ui-iconElement .oo-ui-capsuleMultiselectWidget-handle {
-  padding-left: 2.475em;
+  padding-left: 2.5em;
 }
 .oo-ui-capsuleMultiselectWidget.oo-ui-iconElement .oo-ui-capsuleMultiselectWidget-handle > .oo-ui-iconElement-icon {
-  left: 0;
-  margin: 0 0.3em;
+  left: 0.46875em;
 }
 .oo-ui-capsuleMultiselectWidget.oo-ui-indicatorElement .oo-ui-capsuleMultiselectWidget-handle {
-  padding-right: 2.4875em;
+  padding-right: 2.8125em;
 }
 .oo-ui-capsuleMultiselectWidget.oo-ui-indicatorElement .oo-ui-capsuleMultiselectWidget-handle > .oo-ui-indicatorElement-indicator {
-  right: 0;
-  margin: 0 0.775em;
+  right: 0.9375em;
 }
 .oo-ui-capsuleMultiselectWidget-popup {
   margin-top: -1px;
   background-color: #fff;
   cursor: text;
   -webkit-transition: border-color 200ms cubic-bezier(0.39, 0.575, 0.565, 1), box-shadow 200ms cubic-bezier(0.39, 0.575, 0.565, 1);
-     -moz-transition: border-color 200ms cubic-bezier(0.39, 0.575, 0.565, 1), box-shadow 200ms cubic-bezier(0.39, 0.575, 0.565, 1);
-          transition: border-color 200ms cubic-bezier(0.39, 0.575, 0.565, 1), box-shadow 200ms cubic-bezier(0.39, 0.575, 0.565, 1);
+  -moz-transition: border-color 200ms cubic-bezier(0.39, 0.575, 0.565, 1), box-shadow 200ms cubic-bezier(0.39, 0.575, 0.565, 1);
+  transition: border-color 200ms cubic-bezier(0.39, 0.575, 0.565, 1), box-shadow 200ms cubic-bezier(0.39, 0.575, 0.565, 1);
 }
 .oo-ui-capsuleMultiselectWidget.oo-ui-widget-enabled:hover .oo-ui-capsuleMultiselectWidget-handle {
   border-color: #72777d;
   cursor: default;
   white-space: nowrap;
   -webkit-box-sizing: border-box;
-     -moz-box-sizing: border-box;
-          box-sizing: border-box;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
   width: auto;
   max-width: 100%;
   height: 1.7em;
   color: #222;
   padding-right: 1.5375em;
   -webkit-transition: background-color 100ms, color 100ms, border-color 100ms, box-shadow 100ms;
-     -moz-transition: background-color 100ms, color 100ms, border-color 100ms, box-shadow 100ms;
-          transition: background-color 100ms, color 100ms, border-color 100ms, box-shadow 100ms;
+  -moz-transition: background-color 100ms, color 100ms, border-color 100ms, box-shadow 100ms;
+  transition: background-color 100ms, color 100ms, border-color 100ms, box-shadow 100ms;
 }
 .oo-ui-capsuleItemWidget.oo-ui-widget-enabled:hover {
   background-color: #fff;
index 3482256..a2e6e34 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.20.2
+ * OOjs UI v0.21.1
  * 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-30T20:34:37Z
+ * Date: 2017-04-18T23:32:49Z
  */
 ( function ( OO ) {
 
@@ -98,7 +98,7 @@ OO.ui.mixin.DraggableElement.prototype.toggleDraggable = function ( isDraggable
        if ( this.draggable !== isDraggable ) {
                this.draggable = isDraggable;
 
-               this.$element.toggleClass( 'oo-ui-draggableElement-undraggable', !this.draggable );
+               this.$handle.toggleClass( 'oo-ui-draggableElement-undraggable', !this.draggable );
        }
 };
 
@@ -4465,6 +4465,1436 @@ OO.ui.CapsuleMultiselectWidget.prototype.focus = function () {
        return this;
 };
 
+/**
+ * TagItemWidgets are used within a {@link OO.ui.TagMultiselectWidget
+ * TagMultiselectWidget} to display the selected items.
+ *
+ * @class
+ * @extends OO.ui.Widget
+ * @mixins OO.ui.mixin.ItemWidget
+ * @mixins OO.ui.mixin.LabelElement
+ * @mixins OO.ui.mixin.FlaggedElement
+ * @mixins OO.ui.mixin.TabIndexedElement
+ * @mixins OO.ui.mixin.DraggableElement
+ *
+ * @constructor
+ * @param {Object} [config] Configuration object
+ * @cfg {boolean} [valid=true] Item is valid
+ */
+OO.ui.TagItemWidget = function OoUiTagItemWidget( config ) {
+       config = config || {};
+
+       // Parent constructor
+       OO.ui.TagItemWidget.parent.call( this, config );
+
+       // Mixin constructors
+       OO.ui.mixin.ItemWidget.call( this );
+       OO.ui.mixin.LabelElement.call( this, config );
+       OO.ui.mixin.FlaggedElement.call( this, config );
+       OO.ui.mixin.TabIndexedElement.call( this, config );
+       OO.ui.mixin.DraggableElement.call( this, config );
+
+       this.valid = config.valid === undefined ? true : !!config.valid;
+
+       this.closeButton = new OO.ui.ButtonWidget( {
+               framed: false,
+               indicator: 'clear',
+               tabIndex: -1
+       } );
+       this.closeButton.setDisabled( this.isDisabled() );
+
+       // Events
+       this.closeButton
+               .connect( this, { click: 'remove' } );
+       this.$element
+               .on( 'click', this.select.bind( this ) )
+               .on( 'keydown', this.onKeyDown.bind( this ) )
+               // Prevent propagation of mousedown; the tag item "lives" in the
+               // clickable area of the TagMultiselectWidget, which listens to
+               // mousedown to open the menu or popup. We want to prevent that
+               // for clicks specifically on the tag itself, so the actions taken
+               // are more deliberate. When the tag is clicked, it will emit the
+               // selection event (similar to how #OO.ui.MultioptionWidget emits 'change')
+               // and can be handled separately.
+               .on( 'mousedown', function ( e ) { e.stopPropagation(); } );
+
+       // Initialization
+       this.$element
+               .addClass( 'oo-ui-tagItemWidget' )
+               .append( this.$label, this.closeButton.$element );
+};
+
+/* Initialization */
+
+OO.inheritClass( OO.ui.TagItemWidget, OO.ui.Widget );
+OO.mixinClass( OO.ui.TagItemWidget, OO.ui.mixin.ItemWidget );
+OO.mixinClass( OO.ui.TagItemWidget, OO.ui.mixin.LabelElement );
+OO.mixinClass( OO.ui.TagItemWidget, OO.ui.mixin.FlaggedElement );
+OO.mixinClass( OO.ui.TagItemWidget, OO.ui.mixin.TabIndexedElement );
+OO.mixinClass( OO.ui.TagItemWidget, OO.ui.mixin.DraggableElement );
+
+/* Events */
+
+/**
+ * @event remove
+ *
+ * A remove action was performed on the item
+ */
+
+/**
+ * @event navigate
+ * @param {string} direction Direction of the movement, forward or backwards
+ *
+ * A navigate action was performed on the item
+ */
+
+/**
+ * @event select
+ *
+ * The tag widget was selected. This can occur when the widget
+ * is either clicked or enter was pressed on it.
+ */
+
+/**
+ * @event valid
+ * @param {boolean} isValid Item is valid
+ *
+ * Item validity has changed
+ */
+
+/* Methods */
+
+/**
+ * @inheritdoc
+ */
+OO.ui.TagItemWidget.prototype.setDisabled = function ( state ) {
+       // Parent method
+       OO.ui.TagItemWidget.parent.prototype.setDisabled.call( this, state );
+
+       if ( this.closeButton ) {
+               this.closeButton.setDisabled( state );
+       }
+       return this;
+};
+
+/**
+ * Handle removal of the item
+ *
+ * This is mainly for extensibility concerns, so other children
+ * of this class can change the behavior if they need to. This
+ * is called by both clicking the 'remove' button but also
+ * on keypress, which is harder to override if needed.
+ *
+ * @fires remove
+ */
+OO.ui.TagItemWidget.prototype.remove = function () {
+       if ( !this.isDisabled() ) {
+               this.emit( 'remove' );
+       }
+};
+
+/**
+ * Handle a keydown event on the widget
+ *
+ * @fires navigate
+ * @fires remove
+ * @return {boolean|undefined} false to stop the operation
+ */
+OO.ui.TagItemWidget.prototype.onKeyDown = function ( e ) {
+       var movement;
+
+       if ( e.keyCode === OO.ui.Keys.BACKSPACE || e.keyCode === OO.ui.Keys.DELETE ) {
+               this.remove();
+               return false;
+       } else if ( e.keyCode === OO.ui.Keys.ENTER ) {
+               this.select();
+               return false;
+       } else if (
+               e.keyCode === OO.ui.Keys.LEFT ||
+               e.keyCode === OO.ui.Keys.RIGHT
+       ) {
+               if ( OO.ui.Element.static.getDir( this.$element ) === 'rtl' ) {
+                       movement = {
+                               left: 'forwards',
+                               right: 'backwards'
+                       };
+               } else {
+                       movement = {
+                               left: 'backwards',
+                               right: 'forwards'
+                       };
+               }
+
+               this.emit(
+                       'navigate',
+                       e.keyCode === OO.ui.Keys.LEFT ?
+                               movement.left : movement.right
+               );
+       }
+};
+
+/**
+ * Focuses the capsule
+ */
+OO.ui.TagItemWidget.prototype.focus = function () {
+       if ( !this.isDisabled() ) {
+               this.$element.focus();
+       }
+};
+
+/**
+ * Select this item
+ *
+ * @fires select
+ */
+OO.ui.TagItemWidget.prototype.select = function () {
+       if ( !this.isDisabled() ) {
+               this.emit( 'select' );
+       }
+};
+
+/**
+ * Set the valid state of this item
+ *
+ * @param {boolean} [valid] Item is valid
+ * @fires valid
+ */
+OO.ui.TagItemWidget.prototype.toggleValid = function ( valid ) {
+       valid = valid === undefined ? !this.valid : !!valid;
+
+       if ( this.valid !== valid ) {
+               this.valid = valid;
+
+               this.setFlags( { invalid: !this.valid } );
+
+               this.emit( 'valid', this.valid );
+       }
+};
+
+/**
+ * Check whether the item is valid
+ *
+ * @return {boolean} Item is valid
+ */
+OO.ui.TagItemWidget.prototype.isValid = function () {
+       return this.valid;
+};
+
+/**
+ * A basic tag multiselect widget, similar in concept to {@link OO.ui.ComboBoxInputWidget combo box widget}
+ * that allows the user to add multiple values that are displayed in a tag area.
+ *
+ * For more information about menus and options, please see the [OOjs UI documentation on MediaWiki][1].
+ *
+ * This widget is a base widget; see {@link OO.ui.MenuTagMultiselectWidget MenuTagMultiselectWidget} and
+ * {@link OO.ui.PopupTagMultiselectWidget PopupTagMultiselectWidget} for the implementations that use
+ * a menu and a popup respectively.
+ *
+ *     @example
+ *     // Example: A basic TagMultiselectWidget.
+ *     var widget = new OO.ui.TagMultiselectWidget( {
+ *         inputPosition: 'outline',
+ *         allowedValues: [ 'Option 1', 'Option 2', 'Option 3' ],
+ *         selected: [ 'Option 1' ]
+ *     } );
+ *     $( 'body' ).append( widget.$element );
+ *
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Selects_and_Options#Menu_selects_and_options
+ *
+ * @class
+ * @extends OO.ui.Widget
+ * @mixins OO.ui.mixin.GroupWidget
+ * @mixins OO.ui.mixin.DraggableGroupElement
+ * @mixins OO.ui.mixin.IndicatorElement
+ * @mixins OO.ui.mixin.IconElement
+ * @mixins OO.ui.mixin.TabIndexedElement
+ * @mixins OO.ui.mixin.FlaggedElement
+ *
+ * @constructor
+ * @param {Object} config Configuration object
+ * @cfg {Object} [input] Configuration options for the input widget
+ * @cfg {OO.ui.InputWidget} [inputWidget] An optional input widget. If given, it will
+ *  replace the input widget used in the TagMultiselectWidget. If not given,
+ *  TagMultiselectWidget creates its own.
+ * @cfg {boolean} [inputPosition='inline'] Position of the input. Options are:
+ *     - inline: The input is invisible, but exists inside the tag list, so
+ *             the user types into the tag groups to add tags.
+ *     - outline: The input is underneath the tag area.
+ *     - none: No input supplied
+ * @cfg {boolean} [allowEditTags=true] Allow editing of the tags by clicking them
+ * @cfg {boolean} [allowArbitrary=false] Allow data items to be added even if
+ *  not present in the menu.
+ * @cfg {Object[]} [allowedValues] An array representing the allowed items
+ *  by their datas.
+ * @cfg {boolean} [allowDuplicates=false] Allow duplicate items to be added
+ * @cfg {boolean} [allowDisplayInvalidTags=false] Allow the display of
+ *  invalid tags. These tags will display with an invalid state, and
+ *  the widget as a whole will have an invalid state if any invalid tags
+ *  are present.
+ * @cfg {boolean} [allowReordering=true] Allow reordering of the items
+ * @cfg {Object[]|String[]} [selected] A set of selected tags. If given,
+ *  these will appear in the tag list on initialization, as long as they
+ *  pass the validity tests.
+ */
+OO.ui.TagMultiselectWidget = function OoUiTagMultiselectWidget( config ) {
+       var inputEvents,
+               rAF = window.requestAnimationFrame || setTimeout,
+               widget = this,
+               $tabFocus = $( '<span>' )
+                       .addClass( 'oo-ui-tagMultiselectWidget-focusTrap' );
+
+       config = config || {};
+
+       // Parent constructor
+       OO.ui.TagMultiselectWidget.parent.call( this, config );
+
+       // Mixin constructors
+       OO.ui.mixin.GroupWidget.call( this, config );
+       OO.ui.mixin.IndicatorElement.call( this, config );
+       OO.ui.mixin.IconElement.call( this, config );
+       OO.ui.mixin.TabIndexedElement.call( this, config );
+       OO.ui.mixin.FlaggedElement.call( this, config );
+       OO.ui.mixin.DraggableGroupElement.call( this, config );
+
+       this.toggleDraggable(
+               config.allowReordering === undefined ?
+                       true : !!config.allowReordering
+       );
+
+       this.inputPosition = this.constructor.static.allowedInputPositions.indexOf( config.inputPosition ) > -1 ?
+                       config.inputPosition : 'inline';
+       this.allowEditTags = config.allowEditTags === undefined ? true : !!config.allowEditTags;
+       this.allowArbitrary = !!config.allowArbitrary;
+       this.allowDuplicates = !!config.allowDuplicates;
+       this.allowedValues = config.allowedValues || [];
+       this.allowDisplayInvalidTags = config.allowDisplayInvalidTags;
+       this.hasInput = this.inputPosition !== 'none';
+       this.height = null;
+       this.valid = true;
+
+       this.$content = $( '<div>' )
+               .addClass( 'oo-ui-tagMultiselectWidget-content' );
+       this.$handle = $( '<div>' )
+               .addClass( 'oo-ui-tagMultiselectWidget-handle' )
+               .append(
+                       this.$indicator,
+                       this.$icon,
+                       this.$content
+                               .append(
+                                       this.$group
+                                               .addClass( 'oo-ui-tagMultiselectWidget-group' )
+                               )
+               );
+
+       // Events
+       this.aggregate( {
+               remove: 'itemRemove',
+               navigate: 'itemNavigate',
+               select: 'itemSelect'
+       } );
+       this.connect( this, {
+               itemRemove: 'onTagRemove',
+               itemSelect: 'onTagSelect',
+               itemNavigate: 'onTagNavigate',
+               change: 'onChangeTags'
+       } );
+       this.$handle.on( {
+               mousedown: this.onMouseDown.bind( this )
+       } );
+
+       // Initialize
+       this.$element
+               .addClass( 'oo-ui-tagMultiselectWidget' )
+               .append( this.$handle );
+
+       if ( this.hasInput ) {
+               if ( config.inputWidget ) {
+                       this.input = config.inputWidget;
+               } else {
+                       this.input = new OO.ui.TextInputWidget( $.extend( {
+                               placeholder: config.placeholder,
+                               classes: [ 'oo-ui-tagMultiselectWidget-input' ]
+                       }, config.input ) );
+               }
+               this.input.setDisabled( this.isDisabled() );
+
+               inputEvents = {
+                       focus: this.onInputFocus.bind( this ),
+                       blur: this.onInputBlur.bind( this ),
+                       'propertychange change click mouseup keydown keyup input cut paste select focus':
+                               OO.ui.debounce( this.updateInputSize.bind( this ) ),
+                       keydown: this.onInputKeyDown.bind( this ),
+                       keypress: this.onInputKeyPress.bind( this )
+               };
+
+               this.input.$input.on( inputEvents );
+
+               if ( this.inputPosition === 'outline' ) {
+                       // Override max-height for the input widget
+                       // in the case the widget is outline so it can
+                       // stretch all the way if the widet is wide
+                       this.input.$element.css( 'max-width', 'inherit' );
+                       this.$element
+                               .addClass( 'oo-ui-tagMultiselectWidget-outlined' )
+                               .append( this.input.$element );
+               } else {
+                       this.$element.addClass( 'oo-ui-tagMultiselectWidget-inlined' );
+                       // HACK: When the widget is using 'inline' input, the
+                       // behavior needs to only use the $input itself
+                       // so we style and size it accordingly (otherwise
+                       // the styling and sizing can get very convoluted
+                       // when the wrapping divs and other elements)
+                       // We are taking advantage of still being able to
+                       // call the widget itself for operations like
+                       // .getValue() and setDisabled() and .focus() but
+                       // having only the $input attached to the DOM
+                       this.$content.append( this.input.$input );
+               }
+       }
+
+       this.setTabIndexedElement(
+               this.hasInput ?
+                       this.input.$input :
+                       $tabFocus
+       );
+
+       if ( config.selected ) {
+               this.setValue( config.selected );
+       }
+
+       // HACK: Input size needs to be calculated after everything
+       // else is rendered
+       rAF( function () {
+               if ( widget.hasInput ) {
+                       widget.updateInputSize();
+               }
+       } );
+};
+
+/* Initialization */
+
+OO.inheritClass( OO.ui.TagMultiselectWidget, OO.ui.Widget );
+OO.mixinClass( OO.ui.TagMultiselectWidget, OO.ui.mixin.GroupWidget );
+OO.mixinClass( OO.ui.TagMultiselectWidget, OO.ui.mixin.DraggableGroupElement );
+OO.mixinClass( OO.ui.TagMultiselectWidget, OO.ui.mixin.IndicatorElement );
+OO.mixinClass( OO.ui.TagMultiselectWidget, OO.ui.mixin.IconElement );
+OO.mixinClass( OO.ui.TagMultiselectWidget, OO.ui.mixin.TabIndexedElement );
+OO.mixinClass( OO.ui.TagMultiselectWidget, OO.ui.mixin.FlaggedElement );
+
+/* Static properties */
+
+/**
+ * Allowed input positions.
+ * - inline: The input is inside the tag list
+ * - outline: The input is under the tag list
+ * - none: There is no input
+ *
+ * @property {Array}
+ */
+OO.ui.TagMultiselectWidget.static.allowedInputPositions = [ 'inline', 'outline', 'none' ];
+
+/* Methods */
+
+/**
+ * Handle mouse down events.
+ *
+ * @private
+ * @param {jQuery.Event} e Mouse down event
+ * @return {boolean} False to prevent defaults
+ */
+OO.ui.TagMultiselectWidget.prototype.onMouseDown = function ( e ) {
+       if ( !this.isDisabled() && e.which === OO.ui.MouseButtons.LEFT ) {
+               this.focus();
+               return false;
+       }
+};
+
+/**
+ * Handle key press events.
+ *
+ * @private
+ * @param {jQuery.Event} e Key press event
+ * @return {boolean} Whether to prevent defaults
+ */
+OO.ui.TagMultiselectWidget.prototype.onInputKeyPress = function ( e ) {
+       var stopOrContinue,
+               withMetaKey = e.metaKey || e.ctrlKey;
+
+       if ( !this.isDisabled() ) {
+               if ( e.which === OO.ui.Keys.ENTER ) {
+                       stopOrContinue = this.doInputEnter( e, withMetaKey );
+               }
+
+               // Make sure the input gets resized.
+               setTimeout( this.updateInputSize.bind( this ), 0 );
+               return stopOrContinue;
+       }
+};
+
+/**
+ * Handle key down events.
+ *
+ * @private
+ * @param {jQuery.Event} e Key down event
+ * @return {boolean}
+ */
+OO.ui.TagMultiselectWidget.prototype.onInputKeyDown = function ( e ) {
+       var movement, direction,
+               withMetaKey = e.metaKey || e.ctrlKey;
+
+       if ( !this.isDisabled() ) {
+               // 'keypress' event is not triggered for Backspace
+               if ( e.keyCode === OO.ui.Keys.BACKSPACE ) {
+                       return this.doInputBackspace( e, withMetaKey );
+               } else if ( e.keyCode === OO.ui.Keys.ESCAPE ) {
+                       return this.doInputEscape( e );
+               } else if (
+                       e.keyCode === OO.ui.Keys.LEFT ||
+                       e.keyCode === OO.ui.Keys.RIGHT
+               ) {
+                       if ( OO.ui.Element.static.getDir( this.$element ) === 'rtl' ) {
+                               movement = {
+                                       left: 'forwards',
+                                       right: 'backwards'
+                               };
+                       } else {
+                               movement = {
+                                       left: 'backwards',
+                                       right: 'forwards'
+                               };
+                       }
+                       direction = e.keyCode === OO.ui.Keys.LEFT ?
+                               movement.left : movement.right;
+
+                       return this.doInputArrow( e, direction, withMetaKey );
+               }
+       }
+};
+
+/**
+ * Respond to input focus event
+ */
+OO.ui.TagMultiselectWidget.prototype.onInputFocus = function () {};
+
+/**
+ * Respond to input blur event
+ */
+OO.ui.TagMultiselectWidget.prototype.onInputBlur = function () {};
+
+/**
+ * Perform an action after the enter key on the input
+ *
+ * @param {jQuery.Event} e Event data
+ * @param {boolean} [withMetaKey] Whether this key was pressed with
+ * a meta key like 'ctrl'
+ * @return {boolean} Whether to prevent defaults
+ */
+OO.ui.TagMultiselectWidget.prototype.doInputEnter = function () {
+       this.addTagFromInput();
+       return false;
+};
+
+/**
+ * Perform an action responding to the enter key on the input
+ *
+ * @param {jQuery.Event} e Event data
+ * @param {boolean} [withMetaKey] Whether this key was pressed with
+ * a meta key like 'ctrl'
+ * @return {boolean} Whether to prevent defaults
+ */
+OO.ui.TagMultiselectWidget.prototype.doInputBackspace = function () {
+       var items, item;
+
+       if (
+               this.inputPosition === 'inline' &&
+               this.input.getValue() === '' &&
+               !this.isEmpty()
+       ) {
+               // Delete the last item
+               items = this.getItems();
+               item = items[ items.length - 1 ];
+               this.input.setValue( item.getData() );
+               this.removeItems( [ item ] );
+
+               return false;
+       }
+};
+
+/**
+ * Perform an action after the escape key on the input
+ *
+ * @param {jQuery.Event} e Event data
+ * @return {boolean} Whether to prevent defaults
+ */
+OO.ui.TagMultiselectWidget.prototype.doInputEscape = function () {
+       this.clearInput();
+};
+
+/**
+ * Perform an action after the arrow key on the input, select the previous
+ * or next item from the input.
+ * See #getPreviousItem and #getNextItem
+ *
+ * @param {jQuery.Event} e Event data
+ * @param {string} direction Direction of the movement; forwards or backwards
+ * @param {boolean} [withMetaKey] Whether this key was pressed with
+ *  a meta key like 'ctrl'
+ * @return {boolean} Whether to prevent defaults
+ */
+OO.ui.TagMultiselectWidget.prototype.doInputArrow = function ( direction ) {
+       if (
+               this.inputPosition === 'inline' &&
+               !this.isEmpty()
+       ) {
+               if ( direction === 'backwards' ) {
+                       // Get previous item
+                       this.getPreviousItem().focus();
+               } else {
+                       // Get next item
+                       this.getNextItem().focus();
+               }
+       }
+};
+
+/**
+ * Respond to item select event
+ */
+OO.ui.TagMultiselectWidget.prototype.onTagSelect = function ( item ) {
+       if ( this.hasInput && this.allowEditTags ) {
+               if ( this.input.getValue() ) {
+                       this.addTagFromInput();
+               }
+               // 1. Get the label of the tag into the input
+               this.input.setValue( item.getData() );
+               // 2. Remove the tag
+               this.removeItems( [ item ] );
+               // 3. Focus the input
+               this.focus();
+       }
+};
+
+/**
+ * Respond to change event, where items were added, removed, or cleared.
+ */
+OO.ui.TagMultiselectWidget.prototype.onChangeTags = function () {
+       this.toggleValid( this.checkValidity() );
+       if ( this.hasInput ) {
+               this.updateInputSize();
+       }
+       this.updateIfHeightChanged();
+};
+
+/**
+ * @inheritdoc
+ */
+OO.ui.TagMultiselectWidget.prototype.setDisabled = function ( isDisabled ) {
+       // Parent method
+       OO.ui.TagMultiselectWidget.parent.prototype.setDisabled.call( this, isDisabled );
+
+       if ( this.hasInput && this.input ) {
+               this.input.setDisabled( !!isDisabled );
+       }
+
+       if ( this.items ) {
+               this.getItems().forEach( function ( item ) {
+                       item.setDisabled( !!isDisabled );
+               } );
+       }
+};
+
+/**
+ * Respond to tag remove event
+ * @param {OO.ui.TagItemWidget} item Removed tag
+ */
+OO.ui.TagMultiselectWidget.prototype.onTagRemove = function ( item ) {
+       this.removeTagByData( item.getData() );
+};
+
+/**
+ * Respond to navigate event on the tag
+ *
+ * @param {OO.ui.TagItemWidget} item Removed tag
+ * @param {string} direction Direction of movement; 'forwards' or 'backwards'
+ */
+OO.ui.TagMultiselectWidget.prototype.onTagNavigate = function ( item, direction ) {
+       if ( direction === 'forwards' ) {
+               this.getNextItem( item ).focus();
+       } else {
+               this.getPreviousItem( item ).focus();
+       }
+};
+
+/**
+ * Add tag from input value
+ */
+OO.ui.TagMultiselectWidget.prototype.addTagFromInput = function () {
+       var val = this.input.getValue(),
+               isValid = this.isAllowedData( val );
+
+       if ( !val ) {
+               return;
+       }
+
+       if ( isValid || this.allowDisplayInvalidTags ) {
+               this.addTag( val );
+               this.clearInput();
+               this.focus();
+       }
+};
+
+/**
+ * Clear the input
+ */
+OO.ui.TagMultiselectWidget.prototype.clearInput = function () {
+       this.input.setValue( '' );
+};
+
+/**
+ * Check whether the given value is a duplicate of an existing
+ * tag already in the list.
+ *
+ * @param {string|Object} data Requested value
+ * @return {boolean} Value is duplicate
+ */
+OO.ui.TagMultiselectWidget.prototype.isDuplicateData = function ( data ) {
+       return !!this.getItemFromData( data );
+};
+
+/**
+ * Check whether a given value is allowed to be added
+ *
+ * @param {string|Object} data Requested value
+ * @return {boolean} Value is allowed
+ */
+OO.ui.TagMultiselectWidget.prototype.isAllowedData = function ( data ) {
+       if ( this.allowArbitrary ) {
+               return true;
+       }
+
+       if (
+               !this.allowDuplicates &&
+               this.isDuplicateData( data )
+       ) {
+               return false;
+       }
+
+       // Check with allowed values
+       if (
+               this.getAllowedValues().some( function ( value ) {
+                       return data === value;
+               } )
+       ) {
+               return true;
+       }
+
+       return false;
+};
+
+/**
+ * Get the allowed values list
+ *
+ * @return {string[]} Allowed data values
+ */
+OO.ui.TagMultiselectWidget.prototype.getAllowedValues = function () {
+       return this.allowedValues;
+};
+
+/**
+ * Add a value to the allowed values list
+ *
+ * @param {string} value Allowed data value
+ */
+OO.ui.TagMultiselectWidget.prototype.addAllowedValue = function ( value ) {
+       if ( this.allowedValues.indexOf( value ) === -1 ) {
+               this.allowedValues.push( value );
+       }
+};
+
+/**
+ * Focus the widget
+ */
+OO.ui.TagMultiselectWidget.prototype.focus = function () {
+       if ( this.hasInput ) {
+               this.input.focus();
+       }
+};
+
+/**
+ * Get the datas of the currently selected items
+ *
+ * @return {string[]|Object[]} Datas of currently selected items
+ */
+OO.ui.TagMultiselectWidget.prototype.getValue = function () {
+       return this.getItems()
+               .filter( function ( item ) {
+                       return item.isValid();
+               } )
+               .map( function ( item ) {
+                       return item.getData();
+               } );
+};
+
+/**
+ * Set the value of this widget by datas.
+ *
+ * @param {string|string[]|Object|Object[]} value An object representing the data
+ *  and label of the value. If the widget allows arbitrary values,
+ *  the items will be added as-is. Otherwise, the data value will
+ *  be checked against allowedValues.
+ *  This object must contain at least a data key. Example:
+ *  { data: 'foo', label: 'Foo item' }
+ *  For multiple items, use an array of objects. For example:
+ *   [
+ *      { data: 'foo', label: 'Foo item' },
+ *      { data: 'bar', label: 'Bar item' }
+ *      ]
+ *  Value can also be added with plaintext array, for example:
+ *  [ 'foo', 'bar', 'bla' ] or a single string, like 'foo'
+ */
+OO.ui.TagMultiselectWidget.prototype.setValue = function ( valueObject ) {
+       valueObject = Array.isArray( valueObject ) ? valueObject : [ valueObject ];
+
+       this.clearItems();
+       valueObject.forEach( function ( obj ) {
+               if ( typeof obj === 'string' ) {
+                       this.addTag( obj );
+               } else {
+                       this.addTag( obj.data, obj.label );
+               }
+       }.bind( this ) );
+};
+
+/**
+ * Add tag to the display area
+ *
+ * @param {string|Object} data Tag data
+ * @param {string} [label] Tag label. If no label is provided, the
+ *  stringified version of the data will be used instead.
+ * @return {boolean} Item was added successfully
+ */
+OO.ui.TagMultiselectWidget.prototype.addTag = function ( data, label ) {
+       var newItemWidget,
+               isValid = this.isAllowedData( data );
+
+       if ( isValid || this.allowDisplayInvalidTags ) {
+               newItemWidget = this.createTagItemWidget( data, label );
+               newItemWidget.toggleValid( isValid );
+               this.addItems( [ newItemWidget ] );
+       }
+};
+
+/**
+ * Remove tag by its data property.
+ *
+ * @param {string|Object} data Tag data
+ */
+OO.ui.TagMultiselectWidget.prototype.removeTagByData = function ( data ) {
+       var item = this.getItemFromData( data );
+
+       this.removeItems( [ item ] );
+};
+
+/**
+ * Construct a OO.ui.TagItemWidget (or a subclass thereof) from given label and data.
+ *
+ * @protected
+ * @param {string} data Item data
+ * @param {string} label The label text.
+ * @return {OO.ui.TagItemWidget}
+ */
+OO.ui.TagMultiselectWidget.prototype.createTagItemWidget = function ( data, label ) {
+       label = label || data;
+
+       return new OO.ui.TagItemWidget( { data: data, label: label } );
+};
+
+/**
+ * Given an item, returns the item after it. If the item is already the
+ * last item, return `this.input`. If no item is passed, returns the
+ * very first item.
+ *
+ * @protected
+ * @param {OO.ui.TagItemWidget} [item] Tag item
+ * @return {OO.ui.Widget} The next widget available.
+ */
+OO.ui.TagMultiselectWidget.prototype.getNextItem = function ( item ) {
+       var itemIndex = this.items.indexOf( item );
+
+       if ( item === undefined || itemIndex === -1 ) {
+               return this.items[ 0 ];
+       }
+
+       if ( itemIndex === this.items.length - 1 ) { // Last item
+               if ( this.hasInput ) {
+                       return this.input;
+               } else {
+                       // Return first item
+                       return this.items[ 0 ];
+               }
+       } else {
+               return this.items[ itemIndex + 1 ];
+       }
+};
+
+/**
+ * Given an item, returns the item before it. If the item is already the
+ * first item, return `this.input`. If no item is passed, returns the
+ * very last item.
+ *
+ * @protected
+ * @param {OO.ui.TagItemWidget} [item] Tag item
+ * @return {OO.ui.Widget} The previous widget available.
+ */
+OO.ui.TagMultiselectWidget.prototype.getPreviousItem = function ( item ) {
+       var itemIndex = this.items.indexOf( item );
+
+       if ( item === undefined || itemIndex === -1 ) {
+               return this.items[ this.items.length - 1 ];
+       }
+
+       if ( itemIndex === 0 ) {
+               if ( this.hasInput ) {
+                       return this.input;
+               } else {
+                       // Return the last item
+                       return this.items[ this.items.length - 1 ];
+               }
+       } else {
+               return this.items[ itemIndex - 1 ];
+       }
+};
+
+/**
+ * Update the dimensions of the text input field to encompass all available area.
+ * This is especially relevant for when the input is at the edge of a line
+ * and should get smaller. The usual operation (as an inline-block with min-width)
+ * does not work in that case, pushing the input downwards to the next line.
+ *
+ * @private
+ */
+OO.ui.TagMultiselectWidget.prototype.updateInputSize = function () {
+       var $lastItem, direction, contentWidth, currentWidth, bestWidth;
+       if ( this.inputPosition === 'inline' && !this.isDisabled() ) {
+               this.input.$input.css( 'width', '1em' );
+               $lastItem = this.$group.children().last();
+               direction = OO.ui.Element.static.getDir( this.$handle );
+
+               // Get the width of the input with the placeholder text as
+               // the value and save it so that we don't keep recalculating
+               if (
+                       this.contentWidthWithPlaceholder === undefined &&
+                       this.input.getValue() === '' &&
+                       this.input.$input.attr( 'placeholder' ) !== undefined
+               ) {
+                       this.input.setValue( this.input.$input.attr( 'placeholder' ) );
+                       this.contentWidthWithPlaceholder = this.input.$input[ 0 ].scrollWidth;
+                       this.input.setValue( '' );
+
+               }
+
+               // Always keep the input wide enough for the placeholder text
+               contentWidth = Math.max(
+                       this.input.$input[ 0 ].scrollWidth,
+                       // undefined arguments in Math.max lead to NaN
+                       ( this.contentWidthWithPlaceholder === undefined ) ?
+                               0 : this.contentWidthWithPlaceholder
+               );
+               currentWidth = this.input.$input.width();
+
+               if ( contentWidth < currentWidth ) {
+                       this.updateIfHeightChanged();
+                       // All is fine, don't perform expensive calculations
+                       return;
+               }
+
+               if ( $lastItem.length === 0 ) {
+                       bestWidth = this.$content.innerWidth();
+               } else {
+                       bestWidth = direction === 'ltr' ?
+                               this.$content.innerWidth() - $lastItem.position().left - $lastItem.outerWidth() :
+                               $lastItem.position().left;
+               }
+
+               // Some safety margin for sanity, because I *really* don't feel like finding out where the few
+               // pixels this is off by are coming from.
+               bestWidth -= 10;
+               if ( contentWidth > bestWidth ) {
+                       // This will result in the input getting shifted to the next line
+                       bestWidth = this.$content.innerWidth() - 10;
+               }
+               this.input.$input.width( Math.floor( bestWidth ) );
+               this.updateIfHeightChanged();
+       } else {
+               this.updateIfHeightChanged();
+       }
+};
+
+/**
+ * Determine if widget height changed, and if so,
+ * emit the resize event. This is useful for when there are either
+ * menus or popups attached to the bottom of the widget, to allow
+ * them to change their positioning in case the widget moved down
+ * or up.
+ *
+ * @private
+ */
+OO.ui.TagMultiselectWidget.prototype.updateIfHeightChanged = function () {
+       var height = this.$element.height();
+       if ( height !== this.height ) {
+               this.height = height;
+               this.emit( 'resize' );
+       }
+};
+
+/**
+ * Check whether all items in the widget are valid
+ *
+ * @return {boolean} Widget is valid
+ */
+OO.ui.TagMultiselectWidget.prototype.checkValidity = function () {
+       return this.getItems().every( function ( item ) {
+               return item.isValid();
+       } );
+};
+
+/**
+ * Set the valid state of this item
+ *
+ * @param {boolean} [valid] Item is valid
+ * @fires valid
+ */
+OO.ui.TagMultiselectWidget.prototype.toggleValid = function ( valid ) {
+       valid = valid === undefined ? !this.valid : !!valid;
+
+       if ( this.valid !== valid ) {
+               this.valid = valid;
+
+               this.setFlags( { invalid: !this.valid } );
+
+               this.emit( 'valid', this.valid );
+       }
+};
+
+/**
+ * Get the current valid state of the widget
+ *
+ * @return {boolean} Widget is valid
+ */
+OO.ui.TagMultiselectWidget.prototype.isValid = function () {
+       return this.valid;
+};
+
+/**
+ * PopupTagMultiselectWidget is a {@link OO.ui.TagMultiselectWidget OO.ui.TagMultiselectWidget} intended
+ * to use a popup. The popup can be configured to have a default input to insert values into the widget.
+ *
+ * For more information about menus and options, please see the [OOjs UI documentation on MediaWiki][1].
+ *
+ *     @example
+ *     // Example: A basic PopupTagMultiselectWidget.
+ *     var widget = new OO.ui.PopupTagMultiselectWidget();
+ *     $( 'body' ).append( widget.$element );
+ *
+ *     // Example: A PopupTagMultiselectWidget with an external popup.
+ *     var popupInput = new OO.ui.TextInputWidget(),
+ *         widget = new OO.ui.PopupTagMultiselectWidget( {
+ *            popupInput: popupInput,
+ *            popup: {
+ *               $content: popupInput.$element
+ *            }
+ *         } );
+ *     $( 'body' ).append( widget.$element );
+ *
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Selects_and_Options#Menu_selects_and_options
+ *
+ * @class
+ * @extends OO.ui.TagMultiselectWidget
+ * @mixins OO.ui.mixin.PopupElement
+ *
+ * @param {Object} config Configuration object
+ * @cfg {jQuery} [$overlay] An overlay for the popup
+ * @cfg {Object} [popup] Configuration options for the popup
+ * @cfg {OO.ui.InputWidget} [popupInput] An input widget inside the popup that will be
+ *  focused when the popup is opened and will be used as replacement for the
+ *  general input in the widget.
+ */
+OO.ui.PopupTagMultiselectWidget = function OoUiPopupTagMultiselectWidget( config ) {
+       var defaultInput,
+               defaultConfig = { popup: {} };
+
+       config = config || {};
+
+       // Parent constructor
+       OO.ui.PopupTagMultiselectWidget.parent.call( this, $.extend( { inputPosition: 'none' }, config ) );
+
+       this.$overlay = config.$overlay || this.$element;
+
+       if ( !config.popup ) {
+               // For the default base implementation, we give a popup
+               // with an input widget inside it. For any other use cases
+               // the popup needs to be populated externally and the
+               // event handled to add tags separately and manually
+               defaultInput = new OO.ui.TextInputWidget();
+
+               defaultConfig.popupInput = defaultInput;
+               defaultConfig.popup.$content = defaultInput.$element;
+
+               this.$element.addClass( 'oo-ui-popupTagMultiselectWidget-defaultPopup' );
+       }
+
+       // Add overlay, and add that to the autoCloseIgnore
+       defaultConfig.popup.$overlay = this.$overlay;
+       defaultConfig.popup.$autoCloseIgnore = this.hasInput ?
+               this.input.$element.add( this.$overlay ) : this.$overlay;
+
+       // Allow extending any of the above
+       config = $.extend( defaultConfig, config );
+
+       // Mixin constructors
+       OO.ui.mixin.PopupElement.call( this, config );
+
+       if ( this.hasInput ) {
+               this.input.$input.on( 'focus', this.popup.toggle.bind( this.popup, true ) );
+       }
+
+       // Configuration options
+       this.popupInput = config.popupInput;
+       if ( this.popupInput ) {
+               this.popupInput.connect( this, {
+                       enter: 'onPopupInputEnter'
+               } );
+       }
+
+       // Events
+       this.popup.connect( this, { toggle: 'onPopupToggle' } );
+       this.$tabIndexed
+               .on( 'focus', this.focus.bind( this ) );
+
+       // Initialize
+       this.$element
+               .append( this.popup.$element )
+               .addClass( 'oo-ui-popupTagMultiselectWidget' );
+};
+
+/* Initialization */
+
+OO.inheritClass( OO.ui.PopupTagMultiselectWidget, OO.ui.TagMultiselectWidget );
+OO.mixinClass( OO.ui.PopupTagMultiselectWidget, OO.ui.mixin.PopupElement );
+
+/* Methods */
+
+/**
+ * @inheritdoc
+ */
+OO.ui.PopupTagMultiselectWidget.prototype.focus = function () {
+       // Since the parent deals with input focus, only
+       // call the parent method if our input isn't in the
+       // popup
+       if ( !this.popupInput ) {
+               // Parent method
+               OO.ui.PopupTagMultiselectWidget.parent.prototype.focus.call( this );
+       }
+
+       this.popup.toggle( true );
+};
+
+/**
+ * Respond to popup toggle event
+ *
+ * @param {boolean} isVisible Popup is visible
+ */
+OO.ui.PopupTagMultiselectWidget.prototype.onPopupToggle = function ( isVisible ) {
+       if ( isVisible && this.popupInput ) {
+               this.popupInput.focus();
+       }
+};
+
+/**
+ * Respond to popup input enter event
+ */
+OO.ui.PopupTagMultiselectWidget.prototype.onPopupInputEnter = function () {
+       if ( this.popupInput ) {
+               this.addTagByPopupValue( this.popupInput.getValue() );
+               this.popupInput.setValue( '' );
+       }
+};
+
+/**
+ * @inheritdoc
+ */
+OO.ui.PopupTagMultiselectWidget.prototype.onTagSelect = function ( item ) {
+       if ( this.popupInput && this.allowEditTags ) {
+               this.popupInput.setValue( item.getData() );
+               this.removeItems( [ item ] );
+
+               this.popup.toggle( true );
+               this.popupInput.focus();
+       } else {
+               // Parent
+               OO.ui.PopupTagMultiselectWidget.parent.prototype.onTagSelect.call( this, item );
+       }
+};
+
+/**
+ * Add a tag by the popup value.
+ * Whatever is responsible for setting the value in the popup should call
+ * this method to add a tag, or use the regular methods like #addTag or
+ * #setValue directly.
+ *
+ * @param {string} data The value of item
+ * @param {string} [label] The label of the tag. If not given, the data is used.
+ */
+OO.ui.PopupTagMultiselectWidget.prototype.addTagByPopupValue = function ( data, label ) {
+       this.addTag( data, label );
+};
+
+/**
+ * MenuTagMultiselectWidget is a {@link OO.ui.TagMultiselectWidget OO.ui.TagMultiselectWidget} intended
+ * to use a menu of selectable options.
+ *
+ * For more information about menus and options, please see the [OOjs UI documentation on MediaWiki][1].
+ *
+ *     @example
+ *     // Example: A basic MenuTagMultiselectWidget.
+ *     var widget = new OO.ui.MenuTagMultiselectWidget( {
+ *         inputPosition: 'outline',
+ *         options: [
+ *            { data: 'option1', label: 'Option 1' },
+ *            { data: 'option2', label: 'Option 2' },
+ *            { data: 'option3', label: 'Option 3' },
+ *         ],
+ *         selected: [ 'option1', 'option2' ]
+ *     } );
+ *     $( 'body' ).append( widget.$element );
+ *
+ * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Widgets/Selects_and_Options#Menu_selects_and_options
+ *
+ * @class
+ * @extends OO.ui.TagMultiselectWidget
+ *
+ * @constructor
+ * @param {Object} [config] Configuration object
+ * @cfg {Object} [menu] Configuration object for the menu widget
+ * @cfg {jQuery} [$overlay] An overlay for the menu
+ * @cfg {Object[]} [options=[]] Array of menu options in the format `{ data: …, label: … }`
+ */
+OO.ui.MenuTagMultiselectWidget = function OoUiMenuTagMultiselectWidget( config ) {
+       config = config || {};
+
+       // Parent constructor
+       OO.ui.MenuTagMultiselectWidget.parent.call( this, config );
+
+       this.$overlay = config.$overlay || this.$element;
+
+       this.menu = this.createMenuWidget( $.extend( {
+               widget: this,
+               input: this.hasInput ? this.input : null,
+               $input: this.hasInput ? this.input.$input : null,
+               filterFromInput: !!this.hasInput,
+               $autoCloseIgnore: this.hasInput ?
+                       this.input.$element.add( this.$overlay ) : this.$overlay,
+               $container: this.hasInput && this.inputPosition === 'outline' ?
+                       this.input.$element : this.$element,
+               $overlay: this.$overlay,
+               disabled: this.isDisabled()
+       }, config.menu ) );
+       this.addOptions( config.options || [] );
+
+       // Events
+       this.menu.connect( this, {
+               choose: 'onMenuChoose',
+               toggle: 'onMenuToggle'
+       } );
+       if ( this.hasInput ) {
+               this.input.connect( this, { change: 'onInputChange' } );
+       }
+       this.connect( this, { resize: 'onResize' } );
+
+       // Initialization
+       this.$overlay
+               .append( this.menu.$element );
+       this.$element
+               .addClass( 'oo-ui-menuTagMultiselectWidget' );
+};
+
+/* Initialization */
+
+OO.inheritClass( OO.ui.MenuTagMultiselectWidget, OO.ui.TagMultiselectWidget );
+
+/* Methods */
+
+/**
+ * Respond to resize event
+ */
+OO.ui.MenuTagMultiselectWidget.prototype.onResize = function () {
+       // Reposition the menu
+       this.menu.position();
+};
+
+/**
+ * @inheritdoc
+ */
+OO.ui.MenuTagMultiselectWidget.prototype.onInputFocus = function () {
+       // Parent method
+       OO.ui.MenuTagMultiselectWidget.parent.prototype.onInputFocus.call( this );
+
+       this.menu.toggle( true );
+};
+
+/**
+ * Respond to input change event
+ */
+OO.ui.MenuTagMultiselectWidget.prototype.onInputChange = function () {
+       this.menu.toggle( true );
+};
+
+/**
+ * Respond to menu choose event
+ *
+ * @param {OO.ui.OptionWidget} menuItem Chosen menu item
+ */
+OO.ui.MenuTagMultiselectWidget.prototype.onMenuChoose = function ( menuItem ) {
+       // Add tag
+       this.addTag( menuItem.getData(), menuItem.getLabel() );
+};
+
+/**
+ * Respond to menu toggle event. Reset item highlights on hide.
+ *
+ * @param {boolean} isVisible The menu is visible
+ */
+OO.ui.MenuTagMultiselectWidget.prototype.onMenuToggle = function ( isVisible ) {
+       if ( !isVisible ) {
+               this.menu.selectItem( null );
+               this.menu.highlightItem( null );
+       }
+};
+
+/**
+ * @inheritdoc
+ */
+OO.ui.MenuTagMultiselectWidget.prototype.onTagSelect = function ( tagItem ) {
+       var menuItem = this.menu.getItemFromData( tagItem.getData() );
+       // Override the base behavior from TagMultiselectWidget; the base behavior
+       // in TagMultiselectWidget is to remove the tag to edit it in the input,
+       // but in our case, we want to utilize the menu selection behavior, and
+       // definitely not remove the item.
+
+       // Select the menu item
+       this.menu.selectItem( menuItem );
+
+       this.focus();
+};
+
+/**
+ * @inheritdoc
+ */
+OO.ui.MenuTagMultiselectWidget.prototype.addTagFromInput = function () {
+       var inputValue = this.input.getValue(),
+               highlightedItem = this.menu.getHighlightedItem(),
+               item = this.menu.getItemFromData( inputValue );
+
+       // Override the parent method so we add from the menu
+       // rather than directly from the input
+
+       // Look for a highlighted item first
+       if ( highlightedItem ) {
+               this.addTag( highlightedItem.getData(), highlightedItem.getLabel() );
+       } else if ( item ) {
+               // Look for the element that fits the data
+               this.addTag( item.getData(), item.getLabel() );
+       } else {
+               // Otherwise, add the tag - the method will only add if the
+               // tag is valid or if invalid tags are allowed
+               this.addTag( inputValue );
+       }
+};
+
+/**
+ * Return the visible items in the menu. This is mainly used for when
+ * the menu is filtering results.
+ *
+ * @return {OO.ui.MenuOptionWidget[]} Visible results
+ */
+OO.ui.MenuTagMultiselectWidget.prototype.getMenuVisibleItems = function () {
+       return this.menu.getItems().filter( function ( menuItem ) {
+               return menuItem.isVisible();
+       } );
+};
+
+/**
+ * Create the menu for this widget. This is in a separate method so that
+ * child classes can override this without polluting the constructor with
+ * unnecessary extra objects that will be overidden.
+ *
+ * @param {Object} menuConfig Configuration options
+ * @return {OO.ui.MenuSelectWidget} Menu widget
+ */
+OO.ui.MenuTagMultiselectWidget.prototype.createMenuWidget = function ( menuConfig ) {
+       return new OO.ui.FloatingMenuSelectWidget( menuConfig );
+};
+
+/**
+ * Add options to the menu
+ *
+ * @param {Object[]} options Object defining options
+ */
+OO.ui.MenuTagMultiselectWidget.prototype.addOptions = function ( menuOptions ) {
+       var widget = this,
+               items = menuOptions.map( function ( obj ) {
+                       return widget.createMenuOptionWidget( obj.data, obj.label );
+               } );
+
+       this.menu.addItems( items );
+};
+
+/**
+ * Create a menu option widget.
+ *
+ * @param {string} data Item data
+ * @param {string} [label] Item label
+ * @return {OO.ui.OptionWidget} Option widget
+ */
+OO.ui.MenuTagMultiselectWidget.prototype.createMenuOptionWidget = function ( data, label ) {
+       return new OO.ui.MenuOptionWidget( {
+               data: data,
+               label: label || data
+       } );
+};
+
+/**
+ * Get the menu
+ *
+ * @return {OO.ui.MenuSelectWidget} Menu
+ */
+OO.ui.MenuTagMultiselectWidget.prototype.getMenu = function () {
+       return this.menu;
+};
+
+/**
+ * Get the allowed values list
+ *
+ * @return {string[]} Allowed data values
+ */
+OO.ui.MenuTagMultiselectWidget.prototype.getAllowedValues = function () {
+       var menuDatas = this.menu.getItems().map( function ( menuItem ) {
+               return menuItem.getData();
+       } );
+       return this.allowedValues.concat( menuDatas );
+};
+
+/**
+ * @inheritdoc
+ */
+OO.ui.MenuTagMultiselectWidget.prototype.focus = function () {
+       // Parent method
+       OO.ui.MenuTagMultiselectWidget.parent.prototype.focus.call( this );
+
+       if ( !this.isDisabled() ) {
+               this.menu.toggle( true );
+       }
+};
+
 /**
  * SelectFileWidgets allow for selecting files, using the HTML5 File API. These
  * widgets can be configured with {@link OO.ui.mixin.IconElement icons} and {@link
index 4842a46..c9c4c1b 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.20.2
+ * OOjs UI v0.21.1
  * 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-30T20:34:41Z
+ * Date: 2017-04-18T23:32:54Z
  */
 .oo-ui-actionWidget.oo-ui-pendingElement-pending {
   background-image: /* @embed */ url(themes/apex/images/textures/pending.gif);
@@ -17,8 +17,8 @@
 }
 .oo-ui-window-frame {
   -webkit-box-sizing: border-box;
-     -moz-box-sizing: border-box;
-          box-sizing: border-box;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
 }
 .oo-ui-window-content {
   position: absolute;
@@ -34,9 +34,9 @@
 .oo-ui-window-foot {
   -webkit-touch-callout: none;
   -webkit-user-select: none;
-     -moz-user-select: none;
-      -ms-user-select: none;
-          user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
 }
 .oo-ui-window-body {
   margin: 0;
@@ -56,8 +56,8 @@
   left: 0;
   right: 0;
   -webkit-box-sizing: border-box;
-     -moz-box-sizing: border-box;
-          box-sizing: border-box;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
 }
 .oo-ui-dialog-content > .oo-ui-window-head {
   overflow: hidden;
   background-color: rgba(255, 255, 255, 0.5);
   opacity: 0;
   -webkit-transition: opacity 250ms ease;
-     -moz-transition: opacity 250ms ease;
-          transition: opacity 250ms ease;
+  -moz-transition: opacity 250ms ease;
+  transition: opacity 250ms ease;
 }
 .oo-ui-windowManager-modal > .oo-ui-dialog > .oo-ui-window-frame {
   background-color: #fff;
   opacity: 0;
   -webkit-transform: scale(0.5);
-     -moz-transform: scale(0.5);
-      -ms-transform: scale(0.5);
-          transform: scale(0.5);
+  -moz-transform: scale(0.5);
+  -ms-transform: scale(0.5);
+  transform: scale(0.5);
   -webkit-transition: all 250ms ease;
-     -moz-transition: all 250ms ease;
-          transition: all 250ms ease;
+  -moz-transition: all 250ms ease;
+  transition: all 250ms ease;
 }
 .oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-setup {
   opacity: 1;
 .oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-ready > .oo-ui-window-frame {
   opacity: 1;
   -webkit-transform: scale(1);
-     -moz-transform: scale(1);
-      -ms-transform: scale(1);
-          transform: scale(1);
+  -moz-transform: scale(1);
+  -ms-transform: scale(1);
+  transform: scale(1);
 }
 .oo-ui-windowManager-modal.oo-ui-windowManager-floating > .oo-ui-dialog > .oo-ui-window-frame {
   top: 1em;
   bottom: 1em;
   max-height: 100%;
-  max-height: calc(100% - 2em);
+  max-height: calc( 100% - 2em );
   border: 1px solid #ccc;
   border-radius: 0.5em;
   box-shadow: 0 0.2em 1em rgba(0, 0, 0, 0.3);
index beca510..f6828e2 100644 (file)
@@ -1,20 +1,20 @@
 /*!
- * OOjs UI v0.20.2
+ * OOjs UI v0.21.1
  * 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-30T20:34:41Z
+ * Date: 2017-04-18T23:32:54Z
  */
 .oo-ui-window {
   background: transparent;
 }
 .oo-ui-window-frame {
   -webkit-box-sizing: border-box;
-     -moz-box-sizing: border-box;
-          box-sizing: border-box;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
 }
 .oo-ui-window-content {
   position: absolute;
@@ -30,9 +30,9 @@
 .oo-ui-window-foot {
   -webkit-touch-callout: none;
   -webkit-user-select: none;
-     -moz-user-select: none;
-      -ms-user-select: none;
-          user-select: none;
+  -moz-user-select: none;
+  -ms-user-select: none;
+  user-select: none;
 }
 .oo-ui-window-body {
   margin: 0;
@@ -52,8 +52,8 @@
   left: 0;
   right: 0;
   -webkit-box-sizing: border-box;
-     -moz-box-sizing: border-box;
-          box-sizing: border-box;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
 }
 .oo-ui-dialog-content > .oo-ui-window-head {
   overflow: hidden;
   margin-right: 0;
 }
 .oo-ui-messageDialog-actions .oo-ui-actionWidget .oo-ui-buttonElement-button {
+  margin-left: 0;
+  border: 0;
   border-radius: 0;
+  padding: 0;
 }
 .oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-labelElement .oo-ui-labelElement-label {
   line-height: 3.4375em;
   text-align: center;
 }
-.oo-ui-messageDialog-actions .oo-ui-actionWidget:hover {
-  background-color: rgba(0, 0, 0, 0.05);
+.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-widget-enabled .oo-ui-buttonElement-button:hover {
+  background-color: #f8f9fa;
 }
-.oo-ui-messageDialog-actions .oo-ui-actionWidget:active {
-  background-color: rgba(0, 0, 0, 0.1);
+.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-widget-enabled .oo-ui-buttonElement-button:active {
+  background-color: #c8ccd1;
 }
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-progressive:hover,
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-constructive:hover {
-  background-color: rgba(8, 126, 204, 0.05);
+.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-widget-enabled .oo-ui-buttonElement-button:focus {
+  box-shadow: inset 0 0 0 1px #36c, 0 0 0 1px #36c;
+}
+.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-widget-enabled.oo-ui-flaggedElement-progressive .oo-ui-buttonElement-button:hover,
+.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive .oo-ui-buttonElement-button:hover {
+  background-color: #eaf3ff;
 }
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-progressive:active,
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-constructive:active {
+.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-widget-enabled.oo-ui-flaggedElement-progressive .oo-ui-buttonElement-button:active,
+.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive .oo-ui-buttonElement-button:active {
   background-color: rgba(8, 126, 204, 0.1);
 }
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-progressive .oo-ui-labelElement-label,
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-constructive .oo-ui-labelElement-label {
+.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-widget-enabled.oo-ui-flaggedElement-progressive .oo-ui-labelElement-label,
+.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-widget-enabled.oo-ui-flaggedElement-constructive .oo-ui-labelElement-label {
   font-weight: bold;
 }
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-destructive:hover {
-  background-color: rgba(212, 83, 83, 0.05);
+.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive .oo-ui-buttonElement-button:hover {
+  background-color: #fbe8e7;
 }
-.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-flaggedElement-destructive:active {
+.oo-ui-messageDialog-actions .oo-ui-actionWidget.oo-ui-widget-enabled.oo-ui-flaggedElement-destructive .oo-ui-buttonElement-button:active {
   background-color: rgba(212, 83, 83, 0.1);
 }
 .oo-ui-processDialog-location {
   background-color: rgba(255, 255, 255, 0.5);
   opacity: 0;
   -webkit-transition: opacity 250ms;
-     -moz-transition: opacity 250ms;
-          transition: opacity 250ms;
+  -moz-transition: opacity 250ms;
+  transition: opacity 250ms;
 }
 .oo-ui-windowManager-modal > .oo-ui-dialog > .oo-ui-window-frame {
   background-color: #fff;
   opacity: 0;
   -webkit-transform: scale(0.5);
-     -moz-transform: scale(0.5);
-      -ms-transform: scale(0.5);
-          transform: scale(0.5);
+  -moz-transform: scale(0.5);
+  -ms-transform: scale(0.5);
+  transform: scale(0.5);
   -webkit-transition: all 250ms;
-     -moz-transition: all 250ms;
-          transition: all 250ms;
+  -moz-transition: all 250ms;
+  transition: all 250ms;
 }
 .oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-setup {
   opacity: 1;
 .oo-ui-windowManager-modal > .oo-ui-dialog.oo-ui-window-ready > .oo-ui-window-frame {
   opacity: 1;
   -webkit-transform: scale(1);
-     -moz-transform: scale(1);
-      -ms-transform: scale(1);
-          transform: scale(1);
+  -moz-transform: scale(1);
+  -ms-transform: scale(1);
+  transform: scale(1);
 }
 .oo-ui-windowManager-modal.oo-ui-windowManager-floating > .oo-ui-dialog > .oo-ui-window-frame {
   top: 1em;
index 1cbec34..c955919 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.20.2
+ * OOjs UI v0.21.1
  * 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-30T20:34:37Z
+ * Date: 2017-04-18T23:32:49Z
  */
 ( function ( OO ) {
 
@@ -60,14 +60,6 @@ OO.ui.ActionWidget = function OoUiActionWidget( config ) {
 OO.inheritClass( OO.ui.ActionWidget, OO.ui.ButtonWidget );
 OO.mixinClass( OO.ui.ActionWidget, OO.ui.mixin.PendingElement );
 
-/* Events */
-
-/**
- * A resize event is emitted when the size of the widget changes.
- *
- * @event resize
- */
-
 /* Methods */
 
 /**
@@ -102,90 +94,6 @@ OO.ui.ActionWidget.prototype.getModes = function () {
        return this.modes.slice();
 };
 
-/**
- * Emit a resize event if the size has changed.
- *
- * @private
- * @chainable
- */
-OO.ui.ActionWidget.prototype.propagateResize = function () {
-       var width, height;
-
-       if ( this.isElementAttached() ) {
-               width = this.$element.width();
-               height = this.$element.height();
-
-               if ( width !== this.width || height !== this.height ) {
-                       this.width = width;
-                       this.height = height;
-                       this.emit( 'resizePrivate' );
-                       if ( this.emit( 'resize' ) ) {
-                               OO.ui.warnDeprecation( 'ActionWidget: resize event is deprecated. See T129162.' );
-                       }
-               }
-       }
-
-       return this;
-};
-
-/**
- * @inheritdoc
- */
-OO.ui.ActionWidget.prototype.setIcon = function () {
-       // Mixin method
-       OO.ui.mixin.IconElement.prototype.setIcon.apply( this, arguments );
-       this.propagateResize();
-
-       return this;
-};
-
-/**
- * @inheritdoc
- */
-OO.ui.ActionWidget.prototype.setLabel = function () {
-       // Mixin method
-       OO.ui.mixin.LabelElement.prototype.setLabel.apply( this, arguments );
-       this.propagateResize();
-
-       return this;
-};
-
-/**
- * @inheritdoc
- */
-OO.ui.ActionWidget.prototype.setFlags = function () {
-       // Mixin method
-       OO.ui.mixin.FlaggedElement.prototype.setFlags.apply( this, arguments );
-       this.propagateResize();
-
-       return this;
-};
-
-/**
- * @inheritdoc
- */
-OO.ui.ActionWidget.prototype.clearFlags = function () {
-       // Mixin method
-       OO.ui.mixin.FlaggedElement.prototype.clearFlags.apply( this, arguments );
-       this.propagateResize();
-
-       return this;
-};
-
-/**
- * Toggle the visibility of the action button.
- *
- * @param {boolean} [show] Show button, omit to toggle visibility
- * @chainable
- */
-OO.ui.ActionWidget.prototype.toggle = function () {
-       // Parent method
-       OO.ui.ActionWidget.parent.prototype.toggle.apply( this, arguments );
-       this.propagateResize();
-
-       return this;
-};
-
 /* eslint-disable no-unused-vars */
 /**
  * ActionSets manage the behavior of the {@link OO.ui.ActionWidget action widgets} that comprise them.
@@ -320,14 +228,6 @@ OO.ui.ActionSet.static.specialFlags = [ 'safe', 'primary' ];
  * @param {OO.ui.ActionWidget} action Action that was clicked
  */
 
-/**
- * @event resize
- *
- * A 'resize' event is emitted when an action widget is resized.
- *
- * @param {OO.ui.ActionWidget} action Action that was resized
- */
-
 /**
  * @event add
  *
@@ -566,11 +466,6 @@ OO.ui.ActionSet.prototype.add = function ( actions ) {
                        click: [ 'emit', 'click', action ],
                        toggle: [ 'onActionChange' ]
                } );
-               action.on( 'resizePrivate', function ( action ) {
-                       if ( this.emit( 'resize', action ) ) {
-                               OO.ui.warnDeprecation( 'ActionSet: resize event is deprecated. See T129162.' );
-                       }
-               }, [ action ], this );
                this.list.push( action );
        }
        this.organized = false;
@@ -2842,6 +2737,7 @@ OO.ui.MessageDialog.prototype.getActionProcess = function ( action ) {
  * @param {Object} [data] Dialog opening data
  * @param {jQuery|string|Function|null} [data.title] Description of the action being confirmed
  * @param {jQuery|string|Function|null} [data.message] Description of the action's consequence
+ * @param {string} [data.size] Symbolic name of the dialog size, see OO.ui.Window
  * @param {Object[]} [data.actions] List of OO.ui.ActionOptionWidget configuration options for each
  *   action item
  */
@@ -2857,6 +2753,7 @@ OO.ui.MessageDialog.prototype.getSetupProcess = function ( data ) {
                        this.message.setLabel(
                                data.message !== undefined ? data.message : this.constructor.static.message
                        );
+                       this.size = data.size !== undefined ? data.size : this.constructor.static.size;
                }, this );
 };
 
@@ -3408,6 +3305,8 @@ OO.ui.getWindowManager = function () {
  *         console.log( 'User closed the dialog.' );
  *     } );
  *
+ *     OO.ui.alert( 'Something larger happened!', { size: 'large' } );
+ *
  * @param {jQuery|string} text Message text to display
  * @param {Object} [options] Additional options, see OO.ui.MessageDialog#getSetupProcess
  * @return {jQuery.Promise} Promise resolved when the user closes the dialog
index 9dd3404..c194497 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <path d="M11 12h4V7h-4v5zm-5 2h9v-1H6v1zm0 2h9v-1H6v1zm0 2h9v-1H6v1zm4-9H6v1h4V9zm0 2H6v1h4v-1zm0-4H6v1h4V7zM4 5h13v16H7c-1.7 0-3-1.3-3-3V5z"/>
     <path d="M18 4v14h2V2H7v2" fill-rule="evenodd"/>
index b57dae2..40a9348 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <path d="M13 12H9V7h4v5zm5 2H9v-1h9v1zm0 2H9v-1h9v1zm0 2H9v-1h9v1zm-4-9h4v1h-4V9zm0 2h4v1h-4v-1zm0-4h4v1h-4V7zm6-2H7v16h10c1.7 0 3-1.3 3-3V5z"/>
     <path d="M6 4v14H4V2h13v2" fill-rule="evenodd"/>
index 884e55c..86b004f 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
     <path d="M11 12h4V7h-4v5zm-5 2h9v-1H6v1zm0 2h9v-1H6v1zm0 2h9v-1H6v1zm4-9H6v1h4V9zm0 2H6v1h4v-1zm0-4H6v1h4V7zM4 5h13v16H7c-1.7 0-3-1.3-3-3V5z"/>
     <path d="M18 4v14h2V2H7v2" fill-rule="evenodd"/>
index 599aa69..838655b 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
     <path d="M11 12h4V7h-4v5zm-5 2h9v-1H6v1zm0 2h9v-1H6v1zm0 2h9v-1H6v1zm4-9H6v1h4V9zm0 2H6v1h4v-1zm0-4H6v1h4V7zM4 5h13v16H7c-1.7 0-3-1.3-3-3V5z"/>
     <path d="M18 4v14h2V2H7v2" fill-rule="evenodd"/>
index 9dd3404..c194497 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <path d="M11 12h4V7h-4v5zm-5 2h9v-1H6v1zm0 2h9v-1H6v1zm0 2h9v-1H6v1zm4-9H6v1h4V9zm0 2H6v1h4v-1zm0-4H6v1h4V7zM4 5h13v16H7c-1.7 0-3-1.3-3-3V5z"/>
     <path d="M18 4v14h2V2H7v2" fill-rule="evenodd"/>
index 64b9181..e2793b5 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
     <path d="M13 12H9V7h4v5zm5 2H9v-1h9v1zm0 2H9v-1h9v1zm0 2H9v-1h9v1zm-4-9h4v1h-4V9zm0 2h4v1h-4v-1zm0-4h4v1h-4V7zm6-2H7v16h10c1.7 0 3-1.3 3-3V5z"/>
     <path d="M6 4v14H4V2h13v2" fill-rule="evenodd"/>
index 18799af..bf3d169 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
     <path d="M13 12H9V7h4v5zm5 2H9v-1h9v1zm0 2H9v-1h9v1zm0 2H9v-1h9v1zm-4-9h4v1h-4V9zm0 2h4v1h-4v-1zm0-4h4v1h-4V7zm6-2H7v16h10c1.7 0 3-1.3 3-3V5z"/>
     <path d="M6 4v14H4V2h13v2" fill-rule="evenodd"/>
index b57dae2..40a9348 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
     <path d="M13 12H9V7h4v5zm5 2H9v-1h9v1zm0 2H9v-1h9v1zm0 2H9v-1h9v1zm-4-9h4v1h-4V9zm0 2h4v1h-4v-1zm0-4h4v1h-4V7zm6-2H7v16h10c1.7 0 3-1.3 3-3V5z"/>
     <path d="M6 4v14H4V2h13v2" fill-rule="evenodd"/>
index 582adce..ae66af4 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-down-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-down-invert.png differ
index e194d0d..b5e6144 100644 (file)
@@ -1,6 +1,4 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12"><g fill="#fff">
-    <g id="down">
-        <path id="arrow" d="M1 4h10L6 9 1 4"/>
-    </g>
+       <path d="M11.05 3.996l-.965-1.053-4.035 3.86-3.947-3.86L1.05 3.996l5 5 5-5"/>
 </g></svg>
index af67c7a..34f5041 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-down.png and b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-down.png differ
index f5c76f3..d3e55d1 100644 (file)
@@ -1,6 +1,4 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
-    <g id="down">
-        <path id="arrow" d="M1 4h10L6 9 1 4"/>
-    </g>
+       <path d="M11.05 3.996l-.965-1.053-4.035 3.86-3.947-3.86L1.05 3.996l5 5 5-5"/>
 </svg>
index 05578be..68bf475 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-ltr-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-ltr-invert.png differ
index 9e0e569..78f4b51 100644 (file)
@@ -1,6 +1,4 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12"><g fill="#fff">
-    <g id="ltr">
-        <path id="arrow" d="M4 1v10l5-5-5-5"/>
-    </g>
+       <path d="M4.026 11l-1.052-.965L6.832 6 2.974 2.053 4.026 1l5 5-5 5"/>
 </g></svg>
index d7a4111..cadc38f 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-ltr.png and b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-ltr.png differ
index 059372d..e99855b 100644 (file)
@@ -1,6 +1,4 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
-    <g id="ltr">
-        <path id="arrow" d="M4 1v10l5-5-5-5"/>
-    </g>
+       <path d="M4.026 11l-1.052-.965L6.832 6 2.974 2.053 4.026 1l5 5-5 5"/>
 </svg>
index 9731658..fae56f1 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-rtl-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-rtl-invert.png differ
index d032b05..bc0ff6f 100644 (file)
@@ -1,6 +1,4 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12"><g fill="#fff">
-    <g id="rtl">
-        <path id="arrow" d="M8 11V1L3 6l5 5"/>
-    </g>
+       <path d="M7.974 11l1.052-.965L5.168 6l3.858-3.947L7.974 1l-5 5 5 5"/>
 </g></svg>
index afceed6..5a4c0b6 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-rtl.png and b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-rtl.png differ
index c6498e8..1647501 100644 (file)
@@ -1,6 +1,4 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
-    <g id="rtl">
-        <path id="arrow" d="M8 11V1L3 6l5 5"/>
-    </g>
+       <path d="M7.974 11l1.052-.965L5.168 6l3.858-3.947L7.974 1l-5 5 5 5"/>
 </svg>
index 218a700..56eeea4 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-up-invert.png and b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-up-invert.png differ
index 3b79abb..3c81ae5 100644 (file)
@@ -1,6 +1,4 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12"><g fill="#fff">
-    <g id="up">
-        <path id="arrow" d="M1 8h10L6 3 1 8"/>
-    </g>
+       <path d="M11 7.974l-.965 1.052L6 5.168 2.053 9.026 1 7.974l5-5 5 5"/>
 </g></svg>
index ee12d6e..672b7f3 100644 (file)
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-up.png and b/resources/lib/oojs-ui/themes/mediawiki/images/indicators/arrow-up.png differ
index 5eada07..ca93281 100644 (file)
@@ -1,6 +1,4 @@
 <?xml version="1.0" encoding="utf-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12">
-    <g id="up">
-        <path id="arrow" d="M1 8h10L6 3 1 8"/>
-    </g>
+       <path d="M11 7.974l-.965 1.052L6 5.168 2.053 9.026 1 7.974l5-5 5 5"/>
 </svg>
index df32417..1b99365 100644 (file)
@@ -6,18 +6,6 @@
                "invert": {
                        "color": "#fff",
                        "global": true
-               },
-               "progressive": {
-                       "color": "#36c"
-               },
-               "constructive": {
-                       "color": "#36c"
-               },
-               "destructive": {
-                       "color": "#d33"
-               },
-               "warning": {
-                       "color": "#ff5d00"
                }
        },
        "images": {
index 3857f99..f93051c 100644 (file)
@@ -1,18 +1,18 @@
 /*!
- * OOjs v1.1.10 optimised for jQuery
+ * OOjs v2.0.0 optimised for jQuery
  * https://www.mediawiki.org/wiki/OOjs
  *
- * Copyright 2011-2015 OOjs Team and other contributors.
+ * Copyright 2011-2017 OOjs Team and other contributors.
  * Released under the MIT license
- * http://oojs.mit-license.org
+ * https://oojs.mit-license.org
  *
- * Date: 2015-11-11T16:49:11Z
+ * Date: 2017-04-05T02:18:04Z
  */
 ( function ( global ) {
 
 'use strict';
 
-/*exported toString */
+/* exported toString */
 var
        /**
         * Namespace for all classes, static methods and static properties.
@@ -22,21 +22,7 @@ var
        oo = {},
        // Optimisation: Local reference to Object.prototype.hasOwnProperty
        hasOwn = oo.hasOwnProperty,
-       toString = oo.toString,
-       // Object.create() is impossible to fully polyfill, so don't require it
-       createObject = Object.create || ( function () {
-               // Reusable constructor function
-               function Empty() {}
-               return function ( prototype, properties ) {
-                       var obj;
-                       Empty.prototype = prototype;
-                       obj = new Empty();
-                       if ( properties && hasOwn.call( properties, 'constructor' ) ) {
-                               obj.constructor = properties.constructor.value;
-                       }
-                       return obj;
-               };
-       } )();
+       toString = oo.toString;
 
 /* Class Methods */
 
@@ -92,8 +78,11 @@ oo.initClass = function ( fn ) {
 oo.inheritClass = function ( targetFn, originFn ) {
        var targetConstructor;
 
+       if ( !originFn ) {
+               throw new Error( 'inheritClass: Origin is not a function (actually ' + originFn + ')' );
+       }
        if ( targetFn.prototype instanceof originFn ) {
-               throw new Error( 'Target already inherits from origin' );
+               throw new Error( 'inheritClass: Target already inherits from origin' );
        }
 
        targetConstructor = targetFn.prototype.constructor;
@@ -102,9 +91,10 @@ oo.inheritClass = function ( targetFn, originFn ) {
        // by IE 8 and below (bug 63303).
        // Provide .parent as alias for code supporting older browsers which
        // allows people to comply with their style guide.
+       // eslint-disable-next-line dot-notation
        targetFn[ 'super' ] = targetFn.parent = originFn;
 
-       targetFn.prototype = createObject( originFn.prototype, {
+       targetFn.prototype = Object.create( originFn.prototype, {
                // Restore constructor property of targetFn
                constructor: {
                        value: targetConstructor,
@@ -116,7 +106,7 @@ oo.inheritClass = function ( targetFn, originFn ) {
 
        // Extend static properties - always initialize both sides
        oo.initClass( originFn );
-       targetFn.static = createObject( originFn.static );
+       targetFn.static = Object.create( originFn.static );
 };
 
 /**
@@ -153,6 +143,10 @@ oo.inheritClass = function ( targetFn, originFn ) {
 oo.mixinClass = function ( targetFn, originFn ) {
        var key;
 
+       if ( !originFn ) {
+               throw new Error( 'mixinClass: Origin is not a function (actually ' + originFn + ')' );
+       }
+
        // Copy prototype properties
        for ( key in originFn.prototype ) {
                if ( key !== 'constructor' && hasOwn.call( originFn.prototype, key ) ) {
@@ -173,13 +167,26 @@ oo.mixinClass = function ( targetFn, originFn ) {
        }
 };
 
+/**
+ * Test whether one class is a subclass of another, without instantiating it.
+ *
+ * Every class is considered a subclass of Object and of itself.
+ *
+ * @param {Function} testFn The class to be tested
+ * @param {Function} baseFn The base class
+ * @return {boolean} Whether testFn is a subclass of baseFn (or equal to it)
+ */
+oo.isSubclass = function ( testFn, baseFn ) {
+       return testFn === baseFn || testFn.prototype instanceof baseFn;
+};
+
 /* Object Methods */
 
 /**
  * Get a deeply nested property of an object using variadic arguments, protecting against
  * undefined property errors.
  *
- * `quux = oo.getProp( obj, 'foo', 'bar', 'baz' );` is equivalent to `quux = obj.foo.bar.baz;`
+ * `quux = OO.getProp( obj, 'foo', 'bar', 'baz' );` is equivalent to `quux = obj.foo.bar.baz;`
  * except that the former protects against JS errors if one of the intermediate properties
  * is undefined. Instead of throwing an error, this function will return undefined in
  * that case.
@@ -218,7 +225,7 @@ oo.getProp = function ( obj ) {
 oo.setProp = function ( obj ) {
        var i,
                prop = obj;
-       if ( Object( obj ) !== obj ) {
+       if ( Object( obj ) !== obj || arguments.length < 2 ) {
                return;
        }
        for ( i = 1; i < arguments.length - 2; i++ ) {
@@ -233,6 +240,34 @@ oo.setProp = function ( obj ) {
        prop[ arguments[ arguments.length - 2 ] ] = arguments[ arguments.length - 1 ];
 };
 
+/**
+ * Delete a deeply nested property of an object using variadic arguments, protecting against
+ * undefined property errors, and deleting resulting empty objects.
+ *
+ * @param {Object} obj
+ * @param {...Mixed} [keys]
+ */
+oo.deleteProp = function ( obj ) {
+       var i,
+               prop = obj,
+               props = [ prop ];
+       if ( Object( obj ) !== obj || arguments.length < 2 ) {
+               return;
+       }
+       for ( i = 1; i < arguments.length - 1; i++ ) {
+               if ( prop[ arguments[ i ] ] === undefined || Object( prop[ arguments[ i ] ] ) !== prop[ arguments[ i ] ] ) {
+                       return;
+               }
+               prop = prop[ arguments[ i ] ];
+               props.push( prop );
+       }
+       delete prop[ arguments[ i ] ];
+       // Walk back through props removing any plain empty objects
+       while ( ( prop = props.pop() ) && oo.isPlainObject( prop ) && !Object.keys( prop ).length ) {
+               delete props[ props.length - 1 ][ arguments[ props.length ] ];
+       }
+};
+
 /**
  * Create a new object that is an instance of the same
  * constructor as the input, inherits from the same object
@@ -258,7 +293,7 @@ oo.setProp = function ( obj ) {
 oo.cloneObject = function ( origin ) {
        var key, r;
 
-       r = createObject( origin.constructor.prototype );
+       r = Object.create( origin.constructor.prototype );
 
        for ( key in origin ) {
                if ( hasOwn.call( origin, key ) ) {
@@ -314,7 +349,7 @@ oo.binarySearch = function ( arr, searchFunc, forInsertion ) {
                right = arr.length;
        while ( left < right ) {
                // Equivalent to Math.floor( ( left + right ) / 2 ) but much faster
-               /*jshint bitwise:false */
+               // eslint-disable-next-line no-bitwise
                mid = ( left + right ) >> 1;
                cmpResult = searchFunc( arr[ mid ] );
                if ( cmpResult < 0 ) {
@@ -479,10 +514,9 @@ oo.getHash.keySortReplacer = function ( key, val ) {
                        normalized[ keys[ i ] ] = val[ keys[ i ] ];
                }
                return normalized;
-
-       // Primitive values and arrays get stable hashes
-       // by default. Lets those be stringified as-is.
        } else {
+               // Primitive values and arrays get stable hashes
+               // by default. Lets those be stringified as-is.
                return val;
        }
 };
@@ -592,11 +626,11 @@ oo.simpleArrayDifference = function ( a, b ) {
        return simpleArrayCombine( a, b, false );
 };
 
-/*global $ */
+/* global $ */
 
 oo.isPlainObject = $.isPlainObject;
 
-/*global hasOwn */
+/* global hasOwn */
 
 ( function () {
 
@@ -1091,7 +1125,18 @@ oo.isPlainObject = $.isPlainObject;
         * Don't call this directly unless you know what you're doing.
         * Use #addItems instead.
         *
-        * @private
+        * This method can be extended in child classes to produce
+        * different behavior when an item is inserted. For example,
+        * inserted items may also be attached to the DOM or may
+        * interact with some other nodes in certain ways. Extending
+        * this method is allowed, but if overriden, the aggregation
+        * of events must be preserved, or behavior of emitted events
+        * will be broken.
+        *
+        * If you are extending this method, please make sure the
+        * parent method is called.
+        *
+        * @protected
         * @param {OO.EventEmitter} item Items to add
         * @param {number} index Index to add items at
         * @return {number} The index the item was added at
@@ -1297,7 +1342,7 @@ oo.SortedEmitterList.prototype.addItems = function ( items ) {
 
                // Insert item at the insertion index
                index = this.insertItem( items[ i ], insertionIndex );
-               this.emit( 'add', items[ i ], insertionIndex );
+               this.emit( 'add', items[ i ], index );
        }
 
        return this;
@@ -1325,7 +1370,7 @@ oo.SortedEmitterList.prototype.findInsertionIndex = function ( item ) {
 
 };
 
-/*global hasOwn */
+/* global hasOwn */
 
 /**
  * @class OO.Registry
@@ -1421,8 +1466,6 @@ oo.Registry.prototype.lookup = function ( name ) {
        }
 };
 
-/*global createObject */
-
 /**
  * @class OO.Factory
  * @extends OO.Registry
@@ -1431,7 +1474,7 @@ oo.Registry.prototype.lookup = function ( name ) {
  */
 oo.Factory = function OoFactory() {
        // Parent constructor
-       oo.Factory.parent.call( this );
+       oo.Factory.super.call( this );
 };
 
 /* Inheritance */
@@ -1468,7 +1511,7 @@ oo.Factory.prototype.register = function ( constructor ) {
        }
 
        // Parent method
-       oo.Factory.parent.prototype.register.call( this, name, constructor );
+       oo.Factory.super.prototype.register.call( this, name, constructor );
 };
 
 /**
@@ -1490,7 +1533,7 @@ oo.Factory.prototype.unregister = function ( constructor ) {
        }
 
        // Parent method
-       oo.Factory.parent.prototype.unregister.call( this, name );
+       oo.Factory.super.prototype.unregister.call( this, name );
 };
 
 /**
@@ -1523,12 +1566,12 @@ oo.Factory.prototype.create = function ( name ) {
        // the constructor's prototype (which also makes it an "instanceof" the constructor),
        // then invoke the constructor with the object as context, and return it (ignoring
        // the constructor's return value).
-       obj = createObject( constructor.prototype );
+       obj = Object.create( constructor.prototype );
        constructor.apply( obj, args );
        return obj;
 };
 
-/*jshint node:true */
+/* eslint-env node */
 if ( typeof module !== 'undefined' && module.exports ) {
        module.exports = oo;
 } else {
index c9834f0..f6a9c54 100644 (file)
@@ -20,7 +20,9 @@
                var editBox, scrollTop, $editForm;
 
                // Make sure edit summary does not exceed byte limit
-               $( '#wpSummary' ).byteLimit( 255 );
+               // TODO: Replace with this when $wgOOUIEditPage is removed:
+               // OO.ui.infuse( 'wpSummary' ).$input.byteLimit( 255 );
+               $( 'input#wpSummary, #wpSummary > input' ).byteLimit( 255 );
 
                // Restore the edit box scroll state following a preview operation,
                // and set up a form submission handler to remember this state.
index d228236..8287264 100644 (file)
        min-height: 5em;
 }
 
+/*
+ * Add a bit of margin space between the preview and the toolbar.
+ * This replaces the ugly <p><br /></p> we used to insert into the page source
+ */
+#wikiPreview.ontop {
+       margin-bottom: 1em;
+}
+
 /* Adjustments to edit form elements */
-.editCheckboxes {
+#editpage-copywarn {
+       font-size: 0.9em;
+}
+
+#wpSummary {
+       display: block;
+       width: 80%;
        margin-bottom: 1em;
 }
 
-.editCheckboxes input:first-child {
-       margin-left: 0;
+/* Adjustments to edit form elements (only when $wgOOUIEditPage is false) */
+.mw-editform-legacy .editCheckboxes {
+       margin-bottom: 1em;
 }
 
-.cancelLink {
-       margin-left: 0.5em;
+.mw-editform-legacy .editCheckboxes input:first-child {
+       margin-left: 0;
 }
 
-#editpage-copywarn {
-       font-size: 0.9em;
+.mw-editform-legacy .cancelLink {
+       margin-left: 0.5em;
 }
 
-input#wpSummary {
-       display: block;
+.mw-editform-legacy input#wpSummary {
        background-color: #fff;
        color: #000;
-       width: 80%;
        margin-top: 0;
-       margin-bottom: 1em;
        padding: 0.625em 0.546875em 0.546875em;
        border: 1px solid #a2a9b1;
        border-radius: 2px;
@@ -47,21 +59,43 @@ input#wpSummary {
        transition: border-color 200ms cubic-bezier( 0.39, 0.575, 0.565, 1 ), box-shadow 200ms cubic-bezier( 0.39, 0.575, 0.565, 1 );
 }
 
-input#wpSummary:focus,
-input#wpSummary:active {
+.mw-editform-legacy input#wpSummary:focus,
+.mw-editform-legacy input#wpSummary:active {
        outline: 0;
        border-color: #36c;
        box-shadow: inset 0 0 0 1px #36c;
 }
 
-.editButtons input:first-child {
+.mw-editform-legacy .editButtons input:first-child {
        margin-left: 0.1em;
 }
 
-/*
- * Add a bit of margin space between the preview and the toolbar.
- * This replaces the ugly <p><br /></p> we used to insert into the page source
- */
-#wikiPreview.ontop {
-       margin-bottom: 1em;
+/* Adjustments to edit form elements (only when $wgOOUIEditPage is true) */
+.mw-editform-ooui #editpage-copywarn {
+       line-height: 1.26;
+}
+
+.mw-editform-ooui #wpSummary {
+       max-width: none;
+}
+
+.mw-editform-ooui #wpSummaryLabel {
+       margin: 0;
+}
+
+.mw-editform-ooui .editCheckboxes .oo-ui-fieldLayout {
+       margin-right: 1em;
+}
+
+.mw-editform-ooui .editHelp {
+       margin-left: 0.5em;
+       vertical-align: middle;
+}
+
+.mw-editform-ooui .editHelp a {
+       font-weight: bold;
+}
+
+.mw-editform-ooui .editOptions {
+       border-radius: 0 0 2px 2px;
 }
index 0dffd7d..2933827 100644 (file)
        ],
        "khmer": [
                "ក", "ខ", "គ", "ឃ", "ង", "ច", "ឆ", "ជ", "ឈ", "ញ", "ដ", "ឋ", "ឌ", "ឍ", "ណ", "ត", "ថ", "ទ", "ធ", "ន", "ប", "ផ", "ព", "ភ", "ម", "យ", "រ", "ល", "វ", "ស", "ហ", "ឡ", "អ", "ឣ", "ឤ", "ឥ", "ឦ", "ឧ", "ឨ", "ឩ", "ឪ", "ឫ", "ឬ", "ឭ", "ឮ", "ឯ", "ឰ", "ឱ", "ឲ", "ឳ", "្", "឴", "឵", "ា", "ិ", "ី", "ឹ", "ឺ", "ុ", "ូ", "ួ", "ើ", "ឿ", "ៀ", "េ", "ែ", "ៃ", "ោ", "ៅ", "ំ", "ះ", "ៈ", "៉", "៊", "់", "៌", "៍", "៎", "៏", "័", "៑", "៓", "៝", "ៜ", "០", "១", "២", "៣", "៤", "៥", "៦", "៧", "៨", "៩", "៛", "។", "៕", "៖", "ៗ", "៘", "៙", "៚", "៰", "៱", "៲", "៳", "៴", "៵", "៶", "៷", "៸", "៹", "᧠", "᧡", "᧢", "᧣", "᧤", "᧥", "᧦", "᧧", "᧨", "᧩", "᧪", "᧫", "᧬", "᧭", "᧮", "᧯", "᧰", "᧱", "᧲", "᧳", "᧴", "᧵", "᧶", "᧷", "᧸", "᧹", "᧺", "᧻", "᧼", "᧽", "᧾", "᧿"
+       ],
+       "canadianaboriginal": [
+               "ᐁ", "ᐂ", "ᐃ", "ᐄ", "ᐅ", "ᐆ", "ᐇ", "ᐈ", "ᐉ", "ᐊ", "ᐋ", "ᐌ", "ᐍ", "ᐎ", "ᐏ", "ᐐ",
+               "ᐑ", "ᐒ", "ᐓ", "ᐔ", "ᐕ", "ᐖ", "ᐗ", "ᐘ", "ᐙ", "ᐚ", "ᐛ", "ᐜ", "ᐝ", "ᐞ", "ᐟ", "ᐠ",
+               "ᐡ", "ᐢ", "ᐣ", "ᐤ", "ᐥ", "ᐦ", "ᐧ", "ᐨ", "ᐩ", "ᐪ", "ᐫ", "ᐬ", "ᐭ", "ᐮ", "ᐯ", "ᐰ",
+               "ᐱ", "ᐲ", "ᐳ", "ᐴ", "ᐵ", "ᐶ", "ᐷ", "ᐸ", "ᐹ", "ᐺ", "ᐻ", "ᐼ", "ᐽ", "ᐾ", "ᐿ", "ᑀ",
+               "ᑁ", "ᑂ", "ᑃ", "ᑄ", "ᑅ", "ᑆ", "ᑇ", "ᑈ", "ᑉ", "ᑊ", "ᑋ", "ᑌ", "ᑍ", "ᑎ", "ᑏ", "ᑐ",
+               "ᑑ", "ᑒ", "ᑓ", "ᑔ", "ᑕ", "ᑖ", "ᑗ", "ᑘ", "ᑙ", "ᑚ", "ᑛ", "ᑜ", "ᑝ", "ᑞ", "ᑟ", "ᑠ",
+               "ᑡ", "ᑢ", "ᑣ", "ᑤ", "ᑥ", "ᑦ", "ᑧ", "ᑨ", "ᑩ", "ᑪ", "ᑫ", "ᑬ", "ᑭ", "ᑮ", "ᑯ", "ᑰ",
+               "ᑱ", "ᑲ", "ᑳ", "ᑴ", "ᑵ", "ᑶ", "ᑷ", "ᑸ", "ᑹ", "ᑺ", "ᑻ", "ᑼ", "ᑽ", "ᑾ", "ᑿ", "ᒀ",
+               "ᒁ", "ᒂ", "ᒃ", "ᒄ", "ᒅ", "ᒆ", "ᒇ", "ᒈ", "ᒉ", "ᒊ", "ᒋ", "ᒌ", "ᒍ", "ᒎ", "ᒏ", "ᒐ",
+               "ᒑ", "ᒒ", "ᒓ", "ᒔ", "ᒕ", "ᒖ", "ᒗ", "ᒘ", "ᒙ", "ᒚ", "ᒛ", "ᒜ", "ᒝ", "ᒞ", "ᒟ", "ᒠ",
+               "ᒡ", "ᒢ", "ᒣ", "ᒤ", "ᒥ", "ᒦ", "ᒧ", "ᒨ", "ᒩ", "ᒪ", "ᒫ", "ᒬ", "ᒭ", "ᒮ", "ᒯ", "ᒰ",
+               "ᒱ", "ᒲ", "ᒳ", "ᒴ", "ᒵ", "ᒶ", "ᒷ", "ᒸ", "ᒹ", "ᒺ", "ᒻ", "ᒼ", "ᒽ", "ᒾ", "ᒿ", "ᓀ",
+               "ᓁ", "ᓂ", "ᓃ", "ᓄ", "ᓅ", "ᓆ", "ᓇ", "ᓈ", "ᓉ", "ᓊ", "ᓋ", "ᓌ", "ᓍ", "ᓎ", "ᓏ", "ᓐ",
+               "ᓑ", "ᓒ", "ᓓ", "ᓔ", "ᓕ", "ᓖ", "ᓗ", "ᓘ", "ᓙ", "ᓚ", "ᓛ", "ᓜ", "ᓝ", "ᓞ", "ᓟ", "ᓠ",
+               "ᓡ", "ᓢ", "ᓣ", "ᓤ", "ᓥ", "ᓦ", "ᓧ", "ᓨ", "ᓩ", "ᓪ", "ᓫ", "ᓬ", "ᓭ", "ᓮ", "ᓯ", "ᓰ",
+               "ᓱ", "ᓲ", "ᓳ", "ᓴ", "ᓵ", "ᓶ", "ᓷ", "ᓸ", "ᓹ", "ᓺ", "ᓻ", "ᓼ", "ᓽ", "ᓾ", "ᓿ", "ᔀ",
+               "ᔁ", "ᔂ", "ᔃ", "ᔄ", "ᔅ", "ᔆ", "ᔇ", "ᔈ", "ᔉ", "ᔊ", "ᔋ", "ᔌ", "ᔍ", "ᔎ", "ᔏ", "ᔐ",
+               "ᔑ", "ᔒ", "ᔓ", "ᔔ", "ᔕ", "ᔖ", "ᔗ", "ᔘ", "ᔙ", "ᔚ", "ᔛ", "ᔜ", "ᔝ", "ᔞ", "ᔟ", "ᔠ",
+               "ᔡ", "ᔢ", "ᔣ", "ᔤ", "ᔥ", "ᔦ", "ᔧ", "ᔨ", "ᔩ", "ᔪ", "ᔫ", "ᔬ", "ᔭ", "ᔮ", "ᔯ", "ᔰ",
+               "ᔱ", "ᔲ", "ᔳ", "ᔴ", "ᔵ", "ᔶ", "ᔷ", "ᔸ", "ᔹ", "ᔺ", "ᔻ", "ᔼ", "ᔽ", "ᔾ", "ᔿ", "ᕀ",
+               "ᕁ", "ᕂ", "ᕃ", "ᕄ", "ᕅ", "ᕆ", "ᕇ", "ᕈ", "ᕉ", "ᕊ", "ᕋ", "ᕌ", "ᕍ", "ᕎ", "ᕏ", "ᕐ",
+               "ᕑ", "ᕒ", "ᕓ", "ᕔ", "ᕕ", "ᕖ", "ᕗ", "ᕘ", "ᕙ", "ᕚ", "ᕛ", "ᕜ", "ᕝ", "ᕞ", "ᕟ", "ᕠ",
+               "ᕡ", "ᕢ", "ᕣ", "ᕤ", "ᕥ", "ᕦ", "ᕧ", "ᕨ", "ᕩ", "ᕪ", "ᕫ", "ᕬ", "ᕭ", "ᕮ", "ᕯ", "ᕰ",
+               "ᕱ", "ᕲ", "ᕳ", "ᕴ", "ᕵ", "ᕶ", "ᕷ", "ᕸ", "ᕹ", "ᕺ", "ᕻ", "ᕼ", "ᕽ", "ᕾ", "ᕿ", "ᖀ",
+               "ᖁ", "ᖂ", "ᖃ", "ᖄ", "ᖅ", "ᖆ", "ᖇ", "ᖈ", "ᖉ", "ᖊ", "ᖋ", "ᖌ", "ᖍ", "ᖎ", "ᖏ", "ᖐ",
+               "ᖑ", "ᖒ", "ᖓ", "ᖔ", "ᖕ", "ᖖ", "ᖗ", "ᖘ", "ᖙ", "ᖚ", "ᖛ", "ᖜ", "ᖝ", "ᖞ", "ᖟ", "ᖠ",
+               "ᖡ", "ᖢ", "ᖣ", "ᖤ", "ᖥ", "ᖦ", "ᖧ", "ᖨ", "ᖩ", "ᖪ", "ᖫ", "ᖬ", "ᖭ", "ᖮ", "ᖯ", "ᖰ",
+               "ᖱ", "ᖲ", "ᖳ", "ᖴ", "ᖵ", "ᖶ", "ᖷ", "ᖸ", "ᖹ", "ᖺ", "ᖻ", "ᖼ", "ᖽ", "ᖾ", "ᖿ", "ᗀ",
+               "ᗁ", "ᗂ", "ᗃ", "ᗄ", "ᗅ", "ᗆ", "ᗇ", "ᗈ", "ᗉ", "ᗊ", "ᗋ", "ᗌ", "ᗍ", "ᗎ", "ᗏ", "ᗐ",
+               "ᗑ", "ᗒ", "ᗓ", "ᗔ", "ᗕ", "ᗖ", "ᗗ", "ᗘ", "ᗙ", "ᗚ", "ᗛ", "ᗜ", "ᗝ", "ᗞ", "ᗟ", "ᗠ",
+               "ᗡ", "ᗢ", "ᗣ", "ᗤ", "ᗥ", "ᗦ", "ᗧ", "ᗨ", "ᗩ", "ᗪ", "ᗫ", "ᗬ", "ᗭ", "ᗮ", "ᗯ", "ᗰ",
+               "ᗱ", "ᗲ", "ᗳ", "ᗴ", "ᗵ", "ᗶ", "ᗷ", "ᗸ", "ᗹ", "ᗺ", "ᗻ", "ᗼ", "ᗽ", "ᗾ", "ᗿ", "ᘀ",
+               "ᘁ", "ᘂ", "ᘃ", "ᘄ", "ᘅ", "ᘆ", "ᘇ", "ᘈ", "ᘉ", "ᘊ", "ᘋ", "ᘌ", "ᘍ", "ᘎ", "ᘏ", "ᘐ",
+               "ᘑ", "ᘒ", "ᘓ", "ᘔ", "ᘕ", "ᘖ", "ᘗ", "ᘘ", "ᘙ", "ᘚ", "ᘛ", "ᘜ", "ᘝ", "ᘞ", "ᘟ", "ᘠ",
+               "ᘡ", "ᘢ", "ᘣ", "ᘤ", "ᘥ", "ᘦ", "ᘧ", "ᘨ", "ᘩ", "ᘪ", "ᘫ", "ᘬ", "ᘭ", "ᘮ", "ᘯ", "ᘰ",
+               "ᘱ", "ᘲ", "ᘳ", "ᘴ", "ᘵ", "ᘶ", "ᘷ", "ᘸ", "ᘹ", "ᘺ", "ᘻ", "ᘼ", "ᘽ", "ᘾ", "ᘿ", "ᙀ",
+               "ᙁ", "ᙂ", "ᙃ", "ᙄ", "ᙅ", "ᙆ", "ᙇ", "ᙈ", "ᙉ", "ᙊ", "ᙋ", "ᙌ", "ᙍ", "ᙎ", "ᙏ", "ᙐ",
+               "ᙑ", "ᙒ", "ᙓ", "ᙔ", "ᙕ", "ᙖ", "ᙗ", "ᙘ", "ᙙ", "ᙚ", "ᙛ", "ᙜ", "ᙝ", "ᙞ", "ᙟ", "ᙠ",
+               "ᙡ", "ᙢ", "ᙣ", "ᙤ", "ᙥ", "ᙦ", "ᙧ", "ᙨ", "ᙩ", "ᙪ", "ᙫ", "ᙬ", "᙭", "᙮", "ᙯ", "ᙰ",
+               "ᙱ", "ᙲ", "ᙳ", "ᙴ", "ᙵ", "ᙶ"
        ]
 }
index e3e80d8..b4418e5 100644 (file)
@@ -121,7 +121,8 @@ img {
        margin: 0 !important; /* stylelint-disable-line declaration-no-important */
 }
 
-#toc {
+#toc,
+.toc {
        background-color: #f9f9f9;
        border: 1pt solid #aaa;
        padding: 5px;
index 8062849..6eccc05 100644 (file)
  */
 ( function ( mw, $ ) {
        var msg,
-               win = window,
-               ua = navigator.userAgent.toLowerCase(),
-               onloadFuncts = [],
                loadedScripts = {};
 
-       /**
-        * User-agent sniffing.
-        *
-        * @deprecated since 1.17 Use jquery.client instead
-        */
-
-       msg = 'Use feature detection or module jquery.client instead.';
-
-       mw.log.deprecate( win, 'clientPC', ua, msg );
-
-       // Ignored dummy values
-       mw.log.deprecate( win, 'is_gecko', false, msg );
-       mw.log.deprecate( win, 'is_chrome_mac', false, msg );
-       mw.log.deprecate( win, 'is_chrome', false, msg );
-       mw.log.deprecate( win, 'webkit_version', false, msg );
-       mw.log.deprecate( win, 'is_safari_win', false, msg );
-       mw.log.deprecate( win, 'is_safari', false, msg );
-       mw.log.deprecate( win, 'webkit_match', false, msg );
-       mw.log.deprecate( win, 'is_ff2', false, msg );
-       mw.log.deprecate( win, 'ff2_bugs', false, msg );
-       mw.log.deprecate( win, 'is_ff2_win', false, msg );
-       mw.log.deprecate( win, 'is_ff2_x11', false, msg );
-       mw.log.deprecate( win, 'opera95_bugs', false, msg );
-       mw.log.deprecate( win, 'opera7_bugs', false, msg );
-       mw.log.deprecate( win, 'opera6_bugs', false, msg );
-       mw.log.deprecate( win, 'is_opera_95', false, msg );
-       mw.log.deprecate( win, 'is_opera_preseven', false, msg );
-       mw.log.deprecate( win, 'is_opera', false, msg );
-       mw.log.deprecate( win, 'ie6_bugs', false, msg );
+       function wikiUrlencode( page ) {
+               return encodeURIComponent( String( page ) )
+                       .replace( /'/g, '%27' )
+                       .replace( /%20/g, '_' )
+                       // wfUrlencode replacements
+                       .replace( /%3B/g, ';' )
+                       .replace( /%40/g, '@' )
+                       .replace( /%24/g, '$' )
+                       .replace( /%21/g, '!' )
+                       .replace( /%2A/g, '*' )
+                       .replace( /%28/g, '(' )
+                       .replace( /%29/g, ')' )
+                       .replace( /%2C/g, ',' )
+                       .replace( /%2F/g, '/' )
+                       .replace( /%7E/g, '~' )
+                       .replace( /%3A/g, ':' );
+       }
 
        /**
-        * DOM utilities for handling of events, text nodes and selecting elements
-        *
         * @deprecated since 1.17 Use jQuery instead
         */
-       msg = 'Use jQuery instead.';
-
-       // Ignored dummy values
-       mw.log.deprecate( win, 'doneOnloadHook', undefined, msg );
-       mw.log.deprecate( win, 'onloadFuncts', [], msg );
-       mw.log.deprecate( win, 'runOnloadHook', $.noop, msg );
-       mw.log.deprecate( win, 'changeText', $.noop, msg );
-       mw.log.deprecate( win, 'killEvt', $.noop, msg );
-       mw.log.deprecate( win, 'addHandler', $.noop, msg );
-       mw.log.deprecate( win, 'hookEvent', $.noop, msg );
-       mw.log.deprecate( win, 'addClickHandler', $.noop, msg );
-       mw.log.deprecate( win, 'removeHandler', $.noop, msg );
-       mw.log.deprecate( win, 'getElementsByClassName', function () { return []; }, msg );
-       mw.log.deprecate( win, 'getInnerText', function () { return ''; }, msg );
-
-       // Run a function after the window onload event is fired
-       mw.log.deprecate( win, 'addOnloadHook', function ( hookFunct ) {
-               if ( onloadFuncts ) {
-                       onloadFuncts.push( hookFunct );
-               } else {
-                       // If func queue is gone the event has happened already,
-                       // run immediately instead of queueing.
-                       hookFunct();
-               }
-       }, msg );
-
-       $( win ).on( 'load', function () {
-               var i, functs;
-
-               // Don't run twice
-               if ( !onloadFuncts ) {
-                       return;
-               }
-
-               // Deference and clear onloadFuncts before running any
-               // hooks to make sure we don't miss any addOnloadHook
-               // calls.
-               functs = onloadFuncts.slice();
-               onloadFuncts = undefined;
-
-               // Execute the queued functions
-               for ( i = 0; i < functs.length; i++ ) {
-                       functs[ i ]();
-               }
-       } );
-
-       /**
-        * Toggle checkboxes with shift selection
-        *
-        * @deprecated since 1.17 Use jquery.checkboxShiftClick instead
-        */
-       msg = 'Use jquery.checkboxShiftClick instead.';
-       mw.log.deprecate( win, 'checkboxes', [], msg );
-       mw.log.deprecate( win, 'lastCheckbox', null, msg );
-       mw.log.deprecate( win, 'setupCheckboxShiftClick', $.noop, msg );
-       mw.log.deprecate( win, 'addCheckboxClickHandlers', $.noop, msg );
-       mw.log.deprecate( win, 'checkboxClickHandler', $.noop, msg );
-
-       /**
-        * Add a button to the default editor toolbar
-        *
-        * @deprecated since 1.17 Use mw.toolbar instead
-        */
-       mw.log.deprecate( win, 'mwEditButtons', [], 'Use mw.toolbar instead.' );
-       mw.log.deprecate( win, 'mwCustomEditButtons', [], 'Use mw.toolbar instead.' );
-
-       /**
-        * Spinner creation, injection and removal
-        *
-        * @deprecated since 1.18 Use jquery.spinner instead
-        */
-       mw.log.deprecate( win, 'injectSpinner', $.noop, 'Use jquery.spinner instead.' );
-       mw.log.deprecate( win, 'removeSpinner', $.noop, 'Use jquery.spinner instead.' );
-
-       /**
-        * Escape utilities
-        *
-        * @deprecated since 1.18 Use mw.html instead
-        */
-       mw.log.deprecate( win, 'escapeQuotes', $.noop, 'Use mw.html instead.' );
-       mw.log.deprecate( win, 'escapeQuotesHTML', $.noop, 'Use mw.html instead.' );
-
-       /**
-        * Display a message to the user
-        *
-        * @deprecated since 1.17 Use mediawiki.notify instead
-        * @param {string|HTMLElement} message To be put inside the message box
-        */
-       mw.log.deprecate( win, 'jsMsg', function ( message ) {
-               if ( !arguments.length || message === '' || message === null ) {
-                       return true;
-               }
-               if ( typeof message !== 'object' ) {
-                       message = $.parseHTML( message );
-               }
-               mw.notify( message, { autoHide: true, tag: 'legacy' } );
-               return true;
-       }, 'Use mediawiki.notify instead.' );
-
-       /**
-        * Misc. utilities
-        *
-        * @deprecated since 1.17 Use mediawiki.util or jquery.accessKeyLabel instead
-        */
-       msg = 'Use mediawiki.util instead.';
-       mw.log.deprecate( win, 'addPortletLink', mw.util.addPortletLink, msg );
-       mw.log.deprecate( win, 'appendCSS', mw.util.addCSS, msg );
-       msg = 'Use jquery.accessKeyLabel instead.';
-       mw.log.deprecate( win, 'tooltipAccessKeyPrefix', 'alt-', msg );
-       mw.log.deprecate( win, 'tooltipAccessKeyRegexp', /\[(alt-)?(.)\]$/, msg );
-       // mw.util.updateTooltipAccessKeys already generates a deprecation message.
-       win.updateTooltipAccessKeys = function () {
-               return mw.util.updateTooltipAccessKeys.apply( null, arguments );
-       };
+       mw.log.deprecate( window, 'addOnloadHook', function ( fn ) {
+               $( function () { fn(); } );
+       }, 'Use jQuery instead.' );
 
        /**
         * Wikipage import methods
        }
 
        function importScript( page ) {
-               var uri = mw.config.get( 'wgScript' ) + '?title=' +
-                       mw.util.wikiUrlencode( page ) +
+               var uri = mw.config.get( 'wgScript' ) + '?title=' + wikiUrlencode( page ) +
                        '&action=raw&ctype=text/javascript';
                return importScriptURI( uri );
        }
        }
 
        function importStylesheet( page ) {
-               var uri = mw.config.get( 'wgScript' ) + '?title=' +
-                       mw.util.wikiUrlencode( page ) +
+               var uri = mw.config.get( 'wgScript' ) + '?title=' + wikiUrlencode( page ) +
                        '&action=raw&ctype=text/css';
                return importStylesheetURI( uri );
        }
 
        msg = 'Use mw.loader instead.';
-       mw.log.deprecate( win, 'loadedScripts', loadedScripts, msg );
-       mw.log.deprecate( win, 'importScriptURI', importScriptURI, msg );
-       mw.log.deprecate( win, 'importStylesheetURI', importStylesheetURI, msg );
+       mw.log.deprecate( window, 'loadedScripts', loadedScripts, msg );
+       mw.log.deprecate( window, 'importScriptURI', importScriptURI, msg );
+       mw.log.deprecate( window, 'importStylesheetURI', importStylesheetURI, msg );
        // Not quite deprecated yet.
-       win.importScript = importScript;
-       win.importStylesheet = importStylesheet;
+       window.importScript = importScript;
+       window.importStylesheet = importStylesheet;
 
-       // Replace document.write/writeln with basic html parsing that appends
-       // to the <body> to avoid blanking pages. Added JavaScript will not run.
+       /**
+        * Replace document.write/writeln with basic html parsing that appends
+        * to the <body> to avoid blanking pages. Added JavaScript will not run.
+        *
+        * @deprecated since 1.26
+        */
        $.each( [ 'write', 'writeln' ], function ( idx, method ) {
                mw.log.deprecate( document, method, function () {
                        $( 'body' ).append( $.parseHTML( Array.prototype.join.call( arguments, '' ) ) );
index f04cc85..69210be 100644 (file)
         * @param {Array} filters Filter group definition
         */
        mw.rcfilters.dm.FiltersViewModel.prototype.initializeFilters = function ( filters ) {
-               var i, filterItem, selectedFilterNames, filterConflictResult, groupConflictResult, subsetNames,
+               var i, filterItem, filterConflictResult, groupConflictResult, subsetNames,
                        model = this,
                        items = [],
                        supersetMap = {},
                                groupConflictMap[ group ] = data.conflicts;
                        }
 
-                       selectedFilterNames = [];
                        for ( i = 0; i < data.filters.length; i++ ) {
                                data.filters[ i ].subset = data.filters[ i ].subset || [];
                                data.filters[ i ].subset = data.filters[ i ].subset.map( function ( el ) {
                                        // Store the default parameter state
                                        // For this group type, parameter values are direct
                                        model.defaultParams[ data.filters[ i ].name ] = Number( !!data.filters[ i ].default );
-                               } else if (
-                                       data.type === 'string_options' &&
-                                       data.filters[ i ].default
-                               ) {
-                                       selectedFilterNames.push( data.filters[ i ].name );
                                }
 
                                model.groups[ group ].addItems( filterItem );
                                items.push( filterItem );
                        }
 
-                       if ( data.type === 'string_options' ) {
+                       if ( data.type === 'string_options' && data.default ) {
                                // Store the default parameter group state
                                // For this group, the parameter is group name and value is the names
                                // of selected items
-                               model.defaultParams[ group ] = model.sanitizeStringOptionGroup( group, selectedFilterNames ).join( model.groups[ group ].getSeparator() );
+                               model.defaultParams[ group ] = model.sanitizeStringOptionGroup(
+                                       group,
+                                       data.default.split( model.groups[ group ].getSeparator() )
+                               ).join( model.groups[ group ].getSeparator() );
                        }
                } );
 
                                                        paramValues.length === model.groups[ group ].getItemCount()
                                                ) ?
                                                // All true (either because all values are written or the term 'all' is written)
-                                               // is the same as all filters set to false
-                                               false :
+                                               // is the same as all filters set to true
+                                               true :
                                                // Otherwise, the filter is selected only if it appears in the parameter values
                                                paramValues.indexOf( filterItem.getParamName() ) > -1;
                                }
         * Find items whose labels match the given string
         *
         * @param {string} query Search string
+        * @param {boolean} [returnFlat] Return a flat array. If false, the result
+        *  is an object whose keys are the group names and values are an array of
+        *  filters per group. If set to true, returns an array of filters regardless
+        *  of their groups.
         * @return {Object} An object of items to show
         *  arranged by their group names
         */
-       mw.rcfilters.dm.FiltersViewModel.prototype.findMatches = function ( query ) {
+       mw.rcfilters.dm.FiltersViewModel.prototype.findMatches = function ( query, returnFlat ) {
                var i,
                        groupTitle,
                        result = {},
+                       flatResult = [],
                        items = this.getItems();
 
                // Normalize so we can search strings regardless of case
                        if ( items[ i ].getLabel().toLowerCase().indexOf( query ) === 0 ) {
                                result[ items[ i ].getGroupName() ] = result[ items[ i ].getGroupName() ] || [];
                                result[ items[ i ].getGroupName() ].push( items[ i ] );
+                               flatResult.push( items[ i ] );
                        }
                }
 
                                ) {
                                        result[ items[ i ].getGroupName() ] = result[ items[ i ].getGroupName() ] || [];
                                        result[ items[ i ].getGroupName() ].push( items[ i ] );
+                                       flatResult.push( items[ i ] );
                                }
                        }
                }
 
-               return result;
+               return returnFlat ? flatResult : result;
        };
 
        /**
index b5b768f..669420c 100644 (file)
        mw.rcfilters.Controller.prototype.toggleFilterSelect = function ( filterName, isSelected ) {
                var filterItem = this.filtersModel.getItemByName( filterName );
 
+               if ( !filterItem ) {
+                       // If no filter was found, break
+                       return;
+               }
+
                isSelected = isSelected === undefined ? !filterItem.isSelected() : isSelected;
 
                if ( filterItem.isSelected() !== isSelected ) {
diff --git a/resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.CapsuleItemWidget.less b/resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.CapsuleItemWidget.less
deleted file mode 100644 (file)
index b16e84c..0000000
+++ /dev/null
@@ -1,75 +0,0 @@
-@import 'mw.rcfilters.mixins';
-
-.mw-rcfilters-ui-capsuleItemWidget {
-       background-color: #fff;
-       border-color: #979797;
-       color: #222;
-
-       // Background and color of the capsule widget need a bit
-       // more specificity to override ooui internals
-       &-muted.oo-ui-capsuleItemWidget.oo-ui-widget-enabled {
-               // Muted state
-               background-color: #eaecf0;
-               border-color: #c8ccd1;
-
-               .oo-ui-labelElement-label {
-                       color: #72777d;
-               }
-               .oo-ui-buttonWidget {
-                       opacity: @muted-opacity;
-               }
-       }
-
-       &-conflicted.oo-ui-capsuleItemWidget.oo-ui-widget-enabled {
-               background-color: #fee7e6; // Red90 AAA
-               border-color: #b32424; // Red30 AAA
-
-               .oo-ui-labelElement-label {
-                       color: #b32424;
-               }
-               .oo-ui-buttonWidget {
-                       opacity: @muted-opacity;
-               }
-       }
-
-       &-selected.oo-ui-capsuleItemWidget.oo-ui-widget-enabled {
-               background-color: #eaf3ff;
-               border-color: #36c;
-       }
-
-       &-popup-content {
-               padding: 0.5em;
-               color: #54595d;
-       }
-
-       &.oo-ui-labelElement .oo-ui-labelElement-label {
-               vertical-align: middle;
-               cursor: pointer;
-       }
-
-       &-highlight {
-               display: none;
-               padding-right: 0.5em;
-
-               &-highlighted {
-                       display: inline-block;
-
-               }
-
-               &[data-color='c1'] {
-                       .mw-rcfilters-mixin-circle( @highlight-c1, 10px, ~'0 0.5em 0 0' );
-               }
-               &[data-color='c2'] {
-                       .mw-rcfilters-mixin-circle( @highlight-c2, 10px, ~'0 0.5em 0 0' );
-               }
-               &[data-color='c3'] {
-                       .mw-rcfilters-mixin-circle( @highlight-c3, 10px, ~'0 0.5em 0 0' );
-               }
-               &[data-color='c4'] {
-                       .mw-rcfilters-mixin-circle( @highlight-c4, 10px, ~'0 0.5em 0 0' );
-               }
-               &[data-color='c5'] {
-                       .mw-rcfilters-mixin-circle( @highlight-c5, 10px, ~'0 0.5em 0 0' );
-               }
-       }
-}
index 402f0ad..3337a03 100644 (file)
                }
        }
 
+       ul {
+               // Each li's margin-left should be the width of the highlights
+               // element + the margin
+               margin-left: ~'calc( ( @{result-circle-diameter} + @{result-circle-margin} ) * 5 + @{result-circle-general-margin} )';
+       }
+
        &-highlighted {
                ul {
                        list-style: none;
-                       // Each li's margin-left should be the width of the highlights
-                       // element + the margin
-                       margin-left: ~'calc( ( @{result-circle-diameter} + @{result-circle-margin} ) * 5 + @{result-circle-general-margin} )';
 
                        li {
                                list-style: none;
diff --git a/resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.FilterCapsuleMultiselectWidget.less b/resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.FilterCapsuleMultiselectWidget.less
deleted file mode 100644 (file)
index b9dd3c1..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-.mw-rcfilters-ui-filterCapsuleMultiselectWidget {
-       max-width: none;
-
-       &.oo-ui-widget-enabled .oo-ui-capsuleMultiselectWidget-handle {
-               background-color: #f8f9fa;
-               border-radius: 2px 2px 0 0;
-               padding: 0.3em 0.6em 0.6em 0.6em;
-               margin-top: 1.6em;
-       }
-
-       .mw-rcfilters-ui-table {
-               margin-top: 0.3em;
-       }
-
-       &-wrapper-content-title {
-               font-weight: bold;
-               color: #54595d;
-       }
-
-       &-emptyFilters {
-               color: #72777d;
-       }
-
-       &-cell-filters {
-               width: 100%;
-       }
-       &-cell-reset {
-               text-align: right;
-               padding-left: 0.5em;
-       }
-}
diff --git a/resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.FilterFloatingMenuSelectWidget.less b/resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.FilterFloatingMenuSelectWidget.less
new file mode 100644 (file)
index 0000000..7602465
--- /dev/null
@@ -0,0 +1,30 @@
+@import 'mediawiki.mixins';
+
+.mw-rcfilters-ui-filterFloatingMenuSelectWidget {
+       z-index: auto;
+       max-width: 650px;
+
+       &.oo-ui-menuSelectWidget-invisible {
+               display: block;
+       }
+
+       &-noresults {
+               display: none;
+               padding: 0.5em;
+               color: #666;
+
+               .oo-ui-menuSelectWidget-invisible & {
+                       display: inline-block;
+               }
+       }
+
+       &-body {
+               max-height: 70vh;
+       }
+
+       &-footer {
+               background-color: #f8f9fa;
+               text-align: right;
+               padding: 0.5em;
+       }
+}
diff --git a/resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.FilterGroupWidget.less b/resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.FilterGroupWidget.less
deleted file mode 100644 (file)
index d774ad2..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-@import 'mediawiki.mixins';
-
-.mw-rcfilters-ui-filterGroupWidget {
-       padding-bottom: 0.5em;
-
-       &-header {
-               background: #eaecf0;
-               padding: 0.5em 0.75em;
-
-               &-title {
-                       // TODO: Unify colors with official design palette
-                       color: #555a5d;
-                       .box-sizing( border-box );
-                       display: inline-block;
-               }
-       }
-
-       &-whatsThisButton {
-               display: inline-block;
-               margin-left: 1.5em;
-
-               &.oo-ui-buttonElement {
-                       vertical-align: text-bottom;
-
-                       & > .oo-ui-buttonElement-button {
-                               font-weight: normal;
-                       }
-               }
-
-               &-popup-content {
-                       padding: 1em;
-
-                       &-header {
-                               font-weight: bold;
-                               margin-bottom: 1em;
-                       }
-
-                       &-link {
-                               margin: 1em 0;
-
-                       }
-
-                       .oo-ui-buttonElement-frameless.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
-                               margin-left: 0;
-                       }
-               }
-       }
-
-       &-active {
-               .mw-rcfilters-ui-filterGroupWidget-header-title {
-                       font-weight: bold;
-               }
-       }
-}
diff --git a/resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.FilterItemWidget.less b/resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.FilterItemWidget.less
deleted file mode 100644 (file)
index 3d63831..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-@import 'mediawiki.mixins';
-
-.mw-rcfilters-ui-filterItemWidget {
-       padding: 0 0.5em;
-       .box-sizing( border-box );
-
-       &:not( :last-child ) {
-               border-bottom: solid 1px #eaecf0; // Base 80 AAA
-       }
-
-       &:hover {
-               background-color: #fbfbfb;
-       }
-
-       .mw-rcfilters-ui-table {
-               padding-top: 0.5em;
-       }
-
-       &-muted {
-               background-color: #f8f9fa; // Base90 AAA
-               .mw-rcfilters-ui-filterItemWidget-label-title,
-               .mw-rcfilters-ui-filterItemWidget-label-desc {
-                       color: #54595d; // Base20 AAA
-               }
-       }
-
-       &-selected {
-               background-color: #eaf3ff; // Accent90 AAA
-       }
-
-       &-label {
-               &-title {
-                       font-weight: bold;
-                       font-size: 1.15em;
-                       color: #222;
-               }
-               &-desc {
-                       color: #464a4f;
-               }
-       }
-
-       &-filterCheckbox {
-               .oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline {
-                       // Override margin-top and -bottom rules from FieldLayout
-                       margin: 0 !important; /* stylelint-disable-line declaration-no-important */
-               }
-
-               .oo-ui-checkboxInputWidget {
-                       // Workaround for IE11 rendering issues. T162098
-                       display: block;
-               }
-       }
-
-       &-highlightButton {
-               width: 4em;
-               padding-left: 1em;
-       }
-}
diff --git a/resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.FilterMenuHeaderWidget.less b/resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.FilterMenuHeaderWidget.less
new file mode 100644 (file)
index 0000000..4914dd9
--- /dev/null
@@ -0,0 +1,29 @@
+@import 'mediawiki.mixins';
+
+.mw-rcfilters-ui-filterMenuHeaderWidget {
+       &-title {
+               font-size: 1.2em;
+               padding: 0.75em 0.5em;
+               // TODO: Unify colors with official design palette
+               color: #54595d;
+       }
+
+       &-header {
+               border-bottom: 1px solid #c8ccd1;
+               background: #f8f9fa;
+
+               &-highlight {
+                       width: 1em;
+                       vertical-align: middle;
+                       // Using the same padding that the filter item
+                       // uses, so the button is aligned with the highlight
+                       // buttons for the filters
+                       padding-right: 0.5em;
+               }
+
+               &-title {
+                       width: 100%;
+                       vertical-align: middle;
+               }
+       }
+}
diff --git a/resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.FilterMenuOptionWidget.less b/resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.FilterMenuOptionWidget.less
new file mode 100644 (file)
index 0000000..9d78f85
--- /dev/null
@@ -0,0 +1,59 @@
+@import 'mediawiki.mixins';
+
+.mw-rcfilters-ui-filterMenuOptionWidget {
+       padding: 0 0.5em;
+       .box-sizing( border-box );
+
+       &:not( :last-child ) {
+               border-bottom: solid 1px #eaecf0; // Base 80 AAA
+       }
+
+       &:hover {
+               background-color: #fbfbfb;
+       }
+
+       .mw-rcfilters-ui-table {
+               padding-top: 0.5em;
+       }
+
+       &-muted {
+               background-color: #f8f9fa; // Base90 AAA
+               .mw-rcfilters-ui-filterMenuOptionWidget-label-title,
+               .mw-rcfilters-ui-filterMenuOptionWidget-label-desc {
+                       color: #54595d; // Base20 AAA
+               }
+       }
+
+       &.oo-ui-optionWidget-selected {
+               background-color: #eaf3ff; // Accent90 AAA
+       }
+
+       &-label {
+               &-title {
+                       font-weight: bold;
+                       font-size: 1.15em;
+                       color: #222;
+               }
+               &-desc {
+                       color: #464a4f;
+                       white-space: normal;
+               }
+       }
+
+       &-filterCheckbox {
+               .oo-ui-fieldLayout.oo-ui-fieldLayout-align-inline {
+                       // Override margin-top and -bottom rules from FieldLayout
+                       margin: 0 !important; /* stylelint-disable-line declaration-no-important */
+               }
+
+               .oo-ui-checkboxInputWidget {
+                       // Workaround for IE11 rendering issues. T162098
+                       display: block;
+               }
+       }
+
+       &-highlightButton {
+               width: 4em;
+               padding-left: 1em;
+       }
+}
diff --git a/resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.FilterMenuSectionOptionWidget.less b/resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.FilterMenuSectionOptionWidget.less
new file mode 100644 (file)
index 0000000..964f27e
--- /dev/null
@@ -0,0 +1,60 @@
+@import 'mediawiki.mixins';
+
+.mw-rcfilters-ui-filterMenuSectionOptionWidget {
+       background: #eaecf0;
+       padding-bottom: 0.7em;
+
+       &-header {
+               padding: 0 0.75em;
+               // Use a high specificity to override OOUI
+               .oo-ui-optionWidget.oo-ui-labelElement &-title.oo-ui-labelElement-label {
+                       // TODO: Unify colors with official design palette
+                       color: #555a5d;
+                       .box-sizing( border-box );
+                       display: inline-block;
+                       line-height: normal;
+               }
+       }
+
+       &-whatsThisButton {
+               margin-left: 1.5em;
+               &.oo-ui-buttonElement {
+                       vertical-align: text-bottom;
+
+                       & > .oo-ui-buttonElement-button {
+                               font-weight: normal;
+                               // Override OOUI's definitions for button
+                               border-color: transparent;
+                               padding: 0;
+
+                               &:focus {
+                                       box-shadow: none;
+                                       outline: 0;
+                               }
+                       }
+               }
+
+               &-popup-content {
+                       padding: 1em;
+
+                       &-header {
+                               font-weight: bold;
+                               margin-bottom: 1em;
+                       }
+
+                       &-link {
+                               margin: 1em 0;
+                       }
+
+                       .oo-ui-buttonElement-frameless.oo-ui-labelElement > .oo-ui-buttonElement-button > .oo-ui-labelElement-label {
+                               margin-left: 0;
+                       }
+               }
+       }
+
+       &-active {
+               .mw-rcfilters-ui-filterMenuSectionOptionWidget-header-title {
+                       font-weight: bold;
+               }
+       }
+}
diff --git a/resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.FilterTagItemWidget.less b/resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.FilterTagItemWidget.less
new file mode 100644 (file)
index 0000000..c82903e
--- /dev/null
@@ -0,0 +1,87 @@
+@import 'mw.rcfilters.mixins';
+
+.mw-rcfilters-ui-filterTagItemWidget {
+       background-color: #fff;
+       border-color: #979797;
+       color: #222;
+
+       // Background and color of the capsule widget need a bit
+       // more specificity to override ooui internals
+       &-muted.oo-ui-tagItemWidget.oo-ui-widget-enabled {
+               // Muted state
+               background-color: #eaecf0;
+               border-color: #c8ccd1;
+
+               .oo-ui-labelElement-label {
+                       color: #72777d;
+               }
+               .oo-ui-buttonWidget {
+                       opacity: @muted-opacity;
+               }
+       }
+
+       &-conflicted.oo-ui-tagItemWidget.oo-ui-widget-enabled {
+               background-color: #fee7e6; // Red90 AAA
+               border-color: #b32424; // Red30 AAA
+
+               .oo-ui-labelElement-label {
+                       color: #b32424;
+               }
+               .oo-ui-buttonWidget {
+                       opacity: @muted-opacity;
+               }
+       }
+
+       &-selected.oo-ui-tagItemWidget.oo-ui-widget-enabled {
+               background-color: #eaf3ff;
+               border-color: #36c;
+       }
+
+       &-popup-content {
+               padding: 0.5em;
+               color: #54595d;
+       }
+
+       &.oo-ui-labelElement .oo-ui-labelElement-label {
+               vertical-align: middle;
+               cursor: pointer;
+       }
+
+       &-highlight {
+               display: none;
+               margin-right: 0.5em;
+               height: 100%;
+               width: 10px;
+
+               &-highlighted {
+                       display: inline-block;
+               }
+
+               &:before {
+                       content: '';
+                       position: absolute;
+                       display: block;
+                       top: 50%;
+               }
+
+               &[data-color='c1']:before {
+                       .mw-rcfilters-mixin-circle( @highlight-c1, 10px, ~'-5px 0.5em 0 0' );
+               }
+
+               &[data-color='c2']:before {
+                       .mw-rcfilters-mixin-circle( @highlight-c2, 10px, ~'-5px 0.5em 0 0' );
+               }
+
+               &[data-color='c3']:before {
+                       .mw-rcfilters-mixin-circle( @highlight-c3, 10px, ~'-5px 0.5em 0 0' );
+               }
+
+               &[data-color='c4']:before {
+                       .mw-rcfilters-mixin-circle( @highlight-c4, 10px, ~'-5px 0.5em 0 0' );
+               }
+
+               &[data-color='c5']:before {
+                       .mw-rcfilters-mixin-circle( @highlight-c5, 10px, ~'-5px 0.5em 0 0' );
+               }
+       }
+}
diff --git a/resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.FilterTagMultiselectWidget.less b/resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.FilterTagMultiselectWidget.less
new file mode 100644 (file)
index 0000000..f1b6871
--- /dev/null
@@ -0,0 +1,39 @@
+.mw-rcfilters-ui-filterTagMultiselectWidget {
+       max-width: none;
+
+       .oo-ui-tagMultiselectWidget-input input {
+               // Make sure this uses the interface direction, not the content direction
+               direction: ltr;
+       }
+
+       &.oo-ui-widget-enabled .oo-ui-tagMultiselectWidget-handle {
+               border: 1px solid #a2a9b1;
+               border-bottom: 0;
+               background-color: #f8f9fa;
+               border-radius: 2px 2px 0 0;
+               padding: 0.3em 0.6em 0.6em 0.6em;
+               margin-top: 1.6em;
+       }
+
+       .mw-rcfilters-ui-table {
+               margin-top: 0.3em;
+       }
+
+       &-wrapper-content-title {
+               font-weight: bold;
+               color: #54595d;
+       }
+
+       &-emptyFilters {
+               color: #72777d;
+       }
+
+       &-cell-filters {
+               width: 100%;
+       }
+
+       &-cell-reset {
+               text-align: right;
+               padding-left: 0.5em;
+       }
+}
index b22abc6..dc8b013 100644 (file)
@@ -2,31 +2,4 @@
        width: 100%;
        // Make sure this uses the interface direction, not the content direction
        direction: ltr;
-
-       &-popup {
-               margin-top: 1px;
-               max-width: 650px;
-
-               .oo-ui-popupWidget-body {
-                       max-height: 70vh;
-               }
-
-               .oo-ui-popupWidget-footer {
-                       background-color: #f8f9fa;
-                       text-align: right;
-                       padding: 0.5em;
-               }
-       }
-
-       &-search {
-               max-width: none;
-               margin-top: -1px;
-
-               input {
-                       // We need to reiterate the directionality
-                       // for the input as well to literally override
-                       // a MediaWiki CSS rule that turns it 'ltr'
-                       direction: ltr;
-               }
-       }
 }
diff --git a/resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.FiltersListWidget.less b/resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.FiltersListWidget.less
deleted file mode 100644 (file)
index cb87989..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-.mw-rcfilters-ui-filtersListWidget {
-       &-title {
-               font-size: 1.2em;
-               padding: 0.75em 0.5em;
-               // TODO: Unify colors with official design palette
-               color: #54595d;
-       }
-
-       &-header {
-               border-bottom: 1px solid #c8ccd1;
-               background: #f8f9fa;
-               overflow: hidden;
-
-               &-highlight {
-                       width: 1em;
-                       vertical-align: middle;
-                       // Using the same padding that the filter item
-                       // uses, so the button is aligned with the highlight
-                       // buttons for the filters
-                       padding-right: 0.5em;
-               }
-
-               &-title {
-                       width: 100%;
-                       vertical-align: middle;
-               }
-       }
-
-       &-noresults {
-               padding: 0.5em;
-               // TODO: Unify colors with official design palette
-               color: #666;
-       }
-}
index 1ef49e2..3060f25 100644 (file)
@@ -11,9 +11,9 @@
 
 // Result list circle indicators
 // Defined and used in mw.rcfilters.ui.ChangesListWrapperWidget.less
-@result-circle-margin: 0.1em;
+@result-circle-margin: 3px;
 @result-circle-general-margin: 0.5em;
 // In these small sizes, 'em' appears
 // squished and inconsistent.
 // Pixels are better for this use case:
-@result-circle-diameter: 5px;
+@result-circle-diameter: 6px;
diff --git a/resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.CapsuleItemWidget.js b/resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.CapsuleItemWidget.js
deleted file mode 100644 (file)
index 20eff8b..0000000
+++ /dev/null
@@ -1,205 +0,0 @@
-( function ( mw, $ ) {
-       /**
-        * Extend OOUI's CapsuleItemWidget to also display a popup on hover.
-        *
-        * @class
-        * @extends OO.ui.CapsuleItemWidget
-        * @mixins OO.ui.mixin.PopupElement
-        *
-        * @constructor
-        * @param {mw.rcfilters.Controller} controller
-        * @param {mw.rcfilters.dm.FilterItem} model Item model
-        * @param {Object} config Configuration object
-        * @cfg {jQuery} [$overlay] A jQuery object serving as overlay for popups
-        */
-       mw.rcfilters.ui.CapsuleItemWidget = function MwRcfiltersUiCapsuleItemWidget( controller, model, config ) {
-               // Configuration initialization
-               config = config || {};
-
-               this.controller = controller;
-               this.model = model;
-               this.popupLabel = new OO.ui.LabelWidget();
-               this.$overlay = config.$overlay || this.$element;
-               this.positioned = false;
-               this.popupTimeoutShow = null;
-               this.popupTimeoutHide = null;
-
-               // Parent constructor
-               mw.rcfilters.ui.CapsuleItemWidget.parent.call( this, $.extend( {
-                       data: this.model.getName(),
-                       label: this.model.getLabel()
-               }, config ) );
-
-               // Mixin constructors
-               OO.ui.mixin.PopupElement.call( this, $.extend( {
-                       popup: {
-                               padded: false,
-                               align: 'center',
-                               position: 'above',
-                               $content: $( '<div>' )
-                                       .addClass( 'mw-rcfilters-ui-capsuleItemWidget-popup-content' )
-                                       .append( this.popupLabel.$element ),
-                               $floatableContainer: this.$element,
-                               classes: [ 'mw-rcfilters-ui-capsuleItemWidget-popup' ]
-                       }
-               }, config ) );
-
-               this.$highlight = $( '<div>' )
-                       .addClass( 'mw-rcfilters-ui-capsuleItemWidget-highlight' );
-
-               // Events
-               this.model.connect( this, { update: 'onModelUpdate' } );
-
-               // Initialization
-               this.$overlay.append( this.popup.$element );
-               this.$element
-                       .prepend( this.$highlight )
-                       .attr( 'aria-haspopup', 'true' )
-                       .addClass( 'mw-rcfilters-ui-capsuleItemWidget' )
-                       .on( 'mousedown', this.onMouseDown.bind( this ) )
-                       .on( 'mouseenter', this.onMouseEnter.bind( this ) )
-                       .on( 'mouseleave', this.onMouseLeave.bind( this ) );
-
-               this.setCurrentMuteState();
-               this.setHighlightColor();
-       };
-
-       OO.inheritClass( mw.rcfilters.ui.CapsuleItemWidget, OO.ui.CapsuleItemWidget );
-       OO.mixinClass( mw.rcfilters.ui.CapsuleItemWidget, OO.ui.mixin.PopupElement );
-
-       /**
-        * Respond to model update event
-        */
-       mw.rcfilters.ui.CapsuleItemWidget.prototype.onModelUpdate = function () {
-               this.setCurrentMuteState();
-
-               this.setHighlightColor();
-       };
-
-       /**
-        * Override mousedown event to prevent its propagation to the parent,
-        * since the parent (the multiselect widget) focuses the popup when its
-        * mousedown event is fired.
-        *
-        * @param {jQuery.Event} e Event
-        */
-       mw.rcfilters.ui.CapsuleItemWidget.prototype.onMouseDown = function ( e ) {
-               e.stopPropagation();
-       };
-
-       /**
-        * Emit a click event when the capsule is clicked so we can aggregate this
-        * in the parent (the capsule)
-        */
-       mw.rcfilters.ui.CapsuleItemWidget.prototype.onClick = function () {
-               this.emit( 'click' );
-       };
-
-       /**
-        * Override the event listening to the item close button click
-        */
-       mw.rcfilters.ui.CapsuleItemWidget.prototype.onCloseClick = function () {
-               var element = this.getElementGroup();
-
-               if ( element && $.isFunction( element.removeItems ) ) {
-                       element.removeItems( [ this ] );
-               }
-
-               // Respond to user removing the filter
-               this.controller.clearFilter( this.model.getName() );
-       };
-
-       mw.rcfilters.ui.CapsuleItemWidget.prototype.setHighlightColor = function () {
-               var selectedColor = this.model.isHighlightEnabled() ? this.model.getHighlightColor() : null;
-
-               this.$highlight
-                       .attr( 'data-color', selectedColor )
-                       .toggleClass(
-                               'mw-rcfilters-ui-capsuleItemWidget-highlight-highlighted',
-                               !!selectedColor
-                       );
-       };
-
-       /**
-        * Set the current mute state for this item
-        */
-       mw.rcfilters.ui.CapsuleItemWidget.prototype.setCurrentMuteState = function () {
-               this.$element
-                       .toggleClass(
-                               'mw-rcfilters-ui-capsuleItemWidget-muted',
-                               !this.model.isSelected() ||
-                               this.model.isIncluded() ||
-                               this.model.isFullyCovered()
-                       )
-                       .toggleClass(
-                               'mw-rcfilters-ui-capsuleItemWidget-conflicted',
-                               this.model.isSelected() && this.model.isConflicted()
-                       );
-       };
-
-       /**
-        * Respond to mouse enter event
-        */
-       mw.rcfilters.ui.CapsuleItemWidget.prototype.onMouseEnter = function () {
-               var labelText = this.model.getStateMessage();
-
-               if ( labelText ) {
-                       this.popupLabel.setLabel( labelText );
-
-                       if ( !this.positioned ) {
-                               // Recalculate anchor position to be center of the capsule item
-                               this.popup.$anchor.css( 'margin-left', ( this.$element.width() / 2 ) );
-                               this.positioned = true;
-                       }
-
-                       // Set timeout for the popup to show
-                       this.popupTimeoutShow = setTimeout( function () {
-                               this.popup.toggle( true );
-                       }.bind( this ), 500 );
-
-                       // Cancel the hide timeout
-                       clearTimeout( this.popupTimeoutHide );
-                       this.popupTimeoutHide = null;
-               }
-       };
-
-       /**
-        * Respond to mouse leave event
-        */
-       mw.rcfilters.ui.CapsuleItemWidget.prototype.onMouseLeave = function () {
-               this.popupTimeoutHide = setTimeout( function () {
-                       this.popup.toggle( false );
-               }.bind( this ), 250 );
-
-               // Clear the show timeout
-               clearTimeout( this.popupTimeoutShow );
-               this.popupTimeoutShow = null;
-       };
-
-       /**
-        * Set selected state on this widget
-        *
-        * @param {boolean} [isSelected] Widget is selected
-        */
-       mw.rcfilters.ui.CapsuleItemWidget.prototype.toggleSelected = function ( isSelected ) {
-               isSelected = isSelected !== undefined ? isSelected : !this.selected;
-
-               if ( this.selected !== isSelected ) {
-                       this.selected = isSelected;
-
-                       this.$element.toggleClass( 'mw-rcfilters-ui-capsuleItemWidget-selected', this.selected );
-               }
-       };
-
-       /**
-        * Remove and destroy external elements of this widget
-        */
-       mw.rcfilters.ui.CapsuleItemWidget.prototype.destroy = function () {
-               // Destroy the popup
-               this.popup.$element.detach();
-
-               // Disconnect events
-               this.model.disconnect( this );
-               this.closeButton.disconnect( this );
-       };
-}( mediaWiki, jQuery ) );
index c7e6961..f4a1807 100644 (file)
                                                .prop( 'data-color', 'none' )
                                );
 
+               if ( $( '.mw-rcfilters-ui-changesListWrapperWidget-highlights' ).length ) {
+                       // Already set up
+                       return;
+               }
+
                mw.rcfilters.HighlightColors.forEach( function ( color ) {
                        $highlights.append(
                                $( '<div>' )
index 86b3b11..9fd4593 100644 (file)
                mw.rcfilters.ui.CheckboxInputWidget.parent.call( this, config );
 
                // Event
-               this.$input.on( 'change', this.onUserChange.bind( this ) );
+               this.$input
+                       // HACK: This widget just pretends to be a checkbox for visual purposes.
+                       // In reality, all actions - setting to true or false, etc - are
+                       // decided by the model, and executed by the controller. This means
+                       // that we want to let the controller and model make the decision
+                       // of whether to check/uncheck this checkboxInputWidget, and for that,
+                       // we have to bypass the browser action that checks/unchecks it during
+                       // click.
+                       .on( 'click', false )
+                       .on( 'change', this.onUserChange.bind( this ) );
        };
 
        /* Initialization */
 
        /* Methods */
 
+       /**
+        * @inheritdoc
+        */
+       mw.rcfilters.ui.CheckboxInputWidget.prototype.onEdit = function () {
+               // Similarly to preventing defaults in 'click' event, we want
+               // to prevent this widget from deciding anything about its own
+               // state; it emits a change event and the model and controller
+               // make a decision about what its select state is.
+               // onEdit has a widget.$input.prop( 'checked' ) inside a setTimeout()
+               // so we really want to prevent that from messing with what
+               // the model decides the state of the widget is.
+       };
+
        /**
         * Respond to checkbox change by a user and emit 'userChange'.
         */
diff --git a/resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.FilterCapsuleMultiselectWidget.js b/resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.FilterCapsuleMultiselectWidget.js
deleted file mode 100644 (file)
index f4f460d..0000000
+++ /dev/null
@@ -1,342 +0,0 @@
-( function ( mw, $ ) {
-       /**
-        * Filter-specific CapsuleMultiselectWidget
-        *
-        * @class
-        * @extends OO.ui.CapsuleMultiselectWidget
-        *
-        * @constructor
-        * @param {mw.rcfilters.Controller} controller RCFilters controller
-        * @param {mw.rcfilters.dm.FiltersViewModel} model RCFilters view model
-        * @param {OO.ui.InputWidget} filterInput A filter input that focuses the capsule widget
-        * @param {Object} config Configuration object
-        * @cfg {jQuery} [$overlay] A jQuery object serving as overlay for popups
-        */
-       mw.rcfilters.ui.FilterCapsuleMultiselectWidget = function MwRcfiltersUiFilterCapsuleMultiselectWidget( controller, model, filterInput, config ) {
-               var title = new OO.ui.LabelWidget( {
-                               label: mw.msg( 'rcfilters-activefilters' ),
-                               classes: [ 'mw-rcfilters-ui-filterCapsuleMultiselectWidget-wrapper-content-title' ]
-                       } ),
-                       $contentWrapper = $( '<div>' )
-                               .addClass( 'mw-rcfilters-ui-filterCapsuleMultiselectWidget-wrapper' );
-
-               this.$overlay = config.$overlay || this.$element;
-
-               // Parent
-               mw.rcfilters.ui.FilterCapsuleMultiselectWidget.parent.call( this, $.extend( true, {
-                       popup: {
-                               $autoCloseIgnore: filterInput.$element.add( this.$overlay ),
-                               $floatableContainer: filterInput.$element
-                       }
-               }, config ) );
-
-               this.controller = controller;
-               this.model = model;
-               this.filterInput = filterInput;
-               this.isSelecting = false;
-               this.selected = null;
-
-               this.resetButton = new OO.ui.ButtonWidget( {
-                       framed: false,
-                       classes: [ 'mw-rcfilters-ui-filterCapsuleMultiselectWidget-resetButton' ]
-               } );
-
-               this.emptyFilterMessage = new OO.ui.LabelWidget( {
-                       label: mw.msg( 'rcfilters-empty-filter' ),
-                       classes: [ 'mw-rcfilters-ui-filterCapsuleMultiselectWidget-emptyFilters' ]
-               } );
-               this.$content.append( this.emptyFilterMessage.$element );
-
-               // Events
-               this.resetButton.connect( this, { click: 'onResetButtonClick' } );
-               this.resetButton.$element.on( 'mousedown', this.onResetButtonMouseDown.bind( this ) );
-               this.model.connect( this, {
-                       itemUpdate: 'onModelItemUpdate',
-                       highlightChange: 'onModelHighlightChange'
-               } );
-               this.aggregate( { click: 'capsuleItemClick' } );
-
-               // Add the filterInput as trigger
-               this.filterInput.$input
-                       .on( 'focus', this.focus.bind( this ) );
-
-               // Build the content
-               $contentWrapper.append(
-                       title.$element,
-                       $( '<div>' )
-                               .addClass( 'mw-rcfilters-ui-table' )
-                               .append(
-                                       // The filter list and button should appear side by side regardless of how
-                                       // wide the button is; the button also changes its width depending
-                                       // on language and its state, so the safest way to present both side
-                                       // by side is with a table layout
-                                       $( '<div>' )
-                                               .addClass( 'mw-rcfilters-ui-row' )
-                                               .append(
-                                                       this.$content
-                                                               .addClass( 'mw-rcfilters-ui-cell' )
-                                                               .addClass( 'mw-rcfilters-ui-filterCapsuleMultiselectWidget-cell-filters' ),
-                                                       $( '<div>' )
-                                                               .addClass( 'mw-rcfilters-ui-cell' )
-                                                               .addClass( 'mw-rcfilters-ui-filterCapsuleMultiselectWidget-cell-reset' )
-                                                               .append( this.resetButton.$element )
-                                               )
-                               )
-               );
-
-               // Initialize
-               this.$handle.append( $contentWrapper );
-
-               this.$element
-                       .addClass( 'mw-rcfilters-ui-filterCapsuleMultiselectWidget' );
-
-               this.reevaluateResetRestoreState();
-       };
-
-       /* Initialization */
-
-       OO.inheritClass( mw.rcfilters.ui.FilterCapsuleMultiselectWidget, OO.ui.CapsuleMultiselectWidget );
-
-       /* Events */
-
-       /**
-        * @event remove
-        * @param {string[]} filters Array of names of removed filters
-        *
-        * Filters were removed
-        */
-
-       /* Methods */
-
-       /**
-        * Respond to model itemUpdate event
-        *
-        * @param {mw.rcfilters.dm.FilterItem} item Filter item model
-        */
-       mw.rcfilters.ui.FilterCapsuleMultiselectWidget.prototype.onModelItemUpdate = function ( item ) {
-               if (
-                       item.isSelected() ||
-                       (
-                               this.model.isHighlightEnabled() &&
-                               item.isHighlightSupported() &&
-                               item.getHighlightColor()
-                       )
-               ) {
-                       this.addItemByName( item.getName() );
-               } else {
-                       this.removeItemByName( item.getName() );
-               }
-
-               // Re-evaluate reset state
-               this.reevaluateResetRestoreState();
-       };
-
-       /**
-        * Respond to highlightChange event
-        *
-        * @param {boolean} isHighlightEnabled Highlight is enabled
-        */
-       mw.rcfilters.ui.FilterCapsuleMultiselectWidget.prototype.onModelHighlightChange = function ( isHighlightEnabled ) {
-               var highlightedItems = this.model.getHighlightedItems();
-
-               if ( isHighlightEnabled ) {
-                       // Add capsule widgets
-                       highlightedItems.forEach( function ( filterItem ) {
-                               this.addItemByName( filterItem.getName() );
-                       }.bind( this ) );
-               } else {
-                       // Remove capsule widgets if they're not selected
-                       highlightedItems.forEach( function ( filterItem ) {
-                               if ( !filterItem.isSelected() ) {
-                                       this.removeItemByName( filterItem.getName() );
-                               }
-                       }.bind( this ) );
-               }
-       };
-
-       /**
-        * Respond to click event on the reset button
-        */
-       mw.rcfilters.ui.FilterCapsuleMultiselectWidget.prototype.onResetButtonClick = function () {
-               if ( this.model.areCurrentFiltersEmpty() ) {
-                       // Reset to default filters
-                       this.controller.resetToDefaults();
-               } else {
-                       // Reset to have no filters
-                       this.controller.emptyFilters();
-               }
-       };
-
-       /**
-        * Respond to mouse down event on the reset button to prevent the popup from opening
-        *
-        * @param {jQuery.Event} e Event
-        */
-       mw.rcfilters.ui.FilterCapsuleMultiselectWidget.prototype.onResetButtonMouseDown = function ( e ) {
-               e.stopPropagation();
-       };
-
-       /**
-        * Reevaluate the restore state for the widget between setting to defaults and clearing all filters
-        */
-       mw.rcfilters.ui.FilterCapsuleMultiselectWidget.prototype.reevaluateResetRestoreState = function () {
-               var defaultsAreEmpty = this.model.areDefaultFiltersEmpty(),
-                       currFiltersAreEmpty = this.model.areCurrentFiltersEmpty(),
-                       hideResetButton = currFiltersAreEmpty && defaultsAreEmpty;
-
-               this.resetButton.setIcon(
-                       currFiltersAreEmpty ? 'history' : 'trash'
-               );
-
-               this.resetButton.setLabel(
-                       currFiltersAreEmpty ? mw.msg( 'rcfilters-restore-default-filters' ) : ''
-               );
-               this.resetButton.setTitle(
-                       currFiltersAreEmpty ? null : mw.msg( 'rcfilters-clear-all-filters' )
-               );
-
-               this.resetButton.toggle( !hideResetButton );
-               this.emptyFilterMessage.toggle( currFiltersAreEmpty );
-       };
-
-       /**
-        * Mark an item widget as selected
-        *
-        * @param {mw.rcfilters.ui.CapsuleItemWidget} item Capsule widget
-        */
-       mw.rcfilters.ui.FilterCapsuleMultiselectWidget.prototype.select = function ( item ) {
-               if ( this.selected !== item ) {
-                       // Unselect previous
-                       if ( this.selected ) {
-                               this.selected.toggleSelected( false );
-                       }
-
-                       // Select new one
-                       this.selected = item;
-                       if ( this.selected ) {
-                               item.toggleSelected( true );
-                       }
-               }
-       };
-
-       /**
-        * Reset selection and remove selected states from all items
-        */
-       mw.rcfilters.ui.FilterCapsuleMultiselectWidget.prototype.resetSelection = function () {
-               if ( this.selected !== null ) {
-                       this.selected = null;
-                       this.getItems().forEach( function ( capsuleWidget ) {
-                               capsuleWidget.toggleSelected( false );
-                       } );
-               }
-       };
-
-       /**
-        * @inheritdoc
-        */
-       mw.rcfilters.ui.FilterCapsuleMultiselectWidget.prototype.createItemWidget = function ( data ) {
-               var item = this.model.getItemByName( data );
-
-               if ( !item ) {
-                       return;
-               }
-
-               return new mw.rcfilters.ui.CapsuleItemWidget(
-                       this.controller,
-                       item,
-                       { $overlay: this.$overlay }
-               );
-       };
-
-       /**
-        * Add items by their filter name
-        *
-        * @param {string} name Filter name
-        */
-       mw.rcfilters.ui.FilterCapsuleMultiselectWidget.prototype.addItemByName = function ( name ) {
-               var item = this.model.getItemByName( name );
-
-               if ( !item ) {
-                       return;
-               }
-
-               // Check that the item isn't already added
-               if ( !this.getItemFromData( name ) ) {
-                       this.addItems( [ this.createItemWidget( name ) ] );
-               }
-       };
-
-       /**
-        * Remove items by their filter name
-        *
-        * @param {string} name Filter name
-        */
-       mw.rcfilters.ui.FilterCapsuleMultiselectWidget.prototype.removeItemByName = function ( name ) {
-               this.removeItemsFromData( [ name ] );
-       };
-
-       /**
-        * @inheritdoc
-        */
-       mw.rcfilters.ui.FilterCapsuleMultiselectWidget.prototype.focus = function () {
-               // Override this method; we don't want to focus on the popup, and we
-               // don't want to bind the size to the handle.
-               if ( !this.isDisabled() ) {
-                       this.popup.toggle( true );
-                       this.filterInput.$input.get( 0 ).focus();
-               }
-               return this;
-       };
-
-       /**
-        * @inheritdoc
-        */
-       mw.rcfilters.ui.FilterCapsuleMultiselectWidget.prototype.onFocusForPopup = function () {
-               // HACK can be removed once I21b8cff4048 is merged in oojs-ui
-               this.focus();
-       };
-
-       /**
-        * @inheritdoc
-        */
-       mw.rcfilters.ui.FilterCapsuleMultiselectWidget.prototype.onKeyDown = function () {};
-
-       /**
-        * @inheritdoc
-        */
-       mw.rcfilters.ui.FilterCapsuleMultiselectWidget.prototype.onPopupFocusOut = function () {};
-
-       /**
-        * @inheritdoc
-        */
-       mw.rcfilters.ui.FilterCapsuleMultiselectWidget.prototype.clearInput = function () {
-               if ( this.filterInput ) {
-                       this.filterInput.setValue( '' );
-               }
-               this.menu.toggle( false );
-               this.menu.selectItem();
-               this.menu.highlightItem();
-       };
-
-       /**
-        * @inheritdoc
-        */
-       mw.rcfilters.ui.FilterCapsuleMultiselectWidget.prototype.removeItems = function ( items ) {
-               // Parent call
-               mw.rcfilters.ui.FilterCapsuleMultiselectWidget.parent.prototype.removeItems.call( this, items );
-
-               // Destroy the item widget when it is removed
-               // This is done because we re-add items by recreating them, rather than hiding them
-               // and items include popups, that will just continue to be created and appended
-               // unnecessarily.
-               items.forEach( function ( widget ) {
-                       widget.destroy();
-               } );
-       };
-
-       /**
-        * Override 'editItem' since it tries to use $input which does
-        * not exist when a popup is available.
-        */
-       mw.rcfilters.ui.FilterCapsuleMultiselectWidget.prototype.editItem = function () {};
-}( mediaWiki, jQuery ) );
diff --git a/resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.FilterFloatingMenuSelectWidget.js b/resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.FilterFloatingMenuSelectWidget.js
new file mode 100644 (file)
index 0000000..748eea8
--- /dev/null
@@ -0,0 +1,142 @@
+( function ( mw ) {
+       /**
+        * A floating menu widget for the filter list
+        *
+        * @extends OO.ui.FloatingMenuSelectWidget
+        *
+        * @constructor
+        * @param {mw.rcfilters.Controller} controller Controller
+        * @param {mw.rcfilters.dm.FiltersViewModel} model View model
+        * @param {Object} [config] Configuration object
+        * @cfg {jQuery} [$overlay] A jQuery object serving as overlay for popups
+        * @cfg {jQuery} [$footer] An optional footer for the menu
+        */
+       mw.rcfilters.ui.FilterFloatingMenuSelectWidget = function MwRcfiltersUiFilterFloatingMenuSelectWidget( controller, model, config ) {
+               var header;
+
+               config = config || {};
+
+               this.controller = controller;
+               this.model = model;
+
+               this.inputValue = '';
+               this.$overlay = config.$overlay || this.$element;
+               this.$footer = config.$footer;
+               this.$body = $( '<div>' )
+                               .addClass( 'mw-rcfilters-ui-filterFloatingMenuSelectWidget-body' );
+
+               // Parent
+               mw.rcfilters.ui.FilterFloatingMenuSelectWidget.parent.call( this, $.extend( {
+                       $autoCloseIgnore: this.$overlay,
+                       width: 650
+               }, config ) );
+               this.setGroupElement(
+                       $( '<div>' )
+                               .addClass( 'mw-rcfilters-ui-filterFloatingMenuSelectWidget-group' )
+               );
+               this.setClippableElement( this.$body );
+               this.setClippableContainer( this.$element );
+
+               header = new mw.rcfilters.ui.FilterMenuHeaderWidget(
+                       this.controller,
+                       this.model,
+                       {
+                               $overlay: this.$overlay
+                       }
+               );
+
+               this.noResults = new OO.ui.LabelWidget( {
+                       label: mw.msg( 'rcfilters-filterlist-noresults' ),
+                       classes: [ 'mw-rcfilters-ui-filterFloatingMenuSelectWidget-noresults' ]
+               } );
+
+               this.$element
+                       .addClass( 'mw-rcfilters-ui-filterFloatingMenuSelectWidget' )
+                       .append(
+                               this.$body
+                                       .append( header.$element, this.$group, this.noResults.$element )
+                       );
+
+               if ( this.$footer ) {
+                       this.$element.append(
+                               this.$footer
+                                       .addClass( 'mw-rcfilters-ui-filterFloatingMenuSelectWidget-footer' )
+                       );
+               }
+       };
+
+       /* Initialize */
+
+       OO.inheritClass( mw.rcfilters.ui.FilterFloatingMenuSelectWidget, OO.ui.FloatingMenuSelectWidget );
+
+       /* Events */
+
+       /**
+        * @event itemVisibilityChange
+        *
+        * Item visibility has changed
+        */
+
+       /* Methods */
+
+       /**
+        * @fires itemVisibilityChange
+        * @inheritdoc
+        */
+       mw.rcfilters.ui.FilterFloatingMenuSelectWidget.prototype.updateItemVisibility = function () {
+               var i,
+                       itemWasHighlighted = false,
+                       inputVal = this.$input.val(),
+                       items = this.getItems();
+
+               // Since the method hides/shows items, we don't want to
+               // call it unless the input actually changed
+               if ( this.inputValue !== inputVal ) {
+                       // Parent method
+                       mw.rcfilters.ui.FilterFloatingMenuSelectWidget.parent.prototype.updateItemVisibility.call( this );
+
+                       if ( inputVal !== '' ) {
+                               // Highlight the first item in the list
+                               for ( i = 0; i < items.length; i++ ) {
+                                       if (
+                                               !( items[ i ] instanceof OO.ui.MenuSectionOptionWidget ) &&
+                                               items[ i ].isVisible()
+                                       ) {
+                                               itemWasHighlighted = true;
+                                               this.highlightItem( items[ i ] );
+                                               break;
+                                       }
+                               }
+                       }
+
+                       if ( !itemWasHighlighted ) {
+                               this.highlightItem( null );
+                       }
+
+                       // Cache value
+                       this.inputValue = inputVal;
+
+                       this.emit( 'itemVisibilityChange' );
+               }
+       };
+
+       /**
+        * Override the item matcher to use the model's match process
+        *
+        * @inheritdoc
+        */
+       mw.rcfilters.ui.FilterFloatingMenuSelectWidget.prototype.getItemMatcher = function ( s ) {
+               var results = this.model.findMatches( s, true );
+
+               return function ( item ) {
+                       return results.indexOf( item.getModel() ) > -1;
+               };
+       };
+
+       /**
+        * Scroll to the top of the menu
+        */
+       mw.rcfilters.ui.FilterFloatingMenuSelectWidget.prototype.scrollToTop = function () {
+               this.$body.scrollTop( 0 );
+       };
+}( mediaWiki ) );
diff --git a/resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.FilterGroupWidget.js b/resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.FilterGroupWidget.js
deleted file mode 100644 (file)
index e19208a..0000000
+++ /dev/null
@@ -1,171 +0,0 @@
-( function ( mw, $ ) {
-       /**
-        * A group of filters
-        *
-        * @extends OO.ui.Widget
-        * @mixins OO.ui.mixin.GroupWidget
-        * @mixins OO.ui.mixin.LabelElement
-        *
-        * @constructor
-        * @param {mw.rcfilters.Controller} controller Controller
-        * @param {mw.rcfilters.dm.FilterGroup} model Filter group model
-        * @param {Object} config Configuration object
-        * @cfg {jQuery} [$overlay] Overlay
-        */
-       mw.rcfilters.ui.FilterGroupWidget = function MwRcfiltersUiFilterGroupWidget( controller, model, config ) {
-               var whatsThisMessages,
-                       $header = $( '<div>' )
-                               .addClass( 'mw-rcfilters-ui-filterGroupWidget-header' ),
-                       $popupContent = $( '<div>' )
-                               .addClass( 'mw-rcfilters-ui-filterGroupWidget-whatsThisButton-popup-content' );
-
-               config = config || {};
-
-               // Parent
-               mw.rcfilters.ui.FilterGroupWidget.parent.call( this, config );
-
-               this.controller = controller;
-               this.model = model;
-               this.filters = {};
-               this.$overlay = config.$overlay || this.$element;
-
-               // Mixin constructors
-               OO.ui.mixin.GroupWidget.call( this, config );
-               OO.ui.mixin.LabelElement.call( this, $.extend( {}, config, {
-                       label: this.model.getTitle(),
-                       $label: $( '<div>' )
-                               .addClass( 'mw-rcfilters-ui-filterGroupWidget-header-title' )
-               } ) );
-
-               $header.append( this.$label );
-
-               if ( this.model.hasWhatsThis() ) {
-                       whatsThisMessages = this.model.getWhatsThis();
-
-                       // Create popup
-                       if ( whatsThisMessages.header ) {
-                               $popupContent.append(
-                                       ( new OO.ui.LabelWidget( {
-                                               label: mw.msg( whatsThisMessages.header ),
-                                               classes: [ 'mw-rcfilters-ui-filterGroupWidget-whatsThisButton-popup-content-header' ]
-                                       } ) ).$element
-                               );
-                       }
-                       if ( whatsThisMessages.body ) {
-                               $popupContent.append(
-                                       ( new OO.ui.LabelWidget( {
-                                               label: mw.msg( whatsThisMessages.body ),
-                                               classes: [ 'mw-rcfilters-ui-filterGroupWidget-whatsThisButton-popup-content-body' ]
-                                       } ) ).$element
-                               );
-                       }
-                       if ( whatsThisMessages.linkText && whatsThisMessages.url ) {
-                               $popupContent.append(
-                                       ( new OO.ui.ButtonWidget( {
-                                               framed: false,
-                                               flags: [ 'progressive' ],
-                                               href: whatsThisMessages.url,
-                                               label: mw.msg( whatsThisMessages.linkText ),
-                                               classes: [ 'mw-rcfilters-ui-filterGroupWidget-whatsThisButton-popup-content-link' ]
-                                       } ) ).$element
-                               );
-                       }
-
-                       // Add button
-                       this.whatsThisButton = new OO.ui.PopupButtonWidget( {
-                               framed: false,
-                               label: mw.msg( 'rcfilters-filterlist-whatsthis' ),
-                               $overlay: this.$overlay,
-                               classes: [ 'mw-rcfilters-ui-filterGroupWidget-whatsThisButton' ],
-                               flags: [ 'progressive' ],
-                               popup: {
-                                       padded: false,
-                                       align: 'center',
-                                       position: 'above',
-                                       $content: $popupContent,
-                                       classes: [ 'mw-rcfilters-ui-filterGroupWidget-whatsThisButton-popup' ]
-                               }
-                       } );
-
-                       $header
-                               .append( this.whatsThisButton.$element );
-               }
-
-               // Populate
-               this.populateFromModel();
-
-               this.model.connect( this, { update: 'onModelUpdate' } );
-
-               this.$element
-                       .addClass( 'mw-rcfilters-ui-filterGroupWidget' )
-                       .addClass( 'mw-rcfilters-ui-filterGroupWidget-name-' + this.model.getName() )
-                       .append(
-                               $header,
-                               this.$group
-                                       .addClass( 'mw-rcfilters-ui-filterGroupWidget-group' )
-                       );
-       };
-
-       /* Initialization */
-
-       OO.inheritClass( mw.rcfilters.ui.FilterGroupWidget, OO.ui.Widget );
-       OO.mixinClass( mw.rcfilters.ui.FilterGroupWidget, OO.ui.mixin.GroupWidget );
-       OO.mixinClass( mw.rcfilters.ui.FilterGroupWidget, OO.ui.mixin.LabelElement );
-
-       /**
-        * Respond to model update event
-        */
-       mw.rcfilters.ui.FilterGroupWidget.prototype.onModelUpdate = function () {
-               this.$element.toggleClass(
-                       'mw-rcfilters-ui-filterGroupWidget-active',
-                       this.model.isActive()
-               );
-       };
-
-       /**
-        * Get an item widget from its filter name
-        *
-        * @param {string} filterName Filter name
-        * @return {mw.rcfilters.ui.FilterItemWidget} Item widget
-        */
-       mw.rcfilters.ui.FilterGroupWidget.prototype.getItemWidget = function ( filterName ) {
-               return this.filters[ filterName ];
-       };
-
-       /**
-        * Populate data from the model
-        */
-       mw.rcfilters.ui.FilterGroupWidget.prototype.populateFromModel = function () {
-               var widget = this;
-
-               this.clearItems();
-               this.filters = {};
-
-               this.addItems(
-                       this.model.getItems().map( function ( filterItem ) {
-                               var groupWidget = new mw.rcfilters.ui.FilterItemWidget(
-                                       widget.controller,
-                                       filterItem,
-                                       {
-                                               label: filterItem.getLabel(),
-                                               description: filterItem.getDescription(),
-                                               $overlay: widget.$overlay
-                                       }
-                               );
-
-                               widget.filters[ filterItem.getName() ] = groupWidget;
-
-                               return groupWidget;
-                       } )
-               );
-       };
-
-       /**
-        * Get the group name
-        *
-        * @return {string} Group name
-        */
-       mw.rcfilters.ui.FilterGroupWidget.prototype.getName = function () {
-               return this.model.getName();
-       };
-}( mediaWiki, jQuery ) );
index 889ba08..616608e 100644 (file)
@@ -15,7 +15,7 @@
                this.colorPickerWidget = new mw.rcfilters.ui.HighlightColorPickerWidget( controller, model );
 
                // Parent
-               mw.rcfilters.ui.FilterItemHighlightButton.parent.call( this, $.extend( {}, config, {
+               mw.rcfilters.ui.FilterItemHighlightButton.parent.call( this, $.extend( true, {}, config, {
                        icon: 'highlight',
                        indicator: 'down',
                        popup: {
                // Event
                this.model.connect( this, { update: 'onModelUpdate' } );
                this.colorPickerWidget.connect( this, { chooseColor: 'onChooseColor' } );
+               // This lives inside a MenuOptionWidget, which intercepts mousedown
+               // to select the item. We want to prevent that when we click the highlight
+               // button
+               this.$element.on( 'mousedown', function ( e ) { e.stopPropagation(); } );
 
                this.$element
                        .addClass( 'mw-rcfilters-ui-filterItemHighlightButton' );
 
        OO.inheritClass( mw.rcfilters.ui.FilterItemHighlightButton, OO.ui.PopupButtonWidget );
 
+       /* Static Properties */
+
+       /**
+        * @static
+        * @inheritdoc
+        */
+       mw.rcfilters.ui.FilterItemHighlightButton.static.cancelButtonMouseDownEvents = true;
+
        /* Methods */
 
        /**
diff --git a/resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.FilterItemWidget.js b/resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.FilterItemWidget.js
deleted file mode 100644 (file)
index 7e6d776..0000000
+++ /dev/null
@@ -1,160 +0,0 @@
-( function ( mw, $ ) {
-       /**
-        * A widget representing a single toggle filter
-        *
-        * @extends OO.ui.Widget
-        *
-        * @constructor
-        * @param {mw.rcfilters.Controller} controller RCFilters controller
-        * @param {mw.rcfilters.dm.FilterItem} model Filter item model
-        * @param {Object} config Configuration object
-        */
-       mw.rcfilters.ui.FilterItemWidget = function MwRcfiltersUiFilterItemWidget( controller, model, config ) {
-               var layout,
-                       $label = $( '<div>' )
-                               .addClass( 'mw-rcfilters-ui-filterItemWidget-label' );
-
-               config = config || {};
-
-               // Parent
-               mw.rcfilters.ui.FilterItemWidget.parent.call( this, config );
-
-               this.controller = controller;
-               this.model = model;
-               this.selected = false;
-
-               this.checkboxWidget = new mw.rcfilters.ui.CheckboxInputWidget( {
-                       value: this.model.getName(),
-                       selected: this.model.isSelected()
-               } );
-
-               $label.append(
-                       $( '<div>' )
-                               .addClass( 'mw-rcfilters-ui-filterItemWidget-label-title' )
-                               .text( this.model.getLabel() )
-               );
-               if ( this.model.getDescription() ) {
-                       $label.append(
-                               $( '<div>' )
-                                       .addClass( 'mw-rcfilters-ui-filterItemWidget-label-desc' )
-                                       .text( this.model.getDescription() )
-                       );
-               }
-
-               this.highlightButton = new mw.rcfilters.ui.FilterItemHighlightButton(
-                       this.controller,
-                       this.model,
-                       {
-                               $overlay: config.$overlay || this.$element,
-                               title: mw.msg( 'rcfilters-highlightmenu-help' )
-                       }
-               );
-               this.highlightButton.toggle( this.model.isHighlightEnabled() );
-
-               layout = new OO.ui.FieldLayout( this.checkboxWidget, {
-                       label: $label,
-                       align: 'inline'
-               } );
-
-               // Event
-               this.checkboxWidget.connect( this, { userChange: 'onCheckboxChange' } );
-               this.model.connect( this, { update: 'onModelUpdate' } );
-               this.model.getGroupModel().connect( this, { update: 'onGroupModelUpdate' } );
-
-               this.$element
-                       .addClass( 'mw-rcfilters-ui-filterItemWidget' )
-                       .append(
-                               $( '<div>' )
-                                       .addClass( 'mw-rcfilters-ui-table' )
-                                       .append(
-                                               $( '<div>' )
-                                                       .addClass( 'mw-rcfilters-ui-row' )
-                                                       .append(
-                                                               $( '<div>' )
-                                                                       .addClass( 'mw-rcfilters-ui-cell mw-rcfilters-ui-filterItemWidget-filterCheckbox' )
-                                                                       .append( layout.$element ),
-                                                               $( '<div>' )
-                                                                       .addClass( 'mw-rcfilters-ui-cell mw-rcfilters-ui-filterItemWidget-highlightButton' )
-                                                                       .append( this.highlightButton.$element )
-                                                       )
-                                       )
-                       );
-       };
-
-       /* Initialization */
-
-       OO.inheritClass( mw.rcfilters.ui.FilterItemWidget, OO.ui.Widget );
-
-       /* Methods */
-
-       /**
-        * Respond to checkbox change.
-        * NOTE: This event is emitted both for deliberate user action and for
-        * a change that the code requests ('setSelected')
-        *
-        * @param {boolean} isSelected The checkbox is selected
-        */
-       mw.rcfilters.ui.FilterItemWidget.prototype.onCheckboxChange = function ( isSelected ) {
-               this.controller.toggleFilterSelect( this.model.getName(), isSelected );
-       };
-
-       /**
-        * Respond to item model update event
-        */
-       mw.rcfilters.ui.FilterItemWidget.prototype.onModelUpdate = function () {
-               this.checkboxWidget.setSelected( this.model.isSelected() );
-
-               this.setCurrentMuteState();
-       };
-
-       /**
-        * Respond to item group model update event
-        */
-       mw.rcfilters.ui.FilterItemWidget.prototype.onGroupModelUpdate = function () {
-               this.setCurrentMuteState();
-       };
-
-       /**
-        * Set selected state on this widget
-        *
-        * @param {boolean} [isSelected] Widget is selected
-        */
-       mw.rcfilters.ui.FilterItemWidget.prototype.toggleSelected = function ( isSelected ) {
-               isSelected = isSelected !== undefined ? isSelected : !this.selected;
-
-               if ( this.selected !== isSelected ) {
-                       this.selected = isSelected;
-
-                       this.$element.toggleClass( 'mw-rcfilters-ui-filterItemWidget-selected', this.selected );
-               }
-       };
-
-       /**
-        * Set the current mute state for this item
-        */
-       mw.rcfilters.ui.FilterItemWidget.prototype.setCurrentMuteState = function () {
-               this.$element.toggleClass(
-                       'mw-rcfilters-ui-filterItemWidget-muted',
-                       this.model.isConflicted() ||
-                       (
-                               // Item is also muted when any of the items in its group is active
-                               this.model.getGroupModel().isActive() &&
-                               // But it isn't selected
-                               !this.model.isSelected() &&
-                               // And also not included
-                               !this.model.isIncluded()
-                       )
-               );
-
-               this.highlightButton.toggle( this.model.isHighlightEnabled() );
-       };
-
-       /**
-        * Get the name of this filter
-        *
-        * @return {string} Filter name
-        */
-       mw.rcfilters.ui.FilterItemWidget.prototype.getName = function () {
-               return this.model.getName();
-       };
-}( mediaWiki, jQuery ) );
diff --git a/resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.FilterMenuHeaderWidget.js b/resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.FilterMenuHeaderWidget.js
new file mode 100644 (file)
index 0000000..15e7eee
--- /dev/null
@@ -0,0 +1,86 @@
+( function ( mw, $ ) {
+       /**
+        * Menu header for the RCFilters filters menu
+        *
+        * @extends OO.ui.Widget
+        *
+        * @constructor
+        * @param {mw.rcfilters.Controller} controller Controller
+        * @param {mw.rcfilters.dm.FiltersViewModel} model View model
+        * @param {Object} config Configuration object
+        * @cfg {jQuery} [$overlay] A jQuery object serving as overlay for popups
+        */
+       mw.rcfilters.ui.FilterMenuHeaderWidget = function MwRcfiltersUiFilterMenuHeaderWidget( controller, model, config ) {
+               config = config || {};
+
+               this.controller = controller;
+               this.model = model;
+               this.$overlay = config.$overlay || this.$element;
+
+               // Parent
+               mw.rcfilters.ui.FilterMenuHeaderWidget.parent.call( this, config );
+               OO.ui.mixin.LabelElement.call( this, $.extend( {
+                       label: mw.msg( 'rcfilters-filterlist-title' ),
+                       $label: $( '<div>' )
+                               .addClass( 'mw-rcfilters-ui-filterMenuHeaderWidget-title' )
+               }, config ) );
+
+               // Highlight button
+               this.highlightButton = new OO.ui.ToggleButtonWidget( {
+                       icon: 'highlight',
+                       label: mw.message( 'rcfilters-highlightbutton-title' ).text(),
+                       classes: [ 'mw-rcfilters-ui-filterMenuHeaderWidget-hightlightButton' ]
+               } );
+
+               // Events
+               this.highlightButton
+                       .connect( this, { click: 'onHighlightButtonClick' } );
+               this.model.connect( this, { highlightChange: 'onModelHighlightChange' } );
+
+               // Initialize
+               this.$element
+                       .addClass( 'mw-rcfilters-ui-filterMenuHeaderWidget' )
+                       .append(
+                               $( '<div>' )
+                                       .addClass( 'mw-rcfilters-ui-table' )
+                                       .addClass( 'mw-rcfilters-ui-filterMenuHeaderWidget-header' )
+                                       .append(
+                                               $( '<div>' )
+                                                       .addClass( 'mw-rcfilters-ui-row' )
+                                                       .append(
+                                                               $( '<div>' )
+                                                                       .addClass( 'mw-rcfilters-ui-cell' )
+                                                                       .addClass( 'mw-rcfilters-ui-filterMenuHeaderWidget-header-title' )
+                                                                       .append( this.$label ),
+                                                               $( '<div>' )
+                                                                       .addClass( 'mw-rcfilters-ui-cell' )
+                                                                       .addClass( 'mw-rcfilters-ui-filterMenuHeaderWidget-header-highlight' )
+                                                                       .append( this.highlightButton.$element )
+                                                       )
+                                       )
+                       );
+       };
+
+       /* Initialization */
+
+       OO.inheritClass( mw.rcfilters.ui.FilterMenuHeaderWidget, OO.ui.Widget );
+       OO.mixinClass( mw.rcfilters.ui.FilterMenuHeaderWidget, OO.ui.mixin.LabelElement );
+
+       /* Methods */
+
+       /**
+        * Respond to model highlight change event
+        *
+        * @param {boolean} highlightEnabled Highlight is enabled
+        */
+       mw.rcfilters.ui.FilterMenuHeaderWidget.prototype.onModelHighlightChange = function ( highlightEnabled ) {
+               this.highlightButton.setActive( highlightEnabled );
+       };
+
+       /**
+        * Respond to highlight button click
+        */
+       mw.rcfilters.ui.FilterMenuHeaderWidget.prototype.onHighlightButtonClick = function () {
+               this.controller.toggleHighlight();
+       };
+}( mediaWiki, jQuery ) );
diff --git a/resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.FilterMenuOptionWidget.js b/resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.FilterMenuOptionWidget.js
new file mode 100644 (file)
index 0000000..bda537f
--- /dev/null
@@ -0,0 +1,152 @@
+( function ( mw ) {
+       /**
+        * A widget representing a single toggle filter
+        *
+        * @extends OO.ui.MenuOptionWidget
+        *
+        * @constructor
+        * @param {mw.rcfilters.Controller} controller RCFilters controller
+        * @param {mw.rcfilters.dm.FilterItem} model Filter item model
+        * @param {Object} config Configuration object
+        */
+       mw.rcfilters.ui.FilterMenuOptionWidget = function MwRcfiltersUiFilterMenuOptionWidget( controller, model, config ) {
+               var layout,
+                       $label = $( '<div>' )
+                               .addClass( 'mw-rcfilters-ui-filterMenuOptionWidget-label' );
+
+               config = config || {};
+
+               this.controller = controller;
+               this.model = model;
+
+               // Parent
+               mw.rcfilters.ui.FilterMenuOptionWidget.parent.call( this, $.extend( {
+                       // Override the 'check' icon that OOUI defines
+                       icon: '',
+                       data: this.model.getName(),
+                       label: this.model.getLabel()
+               }, config ) );
+
+               this.checkboxWidget = new mw.rcfilters.ui.CheckboxInputWidget( {
+                       value: this.model.getName(),
+                       selected: this.model.isSelected()
+               } );
+
+               $label.append(
+                       $( '<div>' )
+                               .addClass( 'mw-rcfilters-ui-filterMenuOptionWidget-label-title' )
+                               .append( this.$label )
+               );
+               if ( this.model.getDescription() ) {
+                       $label.append(
+                               $( '<div>' )
+                                       .addClass( 'mw-rcfilters-ui-filterMenuOptionWidget-label-desc' )
+                                       .text( this.model.getDescription() )
+                       );
+               }
+
+               this.highlightButton = new mw.rcfilters.ui.FilterItemHighlightButton(
+                       this.controller,
+                       this.model,
+                       {
+                               $overlay: config.$overlay || this.$element,
+                               title: mw.msg( 'rcfilters-highlightmenu-help' )
+                       }
+               );
+               this.highlightButton.toggle( this.model.isHighlightEnabled() );
+
+               layout = new OO.ui.FieldLayout( this.checkboxWidget, {
+                       label: $label,
+                       align: 'inline'
+               } );
+               // Event
+               this.model.connect( this, { update: 'onModelUpdate' } );
+               this.model.getGroupModel().connect( this, { update: 'onGroupModelUpdate' } );
+               // HACK: Prevent defaults on 'click' for the label so it
+               // doesn't steal the focus away from the input. This means
+               // we can continue arrow-movement after we click the label
+               // and is consistent with the checkbox *itself* also preventing
+               // defaults on 'click' as well.
+               layout.$label.on( 'click', false );
+
+               this.$element
+                       .addClass( 'mw-rcfilters-ui-filterMenuOptionWidget' )
+                       .append(
+                               $( '<div>' )
+                                       .addClass( 'mw-rcfilters-ui-table' )
+                                       .append(
+                                               $( '<div>' )
+                                                       .addClass( 'mw-rcfilters-ui-row' )
+                                                       .append(
+                                                               $( '<div>' )
+                                                                       .addClass( 'mw-rcfilters-ui-cell mw-rcfilters-ui-filterMenuOptionWidget-filterCheckbox' )
+                                                                       .append( layout.$element ),
+                                                               $( '<div>' )
+                                                                       .addClass( 'mw-rcfilters-ui-cell mw-rcfilters-ui-filterMenuOptionWidget-highlightButton' )
+                                                                       .append( this.highlightButton.$element )
+                                                       )
+                                       )
+                       );
+       };
+
+       /* Initialization */
+
+       OO.inheritClass( mw.rcfilters.ui.FilterMenuOptionWidget, OO.ui.MenuOptionWidget );
+
+       /* Static properties */
+
+       // We do our own scrolling to top
+       mw.rcfilters.ui.FilterMenuOptionWidget.static.scrollIntoViewOnSelect = false;
+
+       /* Methods */
+
+       /**
+        * Respond to item model update event
+        */
+       mw.rcfilters.ui.FilterMenuOptionWidget.prototype.onModelUpdate = function () {
+               this.checkboxWidget.setSelected( this.model.isSelected() );
+
+               this.setCurrentMuteState();
+       };
+
+       /**
+        * Respond to item group model update event
+        */
+       mw.rcfilters.ui.FilterMenuOptionWidget.prototype.onGroupModelUpdate = function () {
+               this.setCurrentMuteState();
+       };
+
+       /**
+        * Set the current mute state for this item
+        */
+       mw.rcfilters.ui.FilterMenuOptionWidget.prototype.setCurrentMuteState = function () {
+               this.$element.toggleClass(
+                       'mw-rcfilters-ui-filterMenuOptionWidget-muted',
+                       this.model.isConflicted() ||
+                       (
+                               // Item is also muted when any of the items in its group is active
+                               this.model.getGroupModel().isActive() &&
+                               // But it isn't selected
+                               !this.model.isSelected() &&
+                               // And also not included
+                               !this.model.isIncluded()
+                       )
+               );
+
+               this.highlightButton.toggle( this.model.isHighlightEnabled() );
+       };
+
+       /**
+        * Get the name of this filter
+        *
+        * @return {string} Filter name
+        */
+       mw.rcfilters.ui.FilterMenuOptionWidget.prototype.getName = function () {
+               return this.model.getName();
+       };
+
+       mw.rcfilters.ui.FilterMenuOptionWidget.prototype.getModel = function () {
+               return this.model;
+       };
+
+}( mediaWiki ) );
diff --git a/resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.FilterMenuSectionOptionWidget.js b/resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.FilterMenuSectionOptionWidget.js
new file mode 100644 (file)
index 0000000..9f41712
--- /dev/null
@@ -0,0 +1,123 @@
+( function ( mw ) {
+       /**
+        * A widget representing a menu section for filter groups
+        *
+        * @extends OO.ui.MenuSectionOptionWidget
+        *
+        * @constructor
+        * @param {mw.rcfilters.Controller} controller RCFilters controller
+        * @param {mw.rcfilters.dm.FilterGroup} model Filter group model
+        * @param {Object} config Configuration object
+        * @cfg {jQuery} [$overlay] Overlay
+        */
+       mw.rcfilters.ui.FilterMenuSectionOptionWidget = function MwRcfiltersUiFilterMenuSectionOptionWidget( controller, model, config ) {
+               var whatsThisMessages,
+                       $header = $( '<div>' )
+                               .addClass( 'mw-rcfilters-ui-filterMenuSectionOptionWidget-header' ),
+                       $popupContent = $( '<div>' )
+                               .addClass( 'mw-rcfilters-ui-filterMenuSectionOptionWidget-whatsThisButton-popup-content' );
+
+               config = config || {};
+
+               this.controller = controller;
+               this.model = model;
+               this.$overlay = config.$overlay || this.$element;
+
+               // Parent
+               mw.rcfilters.ui.FilterMenuSectionOptionWidget.parent.call( this, $.extend( {
+                       label: this.model.getTitle(),
+                       $label: $( '<div>' )
+                               .addClass( 'mw-rcfilters-ui-filterMenuSectionOptionWidget-header-title' )
+               }, config ) );
+
+               $header.append( this.$label );
+
+               if ( this.model.hasWhatsThis() ) {
+                       whatsThisMessages = this.model.getWhatsThis();
+
+                       // Create popup
+                       if ( whatsThisMessages.header ) {
+                               $popupContent.append(
+                                       ( new OO.ui.LabelWidget( {
+                                               label: mw.msg( whatsThisMessages.header ),
+                                               classes: [ 'mw-rcfilters-ui-filterMenuSectionOptionWidget-whatsThisButton-popup-content-header' ]
+                                       } ) ).$element
+                               );
+                       }
+                       if ( whatsThisMessages.body ) {
+                               $popupContent.append(
+                                       ( new OO.ui.LabelWidget( {
+                                               label: mw.msg( whatsThisMessages.body ),
+                                               classes: [ 'mw-rcfilters-ui-filterMenuSectionOptionWidget-whatsThisButton-popup-content-body' ]
+                                       } ) ).$element
+                               );
+                       }
+                       if ( whatsThisMessages.linkText && whatsThisMessages.url ) {
+                               $popupContent.append(
+                                       ( new OO.ui.ButtonWidget( {
+                                               framed: false,
+                                               flags: [ 'progressive' ],
+                                               href: whatsThisMessages.url,
+                                               label: mw.msg( whatsThisMessages.linkText ),
+                                               classes: [ 'mw-rcfilters-ui-filterMenuSectionOptionWidget-whatsThisButton-popup-content-link' ]
+                                       } ) ).$element
+                               );
+                       }
+
+                       // Add button
+                       this.whatsThisButton = new OO.ui.PopupButtonWidget( {
+                               framed: false,
+                               label: mw.msg( 'rcfilters-filterlist-whatsthis' ),
+                               $overlay: this.$overlay,
+                               classes: [ 'mw-rcfilters-ui-filterMenuSectionOptionWidget-whatsThisButton' ],
+                               flags: [ 'progressive' ],
+                               popup: {
+                                       $autoCloseIgnore: this.$element.add( this.$overlay ),
+                                       padded: false,
+                                       align: 'center',
+                                       position: 'above',
+                                       $content: $popupContent,
+                                       classes: [ 'mw-rcfilters-ui-filterMenuSectionOptionWidget-whatsThisButton-popup' ]
+                               }
+                       } );
+
+                       $header
+                               .append( this.whatsThisButton.$element );
+               }
+
+               // Events
+               this.model.connect( this, { update: 'onModelUpdate' } );
+
+               // Initialize
+               this.$element
+                       .addClass( 'mw-rcfilters-ui-filterMenuSectionOptionWidget' )
+                       .addClass( 'mw-rcfilters-ui-filterMenuSectionOptionWidget-name-' + this.model.getName() )
+                       .append( $header );
+       };
+
+       /* Initialize */
+
+       OO.inheritClass( mw.rcfilters.ui.FilterMenuSectionOptionWidget, OO.ui.MenuSectionOptionWidget );
+
+       /* Methods */
+
+       /**
+        * Respond to model update event
+        */
+       mw.rcfilters.ui.FilterMenuSectionOptionWidget.prototype.onModelUpdate = function () {
+               this.$element.toggleClass(
+                       'mw-rcfilters-ui-filterMenuSectionOptionWidget-active',
+                       this.model.isActive()
+               );
+       };
+
+       /**
+        * Get the group name
+        *
+        * @return {string} Group name
+        */
+       mw.rcfilters.ui.FilterMenuSectionOptionWidget.prototype.getName = function () {
+               return this.model.getName();
+       };
+
+}( mediaWiki ) );
diff --git a/resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.FilterTagItemWidget.js b/resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.FilterTagItemWidget.js
new file mode 100644 (file)
index 0000000..f79e013
--- /dev/null
@@ -0,0 +1,194 @@
+( function ( mw, $ ) {
+       /**
+        * Extend OOUI's FilterTagItemWidget to also display a popup on hover.
+        *
+        * @class
+        * @extends OO.ui.FilterTagItemWidget
+        * @mixins OO.ui.mixin.PopupElement
+        *
+        * @constructor
+        * @param {mw.rcfilters.Controller} controller
+        * @param {mw.rcfilters.dm.FilterItem} model Item model
+        * @param {Object} config Configuration object
+        * @cfg {jQuery} [$overlay] A jQuery object serving as overlay for popups
+        */
+       mw.rcfilters.ui.FilterTagItemWidget = function MwRcfiltersUiFilterTagItemWidget( controller, model, config ) {
+               // Configuration initialization
+               config = config || {};
+
+               this.controller = controller;
+               this.model = model;
+               this.selected = false;
+
+               mw.rcfilters.ui.FilterTagItemWidget.parent.call( this, $.extend( {
+                       data: this.model.getName(),
+                       label: this.model.getLabel()
+               }, config ) );
+
+               this.$overlay = config.$overlay || this.$element;
+               this.popupLabel = new OO.ui.LabelWidget();
+
+               // Mixin constructors
+               OO.ui.mixin.PopupElement.call( this, $.extend( {
+                       popup: {
+                               padded: false,
+                               align: 'center',
+                               position: 'above',
+                               $content: $( '<div>' )
+                                       .addClass( 'mw-rcfilters-ui-filterTagItemWidget-popup-content' )
+                                       .append( this.popupLabel.$element ),
+                               $floatableContainer: this.$element,
+                               classes: [ 'mw-rcfilters-ui-filterTagItemWidget-popup' ]
+                       }
+               }, config ) );
+
+               this.positioned = false;
+               this.popupTimeoutShow = null;
+               this.popupTimeoutHide = null;
+
+               this.$highlight = $( '<div>' )
+                       .addClass( 'mw-rcfilters-ui-filterTagItemWidget-highlight' );
+
+               // Events
+               this.model.connect( this, { update: 'onModelUpdate' } );
+
+               // Initialization
+               this.$overlay.append( this.popup.$element );
+               this.$element
+                       .prepend( this.$highlight )
+                       .attr( 'aria-haspopup', 'true' )
+                       .on( 'mouseenter', this.onMouseEnter.bind( this ) )
+                       .on( 'mouseleave', this.onMouseLeave.bind( this ) );
+
+               this.setCurrentMuteState();
+               this.setHighlightColor();
+       };
+
+       /* Initialization */
+
+       OO.inheritClass( mw.rcfilters.ui.FilterTagItemWidget, OO.ui.TagItemWidget );
+       OO.mixinClass( mw.rcfilters.ui.FilterTagItemWidget, OO.ui.mixin.PopupElement );
+
+       /* Methods */
+
+       /**
+        * Respond to model update event
+        */
+       mw.rcfilters.ui.FilterTagItemWidget.prototype.onModelUpdate = function () {
+               this.setCurrentMuteState();
+
+               this.setHighlightColor();
+       };
+
+       mw.rcfilters.ui.FilterTagItemWidget.prototype.setHighlightColor = function () {
+               var selectedColor = this.model.isHighlightEnabled() ? this.model.getHighlightColor() : null;
+
+               this.$highlight
+                       .attr( 'data-color', selectedColor )
+                       .toggleClass(
+                               'mw-rcfilters-ui-filterTagItemWidget-highlight-highlighted',
+                               !!selectedColor
+                       );
+       };
+
+       /**
+        * Set the current mute state for this item
+        */
+       mw.rcfilters.ui.FilterTagItemWidget.prototype.setCurrentMuteState = function () {
+               this.$element
+                       .toggleClass(
+                               'mw-rcfilters-ui-filterTagItemWidget-muted',
+                               !this.model.isSelected() ||
+                               this.model.isIncluded() ||
+                               this.model.isFullyCovered()
+                       )
+                       .toggleClass(
+                               'mw-rcfilters-ui-filterTagItemWidget-conflicted',
+                               this.model.isSelected() && this.model.isConflicted()
+                       );
+       };
+
+       /**
+        * Respond to mouse enter event
+        */
+       mw.rcfilters.ui.FilterTagItemWidget.prototype.onMouseEnter = function () {
+               var labelText = this.model.getStateMessage();
+
+               if ( labelText ) {
+                       this.popupLabel.setLabel( labelText );
+
+                       if ( !this.positioned ) {
+                               // Recalculate anchor position to be center of the capsule item
+                               this.popup.$anchor.css( 'margin-left', ( this.$element.width() / 2 ) );
+                               this.positioned = true;
+                       }
+
+                       // Set timeout for the popup to show
+                       this.popupTimeoutShow = setTimeout( function () {
+                               this.popup.toggle( true );
+                       }.bind( this ), 500 );
+
+                       // Cancel the hide timeout
+                       clearTimeout( this.popupTimeoutHide );
+                       this.popupTimeoutHide = null;
+               }
+       };
+
+       /**
+        * Respond to mouse leave event
+        */
+       mw.rcfilters.ui.FilterTagItemWidget.prototype.onMouseLeave = function () {
+               this.popupTimeoutHide = setTimeout( function () {
+                       this.popup.toggle( false );
+               }.bind( this ), 250 );
+
+               // Clear the show timeout
+               clearTimeout( this.popupTimeoutShow );
+               this.popupTimeoutShow = null;
+       };
+
+       /**
+        * Set selected state on this widget
+        *
+        * @param {boolean} [isSelected] Widget is selected
+        */
+       mw.rcfilters.ui.FilterTagItemWidget.prototype.toggleSelected = function ( isSelected ) {
+               isSelected = isSelected !== undefined ? isSelected : !this.selected;
+
+               if ( this.selected !== isSelected ) {
+                       this.selected = isSelected;
+
+                       this.$element.toggleClass( 'mw-rcfilters-ui-filterTagItemWidget-selected', this.selected );
+               }
+       };
+
+       /**
+        * Get the selected state of this widget
+        *
+        * @return {boolean} Tag is selected
+        */
+       mw.rcfilters.ui.FilterTagItemWidget.prototype.isSelected = function () {
+               return this.selected;
+       };
+
+       /**
+        * Get item name
+        *
+        * @return {string} Filter name
+        */
+       mw.rcfilters.ui.FilterTagItemWidget.prototype.getName = function () {
+               return this.model.getName();
+       };
+
+       /**
+        * Remove and destroy external elements of this widget
+        */
+       mw.rcfilters.ui.FilterTagItemWidget.prototype.destroy = function () {
+               // Destroy the popup
+               this.popup.$element.detach();
+
+               // Disconnect events
+               this.model.disconnect( this );
+               this.closeButton.disconnect( this );
+       };
+}( mediaWiki, jQuery ) );
diff --git a/resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.FilterTagMultiselectWidget.js b/resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.FilterTagMultiselectWidget.js
new file mode 100644 (file)
index 0000000..6fd3585
--- /dev/null
@@ -0,0 +1,425 @@
+( function ( mw ) {
+       /**
+        * List displaying all filter groups
+        *
+        * @extends OO.ui.Widget
+        * @mixins OO.ui.mixin.PendingElement
+        *
+        * @constructor
+        * @param {mw.rcfilters.Controller} controller Controller
+        * @param {mw.rcfilters.dm.FiltersViewModel} model View model
+        * @param {Object} config Configuration object
+        * @cfg {jQuery} [$overlay] A jQuery object serving as overlay for popups
+        */
+       mw.rcfilters.ui.FilterTagMultiselectWidget = function MwRcfiltersUiFilterTagMultiselectWidget( controller, model, config ) {
+               var title = new OO.ui.LabelWidget( {
+                               label: mw.msg( 'rcfilters-activefilters' ),
+                               classes: [ 'mw-rcfilters-ui-filterTagMultiselectWidget-wrapper-content-title' ]
+                       } ),
+                       $contentWrapper = $( '<div>' )
+                               .addClass( 'mw-rcfilters-ui-filterTagMultiselectWidget-wrapper' );
+
+               config = config || {};
+
+               this.controller = controller;
+               this.model = model;
+               this.$overlay = config.$overlay || this.$element;
+
+               // Parent
+               mw.rcfilters.ui.FilterTagMultiselectWidget.parent.call( this, $.extend( true, {
+                       label: mw.msg( 'rcfilters-filterlist-title' ),
+                       placeholder: mw.msg( 'rcfilters-empty-filter' ),
+                       inputPosition: 'outline',
+                       allowArbitrary: false,
+                       allowDisplayInvalidTags: false,
+                       allowReordering: false,
+                       $overlay: this.$overlay,
+                       menu: {
+                               hideWhenOutOfView: false,
+                               hideOnChoose: false,
+                               width: 650,
+                               $footer: $( '<div>' )
+                                       .append(
+                                               new OO.ui.ButtonWidget( {
+                                                       framed: false,
+                                                       icon: 'feedback',
+                                                       flags: [ 'progressive' ],
+                                                       label: mw.msg( 'rcfilters-filterlist-feedbacklink' ),
+                                                       href: 'https://www.mediawiki.org/wiki/Help_talk:New_filters_for_edit_review'
+                                               } ).$element
+                                       )
+                       },
+                       input: {
+                               icon: 'search',
+                               placeholder: mw.msg( 'rcfilters-search-placeholder' )
+                       }
+               }, config ) );
+
+               this.resetButton = new OO.ui.ButtonWidget( {
+                       framed: false,
+                       classes: [ 'mw-rcfilters-ui-filterTagMultiselectWidget-resetButton' ]
+               } );
+
+               this.emptyFilterMessage = new OO.ui.LabelWidget( {
+                       label: mw.msg( 'rcfilters-empty-filter' ),
+                       classes: [ 'mw-rcfilters-ui-filterTagMultiselectWidget-emptyFilters' ]
+               } );
+               this.$content.append( this.emptyFilterMessage.$element );
+
+               // Events
+               this.resetButton.connect( this, { click: 'onResetButtonClick' } );
+               // Stop propagation for mousedown, so that the widget doesn't
+               // trigger the focus on the input and scrolls up when we click the reset button
+               this.resetButton.$element.on( 'mousedown', function ( e ) { e.stopPropagation(); } );
+               this.model.connect( this, {
+                       initialize: 'onModelInitialize',
+                       itemUpdate: 'onModelItemUpdate',
+                       highlightChange: 'onModelHighlightChange'
+               } );
+               this.menu.connect( this, { toggle: 'onMenuToggle' } );
+
+               // Build the content
+               $contentWrapper.append(
+                       title.$element,
+                       $( '<div>' )
+                               .addClass( 'mw-rcfilters-ui-table' )
+                               .append(
+                                       // The filter list and button should appear side by side regardless of how
+                                       // wide the button is; the button also changes its width depending
+                                       // on language and its state, so the safest way to present both side
+                                       // by side is with a table layout
+                                       $( '<div>' )
+                                               .addClass( 'mw-rcfilters-ui-row' )
+                                               .append(
+                                                       this.$content
+                                                               .addClass( 'mw-rcfilters-ui-cell' )
+                                                               .addClass( 'mw-rcfilters-ui-filterTagMultiselectWidget-cell-filters' ),
+                                                       $( '<div>' )
+                                                               .addClass( 'mw-rcfilters-ui-cell' )
+                                                               .addClass( 'mw-rcfilters-ui-filterTagMultiselectWidget-cell-reset' )
+                                                               .append( this.resetButton.$element )
+                                               )
+                               )
+               );
+
+               // Initialize
+               this.$handle.append( $contentWrapper );
+               this.emptyFilterMessage.toggle( this.isEmpty() );
+
+               this.$element
+                       .addClass( 'mw-rcfilters-ui-filterTagMultiselectWidget' );
+
+               this.populateFromModel();
+               this.reevaluateResetRestoreState();
+       };
+
+       /* Initialization */
+
+       OO.inheritClass( mw.rcfilters.ui.FilterTagMultiselectWidget, OO.ui.MenuTagMultiselectWidget );
+
+       /* Methods */
+
+       /**
+        * Respond to menu toggle
+        *
+        * @param {boolean} isVisible Menu is visible
+        */
+       mw.rcfilters.ui.FilterTagMultiselectWidget.prototype.onMenuToggle = function ( isVisible ) {
+               if ( isVisible ) {
+                       mw.hook( 'RcFilters.popup.open' ).fire( this.getMenu().getSelectedItem() );
+
+                       if ( !this.getMenu().getSelectedItem() ) {
+                               // If there are no selected items, scroll menu to top
+                               // This has to be in a setTimeout so the menu has time
+                               // to be positioned and fixed
+                               setTimeout( function () { this.getMenu().scrollToTop(); }.bind( this ), 0 );
+                       }
+               } else {
+                       // Clear selection
+                       this.getMenu().selectItem( null );
+                       this.selectTag( null );
+               }
+       };
+
+       /**
+        * @inheritdoc
+        */
+       mw.rcfilters.ui.FilterTagMultiselectWidget.prototype.onInputFocus = function () {
+               // Parent
+               mw.rcfilters.ui.FilterTagMultiselectWidget.parent.prototype.onInputFocus.call( this );
+
+               // Scroll to top
+               this.scrollToTop( this.$element );
+       };
+
+       /**
+        * @inheridoc
+        */
+       mw.rcfilters.ui.FilterTagMultiselectWidget.prototype.onChangeTags = function () {
+               // Parent method
+               mw.rcfilters.ui.FilterTagMultiselectWidget.parent.prototype.onChangeTags.call( this );
+
+               this.emptyFilterMessage.toggle( this.isEmpty() );
+       };
+
+       /**
+        * Respond to model initialize event
+        */
+       mw.rcfilters.ui.FilterTagMultiselectWidget.prototype.onModelInitialize = function () {
+               this.populateFromModel();
+       };
+
+       /**
+        * Respond to model itemUpdate event
+        *
+        * @param {mw.rcfilters.dm.FilterItem} item Filter item model
+        */
+       mw.rcfilters.ui.FilterTagMultiselectWidget.prototype.onModelItemUpdate = function ( item ) {
+               if (
+                       item.isSelected() ||
+                       (
+                               this.model.isHighlightEnabled() &&
+                               item.isHighlightSupported() &&
+                               item.getHighlightColor()
+                       )
+               ) {
+                       this.addTag( item.getName(), item.getLabel() );
+               } else {
+                       this.removeTagByData( item.getName() );
+               }
+
+               // Re-evaluate reset state
+               this.reevaluateResetRestoreState();
+       };
+
+       /**
+        * @inheritdoc
+        */
+       mw.rcfilters.ui.FilterTagMultiselectWidget.prototype.isAllowedData = function ( data ) {
+               return (
+                       this.menu.getItemFromData( data ) &&
+                       !this.isDuplicateData( data )
+               );
+       };
+
+       /**
+        * @inheritdoc
+        */
+       mw.rcfilters.ui.FilterTagMultiselectWidget.prototype.onMenuChoose = function ( item ) {
+               this.controller.toggleFilterSelect( item.model.getName() );
+
+               // Select the tag if it exists, or reset selection otherwise
+               this.selectTag( this.getItemFromData( item.model.getName() ) );
+
+               this.focus();
+       };
+
+       /**
+        * Respond to highlightChange event
+        *
+        * @param {boolean} isHighlightEnabled Highlight is enabled
+        */
+       mw.rcfilters.ui.FilterTagMultiselectWidget.prototype.onModelHighlightChange = function ( isHighlightEnabled ) {
+               var highlightedItems = this.model.getHighlightedItems();
+
+               if ( isHighlightEnabled ) {
+                       // Add capsule widgets
+                       highlightedItems.forEach( function ( filterItem ) {
+                               this.addTag( filterItem.getName(), filterItem.getLabel() );
+                       }.bind( this ) );
+               } else {
+                       // Remove capsule widgets if they're not selected
+                       highlightedItems.forEach( function ( filterItem ) {
+                               if ( !filterItem.isSelected() ) {
+                                       this.removeTagByData( filterItem.getName() );
+                               }
+                       }.bind( this ) );
+               }
+       };
+
+       /**
+        * @inheritdoc
+        */
+       mw.rcfilters.ui.FilterTagMultiselectWidget.prototype.onTagSelect = function ( tagItem ) {
+               var widget = this,
+                       menuOption = this.menu.getItemFromData( tagItem.getData() ),
+                       oldInputValue = this.input.getValue();
+
+               // Reset input
+               this.input.setValue( '' );
+
+               // Parent method
+               mw.rcfilters.ui.FilterTagMultiselectWidget.parent.prototype.onTagSelect.call( this, tagItem );
+
+               this.menu.selectItem( menuOption );
+               this.selectTag( tagItem );
+
+               // Scroll to the item
+               if ( oldInputValue ) {
+                       // We're binding a 'once' to the itemVisibilityChange event
+                       // so this happens when the menu is ready after the items
+                       // are visible again, in case this is done right after the
+                       // user filtered the results
+                       this.getMenu().once(
+                               'itemVisibilityChange',
+                               function () { widget.scrollToTop( menuOption.$element ); }
+                       );
+               } else {
+                       this.scrollToTop( menuOption.$element );
+               }
+       };
+
+       /**
+        * Select a tag by reference. This is what OO.ui.SelectWidget is doing.
+        * If no items are given, reset selection from all.
+        *
+        * @param {mw.rcfilters.ui.FilterTagItemWidget} [item] Tag to select,
+        *  omit to deselect all
+        */
+       mw.rcfilters.ui.FilterTagMultiselectWidget.prototype.selectTag = function ( item ) {
+               var i, len, selected;
+
+               for ( i = 0, len = this.items.length; i < len; i++ ) {
+                       selected = this.items[ i ] === item;
+                       if ( this.items[ i ].isSelected() !== selected ) {
+                               this.items[ i ].toggleSelected( selected );
+                       }
+               }
+       };
+       /**
+        * @inheritdoc
+        */
+       mw.rcfilters.ui.FilterTagMultiselectWidget.prototype.onTagRemove = function ( tagItem ) {
+               // Parent method
+               mw.rcfilters.ui.FilterTagMultiselectWidget.parent.prototype.onTagRemove.call( this, tagItem );
+
+               this.controller.clearFilter( tagItem.getName() );
+
+               tagItem.destroy();
+       };
+
+       /**
+        * Respond to click event on the reset button
+        */
+       mw.rcfilters.ui.FilterTagMultiselectWidget.prototype.onResetButtonClick = function () {
+               if ( this.model.areCurrentFiltersEmpty() ) {
+                       // Reset to default filters
+                       this.controller.resetToDefaults();
+               } else {
+                       // Reset to have no filters
+                       this.controller.emptyFilters();
+               }
+       };
+
+       /**
+        * Reevaluate the restore state for the widget between setting to defaults and clearing all filters
+        */
+       mw.rcfilters.ui.FilterTagMultiselectWidget.prototype.reevaluateResetRestoreState = function () {
+               var defaultsAreEmpty = this.model.areDefaultFiltersEmpty(),
+                       currFiltersAreEmpty = this.model.areCurrentFiltersEmpty(),
+                       hideResetButton = currFiltersAreEmpty && defaultsAreEmpty;
+
+               this.resetButton.setIcon(
+                       currFiltersAreEmpty ? 'history' : 'trash'
+               );
+
+               this.resetButton.setLabel(
+                       currFiltersAreEmpty ? mw.msg( 'rcfilters-restore-default-filters' ) : ''
+               );
+               this.resetButton.setTitle(
+                       currFiltersAreEmpty ? null : mw.msg( 'rcfilters-clear-all-filters' )
+               );
+
+               this.resetButton.toggle( !hideResetButton );
+               this.emptyFilterMessage.toggle( currFiltersAreEmpty );
+       };
+
+       /**
+        * @inheritdoc
+        */
+       mw.rcfilters.ui.FilterTagMultiselectWidget.prototype.createMenuWidget = function ( menuConfig ) {
+               return new mw.rcfilters.ui.FilterFloatingMenuSelectWidget(
+                       this.controller,
+                       this.model,
+                       $.extend( {
+                               filterFromInput: true
+                       }, menuConfig )
+               );
+       };
+
+       /**
+        * Populate the menu from the model
+        */
+       mw.rcfilters.ui.FilterTagMultiselectWidget.prototype.populateFromModel = function () {
+               var widget = this,
+                       items = [];
+
+               // Reset
+               this.getMenu().clearItems();
+
+               $.each( this.model.getFilterGroups(), function ( groupName, groupModel ) {
+                       items.push(
+                               // Group section
+                               new mw.rcfilters.ui.FilterMenuSectionOptionWidget(
+                                       widget.controller,
+                                       groupModel,
+                                       {
+                                               $overlay: widget.$overlay
+                                       }
+                               )
+                       );
+
+                       // Add items
+                       widget.model.getGroupFilters( groupName ).forEach( function ( filterItem ) {
+                               items.push(
+                                       new mw.rcfilters.ui.FilterMenuOptionWidget(
+                                               widget.controller,
+                                               filterItem,
+                                               {
+                                                       $overlay: widget.$overlay
+                                               }
+                                       )
+                               );
+                       } );
+               } );
+
+               // Add all items to the menu
+               this.getMenu().addItems( items );
+       };
+
+       /**
+        * @inheritdoc
+        */
+       mw.rcfilters.ui.FilterTagMultiselectWidget.prototype.createTagItemWidget = function ( data ) {
+               var filterItem = this.model.getItemByName( data );
+
+               if ( filterItem ) {
+                       return new mw.rcfilters.ui.FilterTagItemWidget(
+                               this.controller,
+                               filterItem,
+                               {
+                                       $overlay: this.$overlay
+                               }
+                       );
+               }
+       };
+
+       /**
+        * Scroll the element to top within its container
+        *
+        * @private
+        * @param {jQuery} $element Element to position
+        * @param {number} [marginFromTop] When scrolling the entire widget to the top, leave this
+        *  much space (in pixels) above the widget.
+        */
+       mw.rcfilters.ui.FilterTagMultiselectWidget.prototype.scrollToTop = function ( $element, marginFromTop ) {
+               var container = OO.ui.Element.static.getClosestScrollableContainer( $element[ 0 ], 'y' ),
+                       pos = OO.ui.Element.static.getRelativePosition( $element, $( container ) ),
+                       containerScrollTop = $( container ).is( 'body, html' ) ? 0 : $( container ).scrollTop();
+
+               // Scroll to item
+               $( container ).animate( {
+                       scrollTop: containerScrollTop + pos.top - ( marginFromTop || 0 )
+               } );
+       };
+}( mediaWiki ) );
index 761fc65..b7ebf34 100644 (file)
@@ -13,7 +13,6 @@
         * @cfg {jQuery} [$overlay] A jQuery object serving as overlay for popups
         */
        mw.rcfilters.ui.FilterWrapperWidget = function MwRcfiltersUiFilterWrapperWidget( controller, model, config ) {
-               var $footer = $( '<div>' );
                config = config || {};
 
                // Parent
                this.model = model;
                this.$overlay = config.$overlay || this.$element;
 
-               this.filterPopup = new mw.rcfilters.ui.FiltersListWidget(
+               this.filterTagWidget = new mw.rcfilters.ui.FilterTagMultiselectWidget(
                        this.controller,
                        this.model,
-                       {
-                               label: mw.msg( 'rcfilters-filterlist-title' ),
-                               $overlay: this.$overlay
-                       }
+                       { $overlay: this.$overlay }
                );
 
-               $footer.append(
-                       new OO.ui.ButtonWidget( {
-                               framed: false,
-                               icon: 'feedback',
-                               flags: [ 'progressive' ],
-                               label: mw.msg( 'rcfilters-filterlist-feedbacklink' ),
-                               href: 'https://www.mediawiki.org/wiki/Help_talk:New_filters_for_edit_review'
-                       } ).$element
-               );
-
-               this.textInput = new OO.ui.TextInputWidget( {
-                       classes: [ 'mw-rcfilters-ui-filterWrapperWidget-search' ],
-                       icon: 'search',
-                       placeholder: mw.msg( 'rcfilters-search-placeholder' )
-               } );
-
-               this.capsule = new mw.rcfilters.ui.FilterCapsuleMultiselectWidget( controller, this.model, this.textInput, {
-                       $overlay: this.$overlay,
-                       popup: {
-                               $content: this.filterPopup.$element,
-                               $footer: $footer,
-                               classes: [ 'mw-rcfilters-ui-filterWrapperWidget-popup' ],
-                               width: 650,
-                               hideWhenOutOfView: false
-                       }
-               } );
-
-               // Events
-               this.model.connect( this, {
-                       initialize: 'onModelInitialize',
-                       itemUpdate: 'onModelItemUpdate'
-               } );
-               this.textInput.connect( this, {
-                       change: 'onTextInputChange',
-                       enter: 'onTextInputEnter'
-               } );
-               this.capsule.connect( this, { capsuleItemClick: 'onCapsuleItemClick' } );
-               this.capsule.popup.connect( this, { toggle: 'onCapsulePopupToggle' } );
-
                // Initialize
                this.$element
                        .addClass( 'mw-rcfilters-ui-filterWrapperWidget' )
-                       .append( this.capsule.$element, this.textInput.$element );
+                       .append( this.filterTagWidget.$element );
        };
 
        /* Initialization */
 
        OO.inheritClass( mw.rcfilters.ui.FilterWrapperWidget, OO.ui.Widget );
        OO.mixinClass( mw.rcfilters.ui.FilterWrapperWidget, OO.ui.mixin.PendingElement );
-
-       /**
-        * Respond to capsule item click and make the popup scroll down to the requested item
-        *
-        * @param {mw.rcfilters.ui.CapsuleItemWidget} item Clicked item
-        */
-       mw.rcfilters.ui.FilterWrapperWidget.prototype.onCapsuleItemClick = function ( item ) {
-               var filterName = item.getData(),
-                       // Find the item in the popup
-                       filterWidget = this.filterPopup.getItemWidget( filterName );
-
-               // Highlight item
-               this.filterPopup.select( filterName );
-               this.capsule.select( item );
-
-               this.capsule.popup.toggle( true );
-               this.scrollToTop( filterWidget.$element );
-       };
-
-       /**
-        * Respond to popup toggle event. Reset selection in the list when the popup is closed.
-        *
-        * @param {boolean} isVisible Popup is visible
-        */
-       mw.rcfilters.ui.FilterWrapperWidget.prototype.onCapsulePopupToggle = function ( isVisible ) {
-               if ( !isVisible ) {
-                       if ( !this.textInput.getValue() ) {
-                               // Only reset selection if we are not filtering
-                               this.filterPopup.resetSelection();
-                               this.capsule.resetSelection();
-                       }
-               } else {
-                       mw.hook( 'RcFilters.popup.open' ).fire( this.filterPopup.getSelectedFilter() );
-
-                       this.scrollToTop( this.capsule.$element, 10 );
-                       if ( !this.filterPopup.getSelectedFilter() ) {
-                               // No selection, scroll the popup list to top
-                               setTimeout( function () { this.capsule.popup.$body.scrollTop( 0 ); }.bind( this ), 0 );
-                       }
-               }
-       };
-
-       /**
-        * Respond to text input change
-        *
-        * @param {string} newValue Current value
-        */
-       mw.rcfilters.ui.FilterWrapperWidget.prototype.onTextInputChange = function ( newValue ) {
-               // Filter the results
-               this.filterPopup.filter( this.model.findMatches( newValue ) );
-
-               if ( !newValue ) {
-                       // If the value is empty, we didn't actually
-                       // filter anything. the filter method will run
-                       // and show all, but then will select the
-                       // top item - but in this case, no selection
-                       // should be made.
-                       this.filterPopup.resetSelection();
-               }
-               this.capsule.popup.clip();
-       };
-
-       /**
-        * Respond to text input enter event
-        */
-       mw.rcfilters.ui.FilterWrapperWidget.prototype.onTextInputEnter = function () {
-               var filter = this.filterPopup.getSelectedFilter();
-
-               // Toggle the filter
-               this.controller.toggleFilterSelect( filter );
-       };
-
-       /**
-        * Respond to model update event and set up the available filters to choose
-        * from.
-        */
-       mw.rcfilters.ui.FilterWrapperWidget.prototype.onModelInitialize = function () {
-               var wrapper = this;
-
-               // Add defaults to capsule. We have to do this
-               // after we added to the capsule menu, since that's
-               // how the capsule multiselect widget knows which
-               // object to add
-               this.model.getItems().forEach( function ( filterItem ) {
-                       if ( filterItem.isSelected() ) {
-                               wrapper.capsule.addItemByName( filterItem.getName() );
-                       }
-               } );
-       };
-
-       /**
-        * Respond to item update and reset the selection. This will make it so that
-        * any actual interaction with the system resets the selection state of any item.
-        */
-       mw.rcfilters.ui.FilterWrapperWidget.prototype.onModelItemUpdate = function () {
-               if ( !this.textInput.getValue() ) {
-                       this.filterPopup.resetSelection();
-               }
-       };
-
-       /**
-        * Scroll the element to top within its container
-        *
-        * @private
-        * @param {jQuery} $element Element to position
-        * @param {number} [marginFromTop] When scrolling the entire widget to the top, leave this
-        *  much space (in pixels) above the widget.
-        */
-       mw.rcfilters.ui.FilterWrapperWidget.prototype.scrollToTop = function ( $element, marginFromTop ) {
-               var container = OO.ui.Element.static.getClosestScrollableContainer( $element[ 0 ], 'y' ),
-                       pos = OO.ui.Element.static.getRelativePosition( $element, $( container ) ),
-                       containerScrollTop = $( container ).is( 'body, html' ) ? 0 : $( container ).scrollTop();
-
-               // Scroll to item
-               $( container ).animate( {
-                       scrollTop: containerScrollTop + pos.top - ( marginFromTop || 0 )
-               } );
-       };
 }( mediaWiki ) );
diff --git a/resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.FiltersListWidget.js b/resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.FiltersListWidget.js
deleted file mode 100644 (file)
index 4011e6d..0000000
+++ /dev/null
@@ -1,256 +0,0 @@
-( function ( mw, $ ) {
-       /**
-        * List displaying all filter groups
-        *
-        * @extends OO.ui.Widget
-        * @mixins OO.ui.mixin.GroupWidget
-        * @mixins OO.ui.mixin.LabelElement
-        *
-        * @constructor
-        * @param {mw.rcfilters.Controller} controller Controller
-        * @param {mw.rcfilters.dm.FiltersViewModel} model View model
-        * @param {Object} config Configuration object
-        */
-       mw.rcfilters.ui.FiltersListWidget = function MwRcfiltersUiFiltersListWidget( controller, model, config ) {
-               config = config || {};
-
-               // Parent
-               mw.rcfilters.ui.FiltersListWidget.parent.call( this, config );
-               // Mixin constructors
-               OO.ui.mixin.GroupWidget.call( this, config );
-               OO.ui.mixin.LabelElement.call( this, $.extend( {}, config, {
-                       $label: $( '<div>' )
-                               .addClass( 'mw-rcfilters-ui-filtersListWidget-title' )
-               } ) );
-
-               this.controller = controller;
-               this.model = model;
-               this.$overlay = config.$overlay || this.$element;
-               this.groups = {};
-               this.selected = null;
-
-               this.highlightButton = new OO.ui.ToggleButtonWidget( {
-                       icon: 'highlight',
-                       label: mw.message( 'rcfilters-highlightbutton-title' ).text(),
-                       classes: [ 'mw-rcfilters-ui-filtersListWidget-hightlightButton' ]
-               } );
-
-               this.noResultsLabel = new OO.ui.LabelWidget( {
-                       label: mw.msg( 'rcfilters-filterlist-noresults' ),
-                       classes: [ 'mw-rcfilters-ui-filtersListWidget-noresults' ]
-               } );
-
-               // Events
-               this.highlightButton.connect( this, { click: 'onHighlightButtonClick' } );
-               this.model.connect( this, {
-                       initialize: 'onModelInitialize',
-                       highlightChange: 'onModelHighlightChange'
-               } );
-
-               // Initialize
-               this.showNoResultsMessage( false );
-               this.$element
-                       .addClass( 'mw-rcfilters-ui-filtersListWidget' )
-                       .append(
-                               $( '<div>' )
-                                       .addClass( 'mw-rcfilters-ui-table' )
-                                       .addClass( 'mw-rcfilters-ui-filtersListWidget-header' )
-                                       .append(
-                                               $( '<div>' )
-                                                       .addClass( 'mw-rcfilters-ui-row' )
-                                                       .append(
-                                                               $( '<div>' )
-                                                                       .addClass( 'mw-rcfilters-ui-cell' )
-                                                                       .addClass( 'mw-rcfilters-ui-filtersListWidget-header-title' )
-                                                                       .append( this.$label ),
-                                                               $( '<div>' )
-                                                                       .addClass( 'mw-rcfilters-ui-cell' )
-                                                                       .addClass( 'mw-rcfilters-ui-filtersListWidget-header-highlight' )
-                                                                       .append( this.highlightButton.$element )
-                                                       )
-                                       ),
-                               // this.$label,
-                               this.$group
-                                       .addClass( 'mw-rcfilters-ui-filtersListWidget-group' ),
-                               this.noResultsLabel.$element
-                       );
-       };
-
-       /* Initialization */
-
-       OO.inheritClass( mw.rcfilters.ui.FiltersListWidget, OO.ui.Widget );
-       OO.mixinClass( mw.rcfilters.ui.FiltersListWidget, OO.ui.mixin.GroupWidget );
-       OO.mixinClass( mw.rcfilters.ui.FiltersListWidget, OO.ui.mixin.LabelElement );
-
-       /* Methods */
-
-       /**
-        * Respond to initialize event from the model
-        */
-       mw.rcfilters.ui.FiltersListWidget.prototype.onModelInitialize = function () {
-               var widget = this;
-
-               // Reset
-               this.clearItems();
-               this.groups = {};
-
-               this.addItems(
-                       Object.keys( this.model.getFilterGroups() ).map( function ( groupName ) {
-                               var groupWidget = new mw.rcfilters.ui.FilterGroupWidget(
-                                       widget.controller,
-                                       widget.model.getGroup( groupName ),
-                                       {
-                                               $overlay: widget.$overlay
-                                       }
-                               );
-
-                               widget.groups[ groupName ] = groupWidget;
-                               return groupWidget;
-                       } )
-               );
-       };
-
-       /**
-        * Respond to model highlight change event
-        *
-        * @param {boolean} highlightEnabled Highlight is enabled
-        */
-       mw.rcfilters.ui.FiltersListWidget.prototype.onModelHighlightChange = function ( highlightEnabled ) {
-               this.highlightButton.setActive( highlightEnabled );
-       };
-
-       /**
-        * Respond to highlight button click
-        */
-       mw.rcfilters.ui.FiltersListWidget.prototype.onHighlightButtonClick = function () {
-               this.controller.toggleHighlight();
-       };
-
-       /**
-        * Find the filter item widget that corresponds to the item name
-        *
-        * @param {string} itemName Filter name
-        * @return {mw.rcfilters.ui.FilterItemWidget} Filter widget
-        */
-       mw.rcfilters.ui.FiltersListWidget.prototype.getItemWidget = function ( itemName ) {
-               var filterItem = this.model.getItemByName( itemName ),
-                       // Find the group
-                       groupWidget = this.groups[ filterItem.getGroupName() ];
-
-               // Find the item inside the group
-               return groupWidget.getItemWidget( itemName );
-       };
-
-       /**
-        * Get the current selection
-        *
-        * @return {string|null} Selected filter. Null if none is selected.
-        */
-       mw.rcfilters.ui.FiltersListWidget.prototype.getSelectedFilter = function () {
-               return this.selected;
-       };
-
-       /**
-        * Mark an item widget as selected
-        *
-        * @param {string} itemName Filter name
-        */
-       mw.rcfilters.ui.FiltersListWidget.prototype.select = function ( itemName ) {
-               var filterWidget;
-
-               if ( this.selected !== itemName ) {
-                       // Unselect previous
-                       if ( this.selected ) {
-                               filterWidget = this.getItemWidget( this.selected );
-                               filterWidget.toggleSelected( false );
-                       }
-
-                       // Select new one
-                       this.selected = itemName;
-                       if ( this.selected ) {
-                               filterWidget = this.getItemWidget( this.selected );
-                               filterWidget.toggleSelected( true );
-                       }
-               }
-       };
-
-       /**
-        * Reset selection and remove selected states from all items
-        */
-       mw.rcfilters.ui.FiltersListWidget.prototype.resetSelection = function () {
-               if ( this.selected !== null ) {
-                       this.selected = null;
-                       this.getItems().forEach( function ( groupWidget ) {
-                               groupWidget.getItems().forEach( function ( filterItemWidget ) {
-                                       filterItemWidget.toggleSelected( false );
-                               } );
-                       } );
-               }
-       };
-
-       /**
-        * Switch between showing the 'no results' message for filtering results or the result list.
-        *
-        * @param {boolean} showNoResults Show no results message
-        */
-       mw.rcfilters.ui.FiltersListWidget.prototype.showNoResultsMessage = function ( showNoResults ) {
-               this.noResultsLabel.toggle( !!showNoResults );
-               this.$group.toggleClass( 'oo-ui-element-hidden', !!showNoResults );
-       };
-
-       /**
-        * Show only the items matching with the models in the given list
-        *
-        * @param {Object} groupItems An object of items to show
-        *  arranged by their group names
-        */
-       mw.rcfilters.ui.FiltersListWidget.prototype.filter = function ( groupItems ) {
-               var i, j, groupName, itemWidgets, topItem, isVisible,
-                       groupWidgets = this.getItems(),
-                       hasItemWithName = function ( itemArr, name ) {
-                               return !!itemArr.filter( function ( item ) {
-                                       return item.getName() === name;
-                               } ).length;
-                       };
-
-               this.resetSelection();
-
-               if ( $.isEmptyObject( groupItems ) ) {
-                       // No results. Hide everything, show only 'no results'
-                       // message
-                       this.showNoResultsMessage( true );
-                       return;
-               }
-
-               this.showNoResultsMessage( false );
-               for ( i = 0; i < groupWidgets.length; i++ ) {
-                       groupName = groupWidgets[ i ].getName();
-
-                       // If this group widget is in the filtered results,
-                       // show it - otherwise, hide it
-                       groupWidgets[ i ].toggle( !!groupItems[ groupName ] );
-
-                       if ( !groupItems[ groupName ] ) {
-                               // Continue to next group
-                               continue;
-                       }
-
-                       // We have items to show
-                       itemWidgets = groupWidgets[ i ].getItems();
-                       for ( j = 0; j < itemWidgets.length; j++ ) {
-                               isVisible = hasItemWithName( groupItems[ groupName ], itemWidgets[ j ].getName() );
-                               // Only show items that are in the filtered list
-                               itemWidgets[ j ].toggle( isVisible );
-
-                               if ( !topItem && isVisible ) {
-                                       topItem = itemWidgets[ j ];
-                               }
-                       }
-               }
-
-               // Select the first item
-               if ( topItem ) {
-                       this.select( topItem.getName() );
-               }
-       };
-}( mediaWiki, jQuery ) );
index ee18979..b09986f 100644 (file)
@@ -46,7 +46,9 @@ sub {
 /**
  * Block media items
  */
-figure[typeof*='mw:Image'] {
+figure[typeof*='mw:Image'],
+figure[typeof*='mw:Video'],
+figure[typeof*='mw:Audio'] {
        margin: 0;
 
        a {
@@ -109,7 +111,11 @@ figure[typeof*='mw:Image'] {
 }
 
 figure[typeof~='mw:Image/Thumb'],
-figure[typeof~='mw:Image/Frame'] {
+figure[typeof~='mw:Video/Thumb'],
+figure[typeof~='mw:Audio/Thumb'],
+figure[typeof~='mw:Image/Frame'],
+figure[typeof~='mw:Video/Frame'],
+figure[typeof~='mw:Audio/Frame'] {
        display: table;
        overflow: auto;
        text-align: center;
@@ -125,19 +131,28 @@ figure[typeof~='mw:Image/Frame'] {
 }
 
 figure[typeof~='mw:Image/Thumb'] > *:first-child > img,
-figure[typeof~='mw:Image/Frame'] > *:first-child > img {
+figure[typeof~='mw:Video/Thumb'] > *:first-child > video,
+figure[typeof~='mw:Audio/Thumb'] > *:first-child > video,
+figure[typeof~='mw:Image/Frame'] > *:first-child > img,
+figure[typeof~='mw:Video/Frame'] > *:first-child > video,
+figure[typeof~='mw:Audio/Frame'] > *:first-child > video {
        border: 1px solid #c8ccd1;
        margin: 3px;
        background: #fff;
 }
 
 /* Same as img.thumbborder in content.css */
-.mw-image-border > *:first-child > img {
+.mw-image-border > *:first-child > img,
+.mw-image-border > *:first-child > video {
        border: 1px solid #eaecf0;
 }
 
 /* Hide the caption for frameless and plain floated images */
 figure[typeof~='mw:Image/Frameless'] > figcaption,
-figure[typeof~='mw:Image'] > figcaption {
+figure[typeof~='mw:Video/Frameless'] > figcaption,
+figure[typeof~='mw:Audio/Frameless'] > figcaption,
+figure[typeof~='mw:Image'] > figcaption,
+figure[typeof~='mw:Video'] > figcaption,
+figure[typeof~='mw:Audio'] > figcaption {
        display: none;
 }
index 2be3bb2..c6d5082 100644 (file)
@@ -21,7 +21,7 @@ textarea {
 }
 
 .editOptions {
-       background-color: #f8f9fa;
+       background-color: #eaecf0;
        border: 1px solid #c8ccd1;
        border-top: 0;
        padding: 1em 1em 1.5em 1em;
index 0fa6610..84a9a96 100644 (file)
                        var hash = location.hash,
                                matchedElement, parentSection;
                        if ( hash.match( /^#mw-prefsection-[\w\-]+/ ) ) {
+                               mw.storage.session.remove( 'mwpreferences-prevTab' );
                                switchPrefTab( hash.replace( '#mw-prefsection-', '' ) );
                        } else if ( hash.match( /^#mw-[\w\-]+/ ) ) {
                                matchedElement = document.getElementById( hash.slice( 1 ) );
                                parentSection = $( matchedElement ).closest( '.prefsection' );
                                if ( parentSection.length ) {
+                                       mw.storage.session.remove( 'mwpreferences-prevTab' );
                                        // Switch to proper tab and scroll to selected item.
                                        switchPrefTab( parentSection.attr( 'id' ).replace( 'mw-prefsection-', '' ), 'noHash' );
                                        matchedElement.scrollIntoView();
                if ( previousTab ) {
                        switchPrefTab( previousTab, 'noHash' );
                        // Deleting the key, the tab states should be reset until we press Save
-                       mw.storage.session.remove( previousTab );
+                       mw.storage.session.remove( 'mwpreferences-prevTab' );
                }
 
                $( '#mw-prefs-form' ).on( 'submit', function () {
index bc752b5..2a47fa2 100644 (file)
 .mw-widget-mediaResultWidget-thumbnail {
        opacity: 0;
        display: inline-block;
-       /* stylelint-disable no-unsupported-browser-features */
        -webkit-transition: opacity 400ms;
        -moz-transition: opacity 400ms;
        transition: opacity 400ms;
-       /* stylelint-enable no-unsupported-browser-features */
 }
 
 .mw-widget-mediaResultWidget-done .mw-widget-mediaResultWidget-thumbnail,
@@ -35,7 +33,7 @@
 }
 
 .mw-widget-mediaResultWidget-crop {
-       background-size: cover; /* stylelint-disable-line no-unsupported-browser-features */
+       background-size: cover;
        background-position: center center;
 }
 
@@ -56,7 +54,7 @@
 .mw-widget-mediaResultWidget-error .mw-widget-mediaResultWidget-thumbnail {
        /* @embed */
        background-image: url( broken-image.png );
-       background-size: auto; /* stylelint-disable-line no-unsupported-browser-features */
+       background-size: auto;
        background-position: center center;
        background-repeat: no-repeat;
 }
@@ -69,7 +67,7 @@
        overflow: hidden;
        padding: 0.5em;
        color: #fff;
-       text-shadow: 1px 1px #000; /* stylelint-disable-line no-unsupported-browser-features */
+       text-shadow: 1px 1px #000;
        line-height: 1.125em;
        background-color: rgba( 0, 0, 0, 0.5 );
        text-overflow: ellipsis;
index c6938e8..5cbd2ec 100644 (file)
@@ -65,7 +65,7 @@
                this.$results.on( 'scroll', this.onResultsScroll.bind( this ) );
                this.$query.append( this.noItemsMessage.$element );
                this.results.connect( this, {
-                       add: 'onResultsAdd',
+                       change: 'onResultsChange',
                        remove: 'onResultsRemove'
                } );
 
         *
         * @param {mw.widgets.MediaResultWidget[]} items An array of item elements
         */
-       mw.widgets.MediaSearchWidget.prototype.onResultsAdd = function ( items ) {
+       mw.widgets.MediaSearchWidget.prototype.onResultsChange = function ( items ) {
                var search = this;
 
+               if ( !items.length ) {
+                       return;
+               }
+
                // Add method to a queue; this queue will only run when the widget
                // is visible
                this.layoutQueue.push( function () {
index b0c9f91..9edd0bd 100644 (file)
         */
        mw.widgets.ComplexNamespaceInputWidget.prototype.setDisabled = function ( disabled ) {
                mw.widgets.ComplexNamespaceInputWidget.parent.prototype.setDisabled.call( this, disabled );
-               this.namespace.setDisabled( disabled );
-
+               if ( this.namespace ) {
+                       this.namespace.setDisabled( disabled );
+               }
                if ( this.invert ) {
                        this.invert.setDisabled( disabled );
                }
                if ( this.associated ) {
                        this.associated.setDisabled( disabled );
                }
+               return this;
        };
 
 }( jQuery, mediaWiki ) );
index 030fbb0..a01fbde 100644 (file)
         */
        mw.widgets.ComplexTitleInputWidget.prototype.setDisabled = function ( disabled ) {
                mw.widgets.ComplexTitleInputWidget.parent.prototype.setDisabled.call( this, disabled );
-               this.namespace.setDisabled( disabled );
-               this.title.setDisabled( disabled );
+               if ( this.namespace ) {
+                       this.namespace.setDisabled( disabled );
+               }
+
+               if ( this.title ) {
+                       this.title.setDisabled( disabled );
+               }
+               return this;
        };
 
 }( jQuery, mediaWiki ) );
index 86a9a0a..d172a39 100644 (file)
                                registry[ module ].state = 'executing';
 
                                runScript = function () {
-                                       var script, markModuleReady, nestedAddScript, legacyWait, implicitDependencies,
-                                               // Expand to include dependencies since we have to exclude both legacy modules
-                                               // and their dependencies from the legacyWait (to prevent a circular dependency).
-                                               legacyModules = resolve( mw.config.get( 'wgResourceLoaderLegacyModules', [] ) );
+                                       var script, markModuleReady, nestedAddScript, implicitDependencies, implicitWait;
 
                                        script = registry[ module ].script;
                                        markModuleReady = function () {
                                                } );
                                        };
 
-                                       implicitDependencies = ( $.inArray( module, legacyModules ) !== -1 ) ?
-                                               [] :
-                                               legacyModules;
+                                       implicitDependencies = [];
 
                                        if ( module === 'user' ) {
                                                // Implicit dependency on the site module. Not real dependency because
                                                implicitDependencies.push( 'site' );
                                        }
 
-                                       legacyWait = implicitDependencies.length ?
+                                       implicitWait = implicitDependencies.length ?
                                                mw.loader.using( implicitDependencies ) :
                                                $.Deferred().resolve();
 
-                                       legacyWait.always( function () {
+                                       implicitWait.always( function () {
                                                try {
                                                        if ( Array.isArray( script ) ) {
                                                                nestedAddScript( script, markModuleReady, 0 );
         * @member mw.hook
         */
        $( function () {
-               var loading = $.grep( mw.loader.getModuleNames(), function ( module ) {
+               var loading, modules;
+
+               modules = $.grep( mw.loader.getModuleNames(), function ( module ) {
                        return mw.loader.getState( module ) === 'loading';
                } );
                // We only need a callback, not any actual module. First try a single using()
                // for all loading modules. If one fails, fall back to tracking each module
                // separately via $.when(), this is expensive.
-               loading = mw.loader.using( loading ).then( null, function () {
-                       var all = loading.map( function ( module ) {
+               loading = mw.loader.using( modules ).then( null, function () {
+                       var all = modules.map( function ( module ) {
                                return mw.loader.using( module ).then( null, function () {
                                        return $.Deferred().resolve();
                                } );
index 147de92..633798d 100644 (file)
@@ -1,7 +1,8 @@
 .mw-notification-area {
        top: 0;
        right: 0;
-       padding: 1em 1em 0 0;
+       /* Padding on all sides so drop shadows aren't cut by overflow: hidden */
+       padding: 1em;
        width: 20em;
        line-height: 1.35;
        z-index: 10000;
index 4849f5a..d36c4a0 100644 (file)
                defaults: {
                        autoHide: true,
                        autoHideSeconds: 'short',
-                       tag: false,
-                       title: undefined,
-                       type: false
+                       tag: null,
+                       title: null,
+                       type: null
                },
 
                /**
index 0955c23..9ef6c43 100644 (file)
@@ -3,56 +3,60 @@
 
        // Table of contents toggle
        mw.hook( 'wikipage.content' ).add( function ( $content ) {
-               var $toc, $tocTitle, $tocToggleLink, $tocList, hideToc;
-               $toc = $content.find( '#toc' );
-               $tocTitle = $content.find( '#toctitle' );
-               $tocToggleLink = $content.find( '#togglelink' );
-               $tocList = $toc.find( 'ul' ).eq( 0 );
+               $content.find( '.toc' ).addBack( '.toc' ).each( function () {
+                       var hideToc,
+                               $this = $( this ),
+                               // .toctitle is new so may not exist in HTML caches for a few weeks,
+                               // so keep checking for #toctitle for now
+                               $tocTitle = $this.find( '.toctitle, #toctitle' ),
+                               $tocToggleLink = $this.find( '.togglelink' ),
+                               $tocList = $this.find( 'ul' ).eq( 0 );
 
-               // Hide/show the table of contents element
-               function toggleToc() {
-                       if ( $tocList.is( ':hidden' ) ) {
-                               $tocList.slideDown( 'fast' );
-                               $tocToggleLink.text( mw.msg( 'hidetoc' ) );
-                               $toc.removeClass( 'tochidden' );
-                               mw.cookie.set( 'hidetoc', null );
-                       } else {
-                               $tocList.slideUp( 'fast' );
-                               $tocToggleLink.text( mw.msg( 'showtoc' ) );
-                               $toc.addClass( 'tochidden' );
-                               mw.cookie.set( 'hidetoc', '1' );
+                       // Hide/show the table of contents element
+                       function toggleToc() {
+                               if ( $tocList.is( ':hidden' ) ) {
+                                       $tocList.slideDown( 'fast' );
+                                       $tocToggleLink.text( mw.msg( 'hidetoc' ) );
+                                       $this.removeClass( 'tochidden' );
+                                       mw.cookie.set( 'hidetoc', null );
+                               } else {
+                                       $tocList.slideUp( 'fast' );
+                                       $tocToggleLink.text( mw.msg( 'showtoc' ) );
+                                       $this.addClass( 'tochidden' );
+                                       mw.cookie.set( 'hidetoc', '1' );
+                               }
                        }
-               }
 
-               // Only add it if there is a complete TOC and it doesn't
-               // have a toggle added already
-               if ( $toc.length && $tocTitle.length && $tocList.length && !$tocToggleLink.length ) {
-                       hideToc = mw.cookie.get( 'hidetoc' ) === '1';
+                       // Only add it if there is a complete TOC and it doesn't
+                       // have a toggle added already
+                       if ( $tocTitle.length && $tocList.length && !$tocToggleLink.length ) {
+                               hideToc = mw.cookie.get( 'hidetoc' ) === '1';
 
-                       $tocToggleLink = $( '<a role="button" tabindex="0" id="togglelink"></a>' )
-                               .text( mw.msg( hideToc ? 'showtoc' : 'hidetoc' ) )
-                               .on( 'click keypress', function ( e ) {
-                                       if (
-                                               e.type === 'click' ||
-                                               e.type === 'keypress' && e.which === 13
-                                       ) {
-                                               toggleToc();
-                                       }
-                               } );
+                               $tocToggleLink = $( '<a role="button" tabindex="0" class="togglelink"></a>' )
+                                       .text( mw.msg( hideToc ? 'showtoc' : 'hidetoc' ) )
+                                       .on( 'click keypress', function ( e ) {
+                                               if (
+                                                       e.type === 'click' ||
+                                                       e.type === 'keypress' && e.which === 13
+                                               ) {
+                                                       toggleToc();
+                                               }
+                                       } );
 
-                       $tocTitle.append(
-                               $tocToggleLink
-                                       .wrap( '<span class="toctoggle"></span>' )
-                                       .parent()
-                                               .prepend( '&nbsp;[' )
-                                               .append( ']&nbsp;' )
-                       );
+                               $tocTitle.append(
+                                       $tocToggleLink
+                                               .wrap( '<span class="toctoggle"></span>' )
+                                               .parent()
+                                                       .prepend( '&nbsp;[' )
+                                                       .append( ']&nbsp;' )
+                               );
 
-                       if ( hideToc ) {
-                               $tocList.hide();
-                               $toc.addClass( 'tochidden' );
+                               if ( hideToc ) {
+                                       $tocList.hide();
+                                       $this.addClass( 'tochidden' );
+                               }
                        }
-               }
+               } );
        } );
 
 }( mediaWiki, jQuery ) );
index da2c08f..5f6eb25 100644 (file)
@@ -1,4 +1,5 @@
 #toc.tochidden,
+.toc.tochidden,
 .toctoggle {
        display: none;
 }
index e8ccba0..e0df772 100644 (file)
@@ -1,7 +1,8 @@
 /**
- * Code in this file MUST work on even the most ancient of browsers!
+ * This file is where we decide whether to initialise the Grade A run-time.
  *
- * This file is where we decide whether to initialise the modern run-time.
+ * - Beware: This file MUST parse without errors on even the most ancient of browsers!
+ * - Beware: Do not call mwNow before the isCompatible() check.
  */
 
 /* global mw, $VARS, $CODE */
@@ -18,9 +19,7 @@ var mwPerformance = ( window.performance && performance.mark ) ? performance : {
                        function () { return Date.now(); };
        }() ),
        // eslint-disable-next-line no-unused-vars
-       mediaWikiLoadStart = mwNow();
-
-mwPerformance.mark( 'mwLoadStart' );
+       mediaWikiLoadStart;
 
 /**
  * See <https://www.mediawiki.org/wiki/Compatibility#Browsers>
@@ -36,7 +35,7 @@ mwPerformance.mark( 'mwLoadStart' );
  * - IE 10+
  * - Firefox 4+
  * - Safari 5+
- * - Opera 15+
+ * - Opera 12.10+
  * - Mobile Safari 5.1+ (iOS 5+)
  * - Android 4.1+
  *
@@ -153,6 +152,9 @@ function isCompatible( str ) {
                };
        }
 
+       mediaWikiLoadStart = mwNow();
+       mwPerformance.mark( 'mwLoadStart' );
+
        script = document.createElement( 'script' );
        script.src = $VARS.baseModulesUri;
        script.onload = script.onreadystatechange = function () {
index b0f6bff..89ccf1b 100644 (file)
@@ -2,7 +2,7 @@ class EditPage
   include PageObject
 
   text_area(:edit_page_content, id: 'wpTextbox1')
-  button(:preview_button, id: 'wpPreview')
-  button(:show_changes_button, id: 'wpDiff')
-  button(:save_button, id: 'wpSave')
+  button(:preview_button, css: '#wpPreview > input')
+  button(:show_changes_button, css: '#wpDiff > input')
+  button(:save_button, css: '#wpSave > input')
 end
index 6d1fdf5..5457696 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 
+use Wikimedia\TestingAccessWrapper;
+
 class MWHttpRequestTestCase extends PHPUnit_Framework_TestCase {
        protected static $httpEngine;
        protected $oldHttpEngine;
index 7bf2ce2..e12c136 100644 (file)
@@ -15458,7 +15458,7 @@ Section headings with TOC
 Some text
 ===Another headline===
 !! html
-<div id="toc" class="toc"><div id="toctitle"><h2>Contents</h2></div>
+<div id="toc" class="toc"><div id="toctitle" class="toctitle"><h2>Contents</h2></div>
 <ul>
 <li class="toclevel-1 tocsection-1"><a href="#Headline_1"><span class="tocnumber">1</span> <span class="toctext">Headline 1</span></a>
 <ul>
@@ -15501,7 +15501,7 @@ __FORCETOC__
 == Headline 2 ==
 == Headline ==
 !! html/php
-<div id="toc" class="toc"><div id="toctitle"><h2>Contents</h2></div>
+<div id="toc" class="toc"><div id="toctitle" class="toctitle"><h2>Contents</h2></div>
 <ul>
 <li class="toclevel-1 tocsection-1"><a href="#Headline_2"><span class="tocnumber">1</span> <span class="toctext">Headline 2</span></a></li>
 <li class="toclevel-1 tocsection-2"><a href="#Headline"><span class="tocnumber">2</span> <span class="toctext">Headline</span></a></li>
@@ -15532,7 +15532,7 @@ Handling of sections up to level 6 and beyond
 ========= Level 9 Heading=========
 ========== Level 10 Heading==========
 !! html
-<div id="toc" class="toc"><div id="toctitle"><h2>Contents</h2></div>
+<div id="toc" class="toc"><div id="toctitle" class="toctitle"><h2>Contents</h2></div>
 <ul>
 <li class="toclevel-1 tocsection-1"><a href="#Level_1_Heading"><span class="tocnumber">1</span> <span class="toctext">Level 1 Heading</span></a>
 <ul>
@@ -15585,7 +15585,7 @@ TOC regression (T11764)
 == title 2 ==
 === title 2.1 ===
 !! html
-<div id="toc" class="toc"><div id="toctitle"><h2>Contents</h2></div>
+<div id="toc" class="toc"><div id="toctitle" class="toctitle"><h2>Contents</h2></div>
 <ul>
 <li class="toclevel-1 tocsection-1"><a href="#title_1"><span class="tocnumber">1</span> <span class="toctext">title 1</span></a>
 <ul>
@@ -15620,7 +15620,7 @@ TOC for heading containing <span id="..."></span> (T96153)
 __FORCETOC__
 ==<span id="old-anchor"></span>New title==
 !! html/php
-<div id="toc" class="toc"><div id="toctitle"><h2>Contents</h2></div>
+<div id="toc" class="toc"><div id="toctitle" class="toctitle"><h2>Contents</h2></div>
 <ul>
 <li class="toclevel-1 tocsection-1"><a href="#New_title"><span class="tocnumber">1</span> <span class="toctext">New title</span></a></li>
 </ul>
@@ -15642,7 +15642,7 @@ wgMaxTocLevel=3
 == title 2 ==
 === title 2.1 ===
 !! html
-<div id="toc" class="toc"><div id="toctitle"><h2>Contents</h2></div>
+<div id="toc" class="toc"><div id="toctitle" class="toctitle"><h2>Contents</h2></div>
 <ul>
 <li class="toclevel-1 tocsection-1"><a href="#title_1"><span class="tocnumber">1</span> <span class="toctext">title 1</span></a>
 <ul>
@@ -15678,7 +15678,7 @@ wgMaxTocLevel=3
 ====Section 1.1.1.1====
 ==Section 2==
 !! html
-<div id="toc" class="toc"><div id="toctitle"><h2>Contents</h2></div>
+<div id="toc" class="toc"><div id="toctitle" class="toctitle"><h2>Contents</h2></div>
 <ul>
 <li class="toclevel-1 tocsection-1"><a href="#Section_1"><span class="tocnumber">1</span> <span class="toctext">Section 1</span></a>
 <ul>
@@ -15771,7 +15771,7 @@ __TOC__
 === title 1.1 ===
 == title 2 ==
 !! html
-<div id="toc" class="toc"><div id="toctitle"><h2>Contents</h2></div>
+<div id="toc" class="toc"><div id="toctitle" class="toctitle"><h2>Contents</h2></div>
 <ul>
 <li class="toclevel-1 tocsection-1"><a href="#title_1"><span class="tocnumber">1</span> <span class="toctext">title 1</span></a>
 <ul>
@@ -15838,7 +15838,7 @@ section 5
 !! html
 <p>The tooltips shall not show entities to the user (ie. be double escaped)
 </p>
-<div id="toc" class="toc"><div id="toctitle"><h2>Contents</h2></div>
+<div id="toc" class="toc"><div id="toctitle" class="toctitle"><h2>Contents</h2></div>
 <ul>
 <li class="toclevel-1 tocsection-1"><a href="#text_.3E_text"><span class="tocnumber">1</span> <span class="toctext">text &gt; text</span></a></li>
 <li class="toclevel-1 tocsection-2"><a href="#text_.3C_text"><span class="tocnumber">2</span> <span class="toctext">text &lt; text</span></a></li>
@@ -15897,7 +15897,7 @@ section 6
 !! html
 <p>Id should not contain + for spaces
 </p>
-<div id="toc" class="toc"><div id="toctitle"><h2>Contents</h2></div>
+<div id="toc" class="toc"><div id="toctitle" class="toctitle"><h2>Contents</h2></div>
 <ul>
 <li class="toclevel-1 tocsection-1"><a href="#Space_between_Text"><span class="tocnumber">1</span> <span class="toctext">Space between Text</span></a></li>
 <li class="toclevel-1 tocsection-2"><a href="#Space-Entity_between_Text"><span class="tocnumber">2</span> <span class="toctext">Space-Entity&#32;between&#32;Text</span></a></li>
@@ -15943,7 +15943,7 @@ Headers with excess '=' characters
 =''italic'' heading==
 ==''italic'' heading=
 !! html
-<div id="toc" class="toc"><div id="toctitle"><h2>Contents</h2></div>
+<div id="toc" class="toc"><div id="toctitle" class="toctitle"><h2>Contents</h2></div>
 <ul>
 <li class="toclevel-1 tocsection-1"><a href="#foo.3D"><span class="tocnumber">1</span> <span class="toctext">foo=</span></a></li>
 <li class="toclevel-1 tocsection-2"><a href="#.3Dfoo"><span class="tocnumber">2</span> <span class="toctext">=foo</span></a></li>
@@ -15973,7 +15973,7 @@ HTML headers vs TOC (T25393)
 == Header 2.2 ==
 __NOEDITSECTION__
 !! html
-<div id="toc" class="toc"><div id="toctitle"><h2>Contents</h2></div>
+<div id="toc" class="toc"><div id="toctitle" class="toctitle"><h2>Contents</h2></div>
 <ul>
 <li class="toclevel-1"><a href="#Header_1"><span class="tocnumber">1</span> <span class="toctext">Header 1</span></a>
 <ul>
@@ -17751,7 +17751,7 @@ Fuzz testing: Parser14
 http://__TOC__
 !! html
 <h2><span class="mw-headline" id="onmouseover.3D">onmouseover=</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: onmouseover=">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
-http://<div id="toc" class="toc"><div id="toctitle"><h2>Contents</h2></div>
+http://<div id="toc" class="toc"><div id="toctitle" class="toctitle"><h2>Contents</h2></div>
 <ul>
 <li class="toclevel-1 tocsection-1"><a href="#onmouseover.3D"><span class="tocnumber">1</span> <span class="toctext">onmouseover=</span></a></li>
 </ul>
@@ -17762,7 +17762,7 @@ http://<div id="toc" class="toc"><div id="toctitle"><h2>Contents</h2></div>
 <h2><span class="mw-headline" id="onmouseover.3D">onmouseover=</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: onmouseover=">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
 <p>http://</p>
 <div id="toc" class="toc">
-<div id="toctitle">
+<div id="toctitle" class="toctitle">
 <h2>Contents</h2>
 </div>
 <ul>
@@ -19129,6 +19129,10 @@ File:File:Foobar.jpg
                </div></li>
 </ul>
 
+!! html/parsoid
+<ul class="gallery mw-gallery-traditional" type="123" typeof="mw:Extension/gallery" about="#mwt2" data-mw='{"name":"gallery","attrs":{"type":"123","summary":"345"},"body":{"extsrc":"\nFile:File:Foobar.jpg\n"}}'>
+<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 style="vertical-align: middle; display: inline-block;">File:File:Foobar.jpg</span></div><div class="gallerytext"></div></li>
+</ul>
 !! end
 
 ## Parsoid thinks the "centre" here is a property, not a caption.
@@ -19676,17 +19680,17 @@ File:Test.png
 !! end
 
 !! test
-Gallery with class attribute
+Gallery with class and style attributes
 !! options
 parsoid={
   "nativeGallery": true
 }
 !! wikitext
-<gallery class="center">
+<gallery class="center" style="text-align: center;">
 File:Foobar.jpg
 </gallery>
 !! html/php
-<ul class="gallery mw-gallery-traditional center">
+<ul class="gallery mw-gallery-traditional center" style="text-align: 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">
@@ -19695,11 +19699,36 @@ File:Foobar.jpg
 </ul>
 
 !! html/parsoid
-<ul class="gallery mw-gallery-traditional center" typeof="mw:Extension/gallery" about="#mwt2" data-mw='{"name":"gallery","attrs":{"class":"center"},"body":{}}'>
+<ul class="gallery mw-gallery-traditional center" style="text-align: center;" typeof="mw:Extension/gallery" about="#mwt2" data-mw='{"name":"gallery","attrs":{"class":"center","style":"text-align: 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
+Gallery in slideshow mode
+!! options
+parsoid={
+  "nativeGallery": true
+}
+!! wikitext
+<gallery mode="slideshow" showthumbnails="">
+File:Foobar.jpg
+</gallery>
+!! html/php
+<ul class="gallery mw-gallery-slideshow" data-showthumbnails="1">
+               <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-slideshow" data-showthumbnails="1" typeof="mw:Extension/gallery" about="#mwt2" data-mw='{"name":"gallery","attrs":{"mode":"slideshow","showthumbnails":""},"body":{}}'>
+<li class="gallerybox" style="width: 155px;"><div class="thumb" style="width: 150px;"><span typeof="mw:Image"><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
@@ -20216,7 +20245,7 @@ Out-of-order TOC heading levels
 =====5=====
 ==2==
 !! html
-<div id="toc" class="toc"><div id="toctitle"><h2>Contents</h2></div>
+<div id="toc" class="toc"><div id="toctitle" class="toctitle"><h2>Contents</h2></div>
 <ul>
 <li class="toclevel-1 tocsection-1"><a href="#2"><span class="tocnumber">1</span> <span class="toctext">2</span></a>
 <ul>
@@ -22198,7 +22227,7 @@ title=[[Main Page]]
 __TOC__
 == ''Lost'' episodes ==
 !! html
-<div id="toc" class="toc"><div id="toctitle"><h2>Contents</h2></div>
+<div id="toc" class="toc"><div id="toctitle" class="toctitle"><h2>Contents</h2></div>
 <ul>
 <li class="toclevel-1 tocsection-1"><a href="#Lost_episodes"><span class="tocnumber">1</span> <span class="toctext"><i>Lost</i> episodes</span></a></li>
 </ul>
@@ -22216,7 +22245,7 @@ title=[[Main Page]]
 __TOC__
 == '''should be bold''' then normal text ==
 !! html
-<div id="toc" class="toc"><div id="toctitle"><h2>Contents</h2></div>
+<div id="toc" class="toc"><div id="toctitle" class="toctitle"><h2>Contents</h2></div>
 <ul>
 <li class="toclevel-1 tocsection-1"><a href="#should_be_bold_then_normal_text"><span class="tocnumber">1</span> <span class="toctext"><b>should be bold</b> then normal text</span></a></li>
 </ul>
@@ -22234,7 +22263,7 @@ title=[[Main Page]]
 __TOC__
 == Image [[Image:foobar.jpg]] ==
 !! html
-<div id="toc" class="toc"><div id="toctitle"><h2>Contents</h2></div>
+<div id="toc" class="toc"><div id="toctitle" class="toctitle"><h2>Contents</h2></div>
 <ul>
 <li class="toclevel-1 tocsection-1"><a href="#Image"><span class="tocnumber">1</span> <span class="toctext">Image</span></a></li>
 </ul>
@@ -22252,7 +22281,7 @@ title=[[Main Page]]
 __TOC__
 == <blockquote>Quote</blockquote> ==
 !! html
-<div id="toc" class="toc"><div id="toctitle"><h2>Contents</h2></div>
+<div id="toc" class="toc"><div id="toctitle" class="toctitle"><h2>Contents</h2></div>
 <ul>
 <li class="toclevel-1 tocsection-1"><a href="#Quote"><span class="tocnumber">1</span> <span class="toctext">Quote</span></a></li>
 </ul>
@@ -22263,7 +22292,7 @@ __TOC__
 !! html+tidy
 <p></p>
 <div id="toc" class="toc">
-<div id="toctitle">
+<div id="toctitle" class="toctitle">
 <h2>Contents</h2>
 </div>
 <ul>
@@ -22288,7 +22317,7 @@ __TOC__
 <small>Hanc marginis exiguitas non caperet.</small>
 QED
 !! html
-<div id="toc" class="toc"><div id="toctitle"><h2>Contents</h2></div>
+<div id="toc" class="toc"><div id="toctitle" class="toctitle"><h2>Contents</h2></div>
 <ul>
 <li class="toclevel-1 tocsection-1"><a href="#Proof:_2_.3C_3"><span class="tocnumber">1</span> <span class="toctext">Proof: 2 &lt; 3</span></a></li>
 </ul>
@@ -22308,7 +22337,7 @@ __TOC__
 
 == <i>Foo</i> <blockquote>Bar</blockquote> ==
 !! html
-<div id="toc" class="toc"><div id="toctitle"><h2>Contents</h2></div>
+<div id="toc" class="toc"><div id="toctitle" class="toctitle"><h2>Contents</h2></div>
 <ul>
 <li class="toclevel-1 tocsection-1"><a href="#Foo_Bar"><span class="tocnumber">1</span> <span class="toctext"><i>Foo</i> <b>Bar</b></span></a></li>
 <li class="toclevel-1 tocsection-2"><a href="#Foo_Bar_2"><span class="tocnumber">2</span> <span class="toctext"><i>Foo</i> Bar</span></a></li>
@@ -22321,7 +22350,7 @@ __TOC__
 !! html+tidy
 <p></p>
 <div id="toc" class="toc">
-<div id="toctitle">
+<div id="toctitle" class="toctitle">
 <h2>Contents</h2>
 </div>
 <ul>
@@ -22350,7 +22379,7 @@ __TOC__
 
 == <sup class="a > b">Evilbye</sup> ==
 !! html/php
-<div id="toc" class="toc"><div id="toctitle"><h2>Contents</h2></div>
+<div id="toc" class="toc"><div id="toctitle" class="toctitle"><h2>Contents</h2></div>
 <ul>
 <li class="toclevel-1 tocsection-1"><a href="#Hello"><span class="tocnumber">1</span> <span class="toctext"><sup>Hello</sup></span></a></li>
 <li class="toclevel-1 tocsection-2"><a href="#b.22.3EEvilbye"><span class="tocnumber">2</span> <span class="toctext"><sup> b"&gt;Evilbye</sup></span></a></li>
@@ -22381,7 +22410,7 @@ __TOC__
 
 == <span dir="ltr" style="font-style: italic">Attributes after dir on these span tags must be deleted from the TOC</span> ==
 !! html
-<div id="toc" class="toc"><div id="toctitle"><h2>Contents</h2></div>
+<div id="toc" class="toc"><div id="toctitle" class="toctitle"><h2>Contents</h2></div>
 <ul>
 <li class="toclevel-1 tocsection-1"><a href="#C.2B.2B"><span class="tocnumber">1</span> <span class="toctext"><span dir="ltr">C++</span></span></a></li>
 <li class="toclevel-1 tocsection-2"><a href="#.D7.96.D7.91.D7.A0.D7.92.21"><span class="tocnumber">2</span> <span class="toctext"><span dir="rtl">זבנג!</span></span></a></li>
@@ -22405,7 +22434,7 @@ T74884: bdi element in ToC
 __TOC__
 == <bdi>test</bdi> ==
 !! html
-<div id="toc" class="toc"><div id="toctitle"><h2>Contents</h2></div>
+<div id="toc" class="toc"><div id="toctitle" class="toctitle"><h2>Contents</h2></div>
 <ul>
 <li class="toclevel-1 tocsection-1"><a href="#test"><span class="tocnumber">1</span> <span class="toctext"><bdi>test</bdi></span></a></li>
 </ul>
@@ -22421,7 +22450,7 @@ T35715: s/strike element in ToC
 __TOC__
 == <s>test</s> test <strike>test</strike> ==
 !! html
-<div id="toc" class="toc"><div id="toctitle"><h2>Contents</h2></div>
+<div id="toc" class="toc"><div id="toctitle" class="toctitle"><h2>Contents</h2></div>
 <ul>
 <li class="toclevel-1 tocsection-1"><a href="#test_test_test"><span class="tocnumber">1</span> <span class="toctext"><s>test</s> test <strike>test</strike></span></a></li>
 </ul>
@@ -22440,7 +22469,7 @@ Empty <p> tag in TOC, removed by Sanitizer (T92892)
 __TOC__
 == x ==
 !! html
-<div id="toc" class="toc"><div id="toctitle"><h2>Contents</h2></div>
+<div id="toc" class="toc"><div id="toctitle" class="toctitle"><h2>Contents</h2></div>
 <ul>
 <li class="toclevel-1 tocsection-1"><a href="#x"><span class="tocnumber">1</span> <span class="toctext">x</span></a></li>
 </ul>
@@ -22451,7 +22480,7 @@ __TOC__
 !! html+tidy
 <p></p>
 <div id="toc" class="toc">
-<div id="toctitle">
+<div id="toctitle" class="toctitle">
 <h2>Contents</h2>
 </div>
 <ul>
 |}
 !! end
 
+!! test
+Anchor without href scenarios
+!! options
+parsoid={ "modes": ["html2wt"], "suppressErrors": true }
+!! html/parsoid
+<a class="bc"></a>
+<a class="no">dice</a>
+<a name="foo"></a>
+!! wikitext
+
+dice
+<span name="foo"></span>
+!! end
+
 # -----------------------------------------------------------------
 # End of section for Parsoid-only html2wt tests for serialization
 # of new content
index bb7267a..bc9f97c 100644 (file)
@@ -1,9 +1,11 @@
 <?php
+
 use MediaWiki\Logger\LegacySpi;
 use MediaWiki\Logger\LoggerFactory;
 use MediaWiki\Logger\MonologSpi;
 use MediaWiki\MediaWikiServices;
 use Psr\Log\LoggerInterface;
+use Wikimedia\TestingAccessWrapper;
 
 /**
  * @since 1.18
@@ -1298,7 +1300,7 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
         */
        public function __call( $func, $args ) {
                static $compatibility = [
-                       'assertEmpty' => 'assertEmpty2', // assertEmpty was added in phpunit 3.7.32
+                       'createMock' => 'createMock2',
                ];
 
                if ( isset( $compatibility[$func] ) ) {
@@ -1309,12 +1311,20 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
        }
 
        /**
-        * Used as a compatibility method for phpunit < 3.7.32
-        * @param string $value
-        * @param string $msg
+        * Return a test double for the specified class.
+        *
+        * @param string $originalClassName
+        * @return PHPUnit_Framework_MockObject_MockObject
+        * @throws Exception
         */
-       private function assertEmpty2( $value, $msg ) {
-               $this->assertTrue( $value == '', $msg );
+       private function createMock2( $originalClassName ) {
+               return $this->getMockBuilder( $originalClassName )
+                       ->disableOriginalConstructor()
+                       ->disableOriginalClone()
+                       ->disableArgumentCloning()
+                       // New in phpunit-mock-objects 3.2 (phpunit 5.4.0)
+                       // ->disallowMockingUnknownTypes()
+                       ->getMock();
        }
 
        private static function unprefixTable( &$tableName, $ind, $prefix ) {
index 68b91bf..a8a8f4d 100644 (file)
@@ -27,6 +27,7 @@ abstract class ResourceLoaderTestCase extends MediaWikiTestCase {
                $options += [
                        'lang' => 'en',
                        'dir' => 'ltr',
+                       'skin' => 'vector',
                        'modules' => 'startup',
                        'only' => 'scripts',
                ];
@@ -35,7 +36,7 @@ abstract class ResourceLoaderTestCase extends MediaWikiTestCase {
                                'lang' => $options['lang'],
                                'modules' => $options['modules'],
                                'only' => $options['only'],
-                               'skin' => 'vector',
+                               'skin' => $options['skin'],
                                'target' => 'phpunit',
                ] );
                $ctx = $this->getMockBuilder( 'ResourceLoaderContext' )
diff --git a/tests/phpunit/data/helpers/WellProtectedClass.php b/tests/phpunit/data/helpers/WellProtectedClass.php
deleted file mode 100644 (file)
index f2b5a14..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-<?php
-
-class WellProtectedParentClass {
-       private $privateParentProperty;
-
-       public function __construct() {
-               $this->privateParentProperty = 9000;
-       }
-
-       private function incrementPrivateParentPropertyValue() {
-               $this->privateParentProperty++;
-       }
-
-       public function getPrivateParentProperty() {
-               return $this->privateParentProperty;
-       }
-}
-
-class WellProtectedClass extends WellProtectedParentClass {
-       protected static $staticProperty = 'sp';
-       private static $staticPrivateProperty = 'spp';
-
-       protected $property;
-       private $privateProperty;
-
-       protected static function staticMethod() {
-               return 'sm';
-       }
-
-       private static function staticPrivateMethod() {
-               return 'spm';
-       }
-
-       public function __construct() {
-               parent::__construct();
-               $this->property = 1;
-               $this->privateProperty = 42;
-       }
-
-       protected function incrementPropertyValue() {
-               $this->property++;
-       }
-
-       private function incrementPrivatePropertyValue() {
-               $this->privateProperty++;
-       }
-
-       public function getProperty() {
-               return $this->property;
-       }
-
-       public function getPrivateProperty() {
-               return $this->privateProperty;
-       }
-
-       protected function whatSecondArg( $a, $b = false ) {
-               return $b;
-       }
-}
diff --git a/tests/phpunit/data/resourceloader/oouiimagemodule/apex/icons.json b/tests/phpunit/data/resourceloader/oouiimagemodule/apex/icons.json
new file mode 100644 (file)
index 0000000..4fe3d81
--- /dev/null
@@ -0,0 +1,6 @@
+{
+       "prefix": "oo-ui-icon",
+       "images": {
+               "search": { "file": "images/icons/search.svg" }
+       }
+}
diff --git a/tests/phpunit/data/resourceloader/oouiimagemodule/apex/images/icons/search.svg b/tests/phpunit/data/resourceloader/oouiimagemodule/apex/images/icons/search.svg
new file mode 100644 (file)
index 0000000..6952997
--- /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-apex" 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/tests/phpunit/data/resourceloader/oouiimagemodule/mediawiki/icons.json b/tests/phpunit/data/resourceloader/oouiimagemodule/mediawiki/icons.json
new file mode 100644 (file)
index 0000000..4fe3d81
--- /dev/null
@@ -0,0 +1,6 @@
+{
+       "prefix": "oo-ui-icon",
+       "images": {
+               "search": { "file": "images/icons/search.svg" }
+       }
+}
diff --git a/tests/phpunit/data/resourceloader/oouiimagemodule/mediawiki/images/icons/search.svg b/tests/phpunit/data/resourceloader/oouiimagemodule/mediawiki/images/icons/search.svg
new file mode 100644 (file)
index 0000000..40438ea
--- /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-mediawiki" 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>
index 2206fbd..33b6e2f 100644 (file)
@@ -102,22 +102,28 @@ class GlobalTest extends MediaWikiTestCase {
        }
 
        /**
+        * Intended to cover the relevant bits of ServiceWiring.php, as well as GlobalFunctions.php
         * @covers ::wfReadOnly
         */
        public function testReadOnlyEmpty() {
                global $wgReadOnly;
                $wgReadOnly = null;
 
+               MediaWiki\MediaWikiServices::getInstance()->getReadOnlyMode()->clearCache();
                $this->assertFalse( wfReadOnly() );
                $this->assertFalse( wfReadOnly() );
        }
 
        /**
+        * Intended to cover the relevant bits of ServiceWiring.php, as well as GlobalFunctions.php
         * @covers ::wfReadOnly
         */
        public function testReadOnlySet() {
                global $wgReadOnly, $wgReadOnlyFile;
 
+               $readOnlyMode = MediaWiki\MediaWikiServices::getInstance()->getReadOnlyMode();
+               $readOnlyMode->clearCache();
+
                $f = fopen( $wgReadOnlyFile, "wt" );
                fwrite( $f, 'Message' );
                fclose( $f );
@@ -127,12 +133,23 @@ class GlobalTest extends MediaWikiTestCase {
                $this->assertTrue( wfReadOnly() ); # Check cached
 
                unlink( $wgReadOnlyFile );
-               $wgReadOnly = null; # Clean cache
-
+               $readOnlyMode->clearCache();
                $this->assertFalse( wfReadOnly() );
                $this->assertFalse( wfReadOnly() );
        }
 
+       /**
+        * This behaviour could probably be deprecated. Several extensions rely on it as of 1.29.
+        * @covers ::wfReadOnlyReason
+        */
+       public function testReadOnlyGlobalChange() {
+               $this->assertFalse( wfReadOnlyReason() );
+               $this->setMwGlobals( [
+                       'wgReadOnly' => 'reason'
+               ] );
+               $this->assertSame( 'reason', wfReadOnlyReason() );
+       }
+
        public static function provideArrayToCGI() {
                return [
                        [ [], '' ], // empty
index 4bca478..c1a46fe 100644 (file)
@@ -23,7 +23,7 @@ class MWTimestampTest extends MediaWikiLangTestCase {
                $expectedOutput, // The expected output
                $desc // Description
        ) {
-               $user = $this->getMock( 'User' );
+               $user = $this->createMock( 'User' );
                $user->expects( $this->any() )
                        ->method( 'getOption' )
                        ->with( 'timecorrection' )
@@ -156,7 +156,7 @@ class MWTimestampTest extends MediaWikiLangTestCase {
                $expectedOutput, // The expected output
                $desc // Description
        ) {
-               $user = $this->getMock( 'User' );
+               $user = $this->createMock( 'User' );
                $user->expects( $this->any() )
                        ->method( 'getOption' )
                        ->with( 'timecorrection' )
index cc95e38..a72662f 100644 (file)
@@ -71,7 +71,7 @@ class MediaWikiServicesTest extends MediaWikiTestCase {
                $newServices = $this->newMediaWikiServices();
                $oldServices = MediaWikiServices::forceGlobalInstance( $newServices );
 
-               $service1 = $this->getMock( SalvageableService::class );
+               $service1 = $this->createMock( SalvageableService::class );
                $service1->expects( $this->never() )
                        ->method( 'salvage' );
 
@@ -104,11 +104,11 @@ class MediaWikiServicesTest extends MediaWikiTestCase {
                $newServices = $this->newMediaWikiServices();
                $oldServices = MediaWikiServices::forceGlobalInstance( $newServices );
 
-               $service1 = $this->getMock( SalvageableService::class );
+               $service1 = $this->createMock( SalvageableService::class );
                $service1->expects( $this->never() )
                        ->method( 'salvage' );
 
-               $service2 = $this->getMock( SalvageableService::class );
+               $service2 = $this->createMock( SalvageableService::class );
                $service2->expects( $this->once() )
                        ->method( 'salvage' )
                        ->with( $service1 );
@@ -178,11 +178,11 @@ class MediaWikiServicesTest extends MediaWikiTestCase {
                $newServices = $this->newMediaWikiServices();
                $oldServices = MediaWikiServices::forceGlobalInstance( $newServices );
 
-               $service1 = $this->getMock( DestructibleService::class );
+               $service1 = $this->createMock( DestructibleService::class );
                $service1->expects( $this->once() )
                        ->method( 'destroy' );
 
-               $service2 = $this->getMock( DestructibleService::class );
+               $service2 = $this->createMock( DestructibleService::class );
                $service2->expects( $this->never() )
                        ->method( 'destroy' );
 
@@ -219,7 +219,7 @@ class MediaWikiServicesTest extends MediaWikiTestCase {
                        'Test',
                        function() use ( &$serviceCounter ) {
                                $serviceCounter++;
-                               $service = $this->getMock( 'MediaWiki\Services\DestructibleService' );
+                               $service = $this->createMock( 'MediaWiki\Services\DestructibleService' );
                                $service->expects( $this->once() )->method( 'destroy' );
                                return $service;
                        }
@@ -248,7 +248,7 @@ class MediaWikiServicesTest extends MediaWikiTestCase {
                $services->defineService(
                        'Test',
                        function() {
-                               $service = $this->getMock( 'MediaWiki\Services\DestructibleService' );
+                               $service = $this->createMock( 'MediaWiki\Services\DestructibleService' );
                                $service->expects( $this->never() )->method( 'destroy' );
                                return $service;
                        }
index 58087c1..912bffe 100644 (file)
@@ -1,5 +1,6 @@
 <?php
-use MediaWiki\MediaWikiServices;
+
+use Wikimedia\TestingAccessWrapper;
 
 class MessageTest extends MediaWikiLangTestCase {
 
index 59441ce..97df585 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 
+use Wikimedia\TestingAccessWrapper;
+
 /**
  *
  * @author Matthew Flaschen
@@ -472,13 +474,110 @@ class OutputPageTest extends MediaWikiTestCase {
                $this->assertEquals( [ 0 => 'Test' ], $outputPage->getCategories( 'hidden' ) );
        }
 
+       /**
+        * @dataProvider provideLinkHeaders
+        * @covers OutputPage::addLinkHeader
+        * @covers OutputPage::getLinkHeader
+        */
+       public function testLinkHeaders( $headers, $result ) {
+               $outputPage = $this->newInstance();
+
+               foreach ( $headers as $header ) {
+                       $outputPage->addLinkHeader( $header );
+               }
+
+               $this->assertEquals( $result, $outputPage->getLinkHeader() );
+       }
+
+       public function provideLinkHeaders() {
+               return [
+                       [
+                               [],
+                               false
+                       ],
+                       [
+                               [ '<https://foo/bar.jpg>;rel=preload;as=image' ],
+                               'Link: <https://foo/bar.jpg>;rel=preload;as=image',
+                       ],
+                       [
+                               [ '<https://foo/bar.jpg>;rel=preload;as=image','<https://foo/baz.jpg>;rel=preload;as=image' ],
+                               'Link: <https://foo/bar.jpg>;rel=preload;as=image,<https://foo/baz.jpg>;rel=preload;as=image',
+                       ],
+               ];
+       }
+
+       /**
+        * @dataProvider providePreloadLinkHeaders
+        * @covers OutputPage::addLogoPreloadLinkHeaders
+        * @covers ResourceLoaderSkinModule::getLogo
+        */
+       public function testPreloadLinkHeaders( $config, $result, $baseDir = null ) {
+               if ( $baseDir ) {
+                       $this->setMwGlobals( 'IP', $baseDir );
+               }
+               $out = TestingAccessWrapper::newFromObject( $this->newInstance( $config ) );
+               $out->addLogoPreloadLinkHeaders();
+
+               $this->assertEquals( $result, $out->getLinkHeader() );
+       }
+
+       public function providePreloadLinkHeaders() {
+               return [
+                       [
+                               [
+                                       'ResourceBasePath' => '/w',
+                                       'Logo' => '/img/default.png',
+                                       'LogoHD' => [
+                                               '1.5x' => '/img/one-point-five.png',
+                                               '2x' => '/img/two-x.png',
+                                       ],
+                               ],
+                               'Link: </img/default.png>;rel=preload;as=image;media=' .
+                               'not all and (min-resolution: 1.5dppx),' .
+                               '</img/one-point-five.png>;rel=preload;as=image;media=' .
+                               '(min-resolution: 1.5dppx) and (max-resolution: 1.999999dppx),' .
+                               '</img/two-x.png>;rel=preload;as=image;media=(min-resolution: 2dppx)'
+                       ],
+                       [
+                               [
+                                       'ResourceBasePath' => '/w',
+                                       'Logo' => '/img/default.png',
+                                       'LogoHD' => false,
+                               ],
+                               'Link: </img/default.png>;rel=preload;as=image'
+                       ],
+                       [
+                               [
+                                       'ResourceBasePath' => '/w',
+                                       'Logo' => '/img/default.png',
+                                       'LogoHD' => [
+                                               '2x' => '/img/two-x.png',
+                                       ],
+                               ],
+                               'Link: </img/default.png>;rel=preload;as=image;media=' .
+                               'not all and (min-resolution: 2dppx),' .
+                               '</img/two-x.png>;rel=preload;as=image;media=(min-resolution: 2dppx)'
+                       ],
+                       [
+                               [
+                                       'ResourceBasePath' => '/w',
+                                       'Logo' => '/w/test.jpg',
+                                       'LogoHD' => false,
+                                       'UploadPath' => '/w/images',
+                               ],
+                               'Link: </w/test.jpg?edcf2>;rel=preload;as=image',
+                               'baseDir' => dirname( __DIR__ ) . '/data/media',
+                       ],
+               ];
+       }
+
        /**
         * @return OutputPage
         */
-       private function newInstance() {
+       private function newInstance( $config = [] ) {
                $context = new RequestContext();
 
-               $context->setConfig( new HashConfig( [
+               $context->setConfig( new HashConfig( $config + [
                        'AppleTouchIcon' => false,
                        'DisableLangConversion' => true,
                        'EnableAPI' => false,
index cf2e120..31ee75b 100644 (file)
@@ -1,4 +1,7 @@
 <?php
+
+use Wikimedia\TestingAccessWrapper;
+
 /**
  * @group Search
  * @group Database
diff --git a/tests/phpunit/includes/ReadOnlyModeTest.php b/tests/phpunit/includes/ReadOnlyModeTest.php
new file mode 100644 (file)
index 0000000..9c02bbd
--- /dev/null
@@ -0,0 +1,196 @@
+<?php
+
+use MediaWiki\MediaWikiServices;
+
+/**
+ * @group Database
+ *
+ * @covers ReadOnlyMode
+ * @covers ConfiguredReadOnlyMode
+ */
+class ReadOnlyModeTest extends MediaWikiTestCase {
+       public function provider() {
+               $rawTests = [
+                       'None of anything' => [
+                               'confMessage' => null,
+                               'hasFileName' => false,
+                               'fileContents' => false,
+                               'lbMessage' => false,
+                               'expectedState' => false,
+                               'expectedMessage' => false,
+                               'expectedConfState' => false,
+                               'expectedConfMessage' => false
+                       ],
+                       'File missing' => [
+                               'confMessage' => null,
+                               'hasFileName' => true,
+                               'fileContents' => false,
+                               'lbMessage' => false,
+                               'expectedState' => false,
+                               'expectedMessage' => false,
+                               'expectedConfState' => false,
+                               'expectedConfMessage' => false
+                       ],
+                       'File empty' => [
+                               'confMessage' => null,
+                               'hasFileName' => true,
+                               'fileContents' => '',
+                               'lbMessage' => false,
+                               'expectedState' => false,
+                               'expectedMessage' => false,
+                               'expectedConfState' => false,
+                               'expectedConfMessage' => false
+                       ],
+                       'File has message' => [
+                               'confMessage' => null,
+                               'hasFileName' => true,
+                               'fileContents' => 'Message',
+                               'lbMessage' => false,
+                               'expectedState' => true,
+                               'expectedMessage' => 'Message',
+                               'expectedConfState' => true,
+                               'expectedConfMessage' => 'Message',
+                       ],
+                       'Conf has message' => [
+                               'confMessage' => 'Message',
+                               'hasFileName' => false,
+                               'fileContents' => false,
+                               'lbMessage' => false,
+                               'expectedState' => true,
+                               'expectedMessage' => 'Message',
+                               'expectedConfState' => true,
+                               'expectedConfMessage' => 'Message'
+                       ],
+                       "Conf=false means don't check the file" => [
+                               'confMessage' => false,
+                               'hasFileName' => true,
+                               'fileContents' => 'Message',
+                               'lbMessage' => false,
+                               'expectedState' => false,
+                               'expectedMessage' => false,
+                               'expectedConfState' => false,
+                               'expectedConfMessage' => false,
+                       ],
+                       'LB has message' => [
+                               'confMessage' => null,
+                               'hasFileName' => false,
+                               'fileContents' => false,
+                               'lbMessage' => 'Message',
+                               'expectedState' => true,
+                               'expectedMessage' => 'Message',
+                               'expectedConfState' => false,
+                               'expectedConfMessage' => false
+                       ],
+                       'All three have a message: conf wins' => [
+                               'confMessage' => 'conf',
+                               'hasFileName' => true,
+                               'fileContents' => 'file',
+                               'lbMessage' => 'lb',
+                               'expectedState' => true,
+                               'expectedMessage' => 'conf',
+                               'expectedConfState' => true,
+                               'expectedConfMessage' => 'conf'
+                       ]
+               ];
+               $cookedTests = [];
+               foreach ( $rawTests as $desc => $test ) {
+                       $cookedTests[$desc] = [ $test ];
+               }
+               return $cookedTests;
+       }
+
+       private function createMode( $params, $makeLB ) {
+               $config = new HashConfig( [
+                       'ReadOnly' => $params['confMessage'],
+                       'ReadOnlyFile' => $this->createFile( $params ),
+               ] );
+
+               $rom = new ConfiguredReadOnlyMode( $config );
+
+               if ( $makeLB ) {
+                       $lb = $this->createLB( $params );
+                       $rom = new ReadOnlyMode( $rom, $lb );
+               }
+
+               return $rom;
+       }
+
+       private function createLB( $params ) {
+               $lb = $this->getMockBuilder( \Wikimedia\Rdbms\LoadBalancer::class )
+                       ->disableOriginalConstructor()
+                       ->getMock();
+               $lb->expects( $this->any() )->method( 'getReadOnlyReason' )
+                       ->willReturn( $params['lbMessage'] );
+               return $lb;
+       }
+
+       private function createFile( $params ) {
+               if ( $params['hasFileName'] ) {
+                       $fileName = $this->getNewTempFile();
+
+                       if ( $params['fileContents'] === false ) {
+                               unlink( $fileName );
+                       } else {
+                               file_put_contents( $fileName, $params['fileContents'] );
+                       }
+               } else {
+                       $fileName = null;
+               }
+               return $fileName;
+       }
+
+       /**
+        * @dataProvider provider
+        */
+       public function testWithLB( $params ) {
+               $rom = $this->createMode( $params, true );
+               $this->assertSame( $params['expectedMessage'], $rom->getReason() );
+               $this->assertSame( $params['expectedState'], $rom->isReadOnly() );
+       }
+
+       /**
+        * @dataProvider provider
+        */
+       public function testWithoutLB( $params ) {
+               $cro = $this->createMode( $params, false );
+               $this->assertSame( $params['expectedConfMessage'], $cro->getReason() );
+               $this->assertSame( $params['expectedConfState'], $cro->isReadOnly() );
+       }
+
+       public function testSetReadOnlyReason() {
+               $rom = $this->createMode(
+                       [
+                               'confMessage' => 'conf',
+                               'hasFileName' => false,
+                               'fileContents' => false,
+                               'lbMessage' => 'lb'
+                       ],
+                       true );
+               $rom->setReason( 'override' );
+               $this->assertSame( 'override', $rom->getReason() );
+       }
+
+       /**
+        * @covers ReadOnlyMode::clearCache
+        * @covers ConfiguredReadOnlyMode::clearCache
+        */
+       public function testClearCache() {
+               $fileName = $this->getNewTempFile();
+               unlink( $fileName );
+               $config = new HashConfig( [
+                       'ReadOnly' => null,
+                       'ReadOnlyFile' => $fileName,
+               ] );
+               $cro = new ConfiguredReadOnlyMode( $config );
+               $lb = $this->createLB( [ 'lbMessage' => false ] );
+               $rom = new ReadOnlyMode( $cro, $lb );
+
+               $this->assertSame( false, $rom->getReason(), 'initial' );
+
+               file_put_contents( $fileName, 'file' );
+               $this->assertSame( false, $rom->getReason(), 'stale' );
+
+               $rom->clearCache();
+               $this->assertSame( 'file', $rom->getReason(), 'fresh' );
+       }
+}
index f22e123..617e39c 100644 (file)
@@ -326,7 +326,8 @@ class ServiceContainerTest extends PHPUnit_Framework_TestCase {
        public function testDisableService() {
                $services = $this->newServiceContainer( [ 'Foo' ] );
 
-               $destructible = $this->getMock( 'MediaWiki\Services\DestructibleService' );
+               $destructible = $this->getMockBuilder( 'MediaWiki\Services\DestructibleService' )
+                       ->getMock();
                $destructible->expects( $this->once() )
                        ->method( 'destroy' );
 
@@ -384,7 +385,8 @@ class ServiceContainerTest extends PHPUnit_Framework_TestCase {
        public function testDestroy() {
                $services = $this->newServiceContainer();
 
-               $destructible = $this->getMock( 'MediaWiki\Services\DestructibleService' );
+               $destructible = $this->getMockBuilder( 'MediaWiki\Services\DestructibleService' )
+                       ->getMock();
                $destructible->expects( $this->once() )
                        ->method( 'destroy' );
 
index 7332e15..76a4266 100644 (file)
 /**
  * Circumvent access restrictions on object internals
  *
- * This can be helpful for writing tests that can probe object internals,
- * without having to modify the class under test to accomodate.
+ * Kept around for backwards compatibility.
  *
- * Wrap an object with private methods as follows:
- *    $title = TestingAccessWrapper::newFromObject( Title::newFromDBkey( $key ) );
- *
- * You can access private and protected instance methods and variables:
- *    $formatter = $title->getTitleFormatter();
- *
- * TODO:
- * - Organize other helper classes in tests/testHelpers.inc into a directory.
+ * @deprecated Use \Wikimedia\TestingAccessWrapper (proveded by the
+ *   wikimedia/testing-access-wrapper Composer library)
  */
-class TestingAccessWrapper {
-       /** @var mixed The object, or the class name for static-only access */
-       public $object;
-
-       /**
-        * Return the same object, without access restrictions.
-        */
-       public static function newFromObject( $object ) {
-               if ( !is_object( $object ) ) {
-                       throw new InvalidArgumentException( __METHOD__ . ' must be called with an object' );
-               }
-               $wrapper = new TestingAccessWrapper();
-               $wrapper->object = $object;
-               return $wrapper;
-       }
-
-       /**
-        * Allow access to non-public static methods and properties of the class.
-        * Use non-static access,
-        */
-       public static function newFromClass( $className ) {
-               if ( !is_string( $className ) ) {
-                       throw new InvalidArgumentException( __METHOD__ . ' must be called with a class name' );
-               }
-               $wrapper = new TestingAccessWrapper();
-               $wrapper->object = $className;
-               return $wrapper;
-       }
-
-       public function __call( $method, $args ) {
-               $methodReflection = $this->getMethod( $method );
-
-               if ( $this->isStatic() && !$methodReflection->isStatic() ) {
-                       throw new DomainException( __METHOD__ . ': Cannot call non-static when wrapping static class' );
-               }
-
-               return $methodReflection->invokeArgs( $methodReflection->isStatic() ? null : $this->object,
-                       $args );
-       }
-
-       public function __set( $name, $value ) {
-               $propertyReflection = $this->getProperty( $name );
-
-               if ( $this->isStatic() && !$propertyReflection->isStatic() ) {
-                       throw new DomainException( __METHOD__ . ': Cannot set property when wrapping static class' );
-               }
-
-               $propertyReflection->setValue( $this->object, $value );
-       }
-
-       public function __get( $name ) {
-               $propertyReflection = $this->getProperty( $name );
-
-               if ( $this->isStatic() && !$propertyReflection->isStatic() ) {
-                       throw new DomainException( __METHOD__ . ': Cannot get property when wrapping static class' );
-               }
-
-               return $propertyReflection->getValue( $this->object );
-       }
-
-       private function isStatic() {
-               return is_string( $this->object );
-       }
-
-       /**
-        * Return a property and make it accessible.
-        * @param string $name
-        * @return ReflectionMethod
-        */
-       private function getMethod( $name ) {
-               $classReflection = new ReflectionClass( $this->object );
-               $methodReflection = $classReflection->getMethod( $name );
-               $methodReflection->setAccessible( true );
-               return $methodReflection;
-       }
-
-       /**
-        * Return a property and make it accessible.
-        *
-        * ReflectionClass::getProperty() fails if the private property is defined
-        * in a parent class. This works more like ReflectionClass::getMethod().
-        *
-        * @param string $name
-        * @return ReflectionProperty
-        * @throws ReflectionException
-        */
-       private function getProperty( $name ) {
-               $classReflection = new ReflectionClass( $this->object );
-               try {
-                       $propertyReflection = $classReflection->getProperty( $name );
-               } catch ( ReflectionException $ex ) {
-                       while ( true ) {
-                               $classReflection = $classReflection->getParentClass();
-                               if ( !$classReflection ) {
-                                       throw $ex;
-                               }
-                               try {
-                                       $propertyReflection = $classReflection->getProperty( $name );
-                               } catch ( ReflectionException $ex2 ) {
-                                       continue;
-                               }
-                               if ( $propertyReflection->isPrivate() ) {
-                                       break;
-                               } else {
-                                       throw $ex;
-                               }
-                       }
-               }
-               $propertyReflection->setAccessible( true );
-               return $propertyReflection;
-       }
+class TestingAccessWrapper extends \Wikimedia\TestingAccessWrapper {
 }
diff --git a/tests/phpunit/includes/TestingAccessWrapperTest.php b/tests/phpunit/includes/TestingAccessWrapperTest.php
deleted file mode 100644 (file)
index 23eb023..0000000
+++ /dev/null
@@ -1,119 +0,0 @@
-<?php
-
-class TestingAccessWrapperTest extends MediaWikiTestCase {
-       protected $raw;
-       protected $wrapped;
-       protected $wrappedStatic;
-
-       function setUp() {
-               parent::setUp();
-
-               require_once __DIR__ . '/../data/helpers/WellProtectedClass.php';
-               $this->raw = new WellProtectedClass();
-               $this->wrapped = TestingAccessWrapper::newFromObject( $this->raw );
-               $this->wrappedStatic = TestingAccessWrapper::newFromClass( 'WellProtectedClass' );
-       }
-
-       /**
-        * @expectedException InvalidArgumentException
-        */
-       function testConstructorException() {
-               TestingAccessWrapper::newFromObject( 'WellProtectedClass' );
-       }
-
-       /**
-        * @expectedException InvalidArgumentException
-        */
-       function testStaticConstructorException() {
-               TestingAccessWrapper::newFromClass( new WellProtectedClass() );
-       }
-
-       function testGetProperty() {
-               $this->assertSame( 1, $this->wrapped->property );
-               $this->assertSame( 42, $this->wrapped->privateProperty );
-               $this->assertSame( 9000, $this->wrapped->privateParentProperty );
-               $this->assertSame( 'sp', $this->wrapped->staticProperty );
-               $this->assertSame( 'spp', $this->wrapped->staticPrivateProperty );
-               $this->assertSame( 'sp', $this->wrappedStatic->staticProperty );
-               $this->assertSame( 'spp', $this->wrappedStatic->staticPrivateProperty );
-       }
-
-       /**
-        * @expectedException DomainException
-        */
-       function testGetException() {
-               $this->wrappedStatic->property;
-       }
-
-       function testSetProperty() {
-               $this->wrapped->property = 10;
-               $this->assertSame( 10, $this->wrapped->property );
-               $this->assertSame( 10, $this->raw->getProperty() );
-
-               $this->wrapped->privateProperty = 11;
-               $this->assertSame( 11, $this->wrapped->privateProperty );
-               $this->assertSame( 11, $this->raw->getPrivateProperty() );
-
-               $this->wrapped->privateParentProperty = 12;
-               $this->assertSame( 12, $this->wrapped->privateParentProperty );
-               $this->assertSame( 12, $this->raw->getPrivateParentProperty() );
-
-               $this->wrapped->staticProperty = 'x';
-               $this->assertSame( 'x', $this->wrapped->staticProperty );
-               $this->assertSame( 'x', $this->wrappedStatic->staticProperty );
-
-               $this->wrapped->staticPrivateProperty = 'y';
-               $this->assertSame( 'y', $this->wrapped->staticPrivateProperty );
-               $this->assertSame( 'y', $this->wrappedStatic->staticPrivateProperty );
-
-               $this->wrappedStatic->staticProperty = 'X';
-               $this->assertSame( 'X', $this->wrapped->staticProperty );
-               $this->assertSame( 'X', $this->wrappedStatic->staticProperty );
-
-               $this->wrappedStatic->staticPrivateProperty = 'Y';
-               $this->assertSame( 'Y', $this->wrapped->staticPrivateProperty );
-               $this->assertSame( 'Y', $this->wrappedStatic->staticPrivateProperty );
-
-               // don't rely on PHPUnit to restore static properties
-               $this->wrapped->staticProperty = 'sp';
-               $this->wrapped->staticPrivateProperty = 'spp';
-       }
-
-       /**
-        * @expectedException DomainException
-        */
-       function testSetException() {
-               $this->wrappedStatic->property = 1;
-       }
-
-       function testCallMethod() {
-               $this->wrapped->incrementPropertyValue();
-               $this->assertSame( 2, $this->wrapped->property );
-               $this->assertSame( 2, $this->raw->getProperty() );
-
-               $this->wrapped->incrementPrivatePropertyValue();
-               $this->assertSame( 43, $this->wrapped->privateProperty );
-               $this->assertSame( 43, $this->raw->getPrivateProperty() );
-
-               $this->wrapped->incrementPrivateParentPropertyValue();
-               $this->assertSame( 9001, $this->wrapped->privateParentProperty );
-               $this->assertSame( 9001, $this->raw->getPrivateParentProperty() );
-
-               $this->assertSame( 'sm', $this->wrapped->staticMethod() );
-               $this->assertSame( 'spm', $this->wrapped->staticPrivateMethod() );
-               $this->assertSame( 'sm', $this->wrappedStatic->staticMethod() );
-               $this->assertSame( 'spm', $this->wrappedStatic->staticPrivateMethod() );
-       }
-
-       function testCallMethodTwoArgs() {
-               $this->assertSame( 'two', $this->wrapped->whatSecondArg( 'one', 'two' ) );
-       }
-
-       /**
-        * @expectedException DomainException
-        */
-       function testCallMethodException() {
-               $this->wrappedStatic->incrementPropertyValue();
-       }
-
-}
index 9121178..e20cc7b 100644 (file)
@@ -518,11 +518,6 @@ class TitlePermissionTest extends MediaWikiLangTestCase {
                        $this->title->getUserPermissionsErrors( 'bogus',
                                $this->user ) );
 
-               $this->setUserPerm( 'editusercssjs' );
-               $this->assertEquals( [ [ 'badaccess-group0' ] ],
-                       $this->title->getUserPermissionsErrors( 'bogus',
-                               $this->user ) );
-
                $this->setUserPerm( [ 'edituserjs', 'editusercss' ] );
                $this->assertEquals( [ [ 'badaccess-group0' ] ],
                        $this->title->getUserPermissionsErrors( 'bogus',
index bdec0a5..872c580 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 
+use Wikimedia\TestingAccessWrapper;
+
 /**
  * @covers WatchedItemQueryService
  */
@@ -66,7 +68,7 @@ class WatchedItemQueryServiceUnitTest extends PHPUnit_Framework_TestCase {
         * @return PHPUnit_Framework_MockObject_MockObject|User
         */
        private function getMockNonAnonUserWithId( $id ) {
-               $mock = $this->getMock( User::class );
+               $mock = $this->getMockBuilder( User::class )->getMock();
                $mock->expects( $this->any() )
                        ->method( 'isAnon' )
                        ->will( $this->returnValue( false ) );
@@ -142,7 +144,7 @@ class WatchedItemQueryServiceUnitTest extends PHPUnit_Framework_TestCase {
        }
 
        private function getMockAnonUser() {
-               $mock = $this->getMock( User::class );
+               $mock = $this->getMockBuilder( User::class )->getMock();
                $mock->expects( $this->any() )
                        ->method( 'isAnon' )
                        ->will( $this->returnValue( true ) );
index 0bd0bcc..f31028d 100644 (file)
@@ -13,7 +13,7 @@ class WatchedItemStoreUnitTest extends MediaWikiTestCase {
         * @return PHPUnit_Framework_MockObject_MockObject|IDatabase
         */
        private function getMockDb() {
-               return $this->getMock( IDatabase::class );
+               return $this->createMock( IDatabase::class );
        }
 
        /**
@@ -21,8 +21,7 @@ class WatchedItemStoreUnitTest extends MediaWikiTestCase {
         */
        private function getMockLoadBalancer(
                $mockDb,
-               $expectedConnectionType = null,
-               $readOnlyReason = false
+               $expectedConnectionType = null
        ) {
                $mock = $this->getMockBuilder( LoadBalancer::class )
                        ->disableOriginalConstructor()
@@ -37,9 +36,6 @@ class WatchedItemStoreUnitTest extends MediaWikiTestCase {
                                ->method( 'getConnectionRef' )
                                ->will( $this->returnValue( $mockDb ) );
                }
-               $mock->expects( $this->any() )
-                       ->method( 'getReadOnlyReason' )
-                       ->will( $this->returnValue( $readOnlyReason ) );
                return $mock;
        }
 
@@ -58,12 +54,25 @@ class WatchedItemStoreUnitTest extends MediaWikiTestCase {
                return $mock;
        }
 
+       /**
+        * @return PHPUnit_Framework_MockObject_MockObject|ReadOnlyMode
+        */
+       private function getMockReadOnlyMode( $readOnly = false ) {
+               $mock = $this->getMockBuilder( ReadOnlyMode::class )
+                       ->disableOriginalConstructor()
+                       ->getMock();
+               $mock->expects( $this->any() )
+                       ->method( 'isReadOnly' )
+                       ->will( $this->returnValue( $readOnly ) );
+               return $mock;
+       }
+
        /**
         * @param int $id
         * @return PHPUnit_Framework_MockObject_MockObject|User
         */
        private function getMockNonAnonUserWithId( $id ) {
-               $mock = $this->getMock( User::class );
+               $mock = $this->createMock( User::class );
                $mock->expects( $this->any() )
                        ->method( 'isAnon' )
                        ->will( $this->returnValue( false ) );
@@ -88,10 +97,13 @@ class WatchedItemStoreUnitTest extends MediaWikiTestCase {
                return $fakeRow;
        }
 
-       private function newWatchedItemStore( LoadBalancer $loadBalancer, HashBagOStuff $cache ) {
+       private function newWatchedItemStore( LoadBalancer $loadBalancer, HashBagOStuff $cache,
+               ReadOnlyMode $readOnlyMode
+       ) {
                return new WatchedItemStore(
                        $loadBalancer,
-                       $cache
+                       $cache,
+                       $readOnlyMode
                );
        }
 
@@ -118,7 +130,8 @@ class WatchedItemStoreUnitTest extends MediaWikiTestCase {
 
                $store = $this->newWatchedItemStore(
                        $this->getMockLoadBalancer( $mockDb ),
-                       $mockCache
+                       $mockCache,
+                       $this->getMockReadOnlyMode()
                );
 
                $this->assertEquals( 12, $store->countWatchedItems( $user ) );
@@ -148,7 +161,8 @@ class WatchedItemStoreUnitTest extends MediaWikiTestCase {
 
                $store = $this->newWatchedItemStore(
                        $this->getMockLoadBalancer( $mockDb ),
-                       $mockCache
+                       $mockCache,
+                       $this->getMockReadOnlyMode()
                );
 
                $this->assertEquals( 7, $store->countWatchers( $titleValue ) );
@@ -199,7 +213,8 @@ class WatchedItemStoreUnitTest extends MediaWikiTestCase {
 
                $store = $this->newWatchedItemStore(
                        $this->getMockLoadBalancer( $mockDb ),
-                       $mockCache
+                       $mockCache,
+                       $this->getMockReadOnlyMode()
                );
 
                $expected = [
@@ -265,7 +280,8 @@ class WatchedItemStoreUnitTest extends MediaWikiTestCase {
 
                $store = $this->newWatchedItemStore(
                        $this->getMockLoadBalancer( $mockDb ),
-                       $mockCache
+                       $mockCache,
+                       $this->getMockReadOnlyMode()
                );
 
                $expected = [
@@ -313,7 +329,8 @@ class WatchedItemStoreUnitTest extends MediaWikiTestCase {
 
                $store = $this->newWatchedItemStore(
                        $this->getMockLoadBalancer( $mockDb ),
-                       $mockCache
+                       $mockCache,
+                       $this->getMockReadOnlyMode()
                );
 
                $this->assertEquals( 7, $store->countVisitingWatchers( $titleValue, '111' ) );
@@ -392,7 +409,8 @@ class WatchedItemStoreUnitTest extends MediaWikiTestCase {
 
                $store = $this->newWatchedItemStore(
                        $this->getMockLoadBalancer( $mockDb ),
-                       $mockCache
+                       $mockCache,
+                       $this->getMockReadOnlyMode()
                );
 
                $expected = [
@@ -494,7 +512,8 @@ class WatchedItemStoreUnitTest extends MediaWikiTestCase {
 
                $store = $this->newWatchedItemStore(
                        $this->getMockLoadBalancer( $mockDb ),
-                       $mockCache
+                       $mockCache,
+                       $this->getMockReadOnlyMode()
                );
 
                $expected = [
@@ -547,7 +566,8 @@ class WatchedItemStoreUnitTest extends MediaWikiTestCase {
 
                $store = $this->newWatchedItemStore(
                        $this->getMockLoadBalancer( $mockDb ),
-                       $mockCache
+                       $mockCache,
+                       $this->getMockReadOnlyMode()
                );
 
                $expected = [
@@ -584,7 +604,8 @@ class WatchedItemStoreUnitTest extends MediaWikiTestCase {
 
                $store = $this->newWatchedItemStore(
                        $this->getMockLoadBalancer( $mockDb ),
-                       $mockCache
+                       $mockCache,
+                       $this->getMockReadOnlyMode()
                );
 
                $this->assertEquals( 9, $store->countUnreadNotifications( $user ) );
@@ -618,7 +639,8 @@ class WatchedItemStoreUnitTest extends MediaWikiTestCase {
 
                $store = $this->newWatchedItemStore(
                        $this->getMockLoadBalancer( $mockDb ),
-                       $mockCache
+                       $mockCache,
+                       $this->getMockReadOnlyMode()
                );
 
                $this->assertSame(
@@ -655,7 +677,8 @@ class WatchedItemStoreUnitTest extends MediaWikiTestCase {
 
                $store = $this->newWatchedItemStore(
                        $this->getMockLoadBalancer( $mockDb ),
-                       $mockCache
+                       $mockCache,
+                       $this->getMockReadOnlyMode()
                );
 
                $this->assertEquals(
@@ -685,7 +708,8 @@ class WatchedItemStoreUnitTest extends MediaWikiTestCase {
 
                $store = $this->newWatchedItemStore(
                        $this->getMockLoadBalancer( $mockDb ),
-                       $this->getMockCache()
+                       $this->getMockCache(),
+                       $this->getMockReadOnlyMode()
                );
 
                $store->duplicateEntry(
@@ -743,7 +767,8 @@ class WatchedItemStoreUnitTest extends MediaWikiTestCase {
 
                $store = $this->newWatchedItemStore(
                        $this->getMockLoadBalancer( $mockDb ),
-                       $mockCache
+                       $mockCache,
+                       $this->getMockReadOnlyMode()
                );
 
                $store->duplicateEntry(
@@ -789,7 +814,8 @@ class WatchedItemStoreUnitTest extends MediaWikiTestCase {
 
                $store = $this->newWatchedItemStore(
                        $this->getMockLoadBalancer( $mockDb ),
-                       $mockCache
+                       $mockCache,
+                       $this->getMockReadOnlyMode()
                );
 
                $store->duplicateAllAssociatedEntries(
@@ -882,7 +908,8 @@ class WatchedItemStoreUnitTest extends MediaWikiTestCase {
 
                $store = $this->newWatchedItemStore(
                        $this->getMockLoadBalancer( $mockDb ),
-                       $mockCache
+                       $mockCache,
+                       $this->getMockReadOnlyMode()
                );
 
                $store->duplicateAllAssociatedEntries(
@@ -914,7 +941,8 @@ class WatchedItemStoreUnitTest extends MediaWikiTestCase {
 
                $store = $this->newWatchedItemStore(
                        $this->getMockLoadBalancer( $mockDb ),
-                       $mockCache
+                       $mockCache,
+                       $this->getMockReadOnlyMode()
                );
 
                $store->addWatch(
@@ -934,7 +962,8 @@ class WatchedItemStoreUnitTest extends MediaWikiTestCase {
 
                $store = $this->newWatchedItemStore(
                        $this->getMockLoadBalancer( $mockDb ),
-                       $mockCache
+                       $mockCache,
+                       $this->getMockReadOnlyMode()
                );
 
                $store->addWatch(
@@ -945,8 +974,9 @@ class WatchedItemStoreUnitTest extends MediaWikiTestCase {
 
        public function testAddWatchBatchForUser_readOnlyDBReturnsFalse() {
                $store = $this->newWatchedItemStore(
-                       $this->getMockLoadBalancer( $this->getMockDb(), null, 'Some Reason' ),
-                       $this->getMockCache()
+                       $this->getMockLoadBalancer( $this->getMockDb() ),
+                       $this->getMockCache(),
+                       $this->getMockReadOnlyMode( true )
                );
 
                $this->assertFalse(
@@ -991,7 +1021,8 @@ class WatchedItemStoreUnitTest extends MediaWikiTestCase {
 
                $store = $this->newWatchedItemStore(
                        $this->getMockLoadBalancer( $mockDb ),
-                       $mockCache
+                       $mockCache,
+                       $this->getMockReadOnlyMode()
                );
 
                $mockUser = $this->getMockNonAnonUserWithId( 1 );
@@ -1015,7 +1046,8 @@ class WatchedItemStoreUnitTest extends MediaWikiTestCase {
 
                $store = $this->newWatchedItemStore(
                        $this->getMockLoadBalancer( $mockDb ),
-                       $mockCache
+                       $mockCache,
+                       $this->getMockReadOnlyMode()
                );
 
                $this->assertFalse(
@@ -1038,7 +1070,8 @@ class WatchedItemStoreUnitTest extends MediaWikiTestCase {
 
                $store = $this->newWatchedItemStore(
                        $this->getMockLoadBalancer( $mockDb ),
-                       $mockCache
+                       $mockCache,
+                       $this->getMockReadOnlyMode()
                );
 
                $this->assertTrue(
@@ -1072,7 +1105,8 @@ class WatchedItemStoreUnitTest extends MediaWikiTestCase {
 
                $store = $this->newWatchedItemStore(
                        $this->getMockLoadBalancer( $mockDb ),
-                       $mockCache
+                       $mockCache,
+                       $this->getMockReadOnlyMode()
                );
 
                $watchedItem = $store->loadWatchedItem(
@@ -1106,7 +1140,8 @@ class WatchedItemStoreUnitTest extends MediaWikiTestCase {
 
                $store = $this->newWatchedItemStore(
                        $this->getMockLoadBalancer( $mockDb ),
-                       $mockCache
+                       $mockCache,
+                       $this->getMockReadOnlyMode()
                );
 
                $this->assertFalse(
@@ -1128,7 +1163,8 @@ class WatchedItemStoreUnitTest extends MediaWikiTestCase {
 
                $store = $this->newWatchedItemStore(
                        $this->getMockLoadBalancer( $mockDb ),
-                       $mockCache
+                       $mockCache,
+                       $this->getMockReadOnlyMode()
                );
 
                $this->assertFalse(
@@ -1163,7 +1199,8 @@ class WatchedItemStoreUnitTest extends MediaWikiTestCase {
 
                $store = $this->newWatchedItemStore(
                        $this->getMockLoadBalancer( $mockDb ),
-                       $mockCache
+                       $mockCache,
+                       $this->getMockReadOnlyMode()
                );
 
                $this->assertTrue(
@@ -1198,7 +1235,8 @@ class WatchedItemStoreUnitTest extends MediaWikiTestCase {
 
                $store = $this->newWatchedItemStore(
                        $this->getMockLoadBalancer( $mockDb ),
-                       $mockCache
+                       $mockCache,
+                       $this->getMockReadOnlyMode()
                );
 
                $this->assertFalse(
@@ -1221,7 +1259,8 @@ class WatchedItemStoreUnitTest extends MediaWikiTestCase {
 
                $store = $this->newWatchedItemStore(
                        $this->getMockLoadBalancer( $mockDb ),
-                       $mockCache
+                       $mockCache,
+                       $this->getMockReadOnlyMode()
                );
 
                $this->assertFalse(
@@ -1265,7 +1304,8 @@ class WatchedItemStoreUnitTest extends MediaWikiTestCase {
 
                $store = $this->newWatchedItemStore(
                        $this->getMockLoadBalancer( $mockDb ),
-                       $mockCache
+                       $mockCache,
+                       $this->getMockReadOnlyMode()
                );
 
                $watchedItem = $store->getWatchedItem(
@@ -1299,7 +1339,8 @@ class WatchedItemStoreUnitTest extends MediaWikiTestCase {
 
                $store = $this->newWatchedItemStore(
                        $this->getMockLoadBalancer( $mockDb ),
-                       $mockCache
+                       $mockCache,
+                       $this->getMockReadOnlyMode()
                );
 
                $this->assertEquals(
@@ -1336,7 +1377,8 @@ class WatchedItemStoreUnitTest extends MediaWikiTestCase {
 
                $store = $this->newWatchedItemStore(
                        $this->getMockLoadBalancer( $mockDb ),
-                       $mockCache
+                       $mockCache,
+                       $this->getMockReadOnlyMode()
                );
 
                $this->assertFalse(
@@ -1359,7 +1401,8 @@ class WatchedItemStoreUnitTest extends MediaWikiTestCase {
 
                $store = $this->newWatchedItemStore(
                        $this->getMockLoadBalancer( $mockDb ),
-                       $mockCache
+                       $mockCache,
+                       $this->getMockReadOnlyMode()
                );
 
                $this->assertFalse(
@@ -1399,7 +1442,8 @@ class WatchedItemStoreUnitTest extends MediaWikiTestCase {
 
                $store = $this->newWatchedItemStore(
                        $this->getMockLoadBalancer( $mockDb ),
-                       $mockCache
+                       $mockCache,
+                       $this->getMockReadOnlyMode()
                );
                $user = $this->getMockNonAnonUserWithId( 1 );
 
@@ -1449,7 +1493,8 @@ class WatchedItemStoreUnitTest extends MediaWikiTestCase {
 
                $store = $this->newWatchedItemStore(
                        $mockLoadBalancer,
-                       $mockCache
+                       $mockCache,
+                       $this->getMockReadOnlyMode()
                );
 
                $watchedItems = $store->getWatchedItemsForUser(
@@ -1462,7 +1507,8 @@ class WatchedItemStoreUnitTest extends MediaWikiTestCase {
        public function testGetWatchedItemsForUser_badSortOptionThrowsException() {
                $store = $this->newWatchedItemStore(
                        $this->getMockLoadBalancer( $this->getMockDb() ),
-                       $this->getMockCache()
+                       $this->getMockCache(),
+                       $this->getMockReadOnlyMode()
                );
 
                $this->setExpectedException( 'InvalidArgumentException' );
@@ -1503,7 +1549,8 @@ class WatchedItemStoreUnitTest extends MediaWikiTestCase {
 
                $store = $this->newWatchedItemStore(
                        $this->getMockLoadBalancer( $mockDb ),
-                       $mockCache
+                       $mockCache,
+                       $this->getMockReadOnlyMode()
                );
 
                $this->assertTrue(
@@ -1539,7 +1586,8 @@ class WatchedItemStoreUnitTest extends MediaWikiTestCase {
 
                $store = $this->newWatchedItemStore(
                        $this->getMockLoadBalancer( $mockDb ),
-                       $mockCache
+                       $mockCache,
+                       $this->getMockReadOnlyMode()
                );
 
                $this->assertFalse(
@@ -1562,7 +1610,8 @@ class WatchedItemStoreUnitTest extends MediaWikiTestCase {
 
                $store = $this->newWatchedItemStore(
                        $this->getMockLoadBalancer( $mockDb ),
-                       $mockCache
+                       $mockCache,
+                       $this->getMockReadOnlyMode()
                );
 
                $this->assertFalse(
@@ -1629,7 +1678,8 @@ class WatchedItemStoreUnitTest extends MediaWikiTestCase {
 
                $store = $this->newWatchedItemStore(
                        $this->getMockLoadBalancer( $mockDb ),
-                       $mockCache
+                       $mockCache,
+                       $this->getMockReadOnlyMode()
                );
 
                $this->assertEquals(
@@ -1679,7 +1729,8 @@ class WatchedItemStoreUnitTest extends MediaWikiTestCase {
 
                $store = $this->newWatchedItemStore(
                        $this->getMockLoadBalancer( $mockDb ),
-                       $mockCache
+                       $mockCache,
+                       $this->getMockReadOnlyMode()
                );
 
                $this->assertEquals(
@@ -1740,7 +1791,8 @@ class WatchedItemStoreUnitTest extends MediaWikiTestCase {
 
                $store = $this->newWatchedItemStore(
                        $this->getMockLoadBalancer( $mockDb ),
-                       $mockCache
+                       $mockCache,
+                       $this->getMockReadOnlyMode()
                );
 
                $this->assertEquals(
@@ -1780,7 +1832,8 @@ class WatchedItemStoreUnitTest extends MediaWikiTestCase {
 
                $store = $this->newWatchedItemStore(
                        $this->getMockLoadBalancer( $mockDb ),
-                       $mockCache
+                       $mockCache,
+                       $this->getMockReadOnlyMode()
                );
 
                $this->assertEquals(
@@ -1806,7 +1859,8 @@ class WatchedItemStoreUnitTest extends MediaWikiTestCase {
 
                $store = $this->newWatchedItemStore(
                        $this->getMockLoadBalancer( $mockDb ),
-                       $mockCache
+                       $mockCache,
+                       $this->getMockReadOnlyMode()
                );
 
                $this->assertEquals(
@@ -1830,7 +1884,8 @@ class WatchedItemStoreUnitTest extends MediaWikiTestCase {
 
                $store = $this->newWatchedItemStore(
                        $this->getMockLoadBalancer( $mockDb ),
-                       $mockCache
+                       $mockCache,
+                       $this->getMockReadOnlyMode()
                );
 
                $this->assertFalse(
@@ -1863,7 +1918,8 @@ class WatchedItemStoreUnitTest extends MediaWikiTestCase {
 
                $store = $this->newWatchedItemStore(
                        $this->getMockLoadBalancer( $mockDb ),
-                       $mockCache
+                       $mockCache,
+                       $this->getMockReadOnlyMode()
                );
 
                $this->assertFalse(
@@ -1908,7 +1964,8 @@ class WatchedItemStoreUnitTest extends MediaWikiTestCase {
 
                $store = $this->newWatchedItemStore(
                        $this->getMockLoadBalancer( $mockDb ),
-                       $mockCache
+                       $mockCache,
+                       $this->getMockReadOnlyMode()
                );
 
                // Note: This does not actually assert the job is correct
@@ -1948,7 +2005,8 @@ class WatchedItemStoreUnitTest extends MediaWikiTestCase {
 
                $store = $this->newWatchedItemStore(
                        $this->getMockLoadBalancer( $mockDb ),
-                       $mockCache
+                       $mockCache,
+                       $this->getMockReadOnlyMode()
                );
 
                // Note: This does not actually assert the job is correct
@@ -1978,7 +2036,7 @@ class WatchedItemStoreUnitTest extends MediaWikiTestCase {
         * @return PHPUnit_Framework_MockObject_MockObject|Title
         */
        private function getMockTitle( $text, $ns = 0 ) {
-               $title = $this->getMock( Title::class );
+               $title = $this->createMock( Title::class );
                $title->expects( $this->any() )
                        ->method( 'getText' )
                        ->will( $this->returnValue( str_replace( '_', ' ', $text ) ) );
@@ -2041,7 +2099,8 @@ class WatchedItemStoreUnitTest extends MediaWikiTestCase {
 
                $store = $this->newWatchedItemStore(
                        $this->getMockLoadBalancer( $mockDb ),
-                       $mockCache
+                       $mockCache,
+                       $this->getMockReadOnlyMode()
                );
 
                $callableCallCounter = 0;
@@ -2107,7 +2166,8 @@ class WatchedItemStoreUnitTest extends MediaWikiTestCase {
 
                $store = $this->newWatchedItemStore(
                        $this->getMockLoadBalancer( $mockDb ),
-                       $mockCache
+                       $mockCache,
+                       $this->getMockReadOnlyMode()
                );
 
                $addUpdateCallCounter = 0;
@@ -2182,7 +2242,8 @@ class WatchedItemStoreUnitTest extends MediaWikiTestCase {
 
                $store = $this->newWatchedItemStore(
                        $this->getMockLoadBalancer( $mockDb ),
-                       $mockCache
+                       $mockCache,
+                       $this->getMockReadOnlyMode()
                );
 
                $callableCallCounter = 0;
@@ -2248,7 +2309,8 @@ class WatchedItemStoreUnitTest extends MediaWikiTestCase {
 
                $store = $this->newWatchedItemStore(
                        $this->getMockLoadBalancer( $mockDb ),
-                       $mockCache
+                       $mockCache,
+                       $this->getMockReadOnlyMode()
                );
 
                $addUpdateCallCounter = 0;
@@ -2325,7 +2387,8 @@ class WatchedItemStoreUnitTest extends MediaWikiTestCase {
 
                $store = $this->newWatchedItemStore(
                        $this->getMockLoadBalancer( $mockDb ),
-                       $mockCache
+                       $mockCache,
+                       $this->getMockReadOnlyMode()
                );
 
                $addUpdateCallCounter = 0;
@@ -2370,7 +2433,8 @@ class WatchedItemStoreUnitTest extends MediaWikiTestCase {
        public function testSetNotificationTimestampsForUser_anonUser() {
                $store = $this->newWatchedItemStore(
                        $this->getMockLoadBalancer( $this->getMockDb() ),
-                       $this->getMockCache()
+                       $this->getMockCache(),
+                       $this->getMockReadOnlyMode()
                );
                $this->assertFalse( $store->setNotificationTimestampsForUser( $this->getAnonUser(), '' ) );
        }
@@ -2396,7 +2460,8 @@ class WatchedItemStoreUnitTest extends MediaWikiTestCase {
 
                $store = $this->newWatchedItemStore(
                        $this->getMockLoadBalancer( $mockDb ),
-                       $this->getMockCache()
+                       $this->getMockCache(),
+                       $this->getMockReadOnlyMode()
                );
 
                $this->assertTrue(
@@ -2425,7 +2490,8 @@ class WatchedItemStoreUnitTest extends MediaWikiTestCase {
 
                $store = $this->newWatchedItemStore(
                        $this->getMockLoadBalancer( $mockDb ),
-                       $this->getMockCache()
+                       $this->getMockCache(),
+                       $this->getMockReadOnlyMode()
                );
 
                $this->assertTrue(
@@ -2463,7 +2529,8 @@ class WatchedItemStoreUnitTest extends MediaWikiTestCase {
 
                $store = $this->newWatchedItemStore(
                        $this->getMockLoadBalancer( $mockDb ),
-                       $this->getMockCache()
+                       $this->getMockCache(),
+                       $this->getMockReadOnlyMode()
                );
 
                $this->assertTrue(
@@ -2505,7 +2572,8 @@ class WatchedItemStoreUnitTest extends MediaWikiTestCase {
 
                $store = $this->newWatchedItemStore(
                        $this->getMockLoadBalancer( $mockDb ),
-                       $mockCache
+                       $mockCache,
+                       $this->getMockReadOnlyMode()
                );
 
                $this->assertEquals(
@@ -2545,7 +2613,8 @@ class WatchedItemStoreUnitTest extends MediaWikiTestCase {
 
                $store = $this->newWatchedItemStore(
                        $this->getMockLoadBalancer( $mockDb ),
-                       $mockCache
+                       $mockCache,
+                       $this->getMockReadOnlyMode()
                );
 
                $watchers = $store->updateNotificationTimestamp(
@@ -2588,7 +2657,8 @@ class WatchedItemStoreUnitTest extends MediaWikiTestCase {
 
                $store = $this->newWatchedItemStore(
                        $this->getMockLoadBalancer( $mockDb ),
-                       $mockCache
+                       $mockCache,
+                       $this->getMockReadOnlyMode()
                );
 
                // This will add the item to the cache
index 7e1ff3d..8897645 100644 (file)
@@ -14,7 +14,7 @@ class WatchedItemUnitTest extends MediaWikiTestCase {
         * @return PHPUnit_Framework_MockObject_MockObject|User
         */
        private function getMockUser( $id ) {
-               $user = $this->getMock( User::class );
+               $user = $this->createMock( User::class );
                $user->expects( $this->any() )
                        ->method( 'getId' )
                        ->will( $this->returnValue( $id ) );
@@ -84,7 +84,7 @@ class WatchedItemUnitTest extends MediaWikiTestCase {
                $checkRights = 0;
 
                /** @var User|PHPUnit_Framework_MockObject_MockObject $user */
-               $user = $this->getMock( User::class );
+               $user = $this->createMock( User::class );
                $user->expects( $this->once() )
                        ->method( 'addWatch' )
                        ->with( $title, $checkRights );
@@ -99,7 +99,7 @@ class WatchedItemUnitTest extends MediaWikiTestCase {
                $checkRights = 0;
 
                /** @var User|PHPUnit_Framework_MockObject_MockObject $user */
-               $user = $this->getMock( User::class );
+               $user = $this->createMock( User::class );
                $user->expects( $this->once() )
                        ->method( 'removeWatch' )
                        ->with( $title, $checkRights );
@@ -124,7 +124,7 @@ class WatchedItemUnitTest extends MediaWikiTestCase {
                $checkRights = 0;
 
                /** @var User|PHPUnit_Framework_MockObject_MockObject $user */
-               $user = $this->getMock( User::class );
+               $user = $this->createMock( User::class );
                $user->expects( $this->once() )
                        ->method( 'isWatched' )
                        ->with( $title, $checkRights )
index 7327e85..253ac95 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 
+use Wikimedia\TestingAccessWrapper;
+
 /**
  * @group API
  * @group Database
index ea8c9ca..3cf1fde 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 
+use Wikimedia\TestingAccessWrapper;
+
 /**
  * @group API
  * @group Database
index 922f7f1..3e6ceb7 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 
+use Wikimedia\TestingAccessWrapper;
+
 /**
  * @group API
  * @group Database
@@ -472,7 +474,7 @@ class ApiMainTest extends ApiTestCase {
                );
        }
 
-       // Not static so $this->getMock() can be used
+       // Not static so $this can be used
        public function provideExceptionErrors() {
                $reqId = WebRequest::getRequestId();
                $doclink = wfExpandUrl( wfScript( 'api' ) );
@@ -485,7 +487,9 @@ class ApiMainTest extends ApiTestCase {
                        MWExceptionHandler::getRedactedTraceAsString( $ex )
                )->inLanguage( 'en' )->useDatabase( false )->text();
 
-               $dbex = new DBQueryError( $this->getMock( 'IDatabase' ), 'error', 1234, 'SELECT 1', __METHOD__ );
+               $dbex = new DBQueryError(
+                       $this->createMock( 'IDatabase' ),
+                       'error', 1234, 'SELECT 1', __METHOD__ );
                $dbtrace = wfMessage( 'api-exception-trace',
                        get_class( $dbex ),
                        $dbex->getFile(),
index e405b3b..c6f5a8e 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 
+use Wikimedia\TestingAccessWrapper;
+
 /**
  * @group API
  */
index ad1deee..8a2146a 100644 (file)
@@ -96,4 +96,83 @@ class ApiPageSetTest extends ApiTestCase {
                        $pageSet->getNormalizedTitlesAsResult()
                );
        }
+
+       public function testSpecialRedirects() {
+               $id1 = self::editPage( 'UTApiPageSet', 'UTApiPageSet in the default language' )
+                       ->value['revision']->getTitle()->getArticleID();
+               $id2 = self::editPage( 'UTApiPageSet/de', 'UTApiPageSet in German' )
+                       ->value['revision']->getTitle()->getArticleID();
+
+               $user = $this->getTestUser()->getUser();
+               $userName = $user->getName();
+               $userDbkey = str_replace( ' ', '_', $userName );
+               $request = new FauxRequest( [
+                       'titles' => join( '|', [
+                               'Special:MyContributions',
+                               'Special:MyPage',
+                               'Special:MyTalk/subpage',
+                               'Special:MyLanguage/UTApiPageSet',
+                       ] ),
+               ] );
+               $context = new RequestContext();
+               $context->setRequest( $request );
+               $context->setUser( $user );
+
+               $main = new ApiMain( $context );
+               $pageSet = new ApiPageSet( $main );
+               $pageSet->execute();
+
+               $this->assertEquals( [
+               ], $pageSet->getRedirectTitlesAsResult() );
+               $this->assertEquals( [
+                       [ 'ns' => -1, 'title' => 'Special:MyContributions', 'special' => true ],
+                       [ 'ns' => -1, 'title' => 'Special:MyPage', 'special' => true ],
+                       [ 'ns' => -1, 'title' => 'Special:MyTalk/subpage', 'special' => true ],
+                       [ 'ns' => -1, 'title' => 'Special:MyLanguage/UTApiPageSet', 'special' => true ],
+               ], $pageSet->getInvalidTitlesAndRevisions() );
+               $this->assertEquals( [
+               ], $pageSet->getAllTitlesByNamespace() );
+
+               $request->setVal( 'redirects', 1 );
+               $main = new ApiMain( $context );
+               $pageSet = new ApiPageSet( $main );
+               $pageSet->execute();
+
+               $this->assertEquals( [
+                       [ 'from' => 'Special:MyPage', 'to' => "User:$userName" ],
+                       [ 'from' => 'Special:MyTalk/subpage', 'to' => "User talk:$userName/subpage" ],
+                       [ 'from' => 'Special:MyLanguage/UTApiPageSet', 'to' => 'UTApiPageSet' ],
+               ], $pageSet->getRedirectTitlesAsResult() );
+               $this->assertEquals( [
+                       [ 'ns' => -1, 'title' => 'Special:MyContributions', 'special' => true ],
+                       [ 'ns' => 2, 'title' => "User:$userName", 'missing' => true ],
+                       [ 'ns' => 3, 'title' => "User talk:$userName/subpage", 'missing' => true ],
+               ], $pageSet->getInvalidTitlesAndRevisions() );
+               $this->assertEquals( [
+                       0 => [ 'UTApiPageSet' => $id1 ],
+                       2 => [ $userDbkey => -2 ],
+                       3 => [ "$userDbkey/subpage" => -3 ],
+               ], $pageSet->getAllTitlesByNamespace() );
+
+               $context->setLanguage( 'de' );
+               $main = new ApiMain( $context );
+               $pageSet = new ApiPageSet( $main );
+               $pageSet->execute();
+
+               $this->assertEquals( [
+                       [ 'from' => 'Special:MyPage', 'to' => "User:$userName" ],
+                       [ 'from' => 'Special:MyTalk/subpage', 'to' => "User talk:$userName/subpage" ],
+                       [ 'from' => 'Special:MyLanguage/UTApiPageSet', 'to' => 'UTApiPageSet/de' ],
+               ], $pageSet->getRedirectTitlesAsResult() );
+               $this->assertEquals( [
+                       [ 'ns' => -1, 'title' => 'Special:MyContributions', 'special' => true ],
+                       [ 'ns' => 2, 'title' => "User:$userName", 'missing' => true ],
+                       [ 'ns' => 3, 'title' => "User talk:$userName/subpage", 'missing' => true ],
+               ], $pageSet->getInvalidTitlesAndRevisions() );
+               $this->assertEquals( [
+                       0 => [ 'UTApiPageSet/de' => $id2 ],
+                       2 => [ $userDbkey => -2 ],
+                       3 => [ "$userDbkey/subpage" => -3 ],
+               ], $pageSet->getAllTitlesByNamespace() );
+       }
 }
index 89e48f7..a3b0df5 100644 (file)
@@ -2,6 +2,8 @@
 
 namespace MediaWiki\Auth;
 
+use Wikimedia\TestingAccessWrapper;
+
 /**
  * @group AuthManager
  * @covers MediaWiki\Auth\AbstractAuthenticationProvider
@@ -9,7 +11,7 @@ namespace MediaWiki\Auth;
 class AbstractAuthenticationProviderTest extends \MediaWikiTestCase {
        public function testAbstractAuthenticationProvider() {
                $provider = $this->getMockForAbstractClass( AbstractAuthenticationProvider::class );
-               $providerPriv = \TestingAccessWrapper::newFromObject( $provider );
+               $providerPriv = TestingAccessWrapper::newFromObject( $provider );
 
                $obj = $this->getMockForAbstractClass( 'Psr\Log\LoggerInterface' );
                $provider->setLogger( $obj );
index a57682b..76d8ee9 100644 (file)
@@ -3,6 +3,7 @@
 namespace MediaWiki\Auth;
 
 use MediaWiki\MediaWikiServices;
+use Wikimedia\TestingAccessWrapper;
 
 /**
  * @group AuthManager
@@ -13,14 +14,14 @@ class AbstractPasswordPrimaryAuthenticationProviderTest extends \MediaWikiTestCa
                $provider = $this->getMockForAbstractClass(
                        AbstractPasswordPrimaryAuthenticationProvider::class
                );
-               $providerPriv = \TestingAccessWrapper::newFromObject( $provider );
+               $providerPriv = TestingAccessWrapper::newFromObject( $provider );
                $this->assertTrue( $providerPriv->authoritative );
 
                $provider = $this->getMockForAbstractClass(
                        AbstractPasswordPrimaryAuthenticationProvider::class,
                        [ [ 'authoritative' => false ] ]
                );
-               $providerPriv = \TestingAccessWrapper::newFromObject( $provider );
+               $providerPriv = TestingAccessWrapper::newFromObject( $provider );
                $this->assertFalse( $providerPriv->authoritative );
        }
 
@@ -29,7 +30,7 @@ class AbstractPasswordPrimaryAuthenticationProviderTest extends \MediaWikiTestCa
                        AbstractPasswordPrimaryAuthenticationProvider::class
                );
                $provider->setConfig( MediaWikiServices::getInstance()->getMainConfig() );
-               $providerPriv = \TestingAccessWrapper::newFromObject( $provider );
+               $providerPriv = TestingAccessWrapper::newFromObject( $provider );
 
                $obj = $providerPriv->getPasswordFactory();
                $this->assertInstanceOf( 'PasswordFactory', $obj );
@@ -42,7 +43,7 @@ class AbstractPasswordPrimaryAuthenticationProviderTest extends \MediaWikiTestCa
                );
                $provider->setConfig( MediaWikiServices::getInstance()->getMainConfig() );
                $provider->setLogger( new \Psr\Log\NullLogger() );
-               $providerPriv = \TestingAccessWrapper::newFromObject( $provider );
+               $providerPriv = TestingAccessWrapper::newFromObject( $provider );
 
                $obj = $providerPriv->getPassword( null );
                $this->assertInstanceOf( 'Password', $obj );
@@ -61,7 +62,7 @@ class AbstractPasswordPrimaryAuthenticationProviderTest extends \MediaWikiTestCa
                        MediaWikiServices::getInstance()->getMainConfig()
                ] ) );
                $provider->setLogger( new \Psr\Log\NullLogger() );
-               $providerPriv = \TestingAccessWrapper::newFromObject( $provider );
+               $providerPriv = TestingAccessWrapper::newFromObject( $provider );
 
                $this->mergeMwGlobalArrayValue( 'wgHooks', [ 'ResetPasswordExpiration' => [] ] );
 
@@ -109,7 +110,7 @@ class AbstractPasswordPrimaryAuthenticationProviderTest extends \MediaWikiTestCa
                );
                $provider->setConfig( MediaWikiServices::getInstance()->getMainConfig() );
                $provider->setLogger( new \Psr\Log\NullLogger() );
-               $providerPriv = \TestingAccessWrapper::newFromObject( $provider );
+               $providerPriv = TestingAccessWrapper::newFromObject( $provider );
 
                $this->assertEquals( $uppStatus, $providerPriv->checkPasswordValidity( 'foo', 'bar' ) );
 
@@ -133,7 +134,7 @@ class AbstractPasswordPrimaryAuthenticationProviderTest extends \MediaWikiTestCa
                $provider->setConfig( $config );
                $provider->setLogger( new \Psr\Log\NullLogger() );
                $provider->setManager( $manager );
-               $providerPriv = \TestingAccessWrapper::newFromObject( $provider );
+               $providerPriv = TestingAccessWrapper::newFromObject( $provider );
 
                $manager->removeAuthenticationSessionData( null );
                $status = \Status::newGood();
@@ -161,7 +162,7 @@ class AbstractPasswordPrimaryAuthenticationProviderTest extends \MediaWikiTestCa
                        AbstractPasswordPrimaryAuthenticationProvider::class,
                        [ [ 'authoritative' => false ] ]
                );
-               $providerPriv = \TestingAccessWrapper::newFromObject( $provider );
+               $providerPriv = TestingAccessWrapper::newFromObject( $provider );
 
                $req = new PasswordAuthenticationRequest;
 
@@ -172,7 +173,7 @@ class AbstractPasswordPrimaryAuthenticationProviderTest extends \MediaWikiTestCa
                        AbstractPasswordPrimaryAuthenticationProvider::class,
                        [ [ 'authoritative' => true ] ]
                );
-               $providerPriv = \TestingAccessWrapper::newFromObject( $provider );
+               $providerPriv = TestingAccessWrapper::newFromObject( $provider );
 
                $req->password = '';
                $ret = $providerPriv->failResponse( $req );
index d8588d5..8d84f4c 100644 (file)
@@ -60,7 +60,7 @@ class AbstractPrimaryAuthenticationProviderTest extends \MediaWikiTestCase {
        public function testProviderRevokeAccessForUser() {
                $reqs = [];
                for ( $i = 0; $i < 3; $i++ ) {
-                       $reqs[$i] = $this->getMock( AuthenticationRequest::class );
+                       $reqs[$i] = $this->createMock( AuthenticationRequest::class );
                        $reqs[$i]->done = false;
                }
 
index bb90dd9..41cf62e 100644 (file)
@@ -55,7 +55,7 @@ class AbstractSecondaryAuthenticationProviderTest extends \MediaWikiTestCase {
        public function testProviderRevokeAccessForUser() {
                $reqs = [];
                for ( $i = 0; $i < 3; $i++ ) {
-                       $reqs[$i] = $this->getMock( AuthenticationRequest::class );
+                       $reqs[$i] = $this->createMock( AuthenticationRequest::class );
                        $reqs[$i]->done = false;
                }
 
index f7be801..015fb3e 100644 (file)
@@ -7,6 +7,7 @@ use MediaWiki\Session\UserInfo;
 use Psr\Log\LogLevel;
 use StatusValue;
 use Wikimedia\ScopedCallback;
+use Wikimedia\TestingAccessWrapper;
 
 /**
  * @group AuthManager
@@ -45,7 +46,9 @@ class AuthManagerTest extends \MediaWikiTestCase {
         */
        protected function hook( $hook, $expect ) {
                global $wgHooks;
-               $mock = $this->getMock( __CLASS__, [ "on$hook" ] );
+               $mock = $this->getMockBuilder( __CLASS__ )
+                       ->setMethods( [ "on$hook" ] )
+                       ->getMock();
                $wgHooks[$hook] = [ $mock ];
                return $mock->expects( $expect )->method( "on$hook" );
        }
@@ -125,7 +128,7 @@ class AuthManagerTest extends \MediaWikiTestCase {
                }
                $this->manager = new AuthManager( $this->request, $this->config );
                $this->manager->setLogger( $this->logger );
-               $this->managerPriv = \TestingAccessWrapper::newFromObject( $this->manager );
+               $this->managerPriv = TestingAccessWrapper::newFromObject( $this->manager );
        }
 
        /**
@@ -168,7 +171,7 @@ class AuthManagerTest extends \MediaWikiTestCase {
                        'logger' => new \Psr\Log\NullLogger(),
                        'store' => new \HashBagOStuff(),
                ] );
-               \TestingAccessWrapper::newFromObject( $manager )->getProvider( (string)$provider );
+               TestingAccessWrapper::newFromObject( $manager )->getProvider( (string)$provider );
 
                $reset = \MediaWiki\Session\TestUtils::setSessionManagerSingleton( $manager );
 
@@ -194,7 +197,7 @@ class AuthManagerTest extends \MediaWikiTestCase {
                $this->assertSame( \RequestContext::getMain()->getRequest(), $singleton->getRequest() );
                $this->assertSame(
                        \RequestContext::getMain()->getConfig(),
-                       \TestingAccessWrapper::newFromObject( $singleton )->config
+                       TestingAccessWrapper::newFromObject( $singleton )->config
                );
        }
 
@@ -762,9 +765,9 @@ class AuthManagerTest extends \MediaWikiTestCase {
 
        public function testCreateFromLogin() {
                $user = \User::newFromName( 'UTSysop' );
-               $req1 = $this->getMock( AuthenticationRequest::class );
-               $req2 = $this->getMock( AuthenticationRequest::class );
-               $req3 = $this->getMock( AuthenticationRequest::class );
+               $req1 = $this->createMock( AuthenticationRequest::class );
+               $req2 = $this->createMock( AuthenticationRequest::class );
+               $req3 = $this->createMock( AuthenticationRequest::class );
                $userReq = new UsernameAuthenticationRequest;
                $userReq->username = 'UTDummy';
 
@@ -1402,12 +1405,13 @@ class AuthManagerTest extends \MediaWikiTestCase {
                        $this->manager->checkAccountCreatePermissions( new \User )
                );
 
-               $this->setMwGlobals( [ 'wgReadOnly' => 'Because' ] );
+               $readOnlyMode = \MediaWiki\MediaWikiServices::getInstance()->getReadOnlyMode();
+               $readOnlyMode->setReason( 'Because' );
                $this->assertEquals(
                        \Status::newFatal( 'readonlytext', 'Because' ),
                        $this->manager->checkAccountCreatePermissions( new \User )
                );
-               $this->setMwGlobals( [ 'wgReadOnly' => false ] );
+               $readOnlyMode->setReason( false );
 
                $wgGroupPermissions['*']['createaccount'] = false;
                $status = $this->manager->checkAccountCreatePermissions( new \User );
@@ -1595,7 +1599,8 @@ class AuthManagerTest extends \MediaWikiTestCase {
                $this->assertSame( AuthenticationResponse::FAIL, $ret->status );
                $this->assertSame( 'noname', $ret->message->getKey() );
 
-               $this->setMwGlobals( [ 'wgReadOnly' => 'Because' ] );
+               $readOnlyMode = \MediaWiki\MediaWikiServices::getInstance()->getReadOnlyMode();
+               $readOnlyMode->setReason( 'Because' );
                $this->hook( 'LocalUserCreated', $this->never() );
                $userReq->username = self::usernameForCreation();
                $ret = $this->manager->beginAccountCreation( $creator, [ $userReq ], 'http://localhost/' );
@@ -1603,7 +1608,7 @@ class AuthManagerTest extends \MediaWikiTestCase {
                $this->assertSame( AuthenticationResponse::FAIL, $ret->status );
                $this->assertSame( 'readonlytext', $ret->message->getKey() );
                $this->assertSame( [ 'Because' ], $ret->message->getParams() );
-               $this->setMwGlobals( [ 'wgReadOnly' => false ] );
+               $readOnlyMode->setReason( false );
 
                $this->hook( 'LocalUserCreated', $this->never() );
                $userReq->username = self::usernameForCreation();
@@ -1768,14 +1773,15 @@ class AuthManagerTest extends \MediaWikiTestCase {
 
                $this->request->getSession()->setSecret( 'AuthManager::accountCreationState',
                        [ 'username' => $creator->getName() ] + $session );
-               $this->setMwGlobals( [ 'wgReadOnly' => 'Because' ] );
+               $readOnlyMode = \MediaWiki\MediaWikiServices::getInstance()->getReadOnlyMode();
+               $readOnlyMode->setReason( 'Because' );
                $this->hook( 'LocalUserCreated', $this->never() );
                $ret = $this->manager->continueAccountCreation( [] );
                $this->unhook( 'LocalUserCreated' );
                $this->assertSame( AuthenticationResponse::FAIL, $ret->status );
                $this->assertSame( 'readonlytext', $ret->message->getKey() );
                $this->assertSame( [ 'Because' ], $ret->message->getParams() );
-               $this->setMwGlobals( [ 'wgReadOnly' => false ] );
+               $readOnlyMode->setReason( false );
 
                $this->request->getSession()->setSecret( 'AuthManager::accountCreationState',
                        [ 'username' => $creator->getName() ] + $session );
@@ -2466,7 +2472,8 @@ class AuthManagerTest extends \MediaWikiTestCase {
 
                // Wiki is read-only
                $session->clear();
-               $this->setMwGlobals( [ 'wgReadOnly' => 'Because' ] );
+               $readOnlyMode = \MediaWiki\MediaWikiServices::getInstance()->getReadOnlyMode();
+               $readOnlyMode->setReason( 'Because' );
                $user = \User::newFromName( $username );
                $this->hook( 'LocalUserCreated', $this->never() );
                $ret = $this->manager->autoCreateUser( $user, AuthManager::AUTOCREATE_SOURCE_SESSION, true );
@@ -2479,7 +2486,7 @@ class AuthManagerTest extends \MediaWikiTestCase {
                        [ LogLevel::DEBUG, 'denied by wfReadOnly(): {reason}' ],
                ], $logger->getBuffer() );
                $logger->clearBuffer();
-               $this->setMwGlobals( [ 'wgReadOnly' => false ] );
+               $readOnlyMode->setReason( false );
 
                // Session blacklisted
                $session->clear();
@@ -2661,7 +2668,8 @@ class AuthManagerTest extends \MediaWikiTestCase {
 
                // Test addToDatabase fails
                $session->clear();
-               $user = $this->getMock( 'User', [ 'addToDatabase' ] );
+               $user = $this->getMockBuilder( 'User' )
+                       ->setMethods( [ 'addToDatabase' ] )->getMock();
                $user->expects( $this->once() )->method( 'addToDatabase' )
                        ->will( $this->returnValue( \Status::newFatal( 'because' ) ) );
                $user->setName( $username );
@@ -2682,7 +2690,8 @@ class AuthManagerTest extends \MediaWikiTestCase {
                $backoffKey = wfMemcKey( 'AuthManager', 'autocreate-failed', md5( $username ) );
                $this->assertFalse( $cache->get( $backoffKey ), 'sanity check' );
                $session->clear();
-               $user = $this->getMock( 'User', [ 'addToDatabase' ] );
+               $user = $this->getMockBuilder( 'User' )
+                       ->setMethods( [ 'addToDatabase' ] )->getMock();
                $user->expects( $this->once() )->method( 'addToDatabase' )
                        ->will( $this->throwException( new \Exception( 'Excepted' ) ) );
                $user->setName( $username );
@@ -2705,7 +2714,8 @@ class AuthManagerTest extends \MediaWikiTestCase {
 
                // Test addToDatabase fails because the user already exists.
                $session->clear();
-               $user = $this->getMock( 'User', [ 'addToDatabase' ] );
+               $user = $this->getMockBuilder( 'User' )
+                       ->setMethods( [ 'addToDatabase' ] )->getMock();
                $user->expects( $this->once() )->method( 'addToDatabase' )
                        ->will( $this->returnCallback( function () use ( $username, &$user ) {
                                $oldUser = \User::newFromName( $username );
@@ -2813,7 +2823,7 @@ class AuthManagerTest extends \MediaWikiTestCase {
         */
        public function testGetAuthenticationRequests( $action, $expect, $state = [] ) {
                $makeReq = function ( $key ) use ( $action ) {
-                       $req = $this->getMock( AuthenticationRequest::class );
+                       $req = $this->createMock( AuthenticationRequest::class );
                        $req->expects( $this->any() )->method( 'getUniqueId' )
                                ->will( $this->returnValue( $key ) );
                        $req->action = $action === AuthManager::ACTION_UNLINK ? AuthManager::ACTION_REMOVE : $action;
@@ -3016,7 +3026,7 @@ class AuthManagerTest extends \MediaWikiTestCase {
 
        public function testGetAuthenticationRequestsRequired() {
                $makeReq = function ( $key, $required ) {
-                       $req = $this->getMock( AuthenticationRequest::class );
+                       $req = $this->createMock( AuthenticationRequest::class );
                        $req->expects( $this->any() )->method( 'getUniqueId' )
                                ->will( $this->returnValue( $key ) );
                        $req->action = AuthManager::ACTION_LOGIN;
@@ -3146,7 +3156,7 @@ class AuthManagerTest extends \MediaWikiTestCase {
        public function testAutoCreateOnLogin() {
                $username = self::usernameForCreation();
 
-               $req = $this->getMock( AuthenticationRequest::class );
+               $req = $this->createMock( AuthenticationRequest::class );
 
                $mock = $this->getMockForAbstractClass( PrimaryAuthenticationProvider::class );
                $mock->expects( $this->any() )->method( 'getUniqueId' )->will( $this->returnValue( 'primary' ) );
index 96e50e0..6970313 100644 (file)
@@ -20,7 +20,7 @@ class AuthPluginPrimaryAuthenticationProviderTest extends \MediaWikiTestCase {
                        );
                }
 
-               $plugin = $this->getMock( 'AuthPlugin' );
+               $plugin = $this->createMock( 'AuthPlugin' );
                $plugin->expects( $this->any() )->method( 'domainList' )->willReturn( [] );
 
                $provider = new AuthPluginPrimaryAuthenticationProvider( $plugin );
@@ -29,14 +29,14 @@ class AuthPluginPrimaryAuthenticationProviderTest extends \MediaWikiTestCase {
                        $provider->getAuthenticationRequests( AuthManager::ACTION_LOGIN, [] )
                );
 
-               $req = $this->getMock( PasswordAuthenticationRequest::class );
+               $req = $this->createMock( PasswordAuthenticationRequest::class );
                $provider = new AuthPluginPrimaryAuthenticationProvider( $plugin, get_class( $req ) );
                $this->assertEquals(
                        [ $req ],
                        $provider->getAuthenticationRequests( AuthManager::ACTION_LOGIN, [] )
                );
 
-               $reqType = get_class( $this->getMock( AuthenticationRequest::class ) );
+               $reqType = get_class( $this->createMock( AuthenticationRequest::class ) );
                try {
                        $provider = new AuthPluginPrimaryAuthenticationProvider( $plugin, $reqType );
                        $this->fail( 'Expected exception not thrown' );
@@ -51,7 +51,7 @@ class AuthPluginPrimaryAuthenticationProviderTest extends \MediaWikiTestCase {
        public function testOnUserSaveSettings() {
                $user = \User::newFromName( 'UTSysop' );
 
-               $plugin = $this->getMock( 'AuthPlugin' );
+               $plugin = $this->createMock( 'AuthPlugin' );
                $plugin->expects( $this->any() )->method( 'domainList' )->willReturn( [] );
                $plugin->expects( $this->once() )->method( 'updateExternalDB' )
                        ->with( $this->identicalTo( $user ) );
@@ -63,7 +63,7 @@ class AuthPluginPrimaryAuthenticationProviderTest extends \MediaWikiTestCase {
        public function testOnUserGroupsChanged() {
                $user = \User::newFromName( 'UTSysop' );
 
-               $plugin = $this->getMock( 'AuthPlugin' );
+               $plugin = $this->createMock( 'AuthPlugin' );
                $plugin->expects( $this->any() )->method( 'domainList' )->willReturn( [] );
                $plugin->expects( $this->once() )->method( 'updateExternalDBGroups' )
                        ->with(
@@ -79,14 +79,14 @@ class AuthPluginPrimaryAuthenticationProviderTest extends \MediaWikiTestCase {
        public function testOnUserLoggedIn() {
                $user = \User::newFromName( 'UTSysop' );
 
-               $plugin = $this->getMock( 'AuthPlugin' );
+               $plugin = $this->createMock( 'AuthPlugin' );
                $plugin->expects( $this->any() )->method( 'domainList' )->willReturn( [] );
                $plugin->expects( $this->exactly( 2 ) )->method( 'updateUser' )
                        ->with( $this->identicalTo( $user ) );
                $provider = new AuthPluginPrimaryAuthenticationProvider( $plugin );
                \Hooks::run( 'UserLoggedIn', [ $user ] );
 
-               $plugin = $this->getMock( 'AuthPlugin' );
+               $plugin = $this->createMock( 'AuthPlugin' );
                $plugin->expects( $this->any() )->method( 'domainList' )->willReturn( [] );
                $plugin->expects( $this->once() )->method( 'updateUser' )
                        ->will( $this->returnCallback( function ( &$user ) {
@@ -107,14 +107,14 @@ class AuthPluginPrimaryAuthenticationProviderTest extends \MediaWikiTestCase {
        public function testOnLocalUserCreated() {
                $user = \User::newFromName( 'UTSysop' );
 
-               $plugin = $this->getMock( 'AuthPlugin' );
+               $plugin = $this->createMock( 'AuthPlugin' );
                $plugin->expects( $this->any() )->method( 'domainList' )->willReturn( [] );
                $plugin->expects( $this->exactly( 2 ) )->method( 'initUser' )
                        ->with( $this->identicalTo( $user ), $this->identicalTo( false ) );
                $provider = new AuthPluginPrimaryAuthenticationProvider( $plugin );
                \Hooks::run( 'LocalUserCreated', [ $user, false ] );
 
-               $plugin = $this->getMock( 'AuthPlugin' );
+               $plugin = $this->createMock( 'AuthPlugin' );
                $plugin->expects( $this->any() )->method( 'domainList' )->willReturn( [] );
                $plugin->expects( $this->once() )->method( 'initUser' )
                        ->will( $this->returnCallback( function ( &$user ) {
@@ -133,7 +133,7 @@ class AuthPluginPrimaryAuthenticationProviderTest extends \MediaWikiTestCase {
        }
 
        public function testGetUniqueId() {
-               $plugin = $this->getMock( 'AuthPlugin' );
+               $plugin = $this->createMock( 'AuthPlugin' );
                $plugin->expects( $this->any() )->method( 'domainList' )->willReturn( [] );
                $provider = new AuthPluginPrimaryAuthenticationProvider( $plugin );
                $this->assertSame(
@@ -149,7 +149,7 @@ class AuthPluginPrimaryAuthenticationProviderTest extends \MediaWikiTestCase {
         * @param bool $allowPasswordChange
         */
        public function testGetAuthenticationRequests( $action, $response, $allowPasswordChange ) {
-               $plugin = $this->getMock( 'AuthPlugin' );
+               $plugin = $this->createMock( 'AuthPlugin' );
                $plugin->expects( $this->any() )->method( 'domainList' )->willReturn( [] );
                $plugin->expects( $this->any() )->method( 'allowPasswordChange' )
                        ->will( $this->returnValue( $allowPasswordChange ) );
@@ -321,7 +321,7 @@ class AuthPluginPrimaryAuthenticationProviderTest extends \MediaWikiTestCase {
        }
 
        public function testTestUserExists() {
-               $plugin = $this->getMock( 'AuthPlugin' );
+               $plugin = $this->createMock( 'AuthPlugin' );
                $plugin->expects( $this->any() )->method( 'domainList' )->willReturn( [] );
                $plugin->expects( $this->once() )->method( 'userExists' )
                        ->with( $this->equalTo( 'Foo' ) )
@@ -330,7 +330,7 @@ class AuthPluginPrimaryAuthenticationProviderTest extends \MediaWikiTestCase {
 
                $this->assertTrue( $provider->testUserExists( 'foo' ) );
 
-               $plugin = $this->getMock( 'AuthPlugin' );
+               $plugin = $this->createMock( 'AuthPlugin' );
                $plugin->expects( $this->any() )->method( 'domainList' )->willReturn( [] );
                $plugin->expects( $this->once() )->method( 'userExists' )
                        ->with( $this->equalTo( 'Foo' ) )
@@ -341,7 +341,7 @@ class AuthPluginPrimaryAuthenticationProviderTest extends \MediaWikiTestCase {
        }
 
        public function testTestUserCanAuthenticate() {
-               $plugin = $this->getMock( 'AuthPlugin' );
+               $plugin = $this->createMock( 'AuthPlugin' );
                $plugin->expects( $this->any() )->method( 'domainList' )->willReturn( [] );
                $plugin->expects( $this->once() )->method( 'userExists' )
                        ->with( $this->equalTo( 'Foo' ) )
@@ -355,7 +355,7 @@ class AuthPluginPrimaryAuthenticationProviderTest extends \MediaWikiTestCase {
                        ->getMock();
                $pluginUser->expects( $this->once() )->method( 'isLocked' )
                        ->will( $this->returnValue( true ) );
-               $plugin = $this->getMock( 'AuthPlugin' );
+               $plugin = $this->createMock( 'AuthPlugin' );
                $plugin->expects( $this->any() )->method( 'domainList' )->willReturn( [] );
                $plugin->expects( $this->once() )->method( 'userExists' )
                        ->with( $this->equalTo( 'Foo' ) )
@@ -375,7 +375,7 @@ class AuthPluginPrimaryAuthenticationProviderTest extends \MediaWikiTestCase {
                        ->getMock();
                $pluginUser->expects( $this->once() )->method( 'isLocked' )
                        ->will( $this->returnValue( false ) );
-               $plugin = $this->getMock( 'AuthPlugin' );
+               $plugin = $this->createMock( 'AuthPlugin' );
                $plugin->expects( $this->any() )->method( 'domainList' )->willReturn( [] );
                $plugin->expects( $this->once() )->method( 'userExists' )
                        ->with( $this->equalTo( 'Foo' ) )
@@ -433,7 +433,7 @@ class AuthPluginPrimaryAuthenticationProviderTest extends \MediaWikiTestCase {
        }
 
        public function testProviderAllowsPropertyChange() {
-               $plugin = $this->getMock( 'AuthPlugin' );
+               $plugin = $this->createMock( 'AuthPlugin' );
                $plugin->expects( $this->any() )->method( 'domainList' )->willReturn( [] );
                $plugin->expects( $this->any() )->method( 'allowPropChange' )
                        ->will( $this->returnCallback( function ( $prop ) {
@@ -453,7 +453,7 @@ class AuthPluginPrimaryAuthenticationProviderTest extends \MediaWikiTestCase {
         */
        public function testProviderAllowsAuthenticationDataChange( $type, $allow, $expect ) {
                $domains = $type instanceof PasswordDomainAuthenticationRequest ? [ 'foo', 'bar' ] : [];
-               $plugin = $this->getMock( 'AuthPlugin' );
+               $plugin = $this->createMock( 'AuthPlugin' );
                $plugin->expects( $this->any() )->method( 'domainList' )->willReturn( $domains );
                $plugin->expects( $allow === null ? $this->never() : $this->once() )
                        ->method( 'allowPasswordChange' )->will( $this->returnValue( $allow ) );
@@ -466,7 +466,7 @@ class AuthPluginPrimaryAuthenticationProviderTest extends \MediaWikiTestCase {
                if ( is_object( $type ) ) {
                        $req = $type;
                } else {
-                       $req = $this->getMock( $type );
+                       $req = $this->createMock( $type );
                }
                $req->action = AuthManager::ACTION_CHANGE;
                $req->username = 'UTSysop';
@@ -502,12 +502,12 @@ class AuthPluginPrimaryAuthenticationProviderTest extends \MediaWikiTestCase {
        }
 
        public function testProviderChangeAuthenticationData() {
-               $plugin = $this->getMock( 'AuthPlugin' );
+               $plugin = $this->createMock( 'AuthPlugin' );
                $plugin->expects( $this->any() )->method( 'domainList' )->willReturn( [] );
                $plugin->expects( $this->never() )->method( 'setPassword' );
                $provider = new AuthPluginPrimaryAuthenticationProvider( $plugin );
                $provider->providerChangeAuthenticationData(
-                       $this->getMock( AuthenticationRequest::class )
+                       $this->createMock( AuthenticationRequest::class )
                );
 
                $req = new PasswordAuthenticationRequest();
@@ -515,7 +515,7 @@ class AuthPluginPrimaryAuthenticationProviderTest extends \MediaWikiTestCase {
                $req->username = 'foo';
                $req->password = 'bar';
 
-               $plugin = $this->getMock( 'AuthPlugin' );
+               $plugin = $this->createMock( 'AuthPlugin' );
                $plugin->expects( $this->any() )->method( 'domainList' )->willReturn( [] );
                $plugin->expects( $this->once() )->method( 'setPassword' )
                        ->with( $this->callback( function ( $u ) {
@@ -525,7 +525,7 @@ class AuthPluginPrimaryAuthenticationProviderTest extends \MediaWikiTestCase {
                $provider = new AuthPluginPrimaryAuthenticationProvider( $plugin );
                $provider->providerChangeAuthenticationData( $req );
 
-               $plugin = $this->getMock( 'AuthPlugin' );
+               $plugin = $this->createMock( 'AuthPlugin' );
                $plugin->expects( $this->any() )->method( 'domainList' )->willReturn( [] );
                $plugin->expects( $this->once() )->method( 'setPassword' )
                        ->with( $this->callback( function ( $u ) {
@@ -541,7 +541,7 @@ class AuthPluginPrimaryAuthenticationProviderTest extends \MediaWikiTestCase {
                        $this->assertSame( 'authmanager-authplugin-setpass-failed-message', $e->msg );
                }
 
-               $plugin = $this->getMock( 'AuthPlugin' );
+               $plugin = $this->createMock( 'AuthPlugin' );
                $plugin->expects( $this->any() )->method( 'domainList' )
                        ->will( $this->returnValue( [ 'Domain1', 'Domain2' ] ) );
                $plugin->expects( $this->any() )->method( 'validDomain' )
@@ -569,7 +569,7 @@ class AuthPluginPrimaryAuthenticationProviderTest extends \MediaWikiTestCase {
         * @param string $expect
         */
        public function testAccountCreationType( $can, $expect ) {
-               $plugin = $this->getMock( 'AuthPlugin' );
+               $plugin = $this->createMock( 'AuthPlugin' );
                $plugin->expects( $this->any() )->method( 'domainList' )->willReturn( [] );
                $plugin->expects( $this->once() )
                        ->method( 'canCreateAccounts' )->will( $this->returnValue( $can ) );
@@ -588,7 +588,7 @@ class AuthPluginPrimaryAuthenticationProviderTest extends \MediaWikiTestCase {
        public function testTestForAccountCreation() {
                $user = \User::newFromName( 'foo' );
 
-               $plugin = $this->getMock( 'AuthPlugin' );
+               $plugin = $this->createMock( 'AuthPlugin' );
                $plugin->expects( $this->any() )->method( 'domainList' )->willReturn( [] );
                $provider = new AuthPluginPrimaryAuthenticationProvider( $plugin );
                $this->assertEquals(
@@ -606,7 +606,7 @@ class AuthPluginPrimaryAuthenticationProviderTest extends \MediaWikiTestCase {
                $req->action = AuthManager::ACTION_CREATE;
                $reqs = [ PasswordAuthenticationRequest::class => $req ];
 
-               $plugin = $this->getMock( 'AuthPlugin' );
+               $plugin = $this->createMock( 'AuthPlugin' );
                $plugin->expects( $this->any() )->method( 'domainList' )->willReturn( [] );
                $plugin->expects( $this->any() )->method( 'canCreateAccounts' )
                        ->will( $this->returnValue( false ) );
@@ -621,7 +621,7 @@ class AuthPluginPrimaryAuthenticationProviderTest extends \MediaWikiTestCase {
                        );
                }
 
-               $plugin = $this->getMock( 'AuthPlugin' );
+               $plugin = $this->createMock( 'AuthPlugin' );
                $plugin->expects( $this->any() )->method( 'domainList' )->willReturn( [] );
                $plugin->expects( $this->any() )->method( 'canCreateAccounts' )
                        ->will( $this->returnValue( true ) );
@@ -650,7 +650,7 @@ class AuthPluginPrimaryAuthenticationProviderTest extends \MediaWikiTestCase {
                $req->username = 'foo';
                $req->password = 'bar';
 
-               $plugin = $this->getMock( 'AuthPlugin' );
+               $plugin = $this->createMock( 'AuthPlugin' );
                $plugin->expects( $this->any() )->method( 'domainList' )->willReturn( [] );
                $plugin->expects( $this->any() )->method( 'canCreateAccounts' )
                        ->will( $this->returnValue( true ) );
@@ -670,7 +670,7 @@ class AuthPluginPrimaryAuthenticationProviderTest extends \MediaWikiTestCase {
                        $provider->beginPrimaryAccountCreation( $user, $user, $reqs )
                );
 
-               $plugin = $this->getMock( 'AuthPlugin' );
+               $plugin = $this->createMock( 'AuthPlugin' );
                $plugin->expects( $this->any() )->method( 'domainList' )->willReturn( [] );
                $plugin->expects( $this->any() )->method( 'canCreateAccounts' )
                        ->will( $this->returnValue( true ) );
@@ -689,7 +689,7 @@ class AuthPluginPrimaryAuthenticationProviderTest extends \MediaWikiTestCase {
                $this->assertSame( AuthenticationResponse::FAIL, $ret->status );
                $this->assertSame( 'authmanager-authplugin-create-fail', $ret->message->getKey() );
 
-               $plugin = $this->getMock( 'AuthPlugin' );
+               $plugin = $this->createMock( 'AuthPlugin' );
                $plugin->expects( $this->any() )->method( 'canCreateAccounts' )
                        ->will( $this->returnValue( true ) );
                $plugin->expects( $this->any() )->method( 'domainList' )
index 7d2ba8d..0e549a5 100644 (file)
@@ -138,7 +138,7 @@ class AuthenticationRequestTest extends \MediaWikiTestCase {
        public function testMergeFieldInfo() {
                $msg = wfMessage( 'foo' );
 
-               $req1 = $this->getMock( AuthenticationRequest::class );
+               $req1 = $this->createMock( AuthenticationRequest::class );
                $req1->required = AuthenticationRequest::REQUIRED;
                $req1->expects( $this->any() )->method( 'getFieldInfo' )->will( $this->returnValue( [
                        'string1' => [
@@ -165,7 +165,7 @@ class AuthenticationRequestTest extends \MediaWikiTestCase {
                        ],
                ] ) );
 
-               $req2 = $this->getMock( AuthenticationRequest::class );
+               $req2 = $this->createMock( AuthenticationRequest::class );
                $req2->required = AuthenticationRequest::REQUIRED;
                $req2->expects( $this->any() )->method( 'getFieldInfo' )->will( $this->returnValue( [
                        'string1' => [
@@ -187,7 +187,7 @@ class AuthenticationRequestTest extends \MediaWikiTestCase {
                        ],
                ] ) );
 
-               $req3 = $this->getMock( AuthenticationRequest::class );
+               $req3 = $this->createMock( AuthenticationRequest::class );
                $req3->required = AuthenticationRequest::REQUIRED;
                $req3->expects( $this->any() )->method( 'getFieldInfo' )->will( $this->returnValue( [
                        'string1' => [
@@ -197,7 +197,7 @@ class AuthenticationRequestTest extends \MediaWikiTestCase {
                        ],
                ] ) );
 
-               $req4 = $this->getMock( AuthenticationRequest::class );
+               $req4 = $this->createMock( AuthenticationRequest::class );
                $req4->required = AuthenticationRequest::REQUIRED;
                $req4->expects( $this->any() )->method( 'getFieldInfo' )->will( $this->returnValue( [] ) );
 
index 68f574b..111c855 100644 (file)
@@ -2,6 +2,8 @@
 
 namespace MediaWiki\Auth;
 
+use Wikimedia\TestingAccessWrapper;
+
 /**
  * @group AuthManager
  * @group Database
@@ -10,7 +12,7 @@ namespace MediaWiki\Auth;
 class CheckBlocksSecondaryAuthenticationProviderTest extends \MediaWikiTestCase {
        public function testConstructor() {
                $provider = new CheckBlocksSecondaryAuthenticationProvider();
-               $providerPriv = \TestingAccessWrapper::newFromObject( $provider );
+               $providerPriv = TestingAccessWrapper::newFromObject( $provider );
                $config = new \HashConfig( [
                        'BlockDisablesLogin' => false
                ] );
@@ -20,7 +22,7 @@ class CheckBlocksSecondaryAuthenticationProviderTest extends \MediaWikiTestCase
                $provider = new CheckBlocksSecondaryAuthenticationProvider(
                        [ 'blockDisablesLogin' => true ]
                );
-               $providerPriv = \TestingAccessWrapper::newFromObject( $provider );
+               $providerPriv = TestingAccessWrapper::newFromObject( $provider );
                $config = new \HashConfig( [
                        'BlockDisablesLogin' => false
                ] );
index 3fc45a4..9222843 100644 (file)
@@ -2,6 +2,8 @@
 
 namespace MediaWiki\Auth;
 
+use Wikimedia\TestingAccessWrapper;
+
 /**
  * @group AuthManager
  * @covers MediaWiki\Auth\ConfirmLinkSecondaryAuthenticationProvider
@@ -126,7 +128,7 @@ class ConfirmLinkSecondaryAuthenticationProviderTest extends \MediaWikiTestCase
                        ->will( $this->returnValue( "BadReq" ) );
 
                $user = \User::newFromName( 'UTSysop' );
-               $provider = \TestingAccessWrapper::newFromObject(
+               $provider = TestingAccessWrapper::newFromObject(
                        new ConfirmLinkSecondaryAuthenticationProvider
                );
                $request = new \FauxRequest();
@@ -171,7 +173,7 @@ class ConfirmLinkSecondaryAuthenticationProviderTest extends \MediaWikiTestCase
                        $r->action = AuthManager::ACTION_CHANGE;
                        $r->username = $user->getName();
                }
-               $this->assertEquals( $expectReqs, \TestingAccessWrapper::newFromObject( $req )->linkRequests );
+               $this->assertEquals( $expectReqs, TestingAccessWrapper::newFromObject( $req )->linkRequests );
        }
 
        public function testContinueLinkAttempt() {
@@ -190,7 +192,7 @@ class ConfirmLinkSecondaryAuthenticationProviderTest extends \MediaWikiTestCase
                        ->will( $this->returnValue( $obj ) );
                $this->assertSame(
                        $obj,
-                       \TestingAccessWrapper::newFromObject( $mock )->continueLinkAttempt( $user, 'state', $reqs )
+                       TestingAccessWrapper::newFromObject( $mock )->continueLinkAttempt( $user, 'state', $reqs )
                );
 
                // Now test the actual functioning
@@ -224,7 +226,7 @@ class ConfirmLinkSecondaryAuthenticationProviderTest extends \MediaWikiTestCase
                $request = new \FauxRequest();
                $manager = new AuthManager( $request, $config );
                $provider->setManager( $manager );
-               $provider = \TestingAccessWrapper::newFromObject( $provider );
+               $provider = TestingAccessWrapper::newFromObject( $provider );
 
                $req = new ConfirmLinkAuthenticationRequest( $reqs );
 
index ec4bea1..3757069 100644 (file)
@@ -3,6 +3,7 @@
 namespace MediaWiki\Auth;
 
 use Psr\Log\LoggerInterface;
+use Wikimedia\TestingAccessWrapper;
 
 class EmailNotificationSecondaryAuthenticationProviderTest extends \PHPUnit_Framework_TestCase {
        public function testConstructor() {
@@ -13,14 +14,14 @@ class EmailNotificationSecondaryAuthenticationProviderTest extends \PHPUnit_Fram
 
                $provider = new EmailNotificationSecondaryAuthenticationProvider();
                $provider->setConfig( $config );
-               $providerPriv = \TestingAccessWrapper::newFromObject( $provider );
+               $providerPriv = TestingAccessWrapper::newFromObject( $provider );
                $this->assertTrue( $providerPriv->sendConfirmationEmail );
 
                $provider = new EmailNotificationSecondaryAuthenticationProvider( [
                        'sendConfirmationEmail' => false,
                ] );
                $provider->setConfig( $config );
-               $providerPriv = \TestingAccessWrapper::newFromObject( $provider );
+               $providerPriv = TestingAccessWrapper::newFromObject( $provider );
                $this->assertFalse( $providerPriv->sendConfirmationEmail );
        }
 
@@ -57,24 +58,24 @@ class EmailNotificationSecondaryAuthenticationProviderTest extends \PHPUnit_Fram
        public function testBeginSecondaryAccountCreation() {
                $authManager = new AuthManager( new \FauxRequest(), new \HashConfig() );
 
-               $creator = $this->getMock( 'User' );
-               $userWithoutEmail = $this->getMock( 'User' );
+               $creator = $this->getMockBuilder( 'User' )->getMock();
+               $userWithoutEmail = $this->getMockBuilder( 'User' )->getMock();
                $userWithoutEmail->expects( $this->any() )->method( 'getEmail' )->willReturn( '' );
                $userWithoutEmail->expects( $this->any() )->method( 'getInstanceForUpdate' )->willReturnSelf();
                $userWithoutEmail->expects( $this->never() )->method( 'sendConfirmationMail' );
-               $userWithEmailError = $this->getMock( 'User' );
+               $userWithEmailError = $this->getMockBuilder( 'User' )->getMock();
                $userWithEmailError->expects( $this->any() )->method( 'getEmail' )->willReturn( 'foo@bar.baz' );
                $userWithEmailError->expects( $this->any() )->method( 'getInstanceForUpdate' )->willReturnSelf();
                $userWithEmailError->expects( $this->any() )->method( 'sendConfirmationMail' )
                        ->willReturn( \Status::newFatal( 'fail' ) );
-               $userExpectsConfirmation = $this->getMock( 'User' );
+               $userExpectsConfirmation = $this->getMockBuilder( 'User' )->getMock();
                $userExpectsConfirmation->expects( $this->any() )->method( 'getEmail' )
                        ->willReturn( 'foo@bar.baz' );
                $userExpectsConfirmation->expects( $this->any() )->method( 'getInstanceForUpdate' )
                        ->willReturnSelf();
                $userExpectsConfirmation->expects( $this->once() )->method( 'sendConfirmationMail' )
                        ->willReturn( \Status::newGood() );
-               $userNotExpectsConfirmation = $this->getMock( 'User' );
+               $userNotExpectsConfirmation = $this->getMockBuilder( 'User' )->getMock();
                $userNotExpectsConfirmation->expects( $this->any() )->method( 'getEmail' )
                        ->willReturn( 'foo@bar.baz' );
                $userNotExpectsConfirmation->expects( $this->any() )->method( 'getInstanceForUpdate' )
index b96455e..3b00194 100644 (file)
@@ -15,7 +15,8 @@ class LegacyHookPreAuthenticationProviderTest extends \MediaWikiTestCase {
         * @return LegacyHookPreAuthenticationProvider
         */
        protected function getProvider() {
-               $request = $this->getMock( 'FauxRequest', [ 'getIP' ] );
+               $request = $this->getMockBuilder( 'FauxRequest' )
+                       ->setMethods( [ 'getIP' ] )->getMock();
                $request->expects( $this->any() )->method( 'getIP' )->will( $this->returnValue( '127.0.0.42' ) );
 
                $manager = new AuthManager(
@@ -39,7 +40,7 @@ class LegacyHookPreAuthenticationProviderTest extends \MediaWikiTestCase {
         * @return object $mock->expects( $expect )->method( ... ).
         */
        protected function hook( $hook, $expect ) {
-               $mock = $this->getMock( __CLASS__, [ "on$hook" ] );
+               $mock = $this->getMockBuilder( __CLASS__ )->setMethods( [ "on$hook" ] )->getMock();
                $this->mergeMwGlobalArrayValue( 'wgHooks', [
                        $hook => [ $mock ],
                ] );
index 72a03c3..b89f1e0 100644 (file)
@@ -3,6 +3,7 @@
 namespace MediaWiki\Auth;
 
 use MediaWiki\MediaWikiServices;
+use Wikimedia\TestingAccessWrapper;
 
 /**
  * @group AuthManager
@@ -38,11 +39,10 @@ class LocalPasswordPrimaryAuthenticationProviderTest extends \MediaWikiTestCase
                }
                $this->validity = \Status::newGood();
 
-               $provider = $this->getMock(
-                       LocalPasswordPrimaryAuthenticationProvider::class,
-                       [ 'checkPasswordValidity' ],
-                       [ [ 'loginOnly' => $loginOnly ] ]
-               );
+               $provider = $this->getMockBuilder( LocalPasswordPrimaryAuthenticationProvider::class )
+                       ->setMethods( [ 'checkPasswordValidity' ] )
+                       ->setConstructorArgs( [ [ 'loginOnly' => $loginOnly ] ] )
+                       ->getMock();
                $provider->expects( $this->any() )->method( 'checkPasswordValidity' )
                        ->will( $this->returnCallback( function () {
                                return $this->validity;
@@ -132,7 +132,7 @@ class LocalPasswordPrimaryAuthenticationProviderTest extends \MediaWikiTestCase
                $provider->setConfig( $this->config );
                $provider->setLogger( new \Psr\Log\NullLogger() );
                $provider->setManager( $this->manager );
-               $providerPriv = \TestingAccessWrapper::newFromObject( $provider );
+               $providerPriv = TestingAccessWrapper::newFromObject( $provider );
 
                $user = $this->getMutableTestUser()->getUser();
                $userName = $user->getName();
@@ -348,7 +348,7 @@ class LocalPasswordPrimaryAuthenticationProviderTest extends \MediaWikiTestCase
                } elseif ( $type === PasswordDomainAuthenticationRequest::class ) {
                        $req = new $type( [] );
                } else {
-                       $req = $this->getMock( $type );
+                       $req = $this->createMock( $type );
                }
                $req->action = AuthManager::ACTION_CHANGE;
                $req->username = $user;
@@ -444,7 +444,7 @@ class LocalPasswordPrimaryAuthenticationProviderTest extends \MediaWikiTestCase
                if ( $type === PasswordAuthenticationRequest::class ) {
                        $changeReq = new $type();
                } else {
-                       $changeReq = $this->getMock( $type );
+                       $changeReq = $this->createMock( $type );
                }
                $changeReq->action = AuthManager::ACTION_CHANGE;
                $changeReq->username = $user;
index 3f90169..9bcab77 100644 (file)
@@ -2,6 +2,8 @@
 
 namespace MediaWiki\Auth;
 
+use Wikimedia\TestingAccessWrapper;
+
 /**
  * @group AuthManager
  * @covers MediaWiki\Auth\RememberMeAuthenticationRequest
@@ -17,7 +19,7 @@ class RememberMeAuthenticationRequestTest extends AuthenticationRequestTestCase
 
        public function testGetFieldInfo_2() {
                $req = new RememberMeAuthenticationRequest();
-               $reqWrapper = \TestingAccessWrapper::newFromObject( $req );
+               $reqWrapper = TestingAccessWrapper::newFromObject( $req );
 
                $reqWrapper->expiration = 30 * 24 * 3600;
                $this->assertNotEmpty( $req->getFieldInfo() );
@@ -28,7 +30,7 @@ class RememberMeAuthenticationRequestTest extends AuthenticationRequestTestCase
 
        protected function getInstance( array $args = [] ) {
                $req = new RememberMeAuthenticationRequest();
-               $reqWrapper = \TestingAccessWrapper::newFromObject( $req );
+               $reqWrapper = TestingAccessWrapper::newFromObject( $req );
                $reqWrapper->expiration = $args[0];
                return $req;
        }
index 90ed542..f454a96 100644 (file)
@@ -2,6 +2,8 @@
 
 namespace MediaWiki\Auth;
 
+use Wikimedia\TestingAccessWrapper;
+
 /**
  * @group AuthManager
  * @covers MediaWiki\Auth\ResetPasswordSecondaryAuthenticationProvider
@@ -85,7 +87,7 @@ class ResetPasswordSecondaryAuthenticationProviderTest extends \MediaWikiTestCas
                ] );
                $manager = new AuthManager( new \FauxRequest, $config );
                $provider->setManager( $manager );
-               $provider = \TestingAccessWrapper::newFromObject( $provider );
+               $provider = TestingAccessWrapper::newFromObject( $provider );
 
                $msg = wfMessage( 'foo' );
                $skipReq = new ButtonAuthenticationRequest(
index bc7d65e..6f45fa4 100644 (file)
@@ -4,6 +4,7 @@ namespace MediaWiki\Auth;
 
 use MediaWiki\MediaWikiServices;
 use Wikimedia\ScopedCallback;
+use Wikimedia\TestingAccessWrapper;
 
 /**
  * @group AuthManager
@@ -42,11 +43,10 @@ class TemporaryPasswordPrimaryAuthenticationProviderTest extends \MediaWikiTestC
                $this->validity = \Status::newGood();
 
                $mockedMethods[] = 'checkPasswordValidity';
-               $provider = $this->getMock(
-                       TemporaryPasswordPrimaryAuthenticationProvider::class,
-                       $mockedMethods,
-                       [ $params ]
-               );
+               $provider = $this->getMockBuilder( TemporaryPasswordPrimaryAuthenticationProvider::class )
+                       ->setMethods( $mockedMethods )
+                       ->setConstructorArgs( [ $params ] )
+                       ->getMock();
                $provider->expects( $this->any() )->method( 'checkPasswordValidity' )
                        ->will( $this->returnCallback( function () {
                                return $this->validity;
@@ -107,13 +107,13 @@ class TemporaryPasswordPrimaryAuthenticationProviderTest extends \MediaWikiTestC
                        'PasswordReminderResendTime' => 101,
                ] );
 
-               $p = \TestingAccessWrapper::newFromObject( new TemporaryPasswordPrimaryAuthenticationProvider() );
+               $p = TestingAccessWrapper::newFromObject( new TemporaryPasswordPrimaryAuthenticationProvider() );
                $p->setConfig( $config );
                $this->assertSame( false, $p->emailEnabled );
                $this->assertSame( 100, $p->newPasswordExpiry );
                $this->assertSame( 101, $p->passwordReminderResendTime );
 
-               $p = \TestingAccessWrapper::newFromObject( new TemporaryPasswordPrimaryAuthenticationProvider( [
+               $p = TestingAccessWrapper::newFromObject( new TemporaryPasswordPrimaryAuthenticationProvider( [
                        'emailEnabled' => true,
                        'newPasswordExpiry' => 42,
                        'passwordReminderResendTime' => 43,
@@ -136,7 +136,7 @@ class TemporaryPasswordPrimaryAuthenticationProviderTest extends \MediaWikiTestC
                $pwhash = $passwordFactory->newFromPlaintext( 'password' )->toString();
 
                $provider = $this->getProvider();
-               $providerPriv = \TestingAccessWrapper::newFromObject( $provider );
+               $providerPriv = TestingAccessWrapper::newFromObject( $provider );
 
                $this->assertFalse( $provider->testUserCanAuthenticate( '<invalid>' ) );
                $this->assertFalse( $provider->testUserCanAuthenticate( 'DoesNotExist' ) );
@@ -250,7 +250,7 @@ class TemporaryPasswordPrimaryAuthenticationProviderTest extends \MediaWikiTestC
                $reqs = [ PasswordAuthenticationRequest::class => $req ];
 
                $provider = $this->getProvider();
-               $providerPriv = \TestingAccessWrapper::newFromObject( $provider );
+               $providerPriv = TestingAccessWrapper::newFromObject( $provider );
 
                $providerPriv->newPasswordExpiry = 100;
 
@@ -366,7 +366,7 @@ class TemporaryPasswordPrimaryAuthenticationProviderTest extends \MediaWikiTestC
                ) {
                        $req = new $type();
                } else {
-                       $req = $this->getMock( $type );
+                       $req = $this->createMock( $type );
                }
                $req->action = AuthManager::ACTION_CHANGE;
                $req->username = $user;
@@ -446,7 +446,7 @@ class TemporaryPasswordPrimaryAuthenticationProviderTest extends \MediaWikiTestC
                ) {
                        $changeReq = new $type();
                } else {
-                       $changeReq = $this->getMock( $type );
+                       $changeReq = $this->createMock( $type );
                }
                $changeReq->action = AuthManager::ACTION_CHANGE;
                $changeReq->username = $user;
@@ -574,7 +574,7 @@ class TemporaryPasswordPrimaryAuthenticationProviderTest extends \MediaWikiTestC
                ScopedCallback::consume( $resetMailer );
                $this->assertTrue( $mailed );
 
-               $priv = \TestingAccessWrapper::newFromObject( $provider );
+               $priv = TestingAccessWrapper::newFromObject( $provider );
                $req->username = '<invalid>';
                $status = $priv->sendPasswordResetEmail( $req );
                $this->assertEquals( \Status::newFatal( 'noname' ), $status );
index 2f3e27c..58982de 100644 (file)
@@ -2,6 +2,8 @@
 
 namespace MediaWiki\Auth;
 
+use Wikimedia\TestingAccessWrapper;
+
 /**
  * @group AuthManager
  * @group Database
@@ -10,7 +12,7 @@ namespace MediaWiki\Auth;
 class ThrottlePreAuthenticationProviderTest extends \MediaWikiTestCase {
        public function testConstructor() {
                $provider = new ThrottlePreAuthenticationProvider();
-               $providerPriv = \TestingAccessWrapper::newFromObject( $provider );
+               $providerPriv = TestingAccessWrapper::newFromObject( $provider );
                $config = new \HashConfig( [
                        'AccountCreationThrottle' => [ [
                                'count' => 123,
@@ -26,11 +28,11 @@ class ThrottlePreAuthenticationProviderTest extends \MediaWikiTestCase {
                        'accountCreationThrottle' => [ [ 'count' => 123, 'seconds' => 86400 ] ],
                        'passwordAttemptThrottle' => [ [ 'count' => 5, 'seconds' => 300 ] ]
                ], $providerPriv->throttleSettings );
-               $accountCreationThrottle = \TestingAccessWrapper::newFromObject(
+               $accountCreationThrottle = TestingAccessWrapper::newFromObject(
                        $providerPriv->accountCreationThrottle );
                $this->assertSame( [ [ 'count' => 123, 'seconds' => 86400 ] ],
                        $accountCreationThrottle->conditions );
-               $passwordAttemptThrottle = \TestingAccessWrapper::newFromObject(
+               $passwordAttemptThrottle = TestingAccessWrapper::newFromObject(
                        $providerPriv->passwordAttemptThrottle );
                $this->assertSame( [ [ 'count' => 5, 'seconds' => 300 ] ],
                        $passwordAttemptThrottle->conditions );
@@ -39,7 +41,7 @@ class ThrottlePreAuthenticationProviderTest extends \MediaWikiTestCase {
                        'accountCreationThrottle' => [ [ 'count' => 43, 'seconds' => 10000 ] ],
                        'passwordAttemptThrottle' => [ [ 'count' => 11, 'seconds' => 100 ] ],
                ] );
-               $providerPriv = \TestingAccessWrapper::newFromObject( $provider );
+               $providerPriv = TestingAccessWrapper::newFromObject( $provider );
                $config = new \HashConfig( [
                        'AccountCreationThrottle' => [ [
                                'count' => 123,
@@ -58,15 +60,15 @@ class ThrottlePreAuthenticationProviderTest extends \MediaWikiTestCase {
 
                $cache = new \HashBagOStuff();
                $provider = new ThrottlePreAuthenticationProvider( [ 'cache' => $cache ] );
-               $providerPriv = \TestingAccessWrapper::newFromObject( $provider );
+               $providerPriv = TestingAccessWrapper::newFromObject( $provider );
                $provider->setConfig( new \HashConfig( [
                        'AccountCreationThrottle' => [ [ 'count' => 1, 'seconds' => 1 ] ],
                        'PasswordAttemptThrottle' => [ [ 'count' => 1, 'seconds' => 1 ] ],
                ] ) );
-               $accountCreationThrottle = \TestingAccessWrapper::newFromObject(
+               $accountCreationThrottle = TestingAccessWrapper::newFromObject(
                        $providerPriv->accountCreationThrottle );
                $this->assertSame( $cache, $accountCreationThrottle->cache );
-               $passwordAttemptThrottle = \TestingAccessWrapper::newFromObject(
+               $passwordAttemptThrottle = TestingAccessWrapper::newFromObject(
                        $providerPriv->passwordAttemptThrottle );
                $this->assertSame( $cache, $passwordAttemptThrottle->cache );
        }
@@ -119,7 +121,9 @@ class ThrottlePreAuthenticationProviderTest extends \MediaWikiTestCase {
                $user = \User::newFromName( 'RandomUser' );
                $creator = \User::newFromName( $creatorname );
                if ( $hook ) {
-                       $mock = $this->getMock( 'stdClass', [ 'onExemptFromAccountCreationThrottle' ] );
+                       $mock = $this->getMockBuilder( 'stdClass' )
+                               ->setMethods( [ 'onExemptFromAccountCreationThrottle' ] )
+                               ->getMock();
                        $mock->expects( $this->any() )->method( 'onExemptFromAccountCreationThrottle' )
                                ->will( $this->returnValue( false ) );
                        $this->mergeMwGlobalArrayValue( 'wgHooks', [
index c945885..f52048a 100644 (file)
@@ -8,6 +8,7 @@ use InvalidArgumentException;
 use Psr\Log\AbstractLogger;
 use Psr\Log\LoggerInterface;
 use Psr\Log\NullLogger;
+use Wikimedia\TestingAccessWrapper;
 
 /**
  * @group AuthManager
@@ -25,7 +26,7 @@ class ThrottlerTest extends \MediaWikiTestCase {
                        [ 'type' => 'foo', 'cache' => $cache ]
                );
                $throttler->setLogger( $logger );
-               $throttlerPriv = \TestingAccessWrapper::newFromObject( $throttler );
+               $throttlerPriv = TestingAccessWrapper::newFromObject( $throttler );
                $this->assertSame( [ [ 'count' => 123, 'seconds' => 456 ] ], $throttlerPriv->conditions );
                $this->assertSame( 'foo', $throttlerPriv->type );
                $this->assertSame( $cache, $throttlerPriv->cache );
@@ -33,7 +34,7 @@ class ThrottlerTest extends \MediaWikiTestCase {
 
                $throttler = new Throttler( [ [ 'count' => 123, 'seconds' => 456 ] ] );
                $throttler->setLogger( new NullLogger() );
-               $throttlerPriv = \TestingAccessWrapper::newFromObject( $throttler );
+               $throttlerPriv = TestingAccessWrapper::newFromObject( $throttler );
                $this->assertSame( [ [ 'count' => 123, 'seconds' => 456 ] ], $throttlerPriv->conditions );
                $this->assertSame( 'custom', $throttlerPriv->type );
                $this->assertInstanceOf( BagOStuff::class, $throttlerPriv->cache );
@@ -43,7 +44,7 @@ class ThrottlerTest extends \MediaWikiTestCase {
                        'seconds' => 654 ] ] ] );
                $throttler = new Throttler();
                $throttler->setLogger( new NullLogger() );
-               $throttlerPriv = \TestingAccessWrapper::newFromObject( $throttler );
+               $throttlerPriv = TestingAccessWrapper::newFromObject( $throttler );
                $this->assertSame( [ [ 'count' => 321, 'seconds' => 654 ] ], $throttlerPriv->conditions );
                $this->assertSame( 'password', $throttlerPriv->type );
                $this->assertInstanceOf( BagOStuff::class, $throttlerPriv->cache );
@@ -63,7 +64,7 @@ class ThrottlerTest extends \MediaWikiTestCase {
        public function testNormalizeThrottleConditions( $condition, $normalized ) {
                $throttler = new Throttler( $condition );
                $throttler->setLogger( new NullLogger() );
-               $throttlerPriv = \TestingAccessWrapper::newFromObject( $throttler );
+               $throttlerPriv = TestingAccessWrapper::newFromObject( $throttler );
                $this->assertSame( $normalized, $throttlerPriv->conditions );
        }
 
@@ -85,7 +86,7 @@ class ThrottlerTest extends \MediaWikiTestCase {
        }
 
        public function testNormalizeThrottleConditions2() {
-               $priv = \TestingAccessWrapper::newFromClass( Throttler::class );
+               $priv = TestingAccessWrapper::newFromClass( Throttler::class );
                $this->assertSame( [], $priv->normalizeThrottleConditions( null ) );
                $this->assertSame( [], $priv->normalizeThrottleConditions( 'bad' ) );
        }
@@ -163,7 +164,8 @@ class ThrottlerTest extends \MediaWikiTestCase {
        }
 
        public function testExpiration() {
-               $cache = $this->getMock( HashBagOStuff::class, [ 'add' ] );
+               $cache = $this->getMockBuilder( HashBagOStuff::class )
+                       ->setMethods( [ 'add' ] )->getMock();
                $throttler = new Throttler( [ [ 'count' => 3, 'seconds' => 10 ] ], [ 'cache' => $cache ] );
                $throttler->setLogger( new NullLogger() );
 
index dc868a8..04b7ee0 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 
+use Wikimedia\TestingAccessWrapper;
+
 /**
  * @covers ChangesListStringOptionsFilterGroup
  */
@@ -183,8 +185,8 @@ class ChangesListStringOptionsFilterGroupTest extends MediaWikiTestCase {
         * @dataProvider provideModifyQuery
         */
        protected function modifyQueryHelper( $groupDefinition, $input ) {
-               $ctx = $this->getMock( 'IContextSource' );
-               $dbr = $this->getMock( 'IDatabase' );
+               $ctx = $this->createMock( 'IContextSource' );
+               $dbr = $this->createMock( 'IDatabase' );
                $tables = $fields = $conds = $query_options = $join_conds = [];
 
                $group = new ChangesListStringOptionsFilterGroup( $groupDefinition );
index a3d1dda..403bee1 100644 (file)
@@ -429,7 +429,7 @@ class ContentHandlerTest extends MediaWikiTestCase {
         * @covers ContentHandler::getDataForSearchIndex
         */
        public function testDataIndexFields() {
-               $mockEngine = $this->getMock( 'SearchEngine' );
+               $mockEngine = $this->createMock( 'SearchEngine' );
                $title = Title::newFromText( 'Not_Main_Page', NS_MAIN );
                $page = new WikiPage( $title );
 
index 276a86e..65efcc9 100644 (file)
@@ -16,7 +16,7 @@ class FileContentHandlerTest extends MediaWikiLangTestCase {
        }
 
        public function testIndexMapping() {
-               $mockEngine = $this->getMock( 'SearchEngine' );
+               $mockEngine = $this->createMock( 'SearchEngine' );
 
                $mockEngine->expects( $this->atLeastOnce() )
                        ->method( 'makeSearchFieldMapping' )
index 918815c..7d9f74e 100644 (file)
@@ -16,7 +16,7 @@ class TextContentHandlerTest extends MediaWikiLangTestCase {
        public function testFieldsForIndex() {
                $handler = new TextContentHandler();
 
-               $mockEngine = $this->getMock( 'SearchEngine' );
+               $mockEngine = $this->createMock( 'SearchEngine' );
 
                $mockEngine->expects( $this->atLeastOnce() )
                        ->method( 'makeSearchFieldMapping' )
index ec97d76..290b11a 100644 (file)
@@ -245,7 +245,7 @@ class WikitextContentHandlerTest extends MediaWikiLangTestCase {
        */
 
        public function testDataIndexFieldsFile() {
-               $mockEngine = $this->getMock( 'SearchEngine' );
+               $mockEngine = $this->createMock( 'SearchEngine' );
                $title = Title::newFromText( 'Somefile.jpg', NS_FILE );
                $page = new WikiPage( $title );
 
index b95462a..97e9b26 100644 (file)
@@ -28,6 +28,7 @@
 use Wikimedia\Rdbms\TransactionProfiler;
 use Wikimedia\Rdbms\DatabaseDomain;
 use Wikimedia\Rdbms\MySQLMasterPos;
+use Wikimedia\Rdbms\DatabaseMysqlBase;
 
 /**
  * Fake class around abstract class so we can call concrete methods.
index d7fe022..6d960e1 100644 (file)
@@ -1,6 +1,8 @@
 <?php
 
 use Wikimedia\Rdbms\Blob;
+use Wikimedia\Rdbms\Database;
+use Wikimedia\Rdbms\DatabaseSqlite;
 
 class DatabaseSqliteMock extends DatabaseSqlite {
        private $lastQuery;
index 0ee7d26..fda3ac6 100644 (file)
@@ -21,7 +21,7 @@
 namespace MediaWiki\Logger;
 
 use MediaWikiTestCase;
-use TestingAccessWrapper;
+use Wikimedia\TestingAccessWrapper;
 
 class MonologSpiTest extends MediaWikiTestCase {
 
index d6249bb..88cd2dd 100644 (file)
@@ -22,6 +22,7 @@ namespace MediaWiki\Logger\Monolog;
 
 use MediaWikiTestCase;
 use Monolog\Logger;
+use Wikimedia\TestingAccessWrapper;
 
 class KafkaHandlerTest extends MediaWikiTestCase {
 
@@ -154,13 +155,13 @@ class KafkaHandlerTest extends MediaWikiTestCase {
                        ->method( 'send' )
                        ->will( $this->returnValue( true ) );
                // evil hax
-               \TestingAccessWrapper::newFromObject( $mockMethod )->matcher->parametersMatcher =
+               TestingAccessWrapper::newFromObject( $mockMethod )->matcher->parametersMatcher =
                        new \PHPUnit_Framework_MockObject_Matcher_ConsecutiveParameters( [
                                [ $this->anything(), $this->anything(), [ 'words' ] ],
                                [ $this->anything(), $this->anything(), [ 'lines' ] ]
                        ] );
 
-               $formatter = $this->getMock( 'Monolog\Formatter\FormatterInterface' );
+               $formatter = $this->createMock( 'Monolog\Formatter\FormatterInterface' );
                $formatter->expects( $this->any() )
                        ->method( 'format' )
                        ->will( $this->onConsecutiveCalls( 'words', null, 'lines' ) );
@@ -191,7 +192,7 @@ class KafkaHandlerTest extends MediaWikiTestCase {
                        ->method( 'send' )
                        ->will( $this->returnValue( true ) );
 
-               $formatter = $this->getMock( 'Monolog\Formatter\FormatterInterface' );
+               $formatter = $this->createMock( 'Monolog\Formatter\FormatterInterface' );
                $formatter->expects( $this->any() )
                        ->method( 'format' )
                        ->will( $this->onConsecutiveCalls( 'words', null, 'lines' ) );
index f33cf7e..2768d32 100644 (file)
@@ -24,7 +24,7 @@ use InvalidArgumentException;
 use LengthException;
 use LogicException;
 use MediaWikiTestCase;
-use TestingAccessWrapper;
+use Wikimedia\TestingAccessWrapper;
 
 class LineFormatterTest extends MediaWikiTestCase {
 
index b96ec08..11b869a 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 
+use Wikimedia\TestingAccessWrapper;
+
 class CdnCacheUpdateTest extends MediaWikiTestCase {
        public function testPurgeMergeWeb() {
                $this->setMwGlobals( 'wgCommandLineMode', false );
index f777206..ddcf19b 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 
+use Wikimedia\TestingAccessWrapper;
+
 /**
  * @group FileRepo
  * @group FileBackend
index 6c93c79..0d00fbc 100644 (file)
@@ -117,20 +117,21 @@ class FileBackendDBRepoWrapperTest extends MediaWikiTestCase {
                        ->disableOriginalConstructor()
                        ->getMock();
 
-               $backendMock = $this->getMock( 'FSFileBackend',
-                       [],
-                       [ [
-                               'name' => $this->backendName,
-                               'wikiId' => wfWikiID()
-                       ] ] );
-
-               $wrapperMock = $this->getMock( 'FileBackendDBRepoWrapper',
-                       [ 'getDB' ],
-                       [ [
-                               'backend' => $backendMock,
-                               'repoName' => $this->repoName,
-                               'dbHandleFactory' => null
-                       ] ] );
+               $backendMock = $this->getMockBuilder( 'FSFileBackend' )
+                       ->setConstructorArgs( [ [
+                                       'name' => $this->backendName,
+                                       'wikiId' => wfWikiID()
+                               ] ] )
+                       ->getMock();
+
+               $wrapperMock = $this->getMockBuilder( 'FileBackendDBRepoWrapper' )
+                       ->setMethods( [ 'getDB' ] )
+                       ->setConstructorArgs( [ [
+                                       'backend' => $backendMock,
+                                       'repoName' => $this->repoName,
+                                       'dbHandleFactory' => null
+                               ] ] )
+                       ->getMock();
 
                $wrapperMock->expects( $this->any() )->method( 'getDB' )->will( $this->returnValue( $dbMock ) );
 
index d3f9374..800c2fc 100644 (file)
@@ -41,19 +41,21 @@ class MigrateFileRepoLayoutTest extends MediaWikiTestCase {
                                new FakeResultWrapper( [] ) // filearchive
                        ) );
 
-               $repoMock = $this->getMock( 'LocalRepo',
-                       [ 'getMasterDB' ],
-                       [ [
-                               'name' => 'migratefilerepolayouttest',
-                               'backend' => $backend
-                       ] ] );
+               $repoMock = $this->getMockBuilder( 'LocalRepo' )
+                       ->setMethods( [ 'getMasterDB' ] )
+                       ->setConstructorArgs( [ [
+                                       'name' => 'migratefilerepolayouttest',
+                                       'backend' => $backend
+                               ] ] )
+                       ->getMock();
 
                $repoMock
                        ->expects( $this->any() )
                        ->method( 'getMasterDB' )
                        ->will( $this->returnValue( $dbMock ) );
 
-               $this->migratorMock = $this->getMock( 'MigrateFileRepoLayout', [ 'getRepo' ] );
+               $this->migratorMock = $this->getMockBuilder( 'MigrateFileRepoLayout' )
+                       ->setMethods( [ 'getRepo' ] )->getMock();
                $this->migratorMock
                        ->expects( $this->any() )
                        ->method( 'getRepo' )
index 25c6e95..82ff12e 100644 (file)
@@ -15,7 +15,7 @@ class RepoGroupTest extends MediaWikiTestCase {
 
        function testForEachForeignRepo() {
                $this->setUpForeignRepo();
-               $fakeCallback = $this->getMock( 'RepoGroupTestHelper' );
+               $fakeCallback = $this->createMock( 'RepoGroupTestHelper' );
                $fakeCallback->expects( $this->once() )->method( 'callback' );
                RepoGroup::singleton()->forEachForeignRepo(
                        [ $fakeCallback, 'callback' ], [ [] ] );
@@ -25,7 +25,7 @@ class RepoGroupTest extends MediaWikiTestCase {
                $this->setMwGlobals( 'wgForeignFileRepos', [] );
                RepoGroup::destroySingleton();
                FileBackendGroup::destroySingleton();
-               $fakeCallback = $this->getMock( 'RepoGroupTestHelper' );
+               $fakeCallback = $this->createMock( 'RepoGroupTestHelper' );
                $fakeCallback->expects( $this->never() )->method( 'callback' );
                RepoGroup::singleton()->forEachForeignRepo(
                        [ $fakeCallback, 'callback' ], [ [] ] );
index 6520610..5b5f1b0 100644 (file)
@@ -155,7 +155,8 @@ class FileTest extends MediaWikiMediaTestCase {
                        ->method( 'getLocalReference' )
                        ->will( $this->returnValue( $fsFile ) );
 
-               $handlerMock = $this->getMock( 'BitmapHandler', [ 'supportsBucketing' ] );
+               $handlerMock = $this->getMockBuilder( 'BitmapHandler' )
+                       ->setMethods( [ 'supportsBucketing' ] )->getMock();
                $handlerMock->expects( $this->any() )
                        ->method( 'supportsBucketing' )
                        ->will( $this->returnValue( $data['supportsBucketing'] ) );
@@ -261,7 +262,8 @@ class FileTest extends MediaWikiMediaTestCase {
                                'generateAndSaveThumb', 'getHandler' ] )
                        ->getMockForAbstractClass();
 
-               $handlerMock = $this->getMock( 'JpegHandler', [ 'supportsBucketing' ] );
+               $handlerMock = $this->getMockBuilder( 'JpegHandler' )
+                       ->setMethods( [ 'supportsBucketing' ] )->getMock();
                $handlerMock->expects( $this->any() )
                        ->method( 'supportsBucketing' )
                        ->will( $this->returnValue( true ) );
index 600a36f..1deb7aa 100644 (file)
@@ -18,7 +18,8 @@ class JobTest extends MediaWikiTestCase {
        }
 
        public function provideTestToString() {
-               $mockToStringObj = $this->getMock( 'stdClass', [ '__toString' ] );
+               $mockToStringObj = $this->getMockBuilder( 'stdClass' )
+                       ->setMethods( [ '__toString' ] )->getMock();
                $mockToStringObj->expects( $this->any() )
                        ->method( '__toString' )
                        ->will( $this->returnValue( '{STRING_OBJ_VAL}' ) );
index f768d06..9d12b10 100644 (file)
@@ -6,7 +6,7 @@ class DnsSrvDiscovererTest extends PHPUnit_Framework_TestCase {
         * @dataProvider provideRecords
         */
        public function testPickServer( $params, $expected ) {
-               $discoverer = new DnsSrvDiscoverer( '_etcd._tcp.eqiad.wmnet' );
+               $discoverer = new DnsSrvDiscoverer( 'etcd-tcp.example.net' );
                $record = $discoverer->pickServer( $params );
 
                $this->assertEquals( $expected, $record );
@@ -18,26 +18,26 @@ class DnsSrvDiscovererTest extends PHPUnit_Framework_TestCase {
                        [
                                [ // record list
                                        [
-                                               'target' => 'conf1003.eqiad.wmnet',
+                                               'target' => 'conf03.example.net',
                                                'port' => 'SRV',
                                                'pri' => 0,
                                                'weight' => 1,
                                        ],
                                        [
-                                               'target' => 'conf1002.eqiad.wmnet',
+                                               'target' => 'conf02.example.net',
                                                'port' => 'SRV',
                                                'pri' => 1,
                                                'weight' => 1,
                                        ],
                                        [
-                                               'target' => 'conf1001.eqiad.wmnet',
+                                               'target' => 'conf01.example.net',
                                                'port' => 'SRV',
                                                'pri' => 2,
                                                'weight' => 1,
                                        ],
                                ], // selected record
                                [
-                                       'target' => 'conf1003.eqiad.wmnet',
+                                       'target' => 'conf03.example.net',
                                        'port' => 'SRV',
                                        'pri' => 0,
                                        'weight' => 1,
@@ -46,38 +46,38 @@ class DnsSrvDiscovererTest extends PHPUnit_Framework_TestCase {
                        [
                                [ // record list
                                        [
-                                               'target' => 'conf1003or2.eqiad.wmnet',
+                                               'target' => 'conf03or2.example.net',
                                                'port' => 'SRV',
                                                'pri' => 0,
                                                'weight' => 1,
                                        ],
                                        [
-                                               'target' => 'conf1003or2.eqiad.wmnet',
+                                               'target' => 'conf03or2.example.net',
                                                'port' => 'SRV',
                                                'pri' => 0,
                                                'weight' => 1,
                                        ],
                                        [
-                                               'target' => 'conf1001.eqiad.wmnet',
+                                               'target' => 'conf01.example.net',
                                                'port' => 'SRV',
                                                'pri' => 2,
                                                'weight' => 1,
                                        ],
                                        [
-                                               'target' => 'conf1004.eqiad.wmnet',
+                                               'target' => 'conf04.example.net',
                                                'port' => 'SRV',
                                                'pri' => 2,
                                                'weight' => 1,
                                        ],
                                        [
-                                               'target' => 'conf1005.eqiad.wmnet',
+                                               'target' => 'conf05.example.net',
                                                'port' => 'SRV',
                                                'pri' => 3,
                                                'weight' => 1,
                                        ],
                                ], // selected record
                                [
-                                       'target' => 'conf1003or2.eqiad.wmnet',
+                                       'target' => 'conf03or2.example.net',
                                        'port' => 'SRV',
                                        'pri' => 0,
                                        'weight' => 1,
@@ -85,4 +85,56 @@ class DnsSrvDiscovererTest extends PHPUnit_Framework_TestCase {
                        ],
                ];
        }
+
+       public function testRemoveServer() {
+               $dsd = new DnsSrvDiscoverer( 'localhost' );
+
+               $servers = [
+                       [
+                               'target' => 'conf01.example.net',
+                               'port' => 35,
+                               'pri' => 2,
+                               'weight' => 1,
+                       ],
+                       [
+                               'target' => 'conf04.example.net',
+                               'port' => 74,
+                               'pri' => 2,
+                               'weight' => 1,
+                       ],
+                       [
+                               'target' => 'conf05.example.net',
+                               'port' => 77,
+                               'pri' => 3,
+                               'weight' => 1,
+                       ],
+               ];
+               $server = $servers[1];
+
+               $expected = [
+                       [
+                               'target' => 'conf01.example.net',
+                               'port' => 35,
+                               'pri' => 2,
+                               'weight' => 1,
+                       ],
+                       [
+                               'target' => 'conf05.example.net',
+                               'port' => 77,
+                               'pri' => 3,
+                               'weight' => 1,
+                       ],
+               ];
+
+               $this->assertEquals(
+                       $expected,
+                       $dsd->removeServer( $server, $servers ),
+                       "Correct server removed"
+               );
+               $this->assertEquals(
+                       $expected,
+                       $dsd->removeServer( $server, $servers ),
+                       "Nothing to remove"
+               );
+       }
 }
index 881f5e1..d99c587 100644 (file)
@@ -31,7 +31,8 @@ class MemoizedCallableTest extends PHPUnit_Framework_TestCase {
         * way as the original underlying callable.
         */
        public function testReturnValuePassedThrough() {
-               $mock = $this->getMock( 'stdClass', [ 'reverse' ] );
+               $mock = $this->getMockBuilder( 'stdClass' )
+                       ->setMethods( [ 'reverse' ] )->getMock();
                $mock->expects( $this->any() )
                        ->method( 'reverse' )
                        ->will( $this->returnCallback( 'strrev' ) );
@@ -47,7 +48,8 @@ class MemoizedCallableTest extends PHPUnit_Framework_TestCase {
         * @requires function apc_store/apcu_store
         */
        public function testCallableMemoized() {
-               $observer = $this->getMock( 'stdClass', [ 'computeSomething' ] );
+               $observer = $this->getMockBuilder( 'stdClass' )
+                       ->setMethods( [ 'computeSomething' ] )->getMock();
                $observer->expects( $this->once() )
                        ->method( 'computeSomething' )
                        ->will( $this->returnValue( 'ok' ) );
index 9a48930..c5bc03e 100644 (file)
@@ -1,13 +1,14 @@
 <?php
 
 use Liuggio\StatsdClient\Entity\StatsdData;
+use Liuggio\StatsdClient\Sender\SenderInterface;
 
 class SamplingStatsdClientTest extends PHPUnit_Framework_TestCase {
        /**
         * @dataProvider samplingDataProvider
         */
        public function testSampling( $data, $sampleRate, $seed, $expectWrite ) {
-               $sender = $this->getMock( 'Liuggio\StatsdClient\Sender\SenderInterface' );
+               $sender = $this->getMockBuilder( SenderInterface::class )->getMock();
                $sender->expects( $this->any() )->method( 'open' )->will( $this->returnValue( true ) );
                if ( $expectWrite ) {
                        $sender->expects( $this->once() )->method( 'write' )
@@ -50,7 +51,7 @@ class SamplingStatsdClientTest extends PHPUnit_Framework_TestCase {
                $nonMatching->setKey( 'oof.bar' );
                $nonMatching->setValue( 1 );
 
-               $sender = $this->getMock( 'Liuggio\StatsdClient\Sender\SenderInterface' );
+               $sender = $this->getMockBuilder( SenderInterface::class )->getMock();
                $sender->expects( $this->any() )->method( 'open' )->will( $this->returnValue( true ) );
                $sender->expects( $this->once() )->method( 'write' )->with( $this->anything(),
                        $this->equalTo( $nonMatching ) );
index a1afa77..f2fe07d 100644 (file)
@@ -275,7 +275,7 @@ class BagOStuffTest extends MediaWikiTestCase {
         * @covers BagOStuff::trackDuplicateKeys
         */
        public function testReportDupes() {
-               $logger = $this->getMock( 'Psr\Log\NullLogger' );
+               $logger = $this->createMock( Psr\Log\NullLogger::class );
                $logger->expects( $this->once() )
                        ->method( 'warning' )
                        ->with( 'Duplicate get(): "{key}" fetched {count} times', [
index a01cc6b..8b9abbc 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 
+use Wikimedia\TestingAccessWrapper;
+
 /**
  * @group BagOStuff
  */
@@ -82,4 +84,73 @@ class CachedBagOStuffTest extends PHPUnit_Framework_TestCase {
                $backend->set( 'bar', true );
                $this->assertEquals( true, $cache->get( 'bar' ) );
        }
+
+       /**
+        * @covers CachedBagOStuff::setDebug
+        */
+       public function testSetDebug() {
+               $backend = new HashBagOStuff();
+               $cache = new CachedBagOStuff( $backend );
+               // Access private property 'debugMode'
+               $backend = TestingAccessWrapper::newFromObject( $backend );
+               $cache = TestingAccessWrapper::newFromObject( $cache );
+               $this->assertFalse( $backend->debugMode );
+               $this->assertFalse( $cache->debugMode );
+
+               $cache->setDebug( true );
+               // Should have set both
+               $this->assertTrue( $backend->debugMode, 'sets backend' );
+               $this->assertTrue( $cache->debugMode, 'sets self' );
+       }
+
+       /**
+        * @covers CachedBagOStuff::deleteObjectsExpiringBefore
+        */
+       public function testExpire() {
+               $backend = $this->getMockBuilder( HashBagOStuff::class )
+                       ->setMethods( [ 'deleteObjectsExpiringBefore' ] )
+                       ->getMock();
+               $backend->expects( $this->once() )
+                       ->method( 'deleteObjectsExpiringBefore' )
+                       ->willReturn( false );
+
+               $cache = new CachedBagOStuff( $backend );
+               $cache->deleteObjectsExpiringBefore( '20110401000000' );
+       }
+
+       /**
+        * @covers CachedBagOStuff::makeKey
+        */
+       public function testMakeKey() {
+               $backend = $this->getMockBuilder( HashBagOStuff::class )
+                       ->setMethods( [ 'makeKey' ] )
+                       ->getMock();
+               $backend->method( 'makeKey' )
+                       ->willReturn( 'special/logic' );
+
+               // CachedBagOStuff wraps any backend with a process cache
+               // using HashBagOStuff. Hash has no special key limitations,
+               // but backends often do. Make sure it uses the backend's
+               // makeKey() logic, not the one inherited from HashBagOStuff
+               $cache = new CachedBagOStuff( $backend );
+
+               $this->assertEquals( 'special/logic', $backend->makeKey( 'special', 'logic' ) );
+               $this->assertEquals( 'special/logic', $cache->makeKey( 'special', 'logic' ) );
+       }
+
+       /**
+        * @covers CachedBagOStuff::makeGlobalKey
+        */
+       public function testMakeGlobalKey() {
+               $backend = $this->getMockBuilder( HashBagOStuff::class )
+                       ->setMethods( [ 'makeGlobalKey' ] )
+                       ->getMock();
+               $backend->method( 'makeGlobalKey' )
+                       ->willReturn( 'special/logic' );
+
+               $cache = new CachedBagOStuff( $backend );
+
+               $this->assertEquals( 'special/logic', $backend->makeGlobalKey( 'special', 'logic' ) );
+               $this->assertEquals( 'special/logic', $cache->makeGlobalKey( 'special', 'logic' ) );
+       }
 }
index d7ed4bd..72effd7 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 
+use Wikimedia\TestingAccessWrapper;
+
 class WANObjectCacheTest extends PHPUnit_Framework_TestCase  {
        /** @var WANObjectCache */
        private $cache;
@@ -963,7 +965,8 @@ class WANObjectCacheTest extends PHPUnit_Framework_TestCase  {
        }
 
        public function testMcRouterSupport() {
-               $localBag = $this->getMock( 'EmptyBagOStuff', [ 'set', 'delete' ] );
+               $localBag = $this->getMockBuilder( 'EmptyBagOStuff' )
+                       ->setMethods( [ 'set', 'delete' ] )->getMock();
                $localBag->expects( $this->never() )->method( 'set' );
                $localBag->expects( $this->never() )->method( 'delete' );
                $wanCache = new WANObjectCache( [
index cd350e5..a3f3981 100644 (file)
@@ -19,7 +19,8 @@ class ConnectionManagerTest extends \PHPUnit_Framework_TestCase {
         * @return IDatabase|PHPUnit_Framework_MockObject_MockObject
         */
        private function getIDatabaseMock() {
-               return $this->getMock( IDatabase::class );
+               return $this->getMockBuilder( IDatabase::class )
+                       ->getMock();
        }
 
        /**
index 3b26d6f..4e76f2a 100644 (file)
@@ -19,7 +19,8 @@ class SessionConsistentConnectionManagerTest extends \PHPUnit_Framework_TestCase
         * @return IDatabase|PHPUnit_Framework_MockObject_MockObject
         */
        private function getIDatabaseMock() {
-               return $this->getMock( IDatabase::class );
+               return $this->getMockBuilder( IDatabase::class )
+                       ->getMock();
        }
 
        /**
index bf12f80..27e5a65 100644 (file)
@@ -69,7 +69,8 @@ class LinkRendererFactoryTest extends MediaWikiLangTestCase {
 
        public function testCreateForUser() {
                /** @var PHPUnit_Framework_MockObject_MockObject|User $user */
-               $user = $this->getMock( User::class, [ 'getStubThreshold' ] );
+               $user = $this->getMockBuilder( User::class )
+                       ->setMethods( [ 'getStubThreshold' ] )->getMock();
                $user->expects( $this->once() )
                        ->method( 'getStubThreshold' )
                        ->willReturn( 15 );
index 3fb4eab..2337899 100644 (file)
@@ -59,6 +59,32 @@ class DeleteLogFormatterTest extends LogFormatterTestCase {
        public static function provideRestoreLogDatabaseRows() {
                return [
                        // Current format
+                       [
+                               [
+                                       'type' => 'delete',
+                                       'action' => 'restore',
+                                       'comment' => 'delete comment',
+                                       'namespace' => NS_MAIN,
+                                       'title' => 'Page',
+                                       'params' => [
+                                               ':assoc:count' => [
+                                                       'revisions' => 2,
+                                                       'files' => 1,
+                                               ],
+                                       ],
+                               ],
+                               [
+                                       'text' => 'User restored page Page (2 revisions and 1 file)',
+                                       'api' => [
+                                               'count' => [
+                                                       'revisions' => 2,
+                                                       'files' => 1,
+                                               ],
+                                       ],
+                               ],
+                       ],
+
+                       // Legacy format without counts
                        [
                                [
                                        'type' => 'delete',
index c2b791e..1ef3df6 100644 (file)
@@ -4,6 +4,7 @@
  * @group Database
  */
 class LogFormatterTest extends MediaWikiLangTestCase {
+       private static $oldExtMsgFiles;
 
        /**
         * @var User
@@ -30,21 +31,33 @@ class LogFormatterTest extends MediaWikiLangTestCase {
         */
        protected $user_comment;
 
+       public static function setUpBeforeClass() {
+               parent::setUpBeforeClass();
+
+               global $wgExtensionMessagesFiles;
+               self::$oldExtMsgFiles = $wgExtensionMessagesFiles;
+               $wgExtensionMessagesFiles['LogTests'] = __DIR__ . '/LogTests.i18n.php';
+               Language::getLocalisationCache()->recache( 'en' );
+       }
+
+       public static function tearDownAfterClass() {
+               global $wgExtensionMessagesFiles;
+               $wgExtensionMessagesFiles = self::$oldExtMsgFiles;
+               Language::getLocalisationCache()->recache( 'en' );
+
+               parent::tearDownAfterClass();
+       }
+
        protected function setUp() {
                parent::setUp();
 
-               global $wgLang;
-
                $this->setMwGlobals( [
                        'wgLogTypes' => [ 'phpunit' ],
                        'wgLogActionsHandlers' => [ 'phpunit/test' => 'LogFormatter',
                                'phpunit/param' => 'LogFormatter' ],
                        'wgUser' => User::newFromName( 'Testuser' ),
-                       'wgExtensionMessagesFiles' => [ 'LogTests' => __DIR__ . '/LogTests.i18n.php' ],
                ] );
 
-               Language::getLocalisationCache()->recache( $wgLang->getCode() );
-
                $this->user = User::newFromName( 'Testuser' );
                $this->title = Title::newFromText( 'SomeTitle' );
                $this->target = Title::newFromText( 'TestTarget' );
@@ -52,18 +65,11 @@ class LogFormatterTest extends MediaWikiLangTestCase {
                $this->context = new RequestContext();
                $this->context->setUser( $this->user );
                $this->context->setTitle( $this->title );
-               $this->context->setLanguage( $wgLang );
+               $this->context->setLanguage( RequestContext::getMain()->getLanguage() );
 
                $this->user_comment = '<User comment about action>';
        }
 
-       protected function tearDown() {
-               parent::tearDown();
-
-               global $wgLang;
-               Language::getLocalisationCache()->recache( $wgLang->getCode() );
-       }
-
        public function newLogEntry( $action, $params ) {
                $logEntry = new ManualLogEntry( 'phpunit', $action );
                $logEntry->setPerformer( $this->user );
index 39b6f9f..c837d26 100644 (file)
@@ -17,7 +17,7 @@ class MailAddressTest extends MediaWikiTestCase {
                if ( wfIsWindows() ) {
                        $this->markTestSkipped( 'This test only works on non-Windows platforms' );
                }
-               $user = $this->getMock( 'User' );
+               $user = $this->createMock( 'User' );
                $user->expects( $this->any() )->method( 'getName' )->will(
                        $this->returnValue( 'UserName' )
                );
index d132183..f8ce24e 100644 (file)
@@ -63,7 +63,7 @@ class ObjectCacheTest extends MediaWikiTestCase {
        }
 
        /** @covers ObjectCache::newAnything */
-       public function txestNewAnythingNoAccel() {
+       public function testNewAnythingNoAccel() {
                $this->setMwGlobals( [
                        'wgMainCacheType' => CACHE_ACCEL
                ] );
@@ -79,4 +79,37 @@ class ObjectCacheTest extends MediaWikiTestCase {
                        'Fallback to DB if available types fall back to Empty'
                );
        }
+
+       /** @covers ObjectCache::newAnything */
+       public function testNewAnythingNoAccelNoDb() {
+               $this->overrideMwServices(); // Ensures restore on tear down
+               MediaWiki\MediaWikiServices::disableStorageBackend();
+
+               $this->setMwGlobals( [
+                       'wgMainCacheType' => CACHE_ACCEL
+               ] );
+
+               $this->setCacheConfig( [
+                       // Mock APC not being installed (T160519, T147161)
+                       CACHE_ACCEL => [ 'class' => 'EmptyBagOStuff' ]
+               ] );
+
+               $this->assertInstanceOf(
+                       EmptyBagOStuff::class,
+                       ObjectCache::newAnything( [] ),
+                       'Fallback to none if available types and DB are unavailable'
+               );
+       }
+
+       /** @covers ObjectCache::newAnything */
+       public function testNewAnythingNothingNoDb() {
+               $this->overrideMwServices();
+               MediaWiki\MediaWikiServices::disableStorageBackend();
+
+               $this->assertInstanceOf(
+                       EmptyBagOStuff::class,
+                       ObjectCache::newAnything( [] ),
+                       'No available types or DB. Fallback to none.'
+               );
+       }
 }
index 71f760d..d15725d 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 
+use Wikimedia\TestingAccessWrapper;
+
 class ExtensionProcessorTest extends MediaWikiTestCase {
 
        private $dir, $dirname;
diff --git a/tests/phpunit/includes/resourceloader/ResourceLoaderOOUIImageModuleTest.php b/tests/phpunit/includes/resourceloader/ResourceLoaderOOUIImageModuleTest.php
new file mode 100644 (file)
index 0000000..4e482c8
--- /dev/null
@@ -0,0 +1,65 @@
+<?php
+
+/**
+ * @group ResourceLoader
+ */
+class ResourceLoaderOOUIImageModuleTest extends ResourceLoaderTestCase {
+
+       /**
+        * @covers ResourceLoaderOOUIImageModule::loadFromDefinition
+        */
+       public function testNonDefaultSkin() {
+               $module = new ResourceLoaderOOUIImageModule( [
+                       'class' => 'ResourceLoaderOOUIImageModule',
+                       'name' => 'icons',
+                       'rootPath' => 'tests/phpunit/data/resourceloader/oouiimagemodule',
+               ] );
+
+               // Pretend that 'fakemonobook' is a real skin using the Apex theme
+               SkinFactory::getDefaultInstance()->register(
+                       'fakemonobook',
+                       'FakeMonoBook',
+                       function () {
+                       }
+               );
+               $r = new ReflectionMethod( 'ExtensionRegistry', 'exportExtractedData' );
+               $r->setAccessible( true );
+               $r->invoke( ExtensionRegistry::getInstance(), [
+                       'globals' => [],
+                       'defines' => [],
+                       'callbacks' => [],
+                       'credits' => [],
+                       'autoloaderPaths' => [],
+                       'attributes' => [
+                               'SkinOOUIThemes' => [
+                                       'fakemonobook' => 'Apex',
+                               ],
+                       ],
+               ] );
+
+               $styles = $module->getStyles( $this->getResourceLoaderContext( [ 'skin' => 'fakemonobook' ] ) );
+               $this->assertRegExp(
+                       '/magnifying-glass-apex/',
+                       $styles['all'],
+                       'Generated styles use the non-default image (embed)'
+               );
+               $this->assertRegExp(
+                       '/fakemonobook/',
+                       $styles['all'],
+                       'Generated styles use the non-default image (link)'
+               );
+
+               $styles = $module->getStyles( $this->getResourceLoaderContext() );
+               $this->assertRegExp(
+                       '/magnifying-glass-mediawiki/',
+                       $styles['all'],
+                       'Generated styles use the default image (embed)'
+               );
+               $this->assertRegExp(
+                       '/vector/',
+                       $styles['all'],
+                       'Generated styles use the default image (link)'
+               );
+       }
+
+}
index 1b756be..1e09e92 100644 (file)
@@ -8,7 +8,7 @@ class ResourceLoaderStartUpModuleTest extends ResourceLoaderTestCase {
                ] );
        }
 
-       public static function provideGetModuleRegistrations() {
+       public function provideGetModuleRegistrations() {
                return [
                        [ [
                                'msg' => 'Empty registry',
@@ -33,6 +33,88 @@ mw.loader.register( [
         "test.blank",
         "{blankVer}"
     ]
+] );',
+                       ] ],
+                       [ [
+                               'msg' => 'Omit raw modules from registry',
+                               'modules' => [
+                                       'test.raw' => new ResourceLoaderTestModule( [ 'isRaw' => true ] ),
+                                       'test.blank' => new ResourceLoaderTestModule(),
+                               ],
+                               'out' => '
+mw.loader.addSource( {
+    "local": "/w/load.php"
+} );
+mw.loader.register( [
+    [
+        "test.blank",
+        "{blankVer}"
+    ]
+] );',
+                       ] ],
+                       [ [
+                               'msg' => 'Version falls back gracefully if getVersionHash throws',
+                               'modules' => [
+                                       'test.fail' => (
+                                               ( $mock = $this->getMockBuilder( 'ResourceLoaderTestModule' )
+                                                       ->setMethods( [ 'getVersionHash' ] )->getMock() )
+                                               && $mock->method( 'getVersionHash' )->will(
+                                                       $this->throwException( new Exception )
+                                               )
+                                       ) ? $mock : $mock
+                               ],
+                               'out' => '
+mw.loader.addSource( {
+    "local": "/w/load.php"
+} );
+mw.loader.register( [
+    [
+        "test.fail",
+        ""
+    ]
+] );
+mw.loader.state( {
+    "test.fail": "error"
+} );',
+                       ] ],
+                       [ [
+                               'msg' => 'Use version from getVersionHash',
+                               'modules' => [
+                                       'test.version' => (
+                                               ( $mock = $this->getMockBuilder( 'ResourceLoaderTestModule' )
+                                                       ->setMethods( [ 'getVersionHash' ] )->getMock() )
+                                               && $mock->method( 'getVersionHash' )->willReturn( '1234567' )
+                                       ) ? $mock : $mock
+                               ],
+                               'out' => '
+mw.loader.addSource( {
+    "local": "/w/load.php"
+} );
+mw.loader.register( [
+    [
+        "test.version",
+        "1234567"
+    ]
+] );',
+                       ] ],
+                       [ [
+                               'msg' => 'Re-hash version from getVersionHash if too long',
+                               'modules' => [
+                                       'test.version' => (
+                                               ( $mock = $this->getMockBuilder( 'ResourceLoaderTestModule' )
+                                                       ->setMethods( [ 'getVersionHash' ] )->getMock() )
+                                               && $mock->method( 'getVersionHash' )->willReturn( '12345678' )
+                                       ) ? $mock : $mock
+                               ],
+                               'out' => '
+mw.loader.addSource( {
+    "local": "/w/load.php"
+} );
+mw.loader.register( [
+    [
+        "test.version",
+        "016es8l"
+    ]
 ] );',
                        ] ],
                        [ [
@@ -303,8 +385,8 @@ mw.loader.register( [
 
        /**
         * @dataProvider provideGetModuleRegistrations
-        * @covers ResourceLoaderStartUpModule::compileUnresolvedDependencies
         * @covers ResourceLoaderStartUpModule::getModuleRegistrations
+        * @covers ResourceLoaderStartUpModule::compileUnresolvedDependencies
         * @covers ResourceLoader::makeLoaderRegisterScript
         */
        public function testGetModuleRegistrations( $case ) {
@@ -344,6 +426,7 @@ mw.loader.register( [
                ];
        }
        /**
+        * @covers ResourceLoaderStartUpModule::getModuleRegistrations
         * @dataProvider provideRegistrations
         */
        public function testRegistrationsMinified( $modules ) {
@@ -368,6 +451,7 @@ mw.loader.register( [
        }
 
        /**
+        * @covers ResourceLoaderStartUpModule::getModuleRegistrations
         * @dataProvider provideRegistrations
         */
        public function testRegistrationsUnminified( $modules ) {
index e0a82d0..af3212a 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 
+use Wikimedia\TestingAccessWrapper;
+
 class ResourceLoaderTest extends ResourceLoaderTestCase {
 
        protected function setUp() {
@@ -49,13 +51,26 @@ class ResourceLoaderTest extends ResourceLoaderTestCase {
         * @covers ResourceLoader::register
         * @covers ResourceLoader::getModule
         */
-       public function testRegisterValid() {
+       public function testRegisterValidObject() {
                $module = new ResourceLoaderTestModule();
                $resourceLoader = new EmptyResourceLoader();
                $resourceLoader->register( 'test', $module );
                $this->assertEquals( $module, $resourceLoader->getModule( 'test' ) );
        }
 
+       /**
+        * @covers ResourceLoader::register
+        * @covers ResourceLoader::getModule
+        */
+       public function testRegisterValidArray() {
+               $module = new ResourceLoaderTestModule();
+               $resourceLoader = new EmptyResourceLoader();
+               // Covers case of register() setting $rl->moduleInfos,
+               // but $rl->modules lazy-populated by getModule()
+               $resourceLoader->register( 'test', [ 'object' => $module ] );
+               $this->assertEquals( $module, $resourceLoader->getModule( 'test' ) );
+       }
+
        /**
         * @covers ResourceLoader::register
         */
@@ -384,6 +399,33 @@ mw.example();
                );
        }
 
+       /**
+        * @covers ResourceLoader::makeLoaderRegisterScript
+        */
+       public function testMakeLoaderRegisterScript() {
+               $this->assertEquals(
+                       'mw.loader.register( [
+    [
+        "test.name",
+        "1234567"
+    ]
+] );',
+                       ResourceLoader::makeLoaderRegisterScript( [
+                               [ 'test.name', '1234567' ],
+                       ] ),
+                       'Nested array parameter'
+               );
+
+               $this->assertEquals(
+                       'mw.loader.register( "test.name", "1234567" );',
+                       ResourceLoader::makeLoaderRegisterScript(
+                               'test.name',
+                               '1234567'
+                       ),
+                       'Variadic parameters'
+               );
+       }
+
        /**
         * @covers ResourceLoader::makeLoaderSourcesScript
         */
index 2d0d958..4cf4071 100644 (file)
@@ -2,6 +2,7 @@
 
 use MediaWiki\MediaWikiServices;
 use Wikimedia\Rdbms\IDatabase;
+use Wikimedia\TestingAccessWrapper;
 
 class ResourceLoaderWikiModuleTest extends ResourceLoaderTestCase {
 
index 6833893..63ed93e 100644 (file)
@@ -1,5 +1,7 @@
 <?php
+
 use MediaWiki\MediaWikiServices;
+use Wikimedia\TestingAccessWrapper;
 
 /**
  * @group Search
index 3fb4bbb..c74c893 100644 (file)
@@ -164,7 +164,8 @@ class SearchEngineTest extends MediaWikiLangTestCase {
                /**
                 * @var $mockEngine SearchEngine
                 */
-               $mockEngine = $this->getMock( 'SearchEngine', [ 'makeSearchFieldMapping' ] );
+               $mockEngine = $this->getMockBuilder( 'SearchEngine' )
+                       ->setMethods( [ 'makeSearchFieldMapping' ] )->getMock();
 
                $mockFieldBuilder = function ( $name, $type ) {
                        $mockField =
@@ -230,7 +231,7 @@ class SearchEngineTest extends MediaWikiLangTestCase {
        }
 
        public function addAugmentors( &$setAugmentors, &$rowAugmentors ) {
-               $setAugmentor = $this->getMock( 'ResultSetAugmentor' );
+               $setAugmentor = $this->createMock( 'ResultSetAugmentor' );
                $setAugmentor->expects( $this->once() )
                        ->method( 'augmentAll' )
                        ->willReturnCallback( function ( SearchResultSet $resultSet ) {
@@ -244,7 +245,7 @@ class SearchEngineTest extends MediaWikiLangTestCase {
                        } );
                $setAugmentors['testSet'] = $setAugmentor;
 
-               $rowAugmentor = $this->getMock( 'ResultAugmentor' );
+               $rowAugmentor = $this->createMock( 'ResultAugmentor' );
                $rowAugmentor->expects( $this->exactly( 2 ) )
                        ->method( 'augment' )
                        ->willReturnCallback( function ( SearchResult $result ) {
index c1eef2e..90550d2 100644 (file)
@@ -4,6 +4,7 @@ namespace MediaWiki\Session;
 
 use Psr\Log\LogLevel;
 use MediaWikiTestCase;
+use Wikimedia\TestingAccessWrapper;
 
 /**
  * @group Session
@@ -127,7 +128,7 @@ class BotPasswordSessionProviderTest extends MediaWikiTestCase {
                $provider = new BotPasswordSessionProvider( [
                        'priority' => 40
                ] );
-               $priv = \TestingAccessWrapper::newFromObject( $provider );
+               $priv = TestingAccessWrapper::newFromObject( $provider );
                $this->assertSame( 40, $priv->priority );
                $this->assertSame( '_BPsession', $priv->sessionCookieName );
                $this->assertSame( [], $priv->sessionCookieOptions );
@@ -136,7 +137,7 @@ class BotPasswordSessionProviderTest extends MediaWikiTestCase {
                        'priority' => 40,
                        'sessionCookieName' => null,
                ] );
-               $priv = \TestingAccessWrapper::newFromObject( $provider );
+               $priv = TestingAccessWrapper::newFromObject( $provider );
                $this->assertSame( '_BPsession', $priv->sessionCookieName );
 
                $provider = new BotPasswordSessionProvider( [
@@ -144,7 +145,7 @@ class BotPasswordSessionProviderTest extends MediaWikiTestCase {
                        'sessionCookieName' => 'Foo',
                        'sessionCookieOptions' => [ 'Bar' ],
                ] );
-               $priv = \TestingAccessWrapper::newFromObject( $provider );
+               $priv = TestingAccessWrapper::newFromObject( $provider );
                $this->assertSame( 'Foo', $priv->sessionCookieName );
                $this->assertSame( [ 'Bar' ], $priv->sessionCookieOptions );
        }
@@ -183,7 +184,8 @@ class BotPasswordSessionProviderTest extends MediaWikiTestCase {
        public function testNewSessionInfoForRequest() {
                $provider = $this->getProvider();
                $user = static::getTestSysop()->getUser();
-               $request = $this->getMock( 'FauxRequest', [ 'getIP' ] );
+               $request = $this->getMockBuilder( 'FauxRequest' )
+                       ->setMethods( [ 'getIP' ] )->getMock();
                $request->expects( $this->any() )->method( 'getIP' )
                        ->will( $this->returnValue( '127.0.0.1' ) );
                $bp = \BotPassword::newFromUser( $user, 'BotPasswordSessionProvider' );
@@ -210,7 +212,8 @@ class BotPasswordSessionProviderTest extends MediaWikiTestCase {
                $provider->setLogger( $logger );
 
                $user = static::getTestSysop()->getUser();
-               $request = $this->getMock( 'FauxRequest', [ 'getIP' ] );
+               $request = $this->getMockBuilder( 'FauxRequest' )
+                       ->setMethods( [ 'getIP' ] )->getMock();
                $request->expects( $this->any() )->method( 'getIP' )
                        ->will( $this->returnValue( '127.0.0.1' ) );
                $bp = \BotPassword::newFromUser( $user, 'BotPasswordSessionProvider' );
@@ -261,7 +264,8 @@ class BotPasswordSessionProviderTest extends MediaWikiTestCase {
                ], $logger->getBuffer() );
                $logger->clearBuffer();
 
-               $request2 = $this->getMock( 'FauxRequest', [ 'getIP' ] );
+               $request2 = $this->getMockBuilder( 'FauxRequest' )
+                       ->setMethods( [ 'getIP' ] )->getMock();
                $request2->expects( $this->any() )->method( 'getIP' )
                        ->will( $this->returnValue( '10.0.0.1' ) );
                $data['metadata'] = $dataMD;
@@ -286,7 +290,7 @@ class BotPasswordSessionProviderTest extends MediaWikiTestCase {
                $provider->setLogger( $logger );
 
                $backend = TestUtils::getDummySessionBackend();
-               $backendPriv = \TestingAccessWrapper::newFromObject( $backend );
+               $backendPriv = TestingAccessWrapper::newFromObject( $backend );
 
                try {
                        $provider->getAllowedUserRights( $backend );
index da4b06e..a47fd9a 100644 (file)
@@ -5,6 +5,7 @@ namespace MediaWiki\Session;
 use MediaWikiTestCase;
 use User;
 use Psr\Log\LogLevel;
+use Wikimedia\TestingAccessWrapper;
 
 /**
  * @group Session
@@ -76,7 +77,7 @@ class CookieSessionProviderTest extends MediaWikiTestCase {
                }
 
                $config = $this->getConfig();
-               $p = \TestingAccessWrapper::newFromObject(
+               $p = TestingAccessWrapper::newFromObject(
                        new CookieSessionProvider( [ 'priority' => 1 ] )
                );
                $p->setLogger( new \TestLogger() );
@@ -95,7 +96,7 @@ class CookieSessionProviderTest extends MediaWikiTestCase {
                ], $p->cookieOptions );
 
                $config->set( 'SessionName', 'SessionName' );
-               $p = \TestingAccessWrapper::newFromObject(
+               $p = TestingAccessWrapper::newFromObject(
                        new CookieSessionProvider( [ 'priority' => 3 ] )
                );
                $p->setLogger( new \TestLogger() );
@@ -113,7 +114,7 @@ class CookieSessionProviderTest extends MediaWikiTestCase {
                        'httpOnly' => true,
                ], $p->cookieOptions );
 
-               $p = \TestingAccessWrapper::newFromObject( new CookieSessionProvider( [
+               $p = TestingAccessWrapper::newFromObject( new CookieSessionProvider( [
                        'priority' => 10,
                        'callUserSetCookiesHook' => true,
                        'cookieOptions' => [
@@ -151,7 +152,7 @@ class CookieSessionProviderTest extends MediaWikiTestCase {
 
                $this->assertEquals(
                        $extendedCookies,
-                       \TestingAccessWrapper::newFromObject( $provider )->getExtendedLoginCookies(),
+                       TestingAccessWrapper::newFromObject( $provider )->getExtendedLoginCookies(),
                        'List of extended cookies (subclasses can add values, but we\'re calling the core one here)'
                );
 
@@ -412,9 +413,11 @@ class CookieSessionProviderTest extends MediaWikiTestCase {
                        new \Psr\Log\NullLogger(),
                        10
                );
-               \TestingAccessWrapper::newFromObject( $backend )->usePhpSessionHandling = false;
+               TestingAccessWrapper::newFromObject( $backend )->usePhpSessionHandling = false;
 
-               $mock = $this->getMock( 'stdClass', [ 'onUserSetCookies' ] );
+               $mock = $this->getMockBuilder( 'stdClass' )
+                       ->setMethods( [ 'onUserSetCookies' ] )
+                       ->getMock();
                $mock->expects( $this->never() )->method( 'onUserSetCookies' );
                $this->mergeMwGlobalArrayValue( 'wgHooks', [ 'UserSetCookies' => [ $mock ] ] );
 
@@ -497,7 +500,7 @@ class CookieSessionProviderTest extends MediaWikiTestCase {
                        new \Psr\Log\NullLogger(),
                        10
                );
-               \TestingAccessWrapper::newFromObject( $backend )->usePhpSessionHandling = false;
+               TestingAccessWrapper::newFromObject( $backend )->usePhpSessionHandling = false;
                $backend->setUser( $user );
                $backend->setRememberUser( $remember );
                $backend->setForceHTTPS( $secure );
@@ -560,13 +563,15 @@ class CookieSessionProviderTest extends MediaWikiTestCase {
        }
 
        protected function getSentRequest() {
-               $sentResponse = $this->getMock( 'FauxResponse', [ 'headersSent', 'setCookie', 'header' ] );
+               $sentResponse = $this->getMockBuilder( 'FauxResponse' )
+                       ->setMethods( [ 'headersSent', 'setCookie', 'header' ] )->getMock();
                $sentResponse->expects( $this->any() )->method( 'headersSent' )
                        ->will( $this->returnValue( true ) );
                $sentResponse->expects( $this->never() )->method( 'setCookie' );
                $sentResponse->expects( $this->never() )->method( 'header' );
 
-               $sentRequest = $this->getMock( 'FauxRequest', [ 'response' ] );
+               $sentRequest = $this->getMockBuilder( 'FauxRequest' )
+                       ->setMethods( [ 'response' ] )->getMock();
                $sentRequest->expects( $this->any() )->method( 'response' )
                        ->will( $this->returnValue( $sentResponse ) );
                return $sentRequest;
@@ -600,10 +605,11 @@ class CookieSessionProviderTest extends MediaWikiTestCase {
                        new \Psr\Log\NullLogger(),
                        10
                );
-               \TestingAccessWrapper::newFromObject( $backend )->usePhpSessionHandling = false;
+               TestingAccessWrapper::newFromObject( $backend )->usePhpSessionHandling = false;
 
                // Anonymous user
-               $mock = $this->getMock( 'stdClass', [ 'onUserSetCookies' ] );
+               $mock = $this->getMockBuilder( 'stdClass' )
+                       ->setMethods( [ 'onUserSetCookies' ] )->getMock();
                $mock->expects( $this->never() )->method( 'onUserSetCookies' );
                $this->mergeMwGlobalArrayValue( 'wgHooks', [ 'UserSetCookies' => [ $mock ] ] );
                $backend->setUser( $anon );
@@ -621,7 +627,8 @@ class CookieSessionProviderTest extends MediaWikiTestCase {
                $provider->persistSession( $backend, $this->getSentRequest() );
 
                // Logged-in user, no remember
-               $mock = $this->getMock( __CLASS__, [ 'onUserSetCookies' ] );
+               $mock = $this->getMockBuilder( __CLASS__ )
+                       ->setMethods( [ 'onUserSetCookies' ] )->getMock();
                $mock->expects( $this->once() )->method( 'onUserSetCookies' )
                        ->will( $this->returnCallback( function ( $u, &$sessionData, &$cookies ) use ( $user ) {
                                $this->assertSame( $user, $u );
@@ -664,7 +671,8 @@ class CookieSessionProviderTest extends MediaWikiTestCase {
                $provider->persistSession( $backend, $this->getSentRequest() );
 
                // Logged-in user, remember
-               $mock = $this->getMock( __CLASS__, [ 'onUserSetCookies' ] );
+               $mock = $this->getMockBuilder( __CLASS__ )
+                       ->setMethods( [ 'onUserSetCookies' ] )->getMock();
                $mock->expects( $this->once() )->method( 'onUserSetCookies' )
                        ->will( $this->returnCallback( function ( $u, &$sessionData, &$cookies ) use ( $user ) {
                                $this->assertSame( $user, $u );
@@ -729,7 +737,7 @@ class CookieSessionProviderTest extends MediaWikiTestCase {
        }
 
        public function testSetLoggedOutCookie() {
-               $provider = \TestingAccessWrapper::newFromObject( new CookieSessionProvider( [
+               $provider = TestingAccessWrapper::newFromObject( new CookieSessionProvider( [
                        'priority' => 1,
                        'sessionName' => 'MySessionName',
                        'cookieOptions' => [ 'prefix' => 'x' ],
@@ -776,7 +784,7 @@ class CookieSessionProviderTest extends MediaWikiTestCase {
                $provider->setLogger( new \Psr\Log\NullLogger() );
                $provider->setConfig( $this->getConfig() );
                $provider->setManager( SessionManager::singleton() );
-               $provider = \TestingAccessWrapper::newFromObject( $provider );
+               $provider = TestingAccessWrapper::newFromObject( $provider );
 
                $request = new \FauxRequest();
                $request->setCookies( [
@@ -808,7 +816,7 @@ class CookieSessionProviderTest extends MediaWikiTestCase {
 
        public function testGetLoginCookieExpiration() {
                $config = $this->getConfig();
-               $provider = \TestingAccessWrapper::newFromObject( new CookieSessionProvider( [
+               $provider = TestingAccessWrapper::newFromObject( new CookieSessionProvider( [
                        'priority' => 10
                ] ) );
                $provider->setLogger( new \Psr\Log\NullLogger() );
index 78edb76..086fa28 100644 (file)
@@ -4,6 +4,7 @@ namespace MediaWiki\Session;
 
 use MediaWikiTestCase;
 use User;
+use Wikimedia\TestingAccessWrapper;
 
 /**
  * @group Session
@@ -37,7 +38,7 @@ class ImmutableSessionProviderWithCookieTest extends MediaWikiTestCase {
        public function testConstructor() {
                $provider = $this->getMockBuilder( ImmutableSessionProviderWithCookie::class )
                        ->getMockForAbstractClass();
-               $priv = \TestingAccessWrapper::newFromObject( $provider );
+               $priv = TestingAccessWrapper::newFromObject( $provider );
                $this->assertNull( $priv->sessionCookieName );
                $this->assertSame( [], $priv->sessionCookieOptions );
 
@@ -47,7 +48,7 @@ class ImmutableSessionProviderWithCookieTest extends MediaWikiTestCase {
                                'sessionCookieOptions' => [ 'Bar' ],
                        ] ] )
                        ->getMockForAbstractClass();
-               $priv = \TestingAccessWrapper::newFromObject( $provider );
+               $priv = TestingAccessWrapper::newFromObject( $provider );
                $this->assertSame( 'Foo', $priv->sessionCookieName );
                $this->assertSame( [ 'Bar' ], $priv->sessionCookieOptions );
 
@@ -119,7 +120,7 @@ class ImmutableSessionProviderWithCookieTest extends MediaWikiTestCase {
                        'bad' => 'bad',
                ], '' );
 
-               $provider = \TestingAccessWrapper::newFromObject( $this->getProvider( null ) );
+               $provider = TestingAccessWrapper::newFromObject( $this->getProvider( null ) );
                try {
                        $provider->getSessionIdFromCookie( $request );
                        $this->fail( 'Expected exception not thrown' );
@@ -131,39 +132,42 @@ class ImmutableSessionProviderWithCookieTest extends MediaWikiTestCase {
                        );
                }
 
-               $provider = \TestingAccessWrapper::newFromObject( $this->getProvider( 'Foo' ) );
+               $provider = TestingAccessWrapper::newFromObject( $this->getProvider( 'Foo' ) );
                $this->assertSame(
                        'wgfoo---------------------------',
                        $provider->getSessionIdFromCookie( $request )
                );
 
-               $provider = \TestingAccessWrapper::newFromObject( $this->getProvider( 'Foo', 'Bar' ) );
+               $provider = TestingAccessWrapper::newFromObject( $this->getProvider( 'Foo', 'Bar' ) );
                $this->assertSame(
                        'foobar--------------------------',
                        $provider->getSessionIdFromCookie( $request )
                );
 
-               $provider = \TestingAccessWrapper::newFromObject( $this->getProvider( 'Foo', '' ) );
+               $provider = TestingAccessWrapper::newFromObject( $this->getProvider( 'Foo', '' ) );
                $this->assertSame(
                        'foo-----------------------------',
                        $provider->getSessionIdFromCookie( $request )
                );
 
-               $provider = \TestingAccessWrapper::newFromObject( $this->getProvider( 'bad', '' ) );
+               $provider = TestingAccessWrapper::newFromObject( $this->getProvider( 'bad', '' ) );
                $this->assertSame( null, $provider->getSessionIdFromCookie( $request ) );
 
-               $provider = \TestingAccessWrapper::newFromObject( $this->getProvider( 'none', '' ) );
+               $provider = TestingAccessWrapper::newFromObject( $this->getProvider( 'none', '' ) );
                $this->assertSame( null, $provider->getSessionIdFromCookie( $request ) );
        }
 
        protected function getSentRequest() {
-               $sentResponse = $this->getMock( 'FauxResponse', [ 'headersSent', 'setCookie', 'header' ] );
+               $sentResponse = $this->getMockBuilder( 'FauxResponse' )
+                       ->setMethods( [ 'headersSent', 'setCookie', 'header' ] )
+                       ->getMock();
                $sentResponse->expects( $this->any() )->method( 'headersSent' )
                        ->will( $this->returnValue( true ) );
                $sentResponse->expects( $this->never() )->method( 'setCookie' );
                $sentResponse->expects( $this->never() )->method( 'header' );
 
-               $sentRequest = $this->getMock( 'FauxRequest', [ 'response' ] );
+               $sentRequest = $this->getMockBuilder( 'FauxRequest' )
+                       ->setMethods( [ 'response' ] )->getMock();
                $sentRequest->expects( $this->any() )->method( 'response' )
                        ->will( $this->returnValue( $sentResponse ) );
                return $sentRequest;
@@ -182,7 +186,7 @@ class ImmutableSessionProviderWithCookieTest extends MediaWikiTestCase {
 
                $provider = $this->getProvider( 'session' );
                $provider->setLogger( new \Psr\Log\NullLogger() );
-               $priv = \TestingAccessWrapper::newFromObject( $provider );
+               $priv = TestingAccessWrapper::newFromObject( $provider );
                $priv->sessionCookieOptions = [
                        'prefix' => 'x',
                        'path' => 'CookiePath',
@@ -208,7 +212,7 @@ class ImmutableSessionProviderWithCookieTest extends MediaWikiTestCase {
                        new \Psr\Log\NullLogger(),
                        10
                );
-               \TestingAccessWrapper::newFromObject( $backend )->usePhpSessionHandling = false;
+               TestingAccessWrapper::newFromObject( $backend )->usePhpSessionHandling = false;
                $backend->setRememberUser( $remember );
                $backend->setForceHTTPS( $secure );
 
@@ -278,7 +282,7 @@ class ImmutableSessionProviderWithCookieTest extends MediaWikiTestCase {
        public function testUnpersistSession() {
                $provider = $this->getProvider( 'session', '' );
                $provider->setLogger( new \Psr\Log\NullLogger() );
-               $priv = \TestingAccessWrapper::newFromObject( $provider );
+               $priv = TestingAccessWrapper::newFromObject( $provider );
 
                // No cookie
                $priv->sessionCookieName = null;
index 34e5e44..0a2e84e 100644 (file)
@@ -4,6 +4,7 @@ namespace MediaWiki\Session;
 
 use Psr\Log\LogLevel;
 use MediaWikiTestCase;
+use Wikimedia\TestingAccessWrapper;
 
 /**
  * @group Session
@@ -26,7 +27,7 @@ class PHPSessionHandlerTest extends MediaWikiTestCase {
                $rProp = new \ReflectionProperty( PHPSessionHandler::class, 'instance' );
                $rProp->setAccessible( true );
                if ( $rProp->getValue() ) {
-                       $old = \TestingAccessWrapper::newFromObject( $rProp->getValue() );
+                       $old = TestingAccessWrapper::newFromObject( $rProp->getValue() );
                        $oldManager = $old->manager;
                        $oldStore = $old->store;
                        $oldLogger = $old->logger;
@@ -40,7 +41,7 @@ class PHPSessionHandlerTest extends MediaWikiTestCase {
        }
 
        public function testEnableFlags() {
-               $handler = \TestingAccessWrapper::newFromObject(
+               $handler = TestingAccessWrapper::newFromObject(
                        $this->getMockBuilder( PHPSessionHandler::class )
                                ->setMethods( null )
                                ->disableOriginalConstructor()
@@ -93,7 +94,7 @@ class PHPSessionHandlerTest extends MediaWikiTestCase {
                $this->assertFalse( wfIniGetBool( 'session.use_trans_sid' ) );
 
                $this->assertNotNull( $rProp->getValue() );
-               $priv = \TestingAccessWrapper::newFromObject( $rProp->getValue() );
+               $priv = TestingAccessWrapper::newFromObject( $rProp->getValue() );
                $this->assertSame( $manager, $priv->manager );
                $this->assertSame( $store, $priv->store );
                $this->assertSame( $logger, $priv->logger );
@@ -122,7 +123,7 @@ class PHPSessionHandlerTest extends MediaWikiTestCase {
                        'logger' => $logger,
                ] );
                PHPSessionHandler::install( $manager );
-               $wrap = \TestingAccessWrapper::newFromObject( $rProp->getValue() );
+               $wrap = TestingAccessWrapper::newFromObject( $rProp->getValue() );
                $reset[] = new \Wikimedia\ScopedCallback(
                        [ $wrap, 'setEnableFlags' ],
                        [ $wrap->enable ? $wrap->warn ? 'warn' : 'enable' : 'disable' ]
@@ -323,7 +324,7 @@ class PHPSessionHandlerTest extends MediaWikiTestCase {
                        ->setMethods( null )
                        ->disableOriginalConstructor()
                        ->getMock();
-               \TestingAccessWrapper::newFromObject( $handler )->setEnableFlags( 'disable' );
+               TestingAccessWrapper::newFromObject( $handler )->setEnableFlags( 'disable' );
                $oldValue = $rProp->getValue();
                $rProp->setValue( $handler );
                $reset = new \Wikimedia\ScopedCallback( [ $rProp, 'setValue' ], [ $oldValue ] );
@@ -350,7 +351,7 @@ class PHPSessionHandlerTest extends MediaWikiTestCase {
                        ->setMethods( null )
                        ->disableOriginalConstructor()
                        ->getMock();
-               \TestingAccessWrapper::newFromObject( $handler )->setEnableFlags( 'enable' );
+               TestingAccessWrapper::newFromObject( $handler )->setEnableFlags( 'enable' );
 
                call_user_func_array( [ $handler, $method ], $args );
        }
index 8a0adba..0d345db 100644 (file)
@@ -4,6 +4,7 @@ namespace MediaWiki\Session;
 
 use MediaWikiTestCase;
 use User;
+use Wikimedia\TestingAccessWrapper;
 
 /**
  * @group Session
@@ -61,13 +62,13 @@ class SessionBackendTest extends MediaWikiTestCase {
                $id = new SessionId( $info->getId() );
 
                $backend = new SessionBackend( $id, $info, $this->store, $logger, 10 );
-               $priv = \TestingAccessWrapper::newFromObject( $backend );
+               $priv = TestingAccessWrapper::newFromObject( $backend );
                $priv->persist = false;
                $priv->requests = [ 100 => new \FauxRequest() ];
                $priv->requests[100]->setSessionId( $id );
                $priv->usePhpSessionHandling = false;
 
-               $manager = \TestingAccessWrapper::newFromObject( $this->manager );
+               $manager = TestingAccessWrapper::newFromObject( $this->manager );
                $manager->allSessionBackends = [ $backend->getId() => $backend ] + $manager->allSessionBackends;
                $manager->allSessionIds = [ $backend->getId() => $id ] + $manager->allSessionIds;
                $manager->sessionProviders = [ (string)$this->provider => $this->provider ];
@@ -168,16 +169,16 @@ class SessionBackendTest extends MediaWikiTestCase {
                $this->assertSame( $info->wasPersisted(), $backend->isPersistent() );
                $this->assertSame( $info->wasRemembered(), $backend->shouldRememberUser() );
                $this->assertSame( $info->forceHTTPS(), $backend->shouldForceHTTPS() );
-               $this->assertSame( $expire, \TestingAccessWrapper::newFromObject( $backend )->expires );
+               $this->assertSame( $expire, TestingAccessWrapper::newFromObject( $backend )->expires );
                $this->assertSame( [ 'foo' ], $backend->getProviderMetadata() );
        }
 
        public function testSessionStuff() {
                $backend = $this->getBackend();
-               $priv = \TestingAccessWrapper::newFromObject( $backend );
+               $priv = TestingAccessWrapper::newFromObject( $backend );
                $priv->requests = []; // Remove dummy session
 
-               $manager = \TestingAccessWrapper::newFromObject( $this->manager );
+               $manager = TestingAccessWrapper::newFromObject( $this->manager );
 
                $request1 = new \FauxRequest();
                $session1 = $backend->getSession( $request1 );
@@ -188,7 +189,7 @@ class SessionBackendTest extends MediaWikiTestCase {
                $this->assertInstanceOf( Session::class, $session2 );
                $this->assertSame( 2, count( $priv->requests ) );
 
-               $index = \TestingAccessWrapper::newFromObject( $session1 )->index;
+               $index = TestingAccessWrapper::newFromObject( $session1 )->index;
 
                $this->assertSame( $request1, $backend->getRequest( $index ) );
                $this->assertSame( null, $backend->suggestLoginUsername( $index ) );
@@ -220,7 +221,7 @@ class SessionBackendTest extends MediaWikiTestCase {
 
        public function testSetProviderMetadata() {
                $backend = $this->getBackend();
-               $priv = \TestingAccessWrapper::newFromObject( $backend );
+               $priv = TestingAccessWrapper::newFromObject( $backend );
                $priv->providerMetadata = [ 'dummy' ];
 
                try {
@@ -265,7 +266,7 @@ class SessionBackendTest extends MediaWikiTestCase {
                        ->will( $this->returnValue( false ) );
                $this->provider->expects( $this->never() )->method( 'sessionIdWasReset' );
                $backend = $this->getBackend( User::newFromName( 'UTSysop' ) );
-               $manager = \TestingAccessWrapper::newFromObject( $this->manager );
+               $manager = TestingAccessWrapper::newFromObject( $this->manager );
                $sessionId = $backend->getSessionId();
                $backend->resetId();
                $this->assertSame( self::SESSIONID, $backend->getId() );
@@ -279,7 +280,7 @@ class SessionBackendTest extends MediaWikiTestCase {
                $backend = $this->getBackend();
                $this->provider->expects( $this->once() )->method( 'sessionIdWasReset' )
                        ->with( $this->identicalTo( $backend ), $this->identicalTo( self::SESSIONID ) );
-               $manager = \TestingAccessWrapper::newFromObject( $this->manager );
+               $manager = TestingAccessWrapper::newFromObject( $this->manager );
                $sessionId = $backend->getSessionId();
                $backend->resetId();
                $this->assertNotEquals( self::SESSIONID, $backend->getId() );
@@ -293,7 +294,8 @@ class SessionBackendTest extends MediaWikiTestCase {
        }
 
        public function testPersist() {
-               $this->provider = $this->getMock( 'DummySessionProvider', [ 'persistSession' ] );
+               $this->provider = $this->getMockBuilder( 'DummySessionProvider' )
+                       ->setMethods( [ 'persistSession' ] )->getMock();
                $this->provider->expects( $this->once() )->method( 'persistSession' );
                $backend = $this->getBackend();
                $this->assertFalse( $backend->isPersistent(), 'sanity check' );
@@ -304,7 +306,7 @@ class SessionBackendTest extends MediaWikiTestCase {
 
                $this->provider = null;
                $backend = $this->getBackend();
-               $wrap = \TestingAccessWrapper::newFromObject( $backend );
+               $wrap = TestingAccessWrapper::newFromObject( $backend );
                $wrap->persist = true;
                $wrap->expires = 0;
                $backend->persist();
@@ -312,10 +314,11 @@ class SessionBackendTest extends MediaWikiTestCase {
        }
 
        public function testUnpersist() {
-               $this->provider = $this->getMock( 'DummySessionProvider', [ 'unpersistSession' ] );
+               $this->provider = $this->getMockBuilder( 'DummySessionProvider' )
+                       ->setMethods( [ 'unpersistSession' ] )->getMock();
                $this->provider->expects( $this->once() )->method( 'unpersistSession' );
                $backend = $this->getBackend();
-               $wrap = \TestingAccessWrapper::newFromObject( $backend );
+               $wrap = TestingAccessWrapper::newFromObject( $backend );
                $wrap->store = new \CachedBagOStuff( $this->store );
                $wrap->persist = true;
                $wrap->dataDirty = true;
@@ -362,7 +365,8 @@ class SessionBackendTest extends MediaWikiTestCase {
        public function testSetUser() {
                $user = static::getTestSysop()->getUser();
 
-               $this->provider = $this->getMock( 'DummySessionProvider', [ 'canChangeUser' ] );
+               $this->provider = $this->getMockBuilder( 'DummySessionProvider' )
+                       ->setMethods( [ 'canChangeUser' ] )->getMock();
                $this->provider->expects( $this->any() )->method( 'canChangeUser' )
                        ->will( $this->returnValue( false ) );
                $backend = $this->getBackend();
@@ -388,7 +392,7 @@ class SessionBackendTest extends MediaWikiTestCase {
 
        public function testDirty() {
                $backend = $this->getBackend();
-               $priv = \TestingAccessWrapper::newFromObject( $backend );
+               $priv = TestingAccessWrapper::newFromObject( $backend );
                $priv->dataDirty = false;
                $backend->dirty();
                $this->assertTrue( $priv->dataDirty );
@@ -398,7 +402,7 @@ class SessionBackendTest extends MediaWikiTestCase {
                $backend = $this->getBackend();
                $data = $backend->getData();
                $this->assertSame( [], $data );
-               $this->assertTrue( \TestingAccessWrapper::newFromObject( $backend )->dataDirty );
+               $this->assertTrue( TestingAccessWrapper::newFromObject( $backend )->dataDirty );
                $data['???'] = '!!!';
                $this->assertSame( [ '???' => '!!!' ], $data );
 
@@ -406,12 +410,12 @@ class SessionBackendTest extends MediaWikiTestCase {
                $this->store->setSessionData( self::SESSIONID, $testData );
                $backend = $this->getBackend();
                $this->assertSame( $testData, $backend->getData() );
-               $this->assertFalse( \TestingAccessWrapper::newFromObject( $backend )->dataDirty );
+               $this->assertFalse( TestingAccessWrapper::newFromObject( $backend )->dataDirty );
        }
 
        public function testAddData() {
                $backend = $this->getBackend();
-               $priv = \TestingAccessWrapper::newFromObject( $backend );
+               $priv = TestingAccessWrapper::newFromObject( $backend );
 
                $priv->data = [ 'foo' => 1 ];
                $priv->dataDirty = false;
@@ -435,7 +439,7 @@ class SessionBackendTest extends MediaWikiTestCase {
        public function testDelaySave() {
                $this->mergeMwGlobalArrayValue( 'wgHooks', [ 'SessionMetadata' => [ $this ] ] );
                $backend = $this->getBackend();
-               $priv = \TestingAccessWrapper::newFromObject( $backend );
+               $priv = TestingAccessWrapper::newFromObject( $backend );
                $priv->persist = true;
 
                // Saves happen normally when no delay is in effect
@@ -488,7 +492,8 @@ class SessionBackendTest extends MediaWikiTestCase {
                $this->store = new TestBagOStuff();
                $testData = [ 'foo' => 'foo!', 'bar', [ 'baz', null ] ];
 
-               $neverHook = $this->getMock( __CLASS__, [ 'onSessionMetadata' ] );
+               $neverHook = $this->getMockBuilder( __CLASS__ )
+                       ->setMethods( [ 'onSessionMetadata' ] )->getMock();
                $neverHook->expects( $this->never() )->method( 'onSessionMetadata' );
 
                $builder = $this->getMockBuilder( 'DummySessionProvider' )
@@ -505,8 +510,8 @@ class SessionBackendTest extends MediaWikiTestCase {
                $backend = $this->getBackend( $user );
                $this->store->deleteSession( self::SESSIONID );
                $this->assertFalse( $backend->isPersistent(), 'sanity check' );
-               \TestingAccessWrapper::newFromObject( $backend )->metaDirty = false;
-               \TestingAccessWrapper::newFromObject( $backend )->dataDirty = false;
+               TestingAccessWrapper::newFromObject( $backend )->metaDirty = false;
+               TestingAccessWrapper::newFromObject( $backend )->dataDirty = false;
                $backend->save();
                $this->assertFalse( $this->store->getSession( self::SESSIONID ), 'making sure it didn\'t save' );
 
@@ -518,11 +523,11 @@ class SessionBackendTest extends MediaWikiTestCase {
                $this->store->setSessionData( self::SESSIONID, $testData );
                $backend = $this->getBackend( $user );
                $this->store->deleteSession( self::SESSIONID );
-               \TestingAccessWrapper::newFromObject( $backend )->persist = false;
-               \TestingAccessWrapper::newFromObject( $backend )->forcePersist = true;
+               TestingAccessWrapper::newFromObject( $backend )->persist = false;
+               TestingAccessWrapper::newFromObject( $backend )->forcePersist = true;
                $this->assertFalse( $backend->isPersistent(), 'sanity check' );
-               \TestingAccessWrapper::newFromObject( $backend )->metaDirty = false;
-               \TestingAccessWrapper::newFromObject( $backend )->dataDirty = false;
+               TestingAccessWrapper::newFromObject( $backend )->metaDirty = false;
+               TestingAccessWrapper::newFromObject( $backend )->dataDirty = false;
                $backend->save();
                $this->assertFalse( $this->store->getSession( self::SESSIONID ), 'making sure it didn\'t save' );
 
@@ -531,14 +536,14 @@ class SessionBackendTest extends MediaWikiTestCase {
                $this->mergeMwGlobalArrayValue( 'wgHooks', [ 'SessionMetadata' => [ $neverHook ] ] );
                $this->store->setSessionData( self::SESSIONID, $testData );
                $backend = $this->getBackend( $user );
-               \TestingAccessWrapper::newFromObject( $backend )->requests[100]
+               TestingAccessWrapper::newFromObject( $backend )->requests[100]
                        ->setSessionId( new SessionId( 'x' ) );
                $this->store->deleteSession( self::SESSIONID );
-               \TestingAccessWrapper::newFromObject( $backend )->persist = false;
-               \TestingAccessWrapper::newFromObject( $backend )->forcePersist = true;
+               TestingAccessWrapper::newFromObject( $backend )->persist = false;
+               TestingAccessWrapper::newFromObject( $backend )->forcePersist = true;
                $this->assertFalse( $backend->isPersistent(), 'sanity check' );
-               \TestingAccessWrapper::newFromObject( $backend )->metaDirty = false;
-               \TestingAccessWrapper::newFromObject( $backend )->dataDirty = false;
+               TestingAccessWrapper::newFromObject( $backend )->metaDirty = false;
+               TestingAccessWrapper::newFromObject( $backend )->dataDirty = false;
                $backend->save();
                $this->assertFalse( $this->store->getSession( self::SESSIONID ), 'making sure it didn\'t save' );
 
@@ -550,8 +555,8 @@ class SessionBackendTest extends MediaWikiTestCase {
                $backend = $this->getBackend( $user );
                $this->store->deleteSession( self::SESSIONID );
                $this->assertFalse( $backend->isPersistent(), 'sanity check' );
-               \TestingAccessWrapper::newFromObject( $backend )->metaDirty = false;
-               \TestingAccessWrapper::newFromObject( $backend )->dataDirty = true;
+               TestingAccessWrapper::newFromObject( $backend )->metaDirty = false;
+               TestingAccessWrapper::newFromObject( $backend )->dataDirty = true;
                $backend->save();
                $this->assertTrue( $this->onSessionMetadataCalled );
                $blob = $this->store->getSession( self::SESSIONID );
@@ -570,10 +575,10 @@ class SessionBackendTest extends MediaWikiTestCase {
                $this->store->setSessionData( self::SESSIONID, $testData );
                $backend = $this->getBackend( $user );
                $this->store->deleteSession( self::SESSIONID );
-               \TestingAccessWrapper::newFromObject( $backend )->persist = true;
+               TestingAccessWrapper::newFromObject( $backend )->persist = true;
                $this->assertTrue( $backend->isPersistent(), 'sanity check' );
-               \TestingAccessWrapper::newFromObject( $backend )->metaDirty = false;
-               \TestingAccessWrapper::newFromObject( $backend )->dataDirty = false;
+               TestingAccessWrapper::newFromObject( $backend )->metaDirty = false;
+               TestingAccessWrapper::newFromObject( $backend )->dataDirty = false;
                $backend->save();
                $this->assertFalse( $this->store->getSession( self::SESSIONID ), 'making sure it didn\'t save' );
 
@@ -585,11 +590,11 @@ class SessionBackendTest extends MediaWikiTestCase {
                $this->store->setSessionData( self::SESSIONID, $testData );
                $backend = $this->getBackend( $user );
                $this->store->deleteSession( self::SESSIONID );
-               \TestingAccessWrapper::newFromObject( $backend )->persist = true;
-               \TestingAccessWrapper::newFromObject( $backend )->forcePersist = true;
+               TestingAccessWrapper::newFromObject( $backend )->persist = true;
+               TestingAccessWrapper::newFromObject( $backend )->forcePersist = true;
                $this->assertTrue( $backend->isPersistent(), 'sanity check' );
-               \TestingAccessWrapper::newFromObject( $backend )->metaDirty = false;
-               \TestingAccessWrapper::newFromObject( $backend )->dataDirty = false;
+               TestingAccessWrapper::newFromObject( $backend )->metaDirty = false;
+               TestingAccessWrapper::newFromObject( $backend )->dataDirty = false;
                $backend->save();
                $this->assertFalse( $this->store->getSession( self::SESSIONID ), 'making sure it didn\'t save' );
 
@@ -600,10 +605,10 @@ class SessionBackendTest extends MediaWikiTestCase {
                $this->store->setSessionData( self::SESSIONID, $testData );
                $backend = $this->getBackend( $user );
                $this->store->deleteSession( self::SESSIONID );
-               \TestingAccessWrapper::newFromObject( $backend )->persist = true;
+               TestingAccessWrapper::newFromObject( $backend )->persist = true;
                $this->assertTrue( $backend->isPersistent(), 'sanity check' );
-               \TestingAccessWrapper::newFromObject( $backend )->metaDirty = false;
-               \TestingAccessWrapper::newFromObject( $backend )->dataDirty = true;
+               TestingAccessWrapper::newFromObject( $backend )->metaDirty = false;
+               TestingAccessWrapper::newFromObject( $backend )->dataDirty = true;
                $backend->save();
                $this->assertTrue( $this->onSessionMetadataCalled );
                $blob = $this->store->getSession( self::SESSIONID );
@@ -625,11 +630,11 @@ class SessionBackendTest extends MediaWikiTestCase {
                $this->store->setSessionData( self::SESSIONID, $testData );
                $backend = $this->getBackend( $user );
                $this->store->deleteSession( self::SESSIONID );
-               \TestingAccessWrapper::newFromObject( $backend )->persist = true;
-               \TestingAccessWrapper::newFromObject( $backend )->forcePersist = true;
+               TestingAccessWrapper::newFromObject( $backend )->persist = true;
+               TestingAccessWrapper::newFromObject( $backend )->forcePersist = true;
                $this->assertTrue( $backend->isPersistent(), 'sanity check' );
-               \TestingAccessWrapper::newFromObject( $backend )->metaDirty = false;
-               \TestingAccessWrapper::newFromObject( $backend )->dataDirty = true;
+               TestingAccessWrapper::newFromObject( $backend )->metaDirty = false;
+               TestingAccessWrapper::newFromObject( $backend )->dataDirty = true;
                $backend->save();
                $this->assertTrue( $this->onSessionMetadataCalled );
                $blob = $this->store->getSession( self::SESSIONID );
@@ -651,10 +656,10 @@ class SessionBackendTest extends MediaWikiTestCase {
                $this->store->setSessionData( self::SESSIONID, $testData );
                $backend = $this->getBackend( $user );
                $this->store->deleteSession( self::SESSIONID );
-               \TestingAccessWrapper::newFromObject( $backend )->persist = true;
+               TestingAccessWrapper::newFromObject( $backend )->persist = true;
                $this->assertTrue( $backend->isPersistent(), 'sanity check' );
-               \TestingAccessWrapper::newFromObject( $backend )->metaDirty = true;
-               \TestingAccessWrapper::newFromObject( $backend )->dataDirty = false;
+               TestingAccessWrapper::newFromObject( $backend )->metaDirty = true;
+               TestingAccessWrapper::newFromObject( $backend )->dataDirty = false;
                $backend->save();
                $this->assertTrue( $this->onSessionMetadataCalled );
                $blob = $this->store->getSession( self::SESSIONID );
@@ -675,11 +680,11 @@ class SessionBackendTest extends MediaWikiTestCase {
                $this->store->setSessionData( self::SESSIONID, $testData );
                $backend = $this->getBackend( $user );
                $this->store->deleteSession( self::SESSIONID );
-               \TestingAccessWrapper::newFromObject( $backend )->persist = true;
+               TestingAccessWrapper::newFromObject( $backend )->persist = true;
                $this->assertTrue( $backend->isPersistent(), 'sanity check' );
-               \TestingAccessWrapper::newFromObject( $backend )->metaDirty = false;
-               \TestingAccessWrapper::newFromObject( $backend )->dataDirty = false;
-               \TestingAccessWrapper::newFromObject( $backend )->dataHash = 'Doesn\'t match';
+               TestingAccessWrapper::newFromObject( $backend )->metaDirty = false;
+               TestingAccessWrapper::newFromObject( $backend )->dataDirty = false;
+               TestingAccessWrapper::newFromObject( $backend )->dataHash = 'Doesn\'t match';
                $backend->save();
                $this->assertTrue( $this->onSessionMetadataCalled );
                $blob = $this->store->getSession( self::SESSIONID );
@@ -694,7 +699,8 @@ class SessionBackendTest extends MediaWikiTestCase {
 
                // Bad hook
                $this->provider = null;
-               $mockHook = $this->getMock( __CLASS__, [ 'onSessionMetadata' ] );
+               $mockHook = $this->getMockBuilder( __CLASS__ )
+                       ->setMethods( [ 'onSessionMetadata' ] )->getMock();
                $mockHook->expects( $this->any() )->method( 'onSessionMetadata' )
                        ->will( $this->returnCallback(
                                function ( SessionBackend $backend, array &$metadata, array $requests ) {
@@ -716,7 +722,7 @@ class SessionBackendTest extends MediaWikiTestCase {
                }
 
                // SessionManager::preventSessionsForUser
-               \TestingAccessWrapper::newFromObject( $this->manager )->preventUsers = [
+               TestingAccessWrapper::newFromObject( $this->manager )->preventUsers = [
                        $user->getName() => true,
                ];
                $this->provider = $neverProvider;
@@ -724,10 +730,10 @@ class SessionBackendTest extends MediaWikiTestCase {
                $this->store->setSessionData( self::SESSIONID, $testData );
                $backend = $this->getBackend( $user );
                $this->store->deleteSession( self::SESSIONID );
-               \TestingAccessWrapper::newFromObject( $backend )->persist = true;
+               TestingAccessWrapper::newFromObject( $backend )->persist = true;
                $this->assertTrue( $backend->isPersistent(), 'sanity check' );
-               \TestingAccessWrapper::newFromObject( $backend )->metaDirty = true;
-               \TestingAccessWrapper::newFromObject( $backend )->dataDirty = true;
+               TestingAccessWrapper::newFromObject( $backend )->metaDirty = true;
+               TestingAccessWrapper::newFromObject( $backend )->dataDirty = true;
                $backend->save();
                $this->assertFalse( $this->store->getSession( self::SESSIONID ), 'making sure it didn\'t save' );
        }
@@ -738,14 +744,15 @@ class SessionBackendTest extends MediaWikiTestCase {
                $testData = [ 'foo' => 'foo!', 'bar', [ 'baz', null ] ];
 
                // Not persistent
-               $this->provider = $this->getMock( 'DummySessionProvider', [ 'persistSession' ] );
+               $this->provider = $this->getMockBuilder( 'DummySessionProvider' )
+                       ->setMethods( [ 'persistSession' ] )->getMock();
                $this->provider->expects( $this->never() )->method( 'persistSession' );
                $this->onSessionMetadataCalled = false;
                $this->mergeMwGlobalArrayValue( 'wgHooks', [ 'SessionMetadata' => [ $this ] ] );
                $this->store->setSessionData( self::SESSIONID, $testData );
                $backend = $this->getBackend( $user );
                $this->store->deleteSession( self::SESSIONID );
-               $wrap = \TestingAccessWrapper::newFromObject( $backend );
+               $wrap = TestingAccessWrapper::newFromObject( $backend );
                $this->assertFalse( $backend->isPersistent(), 'sanity check' );
                $wrap->metaDirty = false;
                $wrap->dataDirty = false;
@@ -763,14 +770,15 @@ class SessionBackendTest extends MediaWikiTestCase {
                $this->assertNotEquals( 0, $wrap->expires );
 
                // Persistent
-               $this->provider = $this->getMock( 'DummySessionProvider', [ 'persistSession' ] );
+               $this->provider = $this->getMockBuilder( 'DummySessionProvider' )
+                       ->setMethods( [ 'persistSession' ] )->getMock();
                $this->provider->expects( $this->atLeastOnce() )->method( 'persistSession' );
                $this->onSessionMetadataCalled = false;
                $this->mergeMwGlobalArrayValue( 'wgHooks', [ 'SessionMetadata' => [ $this ] ] );
                $this->store->setSessionData( self::SESSIONID, $testData );
                $backend = $this->getBackend( $user );
                $this->store->deleteSession( self::SESSIONID );
-               $wrap = \TestingAccessWrapper::newFromObject( $backend );
+               $wrap = TestingAccessWrapper::newFromObject( $backend );
                $wrap->persist = true;
                $this->assertTrue( $backend->isPersistent(), 'sanity check' );
                $wrap->metaDirty = false;
@@ -789,14 +797,15 @@ class SessionBackendTest extends MediaWikiTestCase {
                $this->assertNotEquals( 0, $wrap->expires );
 
                // Not persistent, not expiring
-               $this->provider = $this->getMock( 'DummySessionProvider', [ 'persistSession' ] );
+               $this->provider = $this->getMockBuilder( 'DummySessionProvider' )
+                       ->setMethods( [ 'persistSession' ] )->getMock();
                $this->provider->expects( $this->never() )->method( 'persistSession' );
                $this->onSessionMetadataCalled = false;
                $this->mergeMwGlobalArrayValue( 'wgHooks', [ 'SessionMetadata' => [ $this ] ] );
                $this->store->setSessionData( self::SESSIONID, $testData );
                $backend = $this->getBackend( $user );
                $this->store->deleteSession( self::SESSIONID );
-               $wrap = \TestingAccessWrapper::newFromObject( $backend );
+               $wrap = TestingAccessWrapper::newFromObject( $backend );
                $this->assertFalse( $backend->isPersistent(), 'sanity check' );
                $wrap->metaDirty = false;
                $wrap->dataDirty = false;
@@ -821,7 +830,7 @@ class SessionBackendTest extends MediaWikiTestCase {
                if ( !PHPSessionHandler::isEnabled() ) {
                        $rProp = new \ReflectionProperty( PHPSessionHandler::class, 'instance' );
                        $rProp->setAccessible( true );
-                       $handler = \TestingAccessWrapper::newFromObject( $rProp->getValue() );
+                       $handler = TestingAccessWrapper::newFromObject( $rProp->getValue() );
                        $resetHandler = new \Wikimedia\ScopedCallback( function () use ( $handler ) {
                                session_write_close();
                                $handler->enable = false;
@@ -830,27 +839,27 @@ class SessionBackendTest extends MediaWikiTestCase {
                }
 
                $backend = $this->getBackend( static::getTestSysop()->getUser() );
-               \TestingAccessWrapper::newFromObject( $backend )->usePhpSessionHandling = true;
+               TestingAccessWrapper::newFromObject( $backend )->usePhpSessionHandling = true;
 
                $resetSingleton = TestUtils::setSessionManagerSingleton( $this->manager );
 
-               $manager = \TestingAccessWrapper::newFromObject( $this->manager );
+               $manager = TestingAccessWrapper::newFromObject( $this->manager );
                $request = \RequestContext::getMain()->getRequest();
                $manager->globalSession = $backend->getSession( $request );
                $manager->globalSessionRequest = $request;
 
                session_id( '' );
-               \TestingAccessWrapper::newFromObject( $backend )->checkPHPSession();
+               TestingAccessWrapper::newFromObject( $backend )->checkPHPSession();
                $this->assertSame( $backend->getId(), session_id() );
                session_write_close();
 
                $backend2 = $this->getBackend(
                        User::newFromName( 'UTSysop' ), 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb'
                );
-               \TestingAccessWrapper::newFromObject( $backend2 )->usePhpSessionHandling = true;
+               TestingAccessWrapper::newFromObject( $backend2 )->usePhpSessionHandling = true;
 
                session_id( '' );
-               \TestingAccessWrapper::newFromObject( $backend2 )->checkPHPSession();
+               TestingAccessWrapper::newFromObject( $backend2 )->checkPHPSession();
                $this->assertSame( '', session_id() );
        }
 
@@ -861,7 +870,7 @@ class SessionBackendTest extends MediaWikiTestCase {
                if ( !PHPSessionHandler::isEnabled() ) {
                        $rProp = new \ReflectionProperty( PHPSessionHandler::class, 'instance' );
                        $rProp->setAccessible( true );
-                       $handler = \TestingAccessWrapper::newFromObject( $rProp->getValue() );
+                       $handler = TestingAccessWrapper::newFromObject( $rProp->getValue() );
                        $resetHandler = new \Wikimedia\ScopedCallback( function () use ( $handler ) {
                                session_write_close();
                                $handler->enable = false;
@@ -870,11 +879,11 @@ class SessionBackendTest extends MediaWikiTestCase {
                }
 
                $backend = $this->getBackend( User::newFromName( 'UTSysop' ) );
-               \TestingAccessWrapper::newFromObject( $backend )->usePhpSessionHandling = true;
+               TestingAccessWrapper::newFromObject( $backend )->usePhpSessionHandling = true;
 
                $resetSingleton = TestUtils::setSessionManagerSingleton( $this->manager );
 
-               $manager = \TestingAccessWrapper::newFromObject( $this->manager );
+               $manager = TestingAccessWrapper::newFromObject( $this->manager );
                $request = \RequestContext::getMain()->getRequest();
                $manager->globalSession = $backend->getSession( $request );
                $manager->globalSessionRequest = $request;
@@ -897,7 +906,7 @@ class SessionBackendTest extends MediaWikiTestCase {
                if ( !PHPSessionHandler::isEnabled() ) {
                        $rProp = new \ReflectionProperty( PHPSessionHandler::class, 'instance' );
                        $rProp->setAccessible( true );
-                       $handler = \TestingAccessWrapper::newFromObject( $rProp->getValue() );
+                       $handler = TestingAccessWrapper::newFromObject( $rProp->getValue() );
                        $resetHandler = new \Wikimedia\ScopedCallback( function () use ( $handler ) {
                                session_write_close();
                                $handler->enable = false;
@@ -906,13 +915,13 @@ class SessionBackendTest extends MediaWikiTestCase {
                }
 
                $backend = $this->getBackend( User::newFromName( 'UTSysop' ) );
-               $wrap = \TestingAccessWrapper::newFromObject( $backend );
+               $wrap = TestingAccessWrapper::newFromObject( $backend );
                $wrap->usePhpSessionHandling = true;
                $wrap->persist = true;
 
                $resetSingleton = TestUtils::setSessionManagerSingleton( $this->manager );
 
-               $manager = \TestingAccessWrapper::newFromObject( $this->manager );
+               $manager = TestingAccessWrapper::newFromObject( $this->manager );
                $request = \RequestContext::getMain()->getRequest();
                $manager->globalSession = $backend->getSession( $request );
                $manager->globalSessionRequest = $request;
index 48a72d3..9eb46bc 100644 (file)
@@ -5,6 +5,7 @@ namespace MediaWiki\Session;
 use MediaWikiTestCase;
 use Psr\Log\LogLevel;
 use User;
+use Wikimedia\TestingAccessWrapper;
 
 /**
  * @group Session
@@ -59,7 +60,7 @@ class SessionManagerTest extends MediaWikiTestCase {
                }
                $rProp = new \ReflectionProperty( PHPSessionHandler::class, 'instance' );
                $rProp->setAccessible( true );
-               $handler = \TestingAccessWrapper::newFromObject( $rProp->getValue() );
+               $handler = TestingAccessWrapper::newFromObject( $rProp->getValue() );
                $oldEnable = $handler->enable;
                $reset[] = new \Wikimedia\ScopedCallback( function () use ( $handler, $oldEnable ) {
                        if ( $handler->enable ) {
@@ -100,15 +101,15 @@ class SessionManagerTest extends MediaWikiTestCase {
        }
 
        public function testConstructor() {
-               $manager = \TestingAccessWrapper::newFromObject( $this->getManager() );
+               $manager = TestingAccessWrapper::newFromObject( $this->getManager() );
                $this->assertSame( $this->config, $manager->config );
                $this->assertSame( $this->logger, $manager->logger );
                $this->assertSame( $this->store, $manager->store );
 
-               $manager = \TestingAccessWrapper::newFromObject( new SessionManager() );
+               $manager = TestingAccessWrapper::newFromObject( new SessionManager() );
                $this->assertSame( \RequestContext::getMain()->getConfig(), $manager->config );
 
-               $manager = \TestingAccessWrapper::newFromObject( new SessionManager( [
+               $manager = TestingAccessWrapper::newFromObject( new SessionManager( [
                        'config' => $this->config,
                ] ) );
                $this->assertSame( \ObjectCache::$instances['testSessionStore'], $manager->store );
@@ -418,7 +419,7 @@ class SessionManagerTest extends MediaWikiTestCase {
 
        public function testGetEmptySession() {
                $manager = $this->getManager();
-               $pmanager = \TestingAccessWrapper::newFromObject( $manager );
+               $pmanager = TestingAccessWrapper::newFromObject( $manager );
                $request = new \FauxRequest();
 
                $providerBuilder = $this->getMockBuilder( 'DummySessionProvider' )
@@ -747,14 +748,14 @@ class SessionManagerTest extends MediaWikiTestCase {
 
        public function testGetProviders() {
                $realManager = $this->getManager();
-               $manager = \TestingAccessWrapper::newFromObject( $realManager );
+               $manager = TestingAccessWrapper::newFromObject( $realManager );
 
                $this->config->set( 'SessionProviders', [
                        [ 'class' => 'DummySessionProvider' ],
                ] );
                $providers = $manager->getProviders();
                $this->assertArrayHasKey( 'DummySessionProvider', $providers );
-               $provider = \TestingAccessWrapper::newFromObject( $providers['DummySessionProvider'] );
+               $provider = TestingAccessWrapper::newFromObject( $providers['DummySessionProvider'] );
                $this->assertSame( $manager->logger, $provider->logger );
                $this->assertSame( $manager->config, $provider->config );
                $this->assertSame( $realManager, $provider->getManager() );
@@ -776,10 +777,11 @@ class SessionManagerTest extends MediaWikiTestCase {
        }
 
        public function testShutdown() {
-               $manager = \TestingAccessWrapper::newFromObject( $this->getManager() );
+               $manager = TestingAccessWrapper::newFromObject( $this->getManager() );
                $manager->setLogger( new \Psr\Log\NullLogger() );
 
-               $mock = $this->getMock( 'stdClass', [ 'shutdown' ] );
+               $mock = $this->getMockBuilder( 'stdClass' )
+                       ->setMethods( [ 'shutdown' ] )->getMock();
                $mock->expects( $this->once() )->method( 'shutdown' );
 
                $manager->allSessionBackends = [ $mock ];
@@ -787,7 +789,7 @@ class SessionManagerTest extends MediaWikiTestCase {
        }
 
        public function testGetSessionFromInfo() {
-               $manager = \TestingAccessWrapper::newFromObject( $this->getManager() );
+               $manager = TestingAccessWrapper::newFromObject( $this->getManager() );
                $request = new \FauxRequest();
 
                $id = 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa';
@@ -799,11 +801,11 @@ class SessionManagerTest extends MediaWikiTestCase {
                        'userInfo' => UserInfo::newFromName( 'UTSysop', true ),
                        'idIsSafe' => true,
                ] );
-               \TestingAccessWrapper::newFromObject( $info )->idIsSafe = true;
-               $session1 = \TestingAccessWrapper::newFromObject(
+               TestingAccessWrapper::newFromObject( $info )->idIsSafe = true;
+               $session1 = TestingAccessWrapper::newFromObject(
                        $manager->getSessionFromInfo( $info, $request )
                );
-               $session2 = \TestingAccessWrapper::newFromObject(
+               $session2 = TestingAccessWrapper::newFromObject(
                        $manager->getSessionFromInfo( $info, $request )
                );
 
@@ -812,7 +814,7 @@ class SessionManagerTest extends MediaWikiTestCase {
                $this->assertSame( $session1->getSessionId(), $session2->getSessionId() );
                $this->assertSame( $id, $session1->getId() );
 
-               \TestingAccessWrapper::newFromObject( $info )->idIsSafe = false;
+               TestingAccessWrapper::newFromObject( $info )->idIsSafe = false;
                $session3 = $manager->getSessionFromInfo( $info, $request );
                $this->assertNotSame( $id, $session3->getId() );
        }
@@ -821,7 +823,7 @@ class SessionManagerTest extends MediaWikiTestCase {
                $manager = $this->getManager();
 
                $session = $manager->getSessionForRequest( new \FauxRequest );
-               $backend = \TestingAccessWrapper::newFromObject( $session )->backend;
+               $backend = TestingAccessWrapper::newFromObject( $session )->backend;
                $sessionId = $session->getSessionId();
                $id = (string)$sessionId;
 
@@ -958,7 +960,7 @@ class SessionManagerTest extends MediaWikiTestCase {
                $provider3->expects( $this->any() )->method( '__toString' )
                        ->will( $this->returnValue( 'Mock3' ) );
 
-               \TestingAccessWrapper::newFromObject( $manager )->sessionProviders = [
+               TestingAccessWrapper::newFromObject( $manager )->sessionProviders = [
                        (string)$provider => $provider,
                        (string)$provider2 => $provider2,
                        (string)$provider3 => $provider3,
index 8284d05..052c016 100644 (file)
@@ -3,6 +3,7 @@
 namespace MediaWiki\Session;
 
 use MediaWikiTestCase;
+use Wikimedia\TestingAccessWrapper;
 
 /**
  * @group Session
@@ -17,7 +18,7 @@ class SessionProviderTest extends MediaWikiTestCase {
                $config = new \HashConfig();
 
                $provider = $this->getMockForAbstractClass( SessionProvider::class );
-               $priv = \TestingAccessWrapper::newFromObject( $provider );
+               $priv = TestingAccessWrapper::newFromObject( $provider );
 
                $provider->setConfig( $config );
                $this->assertSame( $config, $priv->config );
@@ -148,7 +149,7 @@ class SessionProviderTest extends MediaWikiTestCase {
                $provider = $this->getMockForAbstractClass( SessionProvider::class,
                        [], 'MockSessionProvider' );
                $provider->setConfig( $config );
-               $priv = \TestingAccessWrapper::newFromObject( $provider );
+               $priv = TestingAccessWrapper::newFromObject( $provider );
 
                $this->assertSame( 'eoq8cb1mg7j30ui5qolafps4hg29k5bb', $priv->hashToSessionId( 'foobar' ) );
                $this->assertSame( '4do8j7tfld1g8tte9jqp3csfgmulaun9',
@@ -198,7 +199,7 @@ class SessionProviderTest extends MediaWikiTestCase {
                        );
                }
 
-               \TestingAccessWrapper::newFromObject( $backend )->provider = $provider;
+               TestingAccessWrapper::newFromObject( $backend )->provider = $provider;
                $this->assertNull( $provider->getAllowedUserRights( $backend ) );
        }
 
index e6a6ad3..adf0f5d 100644 (file)
@@ -5,6 +5,7 @@ namespace MediaWiki\Session;
 use Psr\Log\LogLevel;
 use MediaWikiTestCase;
 use User;
+use Wikimedia\TestingAccessWrapper;
 
 /**
  * @group Session
@@ -14,16 +15,16 @@ class SessionTest extends MediaWikiTestCase {
 
        public function testConstructor() {
                $backend = TestUtils::getDummySessionBackend();
-               \TestingAccessWrapper::newFromObject( $backend )->requests = [ -1 => 'dummy' ];
-               \TestingAccessWrapper::newFromObject( $backend )->id = new SessionId( 'abc' );
+               TestingAccessWrapper::newFromObject( $backend )->requests = [ -1 => 'dummy' ];
+               TestingAccessWrapper::newFromObject( $backend )->id = new SessionId( 'abc' );
 
                $session = new Session( $backend, 42, new \TestLogger );
-               $priv = \TestingAccessWrapper::newFromObject( $session );
+               $priv = TestingAccessWrapper::newFromObject( $session );
                $this->assertSame( $backend, $priv->backend );
                $this->assertSame( 42, $priv->index );
 
                $request = new \FauxRequest();
-               $priv2 = \TestingAccessWrapper::newFromObject( $session->sessionWithRequest( $request ) );
+               $priv2 = TestingAccessWrapper::newFromObject( $session->sessionWithRequest( $request ) );
                $this->assertSame( $backend, $priv2->backend );
                $this->assertNotSame( $priv->index, $priv2->index );
                $this->assertSame( $request, $priv2->getRequest() );
@@ -37,8 +38,9 @@ class SessionTest extends MediaWikiTestCase {
         * @param bool $ret Whether the method returns a value
         */
        public function testMethods( $m, $args, $index, $ret ) {
-               $mock = $this->getMock( DummySessionBackend::class,
-                       [ $m, 'deregisterSession' ] );
+               $mock = $this->getMockBuilder( DummySessionBackend::class )
+                       ->setMethods( [ $m, 'deregisterSession' ] )
+                       ->getMock();
                $mock->expects( $this->once() )->method( 'deregisterSession' )
                        ->with( $this->identicalTo( 42 ) );
 
@@ -97,7 +99,7 @@ class SessionTest extends MediaWikiTestCase {
 
        public function testDataAccess() {
                $session = TestUtils::getDummySession();
-               $backend = \TestingAccessWrapper::newFromObject( $session )->backend;
+               $backend = TestingAccessWrapper::newFromObject( $session )->backend;
 
                $this->assertEquals( 1, $session->get( 'foo' ) );
                $this->assertEquals( 'zero', $session->get( 0 ) );
@@ -157,7 +159,7 @@ class SessionTest extends MediaWikiTestCase {
        public function testArrayAccess() {
                $logger = new \TestLogger;
                $session = TestUtils::getDummySession( null, -1, $logger );
-               $backend = \TestingAccessWrapper::newFromObject( $session )->backend;
+               $backend = TestingAccessWrapper::newFromObject( $session )->backend;
 
                $this->assertEquals( 1, $session['foo'] );
                $this->assertEquals( 'zero', $session[0] );
@@ -221,11 +223,11 @@ class SessionTest extends MediaWikiTestCase {
 
        public function testClear() {
                $session = TestUtils::getDummySession();
-               $priv = \TestingAccessWrapper::newFromObject( $session );
+               $priv = TestingAccessWrapper::newFromObject( $session );
 
-               $backend = $this->getMock(
-                       DummySessionBackend::class, [ 'canSetUser', 'setUser', 'save' ]
-               );
+               $backend = $this->getMockBuilder( DummySessionBackend::class )
+                       ->setMethods( [ 'canSetUser', 'setUser', 'save' ] )
+                       ->getMock();
                $backend->expects( $this->once() )->method( 'canSetUser' )
                        ->will( $this->returnValue( true ) );
                $backend->expects( $this->once() )->method( 'setUser' )
@@ -238,9 +240,9 @@ class SessionTest extends MediaWikiTestCase {
                $this->assertSame( [], $backend->data );
                $this->assertTrue( $backend->dirty );
 
-               $backend = $this->getMock(
-                       DummySessionBackend::class, [ 'canSetUser', 'setUser', 'save' ]
-               );
+               $backend = $this->getMockBuilder( DummySessionBackend::class )
+                       ->setMethods( [ 'canSetUser', 'setUser', 'save' ] )
+                       ->getMock();
                $backend->data = [];
                $backend->expects( $this->once() )->method( 'canSetUser' )
                        ->will( $this->returnValue( true ) );
@@ -253,9 +255,9 @@ class SessionTest extends MediaWikiTestCase {
                $session->clear();
                $this->assertFalse( $backend->dirty );
 
-               $backend = $this->getMock(
-                       DummySessionBackend::class, [ 'canSetUser', 'setUser', 'save' ]
-               );
+               $backend = $this->getMockBuilder( DummySessionBackend::class )
+                       ->setMethods( [ 'canSetUser', 'setUser', 'save' ] )
+                       ->getMock();
                $backend->expects( $this->once() )->method( 'canSetUser' )
                        ->will( $this->returnValue( false ) );
                $backend->expects( $this->never() )->method( 'setUser' );
@@ -268,10 +270,10 @@ class SessionTest extends MediaWikiTestCase {
 
        public function testTokens() {
                $session = TestUtils::getDummySession();
-               $priv = \TestingAccessWrapper::newFromObject( $session );
+               $priv = TestingAccessWrapper::newFromObject( $session );
                $backend = $priv->backend;
 
-               $token = \TestingAccessWrapper::newFromObject( $session->getToken() );
+               $token = TestingAccessWrapper::newFromObject( $session->getToken() );
                $this->assertArrayHasKey( 'wsTokenSecrets', $backend->data );
                $this->assertArrayHasKey( 'default', $backend->data['wsTokenSecrets'] );
                $secret = $backend->data['wsTokenSecrets']['default'];
@@ -279,13 +281,13 @@ class SessionTest extends MediaWikiTestCase {
                $this->assertSame( '', $token->salt );
                $this->assertTrue( $token->wasNew() );
 
-               $token = \TestingAccessWrapper::newFromObject( $session->getToken( 'foo' ) );
+               $token = TestingAccessWrapper::newFromObject( $session->getToken( 'foo' ) );
                $this->assertSame( $secret, $token->secret );
                $this->assertSame( 'foo', $token->salt );
                $this->assertFalse( $token->wasNew() );
 
                $backend->data['wsTokenSecrets']['secret'] = 'sekret';
-               $token = \TestingAccessWrapper::newFromObject(
+               $token = TestingAccessWrapper::newFromObject(
                        $session->getToken( [ 'bar', 'baz' ], 'secret' )
                );
                $this->assertSame( 'sekret', $token->secret );
@@ -357,7 +359,7 @@ class SessionTest extends MediaWikiTestCase {
 
                // Unserializable data
                $iv = \MWCryptRand::generate( 16, true );
-               list( $encKey, $hmacKey ) = \TestingAccessWrapper::newFromObject( $session )->getSecretKeys();
+               list( $encKey, $hmacKey ) = TestingAccessWrapper::newFromObject( $session )->getSecretKeys();
                $ciphertext = openssl_encrypt( 'foobar', 'aes-256-ctr', $encKey, OPENSSL_RAW_DATA, $iv );
                $sealed = base64_encode( $iv ) . '.' . base64_encode( $ciphertext );
                $hmac = hash_hmac( 'sha256', $sealed, $hmacKey, true );
index f00de55..af29d6b 100644 (file)
@@ -3,6 +3,7 @@
 namespace MediaWiki\Session;
 
 use Psr\Log\LoggerInterface;
+use Wikimedia\TestingAccessWrapper;
 
 /**
  * Utility functions for Session unit tests
@@ -70,7 +71,7 @@ class TestUtils {
                }
 
                $ret = $rc->newInstanceWithoutConstructor();
-               \TestingAccessWrapper::newFromObject( $ret )->logger = new \TestLogger;
+               TestingAccessWrapper::newFromObject( $ret )->logger = new \TestLogger;
                return $ret;
        }
 
@@ -95,7 +96,7 @@ class TestUtils {
                }
 
                $session = $rc->newInstanceWithoutConstructor();
-               $priv = \TestingAccessWrapper::newFromObject( $session );
+               $priv = TestingAccessWrapper::newFromObject( $session );
                $priv->backend = $backend;
                $priv->index = $index;
                $priv->logger = $logger ?: new \TestLogger;
index ca001f3..4797652 100644 (file)
@@ -3,6 +3,7 @@
 namespace MediaWiki\Session;
 
 use MediaWikiTestCase;
+use Wikimedia\TestingAccessWrapper;
 
 /**
  * @group Session
@@ -27,7 +28,7 @@ class TokenTest extends MediaWikiTestCase {
        }
 
        public function testToStringAtTimestamp() {
-               $token = \TestingAccessWrapper::newFromObject( new Token( 'sekret', 'salty', false ) );
+               $token = TestingAccessWrapper::newFromObject( new Token( 'sekret', 'salty', false ) );
 
                $this->assertSame(
                        'd9ade0c7d4349e9df9094e61c33a5a0d5644fde2+\\',
@@ -53,7 +54,7 @@ class TokenTest extends MediaWikiTestCase {
        }
 
        public function testMatch() {
-               $token = \TestingAccessWrapper::newFromObject( new Token( 'sekret', 'salty', false ) );
+               $token = TestingAccessWrapper::newFromObject( new Token( 'sekret', 'salty', false ) );
 
                $test = $token->toStringAtTimestamp( time() - 10 );
                $this->assertTrue( $token->match( $test ) );
index cb4b697..c0d8c00 100644 (file)
@@ -75,7 +75,7 @@ class SiteExporterTest extends PHPUnit_Framework_TestCase {
        }
 
        private function newSiteStore( SiteList $sites ) {
-               $store = $this->getMock( 'SiteStore' );
+               $store = $this->getMockBuilder( 'SiteStore' )->getMock();
 
                $store->expects( $this->once() )
                        ->method( 'saveSites' )
index 45241c5..ea49429 100644 (file)
@@ -32,7 +32,7 @@
 class SiteImporterTest extends PHPUnit_Framework_TestCase {
 
        private function newSiteImporter( array $expectedSites, $errorCount ) {
-               $store = $this->getMock( 'SiteStore' );
+               $store = $this->getMockBuilder( 'SiteStore' )->getMock();
 
                $store->expects( $this->once() )
                        ->method( 'saveSites' )
@@ -44,7 +44,7 @@ class SiteImporterTest extends PHPUnit_Framework_TestCase {
                        ->method( 'getSites' )
                        ->will( $this->returnValue( new SiteList() ) );
 
-               $errorHandler = $this->getMock( 'Psr\Log\LoggerInterface' );
+               $errorHandler = $this->getMockBuilder( 'Psr\Log\LoggerInterface' )->getMock();
                $errorHandler->expects( $this->exactly( $errorCount ) )
                        ->method( 'error' );
 
@@ -148,7 +148,7 @@ class SiteImporterTest extends PHPUnit_Framework_TestCase {
        public function testImportFromXML_malformed() {
                $this->setExpectedException( 'Exception' );
 
-               $store = $this->getMock( 'SiteStore' );
+               $store = $this->getMockBuilder( 'SiteStore' )->getMock();
                $importer = new SiteImporter( $store );
                $importer->importFromXML( 'THIS IS NOT XML' );
        }
index e10a97f..b536c22 100644 (file)
@@ -1,4 +1,7 @@
 <?php
+
+use Wikimedia\TestingAccessWrapper;
+
 /**
  * Test class for ChangesListSpecialPage class
  *
@@ -801,4 +804,85 @@ class ChangesListSpecialPageTest extends AbstractChangesListSpecialPageTestCase
                        ],
                ];
        }
+
+       public function provideGetFilterConflicts() {
+               return [
+                       [
+                               "parameters" => [],
+                               "expectedConflicts" => false,
+                       ],
+                       [
+                               "parameters" => [
+                                       "hideliu" => true,
+                                       "userExpLevel" => "newcomer",
+                               ],
+                               "expectedConflicts" => true,
+                       ],
+                       [
+                               "parameters" => [
+                                       "hideanons" => true,
+                                       "userExpLevel" => "learner",
+                               ],
+                               "expectedConflicts" => false,
+                       ],
+                       [
+                               "parameters" => [
+                                       "hidemajor" => true,
+                                       "hidenewpages" => true,
+                                       "hidepageedits" => true,
+                                       "hidecategorization" => false,
+                                       "hidelog" => true,
+                                       "hideWikidata" => true,
+                               ],
+                               "expectedConflicts" => true,
+                       ],
+                       [
+                               "parameters" => [
+                                       "hidemajor" => true,
+                                       "hidenewpages" => false,
+                                       "hidepageedits" => true,
+                                       "hidecategorization" => false,
+                                       "hidelog" => false,
+                                       "hideWikidata" => true,
+                               ],
+                               "expectedConflicts" => true,
+                       ],
+                       [
+                               "parameters" => [
+                                       "hidemajor" => true,
+                                       "hidenewpages" => false,
+                                       "hidepageedits" => false,
+                                       "hidecategorization" => true,
+                                       "hidelog" => true,
+                                       "hideWikidata" => true,
+                               ],
+                               "expectedConflicts" => false,
+                       ],
+                       [
+                               "parameters" => [
+                                       "hideminor" => true,
+                                       "hidenewpages" => true,
+                                       "hidepageedits" => true,
+                                       "hidecategorization" => false,
+                                       "hidelog" => true,
+                                       "hideWikidata" => true,
+                               ],
+                               "expectedConflicts" => false,
+                       ],
+               ];
+       }
+
+       /**
+        * @dataProvider provideGetFilterConflicts
+        */
+       public function testGetFilterConflicts( $parameters, $expectedConflicts ) {
+               $context = new RequestContext;
+               $context->setRequest( new FauxRequest( $parameters ) );
+               $this->changesListSpecialPage->setContext( $context );
+
+               $this->assertEquals(
+                       $expectedConflicts,
+                       $this->changesListSpecialPage->areFiltersInConflict()
+               );
+       }
 }
index 4a46464..fd587bf 100644 (file)
@@ -25,7 +25,7 @@ class SpecialPreferencesTest extends MediaWikiTestCase {
                // Set a low limit
                $this->setMwGlobals( 'wgMaxSigChars', 2 );
 
-               $user = $this->getMock( 'User' );
+               $user = $this->createMock( 'User' );
                $user->expects( $this->any() )
                        ->method( 'isAnon' )
                        ->will( $this->returnValue( false ) );
index a42c86c..dd68cdc 100644 (file)
@@ -130,8 +130,8 @@ class UploadBaseTest extends MediaWikiTestCase {
         */
        public function testCheckSvgScriptCallback( $svg, $wellFormed, $filterMatch, $message ) {
                list( $formed, $match ) = $this->upload->checkSvgString( $svg );
-               $this->assertSame( $wellFormed, $formed, $message );
-               $this->assertSame( $filterMatch, $match, $message );
+               $this->assertSame( $wellFormed, $formed, $message . " (well-formed)" );
+               $this->assertSame( $filterMatch, $match, $message . " (filter match)" );
        }
 
        public static function provideCheckSvgScriptCallback() {
@@ -254,10 +254,16 @@ class UploadBaseTest extends MediaWikiTestCase {
                        ],
                        [
                                '<?xml version="1.0"?> <?xml-stylesheet type="text/xml" href="#stylesheet"?> <!DOCTYPE doc [ <!ATTLIST xsl:stylesheet id ID #REQUIRED>]> <svg xmlns="http://www.w3.org/2000/svg"> <xsl:stylesheet id="stylesheet" version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <iframe xmlns="http://www.w3.org/1999/xhtml" src="javascript:alert(1)"></iframe> </xsl:template> </xsl:stylesheet> <circle fill="red" r="40"></circle> </svg>',
-                               true,
+                               false,
                                true,
                                'SVG with embedded stylesheet (http://html5sec.org/#125)'
                        ],
+                       [
+                               '<?xml version="1.0"?> <?xml-stylesheet type="text/xml" href="#stylesheet"?> <svg xmlns="http://www.w3.org/2000/svg"> <xsl:stylesheet id="stylesheet" version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <iframe xmlns="http://www.w3.org/1999/xhtml" src="javascript:alert(1)"></iframe> </xsl:template> </xsl:stylesheet> <circle fill="red" r="40"></circle> </svg>',
+                               true,
+                               true,
+                               'SVG with embedded stylesheet no doctype'
+                       ],
                        [
                                '<svg xmlns="http://www.w3.org/2000/svg" id="x"> <listener event="load" handler="#y" xmlns="http://www.w3.org/2001/xml-events" observer="x"/> <handler id="y">alert(1)</handler> </svg>',
                                true,
@@ -364,7 +370,7 @@ class UploadBaseTest extends MediaWikiTestCase {
                        ],
                        [
                                '<?xml version="1.0" encoding="UTF-8" standalone="no"?> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" [ <!ENTITY lol "lol"> <!ENTITY lol2 "&#x3C;&#x73;&#x63;&#x72;&#x69;&#x70;&#x74;&#x3E;&#x61;&#x6C;&#x65;&#x72;&#x74;&#x28;&#x27;&#x58;&#x53;&#x53;&#x45;&#x44;&#x20;&#x3D;&#x3E;&#x20;&#x27;&#x2B;&#x64;&#x6F;&#x63;&#x75;&#x6D;&#x65;&#x6E;&#x74;&#x2E;&#x64;&#x6F;&#x6D;&#x61;&#x69;&#x6E;&#x29;&#x3B;&#x3C;&#x2F;&#x73;&#x63;&#x72;&#x69;&#x70;&#x74;&#x3E;"> ]> <svg xmlns="http://www.w3.org/2000/svg" width="68" height="68" viewBox="-34 -34 68 68" version="1.1"> <circle cx="0" cy="0" r="24" fill="#c8c8c8"/> <text x="0" y="0" fill="black">&lol2;</text> </svg>',
-                               true,
+                               false,
                                true,
                                'SVG with encoded script tag in internal entity (reported by Beyond Security)'
                        ],
@@ -374,6 +380,16 @@ class UploadBaseTest extends MediaWikiTestCase {
                                false,
                                'SVG with external entity'
                        ],
+                       [
+                               // The base64 = <script>alert(1)</script>. If for some reason
+                               // entities actually do get loaded, this should trigger
+                               // filterMatch to be true. So this test verifies that we
+                               // are not loading external entities.
+                               '<?xml version="1.0"?> <!DOCTYPE svg [ <!ENTITY foo SYSTEM "data:text/plain;base64,PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pgo="> ]> <svg xmlns="http://www.w3.org/2000/svg" version="1.1"> <desc>&foo;</desc> <rect width="300" height="100" style="fill:rgb(0,0,255);stroke-width:1;stroke:rgb(0,0,2)" /> </svg>',
+                               false,
+                               false, /* False verifies entities aren't getting loaded */
+                               'SVG with data: uri external entity'
+                       ],
                        [
                                "<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\"> <g> <a xlink:href=\"javascript:alert('1&#10;https://google.com')\"> <rect width=\"300\" height=\"100\" style=\"fill:rgb(0,0,255);stroke-width:1;stroke:rgb(0,0,2)\" /> </a> </g> </svg>",
                                true,
@@ -393,6 +409,104 @@ class UploadBaseTest extends MediaWikiTestCase {
                                false,
                                'SVG with local urls, including filter: in style'
                        ],
+                       [
+                               '<?xml version="1.0" encoding="UTF-8" standalone="no"?><!DOCTYPE x [<!ATTLIST image x:href CDATA "data:image/png,foo" onerror CDATA "alert(\'XSSED = \'+document.domain)" onload CDATA "alert(\'XSSED = \'+document.domain)"> ]> <svg xmlns:h="http://www.w3.org/1999/xhtml" xmlns:x="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg"> <image /> </svg>',
+                               false,
+                               false,
+                               'SVG with evil default attribute values'
+                       ],
+                       [
+                               '<?xml version="1.0" encoding="UTF-8" standalone="no"?><!DOCTYPE svg SYSTEM "data:application/xml-dtd;base64,PCFET0NUWVBFIHN2ZyBbPCFBVFRMSVNUIGltYWdlIHg6aHJlZiBDREFUQSAiZGF0YTppbWFnZS9wbmcsZm9vIiBvbmVycm9yIENEQVRBICJhbGVydCgnWFNTRUQgPSAnK2RvY3VtZW50LmRvbWFpbikiIG9ubG9hZCBDREFUQSAiYWxlcnQoJ1hTU0VEID0gJytkb2N1bWVudC5kb21haW4pIj4gXT4K"><svg xmlns:x="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg"> <image /> </svg>',
+                               true,
+                               true,
+                               'SVG with an evil external dtd'
+                       ],
+                       [
+                               '<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//FOO/bar" "http://example.com"><svg></svg>',
+                               true,
+                               true,
+                               'SVG with random public doctype'
+                       ],
+                       [
+                               '<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg SYSTEM \'http://example.com/evil.dtd\' ><svg></svg>',
+                               true,
+                               true,
+                               'SVG with random SYSTEM doctype'
+                       ],
+                       [
+                               '<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg [<!ENTITY % foo "bar" >] ><svg></svg>',
+                               false,
+                               false,
+                               'SVG with parameter entity'
+                       ],
+                       [
+                               '<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg [<!ENTITY foo "bar%a;" ] ><svg></svg>',
+                               false,
+                               false,
+                               'SVG with entity referencing parameter entity'
+                       ],
+                       [
+                               '<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg [<!ENTITY foo "bar0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"> ] ><svg></svg>',
+                               false,
+                               false,
+                               'SVG with long entity'
+                       ],
+                       [
+                               '<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg [<!ENTITY  foo \'"Hi", said bob\'> ] ><svg><g>&foo;</g></svg>',
+                               true,
+                               false,
+                               'SVG with apostrophe quote entity'
+                       ],
+                       [
+                               '<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg [<!ENTITY name "Bob"><!ENTITY  foo \'"Hi", said &name;.\'> ] ><svg><g>&foo;</g></svg>',
+                               false,
+                               false,
+                               'SVG with recursive entity',
+                       ],
+                       [
+                               '<?xml version="1.0" encoding="UTF-8" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd" [ <!ATTLIST svg xmlns:xlink CDATA #FIXED "http://www.w3.org/1999/xlink"> ]> <svg width="417pt" height="366pt"
+ viewBox="0.00 0.00 417.00 366.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"></svg>',
+                               true, /* well-formed */
+                               false, /* filter-hit */
+                               'GraphViz-esque svg with #FIXED xlink ns (Should be allowed)'
+                       ],
+                       [
+                               '<?xml version="1.0" encoding="UTF-8" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd" [ <!ATTLIST svg xmlns:xlink CDATA #FIXED "http://www.w3.org/1999/xlink2"> ]> <svg width="417pt" height="366pt"
+ viewBox="0.00 0.00 417.00 366.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"></svg>',
+                               false,
+                               false,
+                               'GraphViz ATLIST exception should match exactly'
+                       ],
+                       [
+                               '<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" [ <!-- Comment-here --> <!ENTITY foo "#ff6666">]><svg xmlns="http://www.w3.org/2000/svg"></svg>',
+                               true,
+                               false,
+                               'DTD with comments (Should be allowed)'
+                       ],
+                       [
+                               '<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" [ <!-- invalid--comment  --> <!ENTITY foo "#ff6666">]><svg xmlns="http://www.w3.org/2000/svg"></svg>',
+                               false,
+                               false,
+                               'DTD with invalid comment'
+                       ],
+                       [
+                               '<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" [ <!-- invalid ---> <!ENTITY foo "#ff6666">]><svg xmlns="http://www.w3.org/2000/svg"></svg>',
+                               false,
+                               false,
+                               'DTD with invalid comment 2'
+                       ],
+                       [
+                               '<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" [ <!ENTITY bar "&foo;"> <!ENTITY foo "#ff6666">]><svg xmlns="http://www.w3.org/2000/svg"></svg>',
+                               true,
+                               false,
+                               'DTD with aliased entities (Should be allowed)'
+                       ],
+                       [
+                               '<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" [ <!ENTITY bar \'&foo;\'> <!ENTITY foo \'#ff6666\'>]><svg xmlns="http://www.w3.org/2000/svg"></svg>',
+                               true,
+                               false,
+                               'DTD with aliased entities apos (Should be allowed)'
+                       ]
                ];
                // @codingStandardsIgnoreEnd
        }
@@ -478,7 +592,10 @@ class UploadTestHandler extends UploadBase {
                        $svg,
                        [ $this, 'checkSvgScriptCallback' ],
                        false,
-                       [ 'processing_instruction_handler' => 'UploadBase::checkSvgPICallback' ]
+                       [
+                               'processing_instruction_handler' => 'UploadBase::checkSvgPICallback',
+                               'external_dtd_handler' => 'UploadBase::checkSvgExternalDTD'
+                       ]
                );
                return [ $check->wellFormed, $check->filterMatch ];
        }
index 81c84e8..58f1e5f 100644 (file)
@@ -2,6 +2,7 @@
 
 use MediaWiki\Session\SessionManager;
 use Wikimedia\ScopedCallback;
+use Wikimedia\TestingAccessWrapper;
 
 /**
  * @covers BotPassword
@@ -311,7 +312,9 @@ class BotPasswordTest extends MediaWikiTestCase {
                );
 
                // Failed restriction
-               $request = $this->getMock( 'FauxRequest', [ 'getIP' ] );
+               $request = $this->getMockBuilder( 'FauxRequest' )
+                       ->setMethods( [ 'getIP' ] )
+                       ->getMock();
                $request->expects( $this->any() )->method( 'getIP' )
                        ->will( $this->returnValue( '10.0.0.1' ) );
                $status = BotPassword::login( "{$this->testUserName}@BotPassword", 'foobaz', $request );
index feac641..789cf08 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 
+use Wikimedia\TestingAccessWrapper;
+
 /**
  * @covers CentralIdLookup
  * @group Database
index 7ff882a..3363bca 100644 (file)
@@ -23,7 +23,7 @@ class PasswordResetTest extends PHPUnit_Framework_TestCase {
                $authManager->expects( $this->any() )->method( 'allowsAuthenticationDataChange' )
                        ->willReturn( $allowsAuthenticationDataChange ? Status::newGood() : Status::newFatal( 'foo' ) );
 
-               $user = $this->getMock( User::class );
+               $user = $this->getMockBuilder( User::class )->getMock();
                $user->expects( $this->any() )->method( 'getName' )->willReturn( 'Foo' );
                $user->expects( $this->any() )->method( 'isBlocked' )->willReturn( $userIsBlocked );
                $user->expects( $this->any() )->method( 'isAllowed' )
@@ -124,12 +124,12 @@ class PasswordResetTest extends PHPUnit_Framework_TestCase {
 
                $request = new FauxRequest();
                $request->setIP( '1.2.3.4' );
-               $performingUser = $this->getMock( User::class );
+               $performingUser = $this->getMockBuilder( User::class )->getMock();
                $performingUser->expects( $this->any() )->method( 'getRequest' )->willReturn( $request );
                $performingUser->expects( $this->any() )->method( 'isAllowed' )->willReturn( true );
 
-               $targetUser1 = $this->getMock( User::class );
-               $targetUser2 = $this->getMock( User::class );
+               $targetUser1 = $this->getMockBuilder( User::class )->getMock();
+               $targetUser2 = $this->getMockBuilder( User::class )->getMock();
                $targetUser1->expects( $this->any() )->method( 'getName' )->willReturn( 'User1' );
                $targetUser2->expects( $this->any() )->method( 'getName' )->willReturn( 'User2' );
                $targetUser1->expects( $this->any() )->method( 'getId' )->willReturn( 1 );
index fea4a44..776dda1 100644 (file)
@@ -4,6 +4,7 @@ define( 'NS_UNITTEST', 5600 );
 define( 'NS_UNITTEST_TALK', 5601 );
 
 use MediaWiki\MediaWikiServices;
+use Wikimedia\TestingAccessWrapper;
 
 /**
  * @group Database
index cb3d227..6b0e344 100644 (file)
@@ -835,7 +835,7 @@ class MaintenanceTest extends MediaWikiTestCase {
         * @covers Maintenance::setConfig
         */
        public function testSetConfig() {
-               $conf = $this->getMock( 'Config' );
+               $conf = $this->createMock( 'Config' );
                $this->m->setConfig( $conf );
                $this->assertSame( $conf, $this->m->getConfig() );
        }
index d7e72bb..d460401 100644 (file)
@@ -169,7 +169,10 @@ class TextPassDumperDatabaseTest extends DumpTestCase {
                ];
 
                // The mock itself
-               $prefetchMock = $this->getMock( 'BaseDump', [ 'prefetch' ], [], '', false );
+               $prefetchMock = $this->getMockBuilder( 'BaseDump' )
+                       ->setMethods( [ 'prefetch' ] )
+                       ->disableOriginalConstructor()
+                       ->getMock();
                $prefetchMock->expects( $this->exactly( 6 ) )
                        ->method( 'prefetch' )
                        ->will( $this->returnValueMap( $prefetchMap ) );
index aeb9f0f..79232ad 100644 (file)
@@ -8,4 +8,8 @@ class MockChangesListFilter extends ChangesListFilter {
                        'instead of testing the abstract class'
                );
        }
+
+       public function isSelected( FormOptions $opts ) {
+               return false;
+       }
 }
index bc5a6bd..9e46e07 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 
+use Wikimedia\TestingAccessWrapper;
+
 /**
  * Checks that all API modules, core and extensions, have documentation i18n messages
  *
index 30bae78..c8bcd60 100644 (file)
@@ -1,4 +1,7 @@
 <?php
+
+use Wikimedia\TestingAccessWrapper;
+
 /**
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
index edc81ff..7d75ffe 100644 (file)
@@ -142,7 +142,7 @@ class MediaWikiTestCaseTest extends MediaWikiTestCase {
         */
        public function testLoggersAreRestoredOnTearDown_replacingExistingLogger() {
                $logger1 = LoggerFactory::getInstance( 'foo' );
-               $this->setLogger( 'foo', $this->getMock( LoggerInterface::class ) );
+               $this->setLogger( 'foo', $this->createMock( LoggerInterface::class ) );
                $logger2 = LoggerFactory::getInstance( 'foo' );
                $this->tearDown();
                $logger3 = LoggerFactory::getInstance( 'foo' );
@@ -156,7 +156,7 @@ class MediaWikiTestCaseTest extends MediaWikiTestCase {
         * @covers MediaWikiTestCase::restoreLoggers
         */
        public function testLoggersAreRestoredOnTearDown_replacingNonExistingLogger() {
-               $this->setLogger( 'foo', $this->getMock( LoggerInterface::class ) );
+               $this->setLogger( 'foo', $this->createMock( LoggerInterface::class ) );
                $logger1 = LoggerFactory::getInstance( 'foo' );
                $this->tearDown();
                $logger2 = LoggerFactory::getInstance( 'foo' );
@@ -171,8 +171,8 @@ class MediaWikiTestCaseTest extends MediaWikiTestCase {
         */
        public function testLoggersAreRestoredOnTearDown_replacingSameLoggerTwice() {
                $logger1 = LoggerFactory::getInstance( 'baz' );
-               $this->setLogger( 'foo', $this->getMock( LoggerInterface::class ) );
-               $this->setLogger( 'foo', $this->getMock( LoggerInterface::class ) );
+               $this->setLogger( 'foo', $this->createMock( LoggerInterface::class ) );
+               $this->setLogger( 'foo', $this->createMock( LoggerInterface::class ) );
                $this->tearDown();
                $logger2 = LoggerFactory::getInstance( 'baz' );
 
index 6468646..53362c4 100644 (file)
@@ -57,7 +57,6 @@ return [
                        'tests/qunit/suites/resources/jquery/jquery.localize.test.js',
                        'tests/qunit/suites/resources/jquery/jquery.makeCollapsible.test.js',
                        'tests/qunit/suites/resources/jquery/jquery.mwExtension.test.js',
-                       'tests/qunit/suites/resources/jquery/jquery.placeholder.test.js',
                        'tests/qunit/suites/resources/jquery/jquery.tabIndex.test.js',
                        'tests/qunit/suites/resources/jquery/jquery.tablesorter.test.js',
                        'tests/qunit/suites/resources/jquery/jquery.tablesorter.parsers.test.js',
@@ -113,7 +112,6 @@ return [
                        'jquery.localize',
                        'jquery.makeCollapsible',
                        'jquery.mwExtension',
-                       'jquery.placeholder',
                        'jquery.tabIndex',
                        'jquery.tablesorter',
                        'jquery.textSelection',
index b0118af..a947484 100644 (file)
                liveMessages = mw.messages;
 
                function suppressWarnings() {
-                       warn = mw.log.warn;
-                       error = mw.log.error;
-                       mw.log.warn = mw.log.error = $.noop;
+                       if ( warn === undefined ) {
+                               warn = mw.log.warn;
+                               error = mw.log.error;
+                               mw.log.warn = mw.log.error = $.noop;
+                       }
                }
 
                function restoreWarnings() {
                                        // Stop tracking ajax requests
                                        $( document ).off( 'ajaxSend', trackAjax );
 
+                                       // As a convenience feature, automatically restore warnings if they're
+                                       // still suppressed by the end of the test.
+                                       restoreWarnings();
+
                                        // Farewell, mock environment!
                                        mw.config = liveConfig;
                                        mw.messages = liveMessages;
                                                messages: liveMessages
                                        } );
 
-                                       // As a convenience feature, automatically restore warnings if they're
-                                       // still suppressed by the end of the test.
-                                       restoreWarnings();
-
                                        // Tests should use fake timers or wait for animations to complete
                                        // Check for incomplete animations/requests/etc and throw if there are any.
                                        if ( $.timers && $.timers.length !== 0 ) {
                                                        );
                                                } );
                                                // Force animations to stop to give the next test a clean start
+                                               $.timers = [];
                                                $.fx.stop();
 
                                                throw new Error( 'Unfinished animations: ' + timers );
                                                        mw.log.warn( 'Pending requests does not match jQuery.active count' );
                                                }
                                                // Force requests to stop to give the next test a clean start
-                                               $.each( pending, function ( i, ajax ) {
-                                                       mw.log.warn( 'Pending AJAX request #' + i, ajax.options );
+                                               $.each( ajaxRequests, function ( i, ajax ) {
+                                                       mw.log.warn(
+                                                               'AJAX request #' + i + ' (state: ' + ajax.xhr.state() + ')',
+                                                               ajax.options
+                                                       );
                                                        ajax.xhr.abort();
                                                } );
                                                ajaxRequests = [];
diff --git a/tests/qunit/suites/resources/jquery/jquery.placeholder.test.js b/tests/qunit/suites/resources/jquery/jquery.placeholder.test.js
deleted file mode 100644 (file)
index ed2fbe6..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-( function ( $ ) {
-       QUnit.module( 'jquery.placeholder', QUnit.newMwEnvironment() );
-
-       QUnit.test( 'caches results of feature tests', function ( assert ) {
-               assert.strictEqual( typeof $.fn.placeholder.input, 'boolean', '$.fn.placeholder.input' );
-               assert.strictEqual( typeof $.fn.placeholder.textarea, 'boolean', '$.fn.placeholder.textarea' );
-       } );
-}( jQuery ) );
index c0b1657..200395e 100644 (file)
                [ '2000-01-01', true, 946684800000, 'Year with month and day' ],
                [ '2000-13-01', true, -Infinity, 'Non existant month' ],
                [ '2000-01-32', true, -Infinity, 'Non existant day' ],
-               [ '2000-01-01T12:30:30',                true, 946729830000, 'Date with a time' ],
                [ '2000-01-01T12:30:30Z',       true, 946729830000, 'Date with a UTC+0 time' ],
                [ '2000-01-01T24:30:30Z',       true, -Infinity, 'Date with invalid hours' ],
                [ '2000-01-01T12:60:30Z',       true, -Infinity, 'Date with invalid minutes' ],
-               [ '2000-01-01T12:30:61Z',       true, 946729800000, 'Date with invalid amount of seconds, drops seconds' ],
                [ '2000-01-01T23:59:59Z',       true, 946771199000, 'Edges of time' ],
                [ '2000-01-01T12:30:30.111Z',   true, 946729830111, 'Date with milliseconds' ],
                [ '2000-01-01T12:30:30.11111Z', true, 946729830111, 'Date with too high precision' ],
                [ '2000-01-01T12:30:30-24:00',  true, 946816230000, 'Date time in UTC-24' ],
                [ '2000-01-01T12:30:30+24:00',  true, 946643430000, 'Date time in UTC+24' ],
                [ '2000-01-01T12:30:30+0100',   true, 946726230000, 'Time without separator in timezone offset' ]
+               // No "Z", uses local timezone:
+               [ '2000-01-01T12:30:30',                true, 946729830000, 'Date with a time' ],
+               [ '2000-01-01T12:30:61Z',       true, 946729800000, 'Date with invalid amount of seconds, drops seconds' ],
                */
        ];
        parserTest( 'ISO Dates', 'isoDate', ISODates );
index 405fdcf..27d3825 100644 (file)
                                title: 'Group 3',
                                type: 'string_options',
                                separator: ',',
+                               default: 'filter8',
                                filters: [
                                        {
                                                name: 'filter7',
                                        {
                                                name: 'filter8',
                                                label: 'Group 3: Filter 2',
-                                               description: 'Description of Filter 2 in Group 3',
-                                               default: true
+                                               description: 'Description of Filter 2 in Group 3'
                                        },
                                        {
                                                name: 'filter9',
                assert.deepEqual(
                        model.getSelectedState(),
                        $.extend( {}, defaultFilterRepresentation, {
-                               group3__filter7: false,
-                               group3__filter8: false,
-                               group3__filter9: false
+                               group3__filter7: true,
+                               group3__filter8: true,
+                               group3__filter9: true
                        } ),
-                       'A \'string_options\' parameter containing all values, results in all filters of the group as unchecked.'
+                       'A \'string_options\' parameter containing all values, results in all filters of the group as checked.'
                );
 
                model.toggleFiltersSelected(
                assert.deepEqual(
                        model.getSelectedState(),
                        $.extend( {}, defaultFilterRepresentation, {
-                               group3__filter7: false,
-                               group3__filter8: false,
-                               group3__filter9: false
+                               group3__filter7: true,
+                               group3__filter8: true,
+                               group3__filter9: true
                        } ),
-                       'A \'string_options\' parameter containing the value \'all\', results in all filters of the group as unchecked.'
+                       'A \'string_options\' parameter containing the value \'all\', results in all filters of the group as checked.'
                );
 
                model.toggleFiltersSelected(
index 297f0fd..8786993 100644 (file)
@@ -7,21 +7,22 @@
        } ) );
 
        QUnit.asyncTest( 'toggleToc', function ( assert ) {
-               var tocHtml, $toggleLink, $tocList;
+               var tocHtml, $toc, $toggleLink, $tocList;
 
-               assert.strictEqual( $( '#toc' ).length, 0, 'There is no table of contents on the page at the beginning' );
+               assert.strictEqual( $( '.toc' ).length, 0, 'There is no table of contents on the page at the beginning' );
 
                tocHtml = '<div id="toc" class="toc">' +
-                       '<div id="toctitle">' +
+                       '<div id="toctitle" class="toctitle">' +
                        '<h2>Contents</h2>' +
                        '</div>' +
                        '<ul><li></li></ul>' +
                        '</div>';
-               $( tocHtml ).appendTo( '#qunit-fixture' );
+               $toc = $( tocHtml );
+               $( '#qunit-fixture' ).append( $toc );
                mw.hook( 'wikipage.content' ).fire( $( '#qunit-fixture' ) );
 
-               $tocList = $( '#toc ul:first' );
-               $toggleLink = $( '#togglelink' );
+               $tocList = $toc.find( 'ul:first' );
+               $toggleLink = $toc.find( '.togglelink' );
 
                assert.strictEqual( $toggleLink.length, 1, 'Toggle link is added to the table of contents' );