Merge "RevisionStore: Avoid exception on prev/next of deleted revision"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Mon, 3 Dec 2018 21:07:44 +0000 (21:07 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Mon, 3 Dec 2018 21:07:44 +0000 (21:07 +0000)
709 files changed:
.eslintrc.json
.gitignore
RELEASE-NOTES-1.32
RELEASE-NOTES-1.33
autoload.php
composer.json
docs/extension.schema.v1.json
docs/extension.schema.v2.json
docs/hooks.txt
includes/Block.php
includes/CommentStore.php
includes/DefaultSettings.php
includes/EditPage.php
includes/GlobalFunctions.php
includes/LinkFilter.php
includes/Linker.php
includes/MWNamespace.php
includes/MagicWordFactory.php
includes/MediaWikiServices.php
includes/Message.php
includes/MovePage.php
includes/OutputPage.php
includes/Revision/FallbackSlotRoleHandler.php [new file with mode: 0644]
includes/Revision/MainSlotRoleHandler.php [new file with mode: 0644]
includes/Revision/RenderedRevision.php
includes/Revision/RevisionRenderer.php
includes/Revision/RevisionStore.php
includes/Revision/RevisionStoreFactory.php
includes/Revision/SlotRoleHandler.php [new file with mode: 0644]
includes/Revision/SlotRoleRegistry.php [new file with mode: 0644]
includes/ServiceWiring.php
includes/Storage/DerivedPageDataUpdater.php
includes/Storage/NameTableStore.php
includes/Storage/PageUpdater.php
includes/Title.php
includes/actions/Action.php
includes/actions/InfoAction.php
includes/actions/RollbackAction.php
includes/api/ApiBase.php
includes/api/ApiComparePages.php
includes/api/ApiErrorFormatter.php
includes/api/ApiFeedContributions.php
includes/api/ApiMain.php
includes/api/ApiMessageTrait.php
includes/api/ApiQueryAllDeletedRevisions.php
includes/api/ApiQueryAllRevisions.php
includes/api/ApiQueryBacklinks.php
includes/api/ApiQueryBase.php
includes/api/ApiQueryBlocks.php
includes/api/ApiQueryDeletedRevisions.php
includes/api/ApiQueryDeletedrevs.php
includes/api/ApiQueryExtLinksUsage.php
includes/api/ApiQueryExternalLinks.php
includes/api/ApiQueryLogEvents.php
includes/api/ApiQueryRecentChanges.php
includes/api/ApiQueryRevisions.php
includes/api/ApiQueryRevisionsBase.php
includes/api/ApiQueryUserContribs.php
includes/api/ApiRollback.php
includes/api/i18n/ar.json
includes/api/i18n/de.json
includes/api/i18n/en.json
includes/api/i18n/es.json
includes/api/i18n/fr.json
includes/api/i18n/hu.json
includes/api/i18n/ja.json
includes/api/i18n/ko.json
includes/api/i18n/mk.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/qqq.json
includes/api/i18n/ru.json
includes/api/i18n/uk.json
includes/api/i18n/zh-hant.json
includes/block/BlockRestriction.php
includes/block/Restriction/Restriction.php
includes/cache/MessageCache.php
includes/changes/ChangesList.php
includes/changetags/ChangeTags.php
includes/content/Content.php
includes/content/ContentHandler.php
includes/content/WikitextContent.php
includes/db/CloneDatabase.php
includes/debug/logger/monolog/SyslogHandler.php
includes/deferred/LinksUpdate.php
includes/diff/DifferenceEngine.php
includes/exception/MWException.php
includes/exception/MWExceptionRenderer.php
includes/export/DumpFilter.php
includes/export/DumpOutput.php
includes/filerepo/file/File.php
includes/filerepo/file/ForeignAPIFile.php
includes/filerepo/file/LocalFile.php
includes/htmlform/fields/HTMLCheckMatrix.php
includes/htmlform/fields/HTMLExpiryField.php
includes/htmlform/fields/HTMLMultiSelectField.php
includes/htmlform/fields/HTMLTitlesMultiselectField.php
includes/installer/DatabaseInstaller.php
includes/installer/DatabaseUpdater.php
includes/installer/MssqlUpdater.php
includes/installer/MysqlUpdater.php
includes/installer/OracleUpdater.php
includes/installer/PostgresUpdater.php
includes/installer/SqliteUpdater.php
includes/installer/WebInstallerOptions.php
includes/installer/WebInstallerUpgrade.php
includes/installer/i18n/ar.json
includes/installer/i18n/be-tarask.json
includes/installer/i18n/bg.json
includes/installer/i18n/ca.json
includes/installer/i18n/cs.json
includes/installer/i18n/da.json
includes/installer/i18n/de.json
includes/installer/i18n/el.json
includes/installer/i18n/en.json
includes/installer/i18n/et.json
includes/installer/i18n/fr.json
includes/installer/i18n/it.json
includes/installer/i18n/ja.json
includes/installer/i18n/ko.json
includes/installer/i18n/lb.json
includes/installer/i18n/mk.json
includes/installer/i18n/nl.json
includes/installer/i18n/pl.json
includes/installer/i18n/pt-br.json
includes/installer/i18n/pt.json
includes/installer/i18n/qqq.json
includes/installer/i18n/roa-tara.json
includes/installer/i18n/ru.json
includes/installer/i18n/sl.json
includes/installer/i18n/sr-ec.json
includes/installer/i18n/sr-el.json
includes/installer/i18n/sv.json
includes/installer/i18n/tcy.json
includes/installer/i18n/tr.json
includes/installer/i18n/uk.json
includes/installer/i18n/yi.json
includes/installer/i18n/zh-hant.json
includes/jobqueue/JobQueue.php
includes/jobqueue/JobQueueDB.php
includes/jobqueue/jobs/CategoryMembershipChangeJob.php
includes/json/FormatJson.php
includes/libs/MultiHttpClient.php
includes/libs/mime/XmlTypeCheck.php
includes/libs/objectcache/BagOStuff.php
includes/libs/objectcache/RedisBagOStuff.php
includes/libs/objectcache/WANObjectCache.php
includes/libs/rdbms/database/Database.php
includes/libs/rdbms/database/IDatabase.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/LogEventsList.php
includes/mail/EmailNotification.php
includes/media/Exif.php
includes/media/JpegHandler.php
includes/media/MediaTransformOutput.php
includes/page/Article.php
includes/page/WikiCategoryPage.php
includes/page/WikiPage.php
includes/parser/Parser.php
includes/parser/ParserOptions.php
includes/parser/RemexStripTagHandler.php
includes/parser/Sanitizer.php
includes/password/PasswordPolicyChecks.php
includes/preferences/DefaultPreferencesFactory.php
includes/registration/ExtensionProcessor.php
includes/resourceloader/ResourceLoaderImage.php
includes/revisiondelete/RevisionDeleteUser.php
includes/search/SearchDatabase.php
includes/search/SearchSuggestionSet.php
includes/skins/Skin.php
includes/specialpage/AuthManagerSpecialPage.php
includes/specialpage/ChangesListSpecialPage.php
includes/specials/SpecialBlock.php
includes/specials/SpecialExpandTemplates.php
includes/specials/SpecialExport.php
includes/specials/SpecialLinkSearch.php
includes/specials/SpecialMovepage.php
includes/specials/SpecialRevisiondelete.php
includes/specials/SpecialUnusedcategories.php
includes/specials/SpecialWatchlist.php
includes/specials/forms/PreferencesFormOOUI.php
includes/specials/pagers/ActiveUsersPager.php
includes/specials/pagers/BlockListPager.php
includes/specials/pagers/ContribsPager.php
includes/specials/pagers/NewPagesPager.php
includes/specials/pagers/UsersPager.php
includes/upload/UploadFromChunks.php
includes/user/User.php
includes/utils/UIDGenerator.php
includes/widget/CheckMatrixWidget.php
includes/widget/TitlesMultiselectWidget.php
languages/ConverterRule.php
languages/Language.php
languages/LanguageConverter.php
languages/classes/LanguageCrh.php
languages/classes/LanguageGan.php
languages/classes/LanguageKk.php
languages/classes/LanguageKu.php
languages/classes/LanguageShi.php
languages/classes/LanguageUz.php
languages/classes/LanguageZh.php
languages/data/CrhExceptions.php
languages/i18n/ace.json
languages/i18n/ady-cyrl.json
languages/i18n/af.json
languages/i18n/ais.json
languages/i18n/aln.json
languages/i18n/am.json
languages/i18n/ami.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/arz.json
languages/i18n/as.json
languages/i18n/ast.json
languages/i18n/atj.json
languages/i18n/avk.json
languages/i18n/awa.json
languages/i18n/az.json
languages/i18n/azb.json
languages/i18n/ba.json
languages/i18n/bar.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/bqi.json
languages/i18n/br.json
languages/i18n/bs.json
languages/i18n/btm.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-formal.json
languages/i18n/de.json
languages/i18n/diq.json
languages/i18n/dsb.json
languages/i18n/dtp.json
languages/i18n/dty.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-formal.json
languages/i18n/es.json
languages/i18n/et.json
languages/i18n/eu.json
languages/i18n/ext.json
languages/i18n/fa.json
languages/i18n/fi.json
languages/i18n/fo.json
languages/i18n/fr.json
languages/i18n/frc.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/gcr.json
languages/i18n/gd.json
languages/i18n/gl.json
languages/i18n/glk.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/hyw.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/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/kjp.json
languages/i18n/kk-arab.json
languages/i18n/kk-cyrl.json
languages/i18n/kk-latn.json
languages/i18n/km.json
languages/i18n/kn.json
languages/i18n/ko.json
languages/i18n/krc.json
languages/i18n/krl.json
languages/i18n/ksh.json
languages/i18n/ku-latn.json
languages/i18n/kum.json
languages/i18n/kw.json
languages/i18n/ky.json
languages/i18n/la.json
languages/i18n/lad.json
languages/i18n/lb.json
languages/i18n/lfn.json
languages/i18n/lg.json
languages/i18n/li.json
languages/i18n/lij.json
languages/i18n/lki.json
languages/i18n/lmo.json
languages/i18n/lo.json
languages/i18n/loz.json
languages/i18n/lrc.json
languages/i18n/lt.json
languages/i18n/lus.json
languages/i18n/luz.json
languages/i18n/lv.json
languages/i18n/lzh.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/mni.json
languages/i18n/mnw.json
languages/i18n/mr.json
languages/i18n/ms.json
languages/i18n/mt.json
languages/i18n/mwl.json
languages/i18n/my.json
languages/i18n/myv.json
languages/i18n/mzn.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-informal.json
languages/i18n/nl.json
languages/i18n/nn.json
languages/i18n/nso.json
languages/i18n/nys.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/pcd.json
languages/i18n/pdc.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/rif.json
languages/i18n/rm.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/shy-latn.json
languages/i18n/si.json
languages/i18n/sk.json
languages/i18n/skr-arab.json
languages/i18n/sl.json
languages/i18n/sli.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/sty.json
languages/i18n/su.json
languages/i18n/sv.json
languages/i18n/sw.json
languages/i18n/szl.json
languages/i18n/ta.json
languages/i18n/tay.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/tzm.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/zgh.json
languages/i18n/zh-hans.json
languages/i18n/zh-hant.json
languages/messages/MessagesCs.php
languages/messages/MessagesEn.php
languages/messages/MessagesKjp.php
maintenance/archives/patch-drop-ct_tag.sql [new file with mode: 0644]
maintenance/cleanupSpam.php
maintenance/deleteSelfExternals.php
maintenance/mssql/archives/patch-drop-ct_tag.sql [new file with mode: 0644]
maintenance/mssql/tables.sql
maintenance/oracle/archives/patch-drop-ct_tag.sql [new file with mode: 0644]
maintenance/oracle/tables.sql
maintenance/populateChangeTagDef.php
maintenance/postgres/archives/patch-drop-ct_tag.sql [new file with mode: 0644]
maintenance/postgres/tables.sql
maintenance/rebuildtextindex.php
maintenance/refreshExternallinksIndex.php [new file with mode: 0644]
maintenance/resetPageRandom.php [new file with mode: 0644]
maintenance/resources/foreign-resources.yaml
maintenance/sqlite/archives/patch-actor-table.sql
maintenance/sqlite/archives/patch-add-3d.sql
maintenance/sqlite/archives/patch-comment-table.sql
maintenance/sqlite/archives/patch-drop-ct_tag.sql [new file with mode: 0644]
maintenance/sqlite/archives/patch-filearchive-fa_actor.sql [new file with mode: 0644]
maintenance/sqlite/archives/patch-filearchive-fa_description_id.sql [new file with mode: 0644]
maintenance/tables.sql
mw-config/config-cc.css
mw-config/config.css
package.json
resources/Resources.php
resources/lib/ooui/History.md
resources/lib/ooui/oojs-ui-apex.js
resources/lib/ooui/oojs-ui-core-apex.css
resources/lib/ooui/oojs-ui-core-wikimediaui.css
resources/lib/ooui/oojs-ui-core.js
resources/lib/ooui/oojs-ui-toolbars-apex.css
resources/lib/ooui/oojs-ui-toolbars-wikimediaui.css
resources/lib/ooui/oojs-ui-toolbars.js
resources/lib/ooui/oojs-ui-widgets-apex.css
resources/lib/ooui/oojs-ui-widgets-wikimediaui.css
resources/lib/ooui/oojs-ui-widgets.js
resources/lib/ooui/oojs-ui-widgets.js.map.json
resources/lib/ooui/oojs-ui-wikimediaui.js
resources/lib/ooui/oojs-ui-windows-apex.css
resources/lib/ooui/oojs-ui-windows-wikimediaui.css
resources/lib/ooui/oojs-ui-windows.js
resources/src/jquery.tablesorter/jquery.tablesorter.js
resources/src/jquery.tipsy/jquery.tipsy.css
resources/src/jquery/jquery.makeCollapsible.css
resources/src/jquery/jquery.makeCollapsible.js
resources/src/jquery/jquery.makeCollapsible.styles.less
resources/src/jquery/jquery.suggestions.js
resources/src/mediawiki.Title/Title.js
resources/src/mediawiki.Uri/Uri.js
resources/src/mediawiki.action/mediawiki.action.edit.preview.js
resources/src/mediawiki.action/mediawiki.action.history.js
resources/src/mediawiki.action/mediawiki.action.view.categoryPage.less
resources/src/mediawiki.action/mediawiki.action.view.metadata.js
resources/src/mediawiki.api/index.js
resources/src/mediawiki.api/upload.js
resources/src/mediawiki.apihelp.css
resources/src/mediawiki.base/mediawiki.errorLogger.js
resources/src/mediawiki.debug/debug.js
resources/src/mediawiki.debug/jquery.footHovzer.js
resources/src/mediawiki.feedback/feedback.css
resources/src/mediawiki.hlist/default.css
resources/src/mediawiki.htmlform.ooui.styles.less
resources/src/mediawiki.htmlform.styles/styles.css
resources/src/mediawiki.inspect.js
resources/src/mediawiki.jqueryMsg/mediawiki.jqueryMsg.js
resources/src/mediawiki.legacy/oldshared.css
resources/src/mediawiki.legacy/protect.js
resources/src/mediawiki.legacy/wikibits.js
resources/src/mediawiki.less/mediawiki.mixins.less
resources/src/mediawiki.less/mediawiki.mixins.rotation.less
resources/src/mediawiki.less/mediawiki.ui/mixins.less [deleted file]
resources/src/mediawiki.less/mediawiki.ui/variables.less
resources/src/mediawiki.notification/default.css
resources/src/mediawiki.notification/notification.js
resources/src/mediawiki.page.gallery.slideshow.js
resources/src/mediawiki.page.gallery.styles/print.css
resources/src/mediawiki.rcfilters/dm/mw.rcfilters.dm.FilterGroup.js
resources/src/mediawiki.rcfilters/dm/mw.rcfilters.dm.FilterItem.js
resources/src/mediawiki.rcfilters/dm/mw.rcfilters.dm.FiltersViewModel.js
resources/src/mediawiki.rcfilters/dm/mw.rcfilters.dm.SavedQueriesModel.js
resources/src/mediawiki.rcfilters/images/clip.svg [deleted file]
resources/src/mediawiki.rcfilters/images/pending.gif [deleted file]
resources/src/mediawiki.rcfilters/images/pushPin.svg [deleted file]
resources/src/mediawiki.rcfilters/images/unClip.svg [deleted file]
resources/src/mediawiki.rcfilters/mw.rcfilters.Controller.js
resources/src/mediawiki.rcfilters/styles/mw.rcfilters.less
resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.ChangesListWrapperWidget.highlightCircles.seenunseen.less
resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.ChangesListWrapperWidget.less
resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.FilterItemHighlightButton.less
resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.FilterTagMultiselectWidget.less
resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.FilterWrapperWidget.less
resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.HighlightColorPickerWidget.less
resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.ItemMenuOptionWidget.less
resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.LiveUpdateButtonWidget.less
resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.SaveFiltersPopupButtonWidget.less
resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.SavedLinksListItemWidget.less
resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.TagItemWidget.less
resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.ChangesListWrapperWidget.js
resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.FilterItemHighlightButton.js
resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.FilterTagMultiselectWidget.js
resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.GroupWidget.js
resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.MenuSelectWidget.js
resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.SavedLinksListItemWidget.js
resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.ValuePickerWidget.js
resources/src/mediawiki.searchSuggest/searchSuggest.js
resources/src/mediawiki.skinning/content.css
resources/src/mediawiki.skinning/content.parsoid.less
resources/src/mediawiki.skinning/elements.css
resources/src/mediawiki.special.apisandbox/apisandbox.css
resources/src/mediawiki.special.apisandbox/apisandbox.js
resources/src/mediawiki.special.block.less
resources/src/mediawiki.special.changeslist.less
resources/src/mediawiki.special.preferences.styles.css
resources/src/mediawiki.special.preferences.styles.ooui.less
resources/src/mediawiki.special.search.interwikiwidget.styles.less
resources/src/mediawiki.special.search.styles.css
resources/src/mediawiki.special.search/search.css
resources/src/mediawiki.special.userlogin.login.styles/login.css
resources/src/mediawiki.special/special.css
resources/src/mediawiki.special/userrights.css
resources/src/mediawiki.template.mustache.js
resources/src/mediawiki.toc/toc.js
resources/src/mediawiki.ui/components/anchors.less
resources/src/mediawiki.ui/components/buttons.less
resources/src/mediawiki.ui/components/forms.less
resources/src/mediawiki.ui/components/icons.less
resources/src/mediawiki.ui/components/inputs.less
resources/src/mediawiki.ui/components/text.less
resources/src/mediawiki.util.js
resources/src/mediawiki.viewport.js
resources/src/mediawiki.widgets.datetime/CalendarWidget.js
resources/src/mediawiki.widgets.datetime/CalendarWidget.less
resources/src/mediawiki.widgets.datetime/DateTimeFormatter.js
resources/src/mediawiki.widgets.datetime/DateTimeInputWidget.js
resources/src/mediawiki.widgets.datetime/DiscordianDateTimeFormatter.js
resources/src/mediawiki.widgets.datetime/ProlepticGregorianDateTimeFormatter.js
resources/src/mediawiki.widgets/mw.widgets.CalendarWidget.less
resources/src/mediawiki.widgets/mw.widgets.CheckMatrixWidget.js
resources/src/mediawiki.widgets/mw.widgets.NamespaceInputWidget.js
resources/src/mediawiki.widgets/mw.widgets.SearchInputWidget.js
resources/src/mediawiki.widgets/mw.widgets.StashedFileWidget.less
resources/src/mediawiki.widgets/mw.widgets.TitleWidget.less
resources/src/mediawiki.widgets/mw.widgets.TitlesMultiselectWidget.js
resources/src/startup/.eslintrc.json
tests/parser/ParserTestRunner.php
tests/parser/parserTests.txt
tests/phpunit/includes/BlockTest.php
tests/phpunit/includes/CommentStoreTest.php
tests/phpunit/includes/GlobalFunctions/GlobalTest.php
tests/phpunit/includes/LinkFilterTest.php
tests/phpunit/includes/LinkerTest.php
tests/phpunit/includes/MovePageTest.php
tests/phpunit/includes/Revision/FallbackSlotRoleHandlerTest.php [new file with mode: 0644]
tests/phpunit/includes/Revision/MainSlotRoleHandlerTest.php [new file with mode: 0644]
tests/phpunit/includes/Revision/RenderedRevisionTest.php
tests/phpunit/includes/Revision/RevisionRendererTest.php
tests/phpunit/includes/Revision/RevisionStoreDbTestBase.php
tests/phpunit/includes/Revision/RevisionStoreFactoryTest.php
tests/phpunit/includes/Revision/RevisionStoreTest.php
tests/phpunit/includes/Revision/SlotRoleHandlerTest.php [new file with mode: 0644]
tests/phpunit/includes/Revision/SlotRoleRegistryTest.php [new file with mode: 0644]
tests/phpunit/includes/RevisionDbTestBase.php
tests/phpunit/includes/RevisionTest.php
tests/phpunit/includes/Storage/DerivedPageDataUpdaterTest.php
tests/phpunit/includes/Storage/PageUpdaterTest.php
tests/phpunit/includes/actions/ActionTest.php
tests/phpunit/includes/api/ApiBlockTest.php
tests/phpunit/includes/api/ApiDeleteTest.php
tests/phpunit/includes/api/ApiEditPageTest.php
tests/phpunit/includes/api/ApiErrorFormatterTest.php
tests/phpunit/includes/api/ApiMainTest.php
tests/phpunit/includes/api/ApiMessageTest.php
tests/phpunit/includes/api/ApiUnblockTest.php
tests/phpunit/includes/api/ApiUserrightsTest.php
tests/phpunit/includes/changetags/ChangeTagsTest.php
tests/phpunit/includes/db/LBFactoryTest.php
tests/phpunit/includes/jobqueue/jobs/CategoryMembershipChangeJobTest.php
tests/phpunit/includes/jobqueue/jobs/RefreshLinksJobTest.php
tests/phpunit/includes/json/FormatJsonTest.php
tests/phpunit/includes/libs/objectcache/ReplicatedBagOStuffTest.php
tests/phpunit/includes/logging/BlockLogFormatterTest.php
tests/phpunit/includes/page/PageArchiveMcrTest.php
tests/phpunit/includes/page/PageArchivePreMcrTest.php
tests/phpunit/includes/page/PageArchiveTestBase.php
tests/phpunit/includes/page/WikiCategoryPageTest.php
tests/phpunit/includes/page/WikiPageDbTestBase.php
tests/phpunit/includes/page/WikiPageMcrReadNewDbTest.php
tests/phpunit/includes/parser/ParserMethodsTest.php
tests/phpunit/includes/parser/SanitizerTest.php
tests/phpunit/includes/password/PasswordPolicyChecksTest.php
tests/phpunit/includes/search/SearchEngineTest.php
tests/phpunit/includes/user/LocalIdLookupTest.php
tests/phpunit/includes/user/UserTest.php
tests/phpunit/maintenance/populateChangeTagDefTest.php [deleted file]
tests/qunit/data/testrunner.js
tests/qunit/suites/resources/jquery/jquery.tablesorter.parsers.test.js
tests/qunit/suites/resources/mediawiki.widgets/MediaSearch/mediawiki.widgets.APIResultsQueue.test.js
tests/qunit/suites/resources/mediawiki/mediawiki.Title.test.js
tests/qunit/suites/resources/mediawiki/mediawiki.cldr.test.js
tests/qunit/suites/resources/mediawiki/mediawiki.language.test.js
tests/qunit/suites/resources/mediawiki/mediawiki.loader.test.js
tests/qunit/suites/resources/mediawiki/mediawiki.test.js
tests/qunit/suites/resources/mediawiki/mediawiki.util.test.js
tests/selenium/.eslintrc.json
tests/selenium/wdio-mediawiki/.eslintrc.json [deleted file]

index 40e26ca..97f7c31 100644 (file)
 {
-       "extends": "wikimedia",
-       "env": {
-               "browser": true
-       },
+       "extends": [
+               "wikimedia/client",
+               "wikimedia/jquery"
+       ],
        "globals": {
                "require": false,
                "module": false,
                "mw": false,
-               "$": false,
                "OO": false
        },
        "rules": {
-               "no-restricted-properties": [
-                       2,
-                       {
-                               "object": "$",
-                               "property": "map",
-                               "message": "Please use Array.prototype.map instead"
-                       },
-                       {
-                               "object": "$",
-                               "property": "inArray",
-                               "message": "Please use Array.prototype.indexOf instead"
-                       },
-                       {
-                               "object": "$",
-                               "property": "each",
-                               "message": "Please consider different approaches to $.each, especially when using Array's. You can override this warning if necessary with eslint-disable-next-line."
-                       },
-                       {
-                               "object": "$",
-                               "property": "isArray",
-                               "message": "Please use Array.isArray instead"
-                       },
-                       {
-                               "object": "$",
-                               "property": "isFunction",
-                               "message": "Please use typeof (e.g. typeof e === 'function') instead"
-                       },
-                       {
-                               "object": "$",
-                               "property": "grep",
-                               "message": "Please use Array.prototype.filter instead"
-                       },
-                       {
-                               "object": "$",
-                               "property": "trim",
-                               "message": "Please use String.prototype.trim instead"
-                       },
-                       {
-                               "object": "$",
-                               "property": "proxy",
-                               "message": "Please use Function.prototype.bind instead"
-                       },
-
-                       {
-                               "property": "codePointAt",
-                               "message": "Unsupported method String.prototype.codePointAt requires ES6."
-                       },
-                       {
-                               "property": "endsWith",
-                               "message": "Unsupported method String.prototype.endsWith requires ES6."
-                       },
-                       {
-                               "property": "normalize",
-                               "message": "Unsupported method String.prototype.normalize requires ES6."
-                       },
-                       {
-                               "property": "padEnd",
-                               "message": "Unsupported method String.prototype.padEnd requires ES2017."
-                       },
-                       {
-                               "property": "padStart",
-                               "message": "Unsupported method String.prototype.padStart requires ES2017."
-                       },
-                       {
-                               "property": "repeat",
-                               "message": "Unsupported method String.prototype.repeat requires ES6."
-                       },
-                       {
-                               "property": "startsWith",
-                               "message": "Unsupported method String.prototype.startsWith requires ES6."
-                       },
-                       {
-                               "property": "trimEnd",
-                               "message": "Unsupported method String.prototype.trimEnd is still experimental."
-                       },
-                       {
-                               "property": "trimLeft",
-                               "message": "Unsupported method String.prototype.trimLeft is still experimental."
-                       },
-                       {
-                               "property": "trimRight",
-                               "message": "Unsupported method String.prototype.trimRight is still experimental."
-                       },
-                       {
-                               "property": "trimStart",
-                               "message": "Unsupported method String.prototype.trimStart is still experimental."
-                       },
-                       {
-                               "property": "copyWithin",
-                               "message": "Unsupported method Array.prototype.copyWithin requires ES6."
-                       },
-                       {
-                               "property": "entries",
-                               "message": "Unsupported method Array.prototype.entries requires ES6."
-                       },
-                       {
-                               "property": "fill",
-                               "message": "Unsupported method Array.prototype.fill requires ES6."
-                       },
-                       {
-                               "property": "findIndex",
-                               "message": "Unsupported method Array.prototype.findIndex requires ES6."
-                       },
-                       {
-                               "property": "flat",
-                               "message": "Unsupported method Array.prototype.flat is still experimental."
-                       },
-                       {
-                               "property": "flatMap",
-                               "message": "Unsupported method Array.prototype.flatMap is still experimental."
-                       },
-                       {
-                               "object": "String",
-                               "property": "fromCodePoint",
-                               "message": "Unsupported method String.fromCodePoint requires ES6."
-                       },
-                       {
-                               "object": "String",
-                               "property": "raw",
-                               "message": "Unsupported method String.raw requires ES6."
-                       },
-                       {
-                               "object": "Array",
-                               "property": "from",
-                               "message": "Unsupported method Array.from requires ES6."
-                       },
-                       {
-                               "object": "Array",
-                               "property": "of",
-                               "message": "Unsupported method Array.of requires ES6."
-                       },
-                       {
-                               "object": "Object",
-                               "property": "assign",
-                               "message": "Unsupported method Object.assign requires ES6."
-                       },
-                       {
-                               "object": "Object",
-                               "property": "entries",
-                               "message": "Unsupported method Object.entries requires ES2017."
-                       },
-                       {
-                               "object": "Object",
-                               "property": "getOwnPropertyDescriptors",
-                               "message": "Unsupported method Object.getOwnPropertyDescriptors requires ES2017."
-                       },
-                       {
-                               "object": "Object",
-                               "property": "getOwnPropertySymbols",
-                               "message": "Unsupported method Object.getOwnPropertySymbols requires ES6."
-                       },
-                       {
-                               "object": "Object",
-                               "property": "is",
-                               "message": "Unsupported method Object.is requires ES6."
-                       },
-                       {
-                               "object": "Object",
-                               "property": "values",
-                               "message": "Unsupported method Object.values requires ES2017."
-                       }
-               ],
-               "no-restricted-syntax": [
-                       2,
-                       {
-                               // Match expressions like .includes( … ) (false positives when used as a property name)
-                               "selector": "CallExpression[callee.type='MemberExpression'][callee.property.type='Identifier'][callee.property.name='includes']",
-                               "message": "Unsupported methods String.prototype.includes and Array.prototype.includes require ES6 and ES2016 respectively."
-                       },
-                       {
-                               // Match expressions like .find( function ( … ) { … } ) (avoid $( … ).find( … ))
-                               "selector": "CallExpression[callee.type='MemberExpression'][callee.property.type='Identifier'][callee.property.name='find'][arguments.length=1][arguments.0.type='FunctionExpression']",
-                               "message": "Unsupported method Array.prototype.find requires ES6."
-                       },
-                       {
-                               // Match expressions like .keys( … ), except Object.keys( … ) (which is valid)
-                               "selector": "CallExpression[callee.type='MemberExpression'][callee.property.type='Identifier'][callee.property.name='keys'][callee.object.name!='Object']",
-                               "message": "Unsupported method Array.prototype.keys requires ES6."
-                       },
-                       {
-                               // Match expressions like .values( … ), except Object.values( … ) (disallowed separately)
-                               "selector": "CallExpression[callee.type='MemberExpression'][callee.property.type='Identifier'][callee.property.name='values'][callee.object.name!='Object']",
-                               "message": "Unsupported method Array.prototype.values requires ES6."
-                       }
-               ],
-               "dot-notation": 0,
                "max-len": 0
        }
 }
index 44f739e..2f17bc6 100644 (file)
@@ -71,6 +71,7 @@ Thumbs.db
 .buildpath
 .classpath
 .idea
+*.iml
 .metadata*
 .settings
 /favicon.ico
index 438fac3..cc250ef 100644 (file)
@@ -154,6 +154,7 @@ production.
 ** ScopedCallback objects can no longer be serialized.
 * Updated wikimedia/timestamp from v1.0.0 to v2.2.0.
 * Updated wikimedia/wrappedstring from v2.3.0 to v3.0.1.
+* oyejorge/less.php replaced with our fork wikimedia/less.php
 
 * Updated composer/spdx-licenses from v1.3.0 to v1.4.0 (dev-only).
 * Updated mediawiki/mediawiki-codesniffer from v18.0.0 to v22.0.0 (dev-only).
@@ -657,9 +658,9 @@ because of Phabricator reports.
   yet for creating or managing content in slots beides the main slot. See
   <https://www.mediawiki.org/wiki/Multi-Content_Revisions> for more
   information.
-* The image_comment_temp database table is merged into the image table and
-  deprecated. Since access should be mediated by the CommentStore class, this
-  change shouldn't affect external code.
+* The image_comment_temp database table has been removed. Since all access
+  should be mediated by the CommentStore class, this change shouldn't affect
+  external code.
 * (T206147) Database::close() will no longer commit any open transactions.
 
 == Compatibility ==
index a6f8058..628227e 100644 (file)
@@ -15,18 +15,30 @@ production.
   the current parse language where available.
 
 ==== Changed configuration ====
+* Some external link searches will not work correctly until update.php (or
+  refreshExternallinksIndex.php) is run. These include searches for links using
+  IP addresses, internationalized domain names, and possibly mailto links.
+* (T193868) $wgChangeTagsSchemaMigrationStage — This temporary setting, added in
+  MediaWiki 1.32, now defaults to MIGRATION_NEW instead of MIGRATION_WRITE_BOTH.
 * …
 
 ==== Removed configuration ====
+* (T199334) $wgTagStatisticsNewTable — This temporary setting, added in
+  MediaWiki 1.32, has now been removed. When loading Special:Tags, MediaWiki
+  will now always use the `change_tag_def` instead of the `change_tag` table.
 * …
 
 === New features in 1.33 ===
 * The 'GetPreferences' hook now receives an additional $context parameter.
+* (T96041) __EXPECTUNUSEDCATEGORY__ on a category page causes the category
+  to be hidden on Special:UnusedCategories.
+* Add PasswordPolicy to check the password isn't in the large blacklist.
 * …
 
 === External library changes in 1.33 ===
 
 ==== New external libraries ====
+* Added wikimedia/password-blacklist 0.1.3
 * …
 
 ==== Changed external libraries ====
@@ -42,6 +54,13 @@ production.
 
 === Action API changes in 1.33 ===
 * (T198913) Added 'ApiOptions' hook.
+* The JSON formatversion=2 is no longer experimental.
+* Internal API errors (those with code beginning "internal_api_error") will
+  include the exception class name in a data field named "errorclass".
+  * Class names are not guaranteed to remain stable, and in particular database
+    exceptions will now include the "Wikimedia\Rdbms\" prefix in the class name.
+  * The code including an exception class name is deprecated. In the future,
+    all internal errors will use code "internal_api_error".
 * …
 
 === Action API internal changes in 1.33 ===
@@ -55,6 +74,10 @@ production.
   Additionally, the  'APIGetDescription' and 'APIGetParamDescription' hooks have
   been removed, as their only use was to let extensions override values returned
   by getDescription() and getParamDescription(), respectively.
+* API error codes may only contain ASCII letters, numbers, underscore, and
+  hyphen. Methods such as ApiBase::dieWithError() and
+  ApiMessageTrait::setApiCode() will throw an InvalidArgumentException if
+  passed a bad code.
 * …
 
 === Languages updated in 1.33 ===
@@ -129,6 +152,7 @@ because of Phabricator reports.
   * filterIntval()
   * filterTimezoneInput()
   * getTimeZoneList()
+* mw.util.jsMessage(), deprecated in 1.20, was removed. Use mw.notify instead.
 
 === Deprecations in 1.33 ===
 * The configuration option $wgUseESI has been deprecated, and is expected
@@ -148,6 +172,8 @@ because of Phabricator reports.
 * …
 
 === Other changes in 1.33 ===
+* (T208871) The hard-coded Google search form on the database error page was
+  removed.
 * …
 
 == Compatibility ==
index 3daeee1..02e35a8 100644 (file)
@@ -1191,6 +1191,7 @@ $wgAutoloadLocalClasses = [
        'RedisConnectionPool' => __DIR__ . '/includes/libs/redis/RedisConnectionPool.php',
        'RedisLockManager' => __DIR__ . '/includes/libs/lockmanager/RedisLockManager.php',
        'RedisPubSubFeedEngine' => __DIR__ . '/includes/rcfeed/RedisPubSubFeedEngine.php',
+       'RefreshExternallinksIndex' => __DIR__ . '/maintenance/refreshExternallinksIndex.php',
        'RefreshFileHeaders' => __DIR__ . '/maintenance/refreshFileHeaders.php',
        'RefreshImageMetadata' => __DIR__ . '/maintenance/refreshImageMetadata.php',
        'RefreshLinks' => __DIR__ . '/maintenance/refreshLinks.php',
@@ -1207,6 +1208,7 @@ $wgAutoloadLocalClasses = [
        'RepoGroup' => __DIR__ . '/includes/filerepo/RepoGroup.php',
        'RequestContext' => __DIR__ . '/includes/context/RequestContext.php',
        'ResetAuthenticationThrottle' => __DIR__ . '/maintenance/resetAuthenticationThrottle.php',
+       'ResetPageRandom' => __DIR__ . '/maintenance/resetPageRandom.php',
        'ResetUserEmail' => __DIR__ . '/maintenance/resetUserEmail.php',
        'ResetUserTokens' => __DIR__ . '/maintenance/resetUserTokens.php',
        'ResourceFileCache' => __DIR__ . '/includes/cache/ResourceFileCache.php',
index c0516c7..616c9d7 100644 (file)
@@ -26,8 +26,7 @@
                "ext-mbstring": "*",
                "ext-xml": "*",
                "liuggio/statsd-php-client": "1.0.18",
-               "oojs/oojs-ui": "0.29.4",
-               "oyejorge/less.php": "1.7.0.14",
+               "oojs/oojs-ui": "0.29.5",
                "pear/mail": "1.4.1",
                "pear/mail_mime": "1.10.2",
                "pear/net_smtp": "1.8.0",
@@ -41,7 +40,9 @@
                "wikimedia/composer-merge-plugin": "1.4.1",
                "wikimedia/html-formatter": "1.0.2",
                "wikimedia/ip-set": "1.2.0",
+               "wikimedia/less.php": "1.8.0",
                "wikimedia/object-factory": "1.0.0",
+               "wikimedia/password-blacklist": "0.1.3",
                "wikimedia/php-session-serializer": "1.0.6",
                "wikimedia/purtle": "1.0.7",
                "wikimedia/relpath": "2.1.1",
index f6f3b21..7e42035 100644 (file)
                                "type": "string"
                        }
                },
+               "ReauthenticateTime": {
+                       "type": "object",
+                       "patternProperties": {
+                               ".*": {
+                                       "type": "integer"
+                               }
+                       }
+               },
                "callback": {
                        "type": [
                                "array",
index 8ade991..c5c3b5d 100644 (file)
                                "type": "string"
                        }
                },
+               "ReauthenticateTime": {
+                       "type": "object",
+                       "patternProperties": {
+                               ".*": {
+                                       "type": "integer"
+                               }
+                       }
+               },
                "callback": {
                        "type": [
                                "array",
index bd06d52..2f800a4 100644 (file)
@@ -3418,6 +3418,9 @@ $title: Title object that is being checked
 $old: old title
 $nt: new title
 $user: user who does the move
+$reason: string of the reason provided by the user
+&$status: Status object. To abort the move, add a fatal error to this object
+       (i.e. call $status->fatal()).
 
 'TitleMoveStarting': Before moving an article (title), but just after the atomic
 DB section starts.
index 39f2b29..eb8214b 100644 (file)
@@ -766,11 +766,11 @@ class Block {
                        return;
                }
 
-               $target = $block->getTarget();
-               // FIXME: Push this into getTargetActor() or whatever to reuse
-               if ( is_string( $target ) ) {
-                       $target = User::newFromName( $target, false );
+               // Autoblocks only apply to TYPE_USER
+               if ( $block->getType() !== self::TYPE_USER ) {
+                       return;
                }
+               $target = $block->getTarget(); // TYPE_USER => always a User object
 
                $dbr = wfGetDB( DB_REPLICA );
                $rcQuery = ActorMigration::newMigration()->getWhere( $dbr, 'rc_user', $target, false );
@@ -1595,7 +1595,6 @@ class Block {
         * @param User|string $user Local User object or username string
         */
        public function setBlocker( $user ) {
-               // FIXME: Push this into getTargetActor() or whatever to reuse
                if ( is_string( $user ) ) {
                        $user = User::newFromName( $user, false );
                }
@@ -1796,39 +1795,28 @@ class Block {
        }
 
        /**
-        * Checks if a block prevents an edit on a given article
+        * Checks if a block applies to a particular title
+        *
+        * This check does not consider whether `$this->prevents( 'editownusertalk' )`
+        * returns false, as the identity of the user making the hypothetical edit
+        * isn't known here (particularly in the case of IP hardblocks, range
+        * blocks, and auto-blocks).
         *
-        * @param \Title $title
+        * @param Title $title
         * @return bool
         */
-       public function preventsEdit( \Title $title ) {
-               $blocked = $this->isSitewide();
-
-               // user talk page has its own rules
-               // This check happens before partial blocks because the flag
-               // to allow user to edit their user talk page could be
-               // overwritten by a partial block restriction (E.g. user talk namespace)
-               $user = $this->getTarget();
-
-               // Not all blocked `$user`s are self::TYPE_USER
-               // FIXME: Push this into getTargetActor() or whatever to reuse
-               if ( is_string( $user ) ) {
-                       $user = User::newFromName( $user, false );
-               }
-
-               if ( $title->equals( $user->getTalkPage() ) ) {
-                       $blocked = $this->prevents( 'editownusertalk' );
+       public function appliesToTitle( Title $title ) {
+               if ( $this->isSitewide() ) {
+                       return true;
                }
 
-               if ( !$this->isSitewide() ) {
-                       $restrictions = $this->getRestrictions();
-                       foreach ( $restrictions as $restriction ) {
-                               if ( $restriction->matches( $title ) ) {
-                                       $blocked = true;
-                               }
+               $restrictions = $this->getRestrictions();
+               foreach ( $restrictions as $restriction ) {
+                       if ( $restriction->matches( $title ) ) {
+                               return true;
                        }
                }
 
-               return $blocked;
+               return false;
        }
 }
index 1be7951..cba7a15 100644 (file)
@@ -70,11 +70,7 @@ class CommentStore {
                        'deprecatedIn' => null,
                ],
                'img_description' => [
-                       'table' => 'image_comment_temp',
-                       'pk' => 'imgcomment_name',
-                       'field' => 'imgcomment_description_id',
-                       'joinPK' => 'img_name',
-                       'stage' => MIGRATION_WRITE_NEW,
+                       'stage' => MIGRATION_NEW,
                        'deprecatedIn' => '1.32',
                ],
        ];
@@ -226,8 +222,14 @@ class CommentStore {
                                        if ( $tempTableStage === MIGRATION_OLD ) {
                                                $joinField = "{$alias}.{$t['field']}";
                                        } else {
+                                               // Nothing hits this code path for now, but will in the future when we set
+                                               // $this->tempTables['rev_comment']['stage'] to MIGRATION_WRITE_NEW while
+                                               // merging revision_comment_temp into revision.
+                                               // @codeCoverageIgnoreStart
                                                $joins[$alias][0] = 'LEFT JOIN';
                                                $joinField = "(CASE WHEN {$key}_id != 0 THEN {$key}_id ELSE {$alias}.{$t['field']} END)";
+                                               throw new LogicException( 'Nothing should reach this code path at this time' );
+                                               // @codeCoverageIgnoreEnd
                                        }
                                } else {
                                        $joinField = "{$key}_id";
@@ -349,14 +351,13 @@ class CommentStore {
 
                $msg = null;
                if ( $data !== null ) {
-                       $data = FormatJson::decode( $data );
-                       if ( !is_object( $data ) ) {
+                       $data = FormatJson::decode( $data, true );
+                       if ( !is_array( $data ) ) {
                                // @codeCoverageIgnoreStart
                                wfLogWarning( "Invalid JSON object in comment: $data" );
                                $data = null;
                                // @codeCoverageIgnoreEnd
                        } else {
-                               $data = (array)$data;
                                if ( isset( $data['_message'] ) ) {
                                        $msg = self::decodeMessage( $data['_message'] )
                                                ->setInterfaceMessageFlag( true );
index 2d1681c..c3a716f 100644 (file)
@@ -37,6 +37,7 @@
  *
  * @file
  */
+use MediaWiki\MediaWikiServices;
 
 /**
  * @cond file_level_code
@@ -4520,6 +4521,8 @@ $wgCentralIdLookupProvider = 'local';
  *             commonly chosen. Set to integer n to ban the top n passwords.
  *             If you want to ban all common passwords on file, use the
  *             PHP_INT_MAX constant.
+ *     - PasswordNotInLargeBlacklist - Password not in best practices list of
+ *             100,000 commonly used passwords.
  * @since 1.26
  */
 $wgPasswordPolicy = [
@@ -4529,29 +4532,34 @@ $wgPasswordPolicy = [
                        'MinimumPasswordLengthToLogin' => 1,
                        'PasswordCannotMatchUsername' => true,
                        'PasswordCannotBePopular' => 25,
+                       'PasswordNotInLargeBlacklist' => true,
                ],
                'sysop' => [
                        'MinimalPasswordLength' => 8,
                        'MinimumPasswordLengthToLogin' => 1,
                        'PasswordCannotMatchUsername' => true,
                        'PasswordCannotBePopular' => 25,
+                       'PasswordNotInLargeBlacklist' => true,
                ],
                'interface-admin' => [
                        'MinimalPasswordLength' => 8,
                        'MinimumPasswordLengthToLogin' => 1,
                        'PasswordCannotMatchUsername' => true,
                        'PasswordCannotBePopular' => 25,
+                       'PasswordNotInLargeBlacklist' => true,
                ],
                'bot' => [
                        'MinimalPasswordLength' => 8,
                        'MinimumPasswordLengthToLogin' => 1,
                        'PasswordCannotMatchUsername' => true,
+                       'PasswordNotInLargeBlacklist' => true,
                ],
                'default' => [
                        'MinimalPasswordLength' => 1,
                        'PasswordCannotMatchUsername' => true,
                        'PasswordCannotMatchBlacklist' => true,
                        'MaximalPasswordLength' => 4096,
+                       'PasswordNotInLargeBlacklist' => false,
                ],
        ],
        'checks' => [
@@ -4560,7 +4568,8 @@ $wgPasswordPolicy = [
                'PasswordCannotMatchUsername' => 'PasswordPolicyChecks::checkPasswordCannotMatchUsername',
                'PasswordCannotMatchBlacklist' => 'PasswordPolicyChecks::checkPasswordCannotMatchBlacklist',
                'MaximalPasswordLength' => 'PasswordPolicyChecks::checkMaximalPasswordLength',
-               'PasswordCannotBePopular' => 'PasswordPolicyChecks::checkPopularPasswordBlacklist'
+               'PasswordCannotBePopular' => 'PasswordPolicyChecks::checkPopularPasswordBlacklist',
+               'PasswordNotInLargeBlacklist' => 'PasswordPolicyChecks::checkPasswordNotInLargeBlacklist',
        ],
 ];
 
@@ -7557,7 +7566,10 @@ $wgJobClasses = [
        'refreshLinksPrioritized' => RefreshLinksJob::class,
        'refreshLinksDynamic' => RefreshLinksJob::class,
        'activityUpdateJob' => ActivityUpdateJob::class,
-       'categoryMembershipChange' => CategoryMembershipChangeJob::class,
+       'categoryMembershipChange' => function ( Title $title, $params = [] ) {
+               $pc = MediaWikiServices::getInstance()->getParserCache();
+               return new CategoryMembershipChangeJob( $pc, $title, $params );
+       },
        'clearUserWatchlist' => ClearUserWatchlistJob::class,
        'cdnPurge' => CdnPurgeJob::class,
        'userGroupExpiry' => UserGroupExpiryJob::class,
@@ -8606,6 +8618,9 @@ $wgUploadMaintenance = false;
  * defined for a given namespace, pages in that namespace will use the CONTENT_MODEL_WIKITEXT
  * (except for the special case of JS and CS pages).
  *
+ * @note To determine the default model for a new page's main slot, or any slot in general,
+ * use SlotRoleHandler::getDefaultModel() together with SlotRoleRegistry::getRoleHandler().
+ *
  * @since 1.21
  */
 $wgNamespaceContentModels = [];
@@ -8923,6 +8938,9 @@ $wgCSPFalsePositiveUrls = [
        'https://rtb.metrigo.com' => true,
        'https://d5p.de17a.com' => true,
        'https://ad.lkqd.net/vpaid/vpaid.js' => true,
+       'https://ad.lkqd.net/vpaid/vpaid.js?fusion=1.0' => true,
+       'https://t.lkqd.net/t' => true,
+       'chrome-extension' => true,
 ];
 
 /**
@@ -8978,7 +8996,7 @@ $wgInterwikiPrefixDisplayTypes = [];
  * @since 1.30
  * @var int One of the MIGRATION_* constants
  */
-$wgCommentTableSchemaMigrationStage = MIGRATION_OLD;
+$wgCommentTableSchemaMigrationStage = MIGRATION_NEW;
 
 /**
  * RevisionStore table schema migration stage (content, slots, content_models & slot_roles tables).
@@ -9020,40 +9038,24 @@ $wgMultiContentRevisionSchemaMigrationStage = SCHEMA_COMPAT_WRITE_BOTH | SCHEMA_
 $wgActorTableSchemaMigrationStage = SCHEMA_COMPAT_OLD;
 
 /**
- * change_tag table schema migration stage.
- *
- * - MIGRATION_OLD: Do not use change_tag_def table or ct_tag_id.
- * - MIGRATION_WRITE_BOTH: Write to the change_tag_def table and ct_tag_id, but read from
- *   the old schema. This is different from the formal definition of the constants
- * - MIGRATION_WRITE_NEW: Behaves the same as MIGRATION_WRITE_BOTH
- * - MIGRATION_NEW: Use the change_tag_def table and ct_tag_id, do not read/write ct_tag
- *
- * @since 1.32
- * @var int One of the MIGRATION_* constants
- */
-$wgChangeTagsSchemaMigrationStage = MIGRATION_WRITE_BOTH;
-
-/**
- * Temporarily flag to use change_tag_def table as backend of change tag statistics.
- * For example in case of Special:Tags. If set to false, it will use change_tag table.
- * Before setting it to true set $wgChangeTagsSchemaMigrationStage to MIGRATION_WRITE_BOTH and run
- * PopulateChangeTagDef maintaince script.
- * It's redundant when $wgChangeTagsSchemaMigrationStage is set to MIGRATION_NEW
+ * Flag to enable Partial Blocks. This allows an admin to prevent a user from editing specific pages
+ * or namespaces.
  *
  * @since 1.32
+ * @deprecated 1.32
  * @var bool
  */
-$wgTagStatisticsNewTable = false;
+$wgEnablePartialBlocks = false;
 
 /**
- * Flag to enable Partial Blocks. This allows an admin to prevent a user from editing specific pages
- * or namespaces.
+ * Enable stats monitoring when Block Notices are displayed in different places around core
+ * and extensions.
  *
- * @since 1.32
- * @deprecated 1.32
+ * @since 1.34
+ * @deprecated 1.34
  * @var bool
  */
-$wgEnablePartialBlocks = false;
+$wgEnableBlockNoticeStats = false;
 
 /**
  * For really cool vim folding this needs to be at the end:
index 0f7d9a7..9e278af 100644 (file)
@@ -476,7 +476,15 @@ class EditPage {
                $this->mArticle = $article;
                $this->page = $article->getPage(); // model object
                $this->mTitle = $article->getTitle();
-               $this->context = $article->getContext();
+
+               // Make sure the local context is in sync with other member variables.
+               // Particularly make sure everything is using the same WikiPage instance.
+               // This should probably be the case in Article as well, but it's
+               // particularly important for EditPage, to make use of the in-place caching
+               // facility in WikiPage::prepareContentForEdit.
+               $this->context = new DerivativeContext( $article->getContext() );
+               $this->context->setWikiPage( $this->page );
+               $this->context->setTitle( $this->mTitle );
 
                $this->contentModel = $this->mTitle->getContentModel();
 
@@ -619,14 +627,23 @@ class EditPage {
                if ( $permErrors ) {
                        wfDebug( __METHOD__ . ": User can't edit\n" );
 
-                       // track block with a cookie if it doesn't exists already
-                       $this->context->getUser()->trackBlockWithCookie();
+                       if ( $this->context->getUser()->getBlock() ) {
+                               // track block with a cookie if it doesn't exists already
+                               $this->context->getUser()->trackBlockWithCookie();
 
-                       // Auto-block user's IP if the account was "hard" blocked
-                       if ( !wfReadOnly() ) {
-                               DeferredUpdates::addCallableUpdate( function () {
-                                       $this->context->getUser()->spreadAnyEditBlock();
-                               } );
+                               // Auto-block user's IP if the account was "hard" blocked
+                               if ( !wfReadOnly() ) {
+                                       DeferredUpdates::addCallableUpdate( function () {
+                                               $this->context->getUser()->spreadAnyEditBlock();
+                                       } );
+                               }
+
+                               $config = $this->context->getConfig();
+                               if ( $config->get( 'EnableBlockNoticeStats' ) ) {
+                                       $wiki = $config->get( 'DBname' );
+                                       $statsd = MediaWikiServices::getInstance()->getStatsdDataFactory();
+                                       $statsd->increment( 'BlockNotices.' . $wiki . '.WikitextEditor.shown' );
+                               }
                        }
                        $this->displayPermissionsError( $permErrors );
 
@@ -3123,7 +3140,10 @@ ERROR;
 
                                        if ( !$revision->isCurrent() ) {
                                                $this->mArticle->setOldSubtitle( $revision->getId() );
-                                               $out->addWikiMsg( 'editingold' );
+                                               $out->wrapWikiMsg(
+                                                       Html::warningBox( "\n$1\n" ),
+                                                       'editingold'
+                                               );
                                                $this->isOldRev = true;
                                        }
                                } elseif ( $this->mTitle->exists() ) {
@@ -3142,16 +3162,22 @@ ERROR;
                        );
                } elseif ( $user->isAnon() ) {
                        if ( $this->formtype != 'preview' ) {
+                               $returntoquery = array_diff_key(
+                                       $this->context->getRequest()->getValues(),
+                                       [ 'title' => true, 'returnto' => true, 'returntoquery' => true ]
+                               );
                                $out->wrapWikiMsg(
                                        "<div id='mw-anon-edit-warning' class='warningbox'>\n$1\n</div>",
                                        [ 'anoneditwarning',
                                                // Log-in link
                                                SpecialPage::getTitleFor( 'Userlogin' )->getFullURL( [
-                                                       'returnto' => $this->getTitle()->getPrefixedDBkey()
+                                                       'returnto' => $this->getTitle()->getPrefixedDBkey(),
+                                                       'returntoquery' => wfArrayToCgi( $returntoquery ),
                                                ] ),
                                                // Sign-up link
                                                SpecialPage::getTitleFor( 'CreateAccount' )->getFullURL( [
-                                                       'returnto' => $this->getTitle()->getPrefixedDBkey()
+                                                       'returnto' => $this->getTitle()->getPrefixedDBkey(),
+                                                       'returntoquery' => wfArrayToCgi( $returntoquery ),
                                                ] )
                                        ]
                                );
index 6e95871..26c4d0a 100644 (file)
@@ -266,7 +266,7 @@ function wfObjectToArray( $objOrArray, $recursive = true ) {
 }
 
 /**
- * Get a random decimal value between 0 and 1, in a way
+ * Get a random decimal value in the domain of [0, 1), in a way
  * not likely to give duplicate values for any realistic
  * number of articles.
  *
@@ -894,55 +894,13 @@ function wfExpandIRI( $url ) {
 /**
  * Make URL indexes, appropriate for the el_index field of externallinks.
  *
+ * @deprecated since 1.33, use LinkFilter::makeIndexes() instead
  * @param string $url
  * @return array
  */
 function wfMakeUrlIndexes( $url ) {
-       $bits = wfParseUrl( $url );
-
-       // Reverse the labels in the hostname, convert to lower case
-       // For emails reverse domainpart only
-       if ( $bits['scheme'] == 'mailto' ) {
-               $mailparts = explode( '@', $bits['host'], 2 );
-               if ( count( $mailparts ) === 2 ) {
-                       $domainpart = strtolower( implode( '.', array_reverse( explode( '.', $mailparts[1] ) ) ) );
-               } else {
-                       // No domain specified, don't mangle it
-                       $domainpart = '';
-               }
-               $reversedHost = $domainpart . '@' . $mailparts[0];
-       } else {
-               $reversedHost = strtolower( implode( '.', array_reverse( explode( '.', $bits['host'] ) ) ) );
-       }
-       // Add an extra dot to the end
-       // Why? Is it in wrong place in mailto links?
-       if ( substr( $reversedHost, -1, 1 ) !== '.' ) {
-               $reversedHost .= '.';
-       }
-       // Reconstruct the pseudo-URL
-       $prot = $bits['scheme'];
-       $index = $prot . $bits['delimiter'] . $reversedHost;
-       // Leave out user and password. Add the port, path, query and fragment
-       if ( isset( $bits['port'] ) ) {
-               $index .= ':' . $bits['port'];
-       }
-       if ( isset( $bits['path'] ) ) {
-               $index .= $bits['path'];
-       } else {
-               $index .= '/';
-       }
-       if ( isset( $bits['query'] ) ) {
-               $index .= '?' . $bits['query'];
-       }
-       if ( isset( $bits['fragment'] ) ) {
-               $index .= '#' . $bits['fragment'];
-       }
-
-       if ( $prot == '' ) {
-               return [ "http:$index", "https:$index" ];
-       } else {
-               return [ $index ];
-       }
+       wfDeprecated( __FUNCTION__, '1.33' );
+       return LinkFilter::makeIndexes( $url );
 }
 
 /**
index 3b03f87..ffb36e0 100644 (file)
@@ -32,6 +32,11 @@ use Wikimedia\Rdbms\LikeMatch;
  * Another cool thing to do would be a web interface for fast spam removal.
  */
 class LinkFilter {
+       /**
+        * Increment this when makeIndexes output changes. It'll cause
+        * maintenance/refreshExternallinksIndex.php to run from update.php.
+        */
+       const VERSION = 1;
 
        /**
         * Check whether $content contains a link to $filterEntry
@@ -58,6 +63,7 @@ class LinkFilter {
        /**
         * Builds a regex pattern for $filterEntry.
         *
+        * @todo This doesn't match the rest of the functionality here.
         * @param string $filterEntry URL, if it begins with "*.", it'll be
         *        replaced to match any subdomain
         * @param string $protocol 'http://' or 'https://'
@@ -75,23 +81,231 @@ class LinkFilter {
        }
 
        /**
-        * Make an array to be used for calls to Database::buildLike(), which
-        * will match the specified string. There are several kinds of filter entry:
-        *     *.domain.com    -  Produces http://com.domain.%, matches domain.com
-        *                        and www.domain.com
-        *     domain.com      -  Produces http://com.domain./%, matches domain.com
-        *                        or domain.com/ but not www.domain.com
-        *     *.domain.com/x  -  Produces http://com.domain.%/x%, matches
-        *                        www.domain.com/xy
-        *     domain.com/x    -  Produces http://com.domain./x%, matches
-        *                        domain.com/xy but not www.domain.com/xy
+        * Indicate whether LinkFilter IDN support is available
+        * @since 1.33
+        * @return bool
+        */
+       public static function supportsIDN() {
+               return is_callable( 'idn_to_utf8' ) && defined( 'INTL_IDNA_VARIANT_UTS46' );
+       }
+
+       /**
+        * Canonicalize a hostname for el_index
+        * @param string $hose
+        * @return string
+        */
+       private static function indexifyHost( $host ) {
+               // NOTE: If you change the output of this method, you'll probably have to increment self::VERSION!
+
+               // Canonicalize.
+               $host = rawurldecode( $host );
+               if ( $host !== '' && self::supportsIDN() ) {
+                       // @todo Add a PHP fallback
+                       $tmp = idn_to_utf8( $host, IDNA_DEFAULT, INTL_IDNA_VARIANT_UTS46 );
+                       if ( $tmp !== false ) {
+                               $host = $tmp;
+                       }
+               }
+               $okChars = 'a-zA-Z0-9\\-._~!$&\'()*+,;=';
+               if ( StringUtils::isUtf8( $host ) ) {
+                       // Save a little space by not percent-encoding valid UTF-8 bytes
+                       $okChars .= '\x80-\xf4';
+               }
+               $host = preg_replace_callback(
+                       '<[^' . $okChars . ']>',
+                       function ( $m ) {
+                               return rawurlencode( $m[0] );
+                       },
+                       strtolower( $host )
+               );
+
+               // IPv6? RFC 3986 syntax.
+               if ( preg_match( '/^\[([0-9a-f:*]+)\]$/', rawurldecode( $host ), $m ) ) {
+                       $ip = $m[1];
+                       if ( IP::isValid( $ip ) ) {
+                               return 'V6.' . implode( '.', explode( ':', IP::sanitizeIP( $ip ) ) ) . '.';
+                       }
+                       if ( substr( $ip, -2 ) === ':*' ) {
+                               $cutIp = substr( $ip, 0, -2 );
+                               if ( IP::isValid( "{$cutIp}::" ) ) {
+                                       // Wildcard IP doesn't contain "::", so multiple parts can be wild
+                                       $ct = count( explode( ':', $ip ) ) - 1;
+                                       return 'V6.' .
+                                               implode( '.', array_slice( explode( ':', IP::sanitizeIP( "{$cutIp}::" ) ), 0, $ct ) ) .
+                                               '.*.';
+                               }
+                               if ( IP::isValid( "{$cutIp}:1" ) ) {
+                                       // Wildcard IP does contain "::", so only the last part is wild
+                                       return 'V6.' .
+                                               substr( implode( '.', explode( ':', IP::sanitizeIP( "{$cutIp}:1" ) ) ), 0, -1 ) .
+                                               '*.';
+                               }
+                       }
+               }
+
+               // Regularlize explicit specification of the DNS root.
+               // Browsers seem to do this for IPv4 literals too.
+               if ( substr( $host, -1 ) === '.' ) {
+                       $host = substr( $host, 0, -1 );
+               }
+
+               // IPv4?
+               $b = '(?:0*25[0-5]|0*2[0-4][0-9]|0*1[0-9][0-9]|0*[0-9]?[0-9])';
+               if ( preg_match( "/^(?:{$b}\.){3}{$b}$|^(?:{$b}\.){1,3}\*$/", $host ) ) {
+                       return 'V4.' . implode( '.', array_map( function ( $v ) {
+                               return $v === '*' ? $v : (int)$v;
+                       }, explode( '.', $host ) ) ) . '.';
+               }
+
+               // Must be a host name.
+               return implode( '.', array_reverse( explode( '.', $host ) ) ) . '.';
+       }
+
+       /**
+        * Converts a URL into a format for el_index
+        * @since 1.33
+        * @param string $url
+        * @return string[] Usually one entry, but might be two in case of
+        *  protocol-relative URLs. Empty array on error.
+        */
+       public static function makeIndexes( $url ) {
+               // NOTE: If you change the output of this method, you'll probably have to increment self::VERSION!
+
+               // NOTE: refreshExternallinksIndex.php assumes that only protocol-relative URLs return more
+               // than one index, and that the indexes for protocol-relative URLs only vary in the "http://"
+               // versus "https://" prefix. If you change that, you'll likely need to update
+               // refreshExternallinksIndex.php accordingly.
+
+               $bits = wfParseUrl( $url );
+               if ( !$bits ) {
+                       return [];
+               }
+
+               // Reverse the labels in the hostname, convert to lower case, unless it's an IP.
+               // For emails turn it into "domain.reversed@localpart"
+               if ( $bits['scheme'] == 'mailto' ) {
+                       $mailparts = explode( '@', $bits['host'], 2 );
+                       if ( count( $mailparts ) === 2 ) {
+                               $domainpart = self::indexifyHost( $mailparts[1] );
+                       } else {
+                               // No @, assume it's a local part with no domain
+                               $domainpart = '';
+                       }
+                       $bits['host'] = $domainpart . '@' . $mailparts[0];
+               } else {
+                       $bits['host'] = self::indexifyHost( $bits['host'] );
+               }
+
+               // Reconstruct the pseudo-URL
+               $index = $bits['scheme'] . $bits['delimiter'] . $bits['host'];
+               // Leave out user and password. Add the port, path, query and fragment
+               if ( isset( $bits['port'] ) ) {
+                       $index .= ':' . $bits['port'];
+               }
+               if ( isset( $bits['path'] ) ) {
+                       $index .= $bits['path'];
+               } else {
+                       $index .= '/';
+               }
+               if ( isset( $bits['query'] ) ) {
+                       $index .= '?' . $bits['query'];
+               }
+               if ( isset( $bits['fragment'] ) ) {
+                       $index .= '#' . $bits['fragment'];
+               }
+
+               if ( $bits['scheme'] == '' ) {
+                       return [ "http:$index", "https:$index" ];
+               } else {
+                       return [ $index ];
+               }
+       }
+
+       /**
+        * Return query conditions which will match the specified string. There are
+        * several kinds of filter entry:
+        *
+        *     *.domain.com    -  Matches domain.com and www.domain.com
+        *     domain.com      -  Matches domain.com or domain.com/ but not www.domain.com
+        *     *.domain.com/x  -  Matches domain.com/xy or www.domain.com/xy. Also probably matches
+        *                        domain.com/foobar/xy due to limitations of LIKE syntax.
+        *     domain.com/x    -  Matches domain.com/xy but not www.domain.com/xy
+        *     192.0.2.*       -  Matches any IP in 192.0.2.0/24. Can also have a path appended.
+        *     [2001:db8::*]   -  Matches any IP in 2001:db8::/112. Can also have a path appended.
+        *     [2001:db8:*]    -  Matches any IP in 2001:db8::/32. Can also have a path appended.
+        *     foo@domain.com  -  With protocol 'mailto:', matches the email address foo@domain.com.
+        *     *@domain.com    -  With protocol 'mailto:', matches any email address at domain.com, but
+        *                        not subdomains like foo@mail.domain.com
         *
         * Asterisks in any other location are considered invalid.
         *
-        * This function does the same as wfMakeUrlIndexes(), except it also takes care
+        * @since 1.33
+        * @param string $filterEntry Filter entry, as described above
+        * @param array $options Options are:
+        *   - protocol: (string) Protocol to query (default http://)
+        *   - oneWildcard: (bool) Stop at the first wildcard (default false)
+        *   - prefix: (string) Field prefix (default 'el'). The query will test
+        *     fields '{$prefix}_index' and '{$prefix}_index_60'
+        *   - db: (IDatabase|null) Database to use.
+        * @return array|bool Conditions to be used for the query (to be ANDed) or
+        *  false on error. To determine if the query is constant on the
+        *  el_index_60 field, check whether key 'el_index_60' is set.
+        */
+       public static function getQueryConditions( $filterEntry, array $options = [] ) {
+               $options += [
+                       'protocol' => 'http://',
+                       'oneWildcard' => false,
+                       'prefix' => 'el',
+                       'db' => null,
+               ];
+
+               // First, get the like array
+               $like = self::makeLikeArray( $filterEntry, $options['protocol'] );
+               if ( $like === false ) {
+                       return $like;
+               }
+
+               // Get the constant prefix (i.e. everything up to the first wildcard)
+               $trimmedLike = self::keepOneWildcard( $like );
+               if ( $options['oneWildcard'] ) {
+                       $like = $trimmedLike;
+               }
+               if ( $trimmedLike[count( $trimmedLike ) - 1] instanceof LikeMatch ) {
+                       array_pop( $trimmedLike );
+               }
+               $index = implode( '', $trimmedLike );
+
+               $p = $options['prefix'];
+               $db = $options['db'] ?: wfGetDB( DB_REPLICA );
+
+               // Build the query
+               $l = strlen( $index );
+               if ( $l >= 60 ) {
+                       // The constant prefix is larger than el_index_60, so we can use a
+                       // constant comparison.
+                       return [
+                               "{$p}_index_60" => substr( $index, 0, 60 ),
+                               "{$p}_index" . $db->buildLike( $like ),
+                       ];
+               }
+
+               // The constant prefix is smaller than el_index_60, so we use a LIKE
+               // for a prefix search.
+               return [
+                       "{$p}_index_60" . $db->buildLike( [ $index, $db->anyString() ] ),
+                       "{$p}_index" . $db->buildLike( $like ),
+               ];
+       }
+
+       /**
+        * Make an array to be used for calls to Database::buildLike(), which
+        * will match the specified string.
+        *
+        * This function does the same as LinkFilter::makeIndexes(), except it also takes care
         * of adding wildcards
         *
-        * @param string $filterEntry Domainparts
+        * @note You probably want self::getQueryConditions() instead
+        * @param string $filterEntry Filter entry, @see self::getQueryConditions()
         * @param string $protocol Protocol (default http://)
         * @return array|bool Array to be passed to Database::buildLike() or false on error
         */
@@ -100,38 +314,27 @@ class LinkFilter {
 
                $target = $protocol . $filterEntry;
                $bits = wfParseUrl( $target );
-
-               if ( $bits == false ) {
-                       // Unknown protocol?
+               if ( !$bits ) {
                        return false;
                }
 
-               if ( substr( $bits['host'], 0, 2 ) == '*.' ) {
-                       $subdomains = true;
-                       $bits['host'] = substr( $bits['host'], 2 );
-                       if ( $bits['host'] == '' ) {
-                               // We don't want to make a clause that will match everything,
-                               // that could be dangerous
-                               return false;
-                       }
-               } else {
-                       $subdomains = false;
-               }
-
-               // Reverse the labels in the hostname, convert to lower case
-               // For emails reverse domainpart only
+               $subdomains = false;
                if ( $bits['scheme'] === 'mailto' && strpos( $bits['host'], '@' ) ) {
-                       // complete email address
-                       $mailparts = explode( '@', $bits['host'] );
-                       $domainpart = strtolower( implode( '.', array_reverse( explode( '.', $mailparts[1] ) ) ) );
-                       $bits['host'] = $domainpart . '@' . $mailparts[0];
-               } elseif ( $bits['scheme'] === 'mailto' ) {
-                       // domainpart of email address only, do not add '.'
-                       $bits['host'] = strtolower( implode( '.', array_reverse( explode( '.', $bits['host'] ) ) ) );
+                       // Email address with domain and non-empty local part
+                       $mailparts = explode( '@', $bits['host'], 2 );
+                       $domainpart = self::indexifyHost( $mailparts[1] );
+                       if ( $mailparts[0] === '*' ) {
+                               $subdomains = true;
+                               $bits['host'] = $domainpart . '@';
+                       } else {
+                               $bits['host'] = $domainpart . '@' . $mailparts[0];
+                       }
                } else {
-                       $bits['host'] = strtolower( implode( '.', array_reverse( explode( '.', $bits['host'] ) ) ) );
-                       if ( substr( $bits['host'], -1, 1 ) !== '.' ) {
-                               $bits['host'] .= '.';
+                       // Non-email, or email with only a domain part.
+                       $bits['host'] = self::indexifyHost( $bits['host'] );
+                       if ( substr( $bits['host'], -3 ) === '.*.' ) {
+                               $subdomains = true;
+                               $bits['host'] = substr( $bits['host'], 0, -2 );
                        }
                }
 
@@ -175,6 +378,7 @@ class LinkFilter {
         * Filters an array returned by makeLikeArray(), removing everything past first
         * pattern placeholder.
         *
+        * @note You probably want self::getQueryConditions() instead
         * @param array $arr Array to filter
         * @return array Filtered array
         */
index 1d1ad06..7eda21b 100644 (file)
@@ -1168,7 +1168,10 @@ class Linker {
                                                                $title->getDBkey(), $section );
                                                }
                                                if ( $sectionTitle ) {
-                                                       $link = Linker::makeCommentLink( $sectionTitle, $wgLang->getArrow(), $wikiId, 'noclasses' );
+                                                       $link = Linker::makeCommentLink(
+                                                               $sectionTitle, $wgLang->getArrow() . $auto, $wikiId, 'noclasses'
+                                                       );
+                                                       $auto = '';
                                                } else {
                                                        $link = '';
                                                }
@@ -1181,10 +1184,11 @@ class Linker {
                                                # autocomment $postsep written summary (/* section */ summary)
                                                $auto .= wfMessage( 'colon-separator' )->inContentLanguage()->escaped();
                                        }
-                                       $auto = '<span class="autocomment">' . $auto . '</span>';
-                                       $comment = $pre . $link . $wgLang->getDirMark()
-                                               . '<span dir="auto">' . $auto;
-                                       $append .= '</span>';
+                                       if ( $auto ) {
+                                               $auto = '<span dir="auto"><span class="autocomment">' . $auto . '</span>';
+                                               $append .= '</span>';
+                                       }
+                                       $comment = $pre . $link . $wgLang->getDirMark() . $auto;
                                }
                                return $comment;
                        },
@@ -1440,7 +1444,7 @@ class Linker {
         * @return string
         */
        public static function commentBlock(
-               $comment, $title = null, $local = false, $wikiId = null
+               $comment, $title = null, $local = false, $wikiId = null, $useParentheses = true
        ) {
                // '*' used to be the comment inserted by the software way back
                // in antiquity in case none was provided, here for backwards
@@ -1449,8 +1453,13 @@ class Linker {
                        return '';
                } else {
                        $formatted = self::formatComment( $comment, $title, $local, $wikiId );
-                       $formatted = wfMessage( 'parentheses' )->rawParams( $formatted )->escaped();
-                       return " <span class=\"comment\">$formatted</span>";
+                       if ( $useParentheses ) {
+                               $formatted = wfMessage( 'parentheses' )->rawParams( $formatted )->escaped();
+                               $classNames = 'comment';
+                       } else {
+                               $classNames = 'comment comment--without-parentheses';
+                       }
+                       return " <span class=\"$classNames\">$formatted</span>";
                }
        }
 
@@ -1462,9 +1471,12 @@ class Linker {
         * @param Revision $rev
         * @param bool $local Whether section links should refer to local page
         * @param bool $isPublic Show only if all users can see it
+        * @param bool $useParentheses (optional) Wrap comments in parentheses where needed
         * @return string HTML fragment
         */
-       public static function revComment( Revision $rev, $local = false, $isPublic = false ) {
+       public static function revComment( Revision $rev, $local = false, $isPublic = false,
+               $useParentheses = true
+       ) {
                if ( $rev->getComment( Revision::RAW ) == "" ) {
                        return "";
                }
@@ -1472,7 +1484,7 @@ class Linker {
                        $block = " <span class=\"comment\">" . wfMessage( 'rev-deleted-comment' )->escaped() . "</span>";
                } elseif ( $rev->userCan( Revision::DELETED_COMMENT ) ) {
                        $block = self::commentBlock( $rev->getComment( Revision::FOR_THIS_USER ),
-                               $rev->getTitle(), $local );
+                               $rev->getTitle(), $local, null, $useParentheses );
                } else {
                        $block = " <span class=\"comment\">" . wfMessage( 'rev-deleted-comment' )->escaped() . "</span>";
                }
index e03a29b..98e70bf 100644 (file)
@@ -19,6 +19,7 @@
  *
  * @file
  */
+use MediaWiki\MediaWikiServices;
 
 /**
  * This is a utility class with only static functions
@@ -462,13 +463,17 @@ class MWNamespace {
         * Get the default content model for a namespace
         * This does not mean that all pages in that namespace have the model
         *
+        * @note To determine the default model for a new page's main slot, or any slot in general,
+        * use SlotRoleHandler::getDefaultModel() together with SlotRoleRegistry::getRoleHandler().
+        *
         * @since 1.21
         * @param int $index Index to check
         * @return null|string Default model name for the given namespace, if set
         */
        public static function getNamespaceContentModel( $index ) {
-               global $wgNamespaceContentModels;
-               return $wgNamespaceContentModels[$index] ?? null;
+               $config = MediaWikiServices::getInstance()->getMainConfig();
+               $models = $config->get( 'NamespaceContentModels' );
+               return $models[$index] ?? null;
        }
 
        /**
index e62716d..4e9bfaf 100644 (file)
@@ -173,6 +173,7 @@ class MagicWordFactory {
                'newsectionlink',
                'nonewsectionlink',
                'hiddencat',
+               'expectunusedcategory',
                'index',
                'noindex',
                'staticredirect',
index f3ca7d4..0e36b22 100644 (file)
@@ -17,6 +17,7 @@ use MediaWiki\Http\HttpRequestFactory;
 use MediaWiki\Preferences\PreferencesFactory;
 use MediaWiki\Shell\CommandFactory;
 use MediaWiki\Revision\RevisionRenderer;
+use MediaWiki\Revision\SlotRoleRegistry;
 use MediaWiki\Special\SpecialPageFactory;
 use MediaWiki\Storage\BlobStore;
 use MediaWiki\Storage\BlobStoreFactory;
@@ -840,6 +841,14 @@ class MediaWikiServices extends ServiceContainer {
                return $this->getService( 'SkinFactory' );
        }
 
+       /**
+        * @since 1.33
+        * @return SlotRoleRegistry
+        */
+       public function getSlotRoleRegistry() {
+               return $this->getService( 'SlotRoleRegistry' );
+       }
+
        /**
         * @since 1.31
         * @return NameTableStore
index 3bd7755..15d9786 100644 (file)
@@ -290,6 +290,7 @@ class Message implements MessageSpecifier, Serializable {
                        'format' => $this->format,
                        'useDatabase' => $this->useDatabase,
                        'title' => $this->title,
+                       'titlestr' => $this->title ? $this->title->getFullText() : null,
                ] );
        }
 
@@ -300,6 +301,10 @@ class Message implements MessageSpecifier, Serializable {
         */
        public function unserialize( $serialized ) {
                $data = unserialize( $serialized );
+               if ( !is_array( $data ) ) {
+                       throw new InvalidArgumentException( __METHOD__ . ': Invalid serialized data' );
+               }
+
                $this->interface = $data['interface'];
                $this->key = $data['key'];
                $this->keysToTry = $data['keysToTry'];
@@ -307,7 +312,15 @@ class Message implements MessageSpecifier, Serializable {
                $this->format = $data['format'];
                $this->useDatabase = $data['useDatabase'];
                $this->language = $data['language'] ? Language::factory( $data['language'] ) : false;
-               $this->title = $data['title'];
+
+               if ( isset( $data['titlestr'] ) ) {
+                       $this->title = Title::newFromText( $data['titlestr'] );
+               } elseif ( isset( $data['title'] ) && $data['title'] instanceof Title ) {
+                       // Old serializations from before December 2018
+                       $this->title = $data['title'];
+               } else {
+                       $this->title = null; // Explicit for sanity
+               }
        }
 
        /**
index 5213fc1..bb76395 100644 (file)
@@ -20,6 +20,7 @@
  */
 
 use MediaWiki\MediaWikiServices;
+use MediaWiki\Revision\SlotRecord;
 
 /**
  * Handles the backend logic of moving a page from one title
@@ -137,7 +138,8 @@ class MovePage {
                        $status->fatal(
                                'content-not-allowed-here',
                                ContentHandler::getLocalizedName( $this->oldTitle->getContentModel() ),
-                               $this->newTitle->getPrefixedText()
+                               $this->newTitle->getPrefixedText(),
+                               SlotRecord::MAIN
                        );
                }
 
@@ -240,7 +242,12 @@ class MovePage {
        public function move( User $user, $reason, $createRedirect, array $changeTags = [] ) {
                global $wgCategoryCollation;
 
-               Hooks::run( 'TitleMove', [ $this->oldTitle, $this->newTitle, $user ] );
+               $status = Status::newGood();
+               Hooks::run( 'TitleMove', [ $this->oldTitle, $this->newTitle, $user, $reason, &$status ] );
+               if ( !$status->isOK() ) {
+                       // Move was aborted by the hook
+                       return $status;
+               }
 
                // If it is a file, move it first.
                // It is done before all other moving stuff is done because it's hard to revert.
index f001acd..2423315 100644 (file)
@@ -2926,7 +2926,7 @@ class OutputPage extends ContextSource {
         * then the warning is a bit more obvious. If the lag is
         * lower than $wgSlaveLagWarning, then no warning is shown.
         *
-        * @param int $lag Slave lag
+        * @param int $lag Replica lag
         */
        public function showLagWarning( $lag ) {
                $config = $this->getConfig();
diff --git a/includes/Revision/FallbackSlotRoleHandler.php b/includes/Revision/FallbackSlotRoleHandler.php
new file mode 100644 (file)
index 0000000..78dfd39
--- /dev/null
@@ -0,0 +1,71 @@
+<?php
+/**
+ * This file is part of MediaWiki.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+namespace MediaWiki\Revision;
+
+use MediaWiki\Linker\LinkTarget;
+
+/**
+ * A SlotRoleHandler for providing basic functionality for undefined slot roles.
+ *
+ * This class is intended to be used when encountering slots with a role that used to be defined
+ * by an extension, but no longer is backed by hany specific handler, since the extension in
+ * question has been uninstalled. It may also be used for pages imported from another wiki.
+ *
+ * @since 1.33
+ */
+class FallbackSlotRoleHandler extends SlotRoleHandler {
+
+       public function __construct( $role ) {
+               // treat unknown content as plain text
+               parent::__construct( $role, CONTENT_MODEL_TEXT );
+       }
+
+       /**
+        * @param LinkTarget $page
+        *
+        * @return bool Always false, to prevent undefined slots from being used in new revisions.
+        */
+       public function isAllowedOn( LinkTarget $page ) {
+               return false;
+       }
+
+       /**
+        * @param string $model
+        * @param LinkTarget $page
+        *
+        * @return bool Always false, to prevent undefined slots from being used for
+        *         arbitrary content.
+        */
+       public function isAllowedModel( $model, LinkTarget $page ) {
+               return false;
+       }
+
+       public function getOutputLayoutHints() {
+               // TODO: should be return [ 'display' => 'none'] here, causing undefined slots
+               // to be hidden? We'd still need some place to surface the content of such
+               // slots, see T209923.
+
+               return parent::getOutputLayoutHints(); // TODO: Change the autogenerated stub
+       }
+
+}
diff --git a/includes/Revision/MainSlotRoleHandler.php b/includes/Revision/MainSlotRoleHandler.php
new file mode 100644 (file)
index 0000000..6c6fdd6
--- /dev/null
@@ -0,0 +1,132 @@
+<?php
+/**
+ * This file is part of MediaWiki.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+namespace MediaWiki\Revision;
+
+use ContentHandler;
+use Hooks;
+use MediaWiki\Linker\LinkTarget;
+use Title;
+
+/**
+ * A SlotRoleHandler for the main slot. While most slot roles serve a specific purpose and
+ * thus typically exhibit the same behaviour on all pages, the main slot is used for different
+ * things in different pages, typically depending on the namespace, a "file extension" in
+ * the page name, or the content model of the slot's content.
+ *
+ * MainSlotRoleHandler implements some of the per-namespace and per-model behavior that was
+ * supported prior to MediaWiki Version 1.33.
+ *
+ * @since 1.33
+ */
+class MainSlotRoleHandler extends SlotRoleHandler {
+
+       /**
+        * @var string[] A mapping of namespaces to content models.
+        * @see $wgNamespaceContentModels
+        */
+       private $namespaceContentModels;
+
+       /**
+        * @param string[] $namespaceContentModels A mapping of namespaces to content models,
+        *        typically from $wgNamespaceContentModels.
+        */
+       public function __construct( array $namespaceContentModels ) {
+               parent::__construct( 'main', CONTENT_MODEL_WIKITEXT );
+               $this->namespaceContentModels = $namespaceContentModels;
+       }
+
+       public function supportsArticleCount() {
+               return true;
+       }
+
+       /**
+        * @param string $model
+        * @param LinkTarget $page
+        *
+        * @return bool
+        */
+       public function isAllowedModel( $model, LinkTarget $page ) {
+               $title = Title::newFromLinkTarget( $page );
+               $handler = ContentHandler::getForModelID( $model );
+               return $handler->canBeUsedOn( $title );
+       }
+
+       /**
+        * @param LinkTarget $page
+        *
+        * @return string
+        */
+       public function getDefaultModel( LinkTarget $page ) {
+               // NOTE: this method must not rely on $title->getContentModel() directly or indirectly,
+               //       because it is used to initialize the mContentModel member.
+
+               $ext = '';
+               $ns = $page->getNamespace();
+               $model = $this->namespaceContentModels[$ns] ?? null;
+
+               // Hook can determine default model
+               $title = Title::newFromLinkTarget( $page );
+               if ( !Hooks::run( 'ContentHandlerDefaultModelFor', [ $title, &$model ] ) ) {
+                       if ( !is_null( $model ) ) {
+                               return $model;
+                       }
+               }
+
+               // Could this page contain code based on the title?
+               $isCodePage = $ns === NS_MEDIAWIKI && preg_match( '!\.(css|js|json)$!u', $title->getText(), $m );
+               if ( $isCodePage ) {
+                       $ext = $m[1];
+               }
+
+               // Is this a user subpage containing code?
+               $isCodeSubpage = $ns === NS_USER
+                       && !$isCodePage
+                       && preg_match( "/\\/.*\\.(js|css|json)$/", $title->getText(), $m );
+
+               if ( $isCodeSubpage ) {
+                       $ext = $m[1];
+               }
+
+               // Is this wikitext, according to $wgNamespaceContentModels or the DefaultModelFor hook?
+               $isWikitext = is_null( $model ) || $model == CONTENT_MODEL_WIKITEXT;
+               $isWikitext = $isWikitext && !$isCodePage && !$isCodeSubpage;
+
+               if ( !$isWikitext ) {
+                       switch ( $ext ) {
+                               case 'js':
+                                       return CONTENT_MODEL_JAVASCRIPT;
+                               case 'css':
+                                       return CONTENT_MODEL_CSS;
+                               case 'json':
+                                       return CONTENT_MODEL_JSON;
+                               default:
+                                       return is_null( $model ) ? CONTENT_MODEL_TEXT : $model;
+                       }
+               }
+
+               // We established that it must be wikitext
+
+               return CONTENT_MODEL_WIKITEXT;
+       }
+
+}
index 6eee3c4..094105a 100644 (file)
@@ -159,6 +159,28 @@ class RenderedRevision implements SlotRenderingProvider {
                return $this->options;
        }
 
+       /**
+        * Sets a ParserOutput to be returned by getRevisionParserOutput().
+        *
+        * @note For internal use by RevisionRenderer only! This method may be modified
+        * or removed without notice per the deprecation policy.
+        *
+        * @internal
+        *
+        * @param ParserOutput $output
+        */
+       public function setRevisionParserOutput( ParserOutput $output ) {
+               $this->revisionOutput = $output;
+
+               // If there is only one slot, we assume that the combined output is identical
+               // with the main slot's output. This is intended to prevent a redundant re-parse of
+               // the content in case getSlotParserOutput( SlotRecord::MAIN ) is called, for instance
+               // from ContentHandler::getSecondaryDataUpdates.
+               if ( $this->revision->getSlotRoles() === [ SlotRecord::MAIN ] ) {
+                       $this->slotsOutput[ SlotRecord::MAIN ] = $output;
+               }
+       }
+
        /**
         * @param array $hints Hints given as an associative array. Known keys:
         *      - 'generate-html' => bool: Whether the caller is interested in output HTML (as opposed
@@ -208,6 +230,7 @@ class RenderedRevision implements SlotRenderingProvider {
                                        'Access to the content has been suppressed for this audience'
                                );
                        } else {
+                               // XXX: allow SlotRoleHandler to control the ParserOutput?
                                $output = $this->getSlotParserOutputUncached( $content, $withHtml );
 
                                if ( $withHtml && !$output->hasText() ) {
index e2e84b6..f97390a 100644 (file)
@@ -50,15 +50,24 @@ class RevisionRenderer {
        /** @var ILoadBalancer */
        private $loadBalancer;
 
+       /** @var SlotRoleRegistry */
+       private $roleRegistery;
+
        /** @var string|bool */
        private $wikiId;
 
        /**
         * @param ILoadBalancer $loadBalancer
+        * @param SlotRoleRegistry $roleRegistry
         * @param bool|string $wikiId
         */
-       public function __construct( ILoadBalancer $loadBalancer, $wikiId = false ) {
+       public function __construct(
+               ILoadBalancer $loadBalancer,
+               SlotRoleRegistry $roleRegistry,
+               $wikiId = false
+       ) {
                $this->loadBalancer = $loadBalancer;
+               $this->roleRegistery = $roleRegistry;
                $this->wikiId = $wikiId;
 
                $this->saveParseLogger = new NullLogger();
@@ -82,6 +91,11 @@ class RevisionRenderer {
         *      - 'audience' the audience to use for content access. Default is
         *        RevisionRecord::FOR_PUBLIC if $forUser is not set, RevisionRecord::FOR_THIS_USER
         *        if $forUser is set. Can be set to RevisionRecord::RAW to disable audience checks.
+        *      - 'known-revision-output' a combined ParserOutput for the revision, perhaps from
+        *        some cache. the caller is responsible for ensuring that the ParserOutput indeed
+        *        matched the $rev and $options. This mechanism is intended as a temporary stop-gap,
+        *        for the time until caches have been changed to store RenderedRevision states instead
+        *        of ParserOutput objects.
         *
         * @return RenderedRevision|null The rendered revision, or null if the audience checks fails.
         */
@@ -133,6 +147,10 @@ class RevisionRenderer {
 
                $renderedRevision->setSaveParseLogger( $this->saveParseLogger );
 
+               if ( isset( $hints['known-revision-output'] ) ) {
+                       $renderedRevision->setRevisionParserOutput( $hints['known-revision-output'] );
+               }
+
                return $renderedRevision;
        }
 
@@ -175,8 +193,6 @@ class RevisionRenderer {
                        return $rrev->getSlotParserOutput( SlotRecord::MAIN );
                }
 
-               // TODO: put fancy layout logic here, see T200915.
-
                // move main slot to front
                if ( isset( $slots[SlotRecord::MAIN] ) ) {
                        $slots = [ SlotRecord::MAIN => $slots[SlotRecord::MAIN] ] + $slots;
@@ -192,6 +208,7 @@ class RevisionRenderer {
                        $out = $rrev->getSlotParserOutput( $role, $hints );
                        $slotOutput[$role] = $out;
 
+                       // XXX: should the SlotRoleHandler be able to intervene here?
                        $combinedOutput->mergeInternalMetaDataFrom( $out, $role );
                        $combinedOutput->mergeTrackingMetaDataFrom( $out );
                }
@@ -201,6 +218,16 @@ class RevisionRenderer {
                        $first = true;
                        /** @var ParserOutput $out */
                        foreach ( $slotOutput as $role => $out ) {
+                               $roleHandler = $this->roleRegistery->getRoleHandler( $role );
+
+                               // TODO: put more fancy layout logic here, see T200915.
+                               $layout = $roleHandler->getOutputLayoutHints();
+                               $display = $layout['display'] ?? 'section';
+
+                               if ( $display === 'none' ) {
+                                       continue;
+                               }
+
                                if ( $first ) {
                                        // skip header for the first slot
                                        $first = false;
@@ -210,6 +237,8 @@ class RevisionRenderer {
                                        $html .= Html::rawElement( 'h1', [ 'class' => 'mw-slot-header' ], $headText );
                                }
 
+                               // XXX: do we want to put a wrapper div around the output?
+                               // Do we want to let $roleHandler do that?
                                $html .= $out->getRawText();
                                $combinedOutput->mergeHtmlMetaDataFrom( $out );
                        }
index 73881cd..cf19ffb 100644 (file)
@@ -132,6 +132,9 @@ class RevisionStore
        /** @var int An appropriate combination of SCHEMA_COMPAT_XXX flags. */
        private $mcrMigrationStage;
 
+       /** @var SlotRoleRegistry */
+       private $slotRoleRegistry;
+
        /**
         * @todo $blobStore should be allowed to be any BlobStore!
         *
@@ -146,11 +149,11 @@ class RevisionStore
         * @param CommentStore $commentStore
         * @param NameTableStore $contentModelStore
         * @param NameTableStore $slotRoleStore
+        * @param SlotRoleRegistry $slotRoleRegistry
         * @param int $mcrMigrationStage An appropriate combination of SCHEMA_COMPAT_XXX flags
         * @param ActorMigration $actorMigration
         * @param bool|string $wikiId
         *
-        * @throws MWException if $mcrMigrationStage or $wikiId is invalid.
         */
        public function __construct(
                ILoadBalancer $loadBalancer,
@@ -159,6 +162,7 @@ class RevisionStore
                CommentStore $commentStore,
                NameTableStore $contentModelStore,
                NameTableStore $slotRoleStore,
+               SlotRoleRegistry $slotRoleRegistry,
                $mcrMigrationStage,
                ActorMigration $actorMigration,
                $wikiId = false
@@ -199,6 +203,7 @@ class RevisionStore
                $this->commentStore = $commentStore;
                $this->contentModelStore = $contentModelStore;
                $this->slotRoleStore = $slotRoleStore;
+               $this->slotRoleRegistry = $slotRoleRegistry;
                $this->mcrMigrationStage = $mcrMigrationStage;
                $this->actorMigration = $actorMigration;
                $this->wikiId = $wikiId;
@@ -923,7 +928,7 @@ class RevisionStore
                $format = $content->getDefaultFormat();
                $model = $content->getModel();
 
-               $this->checkContent( $content, $title );
+               $this->checkContent( $content, $title, $slot->getRole() );
 
                return $this->blobStore->storeBlob(
                        $content->serialize( $format ),
@@ -982,11 +987,12 @@ class RevisionStore
         *
         * @param Content $content
         * @param Title $title
+        * @param string $role
         *
         * @throws MWException
         * @throws MWUnknownContentModelException
         */
-       private function checkContent( Content $content, Title $title ) {
+       private function checkContent( Content $content, Title $title, $role ) {
                // Note: may return null for revisions that have not yet been inserted
 
                $model = $content->getModel();
@@ -1005,7 +1011,8 @@ class RevisionStore
 
                        $this->assertCrossWikiContentLoadingIsSafe();
 
-                       $defaultModel = ContentHandler::getDefaultModelFor( $title );
+                       $roleHandler = $this->slotRoleRegistry->getRoleHandler( $role );
+                       $defaultModel = $roleHandler->getDefaultModel( $title );
                        $defaultHandler = ContentHandler::getForModelID( $defaultModel );
                        $defaultFormat = $defaultHandler->getDefaultFormat();
 
@@ -1350,9 +1357,8 @@ class RevisionStore
                        $mainSlotRow->model_name = function ( SlotRecord $slot ) use ( $title ) {
                                $this->assertCrossWikiContentLoadingIsSafe();
 
-                               // TODO: MCR: consider slot role in getDefaultModelFor()! Use LinkTarget!
-                               // TODO: MCR: deprecate $title->getModel().
-                               return ContentHandler::getDefaultModelFor( $title );
+                               return $this->slotRoleRegistry->getRoleHandler( $slot->getRole() )
+                                       ->getDefaultModel( $title );
                        };
                }
 
@@ -1624,7 +1630,7 @@ class RevisionStore
                        $row->role_name = $this->slotRoleStore->getName( (int)$row->slot_role_id );
                        $row->model_name = $this->contentModelStore->getName( (int)$row->content_model );
 
-                       $contentCallback = function ( SlotRecord $slot ) use ( $queryFlags, $row ) {
+                       $contentCallback = function ( SlotRecord $slot ) use ( $queryFlags ) {
                                return $this->loadSlotContent( $slot, null, null, null, $queryFlags );
                        };
 
index 30ffc99..6b3117f 100644 (file)
@@ -72,10 +72,14 @@ class RevisionStoreFactory {
        /** @var NameTableStoreFactory */
        private $nameTables;
 
+       /** @var SlotRoleRegistry */
+       private $slotRoleRegistry;
+
        /**
         * @param ILBFactory $dbLoadBalancerFactory
         * @param BlobStoreFactory $blobStoreFactory
         * @param NameTableStoreFactory $nameTables
+        * @param SlotRoleRegistry $slotRoleRegistry
         * @param WANObjectCache $cache
         * @param CommentStore $commentStore
         * @param ActorMigration $actorMigration
@@ -88,6 +92,7 @@ class RevisionStoreFactory {
                ILBFactory $dbLoadBalancerFactory,
                BlobStoreFactory $blobStoreFactory,
                NameTableStoreFactory $nameTables,
+               SlotRoleRegistry $slotRoleRegistry,
                WANObjectCache $cache,
                CommentStore $commentStore,
                ActorMigration $actorMigration,
@@ -98,6 +103,7 @@ class RevisionStoreFactory {
                Assert::parameterType( 'integer', $migrationStage, '$migrationStage' );
                $this->dbLoadBalancerFactory = $dbLoadBalancerFactory;
                $this->blobStoreFactory = $blobStoreFactory;
+               $this->slotRoleRegistry = $slotRoleRegistry;
                $this->nameTables = $nameTables;
                $this->cache = $cache;
                $this->commentStore = $commentStore;
@@ -124,6 +130,7 @@ class RevisionStoreFactory {
                        $this->commentStore,
                        $this->nameTables->getContentModels( $wikiId ),
                        $this->nameTables->getSlotRoles( $wikiId ),
+                       $this->slotRoleRegistry,
                        $this->mcrMigrationStage,
                        $this->actorMigration,
                        $wikiId
diff --git a/includes/Revision/SlotRoleHandler.php b/includes/Revision/SlotRoleHandler.php
new file mode 100644 (file)
index 0000000..85b4c5a
--- /dev/null
@@ -0,0 +1,159 @@
+<?php
+/**
+ * This file is part of MediaWiki.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+namespace MediaWiki\Revision;
+
+use MediaWiki\Linker\LinkTarget;
+
+/**
+ * SlotRoleHandler instances are used to declare the existence and behavior of slot roles.
+ * Most importantly, they control which content model can be used for the slot, and how it is
+ * represented in the rendered verswion of page content.
+ *
+ * @since 1.33
+ */
+class SlotRoleHandler {
+
+       /**
+        * @var string
+        */
+       private $role;
+
+       /**
+        * @var array
+        * @see getOutputLayoutHints
+        */
+       private $layout = [
+               'display' => 'section', // use 'none' to suppress
+               'region' => 'center',
+               'placement' => 'append'
+       ];
+
+       /**
+        * @var string
+        */
+       private $contentModel;
+
+       /**
+        * @param string $role The name of the slot role defined by this SlotRoleHandler. See
+        *        SlotRoleRegistry::defineRole for more information.
+        * @param string $contentModel The default content model for this slot. As per the default
+        *        implementation of isAllowedModel(), also the only content model allowed for the
+        *        slot. Subclasses may however handle default and allowed models differently.
+        * @param array $layout Layout hints, for use by RevisionRenderer. See getOutputLayoutHints.
+        */
+       public function __construct( $role, $contentModel, $layout = [] ) {
+               $this->role = $role;
+               $this->contentModel = $contentModel;
+               $this->layout = array_merge( $this->layout, $layout );
+       }
+
+       /**
+        * @return string The role this SlotRoleHandler applies to
+        */
+       public function getRole() {
+               return $this->role;
+       }
+
+       /**
+        * Layout hints for use while laying out the combined output of all slots, typically by
+        * RevisionRenderer. The layout hints are given as an associative array. Well-known keys
+        * to use:
+        *
+        * * "display": how the output of this slot should be represented. Supported values:
+        *   - "section": show as a top level section of the region.
+        *   - "none": do not show at all
+        *   Further values that may be supported in the future include "box" and "banner".
+        * * "region": in which region of the page the output should be placed. Supported values:
+        *   - "center": the central content area.
+        *   Further values that may be supported in the future include "top" and "bottom", "left"
+        *   and "right", "header" and "footer".
+        * * "placement": placement relative to other content of the same area.
+        *   - "append": place at the end, after any output processed previously.
+        *   Further values that may be supported in the future include "prepend". A "weight" key
+        *   may be introduced for more fine grained control.
+        *
+        * @return array an associative array of hints
+        */
+       public function getOutputLayoutHints() {
+               return $this->layout;
+       }
+
+       /**
+        * The message key for the translation of the slot name.
+        *
+        * @return string
+        */
+       public function getNameMessageKey() {
+               return 'slot-name-' . $this->role;
+       }
+
+       /**
+        * Determines the content model to use per default for this slot on the given page.
+        *
+        * The default implementation always returns the content model provided to the constructor.
+        * Subclasses may base the choice on default model on the page title or namespace.
+        * The choice should not depend on external state, such as the page content.
+        *
+        * @param LinkTarget $page
+        *
+        * @return string
+        */
+       public function getDefaultModel( LinkTarget $page ) {
+               return $this->contentModel;
+       }
+
+       /**
+        * Determines whether the given model can be used on this slot on the given page.
+        *
+        * The default implementation checks whether $model is the content model provided to the
+        * constructor. Subclasses may allow other models and may base the decision on the page title
+        * or namespace. The choice should not depend on external state, such as the page content.
+        *
+        * @note This should be checked when creating new revisions. Existing revisions
+        *       are not guaranteed to comply with the return value.
+        *
+        * @param string $model
+        * @param LinkTarget $page
+        *
+        * @return bool
+        */
+       public function isAllowedModel( $model, LinkTarget $page ) {
+               return ( $model === $this->contentModel );
+       }
+
+       /**
+        * Whether this slot should be considered when determining whether a page should be counted
+        * as an "article" in the site statistics.
+        *
+        * For a page to be considered countable, one of the page's slots must return true from this
+        * method, and Content::isCountable() must return true for the content of that slot.
+        *
+        * The default implementation always returns false.
+        *
+        * @return string
+        */
+       public function supportsArticleCount() {
+               return false;
+       }
+
+}
diff --git a/includes/Revision/SlotRoleRegistry.php b/includes/Revision/SlotRoleRegistry.php
new file mode 100644 (file)
index 0000000..b108b98
--- /dev/null
@@ -0,0 +1,236 @@
+<?php
+/**
+ * This file is part of MediaWiki.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+namespace MediaWiki\Revision;
+
+use InvalidArgumentException;
+use LogicException;
+use MediaWiki\Linker\LinkTarget;
+use MediaWiki\Storage\NameTableStore;
+use Wikimedia\Assert\Assert;
+
+/**
+ * A registry service for SlotRoleHandlers, used to define which slot roles are available on
+ * which page.
+ *
+ * Extensions may use the SlotRoleRegistry to register the slots they define.
+ *
+ * In the context of the SlotRoleRegistry, it is useful to distinguish between "defined" and "known"
+ * slot roles: A slot role is "defined" if defineRole() or defineRoleWithModel() was called for
+ * that role. A slot role is "known" if the NameTableStore provided to the constructor as the
+ * $roleNamesStore parameter has an ID associated with that role, which essentially means that
+ * the role at some point has been used on the wiki. Roles that are not "defined" but are
+ * "known" typically belong to extensions that used to be installed on the wiki, but no longer are.
+ * Such slots should be considered ok for display and administrative operations, but only "defined"
+ * slots should be supported for editing.
+ *
+ * @since 1.33
+ */
+class SlotRoleRegistry {
+
+       /**
+        * @var NameTableStore
+        */
+       private $roleNamesStore;
+
+       /**
+        * @var callable[]
+        */
+       private $instantiators = [];
+
+       /**
+        * @var SlotRoleHandler[]
+        */
+       private $handlers;
+
+       /**
+        * SlotRoleRegistry constructor.
+        *
+        * @param NameTableStore $roleNamesStore
+        */
+       public function __construct( NameTableStore $roleNamesStore ) {
+               $this->roleNamesStore = $roleNamesStore;
+       }
+
+       /**
+        * Defines a slot role.
+        *
+        * For use by extensions that wish to define roles beyond the main slot role.
+        *
+        * @see defineRoleWithModel()
+        *
+        * @param string $role The role name of the slot to define. This should follow the
+        *        same convention as message keys:
+        * @param callable $instantiator called with $role as a parameter;
+        *        Signature: function ( string $role ): SlotRoleHandler
+        */
+       public function defineRole( $role, callable $instantiator ) {
+               if ( $this->isDefinedRole( $role ) ) {
+                       throw new LogicException( "Role $role is already defined" );
+               }
+
+               $this->instantiators[$role] = $instantiator;
+       }
+
+       /**
+        * Defines a slot role that allows only the given content model, and has no special
+        * behavior.
+        *
+        * For use by extensions that wish to define roles beyond the main slot role, but have
+        * no need to implement any special behavior for that slot.
+        *
+        * @see defineRole()
+        *
+        * @param string $role The role name of the slot to define, see defineRole()
+        *        for more information.
+        * @param string $model A content model name, see ContentHandler
+        * @param array $layout See SlotRoleHandler getOutputLayoutHints
+        */
+       public function defineRoleWithModel( $role, $model, $layout = [] ) {
+               $this->defineRole(
+                       $role,
+                       function ( $role ) use ( $model, $layout ) {
+                               return new SlotRoleHandler( $role, $model, $layout );
+                       }
+               );
+       }
+
+       /**
+        * Gets the SlotRoleHandler that should be used when processing content of the given role.
+        *
+        * @param string $role
+        *
+        * @throws InvalidArgumentException If $role is not a known slot role.
+        * @return SlotRoleHandler The handler to be used for $role. This may be a
+        *         FallbackSlotRoleHandler if the slot is "known" but not "defined".
+        */
+       public function getRoleHandler( $role ) {
+               if ( !isset( $this->handlers[$role] ) ) {
+                       if ( !$this->isDefinedRole( $role ) ) {
+                               if ( $this->isKnownRole( $role ) ) {
+                                       // The role has no handler defined, but is represented in the database.
+                                       // This may happen e.g. when the extension that defined the role was uninstalled.
+                                       wfWarn( __METHOD__ . ": known but undefined slot role $role" );
+                                       $this->handlers[$role] = new FallbackSlotRoleHandler( $role );
+                               } else {
+                                       // The role doesn't have a handler defined, and is not represented in
+                                       // the database. Something must be quite wrong.
+                                       throw new InvalidArgumentException( "Unknown role $role" );
+                               }
+                       } else {
+                               $handler = call_user_func( $this->instantiators[$role], $role );
+
+                               Assert::postcondition(
+                                       $handler instanceof SlotRoleHandler,
+                                       "Instantiator for $role role must return a SlotRoleHandler"
+                               );
+
+                               $this->handlers[$role] = $handler;
+                       }
+               }
+
+               return $this->handlers[$role];
+       }
+
+       /**
+        * Returns the list of roles allowed when creating a new revision on the given page.
+        * The choice should not depend on external state, such as the page content.
+        * Note that existing revisions of that page are not guaranteed to comply with this list.
+        *
+        * All implementations of this method are required to return at least all "required" roles.
+        *
+        * @param LinkTarget $title
+        *
+        * @return string[]
+        */
+       public function getAllowedRoles( LinkTarget $title ) {
+               // TODO: allow this to be overwritten per namespace (or page type)
+               // TODO: decide how to control which slots are offered for editing per default (T209927)
+               return $this->getDefinedRoles();
+       }
+
+       /**
+        * Returns the list of roles required when creating a new revision on the given page.
+        * The should not depend on external state, such as the page content.
+        * Note that existing revisions of that page are not guaranteed to comply with this list.
+        *
+        * All required roles are implicitly considered "allowed", so any roles
+        * returned by this method will also be returned by getAllowedRoles().
+        *
+        * @param LinkTarget $title
+        *
+        * @return string[]
+        */
+       public function getRequiredRoles( LinkTarget $title ) {
+               // TODO: allow this to be overwritten per namespace (or page type)
+               return [ 'main' ];
+       }
+
+       /**
+        * Returns the list of roles defined by calling defineRole().
+        *
+        * This list should be used when enumerating slot roles that can be used for editing.
+        *
+        * @return string[]
+        */
+       public function getDefinedRoles() {
+               return array_keys( $this->instantiators );
+       }
+
+       /**
+        * Returns the list of known roles, including the ones returned by getDefinedRoles(),
+        * and roles that exist according to the NameTableStore provided to the constructor.
+        *
+        * This list should be used when enumerating slot roles that can be used in queries or
+        * for display.
+        *
+        * @return string[]
+        */
+       public function getKnownRoles() {
+               return array_unique( array_merge(
+                       $this->getDefinedRoles(),
+                       $this->roleNamesStore->getMap()
+               ) );
+       }
+
+       /**
+        * Whether the given role is defined, that is, it was defined by calling defineRole().
+        *
+        * @param string $role
+        * @return bool
+        */
+       public function isDefinedRole( $role ) {
+               return in_array( $role, $this->getDefinedRoles(), true );
+       }
+
+       /**
+        * Whether the given role is known, that is, it's either defined or exist according to
+        * the NameTableStore provided to the constructor.
+        *
+        * @param string $role
+        * @return bool
+        */
+       public function isKnownRole( $role ) {
+               return in_array( $role, $this->getKnownRoles(), true );
+       }
+
+}
index 33517a0..9a94389 100644 (file)
@@ -48,8 +48,10 @@ use MediaWiki\Logger\LoggerFactory;
 use MediaWiki\MediaWikiServices;
 use MediaWiki\Preferences\PreferencesFactory;
 use MediaWiki\Preferences\DefaultPreferencesFactory;
+use MediaWiki\Revision\MainSlotRoleHandler;
 use MediaWiki\Revision\RevisionFactory;
 use MediaWiki\Revision\RevisionLookup;
+use MediaWiki\Revision\SlotRoleRegistry;
 use MediaWiki\Revision\RevisionRenderer;
 use MediaWiki\Revision\RevisionStore;
 use MediaWiki\Revision\RevisionStoreFactory;
@@ -420,9 +422,12 @@ return [
        },
 
        'RevisionRenderer' => function ( MediaWikiServices $services ) : RevisionRenderer {
-               $renderer = new RevisionRenderer( $services->getDBLoadBalancer() );
-               $renderer->setLogger( LoggerFactory::getInstance( 'SaveParse' ) );
+               $renderer = new RevisionRenderer(
+                       $services->getDBLoadBalancer(),
+                       $services->getSlotRoleRegistry()
+               );
 
+               $renderer->setLogger( LoggerFactory::getInstance( 'SaveParse' ) );
                return $renderer;
        },
 
@@ -436,6 +441,7 @@ return [
                        $services->getDBLoadBalancerFactory(),
                        $services->getBlobStoreFactory(),
                        $services->getNameTableStoreFactory(),
+                       $services->getSlotRoleRegistry(),
                        $services->getMainWANObjectCache(),
                        $services->getCommentStore(),
                        $services->getActorMigration(),
@@ -519,6 +525,22 @@ return [
                return $factory;
        },
 
+       'SlotRoleRegistry' => function ( MediaWikiServices $services ) : SlotRoleRegistry {
+               $config = $services->getMainConfig();
+
+               $registry = new SlotRoleRegistry(
+                       $services->getNameTableStoreFactory()->getSlotRoles()
+               );
+
+               $registry->defineRole( 'main', function () use ( $config ) {
+                       return new MainSlotRoleHandler(
+                               $config->get( 'NamespaceContentModels' )
+                       );
+               } );
+
+               return $registry;
+       },
+
        'SpecialPageFactory' => function ( MediaWikiServices $services ) : SpecialPageFactory {
                return new SpecialPageFactory(
                        $services->getMainConfig(),
index e908968..c401d44 100644 (file)
@@ -44,6 +44,7 @@ use MediaWiki\Revision\RevisionRecord;
 use MediaWiki\Revision\RevisionRenderer;
 use MediaWiki\Revision\RevisionSlots;
 use MediaWiki\Revision\RevisionStore;
+use MediaWiki\Revision\SlotRoleRegistry;
 use MediaWiki\Revision\SlotRecord;
 use MediaWiki\User\UserIdentity;
 use MessageCache;
@@ -209,6 +210,9 @@ class DerivedPageDataUpdater implements IDBAccessObject {
         */
        private $revisionRenderer;
 
+       /** @var SlotRoleRegistry */
+       private $slotRoleRegistry;
+
        /**
         * A stage identifier for managing the life cycle of this instance.
         * Possible stages are 'new', 'knows-current', 'has-content', 'has-revision', and 'done'.
@@ -255,6 +259,7 @@ class DerivedPageDataUpdater implements IDBAccessObject {
         * @param WikiPage $wikiPage ,
         * @param RevisionStore $revisionStore
         * @param RevisionRenderer $revisionRenderer
+        * @param SlotRoleRegistry $slotRoleRegistry
         * @param ParserCache $parserCache
         * @param JobQueueGroup $jobQueueGroup
         * @param MessageCache $messageCache
@@ -265,6 +270,7 @@ class DerivedPageDataUpdater implements IDBAccessObject {
                WikiPage $wikiPage,
                RevisionStore $revisionStore,
                RevisionRenderer $revisionRenderer,
+               SlotRoleRegistry $slotRoleRegistry,
                ParserCache $parserCache,
                JobQueueGroup $jobQueueGroup,
                MessageCache $messageCache,
@@ -276,10 +282,11 @@ class DerivedPageDataUpdater implements IDBAccessObject {
                $this->parserCache = $parserCache;
                $this->revisionStore = $revisionStore;
                $this->revisionRenderer = $revisionRenderer;
+               $this->slotRoleRegistry = $slotRoleRegistry;
                $this->jobQueueGroup = $jobQueueGroup;
                $this->messageCache = $messageCache;
                $this->contLang = $contLang;
-               // XXX only needed for waiting for slaves to catch up; there should be a narrower
+               // XXX only needed for waiting for replicas to catch up; there should be a narrower
                // interface for that.
                $this->loadbalancerFactory = $loadbalancerFactory;
        }
@@ -351,13 +358,9 @@ class DerivedPageDataUpdater implements IDBAccessObject {
                        throw new InvalidArgumentException( '$parentId should match the parent of $revision' );
                }
 
-               if ( $revision
-                       && $user
-                       && $revision->getUser( RevisionRecord::RAW )->getName() !== $user->getName()
-               ) {
-                       throw new InvalidArgumentException( '$user should match the author of $revision' );
-               }
-
+               // NOTE: For null revisions, $user may be different from $this->revision->getUser
+               // and also from $revision->getUser.
+               // But $user should always match $this->user.
                if ( $user && $this->user && $user->getName() !== $this->user->getName() ) {
                        return false;
                }
@@ -368,10 +371,6 @@ class DerivedPageDataUpdater implements IDBAccessObject {
                        return false;
                }
 
-               if ( $revision && !$user ) {
-                       $user = $revision->getUser( RevisionRecord::RAW );
-               }
-
                if ( $this->pageState
                        && $revision
                        && $revision->getParentId() !== null
@@ -387,22 +386,6 @@ class DerivedPageDataUpdater implements IDBAccessObject {
                        return false;
                }
 
-               if ( $this->revision
-                       && $user
-                       && $this->revision->getUser( RevisionRecord::RAW )
-                       && $this->revision->getUser( RevisionRecord::RAW )->getName() !== $user->getName()
-               ) {
-                       return false;
-               }
-
-               if ( $revision
-                       && $this->user
-                       && $this->revision->getUser( RevisionRecord::RAW )
-                       && $revision->getUser( RevisionRecord::RAW )->getName() !== $this->user->getName()
-               ) {
-                       return false;
-               }
-
                // NOTE: this check is the primary reason for having the $this->slotsUpdate field!
                if ( $this->slotsUpdate
                        && $slotsUpdate
@@ -660,12 +643,26 @@ class DerivedPageDataUpdater implements IDBAccessObject {
                $hasLinks = null;
 
                if ( $this->articleCountMethod === 'link' ) {
+                       // NOTE: it would be more appropriate to determine for each slot separately
+                       // whether it has links, and use that information with that slot's
+                       // isCountable() method. However, that would break parity with
+                       // WikiPage::isCountable, which uses the pagelinks table to determine
+                       // whether the current revision has links.
                        $hasLinks = (bool)count( $this->getCanonicalParserOutput()->getLinks() );
                }
 
-               // TODO: MCR: ask all slots if they have links [SlotHandler/PageTypeHandler]
-               $mainContent = $this->getRawContent( SlotRecord::MAIN );
-               return $mainContent->isCountable( $hasLinks );
+               foreach ( $this->getModifiedSlotRoles() as $role ) {
+                       $roleHandler = $this->slotRoleRegistry->getRoleHandler( $role );
+                       if ( $roleHandler->supportsArticleCount() ) {
+                               $content = $this->getRawContent( $role );
+
+                               if ( $content->isCountable( $hasLinks ) ) {
+                                       return true;
+                               }
+                       }
+               }
+
+               return false;
        }
 
        /**
@@ -673,6 +670,7 @@ class DerivedPageDataUpdater implements IDBAccessObject {
         */
        public function isRedirect() {
                // NOTE: main slot determines redirect status
+               // TODO: MCR: this should be controlled by a PageTypeHandler
                $mainContent = $this->getRawContent( SlotRecord::MAIN );
 
                return $mainContent->isRedirect();
@@ -762,17 +760,6 @@ class DerivedPageDataUpdater implements IDBAccessObject {
                        $stashedEdit = ApiStashEdit::checkCache( $title, $mainContent, $legacyUser );
                }
 
-               if ( $stashedEdit ) {
-                       /** @var ParserOutput $output */
-                       $output = $stashedEdit->output;
-
-                       // TODO: this should happen when stashing the ParserOutput, not now!
-                       $output->setCacheTime( $stashedEdit->timestamp );
-
-                       // TODO: MCR: allow output for all slots to be stashed.
-                       $this->canonicalParserOutput = $output;
-               }
-
                $userPopts = ParserOptions::newFromUserAndLang( $user, $this->contLang );
                Hooks::run( 'ArticlePrepareTextForEdit', [ $wikiPage, $userPopts ] );
 
@@ -853,6 +840,27 @@ class DerivedPageDataUpdater implements IDBAccessObject {
                } else {
                        $this->parentRevision = $parentRevision;
                }
+
+               $renderHints = [ 'use-master' => $this->useMaster(), 'audience' => RevisionRecord::RAW ];
+
+               if ( $stashedEdit ) {
+                       /** @var ParserOutput $output */
+                       $output = $stashedEdit->output;
+
+                       // TODO: this should happen when stashing the ParserOutput, not now!
+                       $output->setCacheTime( $stashedEdit->timestamp );
+
+                       $renderHints['known-revision-output'] = $output;
+               }
+
+               // NOTE: we want a canonical rendering, so don't pass $this->user or ParserOptions
+               // NOTE: the revision is either new or current, so we can bypass audience checks.
+               $this->renderedRevision = $this->revisionRenderer->getRenderedRevision(
+                       $this->revision,
+                       null,
+                       null,
+                       $renderHints
+               );
        }
 
        /**
@@ -879,18 +887,7 @@ class DerivedPageDataUpdater implements IDBAccessObject {
         * @return RenderedRevision
         */
        public function getRenderedRevision() {
-               if ( !$this->renderedRevision ) {
-                       $this->assertPrepared( __METHOD__ );
-
-                       // NOTE: we want a canonical rendering, so don't pass $this->user or ParserOptions
-                       // NOTE: the revision is either new or current, so we can bypass audience checks.
-                       $this->renderedRevision = $this->revisionRenderer->getRenderedRevision(
-                               $this->revision,
-                               null,
-                               null,
-                               [ 'use-master' => $this->useMaster(), 'audience' => RevisionRecord::RAW ]
-                       );
-               }
+               $this->assertPrepared( __METHOD__ );
 
                return $this->renderedRevision;
        }
@@ -1210,6 +1207,19 @@ class DerivedPageDataUpdater implements IDBAccessObject {
                // Prune any output that depends on the revision ID.
                if ( $this->renderedRevision ) {
                        $this->renderedRevision->updateRevision( $revision );
+               } else {
+
+                       // NOTE: we want a canonical rendering, so don't pass $this->user or ParserOptions
+                       // NOTE: the revision is either new or current, so we can bypass audience checks.
+                       $this->renderedRevision = $this->revisionRenderer->getRenderedRevision(
+                               $this->revision,
+                               null,
+                               null,
+                               [ 'use-master' => $this->useMaster(), 'audience' => RevisionRecord::RAW ]
+                       );
+
+                       // XXX: Since we presumably are dealing with the current revision,
+                       // we could try to get the ParserOutput from the parser cache.
                }
 
                // TODO: optionally get ParserOutput from the ParserCache here.
@@ -1407,12 +1417,9 @@ class DerivedPageDataUpdater implements IDBAccessObject {
                        // the recent change entry (also done via deferred updates) and carry over any
                        // bot/deletion/IP flags, ect.
                        $this->jobQueueGroup->lazyPush(
-                               new CategoryMembershipChangeJob(
+                               CategoryMembershipChangeJob::newSpec(
                                        $this->getTitle(),
-                                       [
-                                               'pageId' => $this->getPageId(),
-                                               'revTimestamp' => $this->revision->getTimestamp(),
-                                       ]
+                                       $this->revision->getTimestamp()
                                )
                        );
                }
index c1dd09d..27194ab 100644 (file)
@@ -205,7 +205,7 @@ class NameTableStore {
         *
         * @param int $connFlags ILoadBalancer::CONN_XXX flags. Optional.
         *
-        * @return \string[] The freshly reloaded name map
+        * @return string[] The freshly reloaded name map
         */
        public function reloadMap( $connFlags = 0 ) {
                $this->tableCache = $this->loadTable(
index 043e00e..6cbdcc6 100644 (file)
@@ -31,7 +31,6 @@ use Content;
 use ContentHandler;
 use DeferredUpdates;
 use Hooks;
-use InvalidArgumentException;
 use LogicException;
 use ManualLogEntry;
 use MediaWiki\Linker\LinkTarget;
@@ -39,6 +38,7 @@ use MediaWiki\Revision\MutableRevisionRecord;
 use MediaWiki\Revision\RevisionAccessException;
 use MediaWiki\Revision\RevisionRecord;
 use MediaWiki\Revision\RevisionStore;
+use MediaWiki\Revision\SlotRoleRegistry;
 use MediaWiki\Revision\SlotRecord;
 use MWException;
 use RecentChange;
@@ -96,6 +96,11 @@ class PageUpdater {
         */
        private $revisionStore;
 
+       /**
+        * @var SlotRoleRegistry
+        */
+       private $slotRoleRegistry;
+
        /**
         * @var boolean see $wgUseAutomaticEditSummaries
         * @see $wgUseAutomaticEditSummaries
@@ -148,13 +153,15 @@ class PageUpdater {
         * @param DerivedPageDataUpdater $derivedDataUpdater
         * @param LoadBalancer $loadBalancer
         * @param RevisionStore $revisionStore
+        * @param SlotRoleRegistry $slotRoleRegistry
         */
        public function __construct(
                User $user,
                WikiPage $wikiPage,
                DerivedPageDataUpdater $derivedDataUpdater,
                LoadBalancer $loadBalancer,
-               RevisionStore $revisionStore
+               RevisionStore $revisionStore,
+               SlotRoleRegistry $slotRoleRegistry
        ) {
                $this->user = $user;
                $this->wikiPage = $wikiPage;
@@ -162,6 +169,7 @@ class PageUpdater {
 
                $this->loadBalancer = $loadBalancer;
                $this->revisionStore = $revisionStore;
+               $this->slotRoleRegistry = $slotRoleRegistry;
 
                $this->slotsUpdate = new RevisionSlotsUpdate();
        }
@@ -317,14 +325,6 @@ class PageUpdater {
                return $this->derivedDataUpdater->grabCurrentRevision();
        }
 
-       /**
-        * @return string
-        */
-       private function getTimestampNow() {
-               // TODO: allow an override to be injected for testing
-               return wfTimestampNow();
-       }
-
        /**
         * Check flags and add EDIT_NEW or EDIT_UPDATE to them as needed.
         *
@@ -346,8 +346,7 @@ class PageUpdater {
         * @param Content $content
         */
        public function setContent( $role, Content $content ) {
-               // TODO: MCR: check the role and the content's model against the list of supported
-               // roles, see T194046.
+               $this->ensureRoleAllowed( $role );
 
                $this->slotsUpdate->modifyContent( $role, $content );
        }
@@ -358,6 +357,8 @@ class PageUpdater {
         * @param SlotRecord $slot
         */
        public function setSlot( SlotRecord $slot ) {
+               $this->ensureRoleAllowed( $slot->getRole() );
+
                $this->slotsUpdate->modifySlot( $slot );
        }
 
@@ -376,6 +377,7 @@ class PageUpdater {
         *        by the new revision.
         */
        public function inheritSlot( SlotRecord $originalSlot ) {
+               // NOTE: slots can be inherited even if the role is not "allowed" on the title.
                // NOTE: this slot is inherited from some other revision, but it's
                // a "modified" slot for the RevisionSlotsUpdate and DerivedPageDataUpdater,
                // since it's not implicitly inherited from the parent revision.
@@ -393,9 +395,7 @@ class PageUpdater {
         * @param string $role A slot role name (but not "main")
         */
        public function removeSlot( $role ) {
-               if ( $role === SlotRecord::MAIN ) {
-                       throw new InvalidArgumentException( 'Cannot remove the main slot!' );
-               }
+               $this->ensureRoleNotRequired( $role );
 
                $this->slotsUpdate->removeSlot( $role );
        }
@@ -635,20 +635,38 @@ class PageUpdater {
                        throw new RuntimeException( 'Something is trying to edit an article with an empty title' );
                }
 
-               // TODO: MCR: check the role and the content's model against the list of supported
-               // and required roles, see T194046.
+               // NOTE: slots can be inherited even if the role is not "allowed" on the title.
+               $status = Status::newGood();
+               $this->checkAllRolesAllowed(
+                       $this->slotsUpdate->getModifiedRoles(),
+                       $status
+               );
+               $this->checkNoRolesRequired(
+                       $this->slotsUpdate->getRemovedRoles(),
+                       $status
+               );
 
-               // Make sure the given content type is allowed for this page
-               // TODO: decide: Extend check to other slots? Consider the role in check? [PageType]
-               $mainContentHandler = $this->getContentHandler( SlotRecord::MAIN );
-               if ( !$mainContentHandler->canBeUsedOn( $this->getTitle() ) ) {
-                       $this->status = Status::newFatal( 'content-not-allowed-here',
-                               ContentHandler::getLocalizedName( $mainContentHandler->getModelID() ),
-                               $this->getTitle()->getPrefixedText()
-                       );
+               if ( !$status->isOK() ) {
                        return null;
                }
 
+               // Make sure the given content is allowed in the respective slots of this page
+               foreach ( $this->slotsUpdate->getModifiedRoles() as $role ) {
+                       $slot = $this->slotsUpdate->getModifiedSlot( $role );
+                       $roleHandler = $this->slotRoleRegistry->getRoleHandler( $role );
+
+                       if ( !$roleHandler->isAllowedModel( $slot->getModel(), $this->getTitle() ) ) {
+                               $contentHandler = ContentHandler::getForModelID( $slot->getModel() );
+                               $this->status = Status::newFatal( 'content-not-allowed-here',
+                                       ContentHandler::getLocalizedName( $contentHandler->getModelID() ),
+                                       $this->getTitle()->getPrefixedText(),
+                                       wfMessage( $roleHandler->getNameMessageKey() )
+                                       // TODO: defer message lookup to caller
+                               );
+                               return null;
+                       }
+               }
+
                // Load the data from the master database if needed. Needed to check flags.
                // NOTE: This grabs the parent revision as the CAS token, if grabParentRevision
                // wasn't called yet. If the page is modified by another process before we are done with
@@ -882,13 +900,19 @@ class PageUpdater {
                        $content = $slot->getContent();
 
                        // XXX: We may push this up to the "edit controller" level, see T192777.
-                       // TODO: change the signature of PrepareSave to not take a WikiPage!
+                       // XXX: prepareSave() and isValid() could live in SlotRoleHandler
+                       // XXX: PrepareSave should not take a WikiPage!
                        $prepStatus = $content->prepareSave( $wikiPage, $flags, $oldid, $user );
 
                        // TODO: MCR: record which problem arose in which slot.
                        $status->merge( $prepStatus );
                }
 
+               $this->checkAllRequiredRoles(
+                       $rev->getSlotRoles(),
+                       $status
+               );
+
                return $rev;
        }
 
@@ -1216,4 +1240,71 @@ class PageUpdater {
                );
        }
 
+       /**
+        * @return string[] Slots required for this page update, as a list of role names.
+        */
+       private function getRequiredSlotRoles() {
+               return $this->slotRoleRegistry->getRequiredRoles( $this->getTitle() );
+       }
+
+       /**
+        * @return string[] Slots allowed for this page update, as a list of role names.
+        */
+       private function getAllowedSlotRoles() {
+               return $this->slotRoleRegistry->getAllowedRoles( $this->getTitle() );
+       }
+
+       private function ensureRoleAllowed( $role ) {
+               $allowedRoles = $this->getAllowedSlotRoles();
+               if ( !in_array( $role, $allowedRoles ) ) {
+                       throw new PageUpdateException( "Slot role `$role` is not allowed." );
+               }
+       }
+
+       private function ensureRoleNotRequired( $role ) {
+               $requiredRoles = $this->getRequiredSlotRoles();
+               if ( in_array( $role, $requiredRoles ) ) {
+                       throw new PageUpdateException( "Slot role `$role` is required." );
+               }
+       }
+
+       private function checkAllRolesAllowed( array $roles, Status $status ) {
+               $allowedRoles = $this->getAllowedSlotRoles();
+
+               $forbidden = array_diff( $roles, $allowedRoles );
+               if ( !empty( $forbidden ) ) {
+                       $status->error(
+                               'edit-slots-cannot-add',
+                               count( $forbidden ),
+                               implode( ', ', $forbidden )
+                       );
+               }
+       }
+
+       private function checkNoRolesRequired( array $roles, Status $status ) {
+               $requiredRoles = $this->getRequiredSlotRoles();
+
+               $needed = array_diff( $roles, $requiredRoles );
+               if ( !empty( $needed ) ) {
+                       $status->error(
+                               'edit-slots-cannot-remove',
+                               count( $needed ),
+                               implode( ', ', $needed )
+                       );
+               }
+       }
+
+       private function checkAllRequiredRoles( array $roles, Status $status ) {
+               $requiredRoles = $this->getRequiredSlotRoles();
+
+               $missing = array_diff( $requiredRoles, $roles );
+               if ( !empty( $missing ) ) {
+                       $status->error(
+                               'edit-slots-missing',
+                               count( $missing ),
+                               implode( ', ', $missing )
+                       );
+               }
+       }
+
 }
index 038e8b1..8b4075b 100644 (file)
@@ -978,6 +978,8 @@ class Title implements LinkTarget {
        /**
         * Get the page's content model id, see the CONTENT_MODEL_XXX constants.
         *
+        * @todo Deprecate this in favor of SlotRecord::getModel()
+        *
         * @param int $flags A bit field; may be Title::GAID_FOR_UPDATE to select for update
         * @return string Content model id
         */
@@ -2687,9 +2689,9 @@ class Title implements LinkTarget {
                        $errors[] = [ 'confirmedittext' ];
                }
 
-               $useSlave = ( $rigor !== 'secure' );
+               $useReplica = ( $rigor !== 'secure' );
                if ( ( $action == 'edit' || $action == 'create' )
-                       && !$user->isBlockedFrom( $this, $useSlave )
+                       && !$user->isBlockedFrom( $this, $useReplica )
                ) {
                        // Don't block the user from editing their own talk page unless they've been
                        // explicitly blocked from that too.
index e5233f0..f288a5c 100644 (file)
@@ -314,9 +314,14 @@ abstract class Action implements MessageLocalizer {
                        }
                }
 
-               if ( $this->requiresUnblock() && $user->isBlocked() ) {
+               // If the action requires an unblock, explicitly check the user's block.
+               if ( $this->requiresUnblock() && $user->isBlockedFrom( $this->getTitle() ) ) {
                        $block = $user->getBlock();
-                       throw new UserBlockedError( $block );
+                       if ( $block ) {
+                               throw new UserBlockedError( $block );
+                       }
+
+                       throw new PermissionsError( $this->getName(), [ 'badaccess-group0' ] );
                }
 
                // This should be checked at the end so that the user won't think the
index d014503..25e4aae 100644 (file)
@@ -174,7 +174,7 @@ class InfoAction extends FormlessAction {
         * @param string $table The table that will be added to the content
         * @param string $name The name of the row
         * @param string $value The value of the row
-        * @param string $id The ID to use for the 'tr' element
+        * @param string|null $id The ID to use for the 'tr' element
         * @return string The table with the row added
         */
        protected function addRow( $table, $name, $value, $id ) {
index c962e20..dec3e61 100644 (file)
@@ -73,6 +73,9 @@ class RollbackAction extends FormlessAction {
                $trxLimits = $this->context->getConfig()->get( 'TrxProfilerLimits' );
                $trxProfiler = Profiler::instance()->getTransactionProfiler();
                $trxProfiler->setExpectations( $trxLimits['POST'], __METHOD__ );
+               DeferredUpdates::addCallableUpdate( function () use ( $trxProfiler, $trxLimits ) {
+                       $trxProfiler->setExpectations( $trxLimits['PostSend-POST'], __METHOD__ );
+               } );
 
                $data = null;
                $errors = $this->page->doRollback(
index c66e5d5..32156d8 100644 (file)
@@ -21,6 +21,7 @@
  */
 
 use Wikimedia\Rdbms\IDatabase;
+use MediaWiki\MediaWikiServices;
 
 /**
  * This abstract class implements many basic API functions, and is the base of
@@ -271,7 +272,7 @@ abstract class ApiBase extends ContextSource {
        private $mMainModule;
        /** @var string */
        private $mModuleName, $mModulePrefix;
-       private $mSlaveDB = null;
+       private $mReplicaDB = null;
        private $mParamCache = [];
        /** @var array|null|bool */
        private $mModuleSource = false;
@@ -647,11 +648,11 @@ abstract class ApiBase extends ContextSource {
         * @return IDatabase
         */
        protected function getDB() {
-               if ( !isset( $this->mSlaveDB ) ) {
-                       $this->mSlaveDB = wfGetDB( DB_REPLICA, 'api' );
+               if ( !isset( $this->mReplicaDB ) ) {
+                       $this->mReplicaDB = wfGetDB( DB_REPLICA, 'api' );
                }
 
-               return $this->mSlaveDB;
+               return $this->mReplicaDB;
        }
 
        /**
@@ -2069,11 +2070,41 @@ abstract class ApiBase extends ContextSource {
                foreach ( (array)$actions as $action ) {
                        $errors = array_merge( $errors, $title->getUserPermissionsErrors( $action, $user ) );
                }
+
                if ( $errors ) {
+                       // track block notices
+                       if ( $this->getConfig()->get( 'EnableBlockNoticeStats' ) ) {
+                               $this->trackBlockNotices( $errors );
+                       }
+
                        $this->dieStatus( $this->errorArrayToStatus( $errors, $user ) );
                }
        }
 
+       /**
+        * Keep track of errors messages resulting from a block
+        *
+        * @param array $errors
+        */
+       private function trackBlockNotices( array $errors ) {
+               $errorMessageKeys = [
+                       'blockedtext',
+                       'blockedtext-partial',
+                       'autoblockedtext',
+                       'systemblockedtext',
+               ];
+
+               $statsd = MediaWikiServices::getInstance()->getStatsdDataFactory();
+
+               foreach ( $errors as $error ) {
+                       if ( in_array( $error[0], $errorMessageKeys ) ) {
+                               $wiki = $this->getConfig()->get( 'DBname' );
+                               $statsd->increment( 'BlockNotices.' . $wiki . '.MediaWikiApi.returned' );
+                               break;
+                       }
+               }
+       }
+
        /**
         * Will only set a warning instead of failing if the global $wgDebugAPI
         * is set to true. Otherwise behaves exactly as self::dieWithError().
index 76b7bce..393f435 100644 (file)
@@ -30,11 +30,15 @@ class ApiComparePages extends ApiBase {
        /** @var RevisionStore */
        private $revisionStore;
 
+       /** @var \MediaWiki\Revision\SlotRoleRegistry */
+       private $slotRoleRegistry;
+
        private $guessedTitle = false, $props;
 
        public function __construct( ApiMain $mainModule, $moduleName, $modulePrefix = '' ) {
                parent::__construct( $mainModule, $moduleName, $modulePrefix );
                $this->revisionStore = MediaWikiServices::getInstance()->getRevisionStore();
+               $this->slotRoleRegistry = MediaWikiServices::getInstance()->getSlotRoleRegistry();
        }
 
        public function execute() {
@@ -272,9 +276,8 @@ class ApiComparePages extends ApiBase {
                }
 
                $guessedTitle = $this->guessTitle();
-               if ( $guessedTitle && $role === SlotRecord::MAIN ) {
-                       // @todo: Use SlotRoleRegistry and do this for all slots
-                       return $guessedTitle->getContentModel();
+               if ( $guessedTitle ) {
+                       return $this->slotRoleRegistry->getRoleHandler( $role )->getDefaultModel( $guessedTitle );
                }
 
                if ( isset( $params["fromcontentmodel-$role"] ) ) {
@@ -582,10 +585,7 @@ class ApiComparePages extends ApiBase {
        }
 
        public function getAllowedParams() {
-               $slotRoles = MediaWikiServices::getInstance()->getSlotRoleStore()->getMap();
-               if ( !in_array( SlotRecord::MAIN, $slotRoles, true ) ) {
-                       $slotRoles[] = SlotRecord::MAIN;
-               }
+               $slotRoles = $this->slotRoleRegistry->getKnownRoles();
                sort( $slotRoles, SORT_STRING );
 
                // Parameters for the 'from' and 'to' content
index 847afd8..a37ecc2 100644 (file)
@@ -58,6 +58,26 @@ class ApiErrorFormatter {
                $this->format = $format;
        }
 
+       /**
+        * Test whether a code is a valid API error code
+        *
+        * A valid code contains only ASCII letters, numbers, underscore, and
+        * hyphen and is not the empty string.
+        *
+        * For backwards compatibility, any code beginning 'internal_api_error_' is
+        * also allowed.
+        *
+        * @param string $code
+        * @return bool
+        */
+       public static function isValidApiCode( $code ) {
+               return is_string( $code ) && (
+                       preg_match( '/^[a-zA-Z0-9_-]+$/', $code ) ||
+                       // TODO: Deprecate this
+                       preg_match( '/^internal_api_error_[^\0\r\n]+$/', $code )
+               );
+       }
+
        /**
         * Return a formatter like this one but with a different format
         *
@@ -191,6 +211,7 @@ class ApiErrorFormatter {
                                if ( !isset( $options['code'] ) ) {
                                        $class = preg_replace( '#^Wikimedia\\\Rdbms\\\#', '', get_class( $exception ) );
                                        $options['code'] = 'internal_api_error_' . $class;
+                                       $options['data']['errorclass'] = get_class( $exception );
                                }
                        }
                        $params = [ wfEscapeWikiText( $exception->getMessage() ) ];
index 5bf8da9..9edf929 100644 (file)
@@ -172,33 +172,29 @@ class ApiFeedContributions extends ApiBase {
         * @return string
         */
        protected function feedItemDesc( RevisionRecord $revision ) {
-               if ( $revision ) {
-                       $msg = wfMessage( 'colon-separator' )->inContentLanguage()->text();
-                       try {
-                               $content = $revision->getContent( SlotRecord::MAIN );
-                       } catch ( RevisionAccessException $e ) {
-                               $content = null;
-                       }
-
-                       if ( $content instanceof TextContent ) {
-                               // only textual content has a "source view".
-                               $html = nl2br( htmlspecialchars( $content->getNativeData() ) );
-                       } else {
-                               // XXX: we could get an HTML representation of the content via getParserOutput, but that may
-                               //     contain JS magic and generally may not be suitable for inclusion in a feed.
-                               //     Perhaps Content should have a getDescriptiveHtml method and/or a getSourceText method.
-                               // Compare also FeedUtils::formatDiffRow.
-                               $html = '';
-                       }
-
-                       $comment = $revision->getComment();
+               $msg = wfMessage( 'colon-separator' )->inContentLanguage()->text();
+               try {
+                       $content = $revision->getContent( SlotRecord::MAIN );
+               } catch ( RevisionAccessException $e ) {
+                       $content = null;
+               }
 
-                       return '<p>' . htmlspecialchars( $this->feedItemAuthor( $revision ) ) . $msg .
-                               htmlspecialchars( FeedItem::stripComment( $comment ? $comment->text : '' ) ) .
-                               "</p>\n<hr />\n<div>" . $html . '</div>';
+               if ( $content instanceof TextContent ) {
+                       // only textual content has a "source view".
+                       $html = nl2br( htmlspecialchars( $content->getNativeData() ) );
+               } else {
+                       // XXX: we could get an HTML representation of the content via getParserOutput, but that may
+                       //     contain JS magic and generally may not be suitable for inclusion in a feed.
+                       //     Perhaps Content should have a getDescriptiveHtml method and/or a getSourceText method.
+                       // Compare also FeedUtils::formatDiffRow.
+                       $html = '';
                }
 
-               return '';
+               $comment = $revision->getComment();
+
+               return '<p>' . htmlspecialchars( $this->feedItemAuthor( $revision ) ) . $msg .
+                       htmlspecialchars( FeedItem::stripComment( $comment ? $comment->text : '' ) ) .
+                       "</p>\n<hr />\n<div>" . $html . '</div>';
        }
 
        public function getAllowedParams() {
index d2a7db2..bc76f8f 100644 (file)
@@ -834,7 +834,11 @@ class ApiMain extends ApiBase {
                foreach ( $requestedHeaders as $rHeader ) {
                        $rHeader = strtolower( trim( $rHeader ) );
                        if ( !isset( $allowedAuthorHeaders[$rHeader] ) ) {
-                               wfDebugLog( 'api', 'CORS preflight failed on requested header: ' . $rHeader );
+                               LoggerFactory::getInstance( 'api-warning' )->warning(
+                                       'CORS preflight failed on requested header: {header}', [
+                                               'header' => $rHeader
+                                       ]
+                               );
                                return false;
                        }
                }
@@ -1025,8 +1029,10 @@ class ApiMain extends ApiBase {
                } else {
                        // Something is seriously wrong
                        $config = $this->getConfig();
+                       // TODO: Avoid embedding arbitrary class names in the error code.
                        $class = preg_replace( '#^Wikimedia\\\Rdbms\\\#', '', get_class( $e ) );
                        $code = 'internal_api_error_' . $class;
+                       $data = [ 'errorclass' => get_class( $e ) ];
                        if ( $config->get( 'ShowExceptionDetails' ) ) {
                                if ( $e instanceof ILocalizedException ) {
                                        $msg = $e->getMessageObject();
@@ -1040,7 +1046,7 @@ class ApiMain extends ApiBase {
                                $params = [ 'apierror-exceptioncaughttype', WebRequest::getRequestId(), get_class( $e ) ];
                        }
 
-                       $messages[] = ApiMessage::create( $params, $code );
+                       $messages[] = ApiMessage::create( $params, $code, $data );
                }
                return $messages;
        }
@@ -1077,7 +1083,15 @@ class ApiMain extends ApiBase {
                // Add errors from the exception
                $modulePath = $e instanceof ApiUsageException ? $e->getModulePath() : null;
                foreach ( $this->errorMessagesFromException( $e, 'error' ) as $msg ) {
-                       $errorCodes[$msg->getApiCode()] = true;
+                       if ( ApiErrorFormatter::isValidApiCode( $msg->getApiCode() ) ) {
+                               $errorCodes[$msg->getApiCode()] = true;
+                       } else {
+                               LoggerFactory::getInstance( 'api-warning' )->error( 'Invalid API error code "{code}"', [
+                                       'code' => $msg->getApiCode(),
+                                       'exception' => $e,
+                               ] );
+                               $errorCodes['<invalid-code>'] = true;
+                       }
                        $formatter->addError( $modulePath, $msg );
                }
                foreach ( $this->errorMessagesFromException( $e, 'warning' ) as $msg ) {
@@ -1464,9 +1478,14 @@ class ApiMain extends ApiBase {
                if ( $numLagged >= ceil( $replicaCount / 2 ) ) {
                        $laggedServers = implode( ', ', $laggedServers );
                        wfDebugLog(
-                               'api-readonly',
+                               'api-readonly', // Deprecate this channel in favor of api-warning?
                                "Api request failed as read only because the following DBs are lagged: $laggedServers"
                        );
+                       LoggerFactory::getInstance( 'api-warning' )->warning(
+                               "Api request failed as read only because the following DBs are lagged: {laggeddbs}", [
+                                       'laggeddbs' => $laggedServers,
+                               ]
+                       );
 
                        $this->dieWithError(
                                'readonly_lag',
@@ -1512,7 +1531,13 @@ class ApiMain extends ApiBase {
         * @param array $params An array with the request parameters
         */
        protected function setupExternalResponse( $module, $params ) {
+               $validMethods = [ 'GET', 'HEAD', 'POST', 'OPTIONS' ];
                $request = $this->getRequest();
+
+               if ( !in_array( $request->getMethod(), $validMethods ) ) {
+                       $this->dieWithError( 'apierror-invalidmethod', null, null, 405 );
+               }
+
                if ( !$request->wasPosted() && $module->mustBePosted() ) {
                        // Module requires POST. GET request might still be allowed
                        // if $wgDebugApi is true, otherwise fail.
index 18b6bc4..6894d28 100644 (file)
@@ -105,12 +105,15 @@ trait ApiMessageTrait {
                        } else {
                                $this->apiCode = $key;
                        }
+
+                       // Ensure the code is actually valid
+                       $this->apiCode = preg_replace( '/[^a-zA-Z0-9_-]/', '_', $this->apiCode );
                }
                return $this->apiCode;
        }
 
        public function setApiCode( $code, array $data = null ) {
-               if ( $code !== null && !( is_string( $code ) && $code !== '' ) ) {
+               if ( $code !== null && !ApiErrorFormatter::isValidApiCode( $code ) ) {
                        throw new InvalidArgumentException( "Invalid code \"$code\"" );
                }
 
index 7b4f15e..7a1c461 100644 (file)
@@ -43,8 +43,6 @@ class ApiQueryAllDeletedRevisions extends ApiQueryRevisionsBase {
         * @return void
         */
        protected function run( ApiPageSet $resultPageSet = null ) {
-               global $wgChangeTagsSchemaMigrationStage;
-
                // Before doing anything at all, let's check permissions
                $this->checkUserRightsAny( 'deletedhistory' );
 
@@ -127,11 +125,7 @@ class ApiQueryAllDeletedRevisions extends ApiQueryRevisionsBase {
                }
 
                if ( $this->fld_tags ) {
-                       $this->addTables( 'tag_summary' );
-                       $this->addJoinConds(
-                               [ 'tag_summary' => [ 'LEFT JOIN', [ 'ar_rev_id=ts_rev_id' ] ] ]
-                       );
-                       $this->addFields( 'ts_tags' );
+                       $this->addFields( [ 'ts_tags' => ChangeTags::makeTagSummarySubquery( 'archive' ) ] );
                }
 
                if ( !is_null( $params['tag'] ) ) {
@@ -139,16 +133,12 @@ class ApiQueryAllDeletedRevisions extends ApiQueryRevisionsBase {
                        $this->addJoinConds(
                                [ 'change_tag' => [ 'INNER JOIN', [ 'ar_rev_id=ct_rev_id' ] ] ]
                        );
-                       if ( $wgChangeTagsSchemaMigrationStage > MIGRATION_WRITE_BOTH ) {
-                               $changeTagDefStore = MediaWikiServices::getInstance()->getChangeTagDefStore();
-                               try {
-                                       $this->addWhereFld( 'ct_tag_id', $changeTagDefStore->getId( $params['tag'] ) );
-                               } catch ( NameTableAccessException $exception ) {
-                                       // Return nothing.
-                                       $this->addWhere( '1=0' );
-                               }
-                       } else {
-                               $this->addWhereFld( 'ct_tag', $params['tag'] );
+                       $changeTagDefStore = MediaWikiServices::getInstance()->getChangeTagDefStore();
+                       try {
+                               $this->addWhereFld( 'ct_tag_id', $changeTagDefStore->getId( $params['tag'] ) );
+                       } catch ( NameTableAccessException $exception ) {
+                               // Return nothing.
+                               $this->addWhere( '1=0' );
                        }
                }
 
index 922d2c3..5343c33 100644 (file)
@@ -140,11 +140,7 @@ class ApiQueryAllRevisions extends ApiQueryRevisionsBase {
                $this->addTimestampWhereRange( $tsField, $dir, $params['start'], $params['end'] );
 
                if ( $this->fld_tags ) {
-                       $this->addTables( 'tag_summary' );
-                       $this->addJoinConds(
-                               [ 'tag_summary' => [ 'LEFT JOIN', [ 'rev_id=ts_rev_id' ] ] ]
-                       );
-                       $this->addFields( 'ts_tags' );
+                       $this->addFields( [ 'ts_tags' => ChangeTags::makeTagSummarySubquery( 'revision' ) ] );
                }
 
                if ( $params['user'] !== null ) {
index 35cb83a..f4e7463 100644 (file)
@@ -418,7 +418,7 @@ class ApiQueryBacklinks extends ApiQueryGeneratorBase {
                if ( is_null( $resultPageSet ) ) {
                        // Try to add the result data in one go and pray that it fits
                        $code = $this->bl_code;
-                       $data = array_map( function ( $arr ) use ( $result, $code ) {
+                       $data = array_map( function ( $arr ) use ( $code ) {
                                if ( isset( $arr['redirlinks'] ) ) {
                                        $arr['redirlinks'] = array_values( $arr['redirlinks'] );
                                        ApiResult::setIndexedTagName( $arr['redirlinks'], $code );
index 8630561..fe01f03 100644 (file)
@@ -402,13 +402,15 @@ abstract class ApiQueryBase extends ApiBase {
        }
 
        /**
+        * @deprecated since 1.33, use LinkFilter::getQueryConditions() instead
         * @param string|null $query
         * @param string|null $protocol
         * @return null|string
         */
        public function prepareUrlQuerySearchString( $query = null, $protocol = null ) {
+               wfDeprecated( __METHOD__, '1.33' );
                $db = $this->getDB();
-               if ( !is_null( $query ) || $query != '' ) {
+               if ( $query !== null && $query !== '' ) {
                        if ( is_null( $protocol ) ) {
                                $protocol = 'http://';
                        }
index 3cd2ace..caaebc9 100644 (file)
@@ -187,7 +187,7 @@ class ApiQueryBlocks extends ApiQueryBase {
 
                $restrictions = [];
                if ( $fld_restrictions ) {
-                       $restrictions = $this->getRestrictionData( $res, $params['limit'] );
+                       $restrictions = self::getRestrictionData( $res, $params['limit'] );
                }
 
                $count = 0;
index 8f71c1c..9275a7c 100644 (file)
@@ -39,8 +39,6 @@ class ApiQueryDeletedRevisions extends ApiQueryRevisionsBase {
        }
 
        protected function run( ApiPageSet $resultPageSet = null ) {
-               global $wgChangeTagsSchemaMigrationStage;
-
                $user = $this->getUser();
                // Before doing anything at all, let's check permissions
                $this->checkUserRightsAny( 'deletedhistory' );
@@ -79,11 +77,7 @@ class ApiQueryDeletedRevisions extends ApiQueryRevisionsBase {
                }
 
                if ( $this->fld_tags ) {
-                       $this->addTables( 'tag_summary' );
-                       $this->addJoinConds(
-                               [ 'tag_summary' => [ 'LEFT JOIN', [ 'ar_rev_id=ts_rev_id' ] ] ]
-                       );
-                       $this->addFields( 'ts_tags' );
+                       $this->addFields( [ 'ts_tags' => ChangeTags::makeTagSummarySubquery( 'archive' ) ] );
                }
 
                if ( !is_null( $params['tag'] ) ) {
@@ -91,16 +85,12 @@ class ApiQueryDeletedRevisions extends ApiQueryRevisionsBase {
                        $this->addJoinConds(
                                [ 'change_tag' => [ 'INNER JOIN', [ 'ar_rev_id=ct_rev_id' ] ] ]
                        );
-                       if ( $wgChangeTagsSchemaMigrationStage > MIGRATION_WRITE_BOTH ) {
-                               $changeTagDefStore = MediaWikiServices::getInstance()->getChangeTagDefStore();
-                               try {
-                                       $this->addWhereFld( 'ct_tag_id', $changeTagDefStore->getId( $params['tag'] ) );
-                               } catch ( NameTableAccessException $exception ) {
-                                       // Return nothing.
-                                       $this->addWhere( '1=0' );
-                               }
-                       } else {
-                               $this->addWhereFld( 'ct_tag', $params['tag'] );
+                       $changeTagDefStore = MediaWikiServices::getInstance()->getChangeTagDefStore();
+                       try {
+                               $this->addWhereFld( 'ct_tag_id', $changeTagDefStore->getId( $params['tag'] ) );
+                       } catch ( NameTableAccessException $exception ) {
+                               // Return nothing.
+                               $this->addWhere( '1=0' );
                        }
                }
 
index e84b9b2..8540190 100644 (file)
@@ -36,8 +36,6 @@ class ApiQueryDeletedrevs extends ApiQueryBase {
        }
 
        public function execute() {
-               global $wgChangeTagsSchemaMigrationStage;
-
                // Before doing anything at all, let's check permissions
                $this->checkUserRightsAny( 'deletedhistory' );
 
@@ -133,11 +131,7 @@ class ApiQueryDeletedrevs extends ApiQueryBase {
                }
 
                if ( $fld_tags ) {
-                       $this->addTables( 'tag_summary' );
-                       $this->addJoinConds(
-                               [ 'tag_summary' => [ 'LEFT JOIN', [ 'ar_rev_id=ts_rev_id' ] ] ]
-                       );
-                       $this->addFields( 'ts_tags' );
+                       $this->addFields( [ 'ts_tags' => ChangeTags::makeTagSummarySubquery( 'archive' ) ] );
                }
 
                if ( !is_null( $params['tag'] ) ) {
@@ -145,16 +139,12 @@ class ApiQueryDeletedrevs extends ApiQueryBase {
                        $this->addJoinConds(
                                [ 'change_tag' => [ 'INNER JOIN', [ 'ar_rev_id=ct_rev_id' ] ] ]
                        );
-                       if ( $wgChangeTagsSchemaMigrationStage > MIGRATION_WRITE_BOTH ) {
-                               $changeTagDefStore = MediaWikiServices::getInstance()->getChangeTagDefStore();
-                               try {
-                                       $this->addWhereFld( 'ct_tag_id', $changeTagDefStore->getId( $params['tag'] ) );
-                               } catch ( NameTableAccessException $exception ) {
-                                       // Return nothing.
-                                       $this->addWhere( '1=0' );
-                               }
-                       } else {
-                               $this->addWhereFld( 'ct_tag', $params['tag'] );
+                       $changeTagDefStore = MediaWikiServices::getInstance()->getChangeTagDefStore();
+                       try {
+                               $this->addWhereFld( 'ct_tag_id', $changeTagDefStore->getId( $params['tag'] ) );
+                       } catch ( NameTableAccessException $exception ) {
+                               // Return nothing.
+                               $this->addWhere( '1=0' );
                        }
                }
 
index fc5d8a0..d508c55 100644 (file)
@@ -47,12 +47,12 @@ class ApiQueryExtLinksUsage extends ApiQueryGeneratorBase {
         */
        private function run( $resultPageSet = null ) {
                $params = $this->extractRequestParams();
+               $db = $this->getDB();
 
                $query = $params['query'];
                $protocol = self::getProtocolPrefix( $params['protocol'] );
 
-               $this->addTables( [ 'page', 'externallinks' ] ); // must be in this order for 'USE INDEX'
-               $this->addOption( 'USE INDEX', 'el_index' );
+               $this->addTables( [ 'page', 'externallinks' ] );
                $this->addWhere( 'page_id=el_from' );
 
                $miser_ns = [];
@@ -62,15 +62,46 @@ class ApiQueryExtLinksUsage extends ApiQueryGeneratorBase {
                        $this->addWhereFld( 'page_namespace', $params['namespace'] );
                }
 
-               // Normalize query to match the normalization applied for the externallinks table
-               $query = Parser::normalizeLinkUrl( $query );
+               $orderBy = [];
 
-               $whereQuery = $this->prepareUrlQuerySearchString( $query, $protocol );
+               if ( $query !== null && $query !== '' ) {
+                       if ( $protocol === null ) {
+                               $protocol = 'http://';
+                       }
+
+                       // Normalize query to match the normalization applied for the externallinks table
+                       $query = Parser::normalizeLinkUrl( $protocol . $query );
+
+                       $conds = LinkFilter::getQueryConditions( $query, [
+                               'protocol' => '',
+                               'oneWildcard' => true,
+                               'db' => $db
+                       ] );
+                       if ( !$conds ) {
+                               $this->dieWithError( 'apierror-badquery' );
+                       }
+                       $this->addWhere( $conds );
+                       if ( !isset( $conds['el_index_60'] ) ) {
+                               $orderBy[] = 'el_index_60';
+                       }
+               } else {
+                       $orderBy[] = 'el_index_60';
 
-               if ( $whereQuery !== null ) {
-                       $this->addWhere( $whereQuery );
+                       if ( $protocol !== null ) {
+                               $this->addWhere( 'el_index_60' . $db->buildLike( "$protocol", $db->anyString() ) );
+                       } else {
+                               // We're querying all protocols, filter out duplicate protocol-relative links
+                               $this->addWhere( $db->makeList( [
+                                       'el_to NOT' . $db->buildLike( '//', $db->anyString() ),
+                                       'el_index_60 ' . $db->buildLike( 'http://', $db->anyString() ),
+                               ], LIST_OR ) );
+                       }
                }
 
+               $orderBy[] = 'el_id';
+               $this->addOption( 'ORDER BY', $orderBy );
+               $this->addFields( $orderBy ); // Make sure
+
                $prop = array_flip( $params['prop'] );
                $fld_ids = isset( $prop['ids'] );
                $fld_title = isset( $prop['title'] );
@@ -88,10 +119,19 @@ class ApiQueryExtLinksUsage extends ApiQueryGeneratorBase {
                }
 
                $limit = $params['limit'];
-               $offset = $params['offset'];
                $this->addOption( 'LIMIT', $limit + 1 );
-               if ( isset( $offset ) ) {
-                       $this->addOption( 'OFFSET', $offset );
+
+               if ( $params['continue'] !== null ) {
+                       $cont = explode( '|', $params['continue'] );
+                       $this->dieContinueUsageIf( count( $cont ) !== count( $orderBy ) );
+                       $i = count( $cont ) - 1;
+                       $cond = $orderBy[$i] . ' >= ' . $db->addQuotes( rawurldecode( $cont[$i] ) );
+                       while ( $i-- > 0 ) {
+                               $field = $orderBy[$i];
+                               $v = $db->addQuotes( rawurldecode( $cont[$i] ) );
+                               $cond = "($field > $v OR ($field = $v AND $cond))";
+                       }
+                       $this->addWhere( $cond );
                }
 
                $res = $this->select( __METHOD__ );
@@ -102,7 +142,7 @@ class ApiQueryExtLinksUsage extends ApiQueryGeneratorBase {
                        if ( ++$count > $limit ) {
                                // We've reached the one extra which shows that there are
                                // additional pages to be had. Stop here...
-                               $this->setContinueEnumParameter( 'offset', $offset + $limit );
+                               $this->setContinue( $orderBy, $row );
                                break;
                        }
 
@@ -131,7 +171,7 @@ class ApiQueryExtLinksUsage extends ApiQueryGeneratorBase {
                                }
                                $fit = $result->addValue( [ 'query', $this->getModuleName() ], null, $vals );
                                if ( !$fit ) {
-                                       $this->setContinueEnumParameter( 'offset', $offset + $count - 1 );
+                                       $this->setContinue( $orderBy, $row );
                                        break;
                                }
                        } else {
@@ -145,6 +185,14 @@ class ApiQueryExtLinksUsage extends ApiQueryGeneratorBase {
                }
        }
 
+       private function setContinue( $orderBy, $row ) {
+               $fields = [];
+               foreach ( $orderBy as $field ) {
+                       $fields[] = strtr( $row->$field, [ '%' => '%25', '|' => '%7C' ] );
+               }
+               $this->setContinueEnumParameter( 'continue', implode( '|', $fields ) );
+       }
+
        public function getAllowedParams() {
                $ret = [
                        'prop' => [
@@ -157,8 +205,7 @@ class ApiQueryExtLinksUsage extends ApiQueryGeneratorBase {
                                ],
                                ApiBase::PARAM_HELP_MSG_PER_VALUE => [],
                        ],
-                       'offset' => [
-                               ApiBase::PARAM_TYPE => 'integer',
+                       'continue' => [
                                ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
                        ],
                        'protocol' => [
index 6c219d4..b5731a3 100644 (file)
@@ -37,6 +37,7 @@ class ApiQueryExternalLinks extends ApiQueryBase {
                }
 
                $params = $this->extractRequestParams();
+               $db = $this->getDB();
 
                $query = $params['query'];
                $protocol = ApiQueryExtLinksUsage::getProtocolPrefix( $params['protocol'] );
@@ -49,26 +50,64 @@ class ApiQueryExternalLinks extends ApiQueryBase {
                $this->addTables( 'externallinks' );
                $this->addWhereFld( 'el_from', array_keys( $this->getPageSet()->getGoodTitles() ) );
 
-               $whereQuery = $this->prepareUrlQuerySearchString( $query, $protocol );
-
-               if ( $whereQuery !== null ) {
-                       $this->addWhere( $whereQuery );
-               }
+               $orderBy = [];
 
                // Don't order by el_from if it's constant in the WHERE clause
                if ( count( $this->getPageSet()->getGoodTitles() ) != 1 ) {
-                       $this->addOption( 'ORDER BY', 'el_from' );
+                       $orderBy[] = 'el_from';
                }
 
-               // If we're querying all protocols, use DISTINCT to avoid repeating protocol-relative links twice
-               if ( $protocol === null ) {
-                       $this->addOption( 'DISTINCT' );
+               if ( $query !== null && $query !== '' ) {
+                       if ( $protocol === null ) {
+                               $protocol = 'http://';
+                       }
+
+                       // Normalize query to match the normalization applied for the externallinks table
+                       $query = Parser::normalizeLinkUrl( $protocol . $query );
+
+                       $conds = LinkFilter::getQueryConditions( $query, [
+                               'protocol' => '',
+                               'oneWildcard' => true,
+                               'db' => $db
+                       ] );
+                       if ( !$conds ) {
+                               $this->dieWithError( 'apierror-badquery' );
+                       }
+                       $this->addWhere( $conds );
+                       if ( !isset( $conds['el_index_60'] ) ) {
+                               $orderBy[] = 'el_index_60';
+                       }
+               } else {
+                       $orderBy[] = 'el_index_60';
+
+                       if ( $protocol !== null ) {
+                               $this->addWhere( 'el_index_60' . $db->buildLike( "$protocol", $db->anyString() ) );
+                       } else {
+                               // We're querying all protocols, filter out duplicate protocol-relative links
+                               $this->addWhere( $db->makeList( [
+                                       'el_to NOT' . $db->buildLike( '//', $db->anyString() ),
+                                       'el_index_60 ' . $db->buildLike( 'http://', $db->anyString() ),
+                               ], LIST_OR ) );
+                       }
                }
 
+               $orderBy[] = 'el_id';
+               $this->addOption( 'ORDER BY', $orderBy );
+               $this->addFields( $orderBy ); // Make sure
+
                $this->addOption( 'LIMIT', $params['limit'] + 1 );
-               $offset = $params['offset'] ?? 0;
-               if ( $offset ) {
-                       $this->addOption( 'OFFSET', $params['offset'] );
+
+               if ( $params['continue'] !== null ) {
+                       $cont = explode( '|', $params['continue'] );
+                       $this->dieContinueUsageIf( count( $cont ) !== count( $orderBy ) );
+                       $i = count( $cont ) - 1;
+                       $cond = $orderBy[$i] . ' >= ' . $db->addQuotes( rawurldecode( $cont[$i] ) );
+                       while ( $i-- > 0 ) {
+                               $field = $orderBy[$i];
+                               $v = $db->addQuotes( rawurldecode( $cont[$i] ) );
+                               $cond = "($field > $v OR ($field = $v AND $cond))";
+                       }
+                       $this->addWhere( $cond );
                }
 
                $res = $this->select( __METHOD__ );
@@ -78,7 +117,7 @@ class ApiQueryExternalLinks extends ApiQueryBase {
                        if ( ++$count > $params['limit'] ) {
                                // We've reached the one extra which shows that
                                // there are additional pages to be had. Stop here...
-                               $this->setContinueEnumParameter( 'offset', $offset + $params['limit'] );
+                               $this->setContinue( $orderBy, $row );
                                break;
                        }
                        $entry = [];
@@ -90,12 +129,20 @@ class ApiQueryExternalLinks extends ApiQueryBase {
                        ApiResult::setContentValue( $entry, 'url', $to );
                        $fit = $this->addPageSubItem( $row->el_from, $entry );
                        if ( !$fit ) {
-                               $this->setContinueEnumParameter( 'offset', $offset + $count - 1 );
+                               $this->setContinue( $orderBy, $row );
                                break;
                        }
                }
        }
 
+       private function setContinue( $orderBy, $row ) {
+               $fields = [];
+               foreach ( $orderBy as $field ) {
+                       $fields[] = strtr( $row->$field, [ '%' => '%25', '|' => '%7C' ] );
+               }
+               $this->setContinueEnumParameter( 'continue', implode( '|', $fields ) );
+       }
+
        public function getCacheMode( $params ) {
                return 'public';
        }
@@ -109,8 +156,7 @@ class ApiQueryExternalLinks extends ApiQueryBase {
                                ApiBase::PARAM_MAX => ApiBase::LIMIT_BIG1,
                                ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2
                        ],
-                       'offset' => [
-                               ApiBase::PARAM_TYPE => 'integer',
+                       'continue' => [
                                ApiBase::PARAM_HELP_MSG => 'api-help-param-continue',
                        ],
                        'protocol' => [
index 3cb55e4..edf7002 100644 (file)
@@ -42,8 +42,6 @@ class ApiQueryLogEvents extends ApiQueryBase {
                $fld_details = false, $fld_tags = false;
 
        public function execute() {
-               global $wgChangeTagsSchemaMigrationStage;
-
                $params = $this->extractRequestParams();
                $db = $this->getDB();
                $this->commentStore = CommentStore::getStore();
@@ -109,25 +107,19 @@ class ApiQueryLogEvents extends ApiQueryBase {
                }
 
                if ( $this->fld_tags ) {
-                       $this->addTables( 'tag_summary' );
-                       $this->addJoinConds( [ 'tag_summary' => [ 'LEFT JOIN', 'log_id=ts_log_id' ] ] );
-                       $this->addFields( 'ts_tags' );
+                       $this->addFields( [ 'ts_tags' => ChangeTags::makeTagSummarySubquery( 'logging' ) ] );
                }
 
                if ( !is_null( $params['tag'] ) ) {
                        $this->addTables( 'change_tag' );
                        $this->addJoinConds( [ 'change_tag' => [ 'INNER JOIN',
                                [ 'log_id=ct_log_id' ] ] ] );
-                       if ( $wgChangeTagsSchemaMigrationStage > MIGRATION_WRITE_BOTH ) {
-                               $changeTagDefStore = MediaWikiServices::getInstance()->getChangeTagDefStore();
-                               try {
-                                       $this->addWhereFld( 'ct_tag_id', $changeTagDefStore->getId( $params['tag'] ) );
-                               } catch ( NameTableAccessException $exception ) {
-                                       // Return nothing.
-                                       $this->addWhere( '1=0' );
-                               }
-                       } else {
-                               $this->addWhereFld( 'ct_tag', $params['tag'] );
+                       $changeTagDefStore = MediaWikiServices::getInstance()->getChangeTagDefStore();
+                       try {
+                               $this->addWhereFld( 'ct_tag_id', $changeTagDefStore->getId( $params['tag'] ) );
+                       } catch ( NameTableAccessException $exception ) {
+                               // Return nothing.
+                               $this->addWhere( '1=0' );
                        }
                }
 
index b1dcf0d..7c6b463 100644 (file)
@@ -143,8 +143,6 @@ class ApiQueryRecentChanges extends ApiQueryGeneratorBase {
         * @param ApiPageSet|null $resultPageSet
         */
        public function run( $resultPageSet = null ) {
-               global $wgChangeTagsSchemaMigrationStage;
-
                $user = $this->getUser();
                /* Get the parameters of the request. */
                $params = $this->extractRequestParams();
@@ -339,9 +337,7 @@ class ApiQueryRecentChanges extends ApiQueryGeneratorBase {
                        $resultPageSet && $params['generaterevisions'] );
 
                if ( $this->fld_tags ) {
-                       $this->addTables( 'tag_summary' );
-                       $this->addJoinConds( [ 'tag_summary' => [ 'LEFT JOIN', [ 'rc_id=ts_rc_id' ] ] ] );
-                       $this->addFields( 'ts_tags' );
+                       $this->addFields( [ 'ts_tags' => ChangeTags::makeTagSummarySubquery( 'recentchanges' ) ] );
                }
 
                if ( $this->fld_sha1 ) {
@@ -365,16 +361,12 @@ class ApiQueryRecentChanges extends ApiQueryGeneratorBase {
                if ( !is_null( $params['tag'] ) ) {
                        $this->addTables( 'change_tag' );
                        $this->addJoinConds( [ 'change_tag' => [ 'INNER JOIN', [ 'rc_id=ct_rc_id' ] ] ] );
-                       if ( $wgChangeTagsSchemaMigrationStage > MIGRATION_WRITE_BOTH ) {
-                               $changeTagDefStore = MediaWikiServices::getInstance()->getChangeTagDefStore();
-                               try {
-                                       $this->addWhereFld( 'ct_tag_id', $changeTagDefStore->getId( $params['tag'] ) );
-                               } catch ( NameTableAccessException $exception ) {
-                                       // Return nothing.
-                                       $this->addWhere( '1=0' );
-                               }
-                       } else {
-                               $this->addWhereFld( 'ct_tag', $params['tag'] );
+                       $changeTagDefStore = MediaWikiServices::getInstance()->getChangeTagDefStore();
+                       try {
+                               $this->addWhereFld( 'ct_tag_id', $changeTagDefStore->getId( $params['tag'] ) );
+                       } catch ( NameTableAccessException $exception ) {
+                               // Return nothing.
+                               $this->addWhere( '1=0' );
                        }
                }
 
index ac7ee0a..cb2f616 100644 (file)
@@ -84,7 +84,7 @@ class ApiQueryRevisions extends ApiQueryRevisionsBase {
        }
 
        protected function run( ApiPageSet $resultPageSet = null ) {
-               global $wgActorTableSchemaMigrationStage, $wgChangeTagsSchemaMigrationStage;
+               global $wgActorTableSchemaMigrationStage;
 
                $params = $this->extractRequestParams( false );
                $revisionStore = MediaWikiServices::getInstance()->getRevisionStore();
@@ -185,11 +185,7 @@ class ApiQueryRevisions extends ApiQueryRevisionsBase {
                }
 
                if ( $this->fld_tags ) {
-                       $this->addTables( 'tag_summary' );
-                       $this->addJoinConds(
-                               [ 'tag_summary' => [ 'LEFT JOIN', [ 'rev_id=ts_rev_id' ] ] ]
-                       );
-                       $this->addFields( 'ts_tags' );
+                       $this->addFields( [ 'ts_tags' => ChangeTags::makeTagSummarySubquery( 'revision' ) ] );
                }
 
                if ( $params['tag'] !== null ) {
@@ -197,16 +193,12 @@ class ApiQueryRevisions extends ApiQueryRevisionsBase {
                        $this->addJoinConds(
                                [ 'change_tag' => [ 'INNER JOIN', [ 'rev_id=ct_rev_id' ] ] ]
                        );
-                       if ( $wgChangeTagsSchemaMigrationStage > MIGRATION_WRITE_BOTH ) {
-                               $changeTagDefStore = MediaWikiServices::getInstance()->getChangeTagDefStore();
-                               try {
-                                       $this->addWhereFld( 'ct_tag_id', $changeTagDefStore->getId( $params['tag'] ) );
-                               } catch ( NameTableAccessException $exception ) {
-                                       // Return nothing.
-                                       $this->addWhere( '1=0' );
-                               }
-                       } else {
-                               $this->addWhereFld( 'ct_tag', $params['tag'] );
+                       $changeTagDefStore = MediaWikiServices::getInstance()->getChangeTagDefStore();
+                       try {
+                               $this->addWhereFld( 'ct_tag_id', $changeTagDefStore->getId( $params['tag'] ) );
+                       } catch ( NameTableAccessException $exception ) {
+                               // Return nothing.
+                               $this->addWhere( '1=0' );
                        }
                }
 
index c00010a..3d0a0fb 100644 (file)
@@ -616,10 +616,7 @@ abstract class ApiQueryRevisionsBase extends ApiQueryGeneratorBase {
        }
 
        public function getAllowedParams() {
-               $slotRoles = MediaWikiServices::getInstance()->getSlotRoleStore()->getMap();
-               if ( !in_array( SlotRecord::MAIN, $slotRoles, true ) ) {
-                       $slotRoles[] = SlotRecord::MAIN;
-               }
+               $slotRoles = MediaWikiServices::getInstance()->getSlotRoleRegistry()->getKnownRoles();
                sort( $slotRoles, SORT_STRING );
 
                return [
index f16f958..ed83130 100644 (file)
@@ -321,7 +321,7 @@ class ApiQueryUserContribs extends ApiQueryBase {
         * @param int $limit
         */
        private function prepareQuery( array $users, $limit ) {
-               global $wgActorTableSchemaMigrationStage, $wgChangeTagsSchemaMigrationStage;
+               global $wgActorTableSchemaMigrationStage;
 
                $this->resetQueryParams();
                $db = $this->getDB();
@@ -478,11 +478,7 @@ class ApiQueryUserContribs extends ApiQueryBase {
                $this->addFieldsIf( 'rc_patrolled', $this->fld_patrolled );
 
                if ( $this->fld_tags ) {
-                       $this->addTables( 'tag_summary' );
-                       $this->addJoinConds(
-                               [ 'tag_summary' => [ 'LEFT JOIN', [ $idField . ' = ts_rev_id' ] ] ]
-                       );
-                       $this->addFields( 'ts_tags' );
+                       $this->addFields( [ 'ts_tags' => ChangeTags::makeTagSummarySubquery( 'revision' ) ] );
                }
 
                if ( isset( $this->params['tag'] ) ) {
@@ -490,16 +486,12 @@ class ApiQueryUserContribs extends ApiQueryBase {
                        $this->addJoinConds(
                                [ 'change_tag' => [ 'INNER JOIN', [ $idField . ' = ct_rev_id' ] ] ]
                        );
-                       if ( $wgChangeTagsSchemaMigrationStage > MIGRATION_WRITE_BOTH ) {
-                               $changeTagDefStore = MediaWikiServices::getInstance()->getChangeTagDefStore();
-                               try {
-                                       $this->addWhereFld( 'ct_tag_id', $changeTagDefStore->getId( $this->params['tag'] ) );
-                               } catch ( NameTableAccessException $exception ) {
-                                       // Return nothing.
-                                       $this->addWhere( '1=0' );
-                               }
-                       } else {
-                               $this->addWhereFld( 'ct_tag', $this->params['tag'] );
+                       $changeTagDefStore = MediaWikiServices::getInstance()->getChangeTagDefStore();
+                       try {
+                               $this->addWhereFld( 'ct_tag_id', $changeTagDefStore->getId( $this->params['tag'] ) );
+                       } catch ( NameTableAccessException $exception ) {
+                               // Return nothing.
+                               $this->addWhere( '1=0' );
                        }
                }
        }
index db57f7e..10ba478 100644 (file)
@@ -59,6 +59,9 @@ class ApiRollback extends ApiBase {
                $trxLimits = $this->getConfig()->get( 'TrxProfilerLimits' );
                $trxProfiler = Profiler::instance()->getTransactionProfiler();
                $trxProfiler->setExpectations( $trxLimits['POST'], __METHOD__ );
+               DeferredUpdates::addCallableUpdate( function () use ( $trxProfiler, $trxLimits ) {
+                       $trxProfiler->setExpectations( $trxLimits['PostSend-POST'], __METHOD__ );
+               } );
 
                $retval = $pageObj->doRollback(
                        $this->getRbUser( $params ),
index c75238c..37a28d5 100644 (file)
        "apihelp-json-param-callback": "إذا تم تحديده، فسيقوم بإخراج الإخراج في استدعاء دالة معينة، للسلامة; سيتم تقييد جميع البيانات الخاصة بالمستخدم.",
        "apihelp-json-param-utf8": "إذا تم تحديده، يقوم بترميز معظم (وليس كل) الأحرف غير ASCII كـUTF-8 بدلا من استبدالها بتسلسلات الهروب السداسية العشرية، افتراضي عندما لا يكون <var>formatversion</var>  <kbd>1</kbd>.",
        "apihelp-json-param-ascii": "إذا تم تحديده، يشفر كل غير ASCII باستخدام تسلسلات الهروب السداسية العشرية، افتراضي عندما يكون <var>formatversion</var> <kbd>1</kbd>.",
-       "apihelp-json-param-formatversion": "تنسيق الإخراج: \n;1:تنسيق متوافق مع الإصدارات السابقة (مصفوفات منطقية بتنسيق XML، ومفاتيح  <samp>*</samp>  لعقد المحتوى، وما إلى ذلك).\n;2:التنسيق الحديث التجريبي، التفاصيل قد تتغير!\n;الأحدث: استخدم أحدث تنسيق (حاليا <kbd>2</kbd>)، قد يتغير دون سابق إنذار.",
+       "apihelp-json-param-formatversion": "تنسيق الإخراج: \n;1:تنسيق متوافق مع الإصدارات السابقة (مصفوفات منطقية بتنسيق XML، ومفاتيح  <samp>*</samp>  لعقد المحتوى، وما إلى ذلك).\n;2:التنسيق الحديث.\n;الأحدث: استخدم أحدث تنسيق (حاليا <kbd>2</kbd>)، قد يتغير دون سابق إنذار.",
        "apihelp-jsonfm-summary": "بيانات الإخراج بتنسيق JSON (الطباعة بـHTML).",
        "apihelp-none-summary": "عدم إخراج أي شيء.",
        "apihelp-php-summary": "بيانات الإخراج بتنسيق PHP المتسلسل.",
-       "apihelp-php-param-formatversion": "تنسيق الإخراج: \n;1:تنسيق متوافق مع الإصدارات السابقة (مصفوفات منطقية بتنسيق XML، ومفاتيح  <samp>*</samp>  لعقد المحتوى، وما إلى ذلك).\n;2:التنسيق الحديث التجريبي، التفاصيل قد تتغير!\n;الأحدث: استخدم أحدث تنسيق (حاليا <kbd>2</kbd>)، قد يتغير دون سابق إنذار.",
+       "apihelp-php-param-formatversion": "تنسيق الإخراج: \n;1:تنسيق متوافق مع الإصدارات السابقة (مصفوفات منطقية بتنسيق XML، ومفاتيح  <samp>*</samp>  لعقد المحتوى، وما إلى ذلك).\n;2:التنسيق الحديث.\n;الأحدث: استخدم أحدث تنسيق (حاليا <kbd>2</kbd>)، قد يتغير دون سابق إنذار.",
        "apihelp-phpfm-summary": "بيانات الإخراج بتنسيق JSON (الطباعة بـHTML).",
        "apihelp-rawfm-summary": "بيانات الإخراج، بما في ذلك عناصر تصحيح الأخطاء، بتنسيق JSON (الطباعة بـHTML).",
        "apihelp-xml-summary": "بيانات الإخراج بتنسيق XML.",
        "apierror-invalidexpiry": "وقت انتهاء الصلاحية غير صالح \"$1\".",
        "apierror-invalid-file-key": "ليس مفتاح ملف صالح.",
        "apierror-invalidlang": "رمز لغة غير صالح للوسيط <var>$1</var>.",
+       "apierror-invalidmethod": "طريقة HTTP غير صالحة; فكر في استخدام GET أو POST.",
        "apierror-invalidoldimage": "يحتوي الوسيط <var>oldimage</var> على تنسيق غير صالح.",
        "apierror-invalidparammix-cannotusewith": "لا يمكن استخدام الوسيط <kbd>$1</kbd> مع <kbd>$2</kbd>.",
        "apierror-invalidparammix-mustusewith": "يمكن استخدام الوسيط <kbd>$1</kbd> مع <kbd>$2</kbd> فقط.",
index e6f6baf..2b818e2 100644 (file)
@@ -19,7 +19,8 @@
                        "Luke081515",
                        "Eddie",
                        "Zenith",
-                       "Tacsipacsi"
+                       "Tacsipacsi",
+                       "FF11"
                ]
        },
        "apihelp-main-extended-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> Die MediaWiki-API ist eine ausgereifte und stabile Schnittstelle, die aktiv unterstützt und verbessert wird. Während wir versuchen, dies zu vermeiden, können wir gelegentlich Breaking Changes erforderlich machen. Abonniere die [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ MediaWiki-API-Ankündigungs-Mailingliste] für Mitteilungen zu Aktualisierungen.\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<p class=\"mw-apisandbox-link\"><strong>Testen:</strong> Zum einfachen Testen von API-Anfragen, siehe [[Special:ApiSandbox]].</p>",
        "apihelp-query+filearchive-example-simple": "Eine Liste aller gelöschten Dateien auflisten",
        "apihelp-query+filerepoinfo-summary": "Gebe Metainformationen über Bild-Repositorien zurück, die im Wiki eingerichtet sind.",
        "apihelp-query+filerepoinfo-paramvalue-prop-displayname": "Der menschenlesbare Name des Repositoriumwikis.",
+       "apihelp-query+filerepoinfo-paramvalue-prop-initialCapital": "Ob Dateinamen implizit mit einem Großbuchstaben beginnen.",
        "apihelp-query+filerepoinfo-paramvalue-prop-local": "Ob dieses Repositorium das lokale ist oder nicht.",
        "apihelp-query+filerepoinfo-paramvalue-prop-rootUrl": "Wurzel-URL-Pfad für Bildpfade.",
        "apihelp-query+filerepoinfo-paramvalue-prop-scriptDirUrl": "Wurzel-URL-Pfad für die MediaWiki-Installation des Repositoriumwikis.",
        "apihelp-query+info-paramvalue-prop-varianttitles": "Gibt den Anzeigetitel in allen Varianten der Sprache des Websiteinhalts aus.",
        "apihelp-query+info-param-testactions": "Überprüft, ob der aktuelle Benutzer gewisse Aktionen auf der Seite ausführen kann.",
        "apihelp-query+info-paramvalue-testactionsdetail-boolean": "Gibt einen booleschen Wert für jede Aktion zurück.",
+       "apihelp-query+info-paramvalue-testactionsdetail-full": "Gibt Nachrichten zurück, die erklären, warum diese Aktion nicht erlaubt ist oder ein leeres Array, wenn sie erlaubt ist.",
        "apihelp-query+info-paramvalue-testactionsdetail-quick": "Wie <kbd>full</kbd>, aber mit Überspringen von Aufwandsüberprüfungen.",
        "apihelp-query+info-example-simple": "Ruft Informationen über die Seite <kbd>Hauptseite</kbd> ab.",
        "apihelp-query+iwbacklinks-summary": "Findet alle Seiten, die auf einen angegebenen Interwikilink verlinken.",
        "apihelp-query+langlinks-paramvalue-prop-url": "Ergänzt die vollständige URL.",
        "apihelp-query+langlinks-paramvalue-prop-autonym": "Ergänzt den Namen der Muttersprache.",
        "apihelp-query+langlinks-param-dir": "Die Auflistungsrichtung.",
+       "apihelp-query+langlinks-param-inlanguagecode": "Sprachcode für lokalisierte Sprachnamen.",
        "apihelp-query+links-summary": "Gibt alle Links von den angegebenen Seiten zurück.",
        "apihelp-query+links-param-namespace": "Zeigt nur Links in diesen Namensräumen.",
        "apihelp-query+links-param-limit": "Wie viele Links zurückgegeben werden sollen.",
        "apihelp-query+logevents-param-type": "Filtert nur Logbucheinträge mit diesem Typ heraus.",
        "apihelp-query+logevents-param-start": "Der Zeitstempel, bei dem die Aufzählung beginnen soll.",
        "apihelp-query+logevents-param-end": "Der Zeitstempel, bei dem die Aufzählung enden soll.",
+       "apihelp-query+logevents-param-title": "Filtert Einträge auf solche, die einer Seite ähnlich sind.",
        "apihelp-query+logevents-param-prefix": "Filtert Einträge, die mit diesem Präfix beginnen.",
+       "apihelp-query+logevents-param-tag": "Listet nur Ereigniseinträge auf, die mit dieser Markierung markiert sind.",
        "apihelp-query+logevents-param-limit": "Wie viele Ereigniseinträge insgesamt zurückgegeben werden sollen.",
        "apihelp-query+logevents-example-simple": "Listet die letzten Logbuch-Ereignisse auf.",
        "apihelp-query+pagepropnames-param-limit": "Die maximale Anzahl zurückzugebender Namen.",
        "apihelp-query+pagepropnames-example-simple": "Ruft die ersten 10 Eigenschaftsnamen auf.",
        "apihelp-query+pageswithprop-paramvalue-prop-ids": "Fügt die Seitenkennung hinzu.",
+       "apihelp-query+pageswithprop-paramvalue-prop-title": "Ergänzt den Titel und die Namensraumkennung der Seite.",
        "apihelp-query+pageswithprop-paramvalue-prop-value": "Ergänzt den Wert der Seiteneigenschaft.",
        "apihelp-query+pageswithprop-param-limit": "Die maximale Anzahl zurückzugebender Seiten.",
        "apihelp-query+pageswithprop-param-dir": "In welche Richtung sortiert werden soll.",
        "apihelp-query+prefixsearch-param-profile": "Zu verwendendes Suchprofil.",
        "apihelp-query+protectedtitles-summary": "Listet alle Titel auf, die vor einer Erstellung geschützt sind.",
        "apihelp-query+protectedtitles-param-namespace": "Listet nur Titel in diesen Namensräumen auf.",
+       "apihelp-query+protectedtitles-param-level": "Listet nur Titel mit diesen Schutzstufen auf.",
        "apihelp-query+protectedtitles-param-limit": "Wie viele Seiten insgesamt zurückgegeben werden sollen.",
        "apihelp-query+protectedtitles-param-start": "Startet die Auflistung bei diesem Schutz-Zeitstempel.",
        "apihelp-query+protectedtitles-param-end": "Stoppt die Auflistung bei diesem Schutz-Zeitstempel.",
        "apihelp-query+protectedtitles-param-prop": "Zurückzugebende Eigenschaften:",
        "apihelp-query+protectedtitles-paramvalue-prop-timestamp": "Ergänzt den Zeitstempel, wann der Schutz hinzugefügt wurde.",
+       "apihelp-query+protectedtitles-paramvalue-prop-comment": "Ergänzt den Kommentar für den Schutz.",
+       "apihelp-query+protectedtitles-paramvalue-prop-parsedcomment": "Ergänzt den geparsten Kommentar für den Schutz.",
        "apihelp-query+protectedtitles-paramvalue-prop-level": "Ergänzt den Schutzstatus.",
        "apihelp-query+protectedtitles-example-simple": "Listet geschützte Titel auf.",
        "apihelp-query+querypage-param-limit": "Anzahl der zurückzugebenden Ergebnisse.",
        "apihelp-query+random-summary": "Ruft einen Satz an zufälligen Seiten ab.",
+       "apihelp-query+random-param-namespace": "Gibt nur Seiten in diesen Namensräumen zurück.",
        "apihelp-query+recentchanges-summary": "Listet die letzten Änderungen auf.",
        "apihelp-query+recentchanges-param-user": "Listet nur Änderungen von diesem Benutzer auf.",
        "apihelp-query+recentchanges-param-excludeuser": "Listet keine Änderungen von diesem Benutzer auf.",
        "apierror-filedoesnotexist": "Die Datei ist nicht vorhanden.",
        "apierror-import-unknownerror": "Unbekannter Fehler beim Importieren: $1.",
        "apierror-invalid-file-key": "Kein gültiger Dateischlüssel.",
+       "apierror-invalidmethod": "Ungültige HTTP-Methode. Ziehe in Erwägung, GET oder POST zu verwenden.",
        "apierror-invalidsection": "Der Parameter <var>section</var> muss eine gültige Abschnittskennung oder <kbd>new</kbd> sein.",
        "apierror-invaliduserid": "Die Benutzerkennung <var>$1</var> ist nicht gültig.",
        "apierror-maxbytes": "Der Parameter <var>$1</var> kann nicht länger sein als {{PLURAL:$2|ein Byte|$2 Bytes}}",
index 83bb6e6..3848786 100644 (file)
        "apihelp-json-param-callback": "If specified, wraps the output into a given function call. For safety, all user-specific data will be restricted.",
        "apihelp-json-param-utf8": "If specified, encodes most (but not all) non-ASCII characters as UTF-8 instead of replacing them with hexadecimal escape sequences. Default when <var>formatversion</var> is not <kbd>1</kbd>.",
        "apihelp-json-param-ascii": "If specified, encodes all non-ASCII using hexadecimal escape sequences. Default when <var>formatversion</var> is <kbd>1</kbd>.",
-       "apihelp-json-param-formatversion": "Output formatting:\n;1:Backwards-compatible format (XML-style booleans, <samp>*</samp> keys for content nodes, etc.).\n;2:Experimental modern format. Details may change!\n;latest:Use the latest format (currently <kbd>2</kbd>), may change without warning.",
+       "apihelp-json-param-formatversion": "Output formatting:\n;1:Backwards-compatible format (XML-style booleans, <samp>*</samp> keys for content nodes, etc.).\n;2:Modern format.\n;latest:Use the latest format (currently <kbd>2</kbd>), may change without warning.",
        "apihelp-jsonfm-summary": "Output data in JSON format (pretty-print in HTML).",
        "apihelp-none-summary": "Output nothing.",
        "apihelp-php-summary": "Output data in serialized PHP format.",
-       "apihelp-php-param-formatversion": "Output formatting:\n;1:Backwards-compatible format (XML-style booleans, <samp>*</samp> keys for content nodes, etc.).\n;2:Experimental modern format. Details may change!\n;latest:Use the latest format (currently <kbd>2</kbd>), may change without warning.",
+       "apihelp-php-param-formatversion": "Output formatting:\n;1:Backwards-compatible format (XML-style booleans, <samp>*</samp> keys for content nodes, etc.).\n;2:Modern format.\n;latest:Use the latest format (currently <kbd>2</kbd>), may change without warning.",
        "apihelp-phpfm-summary": "Output data in serialized PHP format (pretty-print in HTML).",
        "apihelp-rawfm-summary": "Output data, including debugging elements, in JSON format (pretty-print in HTML).",
        "apihelp-xml-summary": "Output data in XML format.",
        "apierror-invalidexpiry": "Invalid expiry time \"$1\".",
        "apierror-invalid-file-key": "Not a valid file key.",
        "apierror-invalidlang": "Invalid language code for parameter <var>$1</var>.",
+       "apierror-invalidmethod": "Invalid HTTP method. Consider using GET or POST.",
        "apierror-invalidoldimage": "The <var>oldimage</var> parameter has an invalid format.",
        "apierror-invalidparammix-cannotusewith": "The <kbd>$1</kbd> parameter cannot be used with <kbd>$2</kbd>.",
        "apierror-invalidparammix-mustusewith": "The <kbd>$1</kbd> parameter may only be used with <kbd>$2</kbd>.",
index f807411..31c9d8f 100644 (file)
                        "Luzcaru",
                        "Javiersanp",
                        "KATRINE1992",
-                       "Adjen"
+                       "Adjen",
+                       "Tiberius1701"
                ]
        },
-       "apihelp-main-extended-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> Todas las funciones mostradas en esta página deberían estar funcionando, pero la API aún está en desarrollo activo, y puede cambiar en cualquier momento. Suscribase a [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ the mediawiki-api-announce mailing list] para aviso de actualizaciones.\n\n<strong>Erroneous requests:</strong> Cuando se envían solicitudes erróneas a la API, se enviará un encabezado HTTP con la clave \"MediaWiki-API-Error\" y, luego, el valor del encabezado y el código de error devuelto se establecerán en el mismo valor. Para más información ver [[mw:Special:MyLanguage/API:Errors_and_warnings|API: Errors and warnings]].\n\n<strong>Testing:</strong> Para facilitar la comprobación de las solicitudes de API, consulte [[Special:ApiSandbox]].",
+       "apihelp-main-extended-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 correo]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce Anuncios API]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Errores y peticiones]\n</div>\n<strong>Estado:</strong> La API de MediaWiki es una interfaz madura y estable que se mejora y prueba activamente. Aunque tratamos de evitarlo, es posible que ocasionalmente debamos hacer cambios importantes; Suscribase a la [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ lista de correo the mediawiki-api-announce] para recibir avisos de actualizaciones.\n\n<strong>Solicitudes erróneas:</strong> Cuando se envían solicitudes erróneas a la API, se enviará un encabezado HTTP con la clave \"MediaWiki-API-Error\" y, luego, el valor del encabezado y el código de error devuelto se establecerán en el mismo valor. Para obtener más información, consulte [[mw:Special:MyLanguage/API:Errors_and_warnings|API: Errores y advertencias]].\n\n<p class=\"mw-apisandbox-link\"><strong>Pruebas:</strong> Para facilitar la comprobación de las solicitudes de API, consulte [[Special:ApiSandbox]].</p>",
        "apihelp-main-param-action": "Qué acción se realizará.",
        "apihelp-main-param-format": "El formato de la salida.",
-       "apihelp-main-param-maxlag": "El retardo máximo puede utilizarse cuando MediaWiki se instala en una agrupación replicada de bases de datos. Para guardar las acciones que causan más retardo de replicación de sitio, este parámetro puede hacer que el cliente espere hasta que el retardo de replicación sea menor que el valor especificado. En caso de un retardo excesivo, se devuelve el código de error <samp>maxlag</samp> con un mensaje como <samp>Esperando a $host: $lag segundos de retardo</samp>.<br />Consulta [[mw:Special:MyLanguage/Manual:Maxlag_parameter|Manual: parámetro Maxlag]] para más información.",
+       "apihelp-main-param-maxlag": "Se puede usar el retardo máximo cuando se instala MediaWiki en un clúster replicado de base de datos. Para evitar acciones que causen más retardo en la replicación del sitio, este parámetro puede hacer que el cliente espere hasta que el retardo en la replicación sea menor que el valor especificado. En caso de retardo excesivo, se devuelve el código de error <samp>maxlag</samp> con un mensaje como <samp>Esperando a $host: $lag segundos de retardo</samp>.<br />Consulta [[mw:Special:MyLanguage/Manual:Maxlag_parameter|Manual: parámetro Maxlag]] para más información.",
        "apihelp-main-param-smaxage": "Establece la cabecera HTTP <code>s-maxage</code> de control de antememoria a esta cantidad de segundos. Los errores nunca se almacenan en la antememoria.",
        "apihelp-main-param-maxage": "Establece la cabecera HTTP <code>max-age</code> de control de antememoria a esta cantidad de segundos. Los errores nunca se almacenan en la antememoria.",
        "apihelp-main-param-assert": "Comprobar que el usuario haya iniciado sesión si el valor es <kbd>user</kbd> o si tiene el permiso de bot si es <kbd>bot</kbd>.",
@@ -89,7 +90,7 @@
        "apihelp-compare-param-toid": "Segunda identificador de página para comparar.",
        "apihelp-compare-param-torev": "Segunda revisión para comparar.",
        "apihelp-compare-param-tosection": "Solamente usar la sección especificada del contenido 'to' especificado.",
-       "apihelp-compare-param-prop": "Cuáles fragmentos de información se obtendrán.",
+       "apihelp-compare-param-prop": "Qué fragmentos de información se obtendrán.",
        "apihelp-compare-paramvalue-prop-diff": "El HTML de las diferencias.",
        "apihelp-compare-paramvalue-prop-diffsize": "El tamaño del HTML de las diferencias, en bytes.",
        "apihelp-compare-example-1": "Crear una diferencia entre las revisiones 1 y 2.",
        "apihelp-delete-param-watchlist": "Añadir o quitar incondicionalmente la página de la lista de seguimiento del usuario actual, usar preferencias o no cambiar el estado de seguimiento.",
        "apihelp-delete-param-unwatch": "Quitar la página de la lista de seguimiento del usuario actual.",
        "apihelp-delete-param-oldimage": "El nombre de la imagen antigua es proporcionado conforme a lo dispuesto por [[Special:ApiHelp/query+imageinfo|action=query&prop=imageinfo&iiprop=archivename]].",
-       "apihelp-delete-example-simple": "Borrar <kbd>Main Page</kbd>.",
-       "apihelp-delete-example-reason": "Eliminar <kbd>Main Page</kbd> con el motivo <kbd>Preparing for move</kbd>.",
+       "apihelp-delete-example-simple": "Borrar <kbd>Pagina principal</kbd>.",
+       "apihelp-delete-example-reason": "Eliminar <kbd>Main Page</kbd> con el motivo <kbd>Preparándose para traslado</kbd>.",
        "apihelp-disabled-summary": "Se desactivó este módulo.",
        "apihelp-edit-summary": "Crear y editar páginas.",
        "apihelp-edit-param-title": "Título de la página a editar. No se puede utilizar junto a <var>$1pageid</var>.",
        "apihelp-edit-param-tags": "Cambia las etiquetas para aplicarlas a la revisión.",
        "apihelp-edit-param-minor": "Edición menor.",
        "apihelp-edit-param-notminor": "Edición no menor.",
-       "apihelp-edit-param-bot": "Marcar esta como una edición de robot.",
+       "apihelp-edit-param-bot": "Marcar esta como una edición de bot.",
        "apihelp-edit-param-basetimestamp": "Marca de tiempo de la revisión base, usada para detectar conflictos de edición. Se puede obtener mediante [[Special:ApiHelp/query+revisions|action=query&prop=revisions&rvprop=timestamp]]",
        "apihelp-edit-param-starttimestamp": "Marca de tiempo de cuando empezó el proceso de edición, usada para detectar conflictos de edición. Se puede obtener un valor apropiado usando <var>[[Special:ApiHelp/main|curtimestamp]]</var> cuando comiences el proceso de edición (por ejemplo, al cargar el contenido de la página por editar).",
        "apihelp-edit-param-recreate": "Reemplazar los errores acerca de la página de haber sido eliminados en el ínterin.",
        "apihelp-edit-example-undo": "Deshacer intervalo de revisiones 13579-13585 con resumen automático",
        "apihelp-emailuser-summary": "Enviar un mensaje de correo electrónico a un usuario.",
        "apihelp-emailuser-param-target": "Cuenta de usuario destinatario.",
-       "apihelp-emailuser-param-subject": "Cabecera de asunto.",
+       "apihelp-emailuser-param-subject": "Cabecera del asunto.",
        "apihelp-emailuser-param-text": "Cuerpo del mensaje.",
        "apihelp-emailuser-param-ccme": "Enviarme una copia de este mensaje.",
        "apihelp-emailuser-example-email": "Enviar un correo al usuario <kbd>WikiSysop</kbd> con el texto <kbd>Content</kbd>.",
        "apihelp-expandtemplates-summary": "Expande todas las plantillas en wikitexto.",
        "apihelp-expandtemplates-param-title": "Título de la página.",
-       "apihelp-expandtemplates-param-text": "Sintaxis wiki que se convertirá.",
+       "apihelp-expandtemplates-param-text": "Wikitexto que se convertirá.",
        "apihelp-expandtemplates-param-revid": "Id. de revisión, para <code><nowiki>{{REVISIONID}}</nowiki></code> y variables similares.",
        "apihelp-expandtemplates-param-prop": "Qué elementos de información se utilizan para llegar.\n\nTenga en cuenta que si no se seleccionan los valores, el resultado contendrá el wikitexto, pero la salida será en un formato obsoleto.",
        "apihelp-expandtemplates-paramvalue-prop-wikitext": "El wikitexto expandido.",
        "apihelp-query+watchlist-paramvalue-prop-tags": "Enumera las etiquetas de la entrada.",
        "apihelp-query+watchlist-param-show": "Muestra solo los elementos que cumplan estos criterios. Por ejemplo, para ver solo ediciones menores realizadas por usuarios conectados, introduce $1show=minor|!anon.",
        "apihelp-query+watchlist-param-type": "Qué tipos de cambios mostrar:",
-       "apihelp-query+watchlist-paramvalue-type-edit": "Ediciones comunes a páginas",
+       "apihelp-query+watchlist-paramvalue-type-edit": "Ediciones comunes en páginas",
        "apihelp-query+watchlist-paramvalue-type-external": "Cambios externos.",
        "apihelp-query+watchlist-paramvalue-type-new": "Creaciones de páginas.",
        "apihelp-query+watchlist-paramvalue-type-log": "Entradas del registro.",
index 1af75a0..d7c4ee7 100644 (file)
        "apihelp-json-param-callback": "Si spécifié, inclut la sortie dans l’appel d’une fonction fournie. Pour plus de sûreté, toutes les données spécifiques à l’utilisateur seront restreintes.",
        "apihelp-json-param-utf8": "Si spécifié, encode la plupart (mais pas tous) des caractères non ASCII en URF-8 au lieu de les remplacer par leur séquence d’échappement hexadécimale. Valeur par défaut quand <var>formatversion</var> ne vaut pas <kbd>1</kbd>.",
        "apihelp-json-param-ascii": "Si spécifié, encode toutes ses séquences d’échappement non ASCII utilisant l’hexadécimal. Valeur par défaut quand <var>formatversion</var> vaut <kbd>1</kbd>.",
-       "apihelp-json-param-formatversion": "Mise en forme de sortie :\n;1:Format rétro-compatible (booléens de style XML, clés <samp>*</samp> pour les nœuds de contenu, etc.).\n;2:Format moderne expérimental. Des détails peuvent changer !\n;latest:Utilise le dernier format (actuellement <kbd>2</kbd>), peut changer sans avertissement.",
+       "apihelp-json-param-formatversion": "Mise en forme de sortie :\n;1:Format rétro-compatible (booléens de style XML, clés <samp>*</samp> pour les nœuds de contenu, etc.).\n;2:Format moderne.\n;latest:Utilise le dernier format (actuellement <kbd>2</kbd>), peut changer sans avertissement.",
        "apihelp-jsonfm-summary": "Extraire les données au format JSON (affiché proprement en HTML).",
        "apihelp-none-summary": "Ne rien extraire.",
        "apihelp-php-summary": "Extraire les données au format sérialisé de PHP.",
-       "apihelp-php-param-formatversion": "Mise en forme de la sortie :\n;1:Format rétro-compatible (bool&ens de style XML, clés <samp>*</samp> pour les nœuds de contenu, etc.).\n;2:Format moderne expérimental. Des détails peuvent changer !\n;latest:Utilise le dernier format (actuellement <kbd>2</kbd>), peut changer sans avertissement.",
+       "apihelp-php-param-formatversion": "Mise en forme de la sortie :\n;1:format rétro-compatible (booléens de style XML, clés <samp>*</samp> pour les nœuds de contenu, etc.).\n;2:format moderne.\n;latest:utilise le dernier format (actuellement <kbd>2</kbd>), peut changer sans avertissement.",
        "apihelp-phpfm-summary": "Extraire les données au format sérialisé de PHP (affiché proprement en HTML).",
        "apihelp-rawfm-summary": "Extraire les données, y compris les éléments de débogage, au format JSON (affiché proprement en HTML).",
        "apihelp-xml-summary": "Extraire les données au format XML.",
        "apierror-invalidexpiry": "Heure d'expiration invalide \"$1\".",
        "apierror-invalid-file-key": "Ne correspond pas à une clé valide de fichier.",
        "apierror-invalidlang": "Code de langue non valide pour le paramètre <var>$1</var>.",
+       "apierror-invalidmethod": "Méthode HTTP non valide. Seul GET ou POST est autorisé.",
        "apierror-invalidoldimage": "Le paramètre <var>oldimage</var> a un format non valide.",
        "apierror-invalidparammix-cannotusewith": "Le paramètre <kbd>$1</kbd> ne peut pas être utilisé avec <kbd>$2</kbd>.",
        "apierror-invalidparammix-mustusewith": "Le paramètre <kbd>$1</kbd> ne peut être utilisé qu’avec <kbd>$2</kbd>.",
index 1211693..4258674 100644 (file)
@@ -38,6 +38,9 @@
        "apihelp-block-param-allowusertalk": "A felhasználó szerkeszthesse a saját vitalapját (a <var>[[mw:Special:MyLanguage/Manual:$wgBlockAllowsUTEdit|$wgBlockAllowsUTEdit]]</var> beállítástól függ).",
        "apihelp-block-param-reblock": "Jelenlegi blokk felülírása, ha a felhasználó már blokkolva van.",
        "apihelp-block-param-watchuser": "A szerkesztő vagy IP-cím szerkesztői- és vitalapjának figyelése.",
+       "apihelp-block-param-tags": "A blokknapló naplóbejegyzésére érvényesítendő változtatáscímkék.",
+       "apihelp-block-param-partial": "Teljes blokk helyett a felhasználó eltiltása bizonyos lapok vagy névterek szerkesztésétől.",
+       "apihelp-block-param-pagerestrictions": "A felhasználó számára blokkolandó címek listája. Csak akkor van hatása, ha a <var>partial</var> igaz.",
        "apihelp-block-example-ip-simple": "A <kbd>192.0.2.5</kbd> IP-cím blokkolása három napra <kbd>First strike</kbd> indoklással.",
        "apihelp-block-example-user-complex": "<kbd>Vandal</kbd> blokkolása határozatlan időre <kbd>Vandalism</kbd> indoklással, új fiók létrehozásának és e-mail küldésének megakadályozása.",
        "apihelp-checktoken-summary": "Egy <kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd> kéréssel szerzett token érvényességének vizsgálata.",
index c9ca40a..c13a10e 100644 (file)
@@ -44,6 +44,7 @@
        "apihelp-block-param-reblock": "その利用者がすでにブロックされている場合、ブロックを上書きします。",
        "apihelp-block-param-watchuser": "その利用者またはIPアドレスの利用者ページとトークページをウォッチします。",
        "apihelp-block-param-tags": "ブロック記録の項目に適用する変更タグ。",
+       "apihelp-block-param-partial": "サイト全体ではなく特定のページまたは名前空間での編集をブロックします。",
        "apihelp-block-example-ip-simple": "IPアドレス <kbd>192.0.2.5</kbd> を <kbd>First strike<kbd> という理由で3日ブロックする",
        "apihelp-block-example-user-complex": "利用者 <kbd>Vandal</kbd> を <kbd>Vandalism</kbd> という理由で無期限ブロックし、新たなアカウント作成とメールの送信を禁止する。",
        "apihelp-changeauthenticationdata-summary": "現在の利用者の認証データを変更します。",
        "apihelp-compare-param-fromrev": "比較する1つ目の版。",
        "apihelp-compare-param-frompst": "<var>fromtext-&#x7B;slot}</var>に保存前変換を行います。",
        "apihelp-compare-param-fromtext": "<kbd>fromslots=main</kbd>を指定し、代わりに<var>fromtext-main</var> を使用してください。",
-       "apihelp-compare-param-fromcontentmodel": "<var>fromtext</var>のコンテンツモデル。指定されていない場合は、他のパラメータに基づいて推測されます。",
+       "apihelp-compare-param-fromcontentmodel": "<kbd>fromslots=main</kbd>を指定し、代わりに<var>fromcontentmodel-main</var> を使用してください。",
+       "apihelp-compare-param-fromcontentformat": "<kbd>fromslots=main</kbd>を指定し、代わりに<var>fromcontentformat-main</var> を使用してください。",
        "apihelp-compare-param-fromsection": "'from' の内容のうち指定された節のみを使用します。",
        "apihelp-compare-param-totitle": "比較する2つ目のページ名。",
        "apihelp-compare-param-toid": "比較する2つ目のページID。",
        "apihelp-compare-param-torev": "比較する2つ目の版。",
        "apihelp-compare-param-topst": "<var>totext</var>に保存前変換を行います。",
-       "apihelp-compare-param-tocontentmodel": "<var>totext</var> のコンテンツモデル。指定されていない場合は、他のパラメータに基づいて推測されます。",
+       "apihelp-compare-param-totext": "<kbd>toslots=main</kbd>を指定し、代わりに<var>totext-main</var> を使用してください。",
+       "apihelp-compare-param-tocontentmodel": "<kbd>toslots=main</kbd>を指定し、代わりに<var>tocontentmodel-main</var> を使用してください。",
+       "apihelp-compare-param-tocontentformat": "<kbd>toslots=main</kbd>を指定し、代わりに<var>tocontentformat-main</var> を使用してください。",
        "apihelp-compare-param-tosection": "'to' の内容のうち指定された節のみを使用します。",
        "apihelp-compare-param-prop": "どの情報を取得するか:",
        "apihelp-compare-paramvalue-prop-diff": "差分HTML。",
index b9f8868..3ff6f2f 100644 (file)
        "apierror-invalidcategory": "입력한 분류 이름이 올바르지 않습니다.",
        "apierror-invalidexpiry": "잘못된 만료 기한 \"$1\".",
        "apierror-invalid-file-key": "유효한 파일 키가 아닙니다.",
+       "apierror-invalidmethod": "유효하지 않은 HTTP 메서드입니다. GET 또는 POST의 사용을 고려하십시오.",
        "apierror-invalidoldimage": "<var>oldimage</var> 변수에 유효하지 않은 형식이 있습니다.",
        "apierror-invalidparammix-cannotusewith": "<kbd>$1</kbd> 변수는 <kbd>$2</kbd>와(과) 함께 사용할 수 없습니다.",
        "apierror-invalidsection": "<var>section</var> 변수는 유효한 섹션 ID 또는 <kbd>new</kbd>이어야 합니다.",
index 562f216..00a3ce4 100644 (file)
        "apihelp-json-param-callback": "Ако е укажано, го обвива изводот во даден повик на функција. За безбедност, ќе се ограничат сите податоци што се однесуваат на корисниците.",
        "apihelp-json-param-utf8": "Ако е укажано, ги шифрира највеќето (но не сите) не-ASCII знаци како UTF-8 наместо да ги заменува со хексадецимални изводни низи. Ова е стандардно кога <var>formatversion</var> не е <kbd>1</kbd>.",
        "apihelp-json-param-ascii": "Ако е укажано, ги шифрира сите не-ASCII знаци како хексадецимални изводни низи. Ова е стандардно кога <var>formatversion</var> is <kbd>1</kbd>.",
-       "apihelp-json-param-formatversion": "Форматирање на изводот:\n;1:Назадно-складен формат (булови во XML-стил, клучеви <samp>*</samp> за содржински јазли и тн.).\n;2:Пробен современ формат. Поединостите може да се изменат!\n;најнов:Користење на најновиот формат (тековно <kbd>2</kbd>), може да се смени без предупредување.",
+       "apihelp-json-param-formatversion": "Форматирање на изводот:\n;1:Назадно-складен формат (булови во XML-стил, клучеви <samp>*</samp> за содржински јазли и тн.).\n;2:Пробен современ формат.\n;latest:Користење на најновиот формат (тековно <kbd>2</kbd>), може да се смени без предупредување.",
        "apihelp-jsonfm-summary": "Давај го изводот во JSON-формат (подобрен испис во HTML).",
        "apihelp-none-summary": "Де давај извод.",
        "apihelp-php-summary": "Давај го изводот во серијализиран PHP-формат.",
-       "apihelp-php-param-formatversion": "Форматирање на изводот:\n;1:Назадно-складен формат (булови во XML-стил, клучеви <samp>*</samp> за содржински јазли и тн.).\n;2:Пробен современ формат. Поединостите може да се изменат!\n;најнов:Користење на најновиот формат (тековно <kbd>2</kbd>), може да се смени без предупредување.",
+       "apihelp-php-param-formatversion": "Форматирање на изводот:\n;1:Назадно-складен формат (булови во XML-стил, клучеви <samp>*</samp> за содржински јазли и тн.).\n;2:Пробен современ формат.\n;latest:Користење на најновиот формат (тековно <kbd>2</kbd>), може да се смени без предупредување.",
        "apihelp-phpfm-summary": "Давај го изводот во серијализиран PHP-формат (подобрен испис во HTML).",
        "apihelp-rawfm-summary": "Давај го изводот со елементи за отстранување грешки во JSON-формат (подобрен испис во HTML).",
        "apihelp-xml-summary": "Давај го изводот во XML-формат.",
index 5e30c1a..3ba6228 100644 (file)
@@ -24,7 +24,7 @@
        "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-errorlang": "Språk som skal brukes for advarsler og feil. <kbd>[[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]]</kbd> med <kbd>siprop=languages/<kbd> returnerer ei liste over språkkoder, eller angi <kbd>content</kbd> for å bruke wikiens innholdsspråk, eller angi <kbd>uselang</kbd> for å bruke samme verdi som <var>uselang</var>-parameteren.",
+       "apihelp-main-param-errorlang": "Språk som skal brukes for advarsler og feil. <kbd>[[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]]</kbd> med <kbd>siprop=languages</kbd> returnerer ei liste over språkkoder, eller angi <kbd>content</kbd> for å bruke wikiens innholdsspråk, eller angi <kbd>uselang</kbd> for å bruke samme verdi som <var>uselang</var>-parameteren.",
        "apihelp-main-param-errorsuselocal": "Hvis gitt, vil feiltekster bruke lokalt tilpassede meldinger fra {{ns:MediaWiki}}-navnerommet.",
        "apihelp-block-summary": "Blokker en bruker.",
        "apihelp-block-param-user": "Brukernavn, IP-adresse eller IP-intervall som skal blokkeres. Kan ikke brukes sammen med <var>$1userid</var>",
index d7735f6..c77d82d 100644 (file)
@@ -16,7 +16,8 @@
                        "Lemondoge",
                        "Hex",
                        "Mainframe98",
-                       "Southparkfan"
+                       "Southparkfan",
+                       "Elroy"
                ]
        },
        "apihelp-main-extended-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> De MediaWiki API is een stabiele interface die actief ondersteund en verbeterd wordt. Hoewel we het proberen te voorkomen, is het mogelijk dat er soms wijzigingen worden aangebracht die bepaalde API-verzoek kunnen verhinderen; abonneer u op de [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ e-maillijst mediawiki-api-announce] voor meldingen over wijzigingen.\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<p class=\"mw-apisandbox-link\"><strong>Testen:</strong> u kunt [[Special:ApiSandbox|eenvoudig API-verzoeken testen]].</p>",
        "apierror-import-unknownerror": "Onbekende fout trad op tijdens het importeren: $1.",
        "apierror-integeroutofrange-belowminimum": "<var>$1</var> mag niet minder zijn dan $2 (ingesteld op $3).",
        "apierror-invalidcategory": "De opgegeven categorienaam is niet geldig.",
+       "apierror-invalidmethod": "Ongeldige http-methode. Overweeg de methodes GET of POST.",
        "apierror-invalidtitle": "Ongeldige titel \"$1\".",
        "apierror-invaliduser": "Ongeldige gebruikersnaam \"$1\".",
        "apierror-invaliduserid": "Gebruikers-ID <var>$1</var> is ongeldig.",
index 7b29b1f..53cc928 100644 (file)
@@ -14,7 +14,8 @@
                        "Matma Rex",
                        "Sethakill",
                        "Woytecr",
-                       "InternerowyGołąb"
+                       "InternerowyGołąb",
+                       "CiaPan"
                ]
        },
        "apihelp-main-extended-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:Special:MyLanguage/API:Main_page|Dokumentacja]]\n* [[mw:Special:MyLanguage/API:FAQ|FAQ]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Lista dyskusyjna]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce Ogłoszenia dotyczące API]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Błędy i propozycje]\n</div>\n<strong>Stan:</strong> Wszystkie funkcje opisane na tej stronie powinny działać, ale API nadal jest aktywnie rozwijane i mogą się zmienić w dowolnym czasie. Subskrybuj [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ listę dyskusyjną mediawiki-api-announce], aby móc na bieżąco dowiadywać się o aktualizacjach.\n\n<strong>Błędne żądania:</strong> Gdy zostanie wysłane błędne żądanie do API, zostanie wysłany w odpowiedzi nagłówek HTTP z kluczem \"MediaWiki-API-Error\" i zarówno jego wartość jak i wartość kodu błędu wysłanego w odpowiedzi będą miały taką samą wartość. Aby uzyskać więcej informacji, zobacz [[mw:Special:MyLanguage/API:Errors_and_warnings|API: Błędy i ostrzeżenia]].\n\n<strong>Testowanie:</strong> Aby łatwo testować żądania API, zobacz [[Special:ApiSandbox]].",
@@ -42,6 +43,8 @@
        "apihelp-block-param-reblock": "Jeżeli ten użytkownik jest już zablokowany, nadpisz blokadę.",
        "apihelp-block-param-watchuser": "Obserwuj stronę użytkownika lub IP oraz ich strony dyskusji.",
        "apihelp-block-param-tags": "Zmieniaj tagi by potwierdzić wejście do bloku logów.",
+       "apihelp-block-param-partial": "Zablokuj użytkownikowi dostęp do wybranych stron lub przestrzeni nazw zamiast do całej witryny.",
+       "apihelp-block-param-pagerestrictions": "Lista tytułów stron do zablokowania użytkownikowi możliwości edycji. Ma zastosowanie tylko gdy 'partial' (częściowa) jest ustawione na true (prawda).",
        "apihelp-block-example-ip-simple": "Zablokuj IP <kbd>192.0.2.5</kbd> na 3 dni z powodem <kbd>First strike</kbd>.",
        "apihelp-block-example-user-complex": "Zablokuj użytkownika <kbd>Vandal</kbd> na zawsze z powodem <kbd>Vandalism</kbd> i uniemożliw utworzenie nowego konta oraz wysyłanie emaili.",
        "apihelp-changeauthenticationdata-summary": "Zmień dane logowania bieżącego użytkownika.",
        "apihelp-opensearch-summary": "Przeszukaj wiki przy użyciu protokołu OpenSearch.",
        "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-namespace": "Przestrzenie nazw do przeszukania. Pomijane jeśli <var>$1search</var> zaczyna się od poprawnego przedrostka przestrzeni nazw.",
        "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-query+blocks-paramvalue-prop-expiry": "Dodaje znacznik czasu wygaśnięcia blokady.",
        "apihelp-query+blocks-paramvalue-prop-reason": "Dodaje powód zablokowania.",
        "apihelp-query+blocks-paramvalue-prop-range": "Dodaje zakres adresów IP, na który zastosowano blokadę.",
+       "apihelp-query+blocks-paramvalue-prop-restrictions": "Dodaje częściowe ograniczenia jeśli blokada nie jest całościowa.",
        "apihelp-query+blocks-example-simple": "Listuj blokady.",
        "apihelp-query+categories-summary": "Lista kategorii, do których należą strony",
        "apihelp-query+categories-paramvalue-prop-timestamp": "Dodaje znacznik czasu dodania kategorii.",
        "apihelp-query+imageusage-example-simple": "Pokaż strony, które korzystają z [[:File:Albert Einstein Head.jpg]].",
        "apihelp-query+info-summary": "Pokaż podstawowe informacje o stronie.",
        "apihelp-query+info-paramvalue-prop-watchers": "Liczba obserwujących, jeśli jest to dozwolone.",
-       "apihelp-query+info-paramvalue-prop-readable": "Czy użytkownik może przeczytać tę stronę.",
+       "apihelp-query+info-paramvalue-prop-readable": "Czy użytkownik może przeczytać tę stronę. Zamiast tego użyj <kbd>intestactions=read</kbd>.",
        "apihelp-query+iwbacklinks-param-prefix": "Prefix interwiki.",
        "apihelp-query+iwbacklinks-param-limit": "Łączna liczba stron do zwrócenia.",
        "apihelp-query+iwbacklinks-paramvalue-prop-iwprefix": "Dodaje prefiks interwiki.",
        "apihelp-query+pageswithprop-example-simple": "Lista pierwszych 10 stron za pomocą <code>&#123;&#123;DISPLAYTITLE:&#125;&#125;</code>.",
        "apihelp-query+pageswithprop-example-generator": "Pobierz dodatkowe informacje o pierwszych 10 stronach wykorzystując <code>_&#95;NOTOC_&#95;</code>.",
        "apihelp-query+prefixsearch-param-search": "Wyszukaj tekst.",
-       "apihelp-query+prefixsearch-param-namespace": "Przestrzenie nazw do przeszukania.",
+       "apihelp-query+prefixsearch-param-namespace": "Przestrzenie nazw do przeszukania. Pomijane jeśli <var>$1search</var> zaczyna się od poprawnego przedrostka przestrzeni nazw.",
        "apihelp-query+prefixsearch-param-limit": "Maksymalna liczba zwracanych wyników.",
        "apihelp-query+prefixsearch-param-offset": "Liczba wyników do pominięcia.",
        "apihelp-query+protectedtitles-summary": "Lista wszystkich tytułów zabezpieczonych przed tworzeniem.",
index df7ab40..c31f1c0 100644 (file)
        "apihelp-json-param-callback": "Se especificado, envolve a saída para uma determinada chamada de função. Por segurança, todos os dados específicos do usuário serão restritos.",
        "apihelp-json-param-utf8": "Se especificado, codifica a maioria (mas não todos) caracteres não-ASCII como UTF-8 em vez de substituí-los por sequências de escape hexadecimais. Padrão quando <var>formatversion</var> não é <kbd>1</kbd>.",
        "apihelp-json-param-ascii": "Se especificado, codifica todos os não-ASCII usando sequências de escape hexadecimais. Padrão quando <var>formatversion</var> é <kbd>1</kbd>.",
-       "apihelp-json-param-formatversion": "Formatação de saída:\n;1:formato compatível com versões anteriores (XML-style booleans, <samp>*</samp> chaves para nós de conteúdo, etc.).\n;2: formato moderno experimental. Detalhes podem ser alterados!\n;mais recente: use o formato mais recente (atualmente <kbd>2</kbd>), pode mudar sem aviso prévio.",
+       "apihelp-json-param-formatversion": "Formatação do resultado de saída:\n;1:Formato compatível com versões anteriores (boolianos ao estilo XML, <samp>*</samp> chaves para nodos de conteúdo, etc.).\n;2:Formato moderno.\n;latest:Usar o formato mais recente (atualmente <kbd>2</kbd>), mas pode ser alterado sem aviso prévio.",
        "apihelp-jsonfm-summary": "Dados de saída no formato JSON (pretty-print em HTML).",
        "apihelp-none-summary": "Nenhuma saída.",
        "apihelp-php-summary": "Dados de saída no formato PHP serializado.",
-       "apihelp-php-param-formatversion": "Formatação de saída:\n;1:formato compatível com versões anteriores (XML-style booleans, <samp>*</samp> chaves para nós de conteúdo, etc.).\n;2: formato moderno experimental. Detalhes podem ser alterados!\n;mais recente: use o formato mais recente (atualmente <kbd>2</kbd>), pode mudar sem aviso prévio.",
+       "apihelp-php-param-formatversion": "Formatação do resultado de saída:\n;1:Formato compatível com versões anteriores (boolianos ao estilo XML, <samp>*</samp> chaves para nodos de conteúdo, etc.).\n;2:Formato moderno.\n;latest:Usar o formato mais recente (atualmente <kbd>2</kbd>), mas pode ser alterado sem aviso prévio.",
        "apihelp-phpfm-summary": "Dados de saída em formato serializado em PHP (pretty-print em HTML).",
        "apihelp-rawfm-summary": "Dados de saída, incluindo elementos de depuração, no formato JSON (pretty-print em HTML).",
        "apihelp-xml-summary": "Dados de saída em formato XML.",
        "apierror-invalidexpiry": "Tempo de expiração \"$1\" não válido.",
        "apierror-invalid-file-key": "Não é uma chave de arquivo válida.",
        "apierror-invalidlang": "Código de idioma inválido para o parâmetro <var>$1</var>.",
+       "apierror-invalidmethod": "Método HTTP inválido. Considere o uso de GET ou POST.",
        "apierror-invalidoldimage": "O parâmetro <var>oldimage</var> possui um formato inválido.",
        "apierror-invalidparammix-cannotusewith": "O parâmetro <kbd>$1</kbd> não pode ser usado com <kbd>$2</kbd>.",
        "apierror-invalidparammix-mustusewith": "O parâmetro <kbd>$1</kbd> só pode ser usado com <kbd>$2</kbd>.",
index c1e10ca..41d06d6 100644 (file)
        "apihelp-json-param-callback": "Se especificado, envolve o resultado de saída na forma de uma chamada para uma função. Por segurança, todos os dados específicos do utilizador estarão restringidos.",
        "apihelp-json-param-utf8": "Se especificado, codifica a maioria dos caracteres não ASCII (mas não todos) em UTF-8, em vez de substitui-los por sequências de escape hexadecimais. É o comportamento padrão quando <var>formatversion</var> não tem o valor <kbd>1</kbd>.",
        "apihelp-json-param-ascii": "Se especificado, codifica todos caracteres não ASCII usando sequências de escape hexadecimais. É o comportamento padrão quando <var>formatversion</var> tem o valor <kbd>1</kbd>.",
-       "apihelp-json-param-formatversion": "Formatação do resultado de saída:\n;1:Formato compatível com versões anteriores (boolianos ao estilo XML, <samp>*</samp> chaves para nodos de conteúdo, etc.).\n;2:Formato moderno experimental. As especificações podem mudar!\n;latest:Usar o formato mais recente (atualmente <kbd>2</kbd>), mas pode ser alterado sem aviso prévio.",
+       "apihelp-json-param-formatversion": "Formatação do resultado de saída:\n;1:Formato compatível com versões anteriores (boolianos ao estilo XML, <samp>*</samp> chaves para nodos de conteúdo, etc.).\n;2:Formato moderno.\n;latest:Usar o formato mais recente (atualmente <kbd>2</kbd>), mas pode ser alterado sem aviso prévio.",
        "apihelp-jsonfm-summary": "Produzir os dados de saída em formato JSON (realce sintático em HTML).",
        "apihelp-none-summary": "Não produzir nada.",
        "apihelp-php-summary": "Produzir os dados de saída em formato PHP seriado.",
-       "apihelp-php-param-formatversion": "Formatação do resultado de saída:\n;1:Formato compatível com versões anteriores (boolianos ao estilo XML, <samp>*</samp> chaves para nodos de conteúdo, etc.).\n;2:Formato moderno experimental. As especificações podem mudar!\n;latest:Usar o formato mais recente (atualmente <kbd>2</kbd>), mas pode ser alterado sem aviso prévio.",
+       "apihelp-php-param-formatversion": "Formatação do resultado de saída:\n;1:Formato compatível com versões anteriores (boolianos ao estilo XML, <samp>*</samp> chaves para nodos de conteúdo, etc.).\n;2:Formato moderno.\n;latest:Usar o formato mais recente (atualmente <kbd>2</kbd>), mas pode ser alterado sem aviso prévio.",
        "apihelp-phpfm-summary": "Produzir os dados de saída em formato PHP seriado (realce sintático em HTML).",
        "apihelp-rawfm-summary": "Produzir os dados de saída, incluindo elementos para despiste de erros, em formato JSON (realce sintático em HTML).",
        "apihelp-xml-summary": "Produzir os dados de saída em formato XML.",
        "apierror-invalidexpiry": "A hora de expiração \"$1\" é inválida.",
        "apierror-invalid-file-key": "Não é uma chave de ficheiro válida.",
        "apierror-invalidlang": "Código de língua inválido para o parâmetro <var>$1</var>.",
+       "apierror-invalidmethod": "Método HTTP inválido. Use GET ou POST.",
        "apierror-invalidoldimage": "O parâmetro <var>oldimage</var> tem um formato inválido.",
        "apierror-invalidparammix-cannotusewith": "O parâmetro <kbd>$1</kbd> não pode ser usado com <kbd>$2</kbd>.",
        "apierror-invalidparammix-mustusewith": "O parâmetro <kbd>$1</kbd> só pode ser usado com <kbd>$2</kbd>.",
index 83427ba..9786053 100644 (file)
        "apierror-invalidexpiry": "{{doc-apierror}}\n\nParameters:\n* $1 - Value provided.",
        "apierror-invalid-file-key": "{{doc-apierror}}",
        "apierror-invalidlang": "{{doc-apierror}}\n\nParameters:\n* $1 - Parameter name.",
+       "apierror-invalidmethod": "{{doc-apierror}}\n\nShown when a user tries to access the API using an HTTP method that is not supported",
        "apierror-invalidoldimage": "{{doc-apierror}}",
        "apierror-invalidparammix-cannotusewith": "{{doc-apierror}}\n\nParameters:\n* $1 - Parameter name or \"parameter=value\" text.\n* $2 - Parameter name or \"parameter=value\" text.",
        "apierror-invalidparammix-mustusewith": "{{doc-apierror}}\n\nParameters:\n* $1 - Parameter name or \"parameter=value\" text.\n* $2 - Parameter name or \"parameter=value\" text.",
index 6a239f6..0206463 100644 (file)
        "apihelp-query+info-paramvalue-prop-notificationtimestamp": "Временная метка уведомления для списка наблюдения для каждой страницы.",
        "apihelp-query+info-paramvalue-prop-subjectid": "Идентификатор родительской страницы для каждой страницы обсуждения.",
        "apihelp-query+info-paramvalue-prop-url": "Возвращает полную ссылку, ссылку на редактирование и каноничную ссылку для каждой страницы.",
-       "apihelp-query+info-paramvalue-prop-readable": "Может ли участник просматривать эту страницу.",
+       "apihelp-query+info-paramvalue-prop-readable": "Может ли участник просматривать эту страницу. Используйте вместо этого <kbd>intestactions=read</kbd>.",
        "apihelp-query+info-paramvalue-prop-preload": "Текст, возвращённый EditFormPreloadText.",
        "apihelp-query+info-paramvalue-prop-displaytitle": "Возвращает стиль отображения заголовка страницы.",
        "apihelp-query+info-paramvalue-prop-varianttitles": "Выдаёт отображаемый заголовок во всех вариантах языка контента сайта.",
        "apihelp-json-param-callback": "Если задано, оборачивает вывод в вызов данной функции. Из соображении безопасности, вся пользовательская информация будет удалена.",
        "apihelp-json-param-utf8": "Если задано, кодирует большинство (но не все) не-ASCII символов в UTF-8 вместо замены их на шестнадцатеричные коды. Применяется по умолчанию, когда <var>formatversion</var> не равно <kbd>1</kbd>.",
        "apihelp-json-param-ascii": "Если задано, заменяет все не-ASCII-символы на шестнадцатеричные коды. Применяется по умолчанию, когда <var>formatversion</var> равно <kbd>1</kbd>.",
-       "apihelp-json-param-formatversion": "ФоÑ\80маÑ\82 Ð²Ñ\8bвода:\n;1: Ð\9eбÑ\80аÑ\82но Ñ\81овмеÑ\81Ñ\82имÑ\8bй Ñ\84оÑ\80маÑ\82 (логиÑ\87еÑ\81кие Ð·Ð½Ð°Ñ\87ениÑ\8f Ð² Ñ\81Ñ\82иле XML, ÐºÐ»Ñ\8eÑ\87и <samp>*</samp> Ð´Ð»Ñ\8f Ñ\83злов Ð´Ð°Ð½Ð½Ñ\8bÑ\85, Ð¸ Ñ\82ак Ð´Ð°Ð»ÐµÐµ).\n;2: Ð­ÐºÑ\81пеÑ\80именÑ\82алÑ\8cнÑ\8bй Ñ\81овÑ\80еменнÑ\8bй Ñ\84оÑ\80маÑ\82. Ð\94еÑ\82али Ð¼Ð¾Ð³Ñ\83Ñ\82 Ð¼ÐµÐ½Ñ\8fÑ\82Ñ\8cÑ\81Ñ\8f!\n;latest: Использовать последний формат (сейчас <kbd>2</kbd>), может меняться без предупреждения.",
+       "apihelp-json-param-formatversion": "ФоÑ\80маÑ\82 Ð²Ñ\8bвода:\n;1: Ð\9eбÑ\80аÑ\82но Ñ\81овмеÑ\81Ñ\82имÑ\8bй Ñ\84оÑ\80маÑ\82 (логиÑ\87еÑ\81кие Ð·Ð½Ð°Ñ\87ениÑ\8f Ð² Ñ\81Ñ\82иле XML, ÐºÐ»Ñ\8eÑ\87и <samp>*</samp> Ð´Ð»Ñ\8f Ñ\83злов Ð´Ð°Ð½Ð½Ñ\8bÑ\85, Ð¸ Ñ\82ак Ð´Ð°Ð»ÐµÐµ).\n;2: Ð¡Ð¾Ð²Ñ\80еменнÑ\8bй Ñ\84оÑ\80маÑ\82\n;latest: Использовать последний формат (сейчас <kbd>2</kbd>), может меняться без предупреждения.",
        "apihelp-jsonfm-summary": "Выводить данные в формате JSON (отформатированном в HTML).",
        "apihelp-none-summary": "Ничего не выводить.",
        "apihelp-php-summary": "Выводить данные в сериализованном формате PHP.",
-       "apihelp-php-param-formatversion": "ФоÑ\80маÑ\82 Ð²Ñ\8bвода:\n;1: Ð\9eбÑ\80аÑ\82но Ñ\81овмеÑ\81Ñ\82имÑ\8bй Ñ\84оÑ\80маÑ\82 (логиÑ\87еÑ\81кие Ð·Ð½Ð°Ñ\87ениÑ\8f Ð² Ñ\81Ñ\82иле XML, ÐºÐ»Ñ\8eÑ\87и <samp>*</samp> Ð´Ð»Ñ\8f Ñ\83злов Ð´Ð°Ð½Ð½Ñ\8bÑ\85, Ð¸ Ñ\82ак Ð´Ð°Ð»ÐµÐµ).\n;2: Ð­ÐºÑ\81пеÑ\80именÑ\82алÑ\8cнÑ\8bй Ñ\81овÑ\80еменнÑ\8bй Ñ\84оÑ\80маÑ\82. Ð\94еÑ\82али Ð¼Ð¾Ð³Ñ\83Ñ\82 Ð¼ÐµÐ½Ñ\8fÑ\82Ñ\8cÑ\81Ñ\8f!\n;latest: Использовать последний формат (сейчас <kbd>2</kbd>), может меняться без предупреждения.",
+       "apihelp-php-param-formatversion": "ФоÑ\80маÑ\82 Ð²Ñ\8bвода:\n;1: Ð\9eбÑ\80аÑ\82но Ñ\81овмеÑ\81Ñ\82имÑ\8bй Ñ\84оÑ\80маÑ\82 (логиÑ\87еÑ\81кие Ð·Ð½Ð°Ñ\87ениÑ\8f Ð² Ñ\81Ñ\82иле XML, ÐºÐ»Ñ\8eÑ\87и <samp>*</samp> Ð´Ð»Ñ\8f Ñ\83злов Ð´Ð°Ð½Ð½Ñ\8bÑ\85, Ð¸ Ñ\82ак Ð´Ð°Ð»ÐµÐµ).\n;2: Ð¡Ð¾Ð²Ñ\80еменнÑ\8bй Ñ\84оÑ\80маÑ\82.\n;latest: Использовать последний формат (сейчас <kbd>2</kbd>), может меняться без предупреждения.",
        "apihelp-phpfm-summary": "Выводить данные в сериализованном формате PHP (отформатированном в HTML).",
        "apihelp-rawfm-summary": "Выводить данные, включая элементы отладки, в формате JSON (отформатированном в HTML).",
        "apihelp-xml-summary": "Выводить данные в формате XML.",
index 21601c1..2a66801 100644 (file)
@@ -14,7 +14,8 @@
                        "AS",
                        "Umherirrender",
                        "Choomaq",
-                       "Zoranzoki21"
+                       "Zoranzoki21",
+                       "Vlad5250"
                ]
        },
        "apihelp-main-extended-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:Special:MyLanguage/API:Main_page|Документація]]\n* [[mw:Special:MyLanguage/API:FAQ|ЧаПи]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Список розсилки]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce Оголошення API]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Баґи і запити]\n</div>\n<strong>Статус:</strong> Усі функції, вказані на цій сторінці, мають працювати, але API далі перебуває в активній розробці і може змінитися у будь-який момент. Підпишіться на [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ список розсилки mediawiki-api-announce], щоб помічати оновлення.\n\n<strong>Хибні запити:</strong> Коли до API надсилаються хибні запити, буде відіслано HTTP-шапку з ключем «MediaWiki-API-Error», а тоді і значення шапки, і код помилки, надіслані назад, будуть встановлені з тим же значенням. Більше інформації див. на сторінці [[mw:Special:MyLanguage/API:Errors_and_warnings|API: Помилки й попередження]].\n\n<p class=\"mw-apisandbox-link\"><strong>Тестування:</strong> Для зручності тестування запитів API, див. [[Special:ApiSandbox]].</p>",
        "apihelp-json-param-callback": "Якщо вказано, огортає вивід викликом даної функції. З міркувань безпеки, усі специфічні до користувача дані буде утримано.",
        "apihelp-json-param-utf8": "Якщо вказано, кодує більшість (але не всі) не-ASCII символів як UTF-8, замість заміни їх шістнадцятковими екрануючими послідовностями. За замовчуванням коли <var>formatversion</var> не є <kbd>1</kbd>.",
        "apihelp-json-param-ascii": "Якщо вказано, кодує всі не-ASCII використовуючи шістнадцяткові екрануючі послідовності. За замовчуванням коли <var>formatversion</var> є <kbd>1</kbd>.",
-       "apihelp-json-param-formatversion": "ФоÑ\80маÑ\82Ñ\83ваннÑ\8f Ð²Ð¸Ð²Ð¾Ð´Ñ\83:\n;1:ФоÑ\80маÑ\82 Ð·Ð²Ð¾Ñ\80оÑ\82ноÑ\97 Ñ\81Ñ\83мÑ\96Ñ\81ноÑ\81Ñ\82Ñ\96 (бÑ\83леви XML-Ñ\81Ñ\82илÑ\8e, <samp>*</samp> ÐºÐ»Ñ\8eÑ\87Ñ\96 Ð´Ð»Ñ\8f Ð²Ñ\83злÑ\96в Ð²Ð¼Ñ\96Ñ\81Ñ\82Ñ\83 Ñ\82оÑ\89о).\n;2:Ð\95кÑ\81пеÑ\80именÑ\82алÑ\8cний Ñ\81Ñ\83Ñ\87аÑ\81ний Ñ\84оÑ\80маÑ\82. Ð\94еÑ\82алÑ\96 Ð¼Ð¾Ð¶Ñ\83Ñ\82Ñ\8c Ð·Ð¼Ñ\96нÑ\8eваÑ\82иÑ\81Ñ\8c.\n;latest:Використовувати найостанніший формат (наразі <kbd>2</kbd>). Може змінюватись без попередження.",
+       "apihelp-json-param-formatversion": "ФоÑ\80маÑ\82Ñ\83ваннÑ\8f Ð²Ð¸Ð²Ð¾Ð´Ñ\83:\n;1:ФоÑ\80маÑ\82 Ð·Ð²Ð¾Ñ\80оÑ\82ноÑ\97 Ñ\81Ñ\83мÑ\96Ñ\81ноÑ\81Ñ\82Ñ\96 (бÑ\83леви XML-Ñ\81Ñ\82илÑ\8e, <samp>*</samp> ÐºÐ»Ñ\8eÑ\87Ñ\96 Ð´Ð»Ñ\8f Ð²Ñ\83злÑ\96в Ð²Ð¼Ñ\96Ñ\81Ñ\82Ñ\83 Ñ\82оÑ\89о).\n;2:СÑ\83Ñ\87аÑ\81ний Ñ\84оÑ\80маÑ\82.\n;latest:Використовувати найостанніший формат (наразі <kbd>2</kbd>). Може змінюватись без попередження.",
        "apihelp-jsonfm-summary": "Вивести дані у форматі JSON (вивід відформатованого коду за допомогою HTML).",
        "apihelp-none-summary": "Нічого не виводити.",
        "apihelp-php-summary": "Виводити дані у форматі серіалізованого PHP.",
-       "apihelp-php-param-formatversion": "ФоÑ\80маÑ\82Ñ\83ваннÑ\8f Ð²Ð¸Ð²Ð¾Ð´Ñ\83:\n;1:ФоÑ\80маÑ\82 Ð·Ð²Ð¾Ñ\80оÑ\82ноÑ\97 Ñ\81Ñ\83мÑ\96Ñ\81ноÑ\81Ñ\82Ñ\96 (бÑ\83леви XML-Ñ\81Ñ\82илÑ\8e, <samp>*</samp> ÐºÐ»Ñ\8eÑ\87Ñ\96 Ð´Ð»Ñ\8f Ð²Ñ\83злÑ\96в Ð²Ð¼Ñ\96Ñ\81Ñ\82Ñ\83 Ñ\82оÑ\89о).\n;2:Ð\95кÑ\81пеÑ\80именÑ\82алÑ\8cний Ñ\81Ñ\83Ñ\87аÑ\81ний Ñ\84оÑ\80маÑ\82. Ð\94еÑ\82алÑ\96 Ð¼Ð¾Ð¶Ñ\83Ñ\82Ñ\8c Ð·Ð¼Ñ\96нÑ\8eваÑ\82иÑ\81Ñ\8c.\n;latest:Використовувати найостанніший формат (наразі <kbd>2</kbd>). Може змінюватись без попередження.",
+       "apihelp-php-param-formatversion": "ФоÑ\80маÑ\82Ñ\83ваннÑ\8f Ð²Ð¸Ð²Ð¾Ð´Ñ\83:\n;1:ФоÑ\80маÑ\82 Ð·Ð²Ð¾Ñ\80оÑ\82ноÑ\97 Ñ\81Ñ\83мÑ\96Ñ\81ноÑ\81Ñ\82Ñ\96 (бÑ\83леви XML-Ñ\81Ñ\82илÑ\8e, <samp>*</samp> ÐºÐ»Ñ\8eÑ\87Ñ\96 Ð´Ð»Ñ\8f Ð²Ñ\83злÑ\96в Ð²Ð¼Ñ\96Ñ\81Ñ\82Ñ\83 Ñ\82оÑ\89о).\n;2:СÑ\83Ñ\87аÑ\81ний Ñ\84оÑ\80маÑ\82.\n;latest:Використовувати найостанніший формат (наразі <kbd>2</kbd>). Може змінюватись без попередження.",
        "apihelp-phpfm-summary": "Виводити дані у форматі серіалізованого PHP (вивід відформатованого коду за допомогою HTML).",
        "apihelp-rawfm-summary": "Виводити дані, включно з елементами налагодження, у форматі JSON (вивід відформатованого коду за допомогою HTML).",
        "apihelp-xml-summary": "Виводити дані у форматі XML.",
index 73c39b2..e3c0293 100644 (file)
        "apihelp-block-example-user-complex": "永久封鎖 IP 位址 <kbd>Vandal</kbd>,原因為 <kbd>Vandalism</kbd>。",
        "apihelp-changeauthenticationdata-summary": "為目前使用者變更身分核對資料。",
        "apihelp-changeauthenticationdata-example-password": "嘗試更改目前使用者的密碼至 <kbd>ExamplePassword</kbd>。",
-       "apihelp-checktoken-summary": "檢查來自 <kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd> 的密鑰有效性。",
+       "apihelp-checktoken-summary": "檢查來自 <kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd> 的權杖有效性。",
        "apihelp-checktoken-param-type": "要測試的密鑰類型。",
-       "apihelp-checktoken-param-token": "要測試的密鑰。",
-       "apihelp-checktoken-param-maxtokenage": "密鑰的有效期間,以秒為單位。",
-       "apihelp-checktoken-example-simple": "測試 <kbd>csrf</kbd> 密鑰的有效性。",
+       "apihelp-checktoken-param-token": "要測試的權杖。",
+       "apihelp-checktoken-param-maxtokenage": "權杖的有效期間,以秒為單位。",
+       "apihelp-checktoken-example-simple": "測試 <kbd>csrf</kbd> 權杖的有效性。",
        "apihelp-clearhasmsg-summary": "清除目前使用者的 <code>hasmsg</code> 標記。",
        "apihelp-clearhasmsg-example-1": "清除目前使用者的 <code>hasmsg</code> 標記。",
+       "apihelp-clientlogin-summary": "使用互動流程來登入 wiki。",
        "apihelp-clientlogin-example-login2": "在 <samp>UI</samp> 回應雙重認證後繼續登入,提供 <kbd>987654</kbd> 的 <var>OATHToken</var>。",
        "apihelp-compare-summary": "比較 2 個頁面間的差異。",
        "apihelp-compare-extended-description": "\"from\" 以及 \"to\" 的修訂編號,頁面標題或頁面 ID 為必填。",
@@ -91,7 +92,7 @@
        "apihelp-createaccount-param-name": "使用者名稱。",
        "apihelp-createaccount-param-password": "密碼 (若有設定 <var>$1mailpassword</var> 則可略過)。",
        "apihelp-createaccount-param-domain": "外部身分核對使用的網域 (可有可無)。",
-       "apihelp-createaccount-param-token": "在第一次請求時已取得的帳號建立金鑰。",
+       "apihelp-createaccount-param-token": "在第一次請求時已取得的帳號建立權杖。",
        "apihelp-createaccount-param-email": "使用者的電子郵件地址 (可有可無) 。",
        "apihelp-createaccount-param-realname": "使用者的真實姓名 (可有可無)。",
        "apihelp-createaccount-param-mailpassword": "若設為其他值,將會以電子郵件寄送隨機密碼給使用者。",
        "apihelp-createaccount-param-language": "要設定的使用者預設語言代碼 (選填,預設依據內容語言)。",
        "apihelp-createaccount-example-pass": "建立使用者 <kbd>testuser</kbd> 使用密碼 <kbd>test123</kbd>",
        "apihelp-createaccount-example-mail": "建立使用者 <kbd>testmailuser</kbd> 並且電子郵件通知隨機產生的密碼。",
+       "apihelp-cspreport-param-source": "生成觸發此報告之 CSP 標頭的事物",
        "apihelp-delete-summary": "刪除頁面。",
        "apihelp-delete-param-title": "您欲刪除的頁面標題。 無法與 <var>$1pageid</var> 同時使用。",
        "apihelp-delete-param-pageid": "您欲刪除頁面的頁面 ID。 無法與 <var>$1title</var> 同時使用。",
        "apihelp-delete-param-reason": "刪除的原因。 若未設定,將會使用自動產生的原因。",
        "apihelp-delete-param-tags": "在刪除日誌裡更改套用到項目的標籤。",
        "apihelp-delete-param-watch": "加入目前頁面至您的監視清單。",
-       "apihelp-delete-param-watchlist": "無條件使用設置將頁面加入或移除目前使用者的監視清單或者是不更改監視清單。",
+       "apihelp-delete-param-watchlist": "使用偏好設定無條件地將頁面加入至或移除自目前使用者的監視清單,或不更改監視。",
        "apihelp-delete-param-unwatch": "從您的監視清單中移除目前頁面。",
        "apihelp-delete-param-oldimage": "由 [[Special:ApiHelp/query+imageinfo|action=query&prop=imageinfo&iiprop=archivename]] 所提供要刪除的舊圖片名稱。",
        "apihelp-delete-example-simple": "刪除 <kbd>Main Page</kbd>。",
        "apihelp-edit-param-nocreate": "若頁面不存在,則產生錯誤。",
        "apihelp-edit-param-watch": "加入目前頁面至您的監視清單。",
        "apihelp-edit-param-unwatch": "從您的監視清單中移除目前頁面。",
-       "apihelp-edit-param-watchlist": "無條件使用設置將頁面加入或移除目前使用者的監視清單或者是不更改監視清單。",
+       "apihelp-edit-param-watchlist": "使用偏好設定無條件地將頁面加入至或移除自目前使用者的監視清單,或不更改監視。",
        "apihelp-edit-param-prependtext": "添加此文字至頁面開頭。覆蓋$1text。",
        "apihelp-edit-param-undo": "復原此修訂。覆寫 $1text、$1prependtext 與 $1appendtext。",
        "apihelp-edit-param-undoafter": "撤銷從 $1undo 至此為止的所有修訂。若不設定則僅會撤銷一次修訂。",
        "apihelp-edit-param-redirect": "自動化解決重新導向。",
        "apihelp-edit-param-contentformat": "用於輸入文字的內容序列化格式。",
        "apihelp-edit-param-contentmodel": "新內容的內容模組。",
+       "apihelp-edit-param-token": "權杖應用為發送的最後參數,或至少在 $1text 參數之後。",
        "apihelp-edit-example-edit": "編輯頁面",
        "apihelp-edit-example-prepend": "前置頁面的 <kbd>_&#95;NOTOC_&#95;</kbd>。",
        "apihelp-edit-example-undo": "撤銷從 13579 至 13585 之間的修訂,並帶自動生成的摘要。",
        "apihelp-expandtemplates-paramvalue-prop-volatile": "輸出內容是否易變,且是否不應在頁面其它位置裡重複使用。",
        "apihelp-expandtemplates-paramvalue-prop-jsconfigvars": "指定頁面的 JavaScript 設置變量。",
        "apihelp-expandtemplates-paramvalue-prop-encodedjsconfigvars": "指定頁面的 JavaScript 設置變量為 JSON 字串。",
+       "apihelp-expandtemplates-paramvalue-prop-parsetree": "輸出的 XML 解析樹狀。",
        "apihelp-expandtemplates-param-includecomments": "輸出裡是否包含 HTML 註解。",
+       "apihelp-expandtemplates-param-generatexml": "產生 XML 解析樹狀(以 $1prop=parsetree 取代)。",
        "apihelp-expandtemplates-example-simple": "展開 wiki 文字<kbd><nowiki>{{Project:Sandbox}}</nowiki></kbd>。",
        "apihelp-feedcontributions-summary": "回傳使用者貢獻 Feed。",
        "apihelp-feedcontributions-param-feedformat": "Feed 的格式。",
        "apihelp-filerevert-param-archivename": "要復原的修訂存檔名稱。",
        "apihelp-filerevert-example-revert": "回退 <kbd>Wiki.png</kbd> 至 <kbd>2011-03-05T15:27:40Z</kbd> 的版本。",
        "apihelp-help-summary": "顯示指定模組的說明。",
+       "apihelp-help-param-wrap": "在標準 API 回應結構裡包裹輸出。",
        "apihelp-help-param-toc": "在 HTML 輸出裡包含目錄。",
        "apihelp-help-example-main": "主模組使用說明",
        "apihelp-help-example-submodules": "用於 <kbd>action=query</kbd> 與其所有子模組的幫助。",
        "apihelp-imagerotate-example-simple": "<kbd>90</kbd> 度旋轉 <kbd>File:Example.png</kbd>。",
        "apihelp-imagerotate-example-generator": "<kbd>180</kbd> 度旋轉所有在 <kbd>Category:Flip</kbd> 裡的圖片。",
        "apihelp-import-summary": "從其它 wiki 或 XML 檔案來匯入頁面。",
+       "apihelp-import-extended-description": "請注意當發送用於 <var>xml</var> 參數的檔案時,必須以 HTTP POST 作為檔案上傳(註:使用 multipart/form-data)。",
        "apihelp-import-param-summary": "匯入摘要。",
        "apihelp-import-param-xml": "上載的 XML 檔。",
        "apihelp-import-param-assignknownusers": "分配編輯至所命名使用者已存在本地的本地使用者。",
        "apihelp-login-param-name": "使用者名稱。",
        "apihelp-login-param-password": "密碼。",
        "apihelp-login-param-domain": "網域名稱(可有可無)。",
+       "apihelp-login-param-token": "在首次請求獲得的登入權杖。",
+       "apihelp-login-example-gettoken": "檢索登入權杖。",
        "apihelp-login-example-login": "登入",
        "apihelp-logout-summary": "登出並清除 session 資料。",
        "apihelp-logout-example-logout": "登出當前使用者",
        "apihelp-move-param-noredirect": "不要建立重新導向。",
        "apihelp-move-param-watch": "將頁面和重定向加入目前使用者的監視清單。",
        "apihelp-move-param-unwatch": "從目前使用者的監視清單中移除頁面和重定向。",
-       "apihelp-move-param-watchlist": "在目前使用者的監視清單中無條件地加入或移除頁面,或使用設定,或不變更監視清單。",
+       "apihelp-move-param-watchlist": "使用偏好設定無條件地將頁面加入至或移除自目前使用者的監視清單,或不更改監視。",
        "apihelp-move-param-ignorewarnings": "忽略所有警告。",
        "apihelp-move-example-move": "將<kbd>Badtitle</kbd>移動至<kbd>Goodtitle</kbd>,不留下重定向。",
        "apihelp-opensearch-summary": "使用 OpenSearch 協定搜尋本 wiki。",
        "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-opensearch-example-te": "找出以 <kbd>Te</kbd> 為開頭的頁面。",
        "apihelp-options-summary": "更改目前使用者的偏好設定。",
        "apihelp-options-param-reset": "重設偏好設定為網站預設值。",
        "apihelp-parse-paramvalue-prop-displaytitle": "添加已解析 wiki 文字的標題。",
        "apihelp-parse-paramvalue-prop-headitems": "提供放置頁面裡的 <code>&lt;head&gt;</code> 之項目。",
        "apihelp-parse-paramvalue-prop-headhtml": "取得頁面已解析的 <code>&lt;head&gt;</code>。",
+       "apihelp-parse-paramvalue-prop-jsconfigvars": "針對頁面提供指定的 JavaScript 設置變數。若要套用,請使用 <code>mw.config.set()</code>。",
        "apihelp-parse-paramvalue-prop-encodedjsconfigvars": "指定頁面的 JavaScript 設置變量為 JSON 字串。",
        "apihelp-parse-paramvalue-prop-iwlinks": "在已解析的 wiki 文字提供跨 wiki 連結。",
        "apihelp-parse-paramvalue-prop-wikitext": "指定被解析的原始 wiki 文字。",
        "apihelp-parse-paramvalue-prop-properties": "指定多項定義在已解析原始 wiki 文字的屬性。",
        "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-wrapoutputclass": "要包在解析器輸出內容的 CSS 類別。",
+       "apihelp-parse-param-effectivelanglinks": "包含由擴充提供的語言連結(與 <kbd>$1prop=langlinks</kbd> 一起使用)。",
+       "apihelp-parse-param-disablelimitreport": "從解析輸出內容裡省略限制報告(\"NewPP limit report\")。",
        "apihelp-parse-param-disablepp": "請改用<var>$1disablelimitreport</var>。",
        "apihelp-parse-param-disableeditsection": "從解析輸出內容省略編輯段落連結。",
        "apihelp-parse-param-disabletidy": "不要在解析輸出裡執行 HTML 內容清理(例如使用 tidy 軟體工具)",
+       "apihelp-parse-param-generatexml": "產生 XML 解析樹狀(需要被 <kbd>$2prop=parsetree</kbd> 給取代的 <code>$1</code> 內容模組)。",
        "apihelp-parse-param-preview": "在預覽模式下解析。",
        "apihelp-parse-param-disabletoc": "在輸出裡忽略目錄。",
        "apihelp-parse-example-page": "解析頁面。",
        "apihelp-protect-param-tags": "修改標籤以套用於保護日誌裡的項目。",
        "apihelp-protect-param-cascade": "啟用連鎖保護(也就是保護包含於此頁面的頁面)。如果所有提供的保護等級不支援連鎖,就將其忽略。",
        "apihelp-protect-param-watch": "如果被設定,就將被(解除)保護的頁面加至目前使用者的監視列表。",
-       "apihelp-protect-param-watchlist": "無條件地將該頁面加入至或移除自目前使用者的監視列表、使用偏好設定或不更改監視。",
+       "apihelp-protect-param-watchlist": "使用偏好設定無條件地將頁面加入至或移除自目前使用者的監視清單,或不更改監視。",
        "apihelp-protect-example-protect": "保護一個頁面。",
        "apihelp-protect-example-unprotect": "透過設定為 <kbd>all</kbd>(註:代表任何人都可以執行操作),來解除對頁面的保護。",
        "apihelp-protect-example-unprotect2": "透過設定為沒有限制,來解除對頁面的保護。",
        "apihelp-purge-example-simple": "清除 <kbd>Main Page</kbd> 與 <kbd>API</kbd> 頁面。",
        "apihelp-purge-example-generator": "重新整理主要命名空間的前10個頁面。",
        "apihelp-query-summary": "擷取來自及有關MediaWiki的數據。",
+       "apihelp-query-extended-description": "所有資料變動將會先使用查詢來取得權杖,以避免來自惡意網站的濫用行為。",
        "apihelp-query-param-prop": "替已查詢頁面所要取得的屬性。",
        "apihelp-query-param-list": "要取得的清單。",
        "apihelp-query-param-meta": "要取得的詮釋資料。",
        "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: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+allpages-param-prlevel": "篩選基於保護級別的保護(必須與 $1prtype= 參數一起使用)。",
        "apihelp-query+allpages-param-limit": "要回傳的頁面總數。",
        "apihelp-query+allpages-param-dir": "列出時所採用的方向。",
+       "apihelp-query+allpages-param-filterlanglinks": "篩選基於頁面是否有語言連結。請注意這可能不會考慮由擴充所添加的語言連結。",
        "apihelp-query+allpages-example-B": "顯示以字母 <kbd>B</kbd> 為開頭的所有頁面清單。",
        "apihelp-query+allpages-example-generator": "顯示 4 個以 <kbd>T</kbd> 為開頭的頁面之資訊。",
        "apihelp-query+allpages-example-generator-revisions": "顯示前 2 個以 <kbd>Re</kbd> 為開頭的非重新導向頁面內容。",
        "apihelp-query+mystashedfiles-paramvalue-prop-size": "索取檔案大小與圖片尺寸。",
        "apihelp-query+mystashedfiles-paramvalue-prop-type": "索取檔案的 MIME 類型以及媒體類型。",
        "apihelp-query+mystashedfiles-param-limit": "要取得的檔案數量。",
+       "apihelp-query+alltransclusions-summary": "列出所有嵌入(頁面使用 &#123;&#123;x&#125;&#125; 來內嵌),包含不存在的。",
        "apihelp-query+alltransclusions-param-from": "要起始列舉的嵌入標題。",
        "apihelp-query+alltransclusions-param-to": "要終止列舉的嵌入標題。",
        "apihelp-query+alltransclusions-param-prefix": "搜尋以此值為開頭的所有嵌入標題。",
        "apihelp-query+allusers-param-excludegroup": "排除指定群組中的使用者",
        "apihelp-query+allusers-param-prop": "要包含的資訊部份:",
        "apihelp-query+allusers-paramvalue-prop-blockinfo": "添加有關使用者目前封鎖的資訊。",
+       "apihelp-query+allusers-paramvalue-prop-implicitgroups": "列出使用者自動列入的所有群組。",
        "apihelp-query+allusers-paramvalue-prop-rights": "列出使用者所擁有的權限。",
        "apihelp-query+allusers-paramvalue-prop-editcount": "添加使用者的編輯次數。",
+       "apihelp-query+allusers-paramvalue-prop-registration": "若可能的話,添加當使用者註冊時的時間戳記(可能為空白)。",
        "apihelp-query+allusers-param-limit": "要回傳的使用者名稱總數。",
        "apihelp-query+allusers-param-witheditsonly": "僅列出有做過編輯的使用者。",
        "apihelp-query+allusers-param-activeusers": "僅列出在最近 $1 {{PLURAL:$1|天|天}}裡活躍的使用者。",
        "apihelp-query+backlinks-param-pageid": "要搜尋的頁面 ID。不能與 <var>$1title</var> 一起使用。",
        "apihelp-query+backlinks-param-namespace": "要列舉的命名空間。",
        "apihelp-query+backlinks-param-dir": "列出時所採用的方向。",
+       "apihelp-query+backlinks-param-filterredir": "如何篩選重新導向。當 <var>$1redirect</var> 啟用時若設定成 <kbd>nonredirects</kbd>,這僅會套用到第二級別。",
        "apihelp-query+backlinks-example-simple": "顯示至 <kbd>Main page</kbd> 的連結。",
        "apihelp-query+backlinks-example-generator": "取得連結至 <kbd>Main page</kbd> 的相關頁面資訊。",
        "apihelp-query+blocks-summary": "列出所有被封鎖使用者與 IP 位址。",
        "apihelp-query+blocks-paramvalue-prop-expiry": "添加當封鎖到期的時間戳記。",
        "apihelp-query+blocks-paramvalue-prop-reason": "添加封鎖的原因。",
        "apihelp-query+blocks-paramvalue-prop-range": "添加受封鎖影響的 IP 地址範圍。",
+       "apihelp-query+blocks-param-show": "僅顯示符合這些標準的項目。\n例如僅想查看在 IP 地址的無限期封鎖,請設定 <kbd>$1show=ip|!temp</kbd>。",
        "apihelp-query+blocks-example-simple": "列出封鎖。",
        "apihelp-query+blocks-example-users": "列出使用者 <kbd>Alice</kbd> 與 <kbd>Bob</kbd> 的封鎖。",
        "apihelp-query+categories-summary": "列出頁面隸屬的所有分類。",
        "apihelp-query+extlinks-summary": "回傳所有指定頁面的外部 URL (非 interwiki)。",
        "apihelp-query+extlinks-param-limit": "要回傳的連結數量。",
        "apihelp-query+extlinks-param-protocol": "URL 協定。若為空且有設定 <var>$1query</var>,會是 <kbd>http</kbd> 協定。將此與 <var>$1query</var> 一同留空會列出所有外部連結。",
+       "apihelp-query+extlinks-param-query": "不以協議來搜尋字串,對於檢查某頁面是否包含某個外部 URL 時很有用。",
        "apihelp-query+extlinks-example-simple": "取得 <kbd>Main Page</kbd> 的外部連結清單。",
        "apihelp-query+exturlusage-summary": "列舉包含指定 URL 的頁面。",
        "apihelp-query+exturlusage-param-prop": "要包含的資訊部份:",
        "apihelp-query+exturlusage-paramvalue-prop-ids": "添加頁面 ID。",
        "apihelp-query+exturlusage-paramvalue-prop-title": "添加標題與頁面的命名空間 ID。",
        "apihelp-query+exturlusage-paramvalue-prop-url": "添加用於頁面的 URL。",
+       "apihelp-query+exturlusage-param-protocol": "URL 協定。若為空且有設定 <var>$1query</var>,會是 <kbd>http</kbd> 協定。將此與 <var>$1query</var> 一同留空會列出所有外部連結。",
        "apihelp-query+exturlusage-param-query": "不帶協定的搜尋字串。請查看 [[Special:LinkSearch]]。請留空以列出所有外部連結。",
        "apihelp-query+exturlusage-param-namespace": "要列舉的頁面命名空間。",
        "apihelp-query+exturlusage-param-limit": "要回傳的頁面數量。",
        "apihelp-query+filearchive-paramvalue-prop-archivename": "添加非最新版本的存檔版本檔案名稱。",
        "apihelp-query+filearchive-example-simple": "顯示所有已刪除檔案的清單。",
        "apihelp-query+filerepoinfo-summary": "回傳有關在 wiki 上圖片儲存庫的詮釋資料。",
+       "apihelp-query+filerepoinfo-param-prop": "要取得的儲存庫屬性(可用屬性在其它 wiki 上可能會有差別)。",
        "apihelp-query+filerepoinfo-paramvalue-prop-apiurl": "儲存庫 API 的 URL - 對於從主機取得圖片資訊很有用。",
        "apihelp-query+filerepoinfo-paramvalue-prop-articlepath": "儲存庫 wiki 的 <var>[[mw:Special:MyLanguage/Manual:$wgArticlePath|$wgArticlePath]]</var> 或同等內容。",
+       "apihelp-query+filerepoinfo-paramvalue-prop-canUpload": "檔案是否可上傳至此儲存庫,例如透過 CORS 與共享驗證。",
        "apihelp-query+filerepoinfo-paramvalue-prop-displayname": "人類可讀的儲存庫 wiki 名稱。",
+       "apihelp-query+filerepoinfo-paramvalue-prop-favicon": "儲存庫 wiki 的網頁圖標 URL,來自於 <var>[[mw:Special:MyLanguage/Manual:$wgFavicon|$wgFavicon]]</var>。",
        "apihelp-query+filerepoinfo-paramvalue-prop-initialCapital": "檔案是否隱式地以大寫字母開頭。",
        "apihelp-query+filerepoinfo-paramvalue-prop-local": "儲存庫是否為本地端。",
        "apihelp-query+filerepoinfo-paramvalue-prop-rootUrl": "圖片路徑的根 URL 路徑。",
        "apihelp-query+imageinfo-param-start": "列出的起始時間戳記。",
        "apihelp-query+imageinfo-param-end": "列出的終止時間戳記。",
        "apihelp-query+imageinfo-param-urlheight": "與 $1urlwidth 相似。",
+       "apihelp-query+imageinfo-param-metadataversion": "要使用的詮釋資料版本。若有指定 <kbd>latest</kbd>,會使用最新版本。預設為 <kbd>1</kbd>,以便向下兼容。",
        "apihelp-query+imageinfo-param-extmetadatamultilang": "若用於 extmetadata 屬性的翻譯可用,則全部索取。",
        "apihelp-query+imageinfo-param-extmetadatafilter": "若有指定且非空,僅會為 $1prop=extmetadata 回傳這些鍵。",
        "apihelp-query+imageinfo-param-badfilecontexttitle": "若有設定 <kbd>$2prop=badfile</kbd>,此頁面使用在當評估 [[MediaWiki:Bad image list]] 的時候",
        "apihelp-query+info-paramvalue-prop-url": "替各頁面給予一個完整 URL、一個編輯 URL,以及一個規範 URL。",
        "apihelp-query+info-paramvalue-prop-readable": "使用者是否可閱讀此頁面。請改用 <kbd>intestactions=read</kbd>。",
        "apihelp-query+info-paramvalue-prop-preload": "取得由 EditFormPreloadText 回傳的文字。",
+       "apihelp-query+info-paramvalue-prop-displaytitle": "在頁面標題實際顯示處提供方式。",
+       "apihelp-query+info-paramvalue-prop-varianttitles": "指定網站內容語言裡所有變體的顯示標題。",
        "apihelp-query+info-param-testactions": "測試目前使用者是否可執行頁面上的某項操作。",
        "apihelp-query+info-paramvalue-testactionsdetail-boolean": "回傳各操作的布林值。",
        "apihelp-query+info-paramvalue-testactionsdetail-full": "回傳描述出為何操作被禁止的訊息,或為允許則回傳空陣列。",
        "apihelp-query+protectedtitles-param-start": "在此保護時間戳記開始列出。",
        "apihelp-query+protectedtitles-param-end": "在此保護時間戳記停止列出。",
        "apihelp-query+protectedtitles-param-prop": "要取得的屬性。",
+       "apihelp-query+protectedtitles-paramvalue-prop-timestamp": "添加當保護被添加時的時間戳記。",
        "apihelp-query+protectedtitles-paramvalue-prop-user": "添加做出添加保護操作的使用者。",
        "apihelp-query+protectedtitles-paramvalue-prop-userid": "添加做出添加保護操作的使用者 ID。",
        "apihelp-query+protectedtitles-paramvalue-prop-comment": "添加保護的註釋。",
        "apihelp-query+protectedtitles-paramvalue-prop-parsedcomment": "添加保護的解析註釋。",
+       "apihelp-query+protectedtitles-paramvalue-prop-expiry": "添加當保護被提升時的時間戳記。",
        "apihelp-query+protectedtitles-paramvalue-prop-level": "添加保護層級。",
        "apihelp-query+protectedtitles-example-simple": "列出已保護的標題。",
        "apihelp-query+protectedtitles-example-generator": "找出在主命名空間裡連至已保護標題的連結。",
        "apihelp-query+redirects-paramvalue-prop-fragment": "各重新導向的片段,若有的話。",
        "apihelp-query+redirects-param-namespace": "僅包含這些命名空間的頁面。",
        "apihelp-query+redirects-param-limit": "要回傳的重新導向數量。",
+       "apihelp-query+redirects-param-show": "僅顯示符合這些標準的項目:\n;fragment:僅顯示帶部分內容的重新導向。\n;!fragment:僅顯示不帶部分內容的重新導向。",
        "apihelp-query+redirects-example-simple": "取得 [[Main Page]] 的重新導向清單",
        "apihelp-query+redirects-example-generator": "取得所有重新導向至 [[Main Page]] 的資訊。",
        "apihelp-query+revisions-summary": "取得修訂的資訊。",
        "apihelp-query+revisions-param-user": "僅包含由使用者做出的修訂。",
        "apihelp-query+revisions-param-excludeuser": "不包含由使用者做出的修訂。",
        "apihelp-query+revisions-param-tag": "僅列出以此標籤所標記的修訂。",
+       "apihelp-query+revisions-param-token": "各修訂所要獲得的權杖。",
        "apihelp-query+revisions-example-content": "取得用於標題 <kbd>API</kbd> 與 <kbd>Main Page</kbd> 最新修訂內容的資料。",
        "apihelp-query+revisions-example-last5": "取得 <kbd>Main Page</kbd> 的最近 5 筆修訂。",
        "apihelp-query+revisions-example-first5": "取得 <kbd>Main Page</kbd> 的最早前 5 筆修訂。",
        "apihelp-query+siteinfo-paramvalue-prop-libraries": "回傳安裝在 wiki 上的函式庫。",
        "apihelp-query+siteinfo-paramvalue-prop-extensions": "回傳安裝在 wiki 上的擴充功能。",
        "apihelp-query+siteinfo-paramvalue-prop-fileextensions": "回傳允許上傳的副檔名(檔案類型)清單。",
+       "apihelp-query+siteinfo-paramvalue-prop-rightsinfo": "若可用時,回傳 wiki 版權(授權條款)資訊。",
        "apihelp-query+siteinfo-paramvalue-prop-restrictions": "回傳在可用限制(保護)類型的資訊。",
        "apihelp-query+siteinfo-paramvalue-prop-extensiontags": "回傳解析擴充標籤清單。",
        "apihelp-query+siteinfo-paramvalue-prop-functionhooks": "回傳解析器函式掛勾清單。",
        "apihelp-query+templates-param-dir": "列出時所採用的方向。",
        "apihelp-query+templates-example-simple": "取得在頁面 <kbd>Main Page</kbd> 使用到的模坂。",
        "apihelp-query+templates-example-generator": "取得使用在 <kbd>Main Page</kbd> 的模版頁面相關資訊。",
+       "apihelp-query+tokens-summary": "取得資料修改操作的權杖。",
        "apihelp-query+tokens-param-type": "要求的權杖類型。",
-       "apihelp-query+tokens-example-simple": "接收 csrf 密鑰 (預設)。",
-       "apihelp-query+tokens-example-types": "接收監視密鑰以及巡邏密鑰。",
+       "apihelp-query+tokens-example-simple": "接收 csrf 權杖(預設)。",
+       "apihelp-query+tokens-example-types": "接收監視權杖以及巡邏權杖。",
        "apihelp-query+transcludedin-summary": "找出嵌入至指定頁面的所有頁面。",
        "apihelp-query+transcludedin-param-prop": "要取得的屬性。",
        "apihelp-query+transcludedin-paramvalue-prop-pageid": "各頁面的頁面 ID。",
        "apihelp-query+userinfo-paramvalue-prop-groups": "列出目前使用者所隸屬的所有群組。",
        "apihelp-query+userinfo-paramvalue-prop-rights": "列出目前使用者所擁有的權限。",
        "apihelp-query+userinfo-paramvalue-prop-options": "列出目前使用者已設定過的所有偏好設定。",
+       "apihelp-query+userinfo-paramvalue-prop-preferencestoken": "取得權杖來變更目前使用者的偏好設定。",
        "apihelp-query+userinfo-paramvalue-prop-editcount": "添加目前使用者的編輯數。",
        "apihelp-query+userinfo-paramvalue-prop-ratelimits": "列出所有套用到目前使用者的速率限制。",
        "apihelp-query+userinfo-paramvalue-prop-realname": "添加使用者的真實姓名。",
        "apihelp-query+users-param-prop": "要包含的資訊部份:",
        "apihelp-query+users-paramvalue-prop-blockinfo": "若使用者被封鎖則標記出由誰做出,以及出於何種原因。",
        "apihelp-query+users-paramvalue-prop-groups": "列出各使用者所隸屬的所有群組。",
+       "apihelp-query+users-paramvalue-prop-implicitgroups": "列出使用者自動列入為成員的所有群組。",
        "apihelp-query+users-paramvalue-prop-rights": "列出各使用者所擁有的權限。",
        "apihelp-query+users-paramvalue-prop-editcount": "添加使用者的編輯數。",
        "apihelp-query+users-paramvalue-prop-registration": "添加使用者的註冊時間戳記。",
        "apihelp-query+watchlist-paramvalue-type-new": "頁面建立。",
        "apihelp-query+watchlist-paramvalue-type-log": "日誌項目。",
        "apihelp-query+watchlist-paramvalue-type-categorize": "分類成員更改。",
+       "apihelp-query+watchlist-param-token": "允許存取其他使用者監視清單的安全權杖(可在使用者的[[Special:Preferences#mw-prefsection-watchlist|偏好設定]]找到)。",
        "apihelp-query+watchlist-example-generator": "索取在目前使用者監視清單裡近期變更頁面的頁面資訊。",
        "apihelp-query+watchlistraw-summary": "列出在目前使用者的監視清單裡頭所有頁面。",
        "apihelp-query+watchlistraw-param-namespace": "僅列出在指定命名空間的頁面。",
        "apihelp-query+watchlistraw-param-limit": "每個請求要回傳的結果總數。",
        "apihelp-query+watchlistraw-param-prop": "要取得的額外屬性:",
        "apihelp-query+watchlistraw-param-show": "僅列出符合這些準則的項目。",
+       "apihelp-query+watchlistraw-param-token": "允許存取其他使用者監視清單的安全權杖(可在使用者的[[Special:Preferences#mw-prefsection-watchlist|偏好設定]]找到)。",
        "apihelp-query+watchlistraw-param-dir": "列出時所採用的方向。",
        "apihelp-query+watchlistraw-param-fromtitle": "要開始列舉的標題(帶有命名空間前綴)。",
        "apihelp-query+watchlistraw-param-totitle": "要停止列舉的標題(帶有命名空間前綴)。",
        "apihelp-rollback-param-user": "編輯被回退的使用者名稱。",
        "apihelp-rollback-param-summary": "自定義編輯摘要。若為空,則使用預設摘要。",
        "apihelp-rollback-param-markbot": "將回退的編輯以及回退操作標記為機器人所做編輯。",
-       "apihelp-rollback-param-watchlist": "無條件使用設置將頁面加入或移除目前使用者的監視清單或者是不更改監視清單。",
+       "apihelp-rollback-param-watchlist": "使用偏好設定無條件地將頁面加入至或移除自目前使用者的監視清單,或不更改監視。",
        "apihelp-rollback-example-simple": "回退由使用者 <kbd>Example</kbd> 對頁面 <kbd>Main Page</kbd> 所做的最新編輯。",
        "apihelp-rsd-summary": "匯出一個簡易探索(Really Simple Discovery、RSD)架構。",
        "apihelp-rsd-example-simple": "匯出 RSD 架構。",
        "apihelp-tag-param-revid": "要添加或移除標籤的一個或多個修訂 ID。",
        "apihelp-tag-param-logid": "要添加或移除標籤的一個或多個日誌項目 ID。",
        "apihelp-tag-param-reason": "變更的原因。",
-       "apihelp-tokens-summary": "取得資料修改動作的密鑰。",
+       "apihelp-tokens-summary": "取得資料修改動作的權杖。",
        "apihelp-tokens-extended-description": "此模組已因支援 [[Special:ApiHelp/query+tokens|action=query&meta=tokens]] 而停用。",
+       "apihelp-tokens-param-type": "請求的權杖類型。",
+       "apihelp-tokens-example-edit": "檢索編輯權杖(預設)。",
+       "apihelp-tokens-example-emailmove": "檢索電子郵件權杖並移動權杖。",
        "apihelp-unblock-summary": "解除封鎖一位使用者。",
        "apihelp-unblock-param-user": "要封鎖的使用者名稱、IP 位址或 IP 範圍。不能與 <var>$1id</var> 或 <var>$1userid</var> 一起使用",
        "apihelp-unblock-param-userid": "要封鎖的使用者 ID。不可與 <var>$1id</var> 或 <var>$1user</var> 一同使用。",
        "apihelp-undelete-param-title": "要恢復的頁面標題。",
        "apihelp-undelete-param-reason": "還原的原因。",
        "apihelp-undelete-param-tags": "在刪除日誌裡更改套用到項目的標籤。",
+       "apihelp-undelete-param-watchlist": "使用偏好設定無條件地將頁面加入至或移除自目前使用者的監視清單,或不更改監視。",
        "apihelp-undelete-example-page": "取消刪除頁面 <kbd>Main Page</kbd>。",
        "apihelp-undelete-example-revisions": "取消刪除 <kbd>Main Page</kbd> 的兩筆修訂。",
        "apihelp-unlinkaccount-summary": "移除目前使用者所連結到的第三方帳號。",
        "apihelp-upload-summary": "上傳檔案,或取得等待上傳的狀態。",
        "apihelp-upload-param-filename": "目標檔案名稱。",
        "apihelp-upload-param-comment": "上傳註釋。如果 <var>$1text</var> 未指定的話,也會作為新檔案用的初始頁面文字。",
+       "apihelp-upload-param-tags": "更改標籤來套用到上傳日誌項目以及檔案頁面修訂。",
        "apihelp-upload-param-text": "用於新檔案的初始頁面文字。",
        "apihelp-upload-param-watch": "監視頁面。",
+       "apihelp-upload-param-watchlist": "使用偏好設定無條件地將頁面加入至或移除自目前使用者的監視清單,或不更改監視。",
        "apihelp-upload-param-ignorewarnings": "忽略所有警告。",
        "apihelp-upload-param-file": "檔案內容。",
        "apihelp-upload-param-url": "索取檔案的來源 URL。",
        "apihelp-upload-param-chunk": "大量內容。",
        "apihelp-upload-param-async": "在可能的情況下讓潛在的大型檔案非同步處理。",
        "apihelp-upload-example-url": "從 URL 上傳。",
+       "apihelp-upload-example-filekey": "完成出於警告而失敗的上傳。",
        "apihelp-userrights-summary": "變更一位使用者的群組成員。",
        "apihelp-userrights-param-user": "使用者名稱。",
        "apihelp-userrights-param-userid": "使用者ID。",
-       "apihelp-userrights-param-add": "加入使用者至這些群組;若已是成員,則更新失效時間。",
+       "apihelp-userrights-param-add": "加入使用者至這些群組;若已是成員,則更新期限時間。",
        "apihelp-userrights-param-remove": "從這些群組移除使用者。",
        "apihelp-userrights-param-reason": "變更的原因。",
+       "apihelp-userrights-param-tags": "在使用者權限日誌裡更改套用到項目的標籤。",
        "apihelp-userrights-example-expiry": "添加使用者 <kbd>SometimeSysop</kbd> 至群組 <kbd>sysop</kbd> 為期一個月時間。",
        "apihelp-validatepassword-summary": "驗證密碼是否符合 wiki 的密碼方針。",
        "apihelp-validatepassword-param-password": "要驗證的密碼。",
        "apihelp-validatepassword-example-1": "驗證目前使用者的密碼 <kbd>foobar</kbd>。",
        "apihelp-validatepassword-example-2": "為建立的使用者 <kbd>Example</kbd> 驗證密碼 <kbd>qwerty</kbd>。",
        "apihelp-watch-summary": "從目前使用者的監視清單添加或移除頁面。",
+       "apihelp-watch-param-title": "要(取消)監視的頁面。請改用 <var>$1titles</var>。",
        "apihelp-watch-param-unwatch": "若設定頁面,則會取消監視而非被監視。",
        "apihelp-watch-example-watch": "監視頁面 <kbd>Main Page</kbd>。",
        "apihelp-watch-example-unwatch": "取消監視頁面 <kbd>Main Page</kbd>。",
        "api-pageset-param-titles": "要使用的標題清單。",
        "api-pageset-param-pageids": "要使用的頁面 ID 清單。",
        "api-pageset-param-revids": "要使用的修訂 ID 清單。",
+       "api-pageset-param-redirects-generator": "自動解決在 <var>$1titles</var>、<var>$1pageids</var>、<var>$1revids</var>,以及由 <var>$1generator</var> 所回傳頁面裡的重新導向。",
+       "api-pageset-param-redirects-nogenerator": "自動解決在 <var>$1titles</var>、<var>$1pageids</var>,與 <var>$1revids</var> 的重新導向。",
        "api-help-title": "MediaWiki API 說明",
        "api-help-lead": "此頁為自動產生的 MediaWiki API 說明文件頁面。\n\n說明文件與範例:https://www.mediawiki.org/wiki/API",
        "api-help-main-header": "主要模組",
        "api-help-flag-generator": "此模組可作為產生器使用。",
        "api-help-source": "來源:$1",
        "api-help-source-unknown": "來源:<span class=\"apihelp-unknown\">未知</span>",
-       "api-help-license": "協定:[[$1|$2]]",
+       "api-help-license": "授權條款:[[$1|$2]]",
        "api-help-license-noname": "協定:[[$1|查看連結]]",
-       "api-help-license-unknown": "協定:<span class=\"apihelp-unknown\">未知</span>",
+       "api-help-license-unknown": "授權條款:<span class=\"apihelp-unknown\">未知</span>",
        "api-help-parameters": "{{PLURAL:$1|參數}}:",
        "api-help-param-deprecated": "已停用。",
        "api-help-param-required": "此參數為必填。",
+       "api-help-param-templated": "此為[[Special:ApiHelp/main#main/templatedparams|模板參數]]。當做出請求時,$2。",
+       "api-help-param-templated-var-first": "在參數名稱裡的 <var>&#x7B;$1&#x7D;</var> 應替換成 <var>$2</var> 的值",
+       "api-help-param-templated-var": "<var>&#x7B;$1&#x7D;</var> 與 <var>$2</var> 的值",
        "api-help-datatypes-header": "資料類型",
        "api-help-datatypes": "至MediaWiki的輸入值應為NFC標準化的UTF-8。MediaWiki可以嘗試轉換其他輸入值,但這可能導致一些操作失敗(例如附帶MD5檢查的[[Special:ApiHelp/edit|編輯]])。\n\n一些在API請求中的參數類型需要更進一步解釋:\n;boolean\n:布林參數產生作用就像HTML複選框一樣:如果參數被指定,無論何值都被視為真(true)。如果要假值(false),則必須省略參數。\n;timestamp\n:時間戳記可被指定為多種格式。推荐使用ISO 8601日期和時間標準。所有時間為UTC時間,包含的任何時區都會被忽略。\n:* ISO 8601日期和時間,<kbd><var>2001</var>-<var>01</var>-<var>15</var>T<var>14</var>:<var>56</var>:<var>00</var>Z</kbd>(標點和<kbd>Z</kbd>為選用)\n:* 帶小數秒(會被忽略)的ISO 8601日期和時間,<kbd><var>2001</var>-<var>01</var>-<var>15</var>T<var>14</var>:<var>56</var>:<var>00</var>.<var>00001</var>Z</kbd>(破折號、冒號和<kbd>Z</kbd>為選用)\n:* MediaWiki格式,<kbd><var>2001</var><var>01</var><var>15</var><var>14</var><var>56</var><var>00</var></kbd>\n:* 一般數字格式,<kbd><var>2001</var>-<var>01</var>-<var>15</var> <var>14</var>:<var>56</var>:<var>00</var></kbd>(<kbd>GMT</kbd>、<kbd>+<var>##</var></kbd>或<kbd>-<var>##</var></kbd>的選用時區會被忽略)\n:* EXIF格式,<kbd><var>2001</var>:<var>01</var>:<var>15</var> <var>14</var>:<var>56</var>:<var>00</var></kbd>\n:* RFC 2822格式(時區可省略),<kbd><var>Mon</var>, <var>15</var> <var>Jan</var> <var>2001</var> <var>14</var>:<var>56</var>:<var>00</var></kbd>\n:* RFC 850格式(時區可省略),<kbd><var>Monday</var>, <var>15</var>-<var>Jan</var>-<var>2001</var> <var>14</var>:<var>56</var>:<var>00</var></kbd>\n:* C ctime格式,<kbd><var>Mon</var> <var>Jan</var> <var>15</var> <var>14</var>:<var>56</var>:<var>00</var> <var>2001</var></kbd>\n:* 從1970-01-01T00:00:00Z開始的秒數,作為1到13位數的整數(除了<kbd>0</kbd>)\n:* 字串<kbd>now</kbd>\n;替代多值分隔符號\n:使用多個值的參數通常會與垂直線符號(|)分隔的值一起提交,例如<kbd>param=value1|value2</kbd>或<kbd>param=value1%7Cvalue2</kbd>。如果值必須包含垂直線符號,使用U+001F(單位分隔符號)作為分隔符號,''並且''在值前加前綴U+001F,例如<kbd>param=%1Fvalue1%1Fvalue2</kbd>。",
        "api-help-templatedparams-header": "模板參數",
        "api-help-param-multi-all": "要指定所有值,請使用<kbd>$1</kbd>。",
        "api-help-param-default": "預設值:$1",
        "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中使用的代碼(Token)也是可接受的。",
+       "api-help-param-token": "自 [[Special:ApiHelp/query+tokens|action=query&meta=tokens]] 接收的 \"$1\" 權杖。",
+       "api-help-param-token-webui": "為顧及相容性,web UI 中使用的權杖(Token)也是可接受的。",
        "api-help-param-disabled-in-miser-mode": "因[[mw:Special:MyLanguage/Manual:$wgMiserMode|miser模式]]而被停用。",
-       "api-help-param-limited-in-miser-mode": "<strong>注æ\84\8fï¼\9a</strong>å\9b [[mw:Special:MyLanguage/Manual:$wgMiserMode|miser模å¼\8f]]ï¼\8c使ç\94¨é\80\99å\80\8bå\8f¯è\83½å°\8eè\87´ç¹¼çº\8c以å\89\8då\82³å\9b\9eå°\91æ\96¼<var>$1limit</var>ç­\86çµ\90æ\9e\9cï¼\9b極端æ\83\85æ³\81ä¸\8b可能不會傳回任何结果。",
+       "api-help-param-limited-in-miser-mode": "<strong>注æ\84\8fï¼\9a</strong>å\87ºæ\96¼ [[mw:Special:MyLanguage/Manual:$wgMiserMode|miser æ¨¡å¼\8f]]ç·£æ\95\85ï¼\8c使ç\94¨é\80\99å\80\8bå\8f¯è\83½æ\9c\83å°\8eè\87´å\9c¨ç¹¼çº\8cä¹\8bå\89\8dï¼\8cå\82³å\9b\9eå°\91æ\96¼ <var>$1limit</var> ç­\86ç\9a\84çµ\90æ\9e\9cï¼\8c極端æ\83\85æ³\81ä¸\8bå\89\87可能不會傳回任何结果。",
        "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>",
        "api-help-examples": "{{PLURAL:$1|範例}}:",
        "api-help-permissions": "{{PLURAL:$1|權限}}:",
        "api-help-permissions-granted-to": "{{PLURAL:$1|已授權給}}: $2",
+       "api-help-right-apihighlimits": "在 API 查詢使用較高的限制(慢查詢:$1;快查詢:$2)。慢查詢的限制也適用於多值參數。",
        "api-help-open-in-apisandbox": "<small>[在沙盒中開啟]</small>",
-       "api-help-authmanager-general-usage": "使用此模組的一般程式是:\n# 通過<kbd>amirequestsfor=$4</kbd>取得來自<kbd>[[Special:ApiHelp/query+authmanagerinfo|action=query&meta=authmanagerinfo]]</kbd>的可用欄位,和來自<kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd>的<kbd>$5</kbd>令牌。\n# 向用戶顯示欄位,並獲得其提交的內容。\n# 提交(POST)至此模組,提供<var>$1returnurl</var>及任何相關欄位。\n# 在回应中檢查<samp>status</samp>。\n#* 如果您收到了<samp>PASS</samp>(成功)或<samp>FAIL</samp>(失敗),則認為操作結束。成功與否如上句所示。\n#* 如果您收到了<samp>UI</samp>,向用戶顯示新欄位,並再次獲取其提交的內容。然後再次使用<var>$1continue</var>,向本模組提交相關欄位,並重復第四步。\n#* 如果您收到了<samp>REDIRECT</samp>,將使用者指向<samp>redirecttarget</samp>中的目標,等待其返回<var>$1returnurl</var>。然後再次使用<var>$1continue</var>,向本模組提交返回URL中提供的一切欄位,並重復第四步。\n#* 如果您收到了<samp>RESTART</samp>,這意味著身份驗證正常運作,但我們沒有連結的使用者賬戶。您可以將此看做<samp>UI</samp>或<samp>FAIL</samp>。",
+       "api-help-authmanager-general-usage": "使用此模組的一般程式是:\n# 通過 <kbd>amirequestsfor=$4</kbd> 取得來自 <kbd>[[Special:ApiHelp/query+authmanagerinfo|action=query&meta=authmanagerinfo]]</kbd> 的可用欄位,和來自 <kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd> 的<kbd>$5</kbd>權杖。\n# 向用戶顯示欄位,並獲得其提交的內容。\n# 提交(POST)至此模組,提供 <var>$1returnurl</var> 及任何相關欄位。\n# 在回應中檢查 <samp>status</samp>。\n#* 如果您收到了 <samp>PASS</samp>(成功)或<samp>FAIL</samp>(失敗),則認為操作結束。成功與否如上句所示。\n#* 如果您收到了 <samp>UI</samp>,向用戶顯示新欄位,並再次獲取其提交的內容。然後再次使用 <var>$1continue</var>,向本模組提交相關欄位,並重復第四步。\n#* 如果您收到了 <samp>REDIRECT</samp>,將使用者指向<samp>redirecttarget</samp> 中的目標,等待其返回<var>$1returnurl</var>。然後再次使用 <var>$1continue</var>,向本模組提交返回 URL 中提供的一切欄位,並重復第四步。\n#* 如果您收到了 <samp>RESTART</samp>,這意味著身份驗證正常運作,但我們沒有連結的使用者帳戶。您可以將此視為 <samp>UI</samp>或<samp>FAIL</samp>。",
        "api-help-authmanagerhelper-requests": "只使用這些身份驗證請求,透過自<kbd>[[Special:ApiHelp/query+authmanagerinfo|action=query&meta=authmanagerinfo]]</kbd>回傳的<samp>id</samp>與<kbd>amirequestsfor=$1</kbd>,或來自此模組之前的回應。",
        "api-help-authmanagerhelper-request": "使用此身份驗證請求,透過自<kbd>[[Special:ApiHelp/query+authmanagerinfo|action=query&meta=authmanagerinfo]]</kbd>回傳的<samp>id</samp>與<kbd>amirequestsfor=$1</kbd>。",
        "api-help-authmanagerhelper-messageformat": "用於回傳訊息的格式。",
        "api-help-authmanagerhelper-returnurl": "為第三方身份驗證流程傳回URL,必須為絕對值。需要此值或<var>$1continue</var>兩者之一。\n\n在接收<samp>REDIRECT</samp>回應時,一般狀況下您將打開瀏覽器或網站瀏覽功能到特定的<samp>redirecttarget</samp> URL以進行第三方身份驗證流程。當它完成時,第三方會將瀏覽器或網站瀏覽功能送至此URL。您應當提取任何來自URL的查詢或POST參數,並將之作為<var>$1continue</var>請求傳遞至此API模組。",
        "api-help-authmanagerhelper-continue": "此請求是在先前的<samp>UI</samp>或<samp>REDIRECT</samp>回應之後的後續動作。必須為此值或<var>$1returnurl</var>。",
        "api-help-authmanagerhelper-additional-params": "此模組允許額外參數,取決於可用的身份驗證請求。使用<kbd>[[Special:ApiHelp/query+authmanagerinfo|action=query&meta=authmanagerinfo]]</kbd>与<kbd>amirequestsfor=$1</kbd>(或之前來自此模組的回應,如果合適)以決定可用請求及其使用的欄位。",
+       "apierror-allimages-redirect": "當使用 <kbd>allimages</kbd> 作為產生器時,請改用 <kbd>gaifilterredir=nonredirects</kbd> 而不是 <var>redirects</var>。",
+       "apierror-allpages-generator-redirects": "當使用 <kbd>allpages</kbd> 作為產生器時,請改用 <kbd>gapfilterredir=nonredirects</kbd> 而不是 <var>redirects</var>。",
        "apierror-appendnotsupported": "無法附加到使用內容模組 $1 的頁面。",
        "apierror-articleexists": "您所嘗試建立的條目剛剛已被創建。",
        "apierror-assertbotfailed": "斷言使用者擁有的 <code>bot</code> 權限失效。",
        "apierror-assertuserfailed": "斷言使用者已登入失敗。",
        "apierror-autoblocked": "您的 IP 位址已經被自動封鎖,因為它曾經被一名已封鎖的使用者使用過。",
        "apierror-bad-badfilecontexttitle": "在 <var>$1badfilecontexttitle</var> 參數的無效標題。",
+       "apierror-badconfig-resulttoosmall": "在此 wiki 上 <code>$wgAPIMaxResultSize</code> 的值太小,而無法含有基本結果資訊。",
+       "apierror-badcontinue": "無效的繼續參數。您應該傳遞由前一個查詢所回傳的原有值。",
+       "apierror-baddiff": "無法取得差異。不存在一個或兩個修訂,或是您沒有權限來檢視它們。",
        "apierror-baddiffto": "<var>$1diffto</var> 必須設定成非負值的數字、<kbd>prev</kbd>、<kbd>next</kbd>、或 <kbd>cur</kbd>。",
        "apierror-badformat-generic": "內容模組 $2 不支援使用請求格式 $1。",
+       "apierror-badformat": "由 $3 所使用的內容模組 $2 不支援使用請求格式 $1。",
        "apierror-badgenerator-notgenerator": "模組 <kbd>$1</kbd> 不能作為產生器。",
        "apierror-badgenerator-unknown": "未知的 <kbd>generator=$1</kbd>。",
        "apierror-badip": "IP 參數無效。",
        "apierror-badmodule-nosubmodules": "模組 <kbd>$1</kbd> 沒有子模組。",
        "apierror-badparameter": "參數 <var>$1</var> 的值無效。",
        "apierror-badquery": "無效的查詢。",
+       "apierror-badtimestamp": "用於時間戳記參數 <var>$1</var> 的值「$2」無效。",
+       "apierror-badtoken": "無效 CSRF 權杖。",
+       "apierror-badupload": "檔案上傳參數 <var>$1</var> 不是一個檔案上傳,請確定在您的 POST 有使用 <code>multipart/form-data</code>,並且在 <code>Content-Disposition</code> 標頭有包含檔案名稱。",
+       "apierror-badurl": "用於 URL 參數 <var>$1</var> 的值「$2」無效。",
+       "apierror-baduser": "用於使用者參數 <var>$1</var> 的值「$2」無效。",
+       "apierror-bad-watchlist-token": "提供無效的監視清單權杖。請在 [[Special:Preferences]] 設定正確權杖。",
        "apierror-blockedfrommail": "您已被封鎖,無法發送電子郵件。",
        "apierror-blocked": "您已被封鎖,無法編輯。",
        "apierror-blocked-partial": "您已被禁止編輯此頁面。",
        "apierror-botsnotsupported": "此介面不支援機器人。",
+       "apierror-cannotreauthenticate": "出於您的身份無法驗證,此操作不可用。",
        "apierror-cannotviewtitle": "您不被允許檢視$1。",
        "apierror-cantblock-email": "您沒有權限來封鎖使用者透過 wiki 來發送電子郵件。",
        "apierror-cantblock": "您沒有權限來解封使用者。",
        "apierror-canthide": "您沒有權限來從封鎖日誌隱藏使用者名稱。",
        "apierror-cantimport-upload": "您沒有權限來匯入已上傳頁面。",
        "apierror-cantimport": "您沒有權限來匯入頁面。",
+       "apierror-cantoverwrite-sharedfile": "目標檔案存在於分享儲存庫上,因此您沒有權限來覆蓋掉。",
+       "apierror-cantsend": "您尚未登入,您沒有已確認的電子郵件地址,或是您未被允許發送電子郵件給其他人,因此您不能發送電子郵件。",
+       "apierror-cantundelete": "無法取消刪除:請求的修訂可能不存在,或是可能已被取消刪除。",
        "apierror-changeauth-norequest": "建立更改請求失敗。",
+       "apierror-cidrtoobroad": "不能接受超出 /$2 的 $1 CIDR 範圍。",
+       "apierror-compare-no-title": "無法在不帶標題之下預先儲存轉換。請嘗試指定 <var>fromtitle</var> 或 <var>totitle</var>。",
+       "apierror-compare-nosuchfromsection": "在 'from' 內容裡沒有段落$1。",
+       "apierror-compare-nosuchtosection": "在 'to' 內容裡沒有段落$1。",
        "apierror-compare-notext": "參數 <var>$1</var> 不能在缺少 <var>$2</var> 的情況下使用。",
        "apierror-contentserializationexception": "內容序列化失敗:$1",
        "apierror-copyuploadbaddomain": "不允許從此網域來透過 URL 上傳。",
        "apierror-copyuploadbadurl": "不允許從此 URL 來上傳。",
+       "apierror-create-titleexists": "現有標題不能以 <kbd>create</kbd> 來保護。",
        "apierror-csp-report": "處理 CSP 報告時錯誤:$1。",
+       "apierror-deletedrevs-param-not-1-2": "<var>$1</var> 參數不可用於模式 1 或 2。",
+       "apierror-deletedrevs-param-not-3": "<var>$1</var> 參數不可用於模式 3。",
        "apierror-emptynewsection": "新段落不可建立空白內容。",
        "apierror-emptypage": "不允許建立空白的新頁面。",
        "apierror-exceptioncaught": "[$1]捕獲異常:$2",
        "apierror-exceptioncaughttype": "[$1]捕獲異常類型:$2",
        "apierror-filedoesnotexist": "檔案不存在。",
+       "apierror-fileexists-sharedrepo-perm": "目標檔案存在於分享儲存庫上。請使用參數 <var>ignorewarnings</var> 來覆蓋掉。",
        "apierror-filenopath": "無法取得本地端檔案路徑。",
        "apierror-filetypecannotberotated": "無法旋轉的檔案類型。",
+       "apierror-formatphp": "此回應不能使用 <kbd>format=php</kbd> 來表示。請參閱 https://phabricator.wikimedia.org/T68776。",
        "apierror-imageusage-badtitle": "<kbd>$1</kbd>的標題必須是檔案。",
        "apierror-import-unknownerror": "未知的匯入錯誤:$1",
+       "apierror-integeroutofrange-abovebotmax": "對於機器人或系統管理員而言,<var>$1</var> 不能超過 $2(設定為 $3)。",
+       "apierror-integeroutofrange-abovemax": "對於使用者而言,<var>$1</var> 不能超過 $2(設定為 $3)。",
+       "apierror-integeroutofrange-belowminimum": "<var>$1</var> 不能小於 $2(設定為 $3)。",
        "apierror-invalidcategory": "您所輸入的分類名稱無效。",
+       "apierror-invalidexpiry": "無效的期限時間「$1」。",
        "apierror-invalidlang": "用於參數 <var>$1</var> 的語言代碼無效。",
+       "apierror-invalidmethod": "無效的 HTTP 方式。請考慮採用 GET 或 POST。",
        "apierror-invalidoldimage": "<var>oldimage</var> 參數含有無效格式。",
        "apierror-invalidparammix-cannotusewith": "參數 <kbd>$1</kbd> 不能與 <kbd>$2</kbd> 一起使用。",
        "apierror-invalidparammix-mustusewith": "<kbd>$1</kbd> 參數僅能與 <kbd>$2</kbd> 一起使用。",
+       "apierror-invalidparammix-parse-new-section": "<kbd>section=new</kbd> 不能連同 <var>oldid</var>、<var>pageid</var>、或 <var>page</var> 參數。請使用 <var>title</var> 與 <var>text</var>。",
        "apierror-invalidparammix": "{{PLURAL:$2|參數}} $1 不能一起使用。",
+       "apierror-invalidsection": "<var>section</var> 參數必須是有效的段落 ID 或 <kbd>new</kbd>。",
        "apierror-invalidsha1base36hash": "所提供的 SHA1Base36 雜湊無效。",
        "apierror-invalidsha1hash": "所提供的 SHA1 雜湊無效。",
        "apierror-invalidtitle": "錯誤標題「$1」。",
        "apierror-mimesearchdisabled": "MIME 搜尋在 Miser 模式裡被停用。",
        "apierror-missingcontent-pageid": "遺失頁面 ID 為 $1 的內容。",
        "apierror-missingcontent-revid": "遺失修訂 ID 為 $1 的內容。",
-       "apierror-missingparam-one-of": "{{PLURAL:$2|參數|參數其一}} $1 為必要。",
+       "apierror-missingparam-at-least-one-of": "參數$1{{PLURAL:$2||其一}}為必要。",
+       "apierror-missingparam-one-of": "參數$1{{PLURAL:$2||其一}}為必要。",
        "apierror-missingparam": "<var>$1</var>參數必須被設定。",
        "apierror-missingrev-pageid": "沒有頁面 ID 為 $1 的目前修訂。",
        "apierror-missingrev-title": "沒有標題為$1的目前修訂。",
+       "apierror-missingtitle-createonly": "遺失標題不能以 <kbd>create</kbd> 來保護。",
        "apierror-missingtitle": "您所指定的頁面不存在。",
        "apierror-missingtitle-byname": "頁面$1不存在。",
        "apierror-moduledisabled": "模組 <kbd>$1</kbd> 已停用。",
+       "apierror-multival-only-one-of": "參數 <var>$1</var> 僅允許$2{{PLURAL:$3||其一}}。",
        "apierror-multpages": "<var>$1</var> 僅能以單一頁面使用。",
        "apierror-mustbeloggedin-changeauth": "必須登入,才能變更身分核對資取。",
        "apierror-mustbeloggedin-generic": "您必須登入。",
        "apierror-mustbeloggedin-uploadstash": "上傳儲藏僅對已登入使用者可用。",
        "apierror-mustbeloggedin": "您必須登入才能$1。",
        "apierror-mustbeposted": "<kbd>$1</kbd> 模組需要 POST 請求。",
+       "apierror-mustpostparams": "在查詢字串裡找出以下{{PLURAL:$2|參數|參數}},而這應必須在 POST 正文裡:$1。",
+       "apierror-noapiwrite": "透過 API 來編輯此 wiki 已被停用。請確認 <code>$wgEnableWriteAPI=true;</code> 聲明有包含在 wiki 的 <code>LocalSettings.php</code> 檔案裡。",
        "apierror-nochanges": "沒有請求的更改。",
        "apierror-nodeleteablefile": "沒有這樣檔案的舊版本。",
+       "apierror-no-direct-editing": "由$2所使用的內容模組$1不支援透過 API 來直接編輯。",
        "apierror-noedit-anon": "匿名使用者不可編輯頁面。",
        "apierror-noedit": "您沒有權限來編輯頁面。",
        "apierror-noimageredirect-anon": "匿名使用者不能建立圖片重新導向。",
        "apierror-notarget": "您沒有替此操作指定有效目標。",
        "apierror-notpatrollable": "因內容過舊,修訂 r$1 無法巡查。",
        "apierror-nouploadmodule": "未設定上傳模組。",
+       "apierror-offline": "出於網路連接問題而無法進行。請確認您的網際網路連結有正常運作,並再試一次。",
        "apierror-opensearch-json-warnings": "警告不能以 OpenSearch JSON 格式表示。",
        "apierror-pagecannotexist": "命名空間不允許實際頁面。",
+       "apierror-pagedeleted": "自從您取得時間戳記後,該頁面已被刪除。",
        "apierror-pagelang-disabled": "此 wiki 不允許更改頁面的語言。",
        "apierror-paramempty": "參數 <var>$1</var> 不能為空。",
        "apierror-parsetree-notwikitext": "<kbd>prop=parsetree</kbd> 僅支援用於 wiki 文字內容。",
        "apierror-parsetree-notwikitext-title": "<kbd>prop=parsetree</kbd> 僅支援用於 wiki 文字內容。$1使用內容模組 $2。",
+       "apierror-pastexpiry": "期限時間「$1」已過。",
        "apierror-permissiondenied": "您沒有權限$1。",
        "apierror-permissiondenied-generic": "權限不足。",
        "apierror-permissiondenied-patrolflag": "您需要 <code>patrol</code> 或 <code>patrolmarks</code> 權限來請求巡查標記。",
        "apierror-readapidenied": "您需要有閱讀權限來使用此模組。",
        "apierror-readonly": "Wiki 目前為唯讀模式。",
        "apierror-reauthenticate": "於本工作階段還未核對身分,請重新核對。",
+       "apierror-redirect-appendonly": "您嘗試使用重新導向跟隨模式來編輯,這必須與 <kbd>section=new</kbd>、<var>prependtext</var>,或 <var>appendtext</var> 來結合使用。",
        "apierror-revdel-mutuallyexclusive": "同一欄位不可同時用在 <var>hide</var> 與 <var>show</var>。",
        "apierror-revdel-needtarget": "此 RevDel 類型需要目標標題。",
        "apierror-revdel-paramneeded": "至少需要 <var>hide</var> 與/或 <var>show</var> 其中的值。",
        "apierror-sectionsnotsupported": "內容模組 $1 不支援段落。",
        "apierror-sectionsnotsupported-what": "$1 不支援段落。",
        "apierror-show": "不正確的參數 - 不可提供互斥值。",
+       "apierror-siteinfo-includealldenied": "除非 <var>$wgShowHostnames</var> 設為真,否則無法檢視所有伺服器資訊。",
        "apierror-sizediffdisabled": "大小差異功能在 Miser 模式裡已停用。",
        "apierror-spamdetected": "您的編輯被拒絕,因為有包含部份垃圾訊息內容:<code>$1</code>。",
        "apierror-specialpage-cantexecute": "您沒有權限來查看此特殊頁面的結果。",
        "apierror-stashedfilenotfound": "在儲藏裡找不到檔案:$1。",
        "apierror-stashedit-missingtext": "給予的雜湊裡查無儲藏文字。",
+       "apierror-stashfailed-complete": "大量上傳已完成,請檢查狀態來獲取詳情。",
        "apierror-stashfilestorage": "在儲藏裡不能儲存上傳:$1。",
        "apierror-stashinvalidfile": "無效的儲藏檔案。",
        "apierror-stashnosuchfilekey": "沒有這樣的檔案鍵:$1。",
        "apierror-stashwrongowner": "錯誤擁有者:$1",
        "apierror-stashzerolength": "檔案長度為零,且無法儲存於儲藏:$1。",
        "apierror-systemblocked": "您已被 MediaWiki 給自動封鎖。",
+       "apierror-templateexpansion-notwikitext": "模板擴展僅支援用於 wiki 文字內容。$1使用內容模組 $2。",
        "apierror-timeout": "伺服器未有在預計的時間內回應。",
+       "apierror-toofewexpiries": "提供了 $1 個逾期{{PLURAL:$1|時間戳記|時間戳記}},所需要的{{PLURAL:$2|是|是}} $2 個。",
        "apierror-toomanyvalues": "替參數 <var>$1</var> 提供太多的值。限制為 $2。",
        "apierror-unknownaction": "指定的操作 <kbd>$1</kbd> 無法識別出。",
        "apierror-unknownerror-editpage": "不明編輯頁面錯誤:$1。",
        "apierror-writeapidenied": "您不被允許透過 API 來編輯此 wiki。",
        "apiwarn-alldeletedrevisions-performance": "為了在產生標題時能有更好效能,請設定 <kbd>$1dir=newer</kbd>。",
        "apiwarn-badurlparam": "無法解析$2的 <var>$1urlparam</var>。這僅能用在寬度與高度。",
+       "apiwarn-checktoken-percentencoding": "在 URL 裡進行適當百分比編碼的權杖中,檢查像是「+」的符號。",
        "apiwarn-compare-nocontentmodel": "沒有可確定的內容模組,假定為 $1。",
+       "apiwarn-deprecation-deletedrevs": "<kbd>list=deletedrevs</kbd> 已棄用。請改用 <kbd>prop=deletedrevisions</kbd> 或 <kbd>list=alldeletedrevisions</kbd>。",
        "apiwarn-deprecation-httpsexpected": "當應為 HTTPS 時,HTTP 要被使用。",
+       "apiwarn-deprecation-login-botpw": "透過 <kbd>action=login</kbd> 的主帳號登入已棄用,並可能會在無警告的情況下停止運作。要繼續以 <kbd>action=clientlogin</kbd> 登入,請參閱 [[Special:BotPasswords]];若要繼續安全使用主帳號登入,則請參閱 <kbd>action=clientlogin</kbd>。",
+       "apiwarn-deprecation-login-nobotpw": "透過 <kbd>action=login</kbd> 的主帳號登入已棄用,並可能會在無警告的情況下停止運作。若要安全登入,請參閱 <kbd>action=clientlogin</kbd>。",
+       "apiwarn-deprecation-login-token": "透過 <kbd>action=login</kbd> 來取得權杖已棄用。請改用 <kbd>action=query&meta=tokens&type=login</kbd>。",
+       "apiwarn-deprecation-missingparam": "因為未指定 <var>$1</var>,輸出內容使用到過去舊有的格式。該格式已棄用,並且往後都只會使用新格式。",
        "apiwarn-deprecation-parameter": "參數 <var>$1</var> 已棄用。",
+       "apiwarn-deprecation-parse-headitems": "<kbd>prop=headitems</kbd> 自 MediaWiki 的 1.28 版本後已被棄用。當建立新 HTML 文件時請使用 <kbd>prop=headhtml</kbd>,或是當更新文件客戶端時請使用 <kbd>prop=modules|jsconfigvars</kbd>。",
        "apiwarn-deprecation-purge-get": "透過 GET 方式使用的 <kbd>action=purge</kbd> 已棄用,請以 POST 替代。",
        "apiwarn-deprecation-withreplacement": "<kbd>$1</kbd> 已棄用,請改用 <kbd>$2</kbd>。",
        "apiwarn-difftohidden": "無法對 r$1 比較差異:內容被隱蔵。",
        "apiwarn-invalidxmlstylesheetext": "樣式表應要有 <code>.xsl</code> 副檔名。",
        "apiwarn-invalidxmlstylesheet": "指定了無效或不存在的樣式表。",
        "apiwarn-invalidxmlstylesheetns": "樣式表應在 {{ns:MediaWiki}} 命名空間。",
+       "apiwarn-moduleswithoutvars": "屬性 <kbd>modules</kbd> 已被設定,但不是 <kbd>jsconfigvars</kbd> 或 <kbd>encodedjsconfigvars</kbd>。需要設置變數來讓模組使用合宜。",
        "apiwarn-notfile": "「$1」不是一個檔案。",
        "apiwarn-nothumb-noimagehandler": "無法建立縮圖,因為$1沒有相關的圖片處理器。",
        "apiwarn-parse-nocontentmodel": "未提供 <var>title</var> 或 <var>contentmodel</var>,應是 $1。",
+       "apiwarn-parse-revidwithouttext": "<var>revid</var> 在不帶有 <var>text</var> 的情況下使用,且請求了已解析頁面屬性。請問您是指要使用 <var>oldid</var> 而不是 <var>revid</var> 嗎?",
+       "apiwarn-parse-titlewithouttext": "<var>title</var> 在不帶有 <var>text</var> 的情況下使用,且請求了已解析頁面屬性。請問您是指要使用 <var>page</var> 而不是 <var>title</var> 嗎?",
        "apiwarn-tokennotallowed": "「$1」操作不允許目前的使用者。",
+       "apiwarn-tokens-origin": "當未套用相同來源方針,權杖可能無法取得。",
+       "apiwarn-truncatedresult": "結果會被截短,否則將會大於 $1 位元組限制。",
        "apiwarn-unrecognizedvalues": "參數 <var>$1</var> 有無法識別的{{PLURAL:$3|值|值}}:$2。",
        "apiwarn-unsupportedarray": "參數 <var>$1</var> 使用了不被支援的 PHP 陣列語法。",
        "apiwarn-validationfailed-badpref": "不是有效的偏好設定。",
        "apiwarn-validationfailed": "<kbd>$1</kbd>驗證錯誤:$2",
        "apiwarn-wgDebugAPI": "<strong>安全警告</strong>:<var>$wgDebugAPI</var> 已啟用。",
        "api-feed-error-title": "錯誤($1)",
+       "api-usage-docref": "查看 $1 來了解 API 的使用。",
        "api-credits-header": "製作群",
        "api-credits": "API 開發人員:\n* Roan Kattouw (首席開發者 Sep 2007–2009)\n* Victor Vasiliev\n* Bryan Tong Minh\n* Sam Reed\n* Yuri Astrakhan (創立者,首席開發者 Sep 2006–Sep 2007)\n* Brad Jorsch (首席開發者 2013–present)\n\n請傳送您的評論、建議以及問題至 mediawiki-api@lists.wikimedia.org\n或者回報問題至 https://phabricator.wikimedia.org/。"
 }
index 43d70e6..5bf286d 100644 (file)
@@ -34,7 +34,6 @@ class BlockRestriction {
         *
         * @param int|array $blockId
         * @param IDatabase|null $db
-        * @param array $options Options to pass to the select query.
         * @return Restriction[]
         */
        public static function loadByBlockId( $blockId, IDatabase $db = null ) {
index f1cc1b0..5fefecc 100644 (file)
@@ -63,6 +63,7 @@ interface Restriction {
        /**
         * Creates a new Restriction from a database row.
         *
+        * @param \stdClass $row
         * @return self
         */
        public static function newFromRow( \stdClass $row );
index 5ada42f..b669fcd 100644 (file)
@@ -270,6 +270,17 @@ class MessageCache {
 
                $this->overridable = array_flip( Language::getMessageKeysFor( $code ) );
 
+               // T208897 array_flip can fail and return null
+               if ( is_null( $this->overridable ) ) {
+                       LoggerFactory::getInstance( 'MessageCache' )->error(
+                               __METHOD__ . ': $this->overridable is null',
+                               [
+                                       'message_keys' => Language::getMessageKeysFor( $code ),
+                                       'code' => $code
+                               ]
+                       );
+               }
+
                # 8 lines of code just to say (once) that message cache is disabled
                if ( $this->mDisable ) {
                        static $shownDisabled = false;
index fea31b4..b1dff14 100644 (file)
@@ -351,12 +351,13 @@ class ChangesList extends ContextSource {
                } else {
                        $formattedSizeClass = 'mw-plusminus-neg';
                }
+               $formattedSizeClass .= ' mw-diff-bytes';
 
                $formattedTotalSize = $context->msg( 'rc-change-size-new' )->numParams( $new )->text();
 
                return Html::element( $tag,
                        [ 'dir' => 'ltr', 'class' => $formattedSizeClass, 'title' => $formattedTotalSize ],
-                       $context->msg( 'parentheses', $formattedSize )->plain() ) . $lang->getDirMark();
+                       $formattedSize ) . $lang->getDirMark();
        }
 
        /**
index b28983f..5e83f95 100644 (file)
@@ -262,8 +262,6 @@ class ChangeTags {
                &$rev_id = null, &$log_id = null, $params = null, RecentChange $rc = null,
                User $user = null
        ) {
-               global $wgChangeTagsSchemaMigrationStage;
-
                $tagsToAdd = array_filter( (array)$tagsToAdd ); // Make sure we're submitting all tags...
                $tagsToRemove = array_filter( (array)$tagsToRemove );
 
@@ -347,35 +345,27 @@ class ChangeTags {
                $changeTagDefStore = MediaWikiServices::getInstance()->getChangeTagDefStore();
                if ( count( $tagsToAdd ) ) {
                        $changeTagMapping = [];
-                       if ( $wgChangeTagsSchemaMigrationStage > MIGRATION_OLD ) {
-                               foreach ( $tagsToAdd as $tag ) {
-                                       $changeTagMapping[$tag] = $changeTagDefStore->acquireId( $tag );
-                               }
-                               // T207881: update the counts at the end of the transaction
-                               $dbw->onTransactionPreCommitOrIdle( function () use ( $dbw, $tagsToAdd ) {
-                                       $dbw->update(
-                                               'change_tag_def',
-                                               [ 'ctd_count = ctd_count + 1' ],
-                                               [ 'ctd_name' => $tagsToAdd ],
-                                               __METHOD__
-                                       );
-                               } );
+                       foreach ( $tagsToAdd as $tag ) {
+                               $changeTagMapping[$tag] = $changeTagDefStore->acquireId( $tag );
                        }
+                       // T207881: update the counts at the end of the transaction
+                       $dbw->onTransactionPreCommitOrIdle( function () use ( $dbw, $tagsToAdd ) {
+                               $dbw->update(
+                                       'change_tag_def',
+                                       [ 'ctd_count = ctd_count + 1' ],
+                                       [ 'ctd_name' => $tagsToAdd ],
+                                       __METHOD__
+                               );
+                       } );
 
                        $tagsRows = [];
                        foreach ( $tagsToAdd as $tag ) {
-                               if ( $wgChangeTagsSchemaMigrationStage > MIGRATION_WRITE_BOTH ) {
-                                       $tagName = null;
-                               } else {
-                                       $tagName = $tag;
-                               }
                                // Filter so we don't insert NULLs as zero accidentally.
                                // Keep in mind that $rc_id === null means "I don't care/know about the
                                // rc_id, just delete $tag on this revision/log entry". It doesn't
                                // mean "only delete tags on this revision/log WHERE rc_id IS NULL".
                                $tagsRows[] = array_filter(
                                        [
-                                               'ct_tag' => $tagName,
                                                'ct_rc_id' => $rc_id,
                                                'ct_log_id' => $log_id,
                                                'ct_rev_id' => $rev_id,
@@ -392,24 +382,16 @@ class ChangeTags {
                // delete from change_tag
                if ( count( $tagsToRemove ) ) {
                        foreach ( $tagsToRemove as $tag ) {
-                               if ( $wgChangeTagsSchemaMigrationStage > MIGRATION_WRITE_BOTH ) {
-                                       $tagName = null;
-                                       $tagId = $changeTagDefStore->getId( $tag );
-                               } else {
-                                       $tagName = $tag;
-                                       $tagId = null;
-                               }
                                $conds = array_filter(
                                        [
-                                               'ct_tag' => $tagName,
                                                'ct_rc_id' => $rc_id,
                                                'ct_log_id' => $log_id,
                                                'ct_rev_id' => $rev_id,
-                                               'ct_tag_id' => $tagId,
+                                               'ct_tag_id' => $changeTagDefStore->getId( $tag ),
                                        ]
                                );
                                $dbw->delete( 'change_tag', $conds, __METHOD__ );
-                               if ( $dbw->affectedRows() && $wgChangeTagsSchemaMigrationStage > MIGRATION_OLD ) {
+                               if ( $dbw->affectedRows() ) {
                                        // T207881: update the counts at the end of the transaction
                                        $dbw->onTransactionPreCommitOrIdle( function () use ( $dbw, $tag ) {
                                                $dbw->update(
@@ -788,7 +770,7 @@ class ChangeTags {
        public static function modifyDisplayQuery( &$tables, &$fields, &$conds,
                &$join_conds, &$options, $filter_tag = ''
        ) {
-               global $wgUseTagFilter, $wgChangeTagsSchemaMigrationStage;
+               global $wgUseTagFilter;
 
                // Normalize to arrays
                $tables = (array)$tables;
@@ -796,6 +778,8 @@ class ChangeTags {
                $conds = (array)$conds;
                $options = (array)$options;
 
+               $fields['ts_tags'] = self::makeTagSummarySubquery( $tables );
+
                // Figure out which ID field to use
                if ( in_array( 'recentchanges', $tables ) ) {
                        $join_cond = 'ct_rc_id=rc_id';
@@ -809,44 +793,26 @@ class ChangeTags {
                        throw new MWException( 'Unable to determine appropriate JOIN condition for tagging.' );
                }
 
-               $tagTables[] = 'change_tag';
-               if ( $wgChangeTagsSchemaMigrationStage > MIGRATION_WRITE_BOTH ) {
-                       $tagTables[] = 'change_tag_def';
-                       $join_cond_ts_tags = [ 'change_tag_def' => [ 'INNER JOIN', 'ct_tag_id=ctd_id' ] ];
-                       $field = 'ctd_name';
-               } else {
-                       $field = 'ct_tag';
-                       $join_cond_ts_tags = [];
-               }
-
-               $fields['ts_tags'] = wfGetDB( DB_REPLICA )->buildGroupConcatField(
-                       ',', $tagTables, $field, $join_cond, $join_cond_ts_tags
-               );
-
                if ( $wgUseTagFilter && $filter_tag ) {
                        // Somebody wants to filter on a tag.
                        // Add an INNER JOIN on change_tag
 
                        $tables[] = 'change_tag';
                        $join_conds['change_tag'] = [ 'INNER JOIN', $join_cond ];
-                       if ( $wgChangeTagsSchemaMigrationStage > MIGRATION_WRITE_BOTH ) {
-                               $filterTagIds = [];
-                               $changeTagDefStore = MediaWikiServices::getInstance()->getChangeTagDefStore();
-                               foreach ( (array)$filter_tag as $filterTagName ) {
-                                       try {
-                                               $filterTagIds[] = $changeTagDefStore->getId( $filterTagName );
-                                       } catch ( NameTableAccessException $exception ) {
-                                               // Return nothing.
-                                               $conds[] = '0';
-                                               break;
-                                       };
-                               }
+                       $filterTagIds = [];
+                       $changeTagDefStore = MediaWikiServices::getInstance()->getChangeTagDefStore();
+                       foreach ( (array)$filter_tag as $filterTagName ) {
+                               try {
+                                       $filterTagIds[] = $changeTagDefStore->getId( $filterTagName );
+                               } catch ( NameTableAccessException $exception ) {
+                                       // Return nothing.
+                                       $conds[] = '0';
+                                       break;
+                               };
+                       }
 
-                               if ( $filterTagIds !== [] ) {
-                                       $conds['ct_tag_id'] = $filterTagIds;
-                               }
-                       } else {
-                               $conds['ct_tag'] = $filter_tag;
+                       if ( $filterTagIds !== [] ) {
+                               $conds['ct_tag_id'] = $filterTagIds;
                        }
 
                        if (
@@ -858,6 +824,40 @@ class ChangeTags {
                }
        }
 
+       /**
+        * Make the tag summary subquery based on the given tables and return it.
+        *
+        * @param string|array $tables Table names, see Database::select
+        *
+        * @return string tag summary subqeury
+        * @throws MWException When unable to determine appropriate JOIN condition for tagging
+        */
+       public static function makeTagSummarySubquery( $tables ) {
+               // Normalize to arrays
+               $tables = (array)$tables;
+
+               // Figure out which ID field to use
+               if ( in_array( 'recentchanges', $tables ) ) {
+                       $join_cond = 'ct_rc_id=rc_id';
+               } elseif ( in_array( 'logging', $tables ) ) {
+                       $join_cond = 'ct_log_id=log_id';
+               } elseif ( in_array( 'revision', $tables ) ) {
+                       $join_cond = 'ct_rev_id=rev_id';
+               } elseif ( in_array( 'archive', $tables ) ) {
+                       $join_cond = 'ct_rev_id=ar_rev_id';
+               } else {
+                       throw new MWException( 'Unable to determine appropriate JOIN condition for tagging.' );
+               }
+
+               $tagTables = [ 'change_tag', 'change_tag_def' ];
+               $join_cond_ts_tags = [ 'change_tag_def' => [ 'INNER JOIN', 'ct_tag_id=ctd_id' ] ];
+               $field = 'ctd_name';
+
+               return wfGetDB( DB_REPLICA )->buildGroupConcatField(
+                       ',', $tagTables, $field, $join_cond, $join_cond_ts_tags
+               );
+       }
+
        /**
         * Build a text box to select a change tag
         *
@@ -918,32 +918,20 @@ class ChangeTags {
         * @since 1.25
         */
        public static function defineTag( $tag ) {
-               global $wgChangeTagsSchemaMigrationStage;
-
                $dbw = wfGetDB( DB_MASTER );
-               if ( $wgChangeTagsSchemaMigrationStage > MIGRATION_OLD ) {
-                       $tagDef = [
-                               'ctd_name' => $tag,
-                               'ctd_user_defined' => 1,
-                               'ctd_count' => 0
-                       ];
-                       $dbw->upsert(
-                               'change_tag_def',
-                               $tagDef,
-                               [ 'ctd_name' ],
-                               [ 'ctd_user_defined' => 1 ],
-                               __METHOD__
-                       );
-               }
+               $tagDef = [
+                       'ctd_name' => $tag,
+                       'ctd_user_defined' => 1,
+                       'ctd_count' => 0
+               ];
+               $dbw->upsert(
+                       'change_tag_def',
+                       $tagDef,
+                       [ 'ctd_name' ],
+                       [ 'ctd_user_defined' => 1 ],
+                       __METHOD__
+               );
 
-               if ( $wgChangeTagsSchemaMigrationStage < MIGRATION_NEW ) {
-                       $dbw->replace(
-                               'valid_tag',
-                               [ 'vt_tag' ],
-                               [ 'vt_tag' => $tag ],
-                               __METHOD__
-                       );
-               }
                // clear the memcache of defined tags
                self::purgeTagCacheAll();
        }
@@ -957,28 +945,20 @@ class ChangeTags {
         * @since 1.25
         */
        public static function undefineTag( $tag ) {
-               global $wgChangeTagsSchemaMigrationStage;
-
                $dbw = wfGetDB( DB_MASTER );
 
-               if ( $wgChangeTagsSchemaMigrationStage > MIGRATION_OLD ) {
-                       $dbw->update(
-                               'change_tag_def',
-                               [ 'ctd_user_defined' => 0 ],
-                               [ 'ctd_name' => $tag ],
-                               __METHOD__
-                       );
-
-                       $dbw->delete(
-                               'change_tag_def',
-                               [ 'ctd_name' => $tag, 'ctd_count' => 0 ],
-                               __METHOD__
-                       );
-               }
+               $dbw->update(
+                       'change_tag_def',
+                       [ 'ctd_user_defined' => 0 ],
+                       [ 'ctd_name' => $tag ],
+                       __METHOD__
+               );
 
-               if ( $wgChangeTagsSchemaMigrationStage < MIGRATION_NEW ) {
-                       $dbw->delete( 'valid_tag', [ 'vt_tag' => $tag ], __METHOD__ );
-               }
+               $dbw->delete(
+                       'change_tag_def',
+                       [ 'ctd_name' => $tag, 'ctd_count' => 0 ],
+                       __METHOD__
+               );
 
                // clear the memcache of defined tags
                self::purgeTagCacheAll();
@@ -1280,19 +1260,14 @@ class ChangeTags {
         * @since 1.25
         */
        public static function deleteTagEverywhere( $tag ) {
-               global $wgChangeTagsSchemaMigrationStage;
                $dbw = wfGetDB( DB_MASTER );
                $dbw->startAtomic( __METHOD__ );
 
                // delete from valid_tag and/or set ctd_user_defined = 0
                self::undefineTag( $tag );
 
-               if ( $wgChangeTagsSchemaMigrationStage > MIGRATION_WRITE_BOTH ) {
-                       $tagId = MediaWikiServices::getInstance()->getChangeTagDefStore()->getId( $tag );
-                       $conditions = [ 'ct_tag_id' => $tagId ];
-               } else {
-                       $conditions = [ 'ct_tag' => $tag ];
-               }
+               $tagId = MediaWikiServices::getInstance()->getChangeTagDefStore()->getId( $tag );
+               $conditions = [ 'ct_tag_id' => $tagId ];
 
                // find out which revisions use this tag, so we can delete from tag_summary
                $result = $dbw->select( 'change_tag',
@@ -1308,17 +1283,9 @@ class ChangeTags {
                }
 
                // delete from change_tag
-               if ( $wgChangeTagsSchemaMigrationStage > MIGRATION_WRITE_BOTH ) {
-                       $tagId = MediaWikiServices::getInstance()->getChangeTagDefStore()->getId( $tag );
-                       $dbw->delete( 'change_tag', [ 'ct_tag_id' => $tagId ], __METHOD__ );
-               } else {
-                       $dbw->delete( 'change_tag', [ 'ct_tag' => $tag ], __METHOD__ );
-               }
-
-               if ( $wgChangeTagsSchemaMigrationStage > MIGRATION_OLD ) {
-                       $dbw->delete( 'change_tag_def', [ 'ctd_name' => $tag ], __METHOD__ );
-               }
-
+               $tagId = MediaWikiServices::getInstance()->getChangeTagDefStore()->getId( $tag );
+               $dbw->delete( 'change_tag', [ 'ct_tag_id' => $tagId ], __METHOD__ );
+               $dbw->delete( 'change_tag_def', [ 'ctd_name' => $tag ], __METHOD__ );
                $dbw->endAtomic( __METHOD__ );
 
                // give extensions a chance
@@ -1484,16 +1451,16 @@ class ChangeTags {
                        $cache->makeKey( 'valid-tags-db' ),
                        WANObjectCache::TTL_MINUTE * 5,
                        function ( $oldValue, &$ttl, array &$setOpts ) use ( $fname ) {
-                               global $wgChangeTagsSchemaMigrationStage;
                                $dbr = wfGetDB( DB_REPLICA );
 
                                $setOpts += Database::getCacheSetOptions( $dbr );
 
-                               if ( $wgChangeTagsSchemaMigrationStage > MIGRATION_WRITE_BOTH ) {
-                                       $tags = self::listExplicitlyDefinedTagsNewBackend();
-                               } else {
-                                       $tags = $dbr->selectFieldValues( 'valid_tag', 'vt_tag', [], $fname );
-                               }
+                               $tags = $dbr->selectFieldValues(
+                                       'change_tag_def',
+                                       'ctd_name',
+                                       [ 'ctd_user_defined' => 1 ],
+                                       __METHOD__
+                               );
 
                                return array_filter( array_unique( $tags ) );
                        },
@@ -1505,22 +1472,6 @@ class ChangeTags {
                );
        }
 
-       /**
-        * Lists tags explicitly user defined tags. When ctd_user_defined is true.
-        *
-        * @return string[] Array of strings: tags
-        * @since 1.25
-        */
-       private static function listExplicitlyDefinedTagsNewBackend() {
-               $dbr = wfGetDB( DB_REPLICA );
-               return $dbr->selectFieldValues(
-                       'change_tag_def',
-                       'ctd_name',
-                       [ 'ctd_user_defined' => 1 ],
-                       __METHOD__
-               );
-       }
-
        /**
         * Lists tags defined by core or extensions using the ListDefinedTags hook.
         * Extensions need only define those tags they deem to be in active use.
@@ -1583,59 +1534,9 @@ class ChangeTags {
         * Returns a map of any tags used on the wiki to number of edits
         * tagged with them, ordered descending by the hitcount.
         * This does not include tags defined somewhere that have never been applied.
-        *
-        * Keeps a short-term cache in memory, so calling this multiple times in the
-        * same request should be fine.
-        *
         * @return array Array of string => int
         */
        public static function tagUsageStatistics() {
-               global $wgChangeTagsSchemaMigrationStage, $wgTagStatisticsNewTable;
-               if ( $wgChangeTagsSchemaMigrationStage > MIGRATION_WRITE_BOTH ||
-                       ( $wgTagStatisticsNewTable && $wgChangeTagsSchemaMigrationStage > MIGRATION_OLD )
-               ) {
-                       return self::newTagUsageStatistics();
-               }
-
-               $fname = __METHOD__;
-               $cache = MediaWikiServices::getInstance()->getMainWANObjectCache();
-               return $cache->getWithSetCallback(
-                       $cache->makeKey( 'change-tag-statistics' ),
-                       WANObjectCache::TTL_MINUTE * 5,
-                       function ( $oldValue, &$ttl, array &$setOpts ) use ( $fname ) {
-                               $dbr = wfGetDB( DB_REPLICA, 'vslow' );
-
-                               $setOpts += Database::getCacheSetOptions( $dbr );
-
-                               $res = $dbr->select(
-                                       'change_tag',
-                                       [ 'ct_tag', 'hitcount' => 'count(*)' ],
-                                       [],
-                                       $fname,
-                                       [ 'GROUP BY' => 'ct_tag', 'ORDER BY' => 'hitcount DESC' ]
-                               );
-
-                               $out = [];
-                               foreach ( $res as $row ) {
-                                       $out[$row->ct_tag] = $row->hitcount;
-                               }
-
-                               return $out;
-                       },
-                       [
-                               'checkKeys' => [ $cache->makeKey( 'change-tag-statistics' ) ],
-                               'lockTSE' => WANObjectCache::TTL_MINUTE * 5,
-                               'pcTTL' => WANObjectCache::TTL_PROC_LONG
-                       ]
-               );
-       }
-
-       /**
-        * Same self::tagUsageStatistics() but uses change_tag_def.
-        *
-        * @return array Array of string => int
-        */
-       private static function newTagUsageStatistics() {
                $dbr = wfGetDB( DB_REPLICA );
                $res = $dbr->select(
                        'change_tag_def',
index bb3fb10..1bb43f8 100644 (file)
@@ -241,6 +241,8 @@ interface Content {
         * that it's also in a countable location (e.g. a current revision in the
         * main namespace).
         *
+        * @see SlotRoleHandler::supportsArticleCount
+        *
         * @since 1.21
         *
         * @param bool|null $hasLinks If it is known whether this content contains
@@ -352,6 +354,8 @@ interface Content {
         * Returns whether this Content represents a redirect.
         * Shorthand for getRedirectTarget() !== null.
         *
+        * @see SlotRoleHandler::supportsRedirects
+        *
         * @since 1.21
         *
         * @return bool
index fab043a..5c18a33 100644 (file)
@@ -174,62 +174,17 @@ abstract class ContentHandler {
         * Note: this is used by, and may thus not use, Title::getContentModel()
         *
         * @since 1.21
+        * @deprecated since 1.33, use SlotRoleHandler::getDefaultModel() together with
+        * SlotRoleRegistry::getRoleHandler().
         *
         * @param Title $title
         *
         * @return string Default model name for the page given by $title
         */
        public static function getDefaultModelFor( Title $title ) {
-               // NOTE: this method must not rely on $title->getContentModel() directly or indirectly,
-               //       because it is used to initialize the mContentModel member.
-
-               $ns = $title->getNamespace();
-
-               $ext = false;
-               $m = null;
-               $model = MWNamespace::getNamespaceContentModel( $ns );
-
-               // Hook can determine default model
-               if ( !Hooks::run( 'ContentHandlerDefaultModelFor', [ $title, &$model ] ) ) {
-                       if ( !is_null( $model ) ) {
-                               return $model;
-                       }
-               }
-
-               // Could this page contain code based on the title?
-               $isCodePage = NS_MEDIAWIKI == $ns && preg_match( '!\.(css|js|json)$!u', $title->getText(), $m );
-               if ( $isCodePage ) {
-                       $ext = $m[1];
-               }
-
-               // Is this a user subpage containing code?
-               $isCodeSubpage = NS_USER == $ns
-                       && !$isCodePage
-                       && preg_match( "/\\/.*\\.(js|css|json)$/", $title->getText(), $m );
-               if ( $isCodeSubpage ) {
-                       $ext = $m[1];
-               }
-
-               // Is this wikitext, according to $wgNamespaceContentModels or the DefaultModelFor hook?
-               $isWikitext = is_null( $model ) || $model == CONTENT_MODEL_WIKITEXT;
-               $isWikitext = $isWikitext && !$isCodePage && !$isCodeSubpage;
-
-               if ( !$isWikitext ) {
-                       switch ( $ext ) {
-                               case 'js':
-                                       return CONTENT_MODEL_JAVASCRIPT;
-                               case 'css':
-                                       return CONTENT_MODEL_CSS;
-                               case 'json':
-                                       return CONTENT_MODEL_JSON;
-                               default:
-                                       return is_null( $model ) ? CONTENT_MODEL_TEXT : $model;
-                       }
-               }
-
-               // We established that it must be wikitext
-
-               return CONTENT_MODEL_WIKITEXT;
+               $slotRoleregistry = MediaWikiServices::getInstance()->getSlotRoleRegistry();
+               $mainSlotHandler = $slotRoleregistry->getRoleHandler( 'main' );
+               return $mainSlotHandler->getDefaultModel( $title );
        }
 
        /**
@@ -777,7 +732,7 @@ abstract class ContentHandler {
 
        /**
         * Determines whether the content type handled by this ContentHandler
-        * can be used on the given page.
+        * can be used for the main slot of the given page.
         *
         * This default implementation always returns true.
         * Subclasses may override this to restrict the use of this content model to specific locations,
@@ -787,6 +742,8 @@ abstract class ContentHandler {
         * @note this calls the ContentHandlerCanBeUsedOn hook which may be used to override which
         * content model can be used where.
         *
+        * @see SlotRoleHandler::isAllowedModel
+        *
         * @param Title $title The page's title.
         *
         * @return bool True if content of this kind can be used on the given page, false otherwise.
index a7021b1..517d807 100644 (file)
@@ -25,6 +25,7 @@
  * @author Daniel Kinzler
  */
 
+use MediaWiki\Logger\LoggerFactory;
 use MediaWiki\MediaWikiServices;
 
 /**
@@ -41,6 +42,11 @@ class WikitextContent extends TextContent {
         */
        private $hadSignature = false;
 
+       /**
+        * @var array|null Stack trace of the previous parse
+        */
+       private $previousParseStackTrace = null;
+
        public function __construct( $text ) {
                parent::__construct( $text, CONTENT_MODEL_WIKITEXT );
        }
@@ -337,6 +343,28 @@ class WikitextContent extends TextContent {
        ) {
                global $wgParser;
 
+               $stackTrace = ( new RuntimeException() )->getTraceAsString();
+               if ( $this->previousParseStackTrace ) {
+                       // NOTE: there may be legitimate changes to re-parse the same WikiText content,
+                       // e.g. if predicted revision ID for the REVISIONID magic word mismatched.
+                       // But that should be rare.
+                       $logger = LoggerFactory::getInstance( 'DuplicateParse' );
+                       $logger->debug(
+                               __METHOD__ . ': Possibly redundant parse!',
+                               [
+                                       'title' => $title->getPrefixedDBkey(),
+                                       'rev' => $revId,
+                                       'options-hash' => $options->optionsHash(
+                                               ParserOptions::allCacheVaryingOptions(),
+                                               $title
+                                       ),
+                                       'trace' => $stackTrace,
+                                       'previous-trace' => $this->previousParseStackTrace,
+                               ]
+                       );
+               }
+               $this->previousParseStackTrace = $stackTrace;
+
                list( $redir, $text ) = $this->getRedirectTargetAndText();
                $output = $wgParser->parse( $text, $title, $options, true, true, $revId );
 
index 5f09555..d427724 100644 (file)
@@ -137,7 +137,7 @@ class CloneDatabase {
                global $wgDBprefix;
 
                $lbFactory = MediaWikiServices::getInstance()->getDBLoadBalancerFactory();
-               $lbFactory->setDomainPrefix( $prefix );
+               $lbFactory->setLocalDomainPrefix( $prefix );
                $wgDBprefix = $prefix;
        }
 }
index 780ea94..ee3e9a1 100644 (file)
@@ -62,7 +62,7 @@ class SyslogHandler extends SyslogUdpHandler {
         * @param string $host Syslog host
         * @param int $port Syslog port
         * @param int $facility Syslog message facility
-        * @param string $level The minimum logging level at which this handler
+        * @param int $level The minimum logging level at which this handler
         *   will be triggered
         * @param bool $bubble Whether the messages that are handled can bubble up
         *   the stack or not
index 577a272..b4863f8 100644 (file)
@@ -567,7 +567,7 @@ class LinksUpdate extends DataUpdate implements EnqueueableDataUpdate {
                $arr = [];
                $diffs = array_diff_key( $this->mExternals, $existing );
                foreach ( $diffs as $url => $dummy ) {
-                       foreach ( wfMakeUrlIndexes( $url ) as $index ) {
+                       foreach ( LinkFilter::makeIndexes( $url ) as $index ) {
                                $arr[] = [
                                        'el_from' => $this->mId,
                                        'el_to' => $url,
index 8d0971e..63cc2a8 100644 (file)
@@ -1055,7 +1055,7 @@ class DifferenceEngine extends ContextSource {
                        $slotDiff = $slotDiffRenderer->getDiff( $slotContents[$role]['old'],
                                $slotContents[$role]['new'] );
                        if ( $slotDiff && $role !== SlotRecord::MAIN ) {
-                               // TODO use human-readable role name at least
+                               // FIXME: ask SlotRoleHandler::getSlotNameMessage
                                $slotTitle = $role;
                                $difftext .= $this->getSlotHeader( $slotTitle );
                        }
index af835e4..7f70c4f 100644 (file)
@@ -121,7 +121,7 @@ class MWException extends Exception {
                                        "Fatal exception of type $1",
                                        $type,
                                        $logId,
-                                       MWExceptionHandler::getURL( $this )
+                                       MWExceptionHandler::getURL()
                                )
                        ) ) .
                        "<!-- Set \$wgShowExceptionDetails = true; " .
index f99ce1c..22be2be 100644 (file)
@@ -323,47 +323,7 @@ class MWExceptionRenderer {
                                htmlspecialchars( $e->getTraceAsString() ) . '</pre>';
                }
 
-               $html .= '<hr />';
-               $html .= self::googleSearchForm();
                $html .= '</body></html>';
                echo $html;
        }
-
-       /**
-        * @return string
-        */
-       private static function googleSearchForm() {
-               global $wgSitename, $wgCanonicalServer, $wgRequest;
-
-               $usegoogle = htmlspecialchars( self::msg(
-                       'dberr-usegoogle',
-                       'You can try searching via Google in the meantime.'
-               ) );
-               $outofdate = htmlspecialchars( self::msg(
-                       'dberr-outofdate',
-                       'Note that their indexes of our content may be out of date.'
-               ) );
-               $googlesearch = htmlspecialchars( self::msg( 'searchbutton', 'Search' ) );
-               $search = htmlspecialchars( $wgRequest->getVal( 'search' ) );
-               $server = htmlspecialchars( $wgCanonicalServer );
-               $sitename = htmlspecialchars( $wgSitename );
-               $trygoogle = <<<EOT
-<div style="margin: 1.5em">$usegoogle<br />
-<small>$outofdate</small>
-</div>
-<form method="get" action="//www.google.com/search" id="googlesearch">
-       <input type="hidden" name="domains" value="$server" />
-       <input type="hidden" name="num" value="50" />
-       <input type="hidden" name="ie" value="UTF-8" />
-       <input type="hidden" name="oe" value="UTF-8" />
-       <input type="text" name="q" size="31" maxlength="255" value="$search" />
-       <input type="submit" name="btnG" value="$googlesearch" />
-       <p>
-               <label><input type="radio" name="sitesearch" value="$server" checked="checked" />$sitename</label>
-               <label><input type="radio" name="sitesearch" value="" />WWW</label>
-       </p>
-</form>
-EOT;
-               return $trygoogle;
-       }
 }
index 1349c54..088c7b1 100644 (file)
@@ -67,7 +67,7 @@ class DumpFilter {
         * @param string $string
         */
        function writeOpenPage( $page, $string ) {
-               $this->sendingThisPage = $this->pass( $page, $string );
+               $this->sendingThisPage = $this->pass( $page );
                if ( $this->sendingThisPage ) {
                        $this->sink->writeOpenPage( $page, $string );
                }
index edd73fc..ab925b7 100644 (file)
@@ -76,7 +76,6 @@ class DumpOutput {
        /**
         * Override to write to a different stream type.
         * @param string $string
-        * @return bool
         */
        function write( $string ) {
                print $string;
index 6d01c29..bf09e08 100644 (file)
@@ -2023,7 +2023,7 @@ abstract class File implements IDBAccessObject {
         * @note Use getWidth()/getHeight() instead of this method unless you have a
         *  a good reason. This method skips all caches.
         *
-        * @param string $filePath The path to the file (e.g. From getLocalPathRef() )
+        * @param string $filePath The path to the file (e.g. From getLocalRefPath() )
         * @return array|false The width, followed by height, with optionally more things after
         */
        function getImageSize( $filePath ) {
index fd3dc8b..aff0e3f 100644 (file)
@@ -77,9 +77,7 @@ class ForeignAPIFile extends File {
                        if ( $lastRedirect >= 0 ) {
                                $newtitle = Title::newFromText( $data['query']['redirects'][$lastRedirect]['to'] );
                                $img = new self( $newtitle, $repo, $info, true );
-                               if ( $img ) {
-                                       $img->redirectedFrom( $title->getDBkey() );
-                               }
+                               $img->redirectedFrom( $title->getDBkey() );
                        } else {
                                $img = new self( $title, $repo, $info, true );
                        }
@@ -321,7 +319,7 @@ class ForeignAPIFile extends File {
         */
        function getThumbPath( $suffix = '' ) {
                if ( $this->repo->canCacheThumbs() ) {
-                       $path = $this->repo->getZonePath( 'thumb' ) . '/' . $this->getHashPath( $this->getName() );
+                       $path = $this->repo->getZonePath( 'thumb' ) . '/' . $this->getHashPath();
                        if ( $suffix ) {
                                $path = $path . $suffix . '/';
                        }
index ebbc8f8..95ee4f4 100644 (file)
@@ -1542,13 +1542,7 @@ class LocalFile extends File {
                                $fields['oi_description'] = 'img_description';
                        }
                        if ( $wgCommentTableSchemaMigrationStage >= MIGRATION_WRITE_BOTH ) {
-                               $tables[] = 'image_comment_temp';
-                               $fields['oi_description_id'] = 'CASE WHEN img_description_id = 0 '
-                                       . 'THEN COALESCE(imgcomment_description_id, 0) ELSE img_description_id END';
-                               $joins['image_comment_temp'] = [
-                                       $wgCommentTableSchemaMigrationStage === MIGRATION_NEW ? 'JOIN' : 'LEFT JOIN',
-                                       [ 'imgcomment_name = img_name' ]
-                               ];
+                               $fields['oi_description_id'] = 'img_description_id';
                        }
 
                        if ( $wgCommentTableSchemaMigrationStage !== MIGRATION_OLD &&
@@ -1558,16 +1552,13 @@ class LocalFile extends File {
                                // might be missed if a deletion happens while the migration script
                                // is running.
                                $res = $dbw->select(
-                                       [ 'image', 'image_comment_temp' ],
+                                       [ 'image' ],
                                        [ 'img_name', 'img_description' ],
                                        [
                                                'img_name' => $this->getName(),
-                                               'imgcomment_name' => null,
                                                'img_description_id' => 0,
                                        ],
-                                       __METHOD__,
-                                       [],
-                                       [ 'image_comment_temp' => [ 'LEFT JOIN', [ 'imgcomment_name = img_name' ] ] ]
+                                       __METHOD__
                                );
                                foreach ( $res as $row ) {
                                        $imgFields = $commentStore->insert( $dbw, 'img_description', $row->img_description );
@@ -1637,10 +1628,6 @@ class LocalFile extends File {
                                [ 'img_name' => $this->getName() ],
                                __METHOD__
                        );
-                       if ( $wgCommentTableSchemaMigrationStage > MIGRATION_OLD ) {
-                               // Clear deprecated table row
-                               $dbw->delete( 'image_comment_temp', [ 'imgcomment_name' => $this->getName() ], __METHOD__ );
-                       }
                }
 
                $descTitle = $this->getTitle();
@@ -2544,13 +2531,7 @@ class LocalFileDeleteBatch {
                                $fields['fa_description'] = 'img_description';
                        }
                        if ( $wgCommentTableSchemaMigrationStage >= MIGRATION_WRITE_BOTH ) {
-                               $tables[] = 'image_comment_temp';
-                               $fields['fa_description_id'] = 'CASE WHEN img_description_id = 0 '
-                                       . 'THEN COALESCE(imgcomment_description_id, 0) ELSE img_description_id END';
-                               $joins['image_comment_temp'] = [
-                                       $wgCommentTableSchemaMigrationStage === MIGRATION_NEW ? 'JOIN' : 'LEFT JOIN',
-                                       [ 'imgcomment_name = img_name' ]
-                               ];
+                               $fields['fa_description_id'] = 'img_description_id';
                        }
 
                        if ( $wgCommentTableSchemaMigrationStage !== MIGRATION_OLD &&
@@ -2560,16 +2541,13 @@ class LocalFileDeleteBatch {
                                // might be missed if a deletion happens while the migration script
                                // is running.
                                $res = $dbw->select(
-                                       [ 'image', 'image_comment_temp' ],
+                                       [ 'image' ],
                                        [ 'img_name', 'img_description' ],
                                        [
                                                'img_name' => $this->file->getName(),
-                                               'imgcomment_name' => null,
                                                'img_description_id' => 0,
                                        ],
-                                       __METHOD__,
-                                       [],
-                                       [ 'image_comment_temp' => [ 'LEFT JOIN', [ 'imgcomment_name = img_name' ] ] ]
+                                       __METHOD__
                                );
                                foreach ( $res as $row ) {
                                        $imgFields = $commentStore->insert( $dbw, 'img_description', $row->img_description );
@@ -2669,8 +2647,6 @@ class LocalFileDeleteBatch {
        }
 
        function doDBDeletes() {
-               global $wgCommentTableSchemaMigrationStage;
-
                $dbw = $this->file->repo->getMasterDB();
                list( $oldRels, $deleteCurrent ) = $this->getOldRels();
 
@@ -2684,12 +2660,6 @@ class LocalFileDeleteBatch {
 
                if ( $deleteCurrent ) {
                        $dbw->delete( 'image', [ 'img_name' => $this->file->getName() ], __METHOD__ );
-                       if ( $wgCommentTableSchemaMigrationStage > MIGRATION_OLD ) {
-                               // Clear deprecated table row
-                               $dbw->delete(
-                                       'image_comment_temp', [ 'imgcomment_name' => $this->file->getName() ], __METHOD__
-                               );
-                       }
                }
        }
 
@@ -3397,8 +3367,6 @@ class LocalFileMoveBatch {
         * many rows where updated.
         */
        protected function doDBUpdates() {
-               global $wgCommentTableSchemaMigrationStage;
-
                $dbw = $this->db;
 
                // Update current image
@@ -3408,14 +3376,6 @@ class LocalFileMoveBatch {
                        [ 'img_name' => $this->oldName ],
                        __METHOD__
                );
-               if ( $wgCommentTableSchemaMigrationStage > MIGRATION_OLD ) {
-                       $dbw->update(
-                               'image_comment_temp',
-                               [ 'imgcomment_name' => $this->newName ],
-                               [ 'imgcomment_name' => $this->oldName ],
-                               __METHOD__
-                       );
-               }
 
                // Update old images
                $dbw->update(
index 281d348..274d2c0 100644 (file)
@@ -91,9 +91,10 @@ class HTMLCheckMatrix extends HTMLFormField implements HTMLNestedFilterable {
                // Build the column headers
                $headerContents = Html::rawElement( 'td', [], "\u{00A0}" );
                foreach ( $columns as $columnLabel => $columnTag ) {
-                       $headerContents .= Html::rawElement( 'td', [], $columnLabel );
+                       $headerContents .= Html::rawElement( 'th', [], $columnLabel );
                }
-               $tableContents .= Html::rawElement( 'tr', [], "\n$headerContents\n" );
+               $thead = Html::rawElement( 'tr', [], "\n$headerContents\n" );
+               $tableContents .= Html::rawElement( 'thead', [], "\n$thead\n" );
 
                $tooltipClass = 'mw-icon-question';
                if ( isset( $this->mParams['tooltip-class'] ) ) {
index e7bdb44..fb0ca77 100644 (file)
@@ -15,6 +15,7 @@ class HTMLExpiryField extends HTMLFormField {
 
        /**
         * Relative Date Time Field.
+        * @param array $params
         */
        public function __construct( array $params = [] ) {
                parent::__construct( $params );
index 477cc4c..1c4a785 100644 (file)
@@ -121,7 +121,7 @@ class HTMLMultiSelectField extends HTMLFormField implements HTMLNestedFilterable
 
        /**
         * Get options and make them into arrays suitable for OOUI.
-        * @return array Options for inclusion in a select or whatever.
+        * @throws MWException
         */
        public function getOptionsOOUI() {
                // Sections make this difficult. See getInputOOUI().
index c93c940..6fef23b 100644 (file)
@@ -95,6 +95,18 @@ class HTMLTitlesMultiselectField extends HTMLTitleTextField {
                        $params['placeholder'] = $this->msg( 'mw-widgets-titlesmultiselect-placeholder' )->plain();
                }
 
+               if ( isset( $this->mParams['max'] ) ) {
+                       $params['tagLimit'] = $this->mParams['max'];
+               }
+
+               if ( isset( $this->mParams['showMissing'] ) ) {
+                       $params['showMissing'] = $this->mParams['showMissing'];
+               }
+
+               if ( isset( $this->mParams['input'] ) ) {
+                       $params['input'] = $this->mParams['input'];
+               }
+
                if ( !is_null( $value ) ) {
                        // $value is a string, but the widget expects an array
                        $params['default'] = $value === '' ? [] : explode( "\n", $value );
index e6ee70e..a146ae4 100644 (file)
@@ -382,6 +382,7 @@ abstract class DatabaseInstaller {
                $up = DatabaseUpdater::newForDB( $this->db );
                try {
                        $up->doUpdates();
+                       $up->purgeCache();
                } catch ( MWException $e ) {
                        echo "\nAn error occurred:\n";
                        echo $e->getText();
@@ -391,7 +392,6 @@ abstract class DatabaseInstaller {
                        echo $e->getMessage();
                        $ret = false;
                }
-               $up->purgeCache();
                ob_end_flush();
 
                return $ret;
index f5d01d6..43000b8 100644 (file)
@@ -87,6 +87,7 @@ abstract class DatabaseUpdater {
                AddRFCandPMIDInterwiki::class,
                PopulatePPSortKey::class,
                PopulateIpChanges::class,
+               RefreshExternallinksIndex::class,
        ];
 
        /**
@@ -1281,13 +1282,22 @@ abstract class DatabaseUpdater {
         */
        protected function migrateImageCommentTemp() {
                global $wgCommentTableSchemaMigrationStage;
-               if ( $wgCommentTableSchemaMigrationStage > MIGRATION_OLD ) {
-                       $this->output( "Merging image_comment_temp into the image table\n" );
-                       $task = $this->maintenance->runChild(
-                               MigrateImageCommentTemp::class, 'migrateImageCommentTemp.php'
-                       );
-                       $ok = $task->execute();
-                       $this->output( $ok ? "done.\n" : "errors were encountered.\n" );
+
+               if ( $this->tableExists( 'image_comment_temp' ) ) {
+                       if ( $wgCommentTableSchemaMigrationStage > MIGRATION_OLD ) {
+                               $this->output( "Merging image_comment_temp into the image table\n" );
+                               $task = $this->maintenance->runChild(
+                                       MigrateImageCommentTemp::class, 'migrateImageCommentTemp.php'
+                               );
+                               $task->setForce();
+                               $ok = $task->execute();
+                               $this->output( $ok ? "done.\n" : "errors were encountered.\n" );
+                       } else {
+                               $ok = true;
+                       }
+                       if ( $ok ) {
+                               $this->dropTable( 'image_comment_temp' );
+                       }
                }
        }
 
index 4a12d4c..db4cbdf 100644 (file)
@@ -152,6 +152,9 @@ class MssqlUpdater extends DatabaseUpdater {
                        [ 'addField', 'ipblocks', 'ipb_sitewide', 'patch-ipb_sitewide.sql' ],
                        [ 'addTable', 'ipblocks_restrictions', 'patch-ipblocks_restrictions-table.sql' ],
                        [ 'migrateImageCommentTemp' ],
+
+                       // 1.33
+                       [ 'dropField', 'change_tag', 'ct_tag', 'patch-drop-ct_tag.sql' ],
                ];
        }
 
index 82cf7f4..532ccb0 100644 (file)
@@ -372,6 +372,9 @@ class MysqlUpdater extends DatabaseUpdater {
                        [ 'addField', 'ipblocks', 'ipb_sitewide', 'patch-ipb_sitewide.sql' ],
                        [ 'addTable', 'ipblocks_restrictions', 'patch-ipblocks_restrictions-table.sql' ],
                        [ 'migrateImageCommentTemp' ],
+
+                       // 1,33
+                       [ 'dropField', 'change_tag', 'ct_tag', 'patch-drop-ct_tag.sql' ],
                ];
        }
 
index 78b53aa..19c4cfe 100644 (file)
@@ -164,6 +164,9 @@ class OracleUpdater extends DatabaseUpdater {
                        [ 'addTable', 'ipblocks_restrictions', 'patch-ipblocks_restrictions-table.sql' ],
                        [ 'migrateImageCommentTemp' ],
 
+                       // 1.33
+                       [ 'dropField', 'change_tag', 'ct_tag', 'patch-drop-ct_tag.sql' ],
+
                        // KEEP THIS AT THE BOTTOM!!
                        [ 'doRebuildDuplicateFunction' ],
 
index 71c1a52..5730743 100644 (file)
@@ -598,6 +598,9 @@ class PostgresUpdater extends DatabaseUpdater {
                        [ 'addPgField', 'ipblocks', 'ipb_sitewide', 'SMALLINT NOT NULL DEFAULT 1' ],
                        [ 'addTable', 'ipblocks_restrictions', 'patch-ipblocks_restrictions-table.sql' ],
                        [ 'migrateImageCommentTemp' ],
+
+                       // 1.33
+                       [ 'dropField', 'change_tag', 'ct_tag', 'patch-drop-ct_tag.sql' ],
                ];
        }
 
index cba6a8a..2f39912 100644 (file)
@@ -191,6 +191,7 @@ class SqliteUpdater extends DatabaseUpdater {
 
                        // This field was added in 1.31, but is put here so it can be used by 'migrateComments'
                        [ 'addField', 'image', 'img_description_id', 'patch-image-img_description_id.sql' ],
+                       [ 'addField', 'filearchive', 'fa_description_id', 'patch-filearchive-fa_description_id.sql' ],
 
                        [ 'migrateComments' ],
                        [ 'renameIndex', 'l10n_cache', 'lc_lang_key', 'PRIMARY', false,
@@ -204,6 +205,7 @@ class SqliteUpdater extends DatabaseUpdater {
                        [ 'addTable', 'slot_roles', 'patch-slot_roles.sql' ],
                        [ 'migrateArchiveText' ],
                        [ 'addTable', 'actor', 'patch-actor-table.sql' ],
+                       [ 'addField', 'filearchive', 'fa_actor', 'patch-filearchive-fa_actor.sql' ],
                        [ 'migrateActors' ],
                        [ 'modifyField', 'revision', 'rev_text_id', 'patch-rev_text_id-default.sql' ],
                        [ 'modifyTable', 'site_stats', 'patch-site_stats-modify.sql' ],
@@ -237,6 +239,9 @@ class SqliteUpdater extends DatabaseUpdater {
                        [ 'addField', 'ipblocks', 'ipb_sitewide', 'patch-ipb_sitewide.sql' ],
                        [ 'addTable', 'ipblocks_restrictions', 'patch-ipblocks_restrictions-table.sql' ],
                        [ 'migrateImageCommentTemp' ],
+
+                       // 1.33
+                       [ 'dropField', 'change_tag', 'ct_tag', 'patch-drop-ct_tag.sql' ],
                ];
        }
 
index 953295a..4794712 100644 (file)
@@ -397,7 +397,7 @@ class WebInstallerOptions extends WebInstallerPage {
                $wrapperStyle = ( $this->getVar( '_LicenseCode' ) == 'cc-choose' ) ? '' : 'display: none';
 
                return "<div class=\"config-cc-wrapper\" id=\"config-cc-wrapper\" style=\"$wrapperStyle\">\n" .
-                       Html::element( 'iframe', $iframeAttribs, '', false /* not short */ ) .
+                       Html::element( 'iframe', $iframeAttribs ) .
                        "</div>\n";
        }
 
index bf732a4..46efc40 100644 (file)
@@ -39,14 +39,13 @@ class WebInstallerUpgrade extends WebInstallerPage {
                        if ( $this->parent->request->wasPosted() && !$this->getVar( '_ExistingDBSettings' ) ) {
                                // Done message acknowledged
                                return 'continue';
-                       } else {
-                               // Back button click
-                               // Show the done message again
-                               // Make them click back again if they want to do the upgrade again
-                               $this->showDoneMessage();
-
-                               return 'output';
                        }
+                       // Back button click
+                       // Show the done message again
+                       // Make them click back again if they want to do the upgrade again
+                       $this->showDoneMessage();
+
+                       return 'output';
                }
 
                // wgDBtype is generally valid here because otherwise the previous page
@@ -73,9 +72,13 @@ class WebInstallerUpgrade extends WebInstallerPage {
                                }
                                $this->setVar( '_UpgradeDone', true );
                                $this->showDoneMessage();
-
-                               return 'output';
+                       } else {
+                               $this->startForm();
+                               $this->parent->showError( 'config-upgrade-error' );
+                               $this->endForm();
                        }
+
+                       return 'output';
                }
 
                $this->startForm();
index 47d9f48..5c262e5 100644 (file)
@@ -93,7 +93,7 @@
        "config-db-host-oracle": "قاعدة بيانات TNS:",
        "config-db-host-oracle-help": "أدخل [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm اسم اتصال محلي] صالحا، يجب أن يكون ملف tnsnames.ora مرئيا لهذا التثبيت.<br />إذا كنت تستخدم مكتبات العملاء 10g أو أحدث، فيمكنك أيضا استخدام طريقة التسمية [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.اتصال htm السهل].",
        "config-db-wiki-settings": "حدِّد هذا الويكي",
-       "config-db-name": "اسم قاعدة البيانات",
+       "config-db-name": "اسم قاعدة البيانات (لا شرط):",
        "config-db-name-help": "اختر الاسم الذي يعرف الويكي الخاص بك. لا يجب أن يحتوي على مسافات. إذا كنت تستخدم استضافة المواقع المشتركة، مزود الاستضافة إما سيعطيك اسم قاعدة بيانات محددة لاستخدامها أو سيتيح لك إنشاء قواعد بيانات عن طريق لوحة التحكم.",
        "config-db-name-oracle": "سكيما قاعدة البيانات:",
        "config-db-account-oracle-warn": "هناك ثلاثة سيناريوهات مدعومة لتثبيت Oracle كقاعدة بيانات خلفية: \n\nإذا كنت ترغب في إنشاء حساب قاعدة بيانات كجزء من عملية التثبيت، فيُرجَى تقديم حساب بدور SYSDBA كحساب قاعدة بيانات للتثبيت وتحديد بيانات الاعتماد المطلوبة لحساب الوصول إلى الإنترنت، وإلا يمكنك إما إنشاء حساب الوصول إلى الويب يدويا وتزويد الحساب فقط (إذا كان يتطلب صلاحيات لإنشاء كائنات المخطط) أو توفير حسابين مختلفين، أحدهما له امتيازات إنشاء وامتياز مقيد للدخول إلى الويب. \n\nيمكن العثور على البرنامج النصي لإنشاء حساب له امتيازات مطلوبة في دليل \"maintenance/oracle/\" لهذا التثبيت، ضع في اعتبارك أن استخدام حساب مقيد سيؤدي إلى تعطيل جميع إمكانات الصيانة باستخدام الحساب الافتراضي.",
        "config-db-account-lock": "استخدم نفس اسم المستخدم وكلمة المرور أثناء التشغيل العادي",
        "config-db-wiki-account": "حساب المستخدم للتشغيل العادي",
        "config-db-wiki-help": "أدخل اسم المستخدم وكلمة المرور التي سيتم استخدامهما للاتصال بقاعدة البيانات أثناء عملية الويكي العادية. في حالة عدم وجود حساب وتثبيت الحساب لديه امتيازات كافية، سيتم إنشاء حساب المستخدم هذا مع الحد الأدنى من الامتيازات المطلوبة لتشغيل الويكي.",
-       "config-db-prefix": "بادئة جدول قاعدة البيانات:",
+       "config-db-prefix": "بادئة جدول قاعدة البيانات البيانات (بدون شرطات):",
        "config-db-prefix-help": "إذا كنت بحاجة إلى مشاركة قاعدة بيانات واحدة بين ويكيات متعددة، أو بين ميدياويكي وتطبيق آخر على شبكة الإنترنت، يمكنك الاختيار لإضافة بادئة لجميع أسماء الجداول لتجنب النزاعات. لا تستخدم مسافات. وعادة ما يتم ترك هذا الحقل فارغا.",
        "config-mysql-old": "MySQL $1 أو لاحق مطلوب.لديك $2.",
        "config-db-port": "منفذ قاعدة البيانات:",
-       "config-db-schema": "سكيما لميدياويكي",
+       "config-db-schema": "سكيما لميدياويكي (لا شرط):",
        "config-db-schema-help": "هذا المخطط عادة يكون على ما يرام. غيره إذا كنت تعرف أنك في حاجة إلى هذا فقط.",
        "config-pg-test-error": "لا يمكن الاتصال بقاعدة البيانات <strong>$1</strong>: $2",
        "config-sqlite-dir": "دليل بيانات SQLite:",
        "config-sqlite-cant-create-db": "لا يمكن إنشاء ملف قاعدة البيانات <code>$1</code>.",
        "config-sqlite-fts3-downgrade": "PHP يفتقد دعم FTS3، تخفيض الجداول.",
        "config-can-upgrade": "هناك جداول ميدياويكي في قاعدة البيانات هذه. للارتقاء بها إلى ميدياويكي $1; انقر على <strong>متابعة</strong>.",
+       "config-upgrade-error": "حدث خطأ أثناء ترقية جداول ميدياويكي في قاعدة بياناتك.\n\nلمزيد من المعلومات; انظر إلى السجل أعلاه، لإعادة المحاولة انقر على <strong>متابعة</strong>.",
        "config-upgrade-done": "اكتملت الترقية; \n\nيمكنك الآن [$1 بدء استخدام الويكي الخاص بك]. \n\nإذا كنت ترغب في إعادة إنشاء ملف <code>LocalSettings.php</code>، فانقر فوق الزر أدناه،\n<strong>غير مستحسن</strong> في ما لم تكن تواجه مشاكل مع الويكي الخاص بك.",
        "config-upgrade-done-no-regenerate": "اكتملت الترقية;\n\nيمكنك الآن [$1 بدء استخدام الويكي الخاص بك].",
        "config-regenerate": "إعادة تكوين LocalSettings.php ←",
index f76ffab..fb4445d 100644 (file)
        "config-sqlite-cant-create-db": "Немагчыма стварыць файл базы зьвестак <code>$1</code>.",
        "config-sqlite-fts3-downgrade": "PHP бракуе падтрымкі FTS3 — табліцы пагаршаюцца",
        "config-can-upgrade": "У гэтай базе зьвестак ёсьць табліцы MediaWiki.\nКаб абнавіць іх да MediaWiki $1, націсьніце '''Працягнуць'''.",
+       "config-upgrade-error": "Адбылася памылка пры абнаўленьні табліцаў MediaWiki ў вашай базе зьвестак.\n\nДзеля дадатковай інфармацыі глядзіце журналу вышэй, каб паспрабаваць яшчэ раз націсьніце <strong>Працягнуць</strong>.",
        "config-upgrade-done": "Абнаўленьне завершанае.\n\nЦяпер Вы можаце [$1 пачаць выкарыстаньне вікі].\n\nКалі Вы жадаеце рэгенэраваць <code>LocalSettings.php</code>, націсьніце кнопку ніжэй.\nГэтае дзеяньне '''не рэкамэндуецца''', калі Вы ня маеце праблемаў у працы вікі.",
        "config-upgrade-done-no-regenerate": "Абнаўленьне скончанае.\n\nЦяпер Вы можаце [$1 пачаць працу з вікі].",
        "config-regenerate": "Рэгенэраваць LocalSettings.php →",
index b3bcba3..ca67a25 100644 (file)
@@ -88,7 +88,7 @@
        "config-db-host-oracle": "TNS на базата от данни:",
        "config-db-host-oracle-help": "Въведете валидно [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm Local Connect Name]; файлът tnsnames.ora трябва да бъде видим за инсталацията.<br />Ако използвате клиентска библиотека версия 10g или по-нова можете да използвате метода [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm Easy Connect].",
        "config-db-wiki-settings": "Идентифициране на това уики",
-       "config-db-name": "Име на базата от данни:",
+       "config-db-name": "Име на базата от данни (без тирета):",
        "config-db-name-help": "Избира се име, което да идентифицира уикито.\nТо не трябва да съдържа интервали.\n\nАко се използва споделен хостинг, доставчикът на услугата би трябвало да е предоставил или име на базата от данни, която да бъде използвана, или да позволява създаването на бази от данни чрез контролния панел.",
        "config-db-name-oracle": "Схема на базата от данни:",
        "config-db-account-oracle-warn": "Има три поддържани сценария за инсталиране на Oracle като бекенд база данни:\n\nАко искате да създадете профил в базата данни като част от процеса на инсталиране, моля, посочете профил със SYSDBA като профил в базата данни за инсталиране и посочете желаните данни за влизане (име и парола) за профил с уеб достъп; в противен случай можете да създадете профил с уеб достъп ръчно и предоставите само него (ако той има необходимите права за създаване на схематични обекти), или да предоставите два различни профила - един с привилегии за създаване на обекти, и друг - с ограничения за уеб достъп.\n\nСкрипт за създаването на профил с необходимите привилегии може да се намери в папката „maintenance/oracle/“ на тази инсталация. Имайте в предвид, че използването на ограничен профил ще деактивира всички възможности за обслужване на профила по подразбиране.",
        "config-db-account-lock": "Използване на същото потребителско име и парола по време на нормална работа",
        "config-db-wiki-account": "Потребителска сметка за нормална работа",
        "config-db-wiki-help": "Въвежда се потребителско име и парола, които ще се използват при нормалното функциониране на уикито.\nАко сметката не съществува и използваната при инсталацията сметка има необходимите права, тази потребителска сметка ще бъде създадена с минималните необходими права за работа с уикито.",
-       "config-db-prefix": "Представка за таблиците в базата от данни:",
+       "config-db-prefix": "Представка за таблиците в базата от данни (без тирета):",
        "config-db-prefix-help": "Ако е необходимо да се сподели базата от данни между няколко уикита или между МедияУики и друго уеб приложение, може да се добави представка пред имената на таблиците, за да се избегнат конфликти.\nНе се използват интервали.\n\nТова поле обикновено се оставя празно.",
        "config-mysql-old": "Изисква се MySQL $1 или по-нова версия, наличната версия е $2.",
        "config-db-port": "Порт на базата от данни:",
-       "config-db-schema": "Схема за МедияУики",
+       "config-db-schema": "Схема за МедияУики (без тирета):",
        "config-db-schema-help": "Схемата по-горе обикновено е коректна.\nПромени се извършват ако наистина е необходимо.",
        "config-pg-test-error": "Невъзможно свързване с базата данни <strong>$1</strong>: $2",
        "config-sqlite-dir": "Директория за данни на SQLite:",
        "config-help": "помощ",
        "config-help-tooltip": "щракнете за разгръщане",
        "config-nofile": "Файлът „$1“ не може да бъде открит. Да не е бил изтрит?",
-       "config-extension-link": "Знаете ли, че това уики поддържа [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions разширения]?\n\nМожете да разгледате [https://www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category разширенията по категория] или [https://www.mediawiki.org/wiki/Extension_Matrix Матрицата на разширенията] за пълен списък на разширенията.",
+       "config-extension-link": "Знаете ли, че това уики поддържа [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions разширения]?\n\nМожете да разгледате [https://www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category разширенията по категория].",
        "config-skins-screenshots": "$1 (снимки на екрана: $2)",
        "config-extensions-requires": "$1 (изисква $2)",
        "config-screenshot": "снимка на екран",
+       "config-extension-not-found": "Регистрационният файл за разширение „$1“ не може да бъде намерен",
+       "config-extension-dependency": "Възникна грешка на зависимостите по време на инсталация на разширение „$1“: $2",
        "mainpagetext": "<strong>МедияУики беше успешно инсталирано.</strong>",
        "mainpagedocfooter": "Разгледайте [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents ръководството] за подробна информация относно използването на уики софтуера.\n\n== Първи стъпки ==\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Настройки за конфигуриране]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ ЧЗВ за МедияУики]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Пощенски списък относно нови версии на МедияУики]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Локализиране на МедияУики]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Научете как да се справяте със спама във вашето уики]"
 }
index 9e7e179..af9024c 100644 (file)
@@ -76,7 +76,7 @@
        "config-db-host": "Servidor de la base de dades:",
        "config-db-host-oracle": "TNS de la base de dades:",
        "config-db-wiki-settings": "Identifica aquest wiki",
-       "config-db-name": "Nom de la base de dades:",
+       "config-db-name": "Nom de la base de dades (sense guionets):",
        "config-db-name-help": "Trieu un nom que identifiqui el wiki.\nNo ha de contenir espais.\n\nSi esteu fent servir un hostatge web compartit, el vostre proveïdor us proporcionarà un nom específic per a la base de dades o us permetrà crear base de dades des d'un tauler de control.",
        "config-db-name-oracle": "Esquema de la base de dades:",
        "config-db-install-account": "Compte d'usuari per a la instal·lació",
@@ -92,7 +92,7 @@
        "config-db-prefix-help": "Si heu de compartir una base de dades entre diversos wikis, o entre el MediaWiki i una altra aplicació web, podeu afegir un prefix al tots els noms de taula per a evitar conflictes.\nNo utilitzeu espais.\n\nAquest camp acostuma a quedar en blanc.",
        "config-mysql-old": "Cal el MySQL $1 o posterior. Teniu el $2.",
        "config-db-port": "Port de la base de dades:",
-       "config-db-schema": "Esquema per a MediaWiki:",
+       "config-db-schema": "Esquema per a MediaWiki (sense guionets):",
        "config-db-schema-help": "Aquest esquema normalment ja serveix.\nNomés canvieu-lo si sabeu què us feu.",
        "config-pg-test-error": "No es pot connectar a la base de dades '''$1''': $2",
        "config-sqlite-dir": "Directori de dades de l'SQLite",
        "config-extensions-requires": "$1 (necessita $2)",
        "config-screenshot": "captura de pantalla",
        "config-extension-not-found": "No s'ha pogut trobar el fitxer de registre de l'extensió «$1»",
+       "config-extension-dependency": "S'ha produït un error de dependències mentre s'instal·lava l'extensió «$1»: $2",
        "mainpagetext": "<strong>MediaWiki s'ha instal·lat.</strong>",
        "mainpagedocfooter": "Consulteu la [https://meta.wikimedia.org/wiki/Help:Contents Guia d'Usuari] per a més informació sobre com utilitzar aquest programari wiki.\n\n== Primers passos ==\n\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Llista de paràmetres configurables]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ PMF del MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Llista de correu per a anuncis del MediaWiki]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Traducció de MediaWiki en la vostra llengua]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Aprengueu com combatre la brossa que pot atacar el vostre wiki]"
 }
index fe93951..af27650 100644 (file)
@@ -93,7 +93,7 @@
        "config-db-host-oracle": "Databázové TNS:",
        "config-db-host-oracle-help": "Zadejte platné [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm Local Connect Name]; tato instalace musí vidět soubor tnsnames.ora.<br />Pokud používáte klientské knihovny verze 10g nebo novější, můžete také používat názvy [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm Easy Connect].",
        "config-db-wiki-settings": "Identifikace této wiki",
-       "config-db-name": "Jméno databáze:",
+       "config-db-name": "Jméno databáze (bez spojovníků):",
        "config-db-name-help": "Zvolte jméno, které označuje vaši wiki.\nNemělo by obsahovat mezery.\n\nPokud používáte sdílený webový hosting, váš poskytovatel vám buď sdělí konkrétní jméno databáze, nebo vás nechá vytvářet databáze pomocí nějakého ovládacího panelu.",
        "config-db-name-oracle": "Databázové schéma:",
        "config-db-account-oracle-warn": "Existují tři podporované možnosti pro instalaci s použitím databáze Oracle.\n\nPokud chcete v rámci instalace založit databázový účet, zadejte jako databázový účet pro instalaci účet s rolí SYSDBA a uveďte požadované údaje pro účet pro webový přístup, jinak můžete vytvořit účet pro webový přístup ručně a zadat pouze tento účet (pokud má dostatečná oprávnění k zakládání objektů schématu) nebo poskytnout dva různé účty, jeden s oprávněními k zakládání, druhý omezený pro webový přístup.\n\nSkript pro založení účtu s potřebnými privilegii můžete v této instalaci nalézt v adresáři „maintenance/oracle/“. Nezapomeňte, že použití omezeného účtu znepřístupní veškeré možnosti údržby přes implicitní účet.",
        "config-db-account-lock": "Použít stejné uživatelské jméno a heslo pro běžnou činnost",
        "config-db-wiki-account": "Uživatelský účet pro běžnou činnost",
        "config-db-wiki-help": "Zadejte uživatelské jméno a heslo, které se bude používat pro připojení k databázi za běžného provozu wiki.\nPokud účet neexistuje a instalační účet má dostatečná oprávnění, bude tento uživatelský účet založen s minimálními oprávněními potřebnými k provozu wiki.",
-       "config-db-prefix": "Prefix databázových tabulek:",
+       "config-db-prefix": "Prefix databázových tabulek (bez spojovníků):",
        "config-db-prefix-help": "Pokud potřebujete sdílet jednu databázi mezi vícero wiki, případně mezi MediaWiki a další webovou aplikací, můžete přidat k názvu každé tabulky prefix, abyste se vyhnuli konfliktům.\nNepoužívejte mezery.\n\nToto pole se zpravidla ponechává prázdné.",
        "config-mysql-old": "Je vyžadováno MySQL $1 nebo novější. Vy máte $2.",
        "config-db-port": "Databázový port:",
-       "config-db-schema": "Schéma pro MediaWiki:",
+       "config-db-schema": "Schéma pro MediaWiki (bez spojovníků):",
        "config-db-schema-help": "Toto schéma zpravidla stačí.\nMěňte ho, jen pokud víte, že je to potřeba.",
        "config-pg-test-error": "Nelze se připojit k databázi '''$1''': $2",
        "config-sqlite-dir": "Adresář pro data SQLite:",
        "config-sqlite-dir-help": "SQLite ukládá veškerá data v jediném souboru.\n\nZadaný adresář musí být v průběhu instalace být přístupný pro zápis.\n\n'''Neměl by''' být dostupný z webu, proto ho nedáváme tam, kde jsou vaše PHP soubory.\n\nInstalátor do adresáře přidá soubor <code>.htaccess</code>, ale pokud to selže, mohl by někdo získat přístup k vaší holé databázi.\nTo zahrnuje syrová uživatelská data (e-mailové adresy, hašovaná hesla), jako i smazané revize a další data s omezeným přístupem z vaší wiki.\n\nZvažte umístění databáze někam zcela jinam, například do <code>/var/lib/mediawiki/mojewiki</code>.",
        "config-oracle-def-ts": "Implicitní tabulkový prostor:",
        "config-oracle-temp-ts": "Dočasný tabulkový prostor:",
-       "config-type-mysql": "MySQL (nebo kompatibilní)",
+       "config-type-mysql": "MariaDB, MySQL nebo kompatibilní",
        "config-type-postgres": "PostgreSQL",
        "config-type-sqlite": "SQLite",
        "config-type-oracle": "Oracle",
        "config-type-mssql": "Microsoft SQL Server",
        "config-support-info": "MediaWiki podporuje následující databázové systémy:\n\n$1\n\nPokud v nabídce níže nevidíte databázový systém, který chcete použít, musíte pro zapnutí podpory následovat instrukce odkázané výše.",
-       "config-dbsupport-mysql": "* [{{int:version-db-mysql-url}} MySQL] je pro MediaWiki hlavní platformou a je podporováno nejlépe. MediaWiki pracuje také s [{{int:version-db-mariadb-url}} MariaDB] a [{{int:version-db-percona-url}} Percona Server], které jsou s MySQL kompatibilní. ([https://secure.php.net/manual/en/mysqli.installation.php Jak zkompilovat PHP s podporou MySQL])",
+       "config-dbsupport-mysql": "* [{{int:version-db-mariadb-url}} MariaDB] je pro MediaWiki hlavní platformou a je podporováno nejlépe. MediaWiki pracuje také s [{{int:version-db-mysql-url}} MySQL] a [{{int:version-db-percona-url}} Percona Server], které jsou s MariaDB kompatibilní. ([https://secure.php.net/manual/en/mysqli.installation.php Jak zkompilovat PHP s podporou MySQL])",
        "config-dbsupport-postgres": "* [{{int:version-db-postgres-url}} PostgreSQL] je populární otevřený databázový systém používaný jako alternativa k MySQL. ([https://secure.php.net/manual/en/pgsql.installation.php Jak přeložit PHP s podporou PostgreSQL])",
        "config-dbsupport-sqlite": "* [{{int:version-db-sqlite-url}} SQLite] je velmi dobře podporovaný odlehčený databázový systém. ([https://secure.php.net/manual/en/pdo.installation.php Jak přeložit PHP s podporou SQLite], používá PDO)",
        "config-dbsupport-oracle": "* [{{int:version-db-oracle-url}} Oracle] je komerční podniková databáze. ([https://secure.php.net/manual/en/oci8.installation.php Jak přeložit PHP s podporou OCI8])",
        "config-dbsupport-mssql": "* [{{int:version-db-mssql-url}} Microsoft SQL Server] je komerční podniková databáze pro Windows. ([https://secure.php.net/manual/en/sqlsrv.installation.php Jak přeložit PHP s podporou SQLSRV])",
-       "config-header-mysql": "Nastavení MySQL",
+       "config-header-mysql": "Nastavení MariaDB/MySQL",
        "config-header-postgres": "Nastavení PostgreSQL",
        "config-header-sqlite": "Nastavení SQLite",
        "config-header-oracle": "Nastavení Oracle",
        "config-skins-screenshots": "$1 (snímky obrazovky: $2)",
        "config-extensions-requires": "$1 (vyžaduje $2)",
        "config-screenshot": "snímek obrazovky",
+       "config-extension-not-found": "Nepodařilo se najít registrační soubor pro rozšíření „$1“",
+       "config-extension-dependency": "Při instalaci rozšíření „$1“ nastala chyba závislostí: $2",
        "mainpagetext": "<strong>MediaWiki byla úspěšně nainstalována.</strong>",
        "mainpagedocfooter": "[https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents Uživatelská příručka] vám napoví, jak používat MediaWiki.\n\n== Začínáme ==\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Nastavení konfigurace]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ Často kladené otázky o MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce E-mailová konference oznámení MediaWiki]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Překlad MediaWiki do vašeho jazyka]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Naučte se bojovat se spamem na vaší wiki]"
 }
index 901953b..953ac8a 100644 (file)
@@ -47,7 +47,7 @@
        "config-env-php": "PHP $1 er installeret.",
        "config-db-type": "Databasetype:",
        "config-db-host": "Databasevært:",
-       "config-db-name": "Databasenavn:",
+       "config-db-name": "Databasenavn (ingen bindestreg):",
        "config-db-install-account": "Brugerkonto for installation",
        "config-db-username": "Databasens brugernavn:",
        "config-db-password": "Databasens adgangskode:",
index 7375019..09bbe69 100644 (file)
        "config-db-account-lock": "Derselbe Benutzername und das Passwort müssen während des Normalbetriebs des Wikis verwendet werden.",
        "config-db-wiki-account": "Benutzerkonto für den normalen Betrieb",
        "config-db-wiki-help": "Bitte Benutzernamen und Passwort angeben, die der Webserver während des Normalbetriebes dazu verwenden soll, eine Verbindung zum Datenbankserver herzustellen.\nSofern ein entsprechendes Benutzerkonto nicht vorhanden ist und das Benutzerkonto für den Installationsvorgang über ausreichende Berechtigungen verfügt, wird dieses Benutzerkonto automatisch mit den Mindestberechtigungen zum Normalbetrieb des Wikis angelegt.",
-       "config-db-prefix": "Datenbanktabellenpräfix:",
+       "config-db-prefix": "Präfix der Datenbanktabelle (ohne Bindestriche):",
        "config-db-prefix-help": "Sofern eine Datenbank für mehrere Wikiinstallationen oder eine Wikiinstallation und eine andere Programminstallation genutzt werden soll, muss ein Datenbanktabellenpräfix angegeben werden, um Datenbankprobleme zu vermeiden.\nEs können keine Leerzeichen verwendet werden.\n\nGewöhnlich bleibt dieses Feld leer.",
        "config-mysql-old": "MySQL $1 oder höher wird benötigt. MySQL $2 ist momentan vorhanden.",
        "config-db-port": "Datenbankport:",
        "config-sqlite-cant-create-db": "Die Datenbankdatei <code>$1</code> konnte nicht erzeugt werden.",
        "config-sqlite-fts3-downgrade": "PHP verfügt nicht über FTS3-Unterstützung. Die Tabellen wurden zurückgestuft.",
        "config-can-upgrade": "Es wurden MediaWiki-Tabellen in dieser Datenbank gefunden.\nUm sie auf MediaWiki $1 zu aktualisieren, bitte auf '''Weiter''' klicken.",
+       "config-upgrade-error": "Bei der Aktualisierung der MediaWiki-Tabellen in deiner Datenbank gab es einen Fehler.\n\nFür weitere Informationen siehe bitte in das oben stehende Logbuch. Um es erneut zu versuchen, klicke auf <strong>Fortfahren</strong>.",
        "config-upgrade-done": "Die Aktualisierung ist nun abgeschlossen.\n\nDas Wiki kann nun [$1 genutzt werden].\n\nSofern die Datei <code>LocalSettings.php</code> neu erzeugt werden soll, bitte auf die Schaltfläche unten klicken.\nDies wird '''nicht empfohlen''', es sei denn, es treten Probleme mit dem Wiki auf.",
        "config-upgrade-done-no-regenerate": "Die Aktualisierung ist abgeschlossen.\n\nDas Wiki kann nun [$1 genutzt werden].",
        "config-regenerate": "LocalSettings.php neu erstellen →",
index 34df619..55b7799 100644 (file)
@@ -11,7 +11,8 @@
                        "Badseed",
                        "Macofe",
                        "KATRINE1992",
-                       "Nikosgranturismogt"
+                       "Nikosgranturismogt",
+                       "KATRINE1993"
                ]
        },
        "config-desc": "Το πρόγραμμα εγκατάστασης για το MediaWiki",
@@ -86,7 +87,7 @@
        "config-db-host-help": "Εάν ο διακομιστής βάσης δεδομένων σας βρίσκεται σε διαφορετικό διακομιστή, εισαγάγετε εδώ το όνομα του κεντρικού υπολογιστή ή τη διεύθυνση IP.\n\nΕάν χρησιμοποιείτε μοιραζόμενη φιλοξενία του ιστοτόπου σας, ο πάροχος φιλοξενίας σας θα πρέπει να σας δίνει το σωστό όνομα κεντρικού υπολογιστή στην τεκμηρίωση του.\n\nΕάν εγκαθιστάτε σε διακομιστή Windows και χρησιμοποιείτε MySQL, το «localhost» μπορεί να μην λειτουργεί ως όνομα διακομιστή. Εάν δεν λειτουργεί, δοκιμάστε «127.0.0.1» ως τοπική διεύθυνση IP.\n\nΕάν χρησιμοποιείτε PostgreSQL, αφήστε αυτό το πεδίο κενό για να συνδεθείτε μέσω υποδοχής Unix.",
        "config-db-host-oracle": "Βάση δεδομένων TNS:",
        "config-db-wiki-settings": "Αναγνώριση αυτού του wiki",
-       "config-db-name": "Όνομα βάσης δεδομένων:",
+       "config-db-name": "Όνομα βάσης δεδομένων (χωρίς υφέν):",
        "config-db-name-help": "Επιλέξτε όνομα που να χαρακτηρίζει το wiki σας. Δεν πρέπει να περιέχει κενά διαστήματα.\n\nΕάν χρησιμοποιείτε μοιραζόμενη φιλοξενία του ιστοτόπου σας, ο πάροχος φιλοξενίας σας είτε θα σας δίνει να χρησιμοποιήσετε ένα συγκεκριμένο όνομα βάσης δεδομένων ή θα σας δίνει τη δυνατότητα να δημιουργείτε βάσεις δεδομένων μέσω κάποιου πίνακα ελέγχου.",
        "config-db-name-oracle": "Σχήμα βάσης δεδομένων:",
        "config-db-install-account": "Λογαριασμός χρήστη για την εγκατάσταση",
        "config-mssql-old": "Απαιτείται Microsoft SQL Server $1 ή νεότερο. Εσείς έχετε $2.",
        "config-sqlite-readonly": "Το αρχείο <code>$1</code> δεν είναι εγγράψιμο.",
        "config-sqlite-cant-create-db": "Δεν ήταν δυνατή η δημιουργία του αρχείου βάσης δεδομένων <code>$1</code>.",
+       "config-upgrade-error": "Υπήρξε σφάλμα κατά την αναβάθμιση της λίστας  MediaWiki στην βάση δεδομένων σας.\n\nΓια περισσότερες πληροφορίες δέστε την σύνδεση σας πιο πάνω και ξανακάνετε κλικ στο <strong>Continue</strong>.",
        "config-upgrade-done-no-regenerate": "Η αναβάθμιση ολοκληρώθηκε.\n\nΜπορείτε τώρα να [$1 ξεκινήσετε να χρησιμοποιείτε το wiki σας].",
        "config-regenerate": "Αναδημιουργία LocalSettings.php →",
        "config-db-web-account": "Λογαριασμός βάσης δεδομένων για πρόσβαση Ιστού",
index baf2b5b..3202ca4 100644 (file)
        "config-sqlite-cant-create-db": "Could not create database file <code>$1</code>.",
        "config-sqlite-fts3-downgrade": "PHP is missing FTS3 support, downgrading tables.",
        "config-can-upgrade": "There are MediaWiki tables in this database.\nTo upgrade them to MediaWiki $1, click <strong>Continue</strong>.",
+       "config-upgrade-error": "There was an error while upgrading the MediaWiki tables in your database.\n\nFor more information look into the log above, to retry click <strong>Continue</strong>.",
        "config-upgrade-done": "Upgrade complete.\n\nYou can now [$1 start using your wiki].\n\nIf you want to regenerate your <code>LocalSettings.php</code> file, click the button below.\nThis is <strong>not recommended</strong> unless you are having problems with your wiki.",
        "config-upgrade-done-no-regenerate": "Upgrade complete.\n\nYou can now [$1 start using your wiki].",
        "config-regenerate": "Regenerate LocalSettings.php →",
index c9d2886..f5aee2d 100644 (file)
@@ -38,7 +38,7 @@
        "config-env-hhvm": "HHVM $1 on installitud.",
        "config-diff3-bad": "GNU diff3 ei leitud.",
        "config-db-type": "Andmebaasi tüüp:",
-       "config-db-name": "Andmebaasi nimi:",
+       "config-db-name": "Andmebaasi nimi (sidekriipsudeta):",
        "config-db-name-oracle": "Andmebaasi skeem:",
        "config-db-username": "Andmebaasi kasutajanimi:",
        "config-db-password": "Andmebaasi parool:",
index ecddb39..2f648fb 100644 (file)
        "config-db-host-oracle": "Nom TNS de la base de données :",
        "config-db-host-oracle-help": "Entrez un [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm nom de connexion locale] valide ; un fichier tnsnames.ora doit être visible par cette installation.<br /> Si vous utilisez les bibliothèques clientes version 10g ou plus récentes, vous pouvez également utiliser la méthode de nommage [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm Easy Connect].",
        "config-db-wiki-settings": "Identifier ce wiki",
-       "config-db-name": "Nom de la base de données :",
+       "config-db-name": "Nom de la base de données (sans tirets):",
        "config-db-name-help": "Choisissez un nom qui identifie votre wiki.\nIl ne doit pas contenir d'espaces.\n\nSi vous utilisez un hébergement web partagé, votre hébergeur vous fournira un nom spécifique de base de données à utiliser, ou bien vous permet de créer des bases de données via un panneau de contrôle.",
        "config-db-name-oracle": "Schéma de base de données :",
        "config-db-account-oracle-warn": "Il existe trois scénarios pris en charge pour l’installation d'Oracle comme backend de base de données:\n\nSi vous souhaitez créer un compte de base de données dans le cadre de la procédure d’installation, veuillez fournir un compte avec le rôle de SYSDBA comme compte de base de données pour l’installation et spécifier les informations d’identification souhaitées pour le compte d'accès au web, sinon vous pouvez créer le compte d’accès web manuellement et fournir uniquement ce compte (si elle a exigé des autorisations nécessaires pour créer les objets de schéma) ou fournir deux comptes différents, l’un avec les privilèges pour créer et l'autre restreint, pour l’accès web.\n\nUn script pour créer un compte avec des privilèges requis peut être trouvé dans le répertoire « entretien/oracle/ » de cette installation. N’oubliez pas que le fait de l’utilisation d’un compte limité désactive toutes les fonctionnalités d’entretien avec le compte par défaut.",
        "config-db-account-lock": "Utiliser le même nom d'utilisateur et le même mot de passe pendant le fonctionnement habituel",
        "config-db-wiki-account": "Compte d'utilisateur pour le fonctionnement habituel",
        "config-db-wiki-help": "Entrez le nom d'utilisateur et le mot de passe qui seront utilisés pour se connecter à la base de données pendant le fonctionnement habituel du wiki.\nSi le compte n'existe pas, et le compte d'installation dispose de privilèges suffisants, ce compte d'utilisateur sera créé avec les privilèges minimum requis pour faire fonctionner le wiki.",
-       "config-db-prefix": "Préfixe des tables de la base de données :",
+       "config-db-prefix": "Préfixe des tables de la base de données (sans tirets) :",
        "config-db-prefix-help": "Si vous avez besoin de partager une base de données entre plusieurs wikis, ou entre MediaWiki et une autre application Web, vous pouvez choisir d'ajouter un préfixe à tous les noms de table pour éviter les conflits.\nNe pas utiliser d'espaces.\n\nCe champ est généralement laissé vide.",
        "config-mysql-old": "MySQL $1 ou version ultérieure est requis. Vous avez $2.",
        "config-db-port": "Port de la base de données :",
-       "config-db-schema": "Schéma pour MediaWiki :",
+       "config-db-schema": "Schéma pour MediaWiki (sans tirets) :",
        "config-db-schema-help": "Ce schéma est généralement correct.\nNe le changez que si vous êtes sûr que c'est nécessaire.",
        "config-pg-test-error": "Impossible de se connecter à la base de données '''$1''' : $2",
        "config-sqlite-dir": "Dossier des données SQLite :",
        "config-sqlite-cant-create-db": "Impossible de créer le fichier de base de données <code>$1</code>.",
        "config-sqlite-fts3-downgrade": "PHP n’a pas trouvé la prise en charge FTS3, les tables sont restreintes.",
        "config-can-upgrade": "Il y a des tables MediaWiki dans cette base de données.\nPour les mettre au niveau de MediaWiki $1, cliquez sur '''Continuer'''.",
+       "config-upgrade-error": "Une erreur est survenue durant la mise à jour des tables MédiaWiki de votre base de données.\n\nPour plus d'informations voir le journal ci-dessus, pour réessayer, cliquez sur <strong>Continuer</strong>.",
        "config-upgrade-done": "Mise à jour terminée.\n\nVous pouvez maintenant [$1 commencer à utiliser votre wiki].\n\nSi vous souhaitez régénérer votre fichier <code>LocalSettings.php</code>, cliquez sur le bouton ci-dessous.\nCeci '''n'est pas recommandé''' sauf si vous rencontrez des problèmes avec votre wiki.",
        "config-upgrade-done-no-regenerate": "Mise à jour terminée.\n\nVous pouvez maintenant [$1 commencer à utiliser votre wiki].",
        "config-regenerate": "Regénérer LocalSettings.php →",
index 5261427..e1f2c88 100644 (file)
        "config-db-host-oracle": "TNS del database:",
        "config-db-host-oracle-help": "Inserisci un valido [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm Local Connect Name]; un file tnsnames.ora deve essere visibile a questa installazione.<br />Se stai usando la libreria cliente 10g o più recente puoi anche usare il metodo di denominazione [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm Easy Connect].",
        "config-db-wiki-settings": "Identifica questo wiki",
-       "config-db-name": "Nome del database:",
+       "config-db-name": "Nome del database (no trattini):",
        "config-db-name-help": "Scegli un nome che identifica il tuo wiki.\nNon deve contenere spazi.\n\nSe utilizzi un web hosting condiviso, il tuo hosting provider o ti fornisce uno specifico nome di database da utilizzare, oppure ti consentirà di creare il database tramite un pannello di controllo.",
        "config-db-name-oracle": "Schema del database:",
        "config-db-account-oracle-warn": "Ci sono tre scenari supportati per l'installazione di Oracle come database di backend:\n\nSe vuoi creare un'utenza di database come parte del processo di installazione, fornisci un account con ruolo SYSDBA come utenza di database per l'installazione e specifica le credenziali volute per l'utenza di accesso web, altrimenti è possibile creare manualmente l'utenza di accesso web e fornire solo quell'account (se dispone delle autorizzazioni necessario per creare gli oggetti dello schema) o fornire due diverse utenze, una con i permessi di creazione e una per l'accesso web.\n\nScript per la creazione di un'utenza con le autorizzazioni necessarie può essere trovato nella directory \"maintenance/oracle/\" di questa installazione. Tieni presente che l'uso di un'utenza con restrizioni disabiliterà tutte le funzionalità di manutenzione con l'account predefinito.",
        "config-db-account-lock": "Utilizza lo stesso nome utente e password durante il normale funzionamento",
        "config-db-wiki-account": "Account utente per il normale funzionamento",
        "config-db-wiki-help": "Inserisci il nome utente e la password che verrà utilizzato per connettersi al database durante il normale funzionamento del wiki.\nSe l'account non esiste, e l'account di installazione dispone di privilegi sufficienti, verrà creato con privilegi minimi necessari per operare sul wiki.",
-       "config-db-prefix": "Prefisso tabella del database:",
+       "config-db-prefix": "Prefisso tabella del database (no trattini):",
        "config-db-prefix-help": "Se hai bisogno di condividere un database tra più wiki, o tra MediaWiki e un'altra applicazione web, puoi scegliere di aggiungere un prefisso a tutti i nomi di tabella, per evitare conflitti.\nNon utilizzare spazi.\n\nSolitamente, questo campo viene lasciato vuoto.",
        "config-mysql-old": "MySQL $1 o una versione successiva è necessaria, rilevata la $2.",
        "config-db-port": "Porta del database:",
-       "config-db-schema": "Schema per MediaWiki:",
+       "config-db-schema": "Schema per MediaWiki (no trattini):",
        "config-db-schema-help": "Questo schema in genere andrà bene.\nDa cambiare solamente se si è sicuri di averne bisogno.",
        "config-pg-test-error": "Impossibile connettersi al database '''$1''': $2",
        "config-sqlite-dir": "Directory data di SQLite:",
index a649a81..955b4f4 100644 (file)
        "config-db-host-oracle": "データベース TNS:",
        "config-db-host-oracle-help": "有効な[http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm ローカル接続名]を入力してください。tnsnames.ora ファイルは、このインストール先から参照できる場所に置いてください。<br />ご使用中のクライアント ライブラリが 10g 以降の場合、[http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm Easy Connect] ネーミング メソッドを使用できます。",
        "config-db-wiki-settings": "このウィキの識別情報",
-       "config-db-name": "データベース名:",
+       "config-db-name": "データベース名 (ハイフンは不要):",
        "config-db-name-help": "このウィキを識別する名前を入力してください。\n空白を含めることはできません。\n\n共有ウェブホストを利用している場合、ホスティングプロバイダーが特定の使用可能なデータベース名を提供するか、あるいは管理パネルからデータベースを作成できるようにしているでしょう。",
        "config-db-name-oracle": "データベースのスキーマ:",
        "config-db-account-oracle-warn": "バックエンドのデータベースとして Oracle をインストールする場合、3つのシナリオが考えられます。\n\nデータベース用のアカウントをインストールのプロセス途中で作成したい場合、インストールに使うデータベース用のアカウントしては SYSDBAロール付きのアカウントを指定し、ウェブアクセス用アカウントには必要なログイン情報を指定してください。あるいは、ウェブアクセス用のアカウントを手動で作成して、そのアカウント(スキーマオブジェクトの作成のパーミッションを要求する場合)だけを使うか、二つの異なるアカウントを用意して一つは特権を付与できるもの、もう一つをウェブアクセス用の制限アカウントとしてください。\n\n要求された特権でアカウントを作成するスクリプトは、このインストール環境では、\"maintenance/oracle/\" にあります。制限アカウントを使用することは、デフォルトアカウントでのすべてのメンテナンス特権を無効にすることにご注意ください。",
        "config-db-account-lock": "インストール作業終了後も同じ利用者名とパスワードを使用する",
        "config-db-wiki-account": "インストール作業終了後の利用者アカウント",
        "config-db-wiki-help": "通常のウィキ操作中にデータベースへの接続する時に利用する利用者名とパスワードを入力してください。\nアカウントが存在せず、インストールのアカウントに十分な権限がある場合は、この利用者アカウントは、ウィキを操作する上で最小限の権限を持った状態で作成されます。",
-       "config-db-prefix": "データベース テーブルの接頭辞:",
+       "config-db-prefix": "データベース テーブルの接頭辞 (ハイフンは不要):",
        "config-db-prefix-help": "データベースを複数のウィキ間、あるいはMediaWikiと他のウェブアプリケーションで共有する必要がある場合、衝突を避けるために、すべてのテーブル名に接頭辞を付ける必要があります。\n空白は使用できません。\n\nこのフィールドは、通常は空のままです。",
        "config-mysql-old": "MySQL $1 以降が必要です。ご使用中の MySQL は $2 です。",
        "config-db-port": "データベースのポート:",
-       "config-db-schema": "MediaWiki のスキーマ:",
+       "config-db-schema": "MediaWiki のスキーマ (ハイフンは不要):",
        "config-db-schema-help": "通常はこのスキーマで問題ありません。\n必要な場合のみ変更してください。",
        "config-pg-test-error": "データベース <strong>$1</strong> に接続できません: $2",
        "config-sqlite-dir": "SQLite データ ディレクトリ:",
index 578195a..6839c22 100644 (file)
@@ -94,7 +94,7 @@
        "config-db-host-oracle": "데이터베이스 TNS:",
        "config-db-host-oracle-help": "올바른 [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm 로컬 연결 이름]을 입력하세요. tnsnames.ora 파일이 이 설치 위치에서 참조할 수 있는 곳에 있어야 합니다.<br />10g 이후의 클라이언트 라이브러리를 사용하는 경우 [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm 쉬운 연결] 네이밍 메서드도 사용할 수 있습니다.",
        "config-db-wiki-settings": "이 위키 식별",
-       "config-db-name": "데이터베이스 이름:",
+       "config-db-name": "데이터베이스 이름 (하이픈 없음):",
        "config-db-name-help": "위키를 식별하기 위한 이름을 선택하세요.\n공백이 없어야 합니다.\n\n공유하는 웹 호스팅 사용하면 호스팅 제공 업체가 특정 데이터베이스 이름을 제공하거나 제어판에서 데이터베이스를 만들 수 있습니다.",
        "config-db-name-oracle": "데이터베이스 스키마:",
        "config-db-account-oracle-warn": "데이터베이스 백엔드로 Oracle을 설치하기 위해 지원하는 세 가지 시나리오가 있습니다:\n\n설치 과정의 일부로 데이터베이스 계정을 만들려면 설치를 위해 데이터베이스 계정으로 SYSDBA 역할을 가진 계정을 제공하고 웹 접근 계정에 대해 원하는 자격 증명을 지정하세요, 그렇지 않으면 수동으로 웹 접근 계정을 만들 수 있으며 (스키마 개체를 만들 권한이 필요한 경우) 또는 생성 권한을 가진 계정과 웹 접근이 제한된 계정의 두 가지 다른 계정을 제공할 수도 있습니다\n\n필요한 권한을 가진 계정을 만드는 스크립트는 이 설치 위치의 \"maintenance/oracle/\" 디렉터리에서 찾을 수 있습니다. 제한된 계정을 사용하면 기본 계정의 모든 유지 관리 기능이 비활성화된다는 점에 유의하십시오.",
        "config-db-account-lock": "정상적으로 작동하는 동안 같은 사용자 이름과 비밀번호를 사용함",
        "config-db-wiki-account": "정상적인 작동을 위한 사용자 계정",
        "config-db-wiki-help": "정상적인 위키 작업 동안 데이터베이스에 연결하는 데 사용할 사용자 이름과 비밀번호를 입력하세요.\n계정이 존재하지 않고 설치 계정에 충분한 권한이 있는 경우 이 사용자 계정은 위키를 작동하는 데 필요한 최소 권한으로 만들어집니다.",
-       "config-db-prefix": "데이터베이스 테이블 접두어:",
+       "config-db-prefix": "데이터베이스 테이블 접두어 (하이픈 없음):",
        "config-db-prefix-help": "여러 위키 사이 또는 미디어위키와 다른 웹 애플리케이션 사이에 하나의 데이터베이스를 공유해야 하는 경우, 충돌을 피하기 위해 모든 테이블 이름에 접두어를 추가하도록 선택할 수 있습니다.\n공백을 사용하지 마세요.\n\n이 필드는 일반적으로 비어 있습니다.",
        "config-mysql-old": "MySQL $1 이상이 필요합니다. $2이(가) 있습니다.",
        "config-db-port": "데이터베이스 포트:",
-       "config-db-schema": "미디어위키에 대한 스키마:",
+       "config-db-schema": "미디어위키에 대한 스키마 (하이픈 없음):",
        "config-db-schema-help": "보통 이 스키마는 문제가 없습니다.\n필요한 경우에만 바꾸세요.",
        "config-pg-test-error": "<strong>$1</strong> 데이터베이스에 연결할 수 없습니다: $2",
        "config-sqlite-dir": "SQLite 데이터 디렉터리:",
        "config-sqlite-cant-create-db": "<code>$1</code> 데이터베이스 파일을 만들 수 없습니다.",
        "config-sqlite-fts3-downgrade": "PHP가 FTS3 지원이 없어졌습니다. 테이블을 다운그레이드합니다",
        "config-can-upgrade": "이 데이터베이스에 미디어위키 테이블이 있습니다.\n미디어위키 $1(으)로 업그레이드하려면 <strong>계속</strong>을 클릭하세요.",
+       "config-upgrade-error": "데이터베이스에서 미디어위키 테이블을 업그레이드하는 중에 오류가 있었습니다.\n\n다시 시도하려면 <strong>계속하기</strong>를 클릭하여 상기 기록에 대한 더 자세한 정보를 참고하십시오.",
        "config-upgrade-done": "업그레이드가 완료되었습니다.\n\n이제 [$1 위키를 시작]할 수 있습니다.\n\n만약 <code>LocalSettings.php</code> 파일을 다시 만들고 싶다면 아래의 버튼을 클릭하세요.\n위키에 문제가 있지 않는 한 <strong>권장하지 않습니다</strong>.",
        "config-upgrade-done-no-regenerate": "업그레이드가 완료되었습니다.\n\n이제 [$1 위키를 시작]할 수 있습니다.",
        "config-regenerate": "LocalSettings.php 다시 생성 →",
index 6f121e7..9c550df 100644 (file)
@@ -73,7 +73,7 @@
        "config-db-wiki-help": "Gitt de Benotzernumm an d'Passwuert an dat benotzt wäert gi fir sech bei den normale Wiki-Operatiounen mat der Datebank ze connectéieren.\nWann et de Kont net gëtt, a wann den Installatiouns-Kont genuch Rechter huet, gëtt dëse Benotzerkont opgemaach mat dem Minimum vu Rechter déi gebraucht gi fir dës Wiki bedreiwen ze kënnen.",
        "config-mysql-old": "MySQL $1 oder eng méi nei Versioun gëtt gebraucht, Dir hutt $2.",
        "config-db-port": "Port vun der Datebank:",
-       "config-db-schema": "Schema fir MediaWiki",
+       "config-db-schema": "Schema fir MediaWiki (keng Bindestrécher)",
        "config-db-schema-help": "D'Schemaen hei driwwer si gewéinlech korrekt.\nÄnnert se nëmme wann Dir wësst datt et néideg ass.",
        "config-pg-test-error": "Et ass net méiglech d'Datebank '''$1''' ze kontaktéieren: $2",
        "config-sqlite-dir": "Repertoire vun den SQLite-Donnéeën",
index d92256f..5be41e4 100644 (file)
@@ -4,7 +4,8 @@
                        "Bjankuloski06",
                        "아라",
                        "Macofe",
-                       "Srdjan m"
+                       "Srdjan m",
+                       "Vlad5250"
                ]
        },
        "config-desc": "Воспоставувачот на МедијаВики",
@@ -86,7 +87,7 @@
        "config-db-host-oracle": "TNS на базата:",
        "config-db-host-oracle-help": "Внесете важечко [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm месно име за поврзување]. На оваа воспоставка мора да ѝ биде видлива податотеката tnsnames.ora.<br />Ако користите клиентски библиотеки 10g или понови, тогаш можете да го користите и методот на иметнување на [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm Easy Connect].",
        "config-db-wiki-settings": "Идентификувај го викиво",
-       "config-db-name": "Име на базата:",
+       "config-db-name": "Име на базата (без цртички):",
        "config-db-name-help": "Одберете име што ќе го претставува вашето вики.\nИмето не смее да содржи празни места.\n\nАко користите заедничко (споделено) вдомување, тогаш вашиот вдомител ќе ви даде конкретно име на база за користење, или пак ќе ви даде да создавате бази преку управувачницата.",
        "config-db-name-oracle": "Шема на базата:",
        "config-db-account-oracle-warn": "Постојат три поддржани сценарија за воспоставка на Oracle како базен услужник:\n\nАко сакате да создадете сметка на базата како дел од постапката за воспоставка, наведете сметка со SYSDBA-улога како сметка за базата што ќе се воспостави и наведете ги саканите податоци за сметката за мрежен пристап. Во друг случај, можете да создадете сметка за мрежен пристап рачно и да ја наведете само таа сметка (ако има дозволи за создавање на шематски објекти) или пак да наведете две различни сметки, една со привилегии за создавање, а друга (ограничена) за мрежен пристап.\n\nСкриптата за создавање сметка со задолжителни привилегии ќе ја најдете во папката „maintenance/oracle/“ од оваа воспоставка. Имајте на ум дека ако користите ограничена сметка ќе ги оневозможите сите функции за одржување со основната сметка.",
        "config-db-account-lock": "Користи го истото корисничко име и лозинка за редовна работа",
        "config-db-wiki-account": "Корисничко име за редовна работа",
        "config-db-wiki-help": "Внесете корисничко име и лозинка што ќе се користат за поврзување со базата на податоци во текот на редовната работа со викито.\nАко сметката не постои, а инсталационата сметка има доволно привилегии, тогаш оваа корисничка сметка ќе биде создадена со најмалите привилегии потребни за работа со викито.",
-       "config-db-prefix": "Претставка на табелата на базата:",
+       "config-db-prefix": "Претставка на табелата на базата (без цртички):",
        "config-db-prefix-help": "Ако треба да делите една база на податоци со повеќе викија, или со МедијаВики и друг мрежен програм, тогаш можете да додадете претставка на сите називи на табелите за да спречите проблематични ситуации.\nНе користете празни простори.\n\nОва поле обично се остава празно.",
        "config-mysql-old": "Се бара MySQL $1 или поново, а вие имате $2.",
        "config-db-port": "Порта на базата:",
-       "config-db-schema": "Шема за МедијаВики",
+       "config-db-schema": "Шема за МедијаВики (без цртички):",
        "config-db-schema-help": "Оваа шема обично по правило ќе работи нормално.\nСменете ја само ако знаете дека треба да се смени.",
        "config-pg-test-error": "Не можам да се поврзам со базата <strong>$1</strong>: $2",
        "config-sqlite-dir": "Папка на SQLite-податоци:",
        "config-sqlite-cant-create-db": "Не можев да ја создадам податотеката <code>$1</code> за базата.",
        "config-sqlite-fts3-downgrade": "PHP нема поддршка за FTS3 — ја поништувам надградбата за табелите",
        "config-can-upgrade": "Во оваа база има табели на МедијаВики.\nЗа да ги надградите на МедијаВики $1, стиснете на '''Продолжи'''.",
+       "config-upgrade-error": "Се појави грешка при подновата на табелите во МедијаВики во вашата база.\n\nЗа повеќе информации, погледајте го горенаведениот дневник. За да се обидете повторно, стиснете на <strong>Продолжи</strong>.",
        "config-upgrade-done": "Надградбата заврши.\n\nСега можете да [$1 почнете да го користите вашето вики].\n\nАко сакате да ја пресоздадете вашата податотека <code>LocalSettings.php</code>, тогаш стиснете на копчето подолу.\nОва '''не се препорачува''' освен во случај на проблеми со викито.",
        "config-upgrade-done-no-regenerate": "Надградбата заврши.\n\nСега можете да [$1 почнете да го користите викито].",
        "config-regenerate": "Пресоздај LocalSettings.php →",
index f87e774..a66c55b 100644 (file)
@@ -22,7 +22,8 @@
                        "Rcdeboer",
                        "Festina90",
                        "MarcoSwart",
-                       "Kippenvlees1"
+                       "Kippenvlees1",
+                       "Elroy"
                ]
        },
        "config-desc": "Het installatieprogramma voor MediaWiki",
        "config-db-host-oracle": "Database-TNS:",
        "config-db-host-oracle-help": "Voer een geldige [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm Local Connect Name] in; een tnsnames.ora-bestand moet zichtbaar zijn voor deze installatie.<br />Als u gebruik maakt van clientlibraries 10g of een latere versie, kunt u ook gebruik maken van de naamgevingsmethode [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm Easy Connect].",
        "config-db-wiki-settings": "Identificeer deze wiki",
-       "config-db-name": "Databasenaam:",
+       "config-db-name": "Databasenaam (zonder koppeltekens):",
        "config-db-name-help": "Kies een naam die uw wiki identificeert.\nEr mogen geen spaties gebruikt worden.\nAls u gebruik maakt van gedeelde webhosting, dan hoort uw provider ofwel u een te gebruiken databasenaam gegeven te hebben, of u aangegeven te hebben hoe u databases kunt aanmaken.",
        "config-db-name-oracle": "Databaseschema:",
        "config-db-account-oracle-warn": "Er zijn drie ondersteunde scenario's voor het installeren van Oracle als databasebackend:\n\nAls u een database-account wilt aanmaken als onderdeel van het installatieproces, geef dan de gegevens op van een database-account in met de rol SYSDBA voor de installatie en voer de gewenste aanmeldgegevens in voor het account met webtoegang. U kunt ook het account met webtoegang handmatig aanmaken en alleen van dat account de aanmeldgegevens opgeven als deze de vereiste rechten heeft om schemaobjecten aan te maken. Als laatste is het mogelijk om aanmeldgegevens van twee verschillende accounts op te geven; een met de rechten om schemaobjecten aan te maken, en een met alleen webtoegang.\n\nEen script voor het aanmaken van een account met de vereiste rechten is te vinden in de map \"maintenance/oracle/\" van deze installatie. Onthoud dat het gebruiken van een account met beperkte rechten alle mogelijkheden om beheerscripts uit te voeren met het standaardaccount onmogelijk maakt.",
        "config-db-account-lock": "Dezelfde gebruiker en wachwoord gebruiken na de installatie",
        "config-db-wiki-account": "Gebruikersaccount voor na de installatie",
        "config-db-wiki-help": "Voer de gebruikersnaam en het wachtwoord in die gebruikt worden om verbinding te maken met de database na de installatie.\nAls de gebruiker niet bestaat en de gebruiker die tijdens de installatie gebruikt wordt voldoende rechten heeft, wordt deze gebruiker aangemaakt met de minimaal benodigde rechten voor het laten werken van de wiki.",
-       "config-db-prefix": "Databasetabelvoorvoegsel:",
+       "config-db-prefix": "Databasetabelvoorvoegsel (zonder koppeltekens):",
        "config-db-prefix-help": "Als u een database moet gebruiken voor meerdere wiki's, of voor MediaWiki en een andere toepassing, dan kunt u ervoor kiezen om een voorvoegsel toe te voegen aan de tabelnamen om conflicten te voorkomen.\nGebruik geen spaties.\n\nDit veld wordt meestal leeg gelaten.",
        "config-mysql-old": "U moet MySQL $1 of later gebruiken.\nU gebruikt $2.",
        "config-db-port": "Databasepoort:",
-       "config-db-schema": "Schema voor MediaWiki",
+       "config-db-schema": "Schema voor MediaWiki (zonder koppeltekens):",
        "config-db-schema-help": "Dit schema klopt meestal.\nWijzig het alleen als u weet dat dit nodig is.",
        "config-pg-test-error": "Kan geen verbinding maken met database '''$1''': $2",
        "config-sqlite-dir": "Gegevensmap voor SQLite:",
        "config-sqlite-cant-create-db": "Het was niet mogelijk het databasebestand <code>$1</code> aan te maken.",
        "config-sqlite-fts3-downgrade": "PHP heeft geen ondersteuning voor FTS3.\nDe tabellen worden gedowngrade.",
        "config-can-upgrade": "Er staan al tabellen voor MediaWiki in deze database.\nKlik op '''Doorgaan''' om ze bij te werken naar MediaWiki $1.",
+       "config-upgrade-error": "De MediaWiki-tabellen in je gegevensbank verbeteren is door een fout mislukt.\n\nVoor meer informatie zie bovenstaand logboek. Om het opnieuw te proberen klik je op <strong>Doorgaan</strong>.",
        "config-upgrade-done": "Het bijwerken is afgerond.\n\nUw kunt [$1 uw wiki nu gebruiken].\n\nAls u uw <code>LocalSettings.php</code> opnieuw wilt aanmaken, klik dan op de knop hieronder.\nDit is '''niet aan te raden''' tenzij u problemen hebt met uw wiki.",
        "config-upgrade-done-no-regenerate": "Het bijwerken is afgerond.\n\nU kunt nu [$1 uw wiki gebruiken].",
        "config-regenerate": "LocalSettings.php opnieuw aanmaken →",
        "config-help": "hulp",
        "config-help-tooltip": "klik om uit te vouwen",
        "config-nofile": "Het bestand \"$1\" is niet gevonden. Is het verwijderd?",
-       "config-extension-link": "Weet u dat u [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions uitbreidingen] kunt gebruiken voor uw wiki?\n\nU kunt [https://www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category uitbreidingen op categorie] bekijken of ga naar de [https://www.mediawiki.org/wiki/Extension_Matrix uitbreidingenmatrix] om de volledige lijst met uitbreidingen te bekijken.",
+       "config-extension-link": "Weet u dat u [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions uitbreidingen] kunt gebruiken voor uw wiki?\n\nU kunt [https://www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category uitbreidingen op categorie] bekijken.",
        "config-skins-screenshots": "$1 (schermafbeeldingen: $2)",
        "config-extensions-requires": "$1 (vereist $2)",
        "config-screenshot": "schermafbeelding",
        "config-extension-not-found": "Kan het registratiebestand voor de uitbreiding \"$1\" niet vinden",
+       "config-extension-dependency": "Afhankelijkheidsfout opgetreden tijdens de installatie van de uitbreiding $1: $2",
        "mainpagetext": "<strong>De installatie van MediaWiki is geslaagd.</strong>",
        "mainpagedocfooter": "Raadpleeg de [https://meta.wikimedia.org/wiki/Special:MyLanguage/Help:Contents handleiding] voor informatie over het gebruik van de wikisoftware.\n\n== Meer hulp over MediaWiki ==\n\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Lijst met instellingen]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ Veelgestelde vragen (FAQ)]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Mailinglijst voor aankondigingen van nieuwe versies]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Maak MediaWiki beschikbaar in uw taal]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Leer hoe u spam kunt voorkomen op uw wiki]"
 }
index dc104a9..3177ee1 100644 (file)
        "config-db-prefix-help": "Jeśli zachodzi potrzeba współdzielenia jednej bazy danych między wieloma wiki, lub między MediaWiki i inną aplikacją sieciową, można dodać przedrostek do wszystkich nazw tabel w celu uniknięcia konfliktów.\nNie należy używać spacji.\n\nTo pole zwykle pozostawiane jest puste.",
        "config-mysql-old": "Wymagany jest MySQL $1 lub nowszy; korzystasz z $2.",
        "config-db-port": "Port bazy danych:",
-       "config-db-schema": "Nazwa schematu bazy danych, z którego ma korzystać MediaWiki:",
+       "config-db-schema": "Schemat bazy danych MediaWiki (nie może zawierać kresek):",
        "config-db-schema-help": "Zaproponowana nazwa schematu jest odpowiednia dla większości sytuacji i przeważnie nie trzeba jej zmieniać.",
        "config-pg-test-error": "Nie można połączyć się z bazą danych''' $1 ''': $2",
        "config-sqlite-dir": "Katalog danych SQLite:",
        "config-sqlite-cant-create-db": "Nie można utworzyć pliku bazy danych <code>$1</code>.",
        "config-sqlite-fts3-downgrade": "Brak wsparcia FTS3 dla PHP. Tabele zostały cofnięte",
        "config-can-upgrade": "W bazie danych są już tabele MediaWiki.\nAby uaktualnić je do MediaWiki $1, kliknij <strong>Dalej</strong>.",
+       "config-upgrade-error": "Podczas aktualizowania tabel bazy danych twojej instalacji MediaWiki wystąpił błąd.\n\nAby uzyskać więcej informacji zobacz wpis rejestru poniżej, lub kliknij <strong>Kontynuuj</strong> aby spróbować ponownie.",
        "config-upgrade-done": "Uaktualnienie kompletne.\n\nMożna teraz [$1 rozpocząć korzystanie z wiki].\n\nJeśli chcesz ponownie wygenerować plik <code>LocalSettings.php</code>, kliknij przycisk poniżej.\nJest to <strong>niezalecane</strong>, chyba że występują problemy z twoją wiki.",
        "config-upgrade-done-no-regenerate": "Aktualizacja zakończona.\n\nMożesz teraz [$1 zacząć korzystać ze swojej wiki].",
        "config-regenerate": "Ponowne generowanie LocalSettings.php →",
index 9d6fe7c..dd016ae 100644 (file)
        "config-db-host-oracle": "TNS do banco de dados:",
        "config-db-host-oracle-help": "Digite um [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm Nome de Conexão local] válido; o arquivo tnsnames.ora precisa estar visível para esta instalação.<br />Se você estiver usando bibliotecas cliente 10g ou mais recente, você também pode usar o método [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm Easy Connect].",
        "config-db-wiki-settings": "Identifique esta wiki",
-       "config-db-name": "Nome do banco de dados:",
+       "config-db-name": "Nome da base de dados (sem hífen):",
        "config-db-name-help": "Escolha um nome que identifique a sua wiki.\nEle não deve conter espaços.\n\nSe você está utilizando uma hospedagem web compartilhada, o provedor de hospedagem lhe dará um nome especifico de banco de dados para usar ou o deixará criar a partir do painel de controle.",
        "config-db-name-oracle": "Esquema do banco de dados:",
        "config-db-account-oracle-warn": "Há três cenários suportados para instalar o Oracle como backend do banco de dados:\n\nSe você deseja criar a conta do banco de dados como parte do processo de instalação, forneça uma conta com função SYSDBA como conta do banco de dados para instalação e especifique as credenciais desejadas para a conta de acesso pela web, caso contrário, você poderá criar a conta de acesso via web manualmente e fornecer apenas aquela conta (se tiver permissões necessárias para criar os objetos schema) ou fornecer duas contas diferentes, uma com privilégios de criação e uma restrita para acesso à web.\n\nO script para criar uma conta com os privilégios necessários pode ser encontrado no diretório \"maintenance/oracle/\" desta instalação. Lembre-se de que usar uma conta restrita desativará todos os recursos de manutenção com a conta padrão.",
        "config-db-account-lock": "Use o mesmo nome de usuário e senha durante a operação normal",
        "config-db-wiki-account": "Conta de usuário para operação normal",
        "config-db-wiki-help": "Digite o nome de usuário e senha que será usada para se conectar ao banco de dados durante a operação normal wiki.\nSe a conta não existir e a conta de instalação tiver privilégios suficientes, a conta do usuário será criada com os privilégios mínimos necessários para o funcionamento da wiki.",
-       "config-db-prefix": "Prefixo da tabela do banco de dados:",
+       "config-db-prefix": "Prefixo da tabela do banco de dados (sem hífens)::",
        "config-db-prefix-help": "Se você precisar compartilhar a banco de dados entre várias wikis, ou entre o MediaWiki e uma outra aplicação web, você pode adicionar um prefixo ao nome de todas as tabelas para evitar conflitos.\nNão utilize espaços.\n\nEste campo é habitualmente deixado em branco.",
        "config-mysql-old": "MySQL $1 ou posterior é necessário. Você tem $2.",
        "config-db-port": "Porta do banco de dados:",
-       "config-db-schema": "Esquema para MediaWiki:",
+       "config-db-schema": "Esquema ''(schema)'' do MediaWiki (sem hífen):",
        "config-db-schema-help": "Este esquema geralmente estará correto.\nSó o modifique se você tiver certeza que precisa.",
        "config-pg-test-error": "Não foi possível se conectar com o banco de dados <strong>$1</strong>: $2",
        "config-sqlite-dir": "Diretório de dados do SQLite:",
        "config-sqlite-cant-create-db": "Não foi possível criar o arquivo do banco de dados <code>$1</code>.",
        "config-sqlite-fts3-downgrade": "O PHP não tem suporte FTS3; revertendo tabelas.",
        "config-can-upgrade": "Este banco de dados contém tabelas do MediaWiki.\nPara atualizá-las para o MediaWiki $1, clique em <strong>Continuar</strong>.",
+       "config-upgrade-error": "Houve um erro ao atualizar as tabelas do MediaWiki em seu banco de dados.\n\nPara mais informações, consulte o log acima, para tentar novamente clique <strong>Continuar</strong>.",
        "config-upgrade-done": "Atualização completa.\n\nAgora você pode [$1 começar a usar sua wiki].\n\nSe você quiser regenerar seu arquivo <code>LocalSettings.php</code>, clique no botão abaixo.\n<strong>Não recomendado </strong> a menos que você esteja tendo problemas com sua wiki.",
        "config-upgrade-done-no-regenerate": "Atualização completa.\n\nAgora pode [$1 começar a usar a sua wiki].",
        "config-regenerate": "Regenerar arquivo LocalSettings.php →",
index 566f9a2..8011cd7 100644 (file)
        "config-db-account-lock": "Usar o mesmo nome de utilizador e palavra-passe durante a operação normal",
        "config-db-wiki-account": "Conta de utilizador para a operação normal",
        "config-db-wiki-help": "Introduza o nome de utilizador e a palavra-passe que serão usados para aceder à base de dados durante a operação normal da wiki.\nSe o utilizador não existir na base de dados, mas a conta de instalação tiver privilégios suficientes, o utilizador que introduzir será criado na base de dados com os privilégios mínimos necessários para a operação normal da wiki.",
-       "config-db-prefix": "Prefixo para as tabelas da base de dados:",
+       "config-db-prefix": "Prefixo para as tabelas da base de dados (sem hífenes):",
        "config-db-prefix-help": "Se necessitar de partilhar uma só base de dados entre várias wikis, ou entre o MediaWiki e outra aplicação, pode escolher adicionar um prefixo ao nome de todas as tabelas desta instalação, para evitar conflitos.\nNão use espaços.\n\nNormalmente, este campo deve ficar vazio.",
        "config-mysql-old": "É necessário o MySQL $1 ou posterior; tem a versão $2.",
        "config-db-port": "Porta da base de dados:",
        "config-sqlite-cant-create-db": "Não foi possível criar o ficheiro da base de dados <code>$1</code>.",
        "config-sqlite-fts3-downgrade": "O PHP não tem suporte FTS3; a reverter o esquema das tabelas para o anterior",
        "config-can-upgrade": "Esta base de dados contém tabelas do MediaWiki.\nPara atualizá-las para o MediaWiki $1, clique '''Continuar'''.",
+       "config-upgrade-error": "Ocorreu um erro ao atualizar as tabelas do MediaWiki na sua base de dados.\n\nPara mais informações consulte o registo acima, para tentar novamente clique <strong>Continuar</strong>.",
        "config-upgrade-done": "Atualização terminada.\n\nAgora pode [$1 começar a usar a sua wiki].\n\nSe quiser regenerar o seu ficheiro <code>LocalSettings.php</code>, clique o botão abaixo.\nEsta operação '''não é recomendada''' a menos que esteja a ter problemas com a sua wiki.",
        "config-upgrade-done-no-regenerate": "Atualização terminada.\n\nAgora pode [$1 começar a usar a sua wiki].",
        "config-regenerate": "Regenerar o LocalSettings.php →",
index 39dbbca..4ffe16d 100644 (file)
@@ -21,7 +21,8 @@
                        "Liuxinyu970226",
                        "Metalhead64",
                        "Tacsipacsi",
-                       "Zoranzoki21"
+                       "Zoranzoki21",
+                       "BadDog"
                ]
        },
        "config-desc": "Short description of the installer.",
        "config-sqlite-cant-create-db": "Used as SQLite error message. Parameters:\n* $1 - filename",
        "config-sqlite-fts3-downgrade": "Status message in the MediaWiki installer when SQLite is used without the FTS3 module. The FTS3 feature allows users to create special tables with a built-in full-text index.",
        "config-can-upgrade": "Parameters:\n* $1 - Version or Revision indicator.",
+       "config-upgrade-error": "Used as error message.",
        "config-upgrade-done": "Used as success message. Parameters:\n* $1 - full URL of index.php\nSee also:\n* {{msg-mw|config-upgrade-done-no-regenerate}}",
        "config-upgrade-done-no-regenerate": "Used as success message. Parameters:\n* $1 - full URL of index.php\nSee also:\n* {{msg-mw|config-upgrade-done}}",
        "config-regenerate": "This message appears in a button after LocalSettings.php is generated and downloaded at the end of the MediaWiki installation process.",
        "config-extensions-requires": "Radio button text, $1 is the extension name, and $2 are links to other extensions that this one requires.\n{{Identical|Require}}",
        "config-screenshot": "Link text for the link in {{msg-mw|config-skins-screenshot}}\n{{Identical|Screenshot}}",
        "config-extension-not-found": "An error shown when an extension or skin named by the user could not be found.\n* $1 is the extension name",
-       "config-extension-dependency": "An error shown if an extension could not be loaded due to it depending on the wrong version of MediaWiki or an uninstallable extension.\n* $1 is the extension name\n* $2 is a more detailed explanation, in English",
+       "config-extension-dependency": "Used as error message shown if an extension could not be loaded due to it depending on the wrong version of MediaWiki or an uninstallable extension.\n\nParameters:\n* $1 — extension name\n* $2 — more detailed explanation, in English",
        "mainpagetext": "Along with {{msg-mw|mainpagedocfooter}}, the text you will see on the Main Page when your wiki is installed.",
        "mainpagedocfooter": "Along with {{msg-mw|mainpagetext}}, the text you will see on the Main Page when your wiki is installed.\nThis might be a good place to put information about <nowiki>{{GRAMMAR:}}</nowiki>. See [[{{NAMESPACE}}:{{BASEPAGENAME}}/fi]] for an example. For languages having grammatical distinctions and not having an appropriate <nowiki>{{GRAMMAR:}}</nowiki> software available, a suggestion to check and possibly amend the messages having <nowiki>{{SITENAME}}</nowiki> may be valuable. See [[{{NAMESPACE}}:{{BASEPAGENAME}}/ksh]] for an example."
 }
index 0a59f10..293ff0c 100644 (file)
@@ -39,7 +39,7 @@
        "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-db-schema": "Scheme pe MediaUicchi (none trattine):",
        "config-type-mysql": "MariaDFB, MySQL, o combatibbile",
        "config-type-postgres": "PostgreSQL",
        "config-type-sqlite": "SQLite",
index 66f555a..6a3304e 100644 (file)
        "config-db-host-oracle": "TNS базы данных:",
        "config-db-host-oracle-help": "Введите действительный [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm Local Connect Name]; файл tnsnames.ora должен быть видимым для этой инсталляции. <br />При использовании клиентских библиотек версии 10g и старше также возможно использовать метод именования [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm Easy Connect].",
        "config-db-wiki-settings": "Идентификация этой вики",
-       "config-db-name": "Имя базы данных:",
+       "config-db-name": "Имя базы данных (без дефисов):",
        "config-db-name-help": "Выберите название-идентификатор для вашей вики.\nОно не должно содержать пробелов.\n\nЕсли вы используете виртуальный хостинг, провайдер или выдаст вам конкретное имя базы данных, или позволит создавать базы данных с помощью панели управления.",
        "config-db-name-oracle": "Схема базы данных:",
        "config-db-account-oracle-warn": "Поддерживаются три сценария установки Oracle в качестве базы данных:\n\nЕсли вы хотите создать учётную запись базы данных в процессе установки, пожалуйста, укажите учётную запись роли SYSDBA для установки и укажите желаемые полномочия учётной записи с веб-доступом. вы также можете учётную запись с веб-доступом вручную и указать только её (если у неё есть необходимые разрешения на создание объектов схемы) или указать две учётные записи, одну с правами создания объектов, а другую с ограничениями для веб-доступа.\n\nСценарий для создания учётной записи с необходимыми привилегиями можно найти в папке «maintenance/oracle/» этой программы установки. Имейте в виду, что использование ограниченной учётной записи приведёт к отключению всех возможностей обслуживания с учётной записи по умолчанию.",
        "config-db-account-lock": "Использовать то же имя пользователя и пароль для обычной работы",
        "config-db-wiki-account": "Учётная запись для обычной работы",
        "config-db-wiki-help": "Введите имя пользователя и пароль, которые будут использоваться для подключения к базе данных во время обычной работы вики.\nЕсли такой учётной записи не существует, а установочная учётная запись имеет достаточно привилегий, то обычная учётная запись будет создана с минимально необходимыми для работы вики привилегиями.",
-       "config-db-prefix": "Префикс таблиц базы данных:",
+       "config-db-prefix": "Префикс таблиц базы данных (без дефисов):",
        "config-db-prefix-help": "Если вам нужно делить одну базу данных между несколькими вики, или между MediaWiki и другими веб-приложениями, вы можете добавить префикс для всех имён таблиц.\nНе используйте пробелы.\n\nЭто поле обычно остаётся пустым.",
        "config-mysql-old": "Необходим MySQL $1 или более поздняя версия. У вас установлен MySQL $2.",
        "config-db-port": "Порт базы данных:",
-       "config-db-schema": "Схема для MediaWiki",
+       "config-db-schema": "Схема для MediaWiki (без дефисов):",
        "config-db-schema-help": "Эта схема обычно работает хорошо.\nИзменяйте её только если знаете, что Вам это нужно.",
        "config-pg-test-error": "Не удаётся подключиться к базе данных <strong>$1</strong>: $2",
        "config-sqlite-dir": "Директория данных SQLite:",
        "config-sqlite-cant-create-db": "Не удаётся создать файл базы данных <code>$1</code> .",
        "config-sqlite-fts3-downgrade": "У PHP отсутствует поддержка FTS3 — сбрасываем таблицы",
        "config-can-upgrade": "В базе данных найдены таблицы MediaWiki.\nЧтобы обновить их до MediaWiki $1, нажмите на кнопку '''«Продолжить»'''.",
+       "config-upgrade-error": "Произошла ошибка при обновлении таблиц MediaWiki в вашей базе.\n\nДля дополнительной информации, посмотрите на вышеуказанный журнал. Чтобы повторить, нажмите <strong>Продолжить</strong>.",
        "config-upgrade-done": "Обновление завершено.\n\nТеперь вы можете [$1 начать использовать вики].\n\nЕсли вы хотите повторно создать файл <code>LocalSettings.php</code>, нажмите на кнопку ниже.\nЭто действие '''не рекомендуется''', если у вас не возникло проблем при установке.",
        "config-upgrade-done-no-regenerate": "Обновление завершено.\n\nТеперь вы можете [$1 начать работу с вики].",
        "config-regenerate": "Создать LocalSettings.php заново →",
index ce43339..7604cc8 100644 (file)
@@ -61,7 +61,7 @@
        "config-db-host": "Gostitelj zbirke podatkov:",
        "config-db-host-oracle": "TNS zbirke podatkov:",
        "config-db-wiki-settings": "Prepoznaj ta wiki:",
-       "config-db-name": "Ime zbirke podatkov:",
+       "config-db-name": "Ime zbirke podatkov (brez vezajev):",
        "config-db-name-oracle": "Shema zbirke podatkov:",
        "config-db-install-account": "Uporabniški račun za namestitev",
        "config-db-username": "Uporabniško ime zbirke podatkov:",
        "config-db-install-password": "Vnesite geslo za povezavo s podatkovno zbirko med postopkom nameščanja.\nTo ni geslo računa MediaWiki, pač pa geslo za vašo podatkovno zbirko.",
        "config-db-install-help": "Vnesite uporabniško ime in geslo za povezavo s podatkovno zbirko med postopkom nameščanja.",
        "config-db-account-lock": "Uporabite isto uporabniško ime in geslo tudi po namestitvi.",
-       "config-db-prefix": "Predpona tabel zbirke podatkov:",
+       "config-db-prefix": "Predpona tabel zbirke podatkov (brez vezajev):",
        "config-mysql-old": "Potreben je MySQL $1 ali novejši; vi imate $2.",
        "config-db-port": "Vrata zbirke podatkov:",
-       "config-db-schema": "Shema MediaWiki",
+       "config-db-schema": "Shema MediaWiki (brez vezajev)",
        "config-db-schema-help": "Ta shema je po navadi v redu.\nSpremenite jo samo, če veste, da jo morate.",
        "config-pg-test-error": "Ne morem se povezati z zbirko podatkov <strong>$1</strong>: $2",
        "config-sqlite-dir": "Mapa podatkov SQLite:",
index b2f4180..18c4103 100644 (file)
                        "Prevodim"
                ]
        },
-       "config-desc": "Инсталациони програм за Медијавики",
-       "config-title": "Инсталација Медијавикија $1",
+       "config-desc": "Инсталациони програм за MediaWiki",
+       "config-title": "MediaWiki $1 инсталација",
        "config-information": "Информације",
-       "config-localsettings-upgrade": "Ð\9eÑ\82кÑ\80ивена Ñ\98е Ð´Ð°Ñ\82оÑ\82ека <code>LocalSettings.php</code>.\nÐ\9aако бисте надоградили ову инсталацију, унесите вредност <code>$wgUpgradeKey</code> у оквиру испод.\nНаћи ћете је у <code>LocalSettings.php</code>-у.",
-       "config-localsettings-cli-upgrade": "Ð\9eÑ\82кÑ\80ивена Ñ\98е Ð´Ð°Ñ\82оÑ\82ека <code>LocalSettings.php</code>.\nÐ\9aако бисте надоградили ову инсталацију, покрените <code>update.php</code>",
+       "config-localsettings-upgrade": "Ð\9eÑ\82кÑ\80ивена Ñ\98е Ð´Ð°Ñ\82оÑ\82ека <code>LocalSettings.php</code>.\nÐ\94а бисте надоградили ову инсталацију, унесите вредност <code>$wgUpgradeKey</code> у оквиру испод.\nНаћи ћете је у <code>LocalSettings.php</code>-у.",
+       "config-localsettings-cli-upgrade": "Ð\9eÑ\82кÑ\80ивена Ñ\98е Ð´Ð°Ñ\82оÑ\82ека <code>LocalSettings.php</code>.\nÐ\94а бисте надоградили ову инсталацију, покрените <code>update.php</code>",
        "config-localsettings-key": "Кључ за надоградњу:",
        "config-localsettings-badkey": "Кључ за надоградњу који сте навели је погрешан.",
-       "config-upgrade-key-missing": "Откривена је постојећа инсталација Медијавикија.\nКако бисте надоградили ову инсталацију, ставите следећи ред кода на дно ваше датотеке <code>LocalSettings.php</code>.\n\n$1",
-       "config-localsettings-incomplete": "Постојећи <code>LocalSettings.php</code> изгледа некомплетно.\nПроменљива $1 није постављена.\nПромените <code>LocalSettings.php</code> тако што ћете поставити променљиву, па кликните на „{{int:Config-continue}}”.",
+       "config-upgrade-key-missing": "Откривена је постојећа MediaWiki инсталација.\nДа бисте надоградили ову инсталацију, поставите следећи ред кода на дно датотеке <code>LocalSettings.php</code>.\n\n$1",
+       "config-localsettings-incomplete": "Постојећа датотека <code>LocalSettings.php</code> изгледа непотпуно.\nПроменљива $1 није постављена.\nПромените је тако што ћете поставити променљиву, па кликнути на „{{int:Config-continue}}”.",
+       "config-localsettings-connection-error": "Дошло је до грешке при повезивању са базом података коришћењем подешавања наведених у датотеци <code>LocalSettings.php</code>. Поправите ова подешавања, па покушајте поново.\n\n$1",
        "config-session-error": "Грешка при започињању сесије: $1",
-       "config-session-expired": "Ð\92аÑ\88и Ð¿Ð¾Ð´Ð°Ñ\86и Ð¾ Ñ\81еÑ\81иÑ\98и Ñ\81Ñ\83 Ð¸Ñ\81Ñ\82екли.\nСеÑ\81иÑ\98е Ñ\81Ñ\83 Ð¿Ð¾Ð´ÐµÑ\88ене Ð´Ð° Ñ\82Ñ\80аÑ\98Ñ\83 $1.\nÐ\8aиÑ\85ов Ñ\80ок Ð¼Ð¾Ð¶ÐµÑ\82е Ð¿Ð¾Ð²ÐµÑ\9bаÑ\82и Ð¿Ð¾Ñ\81Ñ\82авÑ\99аÑ\9aем <code>session.gc_maxlifetime</code> Ñ\83 php.ini.\nÐ\9fоново Ð¿Ð¾ÐºÑ\80ениÑ\82е Ð¸Ð½Ñ\81Ñ\82алаÑ\86иÑ\98Ñ\83.",
-       "config-no-session": "Ð\92аÑ\88и Ð¿Ð¾Ð´Ð°Ñ\86и Ð¾ Ñ\81еÑ\81иÑ\98и Ñ\81Ñ\83 Ð¸Ð·Ð³Ñ\83бÑ\99ени!\nÐ\9fÑ\80овеÑ\80иÑ\82е Ð\92аÑ\88 php.ini Ð¸ Ð¾Ð±ÐµÐ·Ð±ÐµÐ´Ð¸Ñ\82е Ð´Ð° Ñ\98е <code>session.save_path</code> постављен на одговарајући директоријум.",
+       "config-session-expired": "Ð\98згледа Ð´Ð° Ñ\81Ñ\83 Ð²Ð°Ñ\88и Ð¿Ð¾Ð´Ð°Ñ\86и Ð¾ Ñ\81еÑ\81иÑ\98и Ð¸Ñ\81Ñ\82екли.\nСеÑ\81иÑ\98е Ñ\81Ñ\83 ÐºÐ¾Ð½Ñ\84игÑ\83Ñ\80иÑ\81ане Ñ\83 Ñ\82Ñ\80аÑ\98аÑ\9aÑ\83 Ð¾Ð´ $1.\nÐ\9cожеÑ\82е Ð´Ð° Ð¿Ð¾Ð²ÐµÑ\9bаÑ\82е Ñ\9aиÑ\85ово Ñ\82Ñ\80аÑ\98аÑ\9aе Ð¿Ð¾Ñ\81Ñ\82авÑ\99аÑ\9aем Ð¿Ð°Ñ\80амеÑ\82Ñ\80а <code>session.gc_maxlifetime</code> Ñ\83 Ð´Ð°Ñ\82оÑ\82еÑ\86и php.ini.\nÐ\9fоново Ð¿Ð¾ÐºÑ\80ениÑ\82е Ð¿Ñ\80оÑ\86еÑ\81 Ð¸Ð½Ñ\81Ñ\82алаÑ\86иÑ\98е.",
+       "config-no-session": "Ð\92аÑ\88и Ð¿Ð¾Ð´Ð°Ñ\86и Ð¾ Ñ\81еÑ\81иÑ\98и Ñ\81Ñ\83 Ð¸Ð·Ð³Ñ\83бÑ\99ени!\nÐ\9fÑ\80овеÑ\80иÑ\82е Ð´Ð°Ñ\82оÑ\82екÑ\83 php.ini Ð¸ Ñ\83веÑ\80иÑ\82е Ñ\81е Ð´Ð° Ñ\98е Ð¿Ð°Ñ\80амеÑ\82аÑ\80 <code>session.save_path</code> постављен на одговарајући директоријум.",
        "config-your-language": "Ваш језик:",
-       "config-your-language-help": "Изаберите језик који желите да користите током инсталације.",
-       "config-wiki-language": "Језик викија:",
-       "config-wiki-language-help": "Изаберите језик на ком ће бити садржај викија.",
+       "config-your-language-help": "Ð\98забеÑ\80иÑ\82е Ñ\98език ÐºÐ¾Ñ\98и Ð¶ÐµÐ»Ð¸Ñ\82е Ð´Ð° ÐºÐ¾Ñ\80иÑ\81Ñ\82иÑ\82е Ñ\82оком Ð¿Ñ\80оÑ\86еÑ\81а Ð¸Ð½Ñ\81Ñ\82алаÑ\86иÑ\98е.",
+       "config-wiki-language": "Wiki језик:",
+       "config-wiki-language-help": "Изаберите језик на ком ће wiki бити претежно написан.",
        "config-back": "← Назад",
        "config-continue": "Настави →",
        "config-page-language": "Језик",
-       "config-page-welcome": "Добро дошли на Медијавики!",
+       "config-page-welcome": "Добро дошли на MediaWiki!",
        "config-page-dbconnect": "Повезивање са базом података",
        "config-page-upgrade": "Надоградња постојеће инсталације",
        "config-page-dbsettings": "Подешавања базе података",
        "config-page-releasenotes": "Напомене о издању",
        "config-page-copying": "Копирање",
        "config-page-upgradedoc": "Надоградња",
-       "config-page-existingwiki": "Постојећи вики",
-       "config-help-restart": "Ð\96елиÑ\82е Ð»Ð¸ Ð´Ð° Ð¾Ð±Ñ\80иÑ\88еÑ\82е Ñ\81ве Ñ\81аÑ\87Ñ\83ване Ð¿Ð¾Ð´Ð°Ñ\82ке ÐºÐ¾Ñ\98е Ñ\81Ñ\82е Ñ\83нели Ð¸ Ð¿Ð¾Ð½Ð¾Ð²Ð¾ Ð¿Ð¾ÐºÑ\80енеÑ\82е Ð¸Ð½Ñ\81Ñ\82алаÑ\86иÑ\98Ñ\83?",
+       "config-page-existingwiki": "Постојећи wiki",
+       "config-help-restart": "Ð\96елиÑ\82е Ð»Ð¸ Ð´Ð° Ð¾Ð±Ñ\80иÑ\88еÑ\82е Ñ\81ве Ñ\81аÑ\87Ñ\83ване Ð¿Ð¾Ð´Ð°Ñ\82ке ÐºÐ¾Ñ\98е Ñ\81Ñ\82е Ñ\83нели Ð¸ Ð¿Ð¾Ð½Ð¾Ð²Ð¾ Ð¿Ð¾ÐºÑ\80енеÑ\82е Ð¿Ñ\80оÑ\86еÑ\81 Ð¸Ð½Ñ\81Ñ\82алаÑ\86иÑ\98е?",
        "config-restart": "Да, покрени поново",
-       "config-welcome": "=== Провера окружења ===\nСада ће се извршити основна провера како би се утврдило да ли је ово окружење погодно за инсталацију Медијавикија.\nНе заборавите да укључите ове информације ако тражите подршку како завршити инсталацију.",
-       "config-sidebar": "* [https://www.mediawiki.org Почетна страна Медијавикија]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents Водич за кориснике]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Contents Водич за администраторе]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ ЧПП]\n----\n* <doclink href=Readme>Прочитај ме</doclink>\n* <doclink href=ReleaseNotes>Напомене о издању</doclink>\n* <doclink href=Copying>Копирање</doclink>\n* <doclink href=UpgradeDoc>Надоградња</doclink>",
-       "config-env-good": "Ð\9eкÑ\80Ñ\83жеÑ\9aе Ñ\98е Ð¿Ñ\80овеÑ\80ено.\nÐ\9cожеÑ\82е Ð¸Ð½Ñ\81Ñ\82алиÑ\80аÑ\82и Ð\9cедиÑ\98авики.",
-       "config-env-bad": "Ð\9eкÑ\80Ñ\83жеÑ\9aе Ñ\98е Ð¿Ñ\80овеÑ\80ено.\nÐ\9dе Ð¼Ð¾Ð¶ÐµÑ\82е Ð¸Ð½Ñ\81Ñ\82алиÑ\80аÑ\82и Ð\9cедиÑ\98авики.",
+       "config-welcome": "=== Провера окружења ===\nСада ће се извршити основна провера како би се утврдило да ли је ово окружење погодно за MediaWiki инсталацију.\nНе заборавите да укључите ове информације ако тражите подршку како завршити инсталацију.",
+       "config-sidebar": "* [https://www.mediawiki.org MediaWiki почетна]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents Водич за кориснике]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Contents Водич за администраторе]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ ЧПП]\n----\n* <doclink href=Readme>Прочитај ме</doclink>\n* <doclink href=ReleaseNotes>Напомене о издању</doclink>\n* <doclink href=Copying>Копирање</doclink>\n* <doclink href=UpgradeDoc>Надоградња</doclink>",
+       "config-env-good": "Ð\9eкÑ\80Ñ\83жеÑ\9aе Ñ\98е Ð¿Ñ\80овеÑ\80ено.\nÐ\9cожеÑ\82е Ð´Ð° Ð¸Ð½Ñ\81Ñ\82алиÑ\80аÑ\82е MediaWiki.",
+       "config-env-bad": "Ð\9eкÑ\80Ñ\83жеÑ\9aе Ñ\98е Ð¿Ñ\80овеÑ\80ено.\nÐ\9dе Ð¼Ð¾Ð¶ÐµÑ\82е Ð´Ð° Ð¸Ð½Ñ\81Ñ\82алиÑ\80аÑ\82е MediaWiki.",
        "config-env-php": "PHP $1 је инсталиран.",
        "config-env-hhvm": "HHVM $1 је инсталиран.",
+       "config-unicode-using-intl": "Користи се [https://pecl.php.net/intl додатак intl PECL] за нормализацију Уникода.",
+       "config-outdated-sqlite": "<strong>Упозорење:</strong> имате SQLite $1, који је нижи од најмање тражене верзије ($2). SQLite ће бити недоступан.",
+       "config-no-fts3": "<strong>Упозорење:</strong> SQLite је компајлиран без [//sqlite.org/fts3.html FTS3 модула], функције претраге биће недоступне на овој бази података.",
+       "config-pcre-old": "<strong>Неотклоњива грешка:</strong> Неопходан је PCRE $1 или новији.\nВаш бинарни PHP је повезан са PCRE $2.\n[https://www.mediawiki.org/wiki/Manual:Errors_and_symptoms/PCRE Више информација].",
+       "config-pcre-no-utf8": "<strong>Неотклоњива грешка:</strong> Изгледа да је PCRE модул PHP-а  компајлиран без PCRE_UTF8 подршке.\nMediaWiki захтева UTF-8 подршку за исправно функционисање.",
+       "config-memory-raised": "Вредност параметра <code>memory_limit</code> PHP-а износи $1, подигнута на $2.",
+       "config-memory-bad": "<strong>Упозорење:</strong> Вредност параметра <code>memory_limit</code> PHP-а износи $1.\nОво је вероватно прениско.\nИнсталација можда неће успети!",
        "config-apc": "[https://secure.php.net/apc APC] је инсталиран",
+       "config-apcu": "[https://secure.php.net/apcu APCu] је инсталиран",
        "config-wincache": "[https://www.iis.net/downloads/microsoft/wincache-extension WinCache] је инсталиран",
        "config-no-cache-apcu": "<strong>Упозорење:</strong> Није могуће пронаћи [https://secure.php.net/apcu APCu] или [https://www.iis.net/downloads/microsoft/wincache-extension WinCache].\nКеширање објеката није омогућено.",
        "config-diff3-bad": "GNU diff3 није пронађен.",
        "config-git": "Пронађен је Git софтвер за контролу верзија: <code>$1</code>",
        "config-git-bad": "Није пронађен Git софтвер за контролу верзија.",
-       "config-no-scaling": "Није могуће пронаћи GD библиотеку или ImageMagick.\nУмањивање слика ће бити онемогућено.",
+       "config-imagemagick": "Пронађен ImageMagick: <code>$1</code>.\nУмањивање слика ће се омогућити ако омогућите отпремање.",
+       "config-gd": "Пронађена је GD уграђена графичка библиотека.\nУмањивање слика ће се омогућити ако омогућите отпремање.",
+       "config-no-scaling": "Није могуће пронаћи GD библиотеку или ImageMagick.\nУмањивање слика ће се онемогућити.",
+       "config-no-uri": "<strong>Грешка:</strong> Није могуће утврдити тренутни URI.\nИнсталација је обустављена.",
+       "config-no-cli-uri": "<strong>Упозорење:</strong> Параметар <code>--scriptpath</code> није наведен, коришћење подразумеваног: <code>$1</code>.",
+       "config-using-server": "Коришћење имена сервера „<nowiki>$1</nowiki>”.",
+       "config-using-uri": "Коришћење URL адресе сервера „<nowiki>$1$2</nowiki>”.",
+       "config-uploads-not-safe": "<strong>Упозорење:</strong> Ваш подразумевани директоријум за отпремања <code>$1</code> је подложан извршењу произвољних скрипти.\nИако MediaWiki проверава све отпремљене датотеке за безбедоносне претње, препоручује се [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Security#Upload_security да затворите ову безбедоносну рањивост] пре омогућавања отпремања.",
+       "config-no-cli-uploads-check": "<strong>Упозорење:</strong> Ваш подразумевани директоријум за отпремање (<code>$1</code>) није проверен на рањивост\nна произвољно извршавање скрипте током CLI инсталације.",
+       "config-using-32bit": "<strong>Упозорење:</strong> изгледа да ваш систем ради са 32-битним целим бројевима. Ово се не [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:32-bit препоручује].",
        "config-db-type": "Тип базе података:",
        "config-db-host": "Хост базе података",
-       "config-db-wiki-settings": "Идентификуј овај вики",
-       "config-db-name": "Име базе података:",
+       "config-db-host-oracle": "TNS базе података:",
+       "config-db-wiki-settings": "Идентификуј овај wiki",
+       "config-db-name": "Име базе података (без цртица):",
+       "config-db-name-help": "Одаберите име које идентификује ваш wiki.\nОно не треба да садржи размаке.\n\nАко користите дељени веб-хостинг, ваш добављач услуге хостинга ће вам дати одређено име базе података за коришћење или ће вас пустити да правите базе података путем контролне табле.",
        "config-db-name-oracle": "Шема базе података:",
        "config-db-install-account": "Кориснички налог за инсталацију",
        "config-db-username": "Корисничко име базе података:",
        "config-db-password": "Лозинка базе података:",
-       "config-db-prefix": "Префикс табеле у бази података:",
+       "config-db-install-username": "Унесите корисничко име које ће се користити за повезивање са базом података током процеса инсталације.\nОво није корисничко име MediaWiki налога; ово је корисничко име за базу података.",
+       "config-db-install-help": "Унесите корисничко име и лозинку која ће се користити за повезивање са базом података током процеса инсталације.",
+       "config-db-account-lock": "Користи исто корисничко име и лозинку током нормалног рада",
+       "config-db-wiki-account": "Кориснички налог за нормалан рад",
+       "config-db-prefix": "Префикс табеле базе података (без цртица):",
+       "config-mysql-old": "Неопходан је MySQL $1 или новији. Ви имате $2.",
        "config-db-port": "Порт базе података:",
-       "config-db-schema": "Шема за Медијавики  (без цртица)",
+       "config-db-schema": "Шема за MediaWiki (без цртица)",
+       "config-db-schema-help": "Ова шема обично ће радити добро.\nПромените је само ако знате да је то потребно.",
+       "config-pg-test-error": "Није могуће повезати се са базом података <strong>$1</strong>: $2",
+       "config-sqlite-dir": "Директоријум SQLite података:",
+       "config-oracle-def-ts": "Подразумевани табеларни простор:",
+       "config-oracle-temp-ts": "Привремени табеларни простор:",
        "config-type-mysql": "MariaDB, MySQL или компатибилан",
        "config-type-postgres": "PostgreSQL",
        "config-type-sqlite": "SQLite",
        "config-type-oracle": "Oracle",
        "config-type-mssql": "Microsoft SQL Server",
-       "config-support-info": "Медијавики подржава следеће системе база података:\n\n$1\n\nАко не видите систем података који покушавате да користите на списку испод, онда пратите горња упутства да бисте омогућили подршку.",
-       "config-dbsupport-mysql": "* [{{int:version-db-mariadb-url}} MariaDB] је примарна мета за Медијавики и најбоље је подржана. Медијавики такође ради са [{{int:version-db-mysql-url}} MySQL-ом] и [{{int:version-db-percona-url}} Percona Server-ом], који су компатибилни са MariaDB-ом. ([https://secure.php.net/manual/en/mysqli.installation.php Како компајлирати PHP са подршком MySQL-а])",
+       "config-support-info": "MediaWiki подржава следеће системе база података:\n\n$1\n\nАко не видите систем који покушавате да користите на листи испод, онда пратите повезана упутства изнад како бисте омогућили подршку.",
+       "config-dbsupport-mysql": "* [{{int:version-db-mariadb-url}} MariaDB] је примарна мета за MediaWiki и најбоље је подржана. MediaWiki такође ради са [{{int:version-db-mysql-url}} MySQL-ом] и [{{int:version-db-percona-url}} Percona Server-ом], који су компатибилни са MariaDB-ом. ([https://secure.php.net/manual/en/mysqli.installation.php Како компајлирати PHP са подршком MySQL-а])",
        "config-dbsupport-postgres": "* [{{int:version-db-postgres-url}} PostgreSQL] је популаран систем база података отвореног кода кaо алтернатива MySQL-у. ([https://secure.php.net/manual/en/pgsql.installation.php Како компајлирати PHP са подршком PostgreSQL-а])",
        "config-dbsupport-sqlite": "* [{{int:version-db-sqlite-url}} SQLite] је лаган систем базе података који је веома добро подржан. ([https://secure.php.net/manual/en/pdo.installation.php Како компајлирати PHP са подршком SQLite-а], користи PDO)",
        "config-dbsupport-oracle": "* [{{int:version-db-oracle-url}} Oracle] је база података комерцијалних предузећа. ([https://secure.php.net/manual/en/oci8.installation.php Како компајлирати PHP са подршком OCI8-а])",
-       "config-dbsupport-mssql": "* [{{int:version-db-mssql-url}} Microsoft SQL Server] је база података комерцијалних предузећа за Виндоус. ([https://secure.php.net/manual/en/sqlsrv.installation.php Како компајлирати PHP са подршком SQLSRV-а])",
+       "config-dbsupport-mssql": "* [{{int:version-db-mssql-url}} Microsoft SQL Server] је база података комерцијалних предузећа за Windows. ([https://secure.php.net/manual/en/sqlsrv.installation.php Како компајлирати PHP са подршком SQLSRV-а])",
        "config-header-mysql": "Подешавања MariaDB/MySQL-а",
        "config-header-postgres": "Подешавања PostgreSQL-а",
        "config-header-sqlite": "Подешавања SQLite-а",
        "config-header-oracle": "Подешавања Oracle-а",
        "config-header-mssql": "Подешавања Microsoft SQL Server-а",
        "config-invalid-db-type": "Неважећи тип базе података.",
+       "config-missing-db-name": "Морате да унесете вредност за „{{int:config-db-name}}”.",
+       "config-missing-db-host": "Морате да унесете вредност за „{{int:config-db-host}}”.",
+       "config-missing-db-server-oracle": "Морате да унесете вредност за „{{int:config-db-host-oracle}}”.",
+       "config-invalid-db-server-oracle": "Неважећа TNS база података „$1”.\nКористите или „TNS Name” или ниску „Easy Connect”.\n([http://docs.oracle.com/cd/E11882_01/network.112/e10836/naming.htm Oracle методи именовања]).",
+       "config-invalid-db-name": "Неважеће име базе података „$1”.\nКористите само ASCII слова (a-z, A-Z), бројеве (0-9) и подвлаке (_).",
+       "config-invalid-db-prefix": "Неважећи префикс базе података „$1”.\nКористите само ASCII слова (a-z, A-Z), бројеве (0-9), подвлаке (_) и цртице (-).",
+       "config-connection-error": "$1.\n\nПроверите хост, корисничко име и лозинку, па покушајте поново.",
+       "config-invalid-schema": "Неважећа шема за MediaWiki „$1”.\nКористите само ASCII слова (a-z, A-Z), бројеве (0-9) и подвлаке (_).",
+       "config-db-sys-create-oracle": "Инсталациони програм подржава само коришћење SYSDBA налога за отварање новог.",
+       "config-db-sys-user-exists-oracle": "Кориснички налог „$1” већ постоји. SYSDBA се само може користити за отварање новог налога!",
+       "config-postgres-old": "Неопходан је PostgreSQL $1 или новији. Ви имате $2.",
        "config-mssql-old": "Неопходан је Microsoft SQL Server $1 или новији. Ви имате $2.",
-       "config-sqlite-readonly": "Датотека <code>$1</code> није записива.",
+       "config-sqlite-name-help": "Одаберите име које идентификује ваш wiki.\nНе користите размаке или цртице.\nОво ће се користити за име датотеке SQLite података.",
+       "config-sqlite-mkdir-error": "Грешка при прављењу директоријума са подацима „$1”.\nПроверите локацију, па покушајте поново.",
+       "config-sqlite-dir-unwritable": "Није могуће уписати у директоријум „$1”.\nПромените му дозволе, тако да веб-сервер може да уписује у њему, па покушајте поново.",
+       "config-sqlite-connection-error": "$1.\n\nПроверите директоријум са подацима и име базе података испод, па покушајте поново.",
+       "config-sqlite-readonly": "Датотека <code>$1</code> није уписива.",
+       "config-sqlite-cant-create-db": "Није могуће направити датотеку базе података <code>$1</code>.",
+       "config-sqlite-fts3-downgrade": "PHP-у недостаје FTS3 подршка, поништавање надоградње табела.",
+       "config-can-upgrade": "Постоје MediaWiki табеле у овој бази података.\nДа бисте их надоградили на MediaWiki $1, кликните на <strong>Настави</strong>.",
+       "config-upgrade-error": "Дошло је до грешке при надоградњи MediaWiki табела у бази података.\n\nЗа више информација, погледајте евиденцију изнад, да бисте покушали поново, кликните на <strong>Настави</strong>.",
+       "config-upgrade-done": "Надоградња је завршена.\n\nСада можете да [$1 почнете да користите свој wiki].\n\nАко желите да поново генеришете датотеку <code>LocalSettings.php</code>, кликните на дугме испод.\nОво се <strong>не препоручује</strong> осим ако имате проблеме са wiki-јем.",
+       "config-upgrade-done-no-regenerate": "Надоградња је завршена.\n\nСада можете да [$1 почнете да користите свој wiki].",
        "config-regenerate": "Регенериши LocalSettings.php →",
+       "config-show-table-status": "Упит <code>SHOW TABLE STATUS</code> није успео!",
+       "config-unknown-collation": "<strong>Упозорење:</strong> База података користи непрепозната правила поређења.",
        "config-db-web-account": "Налог базе података за веб-приступ",
+       "config-db-web-help": "Изаберите кориснички име и лозинку коју ће веб-сервер користити за повезивање са сервером базе података, током свакодневног рада на wiki-ју.",
        "config-db-web-account-same": "Користи исти налог као и за инсталацију",
+       "config-db-web-create": "Отвори налог ако већ не постоји.",
+       "config-db-web-no-create-privs": "Налог који сте навели за инсталацију нема довољне привилегије да отвори налог.\nНалог који овде наведете већ мора да постоји.",
+       "config-mysql-engine": "Механизам складишта:",
        "config-mysql-innodb": "InnoDB (препоручено)",
        "config-mysql-myisam": "MyISAM",
        "config-mssql-auth": "Тип потврде идентитета:",
-       "config-mssql-sqlauth": "Потврда идентитета за SQL Server",
-       "config-mssql-windowsauth": "Потврда идентитета за Windows",
-       "config-site-name": "Име викија:",
+       "config-mssql-sqlauth": "SQL Server потврда идентитета",
+       "config-mssql-windowsauth": "Windows потврда идентитета",
+       "config-site-name": "Име wiki-ја:",
+       "config-site-name-help": "Ово ће се појавити у насловној траци прегледача и на разним другим местима.",
        "config-site-name-blank": "Унесите име сајта.",
        "config-project-namespace": "Именски простор пројекта:",
        "config-ns-generic": "Пројекат",
-       "config-ns-site-name": "Исти као име викија: $1",
+       "config-ns-site-name": "Исти као wiki име: $1",
        "config-ns-other": "Друго (наведите)",
        "config-ns-other-default": "MyWiki",
+       "config-ns-invalid": "Наведени именски простор „<nowiki>$1</nowiki>” није важећи.\nНаведите други именски простор пројекта.",
+       "config-ns-conflict": "Наведени именски простор „<nowiki>$1</nowiki>” сукоби се са подразумеваним MediaWiki именским простором.\nНаведите други именски простор пројекта.",
        "config-admin-box": "Налог администратора",
-       "config-admin-name": "Ð\9aорисничко име:",
+       "config-admin-name": "Ð\92аÑ\88е Ðºорисничко име:",
        "config-admin-password": "Лозинка:",
        "config-admin-password-confirm": "Поновите лозинку:",
-       "config-admin-help": "Ð\9eвде Ñ\83неÑ\81иÑ\82е Ð¶ÐµÑ\99ено ÐºÐ¾Ñ\80иÑ\81ниÑ\87ко Ð¸Ð¼Ðµ; Ð½Ð° Ð¿Ñ\80имеÑ\80, â\80\9eÐ\88ован Ð\9aÑ\80Ñ\81Ñ\82иÑ\9bâ\80\9d.\nÐ\9eво Ð¸Ð¼Ðµ Ñ\9bеÑ\82е ÐºÐ¾Ñ\80иÑ\81Ñ\82иÑ\82и Ð·Ð° Ð¿Ñ\80иÑ\98авÑ\83 Ð½Ð° Ð²Ð¸ÐºÐ¸.",
+       "config-admin-help": "Ð\9eвде Ñ\83неÑ\81иÑ\82е Ð¶ÐµÑ\99ено ÐºÐ¾Ñ\80иÑ\81ниÑ\87ко Ð¸Ð¼Ðµ; Ð½Ð° Ð¿Ñ\80имеÑ\80, â\80\9eÐ\90лекÑ\81андаÑ\80 Ð\96ивковиÑ\9bâ\80\9d.\nÐ\9eво Ð¸Ð¼Ðµ Ñ\9bеÑ\82е ÐºÐ¾Ñ\80иÑ\81Ñ\82иÑ\82и Ð·Ð° Ð¿Ñ\80иÑ\98авÑ\83 Ð½Ð° wiki.",
        "config-admin-name-blank": "Унесите корисничко име администратора.",
+       "config-admin-name-invalid": "Наведено корисничко име „<nowiki>$1</nowiki>” није важеће.\nНаведите друго.",
        "config-admin-password-blank": "Унесите лозинку за налог администратора.",
        "config-admin-password-mismatch": "Лозинке које сте унели се не поклапају.",
-       "config-admin-email": "Имејл-адреса:",
-       "config-admin-error-bademail": "Унели сте неважећу имејл-адресу.",
-       "config-pingback": "Подели податке о овој инсталацији са програмерима Медијавикија.",
-       "config-almost-done": "Скоро сте завршили!\nСада можете прескочити преосталу конфигурацију и одмах инсталирати вики.",
+       "config-admin-email": "Адреса е-поште:",
+       "config-admin-error-user": "Дошло је до унутрашње грешке при прављењу администратора под именом „<nowiki>$1</nowiki>”.",
+       "config-admin-error-password": "Дошло је до унутрашње грешке при постављању лозинке за администратора „<nowiki>$1</nowiki>”: <pre>$2</pre>",
+       "config-admin-error-bademail": "Унели сте неважећу адресу е-поште.",
+       "config-subscribe": "Претплатите се на [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce release announcements дописну листу].",
+       "config-subscribe-noemail": "Покушали сте да се претплатите на дописну листу за објаве о новим издањима без пружања адресе е-поште.\nПружите адресу е-поште ако желите да се претплатите на њу.",
+       "config-pingback": "Дели податке о овој инсталацији са MediaWiki програмерима.",
+       "config-almost-done": "Скоро сте готови!\nСада можете прескочити преосталу конфигурацију и одмах инсталирати wiki.",
        "config-optional-continue": "Постави ми још питања.",
-       "config-optional-skip": "Ð\94оÑ\81адно Ð¼Ð¸ Ñ\98е, Ñ\81амо Ð¸Ð½Ñ\81Ñ\82алиÑ\80аÑ\98 Ð²Ð¸ÐºÐ¸.",
+       "config-optional-skip": "Ð\92еÑ\9b Ð¼Ð¸ Ñ\98е Ð´Ð¾Ñ\81адно, Ñ\81амо Ð¸Ð½Ñ\81Ñ\82алиÑ\80аÑ\98 wiki.",
        "config-profile": "Профил корисничких група:",
-       "config-profile-wiki": "Отворен вики",
+       "config-profile-wiki": "Отворен wiki",
        "config-profile-no-anon": "Неопходно је отворити налог",
        "config-profile-fishbowl": "Само овлашћени уредници",
-       "config-profile-private": "Приватан вики",
-       "config-profile-help": "Вики најбоље функционише када дозвољавате што више корисника да уређују како је то могуће.\nУ Медијавикију, лако је прегледати недавне промене и вратити сваку штету коју почине наивни или злонамерни корисници.\n\nМеђутим, многи су пронашли Медијавики да је користан у широкој разноликости улога, а понекад није лако уверити се у све предности начина викија.\nТако да имате избор.\n\nМодел <strong>{{int:config-profile-wiki}}</strong> дозвољава свима да уређују, без пријављивања.\nВикији са <strong>{{int:config-profile-no-anon}}</strong> пружају додатну одговорност, али може спречити случајне доприносе.\n\n<strong>{{int:config-profile-fishbowl}}</strong> сценарио дозвољава одобреним корисницима да уређују, али сви могу видети странице, укључујући историју.\n<strong>{{int:config-profile-private}}</strong> само дозвољава одобреним корисницима да виде странице, са истом групом дозвољеном да уређује.\n\nСложене конфигурације корисничких права су доступне након инсталације, погледајте [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:User_rights одговарајући ручни унос].",
+       "config-profile-private": "Приватан wiki",
+       "config-profile-help": "Wiki-ји најбоље функционишу када дозвољавате што више корисника да уређују како је то могуће.\nУ MediaWiki-ју, лако је прегледати недавне промене и вратити сваку штету коју почине наивни или злонамерни корисници.\n\nМеђутим, многи су пронашли MediaWiki да је користан у широкој разноликости улога, а понекад није лако уверити се у све предности начина wiki-ја.\nТако да имате избор.\n\nМодел <strong>{{int:config-profile-wiki}}</strong> дозвољава свима да уређују, без пријављивања.\nWiki-ји са <strong>{{int:config-profile-no-anon}}</strong> пружају додатну одговорност, али може спречити случајне доприносе.\n\n<strong>{{int:config-profile-fishbowl}}</strong> сценарио дозвољава одобреним корисницима да уређују, али сви могу видети странице, укључујући историју.\n<strong>{{int:config-profile-private}}</strong> само дозвољава одобреним корисницима да виде странице, са истом групом дозвољеном да уређује.\n\nСложене конфигурације корисничких права су доступне након инсталације, погледајте [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:User_rights одговарајући ручни унос].",
        "config-license": "Ауторска права и лиценца:",
-       "config-license-none": "Ð\91ез Ð·Ð°Ð³Ð»Ð°Ð²Ñ\99а Ñ\81а Ð»Ð¸Ñ\86енÑ\86ом",
-       "config-license-cc-by-sa": "Creative Commons Ауторство-Делити под истим условима (CC BY-SA)",
-       "config-license-cc-by": "Creative Commons Ауторство (CC BY)",
-       "config-license-cc-by-nc-sa": "Creative Commons Ауторство-Некомерцијално-Делити под истим условима (CC BY-NC-SA)",
+       "config-license-none": "Ð\91ез Ð¿Ð¾Ð´Ð½Ð¾Ð¶Ñ\98а Ð·Ð° Ð»Ð¸Ñ\86енÑ\86Ñ\83",
+       "config-license-cc-by-sa": "Creative Commons Ауторство-Делити под истим условима",
+       "config-license-cc-by": "Creative Commons Ауторство",
+       "config-license-cc-by-nc-sa": "Creative Commons Ауторство-Некомерцијално-Делити под истим условима",
        "config-license-cc-0": "Creative Commons Zero (јавно власништво)",
-       "config-license-gfdl": "ГНУ-ова лиценца за слободну документацију издање 1.3 или новије",
+       "config-license-gfdl": "GNU лиценца за слободну документацију 1.3 или новија",
        "config-license-pd": "Јавно власништво",
        "config-license-cc-choose": "Изабери прилагођену Creative Commons лиценцу",
-       "config-email-settings": "Подешавања имејла",
-       "config-enable-email": "Омогући одлазни имејл",
-       "config-email-user": "Омогући корисницима да међусобно размењују имејлове",
+       "config-email-settings": "Подешавања е-поште",
+       "config-enable-email": "Омогући одлазну е-пошту",
+       "config-email-user": "Омогући слање е-порука међу корисницима",
+       "config-email-user-help": "Дозволи свим корисницима да међусобно шаљу е-поруке ако имају омогућено одговарајуће подешавање.",
        "config-email-usertalk": "Омогући обавештење о корисничкој страници за разговор",
+       "config-email-usertalk-help": "Дозволи корисницима да примају обавештења о променама корисничких страница за разговор, ако су то омогућили у својим подешавањима.",
        "config-email-watchlist": "Омогући обавештења о списку надгледања",
-       "config-email-auth": "Омогући потврду идентитета путем имејла",
+       "config-email-watchlist-help": "Дозволи корисницима да примају обавештења о својим надгледаним страницама, ако су то омогућили у својим подешавањима.",
+       "config-email-auth": "Омогући потврду идентитета путем е-поште",
+       "config-email-sender": "Повратна адреса е-поште:",
        "config-upload-settings": "Отпремања слика и датотека",
        "config-upload-enable": "Омогући отпремање датотека",
        "config-upload-deleted": "Директоријум за избрисане датотеке:",
-       "config-logo": "URL логотипа:",
+       "config-upload-deleted-help": "Одаберите директоријум у којем ће се архивирати избрисане датотеке.\nУ идеалном случају, ово не би требало да буде доступно преко веба.",
+       "config-logo": "URL адреса логотипа:",
        "config-instantcommons": "Омогући Instant Commons",
+       "config-cc-error": "Creative Commons бирач лиценце није давао резултате.\nУнесите име лиценце ручно.",
        "config-cc-again": "Изаберите поново…",
        "config-cc-not-chosen": "Одаберите коју Creative Commons лиценцу желите и кликните на „настави”.",
        "config-advanced-settings": "Напредна конфигурација",
        "config-cache-options": "Подешавања за кеширање објекта:",
-       "config-cache-none": "Нема кеширања (функционалност није уклоњена, али брзина може утицати на веће вики сајтове)",
+       "config-cache-none": "Нема кеширања (функционалност није уклоњена, али брзина може утицати на веће wiki сајтове)",
+       "config-cache-accel": "Кеширање PHP објекта (APC, APCu or WinCache)",
        "config-cache-memcached": "Користи Memcached (захтева додатно подешавање и конфигурацију)",
        "config-memcached-servers": "Memcached сервери:",
+       "config-memcached-help": "Листа IP адреса за коришћење за Memcached.\nТреба да наведете једну у сваки ред и порт за коришћење. На пример:\n 127.0.0.1:11211\n 192.168.1.25:1234",
+       "config-memcache-needservers": "Изабрали сте Memcached тип кеша, али нисте навели ниједан сервер.",
+       "config-memcache-badip": "Унели сте неважећу IP адресу за Memcached: $1.",
+       "config-memcache-noport": "Нисте навели порт за коришћење за Memcached сервер: $1.\nАко не знате порт, подразумевани је 11211.",
+       "config-memcache-badport": "Бројеви Memcached порта треба да буду између $1 и $2.",
        "config-extensions": "Додаци",
+       "config-extensions-help": "Горенаведени додаци су откривени у директоријуму <code>./extensions</code>.\n\nОни могу да траже додатну конфигурацију, али можете да их омогућите одмах.",
        "config-skins": "Теме",
-       "config-skins-use-as-default": "Користи ову тему као подразумевану",
+       "config-skins-help": "Горенаведене теме су откривене у директоријуму <code>./skins</code>. Морате да омогућите најмање једну и одаберете подразумевану.",
+       "config-skins-use-as-default": "Подразумевано користи ову тему",
+       "config-skins-missing": "Теме нису пронађене. MediaWiki ће користити резервну тему све док не инсталирате одговарајуће.",
        "config-skins-must-enable-some": "Морате одабрати барем једну тему за омогућавање.",
+       "config-skins-must-enable-default": "Тема коју сте одабрали за подразумевану мора да се омогући.",
+       "config-install-alreadydone": "<strong>Упозорење:</strong> Изгледа да већ имате инсталиран MediaWiki и покушавате да га поново инсталирате.\nПродужите ка следећој страници.",
        "config-install-begin": "Притиском на „{{int:config-continue}}”, започећете инсталацију Медијавикија.\nАко желите да извршите промене, притисните „{{int:config-back}}”.",
        "config-install-step-done": "готово",
        "config-install-step-failed": "није успело",
        "config-install-extensions": "Укључивање додатака",
-       "config-install-database": "Подешавам базу података",
+       "config-install-database": "Постављање базе података",
        "config-install-schema": "Прављење шеме",
        "config-install-pg-schema-not-exist": "Шема PostgreSQL не постоји.",
-       "config-install-user": "Правим корисника базе података",
+       "config-install-pg-schema-failed": "Прављење табела није успело.\nУверите се да корисник „$1” може да пише у шеми „$2”.",
+       "config-install-pg-commit": "Извршавање промена",
+       "config-install-pg-plpgsql": "Проверавање језика PL/pgSQL",
+       "config-pg-no-plpgsql": "Морате да инсталирате језик PL/pgSQL у бази података $1",
+       "config-pg-no-create-privs": "Налог који сте навели за инсталацију нема довољне привилегије да отвори налог.",
+       "config-install-user": "Прављење корисника базе података",
        "config-install-user-alreadyexists": "Корисник „$1” већ постоји",
+       "config-install-user-create-failed": "Отварање налога „$1” није успело: $2",
+       "config-install-user-grant-failed": "Додељивање дозволе кориснику „$1” није успело: $2",
+       "config-install-user-missing": "Наведени корисник „$1” не постоји.",
+       "config-install-user-missing-create": "Наведени корисник „$1” не постоји.\nКликните на поље за потврду „отвори налог” испод ако желите да га отворите.",
        "config-install-tables": "Прављење табела",
+       "config-install-tables-exist": "<strong>Упозорење:</strong> Изгледа да MediaWiki табеле већ постоје.\nПрескакање прављења.",
+       "config-install-tables-failed": "<strong>Грешка:</strong> Прављење табеле није успело због следеће грешке: $1",
        "config-install-interwiki": "Попуњавање подразумеване табеле међувикија",
-       "config-install-stats": "Покретање статистика",
+       "config-install-interwiki-list": "Није могуће читати датотеку <code>interwiki.list</code>.",
+       "config-install-interwiki-exists": "<strong>Упозорење:</strong> Изгледа да табела међувикија већ има уносе.\nПрескакање подразумеване листе.",
+       "config-install-stats": "Покретање статистике",
        "config-install-keys": "Генерисање тајних кључева",
-       "config-install-sysop": "Прављење корисничког налога администратора",
+       "config-install-updates": "Спречи покретање непотребних ажурирања",
+       "config-install-updates-failed": "<strong>Грешка:</strong> Уметање клучева за ажурирање у табеле није успело због следеће грешке: $1",
+       "config-install-sysop": "Отварање корисничког налога администратора",
        "config-install-subscribe-fail": "Није могуће претплатити се на mediawiki-announce: $1",
+       "config-install-subscribe-notpossible": "cURL није инсталиран, а параметар <code>allow_url_fopen</code> није доступан.",
        "config-install-mainpage": "Прављење главне стране са подразумеваним садржајем",
        "config-install-mainpage-exists": "Главна страна већ постоји, прескакање",
+       "config-install-extension-tables": "Прављење табела за омогућене додатке",
        "config-install-mainpage-failed": "Није могуће уметнути главну страну: $1",
-       "config-install-done": "<strong>Честитамо!</strong>\nИнсталирали сте Медијавики.\n\nИнсталациони програм је генерисао датотеку <code>LocalSettings.php</code>.\nОна садржи сву вашу конфигурацију.\n\nМораћете да је преузмете и ставите у базу ваше вики инсталације (исти директоријум као index.php). Преузимање би аутоматски требало почети.\n\nАко преузимање није понуђено, или ако га откажете, можете поново покренути преузимање тако што ћете кликнути на доленаведену везу:\n\n$3\n\n<strong>Напомена:</strong> Ако то одмах не урадите, ова генерисана конфигурациона датотека неће вам бити доступна касније ако изађете из инсталације без преузимања.\n\nКада је то учињено, можете да <strong>[$2 посетите свој вики]</strong>.",
-       "config-install-done-path": "<strong>Честитамо!</strong>\nИнсталирали сте Медијавики.\n\nИнсталациони програм је генерисао датотеку <code>LocalSettings.php</code>.\nОна садржи сву вашу конфигурацију.\n\nМораћете да је преузмете и ставите у <code>$4</code>. Преузимање би аутоматски требало почети.\n\nАко преузимање није понуђено, или ако га откажете, можете поново покренути преузимање тако што ћете кликнути на доленаведену везу:\n\n$3\n\n<strong>Напомена:</strong> Ако то одмах не урадите, ова генерисана конфигурациона датотека неће вам бити доступна касније ако изађете из инсталације без преузимања.\n\nКада је то учињено, можете да <strong>[$2 посетите свој вики]</strong>.",
-       "config-install-success": "Медијавики је успешно инсталиран. Сада можете посетити <$1$2> да бисте видели свој вики.\nАко имате питања, погледајте наш списак често постављаних питања: <https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ> или користите један од форума за подршку који су повезани на тој страници.",
-       "config-download-localsettings": "Преузми <code>LocalSettings.php</code>",
+       "config-install-done": "<strong>Честитамо!</strong>\nИнсталирали сте MediaWiki.\n\nИнсталациони програм је генерисао датотеку <code>LocalSettings.php</code>.\nОна садржи сву вашу конфигурацију.\n\nМораћете да је преузмете и ставите у базу ваше wiki инсталације (исти директоријум као index.php). Преузимање би аутоматски требало почети.\n\nАко преузимање није понуђено, или ако га откажете, можете поново покренути преузимање тако што ћете кликнути на доленаведену везу:\n\n$3\n\n<strong>Напомена:</strong> Ако то одмах не урадите, ова генерисана конфигурациона датотека неће вам бити доступна касније ако изађете из инсталације без преузимања.\n\nКада је то учињено, можете да <strong>[$2 посетите свој wiki]</strong>.",
+       "config-install-done-path": "<strong>Честитамо!</strong>\nИнсталирали сте MediaWiki.\n\nИнсталациони програм је генерисао датотеку <code>LocalSettings.php</code>.\nОна садржи сву вашу конфигурацију.\n\nМораћете да је преузмете и ставите у <code>$4</code>. Преузимање би аутоматски требало почети.\n\nАко преузимање није понуђено, или ако га откажете, можете поново покренути преузимање тако што ћете кликнути на доленаведену везу:\n\n$3\n\n<strong>Напомена:</strong> Ако то одмах не урадите, ова генерисана конфигурациона датотека неће вам бити доступна касније ако изађете из инсталације без преузимања.\n\nКада је то учињено, можете да <strong>[$2 посетите свој wiki]</strong>.",
+       "config-install-success": "MediaWiki је успешно инсталиран. Сада можете посетити <$1$2> да бисте видели свој wiki.\nАко имате питања, погледајте нашу листу често постављаних питања: <https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ> или користите један од форума за подршку који су повезани на тој страници.",
+       "config-download-localsettings": "Преузми датотеку <code>LocalSettings.php</code>",
        "config-help": "помоћ",
        "config-help-tooltip": "кликните да бисте проширили",
-       "config-nofile": "Ð\9dиÑ\98е Ð¼Ð¾Ð³Ñ\83Ñ\9bе Ð¿Ñ\80онаÑ\9bи Ð´Ð°Ñ\82оÑ\82екÑ\83 â\80\9e$1â\80\9d. Ð\94а Ð½Ð¸Ñ\98е избрисана?",
-       "config-extension-link": "Јесте ли знали да ваш вики подржава [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions додатке]?\n\nМожете их прегледати [https://www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category по категорији].",
+       "config-nofile": "Ð\9dиÑ\98е Ð¼Ð¾Ð³Ñ\83Ñ\9bе Ð¿Ñ\80онаÑ\9bи Ð´Ð°Ñ\82оÑ\82екÑ\83 â\80\9e$1â\80\9d. Ð\9dиÑ\98е Ð»Ð¸ избрисана?",
+       "config-extension-link": "Јесте ли знали да ваш wiki подржава [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Extensions додатке]?\n\nМожете их прегледати [https://www.mediawiki.org/wiki/Special:MyLanguage/Category:Extensions_by_category по категорији].",
        "config-skins-screenshots": "„$1” (снимци екрана: $2)",
        "config-skins-screenshot": "$1 ($2)",
        "config-extensions-requires": "$1 (захтева $2)",
        "config-screenshot": "снимак екрана",
        "config-extension-not-found": "Није могуће пронаћи датотеку регистрације за додатак „$1”",
+       "config-extension-dependency": "Дошло је до грешке зависности при инсталирању додатка „$1”: $2",
        "mainpagetext": "<strong>Медијавики је инсталиран.</strong>",
-       "mainpagedocfooter": "Ð\9fогледаÑ\98Ñ\82е [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents ÐºÐ¾Ñ\80иÑ\81ниÑ\87ки Ð²Ð¾Ð´Ð¸Ñ\87] Ð·Ð° ÐºÐ¾Ñ\80иÑ\88Ñ\9bеÑ\9aе Ð¿Ñ\80огÑ\80ама.\n\n== Ð£Ð²Ð¾Ð´ ==\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Ð\9fомоÑ\9b Ñ\83 Ð²ÐµÐ·Ð¸ Ñ\81а Ð¿Ð¾Ð´ÐµÑ\88аваÑ\9aима]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ Ð§ÐµÑ\81Ñ\82о Ð¿Ð¾Ñ\81Ñ\82авÑ\99ана Ð¿Ð¸Ñ\82аÑ\9aа]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Ð\94опиÑ\81ни Ñ\81пиÑ\81ак Ð¾ Ð¸Ð·Ð´Ð°Ñ\9aима Ð\9cедиÑ\98авикиÑ\98а]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Ð\9dаÑ\83Ñ\87иÑ\82е ÐºÐ°ÐºÐ¾ Ð´Ð° Ñ\81е Ð±Ð¾Ñ\80иÑ\82е Ð¿Ñ\80оÑ\82ив Ñ\81пама Ð½Ð° Ñ\81вом Ð²Ð¸ÐºÐ¸ју]"
+       "mainpagedocfooter": "Ð\9fогледаÑ\98Ñ\82е [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents Ð\92одиÑ\87 Ð·Ð° ÐºÐ¾Ñ\80иÑ\81нике] Ð·Ð° Ð¸Ð½Ñ\84оÑ\80маÑ\86иÑ\98е Ð¾ Ñ\82оме ÐºÐ°ÐºÐ¾ ÐºÐ¾Ñ\80иÑ\81Ñ\82иÑ\82и wiki Ñ\81оÑ\84Ñ\82веÑ\80.\n\n== Ð£Ð²Ð¾Ð´ ==\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Ð\9bиÑ\81Ñ\82а Ð¿Ð¾Ñ\81Ñ\82авки ÐºÐ¾Ð½Ñ\84игÑ\83Ñ\80аÑ\86иÑ\98е]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki Ð§Ð\9fÐ\9f]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Ð\94опиÑ\81на Ð»Ð¸Ñ\81Ñ\82а Ð¾ MediaWiki Ð¸Ð·Ð´Ð°Ñ\9aима]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Ð\9dаÑ\83Ñ\87иÑ\82е ÐºÐ°ÐºÐ¾ Ð´Ð° Ñ\81е Ð±Ð¾Ñ\80иÑ\82е Ð¿Ñ\80оÑ\82ив Ð½ÐµÐ¿Ð¾Ð¶ÐµÑ\99ног Ñ\81адÑ\80жаÑ\98а Ð½Ð° Ñ\81вом wiki-ју]"
 }
index 5ed243c..56b469f 100644 (file)
        "config-diff3-bad": "GNU diff3 nije pronađen.",
        "config-git": "Pronađen je Git softver za kontrolu verzija: <code>$1</code>",
        "config-git-bad": "Nije pronađen Git softver za kontrolu verzija.",
+       "config-imagemagick": "Pronađen ImageMagick: <code>$1</code>.\nUmanjivanje slika će biti omogućeno ako omogućite otpremanje.",
+       "config-gd": "Pronađena je GD ugrađena grafička biblioteka.\nUmanjivanje slika će biti omogućeno ako omogućite otpremanje.",
        "config-no-scaling": "Nije moguće pronaći GD biblioteku ili ImageMagick.\nUmanjivanje slika će biti onemogućeno.",
+       "config-using-server": "Koristi se ime servera \"<nowiki>$1</nowiki>\".",
+       "config-using-uri": "Koristi se URL servera \"<nowiki>$1$2</nowiki>\".",
+       "config-uploads-not-safe": "<strong>Upozorenje:</strong> Vaš podrazumevan folder za otpremanja <code>$1</code> je podložan izvršenju proizvoljnih skripti.\nIako Medijaviki proverava sve otpremljene datoteke za bezbedonosne pretnje, preporučuje se [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Security#Upload_security da zatvorite ovu bezbedonosnu ranjivost] pre omogućavanja otpremanja.",
+       "config-no-cli-uploads-check": "<strong>Upozorenje:</strong> Vaš podrazumevan folder za otpremanje (<code>$1</code>) nije proveren na ranjivost na proizvoljno izvršavanje skripte tokom CLI instalacije.",
        "config-db-type": "Tip baze podataka:",
        "config-db-host": "Host baze podataka",
        "config-db-wiki-settings": "Identifikuj ovaj viki",
index 1f82d3b..e9b903c 100644 (file)
@@ -91,7 +91,7 @@
        "config-db-host-oracle": "Databas TNS:",
        "config-db-host-oracle-help": "Ange ett giltigt [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm Local Connect Name]; en tnsnames.ora-fil måste vara synlig för denna installation.<br />Om du använder klientbibliotek 10g eller nyare kan du också använda [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm Easy Connect] namngivningsmetoden.",
        "config-db-wiki-settings": "Identifiera denna wiki",
-       "config-db-name": "Databasnamn:",
+       "config-db-name": "Databasnamn (inga bindestreck):",
        "config-db-name-help": "Välj ett namn som identifierar din wiki.\nDet bör inte innehålla mellanslag.\n\nOm du använder ett delat webbhotell kan de antingen ge dig ett särskilt databasnamn att använda eller så kan de låta dig skapa en databas via kontrollpanelen.",
        "config-db-name-oracle": "Databasschema:",
        "config-db-account-oracle-warn": "Det finns tre stödda scenarier för installationen av Oracle som en backend-databas:\n\nOm du vill skapa ett databaskonto som en del av installationen, ange ett konto med SYSDBA-roll som databaskonto under installationen och ange de önskade autentiseringsuppgifterna för kontot med webb-åtkomst, annars kan du antingen skapa ett konto med webb-åtkomst manuellt och ange enbart detta konto (om den har behörighet att skapa schema-objekt) eller ange två olika konton, en med create-behörighet och en begränsad för webb-åtkomst.\n\nSkript för att skapa ett konto med de korrekta behörigheterna kan hittas i \"maintenance/oracle/\"-katalogen för denna installation. Tänk på att användningen av ett begränsat konto inaktiverar all underhållsmöjlighet med standardkontot.",
        "config-db-account-lock": "Använda samma användarnamn och lösenord under normal drift",
        "config-db-wiki-account": "Användarkonto för normal drift",
        "config-db-wiki-help": "Ange det användarnamn och lösenorde som skall användas för att ansluta till databasen under normal wiki-drift. Om kontot inte existerar, och om installationskontot har tillräcklig behörighet, kommer detta användarkontot att skapas med de minimiprivilegier som krävs för att driva wikin.",
-       "config-db-prefix": "Prefix för tabellerna i databasen:",
+       "config-db-prefix": "Prefix för databastabell (inga bindestreck):",
        "config-db-prefix-help": "Om du behöver dela en databas mellan flera olika wikis, eller mellan MediaWiki och en annan webbapplikation, kan du välja att lägga till ett prefix till alla tabellnamn för att undvika konflikter.\nAnvänd inte mellanslag.\n\nDet här fältet lämnas vanligtvis tomt.",
        "config-mysql-old": "MySQL $1 eller senare krävs. Du har $2.",
        "config-db-port": "Databasport:",
-       "config-db-schema": "Schema för MediaWiki",
+       "config-db-schema": "Schema för MediaWiki (inga bindestreck):",
        "config-db-schema-help": "Det här schemat blir oftast bra.\nÄndra det endast om du vet att du behöver.",
        "config-pg-test-error": "Kan inte ansluta till databas '''$1''': $2",
        "config-sqlite-dir": "SQLite data-katalog:",
        "config-sqlite-cant-create-db": "Kunde inte skapa databasfilen <code>$1</code>.",
        "config-sqlite-fts3-downgrade": "PHP saknar stöd för FTS3, nedgraderar tabeller",
        "config-can-upgrade": "Det finns MediaWiki-tabeller i den här databasen.\nFör att uppgradera dem till MediaWiki $1, klicka på '''Fortsätt'''.",
+       "config-upgrade-error": "Ett fel uppstod när MediaWiki-tabellerna i din databas uppdaterades.\n\nFör mer information, se loggen ovan. Klicka på <strong>Fortsätt</strong> för att försöka igen.",
        "config-upgrade-done": "Uppgraderingen slutfördes.\n\nDu kan nu [$1 börja använda din wiki].\n\nOm du vill förnya din <code>LocalSettings.php</code>-fil, klicka på knappen nedan.\nDetta '''rekommenderas inte''' om du har problem med din wiki.",
        "config-upgrade-done-no-regenerate": "Uppgraderingen slutfördes.\n\nDu kan nu [$1 börja använda din wiki].",
        "config-regenerate": "Återskapa LocalSettings.php →",
index 6ef4dd3..1594e94 100644 (file)
@@ -2,7 +2,8 @@
        "@metadata": {
                "authors": [
                        "VASANTH S.N.",
-                       "Vishwanatha Badikana"
+                       "Vishwanatha Badikana",
+                       "Ravi Mundkur"
                ]
        },
        "config-desc": "ಮೀಡಿಯ ವಿಕಿದ ಪ್ರತಿಸ್ಟಾಪನೆ",
        "config-db-type": "ದತ್ತಾಂಶಸಂಚಯ ಮಾದರಿ:",
        "config-db-host-oracle": "ದತ್ತಾಂಶಸಂಚಯ TNS:",
        "config-db-wiki-settings": "ಈ ವಿಕಿಯನ್ನು ಗುರುತಿಸಾಲೆ",
-       "config-db-name": "ದತà³\8dತಾà²\82ಶಸà²\82à²\9aಯ à²ªà³\81ದರà³\8d:",
+       "config-db-name": "ಮಾಹಿತಿà²\95à³\8bಶದ à²ªà³\81ದರà³\8d(à²\95à³\82ಡà³\81à²\97à³\86ರà³\86 à²¦à²¾à²\82ತà³\86):",
        "config-db-username": "ದತ್ತಾಂಶಸಂಚಯ ಪುದರ್:",
        "config-db-password": "ದತ್ತಾಂಶಸಂಚಯ ಪ್ರವೇಶಪದ:",
+       "config-db-prefix": "ಮಾಹಿತಿಕೋಶ ಪಟ್ಟಿದ ಸುರುಪದ (ಕೂಡುಗೆರೆ ದಾಂತೆ)",
+       "config-db-schema": "ಮೀಡಿಯಾವಿಕಿತ ರೂಪರೇಷೆ (ಕೂಡುಗೆರೆ ದಾಂತೆ)",
        "config-ns-generic": "ಯೋಜನೆ",
        "config-admin-password": "ಪ್ರವೇಶ ಪದೊ",
        "config-admin-password-confirm": "ಪುನಃ ಪ್ರವೇಶ ಪದೊ:",
index ada4d36..c8732e2 100644 (file)
@@ -99,7 +99,7 @@
        "config-db-host-help": "Veritabanı sunucunuz farklı bir sunucu üzerinde ise, ana bilgisayar adını veya IP adresini buraya girin.\n\nPaylaşılan ağ barındırma hizmeti kullanıyorsanız, barındırma sağlayıcınız size doğru bir ana bilgisayar adını kendi belgelerinde vermiştir.\n\nEğer MySQL kullanan bir Windows sunucusuna yükleme yapıyorsanız, sunucu adı olarak \"localhost\" kullanırsanız çalışmayabilir. Çalışmazsa, yerel IP adresi için \"127.0.0.1\" deneyin.\n\nPostgreSQL kullanıyorsanız, bu alanı bir Unix soketi ile bağlanmak için boş bırakın.",
        "config-db-host-oracle": "Veritabanı TNS:",
        "config-db-wiki-settings": "Bu wikiyi tanımla",
-       "config-db-name": "Veritabanı adı:",
+       "config-db-name": "Veritabanı adı (tiresiz):",
        "config-db-name-help": "Vikinizi tanımlayan bir isim seçin.\nBoşluk karakteri içermemelidir.\n\nPaylaşılan bir web hosting servisi kullanıyorsanız, tedarikçiniz size ya kullanmanız için bir veritabanı ismi verecek ya da bir kontrol paneli vasıtasıyla sizin oluşturmanıza izin verecektir.",
        "config-db-name-oracle": "Veritabanı şeması:",
        "config-db-install-account": "Yükleme için kullanıcı hesabı",
        "config-db-install-help": "Kurulum işlemi boyunca veritabanına bağlanmak için kullanıcı adı ve şifre giriniz.",
        "config-db-account-lock": "Normal çalışma sırasında aynı kullanıcı adı ve şifreyi kullanınız.",
        "config-db-wiki-account": "Kullanıcı hesabı için normal işlem",
-       "config-db-prefix": "Veritabanı Tablo öneki:",
+       "config-db-prefix": "Veritabanı tablosu öneki (tiresiz):",
        "config-mysql-old": "MySQL  $1  veya daha yenisi gerekir. Sende bulunan  $2 .",
        "config-db-port": "Veritabanı bağlantı noktası:",
-       "config-db-schema": "MediaWiki için şema:",
+       "config-db-schema": "MediaWiki için şema (tiresiz):",
        "config-db-schema-help": "Bu şema yeterli olacaktır.\nEğer gerçekten ihtiyaç duyarsanız değiştirin.",
        "config-pg-test-error": "Veritabanıyla bağlantı kurulamıyor ''' $1 ''':$2",
        "config-sqlite-dir": "SQLite veri dizini",
index 986964a..51a3ba4 100644 (file)
@@ -13,7 +13,8 @@
                        "Amire80",
                        "Piramidion",
                        "Macofe",
-                       "Movses"
+                       "Movses",
+                       "Vlad5250"
                ]
        },
        "config-desc": "Інсталятор MediaWiki",
@@ -95,7 +96,7 @@
        "config-db-host-oracle": "TNS бази даних:",
        "config-db-host-oracle-help": "Введіть допустиме [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm Local Connect Name]; файл tnsnames.ora має бути видимим для цієї інсталяції. <br />Якщо Ви використовуєте бібліотеки 10g чи новіші, можна також використовувати метод іменування [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm Easy Connect].",
        "config-db-wiki-settings": "Ідентифікувати цю вікі",
-       "config-db-name": "Назва бази даних:",
+       "config-db-name": "Назва бази даних (без дефісів):",
        "config-db-name-help": "Виберіть назву, що ідентифікує Вашу вікі.\nВона не повинна містити пробілів.\n\nЯкщо Ви використовуєте віртуальний хостинг, Ваш хостинг-провайдер або надасть Вам конкретну назву бази даних, або дозволить створювати бази даних з допомогою панелі управління.",
        "config-db-name-oracle": "Схема бази даних:",
        "config-db-account-oracle-warn": "Є три підтримувані сценарії установки Oracle:\n\nЯкщо Ви хочете створити обліковий запис бази даних у процесі встановлення, будь ласка, вкажіть обліковий запис ролі SYSDBA для установки і бажані повноваження для облікового запису з веб-доступом. В протилежному випадку Ви можете або створити обліковий запис з веб-доступом вручну і вказати тільки цей обліковий запис (якщо він має необхідні дозволи на створення об'єктів-схем), або вказати два різні облікові записи, з яких в одного будуть права на створення, а в другого, обмеженого — права веб-доступу.\n\nСкрипт для створення облікового запису з необхідними повноваженнями можна знайти у папці \"maintenance/oracle/\" цієї інсталяції. Майте на увазі, що використання обмеженого облікового запису вимкне можливість використання технічного обслуговування з облікового запису за замовчуванням.",
        "config-db-account-lock": "Використовувати ті ж ім'я користувача і пароль і для звичайної роботи",
        "config-db-wiki-account": "Обліковий запис користувача для звичайної роботи",
        "config-db-wiki-help": "Введіть ім'я користувача і пароль, які будуть використовуватись для з'єднання з базою даних під час звичайної роботи.\nЯкщо обліковий запис не існує, а в облікового запису інсталяції є достатні повноваження, цей обліковий запис користувача буде створено з мінімальними правами, що необхідні для роботи з вікі.",
-       "config-db-prefix": "Префікс таблиць бази даних:",
+       "config-db-prefix": "Префікс таблиць бази даних (без дефісів):",
        "config-db-prefix-help": "Якщо треба ділити одну базу даних між декількома вікі або між MediaWiki та іншим веб-застосунком, Ви можете додати префікс до усіх назв таблиць для уникнення конфліктів.\nНе використовуйте пробіли.\n\nЦе поле зазвичай залишають пустим.",
        "config-mysql-old": "Необхідна MySQL $1 або пізніша, а у Вас $2.",
        "config-db-port": "Порт бази даних:",
-       "config-db-schema": "Схема для MediaWiki",
+       "config-db-schema": "Схема для MediaWiki (без дефісів):",
        "config-db-schema-help": "Ця схема зазвичай працює добре.\nЗмінюйте її тільки якщо знаєте, що Вам це потрібно.",
        "config-pg-test-error": "Не вдається підключитися до бази даних '''$1''': $2",
        "config-sqlite-dir": "Папка даних SQLite:",
        "config-sqlite-cant-create-db": "Не вдалося створити файл бази даних <code>$1</code>.",
        "config-sqlite-fts3-downgrade": "У PHP немає підтримки FTS3, скидаю таблиці",
        "config-can-upgrade": "У цій базі даних є таблиці MediaWiki.\nЩоб оновити їх до MediaWiki $1, натисніть '''Продовжити'''.",
+       "config-upgrade-error": "Відбулася помилка при оновленні таблиць MediaWiki у вашій базі.\n\nДля додаткової інформації, подивіться на журнал вище. Щоб повторити, натисніть <strong>Продовжити</strong>.",
        "config-upgrade-done": "Оновлення завершено.\n\nВи можете зараз [$1 починати використовувати свою вікі].\n\nЯкщо Ви хочете повторно згенерувати файл <code>LocalSettings.php</code>, натисніть на кнопку нижче.\nЦе '''не рекомендується''', якщо тільки у Вас не виникли проблеми з Вашою вікі.",
        "config-upgrade-done-no-regenerate": "Оновлення завершено.\n\nВи можете зараз [$1 починати використовувати свою вікі].",
        "config-regenerate": "Повторно згенерувати LocalSettings.php →",
index c4892e7..2496153 100644 (file)
@@ -48,7 +48,7 @@
        "config-db-host": "דאטנבאזע־סארווער:",
        "config-db-host-oracle": "דאטנבאזע־TNS:",
        "config-db-wiki-settings": "אידענטיפיצירן די דאזיקע וויקי",
-       "config-db-name": "דאטנבאזע נאָמען:",
+       "config-db-name": "דאטנבאזע נאָמען (קיין מקף):",
        "config-db-name-oracle": "דאטנבאזע סכעמע:",
        "config-db-install-account": "באניצער־קאנטע פאר אינסטאלאציע",
        "config-db-username": "דאטנבאזע באניצער־נאָמען:",
index 9620e47..7fc23af 100644 (file)
        "config-db-host-oracle": "資料庫的 TNS:",
        "config-db-host-oracle-help": "請輸入有效的 [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm 本地連線名稱],並確認安裝程式可以讀取 tnsnames.ora 檔案。<br />如果您使用的客戶端程式庫為 10g 或者更新的版本,您也可使用 [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm 簡易連線] 的命名方法進行連線。",
        "config-db-wiki-settings": "識別此 wiki",
-       "config-db-name": "資料庫名稱:",
+       "config-db-name": "è³\87æ\96\99庫å\90\8d稱ï¼\88ä¸\8d帶é\80£å­\97è\99\9fï¼\89ï¼\9a",
        "config-db-name-help": "請輸入一個可以辨識您的 Wiki 的名稱,\n請勿包含空格。\n\n如果您使用的是共用的網頁主機,您的主機提供商會給您一個指定的資料庫名稱,或者讓您透過管理介面建立資料庫。",
        "config-db-name-oracle": "資料庫 Schema:",
        "config-db-account-oracle-warn": "目前有三種支援 Oracle 做為後端資料庫的方案:\n\n如果您希望在安裝的過程中自動建立新的資料庫,請提供具有 SYSDBA 權限的帳號並且提供未來要給網頁存取使用的資料庫帳號及密碼。或者您可以手動建立給網頁存取使用的資料庫帳號 (請確保該帳號有建立 Schema Object 的權限),再不然您可以提供兩組不同的帳號,一組用來建立權限,而另一組用來做為網頁存取使用。\n\n本次安裝建立的帳號以及權限所需要的 Script,可以在 \"maintenance/oracle/\" 中找到。\n請注意,若您使用有限制的帳號將會預設關閉所有維護性功能。",
        "config-db-account-lock": "在一般操作時使用同樣的使用者名稱及密碼。",
        "config-db-wiki-account": "用於一般操作的使用者帳號",
        "config-db-wiki-help": "請輸入一般操作用來連線資料庫的使用者名稱及密碼。\n若您安裝使用的資料庫帳號有足夠的權限,您可以輸入新的帳號,系統會自動幫您以最低權限建立一組專門做為 Wiki 一般操作的帳號。",
-       "config-db-prefix": "資料庫資料表名稱的字首:",
+       "config-db-prefix": "è³\87æ\96\99庫è³\87æ\96\99表å\90\8d稱ç\9a\84å­\97é¦\96ï¼\88ä¸\8d帶é\80£å­\97è\99\9fï¼\89ï¼\9a",
        "config-db-prefix-help": "如果您需要讓多個 Wiki 共用同一個資料庫,或者與其他網頁應用程式共用一個資料庫,您也許會需要在所有資料表的名稱前面加上字首,可以避免資料表名稱的衝突。\n請勿使用空格。\n\n此欄位可不填。",
        "config-mysql-old": "需要使用 MySQL $1 或更新的版本,您的版本為 $2。",
        "config-db-port": "資料庫埠號:",
-       "config-db-schema": "MediaWiki 的 Schema:",
+       "config-db-schema": "MediaWiki 的資料庫架構(不帶連字號):",
        "config-db-schema-help": "資料庫 Schema 通常不需更動。\n只在有特殊需求時才需修改。",
        "config-pg-test-error": "無法連線到資料庫 <strong>$1</strong>:$2",
        "config-sqlite-dir": "SQLite 的資料目錄:",
        "config-sqlite-cant-create-db": "無法建立資料庫檔案 <code>$1</code>。",
        "config-sqlite-fts3-downgrade": "PHP 不支援 FTS3,正在降級資料表。",
        "config-can-upgrade": "在資料庫中找到 MediaWiki 的資料表。\n要升級至 MediaWiki $1,請點選 <strong>繼續</strong>。",
+       "config-upgrade-error": "在更新您資料庫裡的 MediaWiki 表格時發生錯誤。\n\n有關更多資訊請查看上方日誌,若要重試請點擊<strong>繼續</strong>。",
        "config-upgrade-done": "升級完成。\n\n現在您可以 [$1 開始使用您的 Wiki] 了。\n\n如果您需要重新產生 <code>LocalSettings.php</code> 檔案,請點選下方按鈕。\n除非您的 Wiki 出現了問題,否則我們 <strong>不建議</strong> 您執行此操作。",
        "config-upgrade-done-no-regenerate": "升級完成。\n\n現在您可以 [$1 開始使用您的 Wiki] 了。",
        "config-regenerate": "重新產生 LocalSettings.php →",
index 7d34f32..3689ba4 100644 (file)
@@ -531,7 +531,7 @@ abstract class JobQueue {
         * @return string
         */
        protected function getRootJobCacheKey( $signature ) {
-               $this->dupCache->makeGlobalKey(
+               return $this->dupCache->makeGlobalKey(
                        'jobqueue',
                        $this->domain,
                        $this->type,
index c572559..9931d83 100644 (file)
@@ -298,7 +298,7 @@ class JobQueueDB extends JobQueue {
                                // Get the job object from the row...
                                $title = Title::makeTitle( $row->job_namespace, $row->job_title );
                                $job = Job::factory( $row->job_cmd, $title,
-                                       self::extractBlob( $row->job_params ), $row->job_id );
+                                       self::extractBlob( $row->job_params ) );
                                $job->metadata['id'] = $row->job_id;
                                $job->metadata['timestamp'] = $row->job_timestamp;
                                break; // done
index c39823f..1c7647c 100644 (file)
@@ -41,11 +41,38 @@ class CategoryMembershipChangeJob extends Job {
 
        const ENQUEUE_FUDGE_SEC = 60;
 
-       public function __construct( Title $title, array $params ) {
+       /**
+        * @var ParserCache
+        */
+       private $parserCache;
+
+       /**
+        * @param Title $title The title of the page for which to update category emmbership.
+        * @param string $revisionTimestamp The timestamp of the new revision that triggered the job.
+        * @return JobSpecification
+        */
+       public static function newSpec( Title $title, $revisionTimestamp ) {
+               return new JobSpecification(
+                       'categoryMembershipChange',
+                       [
+                               'pageId' => $title->getArticleID(),
+                               'revTimestamp' => $revisionTimestamp,
+                       ],
+                       [],
+                       $title
+               );
+       }
+
+       /**
+        * Constructor for use by the Job Queue infrastructure.
+        * @note Don't call this when queueing a new instance, use newSpec() instead.
+        */
+       public function __construct( ParserCache $parserCache, Title $title, array $params ) {
                parent::__construct( 'categoryMembershipChange', $title, $params );
                // Only need one job per page. Note that ENQUEUE_FUDGE_SEC handles races where an
                // older revision job gets inserted while the newer revision job is de-duplicated.
                $this->removeDuplicates = true;
+               $this->parserCache = $parserCache;
        }
 
        public function run() {
@@ -236,10 +263,12 @@ class CategoryMembershipChangeJob extends Job {
                $options = $page->makeParserOptions( 'canonical' );
                $options->setTimestamp( $parseTimestamp );
 
-               // This could possibly use the parser cache if it checked the revision ID,
-               // but that's more complicated than it's worth.
-               $output = $renderer->getRenderedRevision( $rev->getRevisionRecord(), $options )
-                       ->getRevisionParserOutput();
+               $output = $rev->isCurrent() ? $this->parserCache->get( $page, $options ) : null;
+
+               if ( !$output || $output->getCacheRevisionId() !== $rev->getId() ) {
+                       $output = $renderer->getRenderedRevision( $rev->getRevisionRecord(), $options )
+                               ->getRevisionParserOutput();
+               }
 
                // array keys will cast numeric category names to ints
                // so we need to cast them back to strings to avoid breaking things!
index fbcb3bd..9ec3d96 100644 (file)
@@ -153,6 +153,16 @@ class FormatJson {
         * which returns more comprehensive result in case of an error, and has
         * more parsing options.
         *
+        * In PHP versions before 7.1, decoding a JSON string containing an empty key
+        * without passing $assoc as true results in a return object with a property
+        * named "_empty_" (because true empty properties were not supported pre-PHP-7.1).
+        * Instead, consider passing $assoc as true to return an associative array.
+        *
+        * But be aware that in all supported PHP versions, decoding an empty JSON object
+        * with $assoc = true returns an array, not an object, breaking round-trip consistency.
+        *
+        * See https://phabricator.wikimedia.org/T206411 for more details on these quirks.
+        *
         * @param string $value The JSON string being decoded
         * @param bool $assoc When true, returned objects will be converted into associative arrays.
         *
index 36f49e0..6ce8f45 100644 (file)
@@ -438,7 +438,7 @@ class MultiHttpClient implements LoggerAwareInterface {
                if ( !$this->multiHandle ) {
                        if ( !function_exists( 'curl_multi_init' ) ) {
                                throw new Exception( "PHP cURL function curl_multi_init missing. " .
-                                                                        "Check https://www.mediawiki.org/wiki/Manual:CURL" );
+                                       "Check https://www.mediawiki.org/wiki/Manual:CURL" );
                        }
                        $cmh = curl_multi_init();
                        curl_multi_setopt( $cmh, CURLMOPT_PIPELINING, (int)$this->usePipelining );
index 9cfaf67..a270105 100644 (file)
@@ -418,7 +418,7 @@ class XmlTypeCheck {
         * We whitelist an extremely restricted subset of DTD features.
         *
         * Safe is defined as:
-        *  * Only contains entity defintions (e.g. No <!ATLIST )
+        *  * Only contains entity definitions (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;
index c6bcc7a..a7ef3d5 100644 (file)
@@ -64,7 +64,7 @@ abstract class BagOStuff implements IExpiringStore, LoggerAwareInterface {
        protected $keyspace = 'local';
        /** @var LoggerInterface */
        protected $logger;
-       /** @var callback|null */
+       /** @var callable|null */
        protected $asyncHandler;
        /** @var int Seconds */
        protected $syncTimeout;
@@ -462,7 +462,7 @@ abstract class BagOStuff implements IExpiringStore, LoggerAwareInterface {
                $fname = __METHOD__;
                $expiry = min( $expiry ?: INF, self::TTL_DAY );
                $loop = new WaitConditionLoop(
-                       function () use ( $key, $timeout, $expiry, $fname ) {
+                       function () use ( $key, $expiry, $fname ) {
                                $this->clearLastError();
                                if ( $this->add( "{$key}:lock", 1, $expiry ) ) {
                                        return true; // locked!
index a473210..abf9e8b 100644 (file)
@@ -230,7 +230,7 @@ class RedisBagOStuff extends BagOStuff {
                                        }
                                }
                        } catch ( RedisException $e ) {
-                               $this->handleException( $server, $conn, $e );
+                               $this->handleException( $conn, $e );
                                $result = false;
                        }
                }
index e7586cf..ed5c7f5 100644 (file)
@@ -1166,7 +1166,7 @@ class WANObjectCache implements IExpiringStore, LoggerAwareInterface {
         *
         * @param string $key
         * @param int $ttl
-        * @param callback $callback
+        * @param callable $callback
         * @param array $opts Options map for getWithSetCallback()
         * @param float|null &$asOf Cache generation timestamp of returned value [returned]
         * @return mixed
index 2c40c72..7865db4 100644 (file)
@@ -97,9 +97,9 @@ abstract class Database implements IDatabase, IMaintainableDatabase, LoggerAware
        protected $connLogger;
        /** @var LoggerInterface */
        protected $queryLogger;
-       /** @var callback Error logging callback */
+       /** @var callable Error logging callback */
        protected $errorLogger;
-       /** @var callback Deprecation logging callback */
+       /** @var callable Deprecation logging callback */
        protected $deprecationLogger;
 
        /** @var resource|null Database connection */
@@ -3742,7 +3742,7 @@ abstract class Database implements IDatabase, IMaintainableDatabase, LoggerAware
                                }
                        }
                        if ( $pos < 0 ) {
-                               throw new DBUnexpectedError( "Atomic section not found (for $fname)" );
+                               throw new DBUnexpectedError( $this, "Atomic section not found (for $fname)" );
                        }
                        // Remove all descendant sections and re-index the array
                        $excisedIds = [];
index 532d818..2795883 100644 (file)
@@ -1112,11 +1112,13 @@ interface IDatabase {
        /**
         * Change the current database
         *
+        * This should not be called outside LoadBalancer for connections managed by a LoadBalancer
+        *
         * @param string $db
         * @return bool True unless an exception was thrown
         * @throws DBConnectionError If databasesAreIndependent() is true and an error occurs
         * @throws DBError
-        * @deprecated Since 1.32
+        * @deprecated Since 1.32 Use selectDomain() instead
         */
        public function selectDB( $db );
 
@@ -1125,6 +1127,8 @@ interface IDatabase {
         *
         * This will throw an error for some database types if the database unspecified
         *
+        * This should not be called outside LoadBalancer for connections managed by a LoadBalancer
+        *
         * @param string|DatabaseDomain $domain
         * @since 1.32
         * @throws DBConnectionError
index 57f60ca..7987052 100644 (file)
@@ -83,6 +83,14 @@ interface ILBFactory {
         */
        public function resolveDomainID( $domain );
 
+       /**
+        * Close all connection and redefine the local domain for testing or schema creation
+        *
+        * @param DatabaseDomain|string $domain
+        * @since 1.33
+        */
+       public function redefineLocalDomain( $domain );
+
        /**
         * Create a new load balancer object. The resulting object will be untracked,
         * not chronology-protected, and the caller is responsible for cleaning it up.
@@ -322,8 +330,9 @@ interface ILBFactory {
         * Set a new table prefix for the existing local domain ID for testing
         *
         * @param string $prefix
+        * @since 1.33
         */
-       public function setDomainPrefix( $prefix );
+       public function setLocalDomainPrefix( $prefix );
 
        /**
         * Close all open database connections on all open load balancers.
index d213dc9..9a6c224 100644 (file)
@@ -618,7 +618,15 @@ abstract class LBFactory implements ILBFactory {
                $this->indexAliases = $aliases;
        }
 
+       /**
+        * @param string $prefix
+        * @deprecated Since 1.33
+        */
        public function setDomainPrefix( $prefix ) {
+               $this->setLocalDomainPrefix( $prefix );
+       }
+
+       public function setLocalDomainPrefix( $prefix ) {
                $this->localDomain = new DatabaseDomain(
                        $this->localDomain->getDatabase(),
                        null,
@@ -626,7 +634,17 @@ abstract class LBFactory implements ILBFactory {
                );
 
                $this->forEachLB( function ( ILoadBalancer $lb ) use ( $prefix ) {
-                       $lb->setDomainPrefix( $prefix );
+                       $lb->setLocalDomainPrefix( $prefix );
+               } );
+       }
+
+       public function redefineLocalDomain( $domain ) {
+               $this->closeAll();
+
+               $this->localDomain = DatabaseDomain::newFromId( $domain );
+
+               $this->forEachLB( function ( ILoadBalancer $lb ) {
+                       $lb->redefineLocalDomain( $this->localDomain );
                } );
        }
 
index 78815f2..e1a3162 100644 (file)
@@ -136,6 +136,14 @@ interface ILoadBalancer {
         */
        public function resolveDomainID( $domain );
 
+       /**
+        * Close all connection and redefine the local domain for testing or schema creation
+        *
+        * @param DatabaseDomain|string $domain
+        * @since 1.33
+        */
+       public function redefineLocalDomain( $domain );
+
        /**
         * Get the index of the reader connection, which may be a replica DB
         *
@@ -644,8 +652,9 @@ interface ILoadBalancer {
         * Set a new table prefix for the existing local domain ID for testing
         *
         * @param string $prefix
+        * @since 1.33
         */
-       public function setDomainPrefix( $prefix );
+       public function setLocalDomainPrefix( $prefix );
 
        /**
         * Make certain table names use their own database, schema, and table prefix
index 7721707..bc51726 100644 (file)
@@ -1281,6 +1281,11 @@ class LoadBalancer implements ILoadBalancer {
        }
 
        public function closeConnection( IDatabase $conn ) {
+               if ( $conn instanceof DBConnRef ) {
+                       // Avoid calling close() but still leaving the handle in the pool
+                       throw new RuntimeException( __METHOD__ . ': got DBConnRef instance.' );
+               }
+
                $serverIndex = $conn->getLBInfo( 'serverIndex' );
                foreach ( $this->conns as $type => $connsByServer ) {
                        if ( !isset( $connsByServer[$serverIndex] ) ) {
@@ -1913,7 +1918,15 @@ class LoadBalancer implements ILoadBalancer {
                $this->indexAliases = $aliases;
        }
 
+       /**
+        * @param string $prefix
+        * @deprecated Since 1.33
+        */
        public function setDomainPrefix( $prefix ) {
+               $this->setLocalDomainPrefix( $prefix );
+       }
+
+       public function setLocalDomainPrefix( $prefix ) {
                // Find connections to explicit foreign domains still marked as in-use...
                $domainsInUse = [];
                $this->forEachOpenConnection( function ( IDatabase $conn ) use ( &$domainsInUse ) {
@@ -1945,6 +1958,12 @@ class LoadBalancer implements ILoadBalancer {
                } );
        }
 
+       public function redefineLocalDomain( $domain ) {
+               $this->closeAll();
+
+               $this->setLocalDomain( DatabaseDomain::newFromId( $domain ) );
+       }
+
        /**
         * @param DatabaseDomain $domain
         */
index a5aa687..c66aa59 100644 (file)
@@ -148,7 +148,7 @@ class LogEventsList extends ContextSource {
                $formDescriptor['date'] = [
                        'type' => 'date',
                        'label-message' => 'date',
-                       'default' => sprintf( "%04d-%02d-%02d", $year, $month, $day ),
+                       'default' => $year && $month && $day ? sprintf( "%04d-%02d-%02d", $year, $month, $day ) : '',
                ];
 
                // Tag filter
@@ -174,7 +174,7 @@ class LogEventsList extends ContextSource {
 
                $context = new DerivativeContext( $this->getContext() );
                $context->setTitle( SpecialPage::getTitleFor( 'Log' ) ); // Remove subpage
-               $htmlForm = new HTMLForm( $formDescriptor, $context );
+               $htmlForm = HTMLForm::factory( 'ooui', $formDescriptor, $context );
                $htmlForm
                        ->setSubmitText( $this->msg( 'logeventslist-submit' )->text() )
                        ->setMethod( 'get' )
index fa5ebfc..739dbec 100644 (file)
@@ -444,11 +444,12 @@ class EmailNotification {
        /**
         * Does the per-user customizations to a notification e-mail (name,
         * timestamp in proper timezone, etc) and sends it out.
-        * Returns true if the mail was sent successfully.
+        * Returns Status if email was sent successfully or not (Status::newGood()
+        * or Status::newFatal() respectively).
         *
         * @param User $watchingUser
         * @param string $source
-        * @return bool
+        * @return Status
         * @private
         */
        function sendPersonalised( $watchingUser, $source ) {
index 9977f45..c32a720 100644 (file)
@@ -290,7 +290,7 @@ class Exif {
                        $this->byteOrder = 'BE'; // BE seems about twice as popular as LE in jpg's.
                }
 
-               $this->debugFile( $this->basename, __FUNCTION__, true );
+               $this->debugFile( __FUNCTION__, true );
                if ( function_exists( 'exif_read_data' ) ) {
                        Wikimedia\suppressWarnings();
                        $data = exif_read_data( $this->file, 0, true );
index 91bed4a..f7de5f5 100644 (file)
@@ -232,7 +232,7 @@ class JpegHandler extends ExifBitmapHandler {
         * @return bool
         */
        public function swapICCProfile( $filepath, array $colorSpaces,
-                                                                       array $oldProfileStrings, $profileFilepath
+               array $oldProfileStrings, $profileFilepath
        ) {
                global $wgExiftool;
 
index 010cf80..e3e7343 100644 (file)
@@ -217,7 +217,7 @@ abstract class MediaTransformOutput {
         * @return bool Success
         */
        public function streamFile( $headers = [] ) {
-               $this->streamFileWithStatus( $headers )->isOK();
+               return $this->streamFileWithStatus( $headers )->isOK();
        }
 
        /**
index 9f7f280..4b0d319 100644 (file)
@@ -295,7 +295,7 @@ class Article implements Page {
                        $content = ContentHandler::makeContent( $text, $this->getTitle() );
                } else {
                        $message = $this->getContext()->getUser()->isLoggedIn() ? 'noarticletext' : 'noarticletextanon';
-                       $content = new MessageContent( $message, null, 'parsemag' );
+                       $content = new MessageContent( $message, null );
                }
 
                return $content;
index 6c93202..2837573 100644 (file)
@@ -59,6 +59,20 @@ class WikiCategoryPage extends WikiPage {
                $pageId = $this->getTitle()->getArticleID();
                $pageProps = PageProps::getInstance()->getProperties( $this->getTitle(), 'hiddencat' );
 
-               return isset( $pageProps[$pageId] ) ? true : false;
+               return isset( $pageProps[$pageId] );
+       }
+
+       /**
+        * Checks if a category is expected to be an unused category.
+        *
+        * @since 1.33
+        *
+        * @return bool
+        */
+       public function isExpectedUnusedCategory() {
+               $pageId = $this->getTitle()->getArticleID();
+               $pageProps = PageProps::getInstance()->getProperties( $this->getTitle(), 'expectunusedcategory' );
+
+               return isset( $pageProps[$pageId] );
        }
 }
index 6a6b2a6..c7c7069 100644 (file)
@@ -26,6 +26,7 @@ use MediaWiki\MediaWikiServices;
 use MediaWiki\Revision\RevisionRecord;
 use MediaWiki\Revision\RevisionRenderer;
 use MediaWiki\Revision\RevisionStore;
+use MediaWiki\Revision\SlotRoleRegistry;
 use MediaWiki\Revision\SlotRecord;
 use MediaWiki\Storage\DerivedPageDataUpdater;
 use MediaWiki\Storage\PageUpdater;
@@ -232,6 +233,13 @@ class WikiPage implements Page, IDBAccessObject {
                return MediaWikiServices::getInstance()->getRevisionRenderer();
        }
 
+       /**
+        * @return SlotRoleRegistry
+        */
+       private function getSlotRoleRegistry() {
+               return MediaWikiServices::getInstance()->getSlotRoleRegistry();
+       }
+
        /**
         * @return ParserCache
         */
@@ -952,12 +960,17 @@ class WikiPage implements Page, IDBAccessObject {
                                // links.
                                $hasLinks = (bool)count( $editInfo->output->getLinks() );
                        } else {
-                               // NOTE: keep in sync with revisionRenderer::getLinkCount
+                               // NOTE: keep in sync with RevisionRenderer::getLinkCount
+                               // NOTE: keep in sync with DerivedPageDataUpdater::isCountable
                                $hasLinks = (bool)wfGetDB( DB_REPLICA )->selectField( 'pagelinks', 1,
                                        [ 'pl_from' => $this->getId() ], __METHOD__ );
                        }
                }
 
+               // TODO: MCR: determine $hasLinks for each slot, and use that info
+               // with that slot's Content's isCountable method. That requires per-
+               // slot ParserOutput in the ParserCache, or per-slot info in the
+               // pagelinks table.
                return $content->isCountable( $hasLinks );
        }
 
@@ -1665,6 +1678,7 @@ class WikiPage implements Page, IDBAccessObject {
                        $this, // NOTE: eventually, PageUpdater should not know about WikiPage
                        $this->getRevisionStore(),
                        $this->getRevisionRenderer(),
+                       $this->getSlotRoleRegistry(),
                        $this->getParserCache(),
                        JobQueueGroup::singleton(),
                        MessageCache::singleton(),
@@ -1769,7 +1783,8 @@ class WikiPage implements Page, IDBAccessObject {
                        $this, // NOTE: eventually, PageUpdater should not know about WikiPage
                        $this->getDerivedDataUpdater( $user, null, $forUpdate, true ),
                        $this->getDBLoadBalancer(),
-                       $this->getRevisionStore()
+                       $this->getRevisionStore(),
+                       $this->getSlotRoleRegistry()
                );
 
                $pageUpdater->setUsePageCreationLog( $wgPageCreationLog );
@@ -2729,7 +2744,7 @@ class WikiPage implements Page, IDBAccessObject {
                        // in the job queue to avoid simultaneous deletion operations would add overhead.
                        // Number of archived revisions cannot be known beforehand, because edits can be made
                        // while deletion operations are being processed, changing the number of archivals.
-                       $archivedRevisionCount = $dbw->selectField(
+                       $archivedRevisionCount = (int)$dbw->selectField(
                                'archive', 'COUNT(*)',
                                [
                                        'ar_namespace' => $this->getTitle()->getNamespace(),
index 3dc2eeb..81e23ad 100644 (file)
@@ -1452,6 +1452,8 @@ class Parser {
                } else {
                        # attempt to sanitize at least some nesting problems
                        # (T4702 and quite a few others)
+                       # This code path is buggy and deprecated!
+                       wfDeprecated( 'disabling tidy', '1.33' );
                        $tidyregs = [
                                # ''Something [http://www.cool.com cool''] -->
                                # <i>Something</i><a href="http://www.cool.com"..><i>cool></i></a>
@@ -2026,7 +2028,19 @@ class Parser {
         * @return string
         */
        public static function normalizeLinkUrl( $url ) {
-               # First, make sure unsafe characters are encoded
+               # Test for RFC 3986 IPv6 syntax
+               $scheme = '[a-z][a-z0-9+.-]*:';
+               $userinfo = '(?:[a-z0-9\-._~!$&\'()*+,;=:]|%[0-9a-f]{2})*';
+               $ipv6Host = '\\[((?:[0-9a-f:]|%3[0-A]|%[46][1-6])+)\\]';
+               if ( preg_match( "<^(?:{$scheme})?//(?:{$userinfo}@)?{$ipv6Host}(?:[:/?#].*|)$>i", $url, $m ) &&
+                       IP::isValid( rawurldecode( $m[1] ) )
+               ) {
+                       $isIPv6 = rawurldecode( $m[1] );
+               } else {
+                       $isIPv6 = false;
+               }
+
+               # Make sure unsafe characters are encoded
                $url = preg_replace_callback( '/[\x00-\x20"<>\[\\\\\]^`{|}\x7F-\xFF]/',
                        function ( $m ) {
                                return rawurlencode( $m[0] );
@@ -2058,6 +2072,16 @@ class Parser {
                $ret = self::normalizeUrlComponent(
                        substr( $url, 0, $end ), '"#%<>[\]^`{|}/?' ) . $ret;
 
+               # Fix IPv6 syntax
+               if ( $isIPv6 !== false ) {
+                       $ipv6Host = "%5B({$isIPv6})%5D";
+                       $ret = preg_replace(
+                               "<^((?:{$scheme})?//(?:{$userinfo}@)?){$ipv6Host}(?=[:/?#]|$)>i",
+                               "$1[$2]",
+                               $ret
+                       );
+               }
+
                return $ret;
        }
 
@@ -5042,9 +5066,10 @@ class Parser {
                        $ig->setShowFilename( false );
                }
                if ( isset( $params['caption'] ) ) {
-                       $caption = $params['caption'];
-                       $caption = htmlspecialchars( $caption );
-                       $caption = $this->replaceInternalLinks( $caption );
+                       // NOTE: We aren't passing a frame here or below.  Frame info
+                       // is currently opaque to Parsoid, which acts on OT_PREPROCESS.
+                       // See T107332#4030581
+                       $caption = $this->recursiveTagParse( $params['caption'] );
                        $ig->setCaptionHtml( $caption );
                }
                if ( isset( $params['perrow'] ) ) {
@@ -5500,6 +5525,40 @@ class Parser {
                # that are later expanded to html- so expand them now and
                # remove the tags
                $tooltip = $this->mStripState->unstripBoth( $tooltip );
+               # Compatibility hack!  In HTML certain entity references not terminated
+               # by a semicolon are decoded (but not if we're in an attribute; that's
+               # how link URLs get away without properly escaping & in queries).
+               # But wikitext has always required semicolon-termination of entities,
+               # so encode & where needed to avoid decode of semicolon-less entities.
+               # See T209236 and
+               # https://www.w3.org/TR/html5/syntax.html#named-character-references
+               # T210437 discusses moving this workaround to Sanitizer::stripAllTags.
+               $tooltip = preg_replace( "/
+                       &                       # 1. entity prefix
+                       (?=                     # 2. followed by:
+                       (?:                     #  a. one of the legacy semicolon-less named entities
+                               A(?:Elig|MP|acute|circ|grave|ring|tilde|uml)|
+                               C(?:OPY|cedil)|E(?:TH|acute|circ|grave|uml)|
+                               GT|I(?:acute|circ|grave|uml)|LT|Ntilde|
+                               O(?:acute|circ|grave|slash|tilde|uml)|QUOT|REG|THORN|
+                               U(?:acute|circ|grave|uml)|Yacute|
+                               a(?:acute|c(?:irc|ute)|elig|grave|mp|ring|tilde|uml)|brvbar|
+                               c(?:cedil|edil|urren)|cent(?!erdot;)|copy(?!sr;)|deg|
+                               divide(?!ontimes;)|e(?:acute|circ|grave|th|uml)|
+                               frac(?:1(?:2|4)|34)|
+                               gt(?!c(?:c|ir)|dot|lPar|quest|r(?:a(?:pprox|rr)|dot|eq(?:less|qless)|less|sim);)|
+                               i(?:acute|circ|excl|grave|quest|uml)|laquo|
+                               lt(?!c(?:c|ir)|dot|hree|imes|larr|quest|r(?:Par|i(?:e|f|));)|
+                               m(?:acr|i(?:cro|ddot))|n(?:bsp|tilde)|
+                               not(?!in(?:E|dot|v(?:a|b|c)|)|ni(?:v(?:a|b|c)|);)|
+                               o(?:acute|circ|grave|rd(?:f|m)|slash|tilde|uml)|
+                               p(?:lusmn|ound)|para(?!llel;)|quot|r(?:aquo|eg)|
+                               s(?:ect|hy|up(?:1|2|3)|zlig)|thorn|times(?!b(?:ar|)|d;)|
+                               u(?:acute|circ|grave|ml|uml)|y(?:acute|en|uml)
+                       )
+                       (?:[^;]|$))     #  b. and not followed by a semicolon
+                       # S = study, for efficiency
+                       /Sx", '&amp;', $tooltip );
                $tooltip = Sanitizer::stripAllTags( $tooltip );
 
                return $tooltip;
index de67b84..032d481 100644 (file)
@@ -57,7 +57,7 @@ class ParserOptions {
 
        /**
         * Lazy-loaded options
-        * @var callback[]
+        * @var callable[]
         */
        private static $lazyOptions = [
                'dateformat' => [ __CLASS__, 'initDateFormat' ],
index 41c6bf4..a41e7b6 100644 (file)
@@ -66,7 +66,6 @@ class RemexStripTagHandler implements TokenHandler {
                'fieldset' => true,
                'figcaption' => true,
                'figure' => true,
-               'figcaption' => true,
                'footer' => true,
                'form' => true,
                'h1' => true,
index 85c71ee..f8c3bc2 100644 (file)
@@ -349,18 +349,18 @@ class Sanitizer {
 
        /**
         * Regular expression to match HTML/XML attribute pairs within a tag.
-        * Allows some... latitude. Based on,
-        * https://www.w3.org/TR/html5/syntax.html#before-attribute-value-state
-        * Used in Sanitizer::fixTagAttributes and Sanitizer::decodeTagAttributes
+        * Based on https://www.w3.org/TR/html5/syntax.html#before-attribute-name-state
+        * Used in Sanitizer::decodeTagAttributes
         * @return string
         */
        static function getAttribsRegex() {
                if ( self::$attribsRegex === null ) {
-                       $attribFirst = "[:_\p{L}\p{N}]";
-                       $attrib = "[:_\.\-\p{L}\p{N}]";
-                       $space = '[\x09\x0a\x0c\x0d\x20]';
+                       $spaceChars = '\x09\x0a\x0c\x0d\x20';
+                       $space = "[{$spaceChars}]";
+                       $attrib = "[^{$spaceChars}\/>=]";
+                       $attribFirst = "(?:{$attrib}|=)";
                        self::$attribsRegex =
-                               "/(?:^|$space)({$attribFirst}{$attrib}*)
+                               "/({$attribFirst}{$attrib}*)
                                        ($space*=$space*
                                        (?:
                                                # The attribute value: quoted or alone
@@ -368,11 +368,29 @@ class Sanitizer {
                                                | '([^']*)(?:'|\$)
                                                | (((?!$space|>).)*)
                                        )
-                               )?(?=$space|\$)/sxu";
+                               )?/sxu";
                }
                return self::$attribsRegex;
        }
 
+       /**
+        * Lazy-initialised attribute name regex, see getAttribNameRegex()
+        */
+       private static $attribNameRegex;
+
+       /**
+        * Used in Sanitizer::decodeTagAttributes to filter attributes.
+        * @return string
+        */
+       static function getAttribNameRegex() {
+               if ( self::$attribNameRegex === null ) {
+                       $attribFirst = "[:_\p{L}\p{N}]";
+                       $attrib = "[:_\.\-\p{L}\p{N}]";
+                       self::$attribNameRegex = "/^({$attribFirst}{$attrib}*)$/sxu";
+               }
+               return self::$attribNameRegex;
+       }
+
        /**
         * Return the various lists of recognized tags
         * @param array $extratags For any extra tags to include
@@ -495,6 +513,7 @@ class Sanitizer {
                $bits = explode( '<', $text );
                $text = str_replace( '>', '&gt;', array_shift( $bits ) );
                if ( !MWTidy::isEnabled() ) {
+                       wfDeprecated( 'disabling tidy', '1.33' );
                        $tagstack = $tablestack = [];
                        foreach ( $bits as $x ) {
                                $regs = [];
@@ -1433,18 +1452,24 @@ class Sanitizer {
                        return [];
                }
 
-               $attribs = [];
                $pairs = [];
                if ( !preg_match_all(
                        self::getAttribsRegex(),
                        $text,
                        $pairs,
                        PREG_SET_ORDER ) ) {
-                       return $attribs;
+                       return [];
                }
 
+               $attribs = [];
                foreach ( $pairs as $set ) {
                        $attribute = strtolower( $set[1] );
+
+                       // Filter attribute names with unacceptable characters
+                       if ( !preg_match( self::getAttribNameRegex(), $attribute ) ) {
+                               continue;
+                       }
+
                        $value = self::getTagAttributeCallback( $set );
 
                        // Normalize whitespace
index 837e959..3c56535 100644 (file)
@@ -22,6 +22,7 @@
 
 use Cdb\Reader as CdbReader;
 use MediaWiki\MediaWikiServices;
+use Wikimedia\PasswordBlacklist;
 
 /**
  * Functions to check passwords against a policy requirement
@@ -86,7 +87,7 @@ class PasswordPolicyChecks {
                $username = $user->getName();
                $contLang = MediaWikiServices::getInstance()->getContentLanguage();
                if (
-                       $policyVal && $contLang->lc( $password ) === $contLang->lc( $username )
+                       $policyVal && hash_equals( $contLang->lc( $username ), $contLang->lc( $password ) )
                ) {
                        $status->error( 'password-name-match' );
                }
@@ -109,12 +110,15 @@ class PasswordPolicyChecks {
                $status = Status::newGood();
                $username = $user->getName();
                if ( $policyVal ) {
-                       if ( isset( $blockedLogins[$username] ) && $password == $blockedLogins[$username] ) {
+                       if (
+                               isset( $blockedLogins[$username] ) &&
+                               hash_equals( $blockedLogins[$username], $password )
+                       ) {
                                $status->error( 'password-login-forbidden' );
                        }
 
                        // Example from ApiChangeAuthenticationRequest
-                       if ( $password === 'ExamplePassword' ) {
+                       if ( hash_equals( 'ExamplePassword', $password ) ) {
                                $status->error( 'password-login-forbidden' );
                        }
                }
@@ -167,4 +171,25 @@ class PasswordPolicyChecks {
                return $status;
        }
 
+       /**
+        * Ensure the password isn't in the list of passwords blacklisted by the
+        * wikimedia/password-blacklist library
+        *
+        * @param bool $policyVal Whether to apply this policy
+        * @param User $user
+        * @param string $password
+        *
+        * @since 1.33
+        *
+        * @return Status
+        */
+       public static function checkPasswordNotInLargeBlacklist( $policyVal, User $user, $password ) {
+               $status = Status::newGood();
+               if ( $policyVal && PasswordBlacklist\PasswordBlacklist::isBlacklisted( $password ) ) {
+                       $status->error( 'passwordinlargeblacklist' );
+               }
+
+               return $status;
+       }
+
 }
index c552506..769954d 100644 (file)
@@ -796,6 +796,7 @@ class DefaultPreferencesFactory implements PreferencesFactory {
                        'section' => 'rendering/timeoffset',
                        'id' => 'wpTimeCorrection',
                        'filter' => TimezoneFilter::class,
+                       'placeholder-message' => 'timezone-useoffset-placeholder',
                ];
        }
 
@@ -961,7 +962,7 @@ class DefaultPreferencesFactory implements PreferencesFactory {
                $defaultPreferences['hideminor'] = [
                        'type' => 'toggle',
                        'label-message' => 'tog-hideminor',
-                       'section' => 'rc/advancedrc',
+                       'section' => 'rc/changesrc',
                ];
                $defaultPreferences['rcfilters-rc-collapsed'] = [
                        'type' => 'api',
@@ -990,14 +991,14 @@ class DefaultPreferencesFactory implements PreferencesFactory {
                        $defaultPreferences['hidecategorization'] = [
                                'type' => 'toggle',
                                'label-message' => 'tog-hidecategorization',
-                               'section' => 'rc/advancedrc',
+                               'section' => 'rc/changesrc',
                        ];
                }
 
                if ( $user->useRCPatrol() ) {
                        $defaultPreferences['hidepatrolled'] = [
                                'type' => 'toggle',
-                               'section' => 'rc/advancedrc',
+                               'section' => 'rc/changesrc',
                                'label-message' => 'tog-hidepatrolled',
                        ];
                }
@@ -1005,7 +1006,7 @@ class DefaultPreferencesFactory implements PreferencesFactory {
                if ( $user->useNPPatrol() ) {
                        $defaultPreferences['newpageshidepatrolled'] = [
                                'type' => 'toggle',
-                               'section' => 'rc/advancedrc',
+                               'section' => 'rc/changesrc',
                                'label-message' => 'tog-newpageshidepatrolled',
                        ];
                }
@@ -1020,7 +1021,7 @@ class DefaultPreferencesFactory implements PreferencesFactory {
 
                $defaultPreferences['rcenhancedfilters-disable'] = [
                        'type' => 'toggle',
-                       'section' => 'rc/optoutrc',
+                       'section' => 'rc/advancedrc',
                        'label-message' => 'rcfilters-preference-label',
                        'help-message' => 'rcfilters-preference-help',
                ];
@@ -1091,27 +1092,27 @@ class DefaultPreferencesFactory implements PreferencesFactory {
                ];
                $defaultPreferences['watchlisthideminor'] = [
                        'type' => 'toggle',
-                       'section' => 'watchlist/advancedwatchlist',
+                       'section' => 'watchlist/changeswatchlist',
                        'label-message' => 'tog-watchlisthideminor',
                ];
                $defaultPreferences['watchlisthidebots'] = [
                        'type' => 'toggle',
-                       'section' => 'watchlist/advancedwatchlist',
+                       'section' => 'watchlist/changeswatchlist',
                        'label-message' => 'tog-watchlisthidebots',
                ];
                $defaultPreferences['watchlisthideown'] = [
                        'type' => 'toggle',
-                       'section' => 'watchlist/advancedwatchlist',
+                       'section' => 'watchlist/changeswatchlist',
                        'label-message' => 'tog-watchlisthideown',
                ];
                $defaultPreferences['watchlisthideanons'] = [
                        'type' => 'toggle',
-                       'section' => 'watchlist/advancedwatchlist',
+                       'section' => 'watchlist/changeswatchlist',
                        'label-message' => 'tog-watchlisthideanons',
                ];
                $defaultPreferences['watchlisthideliu'] = [
                        'type' => 'toggle',
-                       'section' => 'watchlist/advancedwatchlist',
+                       'section' => 'watchlist/changeswatchlist',
                        'label-message' => 'tog-watchlisthideliu',
                ];
 
@@ -1135,7 +1136,7 @@ class DefaultPreferencesFactory implements PreferencesFactory {
                if ( $this->config->get( 'RCWatchCategoryMembership' ) ) {
                        $defaultPreferences['watchlisthidecategorization'] = [
                                'type' => 'toggle',
-                               'section' => 'watchlist/advancedwatchlist',
+                               'section' => 'watchlist/changeswatchlist',
                                'label-message' => 'tog-watchlisthidecategorization',
                        ];
                }
@@ -1143,7 +1144,7 @@ class DefaultPreferencesFactory implements PreferencesFactory {
                if ( $user->useRCPatrol() ) {
                        $defaultPreferences['watchlisthidepatrolled'] = [
                                'type' => 'toggle',
-                               'section' => 'watchlist/advancedwatchlist',
+                               'section' => 'watchlist/changeswatchlist',
                                'label-message' => 'tog-watchlisthidepatrolled',
                        ];
                }
@@ -1174,7 +1175,7 @@ class DefaultPreferencesFactory implements PreferencesFactory {
                                // tog-watchrollback
                                $defaultPreferences[$pref] = [
                                        'type' => 'toggle',
-                                       'section' => 'watchlist/advancedwatchlist',
+                                       'section' => 'watchlist/pageswatchlist',
                                        'label-message' => "tog-$pref",
                                ];
                        }
@@ -1201,7 +1202,7 @@ class DefaultPreferencesFactory implements PreferencesFactory {
 
                $defaultPreferences['wlenhancedfilters-disable'] = [
                        'type' => 'toggle',
-                       'section' => 'watchlist/optoutwatchlist',
+                       'section' => 'watchlist/advancedwatchlist',
                        'label-message' => 'rcfilters-watchlist-preference-label',
                        'help-message' => 'rcfilters-watchlist-preference-help',
                ];
index e43b3b8..07fab78 100644 (file)
@@ -46,6 +46,7 @@ class ExtensionProcessor implements Processor {
                'PasswordPolicy',
                'RateLimits',
                'RawHtmlMessages',
+               'ReauthenticateTime',
                'RecentChangesFlags',
                'RemoveCredentialsBlacklist',
                'RemoveGroups',
index d9c369d..ef11628 100644 (file)
@@ -292,7 +292,7 @@ class ResourceLoaderImage {
         * @return string New SVG file data
         */
        protected function variantize( $variantConf, ResourceLoaderContext $context ) {
-               $dom = new DomDocument;
+               $dom = new DOMDocument;
                $dom->loadXML( file_get_contents( $this->getPath( $context ) ) );
                $root = $dom->documentElement;
                $wrapper = $dom->createElement( 'g' );
@@ -315,7 +315,7 @@ class ResourceLoaderImage {
         * @return string Massaged SVG image data
         */
        protected function massageSvgPathdata( $svg ) {
-               $dom = new DomDocument;
+               $dom = new DOMDocument;
                $dom->loadXML( $svg );
                foreach ( $dom->getElementsByTagName( 'path' ) as $node ) {
                        $pathData = $node->getAttribute( 'd' );
index a8bf814..19fe0c3 100644 (file)
@@ -120,14 +120,17 @@ class RevisionDeleteUser {
                        $actorId = $dbw->selectField( 'actor', 'actor_id', [ 'actor_name' => $name ], __METHOD__ );
                        if ( $actorId ) {
                                # Hide name from live edits
-                               $subquery = $dbw->selectSQLText(
+                               $ids = $dbw->selectFieldValues(
                                        'revision_actor_temp', 'revactor_rev', [ 'revactor_actor' => $actorId ], __METHOD__
                                );
-                               $dbw->update(
-                                       'revision',
-                                       [ self::buildSetBitDeletedField( 'rev_deleted', $op, $delUser, $dbw ) ],
-                                       [ "rev_id IN ($subquery)" ],
-                                       __METHOD__ );
+                               if ( $ids ) {
+                                       $dbw->update(
+                                               'revision',
+                                               [ self::buildSetBitDeletedField( 'rev_deleted', $op, $delUser, $dbw ) ],
+                                               [ 'rev_id' => $ids ],
+                                               __METHOD__
+                                       );
+                               }
 
                                # Hide name from deleted edits
                                $dbw->update(
index 93f8d23..54bfd28 100644 (file)
@@ -30,7 +30,7 @@ use Wikimedia\Rdbms\IDatabase;
  */
 abstract class SearchDatabase extends SearchEngine {
        /**
-        * @var IDatabase Slave database for reading from for results
+        * @var IDatabase Replica database from which to read results
         */
        protected $db;
 
index cb1f831..f1da246 100644 (file)
@@ -80,7 +80,7 @@ class SearchSuggestionSet {
 
        /**
         * Call array_map on the suggestions array
-        * @param callback $callback
+        * @param callable $callback
         * @return array
         */
        public function map( $callback ) {
@@ -89,7 +89,7 @@ class SearchSuggestionSet {
 
        /**
         * Filter the suggestions array
-        * @param callback $callback Callable accepting single SearchSuggestion
+        * @param callable $callback Callable accepting single SearchSuggestion
         *  instance returning bool false to remove the item.
         * @return int The number of suggestions removed
         */
index 1b91c89..3247f1d 100644 (file)
@@ -438,6 +438,7 @@ abstract class Skin extends ContextSource {
         */
        function getPageClasses( $title ) {
                $numeric = 'ns-' . $title->getNamespace();
+               $user = $this->getUser();
 
                if ( $title->isSpecialPage() ) {
                        $type = 'ns-special';
@@ -449,10 +450,16 @@ abstract class Skin extends ContextSource {
                        } else {
                                $type .= ' mw-invalidspecialpage';
                        }
-               } elseif ( $title->isTalkPage() ) {
-                       $type = 'ns-talk';
                } else {
-                       $type = 'ns-subject';
+                       if ( $title->isTalkPage() ) {
+                               $type = 'ns-talk';
+                       } else {
+                               $type = 'ns-subject';
+                       }
+                       // T208315: add HTML class when the user can edit the page
+                       if ( $title->quickUserCan( 'edit', $user ) ) {
+                               $type .= ' mw-editable';
+                       }
                }
 
                $name = Sanitizer::escapeClass( 'page-' . $title->getPrefixedText() );
index 1476e85..8466399 100644 (file)
@@ -254,7 +254,7 @@ abstract class AuthManagerSpecialPage extends SpecialPage {
 
                $allReqs = AuthManager::singleton()->getAuthenticationRequests(
                        $this->authAction, $this->getUser() );
-               $this->authRequests = array_filter( $allReqs, function ( $req ) use ( $subPage ) {
+               $this->authRequests = array_filter( $allReqs, function ( $req ) {
                        return !in_array( get_class( $req ), $this->getRequestBlacklist(), true );
                } );
        }
index 4201f80..1bb995a 100644 (file)
@@ -1279,7 +1279,7 @@ abstract class ChangesListSpecialPage extends SpecialPage {
                        $this->getOutput()->redirect( $this->getPageTitle()->getCanonicalURL( $query ) );
                }
 
-               $opts->validateIntBounds( 'limit', 0, 5000 );
+               $opts->validateIntBounds( 'limit', 0, 1000 );
                $opts->validateBounds( 'days', 0, $this->getConfig()->get( 'RCMaxAge' ) / ( 3600 * 24 ) );
        }
 
index 6b9b9d4..ea4cd22 100644 (file)
@@ -171,6 +171,10 @@ class SpecialBlock extends FormSpecialPage {
                                'exists' => true,
                                'max' => 10,
                                'cssclass' => 'mw-block-page-restrictions',
+                               'showMissing' => false,
+                               'input' => [
+                                       'autocomplete' => false
+                               ],
                        ];
                }
 
index 4587d40..619665b 100644 (file)
@@ -117,6 +117,8 @@ class SpecialExpandTemplates extends SpecialPage {
                        $config = $this->getConfig();
                        if ( MWTidy::isEnabled() && $options->getTidy() ) {
                                $tmp = MWTidy::tidy( $tmp );
+                       } else {
+                               wfDeprecated( 'disabling tidy', '1.33' );
                        }
 
                        $out->addHTML( $tmp );
index 513e7a9..ef61ac5 100644 (file)
@@ -378,7 +378,6 @@ class SpecialExport extends SpecialPage {
                }
 
                /* Ok, let's get to it... */
-               $lb = false;
                $db = wfGetDB( DB_REPLICA );
 
                $exporter = new WikiExporter( $db, $history );
@@ -406,10 +405,6 @@ class SpecialExport extends SpecialPage {
                }
 
                $exporter->closeStream();
-
-               if ( $lb ) {
-                       $lb->closeAll();
-               }
        }
 
        /**
index ef95254..d08fe5c 100644 (file)
@@ -69,7 +69,7 @@ class LinkSearchPage extends QueryPage {
                        }
                }
 
-               $target2 = $target;
+               $target2 = Parser::normalizeLinkUrl( $target );
                // Get protocol, default is http://
                $protocol = 'http://';
                $bits = wfParseUrl( $target );
@@ -128,7 +128,7 @@ class LinkSearchPage extends QueryPage {
 
                if ( $target != '' ) {
                        $this->setParams( [
-                               'query' => Parser::normalizeLinkUrl( $target2 ),
+                               'query' => $target2,
                                'namespace' => $namespace,
                                'protocol' => $protocol ] );
                        parent::execute( $par );
@@ -146,37 +146,6 @@ class LinkSearchPage extends QueryPage {
                return false;
        }
 
-       /**
-        * Return an appropriately formatted LIKE query and the clause
-        *
-        * @param string $query Search pattern to search for
-        * @param string $prot Protocol, e.g. 'http://'
-        *
-        * @return array
-        */
-       static function mungeQuery( $query, $prot ) {
-               $field = 'el_index';
-               $dbr = wfGetDB( DB_REPLICA );
-
-               if ( $query === '*' && $prot !== '' ) {
-                       // Allow queries like 'ftp://*' to find all ftp links
-                       $rv = [ $prot, $dbr->anyString() ];
-               } else {
-                       $rv = LinkFilter::makeLikeArray( $query, $prot );
-               }
-
-               if ( $rv === false ) {
-                       // LinkFilter doesn't handle wildcard in IP, so we'll have to munge here.
-                       $pattern = '/^(:?[0-9]{1,3}\.)+\*\s*$|^(:?[0-9]{1,3}\.){3}[0-9]{1,3}:[0-9]*\*\s*$/';
-                       if ( preg_match( $pattern, $query ) ) {
-                               $rv = [ $prot . rtrim( $query, " \t*" ), $dbr->anyString() ];
-                               $field = 'el_to';
-                       }
-               }
-
-               return [ $rv, $field ];
-       }
-
        function linkParameters() {
                $params = [];
                $params['target'] = $this->mProt . $this->mQuery;
@@ -189,16 +158,29 @@ class LinkSearchPage extends QueryPage {
 
        public function getQueryInfo() {
                $dbr = wfGetDB( DB_REPLICA );
-               // strip everything past first wildcard, so that
-               // index-based-only lookup would be done
-               list( $this->mungedQuery, $clause ) = self::mungeQuery( $this->mQuery, $this->mProt );
+
+               if ( $this->mQuery === '*' && $this->mProt !== '' ) {
+                       $this->mungedQuery = [
+                               'el_index_60' . $dbr->buildLike( $this->mProt, $dbr->anyString() ),
+                       ];
+               } else {
+                       $this->mungedQuery = LinkFilter::getQueryConditions( $this->mQuery, [
+                               'protocol' => $this->mProt,
+                               'oneWildcard' => true,
+                               'db' => $dbr
+                       ] );
+               }
                if ( $this->mungedQuery === false ) {
                        // Invalid query; return no results
                        return [ 'tables' => 'page', 'fields' => 'page_id', 'conds' => '0=1' ];
                }
 
-               $stripped = LinkFilter::keepOneWildcard( $this->mungedQuery );
-               $like = $dbr->buildLike( $stripped );
+               $orderBy = [];
+               if ( !isset( $this->mungedQuery['el_index_60'] ) ) {
+                       $orderBy[] = 'el_index_60';
+               }
+               $orderBy[] = 'el_id';
+
                $retval = [
                        'tables' => [ 'page', 'externallinks' ],
                        'fields' => [
@@ -207,11 +189,13 @@ class LinkSearchPage extends QueryPage {
                                'value' => 'el_index',
                                'url' => 'el_to'
                        ],
-                       'conds' => [
-                               'page_id = el_from',
-                               "$clause $like"
-                       ],
-                       'options' => [ 'USE INDEX' => $clause ]
+                       'conds' => array_merge(
+                               [
+                                       'page_id = el_from',
+                               ],
+                               $this->mungedQuery
+                       ),
+                       'options' => [ 'ORDER BY' => $orderBy ]
                ];
 
                if ( $this->mNs !== null && !$this->getConfig()->get( 'MiserMode' ) ) {
@@ -248,9 +232,7 @@ class LinkSearchPage extends QueryPage {
 
        /**
         * Override to squash the ORDER BY.
-        * We do a truncated index search, so the optimizer won't trust
-        * it as good enough for optimizing sort. The implicit ordering
-        * from the scan will usually do well enough for our needs.
+        * Not much point in descending order here.
         * @return array
         */
        function getOrderFields() {
index 5cbad8a..3ce786e 100644 (file)
@@ -137,8 +137,9 @@ class MovePageForm extends UnlistedSpecialPage {
         * @param array $err Error messages. Each item is an error message.
         *    It may either be a string message name or array message name and
         *    parameters, like the second argument to OutputPage::wrapWikiMsg().
+        * @param bool $isPermError Whether the error message is about user permissions.
         */
-       function showForm( $err ) {
+       function showForm( $err, $isPermError = false ) {
                $this->getSkin()->setRelevantTitle( $this->oldTitle );
 
                $out = $this->getOutput();
@@ -235,9 +236,13 @@ class MovePageForm extends UnlistedSpecialPage {
                }
 
                if ( count( $err ) ) {
-                       $action_desc = $this->msg( 'action-move' )->plain();
-                       $errMsgHtml = $this->msg( 'permissionserrorstext-withaction',
-                               count( $err ), $action_desc )->parseAsBlock();
+                       if ( $isPermError ) {
+                               $action_desc = $this->msg( 'action-move' )->plain();
+                               $errMsgHtml = $this->msg( 'permissionserrorstext-withaction',
+                                       count( $err ), $action_desc )->parseAsBlock();
+                       } else {
+                               $errMsgHtml = $this->msg( 'cannotmove', count( $err ) )->parseAsBlock();
+                       }
 
                        if ( count( $err ) == 1 ) {
                                $errMsg = $err[0];
@@ -542,7 +547,7 @@ class MovePageForm extends UnlistedSpecialPage {
                        $permErrors = $nt->getUserPermissionsErrors( 'delete', $user );
                        if ( count( $permErrors ) ) {
                                # Only show the first error
-                               $this->showForm( $permErrors );
+                               $this->showForm( $permErrors, true );
 
                                return;
                        }
@@ -596,7 +601,7 @@ class MovePageForm extends UnlistedSpecialPage {
 
                $permStatus = $mp->checkPermissions( $user, $this->reason );
                if ( !$permStatus->isOK() ) {
-                       $this->showForm( $permStatus->getErrorsArray() );
+                       $this->showForm( $permStatus->getErrorsArray(), true );
                        return;
                }
 
index 7661f28..50f3710 100644 (file)
@@ -205,7 +205,7 @@ class SpecialRevisionDelete extends UnlistedSpecialPage {
 
                # Either submit or create our form
                if ( $this->mIsAllowed && $this->submitClicked ) {
-                       $this->submit( $request );
+                       $this->submit();
                } else {
                        $this->showForm();
                }
index 1469742..2577a10 100644 (file)
@@ -39,7 +39,7 @@ class UnusedCategoriesPage extends QueryPage {
 
        public function getQueryInfo() {
                return [
-                       'tables' => [ 'page', 'categorylinks' ],
+                       'tables' => [ 'page', 'categorylinks', 'page_props' ],
                        'fields' => [
                                'namespace' => 'page_namespace',
                                'title' => 'page_title',
@@ -48,9 +48,16 @@ class UnusedCategoriesPage extends QueryPage {
                        'conds' => [
                                'cl_from IS NULL',
                                'page_namespace' => NS_CATEGORY,
-                               'page_is_redirect' => 0
+                               'page_is_redirect' => 0,
+                               'pp_page IS NULL'
                        ],
-                       'join_conds' => [ 'categorylinks' => [ 'LEFT JOIN', 'cl_to = page_title' ] ]
+                       'join_conds' => [
+                               'categorylinks' => [ 'LEFT JOIN', 'cl_to = page_title' ],
+                               'page_props' => [ 'LEFT JOIN', [
+                                       'page_id = pp_page',
+                                       'pp_propname' => 'expectunusedcategory'
+                               ] ]
+                       ]
                ];
        }
 
index 0ca6f93..0fc6e13 100644 (file)
@@ -155,7 +155,7 @@ class SpecialWatchlist extends ChangesListSpecialPage {
                                        'activeValue' => false,
                                        'default' => $this->getUser()->getBoolOption( 'extendwatchlist' ),
                                        'queryCallable' => function ( $specialClassName, $ctx, $dbr, &$tables,
-                                                                                                 &$fields, &$conds, &$query_options, &$join_conds ) {
+                                                       &$fields, &$conds, &$query_options, &$join_conds ) {
                                                $nonRevisionTypes = [ RC_LOG ];
                                                Hooks::run( 'SpecialWatchlistGetNonRevisionTypes', [ &$nonRevisionTypes ] );
                                                if ( $nonRevisionTypes ) {
@@ -211,7 +211,7 @@ class SpecialWatchlist extends ChangesListSpecialPage {
                        ],
                        'default' => ChangesListStringOptionsFilterGroup::NONE,
                        'queryCallable' => function ( $specialPageClassName, $context, $dbr,
-                                                                                 &$tables, &$fields, &$conds, &$query_options, &$join_conds, $selectedValues ) {
+                                       &$tables, &$fields, &$conds, &$query_options, &$join_conds, $selectedValues ) {
                                if ( $selectedValues === [ 'seen' ] ) {
                                        $conds[] = $dbr->makeList( [
                                                'wl_notificationtimestamp IS NULL',
index bf4d9af..81abf1c 100644 (file)
@@ -227,8 +227,7 @@ class PreferencesFormOOUI extends OOUIHTMLForm {
         * @return string
         */
        function getLegend( $key ) {
-               $aliasKey = ( $key === 'optoutwatchlist' || $key === 'optoutrc' ) ? 'opt-out' : $key;
-               $legend = parent::getLegend( $aliasKey );
+               $legend = parent::getLegend( $key );
                Hooks::run( 'PreferencesGetLegend', [ $this, $key, &$legend ] );
                return $legend;
        }
index 552e92f..506cd3c 100644 (file)
@@ -149,14 +149,17 @@ class ActiveUsersPager extends UsersPager {
                // is done in two queries to avoid huge quicksorts and to make COUNT(*) correct.
                $dbr = $this->getDatabase();
                $res = $dbr->select( 'ipblocks',
-                       [ 'ipb_user', 'MAX(ipb_deleted) AS block_status' ],
+                       [ 'ipb_user', 'MAX(ipb_deleted) AS deleted, MAX(ipb_sitewide) AS sitewide' ],
                        [ 'ipb_user' => $uids ],
                        __METHOD__,
                        [ 'GROUP BY' => [ 'ipb_user' ] ]
                );
                $this->blockStatusByUid = [];
                foreach ( $res as $row ) {
-                       $this->blockStatusByUid[$row->ipb_user] = $row->block_status; // 0 or 1
+                       $this->blockStatusByUid[$row->ipb_user] = [
+                               'deleted' => $row->deleted,
+                               'sitewide' => $row->sitewide,
+                       ];
                }
                $this->mResult->seek( 0 );
        }
@@ -181,13 +184,20 @@ class ActiveUsersPager extends UsersPager {
 
                $item = $lang->specialList( $ulinks, $groups );
 
+               // If there is a block, 'deleted' and 'sitewide' are both set on
+               // $this->blockStatusByUid[$row->user_id].
+               $blocked = '';
                $isBlocked = isset( $this->blockStatusByUid[$row->user_id] );
-               if ( $isBlocked && $this->blockStatusByUid[$row->user_id] == 1 ) {
-                       $item = "<span class=\"deleted\">$item</span>";
+               if ( $isBlocked ) {
+                       if ( $this->blockStatusByUid[$row->user_id]['deleted'] == 1 ) {
+                               $item = "<span class=\"deleted\">$item</span>";
+                       }
+                       if ( $this->blockStatusByUid[$row->user_id]['sitewide'] == 1 ) {
+                               $blocked = ' ' . $this->msg( 'listusers-blocked', $userName )->escaped();
+                       }
                }
                $count = $this->msg( 'activeusers-count' )->numParams( $row->recentedits )
                        ->params( $userName )->numParams( $this->RCMaxAge )->escaped();
-               $blocked = $isBlocked ? ' ' . $this->msg( 'listusers-blocked', $userName )->escaped() : '';
 
                return Html::rawElement( 'li', [], "{$item} [{$count}]{$blocked}" );
        }
index 74ec6b5..e8a7d2d 100644 (file)
@@ -224,7 +224,7 @@ class BlockListPager extends TablePager {
                                                'ul',
                                                [],
                                                implode( '', array_map( function ( $prop ) {
-                                                       return HTML::rawElement(
+                                                       return Html::rawElement(
                                                                'li',
                                                                [],
                                                                $prop
@@ -264,7 +264,7 @@ class BlockListPager extends TablePager {
                                continue;
                        }
 
-                       $items[] = HTML::rawElement(
+                       $items[] = Html::rawElement(
                                'li',
                                [],
                                Linker::link( $restriction->getTitle() )
index 18da235..5cfc437 100644 (file)
@@ -525,7 +525,7 @@ class ContribsPager extends RangeChronologicalPager {
                        }
 
                        $lang = $this->getLanguage();
-                       $comment = $lang->getDirMark() . Linker::revComment( $rev, false, true );
+                       $comment = $lang->getDirMark() . Linker::revComment( $rev, false, true, false );
                        $date = $lang->userTimeAndDate( $row->rev_timestamp, $user );
                        if ( $rev->userCan( Revision::DELETED_TEXT, $user ) ) {
                                $d = $linkRenderer->makeKnownLink(
@@ -568,10 +568,17 @@ class ContribsPager extends RangeChronologicalPager {
                                $del .= ' ';
                        }
 
-                       $diffHistLinks = Html::rawElement( 'ul',
-                               [ 'class' => 'mw-changeslist-link-list' ],
-                               Html::rawElement( 'li', [], $difftext ) .
-                               Html::rawElement( 'li', [], $histlink )
+                       // While it might be tempting to use a list here
+                       // this would result in clutter and slows down navigating the content
+                       // in assistive technology.
+                       // See https://phabricator.wikimedia.org/T205581#4734812
+                       $diffHistLinks = Html::rawElement( 'span',
+                               [ 'class' => 'mw-changeslist-links' ],
+                               // The spans are needed to ensure the dividing '|' elements are not
+                               // themselves styled as links.
+                               Html::rawElement( 'span', [], $difftext ) .
+                               ' ' . // Space needed for separating two words.
+                               Html::rawElement( 'span', [], $histlink )
                        );
 
                        # Tags, if any.
index f16a5cb..b85bc2f 100644 (file)
@@ -59,8 +59,6 @@ class NewPagesPager extends ReverseChronologicalPager {
                        }
                }
 
-               $rcIndexes = [];
-
                if ( $namespace !== false ) {
                        if ( $this->opts->getValue( 'invert' ) ) {
                                $conds[] = 'rc_namespace != ' . $this->mDb->addQuotes( $namespace );
@@ -105,17 +103,11 @@ class NewPagesPager extends ReverseChronologicalPager {
                Hooks::run( 'SpecialNewpagesConditions',
                        [ &$pager, $this->opts, &$conds, &$tables, &$fields, &$join_conds ] );
 
-               $options = [];
-
-               if ( $rcIndexes ) {
-                       $options = [ 'USE INDEX' => [ 'recentchanges' => $rcIndexes ] ];
-               }
-
                $info = [
                        'tables' => $tables,
                        'fields' => $fields,
                        'conds' => $conds,
-                       'options' => $options,
+                       'options' => [],
                        'join_conds' => $join_conds
                ];
 
index bc24d26..fbf179d 100644 (file)
@@ -142,7 +142,8 @@ class UsersPager extends AlphabeticPager {
                                'user_id' => $this->creationSort ? 'user_id' : 'MAX(user_id)',
                                'edits' => 'MAX(user_editcount)',
                                'creation' => 'MIN(user_registration)',
-                               'ipb_deleted' => 'MAX(ipb_deleted)' // block/hide status
+                               'ipb_deleted' => 'MAX(ipb_deleted)', // block/hide status
+                               'ipb_sitewide' => 'MAX(ipb_sitewide)'
                        ],
                        'options' => $options,
                        'join_conds' => [
@@ -214,7 +215,8 @@ class UsersPager extends AlphabeticPager {
                        $created = $this->msg( 'usercreated', $d, $t, $row->user_name )->escaped();
                        $created = ' ' . $this->msg( 'parentheses' )->rawParams( $created )->escaped();
                }
-               $blocked = !is_null( $row->ipb_deleted ) ?
+
+               $blocked = !is_null( $row->ipb_deleted ) && $row->ipb_sitewide === '1' ?
                        ' ' . $this->msg( 'listusers-blocked', $userName )->escaped() :
                        '';
 
index ee6f250..58541b2 100644 (file)
@@ -54,11 +54,7 @@ class UploadFromChunks extends UploadFromFile {
                if ( $stash ) {
                        $this->stash = $stash;
                } else {
-                       if ( $user ) {
-                               wfDebug( __METHOD__ . " creating new UploadFromChunks instance for " . $user->getId() . "\n" );
-                       } else {
-                               wfDebug( __METHOD__ . " creating new UploadFromChunks instance with no user\n" );
-                       }
+                       wfDebug( __METHOD__ . " creating new UploadFromChunks instance for " . $user->getId() . "\n" );
                        $this->stash = new UploadStash( $this->repo, $this->user );
                }
        }
index 0bea7e3..0e04946 100644 (file)
@@ -935,7 +935,7 @@ class User implements IDBAccessObject, UserIdentity {
                if ( $s === false ) {
                        $result = null;
                } else {
-                       $result = $s->user_id;
+                       $result = (int)$s->user_id;
                }
 
                self::$idCacheByName[$name] = $result;
@@ -1824,11 +1824,11 @@ class User implements IDBAccessObject, UserIdentity {
 
        /**
         * Get blocking information
-        * @param bool $bFromSlave Whether to check the replica DB first.
+        * @param bool $bFromReplica Whether to check the replica DB first.
         *   To improve performance, non-critical checks are done against replica DBs.
         *   Check when actually saving should be done against master.
         */
-       private function getBlockedStatus( $bFromSlave = true ) {
+       private function getBlockedStatus( $bFromReplica = true ) {
                global $wgProxyWhitelist, $wgUser, $wgApplyIpBlocksToXff, $wgSoftBlockRanges;
 
                if ( -1 != $this->mBlockedby ) {
@@ -1860,7 +1860,7 @@ class User implements IDBAccessObject, UserIdentity {
                }
 
                // User/IP blocking
-               $block = Block::newFromTarget( $this, $ip, !$bFromSlave );
+               $block = Block::newFromTarget( $this, $ip, !$bFromReplica );
 
                // Cookie blocking
                if ( !$block instanceof Block ) {
@@ -1896,7 +1896,7 @@ class User implements IDBAccessObject, UserIdentity {
                        $xff = $this->getRequest()->getHeader( 'X-Forwarded-For' );
                        $xff = array_map( 'trim', explode( ',', $xff ) );
                        $xff = array_diff( $xff, [ $ip ] );
-                       $xffblocks = Block::getBlocksForIPList( $xff, $this->isAnon(), !$bFromSlave );
+                       $xffblocks = Block::getBlocksForIPList( $xff, $this->isAnon(), !$bFromReplica );
                        $block = Block::chooseBlock( $xffblocks, $xff );
                        if ( $block instanceof Block ) {
                                # Mangle the reason to alert the user that the block
@@ -2272,22 +2272,22 @@ class User implements IDBAccessObject, UserIdentity {
        /**
         * Check if user is blocked
         *
-        * @param bool $bFromSlave Whether to check the replica DB instead of
+        * @param bool $bFromReplica Whether to check the replica DB instead of
         *   the master. Hacked from false due to horrible probs on site.
         * @return bool True if blocked, false otherwise
         */
-       public function isBlocked( $bFromSlave = true ) {
-               return $this->getBlock( $bFromSlave ) instanceof Block && $this->getBlock()->prevents( 'edit' );
+       public function isBlocked( $bFromReplica = true ) {
+               return $this->getBlock( $bFromReplica ) instanceof Block && $this->getBlock()->prevents( 'edit' );
        }
 
        /**
         * Get the block affecting the user, or null if the user is not blocked
         *
-        * @param bool $bFromSlave Whether to check the replica DB instead of the master
+        * @param bool $bFromReplica Whether to check the replica DB instead of the master
         * @return Block|null
         */
-       public function getBlock( $bFromSlave = true ) {
-               $this->getBlockedStatus( $bFromSlave );
+       public function getBlock( $bFromReplica = true ) {
+               $this->getBlockedStatus( $bFromReplica );
                return $this->mBlock instanceof Block ? $this->mBlock : null;
        }
 
@@ -2295,16 +2295,29 @@ class User implements IDBAccessObject, UserIdentity {
         * Check if user is blocked from editing a particular article
         *
         * @param Title $title Title to check
-        * @param bool $fromSlave Whether to check the replica DB instead of the master
+        * @param bool $fromReplica Whether to check the replica DB instead of the master
         * @return bool
         */
-       public function isBlockedFrom( $title, $fromSlave = false ) {
+       public function isBlockedFrom( $title, $fromReplica = false ) {
                $blocked = $this->isHidden();
 
                if ( !$blocked ) {
-                       $block = $this->getBlock( $fromSlave );
+                       $block = $this->getBlock( $fromReplica );
                        if ( $block ) {
-                               $blocked = $block->preventsEdit( $title );
+                               // Special handling for a user's own talk page. The block is not aware
+                               // of the user, so this must be done here.
+                               if ( $title->equals( $this->getTalkPage() ) ) {
+                                       // If the block is sitewide, then whatever is set is what is honored.
+                                       if ( $block->isSitewide() ) {
+                                               $blocked = $block->prevents( 'editownusertalk' );
+                                       } else {
+                                               // If the block is partial, then only a true value is honored,
+                                               // otherwise fallback to the partial block settings.
+                                               $blocked = $block->prevents( 'editownusertalk' ) ?: $block->appliesToTitle( $title );
+                                       }
+                               } else {
+                                       $blocked = $block->appliesToTitle( $title );
+                               }
                        }
                }
 
index 11cc21f..15c0cf9 100644 (file)
@@ -74,7 +74,7 @@ class UIDGenerator {
                        }
                        Wikimedia\restoreWarnings();
                        if ( !preg_match( '/^[0-9a-f]{12}$/i', $nodeId ) ) {
-                               $nodeId = MWCryptRand::generateHex( 12, true );
+                               $nodeId = MWCryptRand::generateHex( 12 );
                                $nodeId[1] = dechex( hexdec( $nodeId[1] ) | 0x1 ); // set multicast bit
                        }
                        file_put_contents( $this->nodeIdFile, $nodeId ); // cache
index 8038c54..797a81f 100644 (file)
@@ -58,19 +58,25 @@ class CheckMatrixWidget extends \OOUI\Widget {
 
                // Build the table
                $table = new \OOUI\Tag( 'table' );
+               $table->addClasses( [ 'mw-htmlform-matrix mw-widget-checkMatrixWidget-matrix' ] );
+               $thead = new \OOUI\Tag( 'thead' );
+               $table->appendContent( $thead );
                $tr = new \OOUI\Tag( 'tr' );
+
                // Build the header
                $tr->appendContent( $this->getCellTag( "\u{00A0}" ) );
                foreach ( $this->columns as $columnLabel => $columnTag ) {
                        $tr->appendContent(
-                               $this->getCellTag( new \OOUI\HtmlSnippet( $columnLabel ) )
+                               $this->getCellTag( new \OOUI\HtmlSnippet( $columnLabel ), 'th' )
                        );
                }
-               $table->appendContent( $tr );
+               $thead->appendContent( $tr );
 
                // Build the options matrix
+               $tbody = new \OOUI\Tag( 'tbody' );
+               $table->appendContent( $tbody );
                foreach ( $this->rows as $rowLabel => $rowTag ) {
-                       $table->appendContent(
+                       $tbody->appendContent(
                                $this->getTableRow( $rowLabel, $rowTag )
                        );
                }
@@ -126,8 +132,8 @@ class CheckMatrixWidget extends \OOUI\Widget {
         * @param  mixed $content Content for the <td> cell
         * @return \OOUI\Tag Resulting cell
         */
-       private function getCellTag( $content ) {
-               $cell = new \OOUI\Tag( 'td' );
+       private function getCellTag( $content, $tagElement = 'td' ) {
+               $cell = new \OOUI\Tag( $tagElement );
                $cell->appendContent( $content );
                return $cell;
        }
index 95304b0..0f5710f 100644 (file)
@@ -15,12 +15,17 @@ class TitlesMultiselectWidget extends \OOUI\Widget {
        protected $titlesArray = [];
        protected $inputName = null;
        protected $inputPlaceholder = null;
+       protected $tagLimit = null;
+       protected $showMissing = null;
 
        /**
         * @param array $config Configuration options
         *   - array $config['titles'] Array of titles to use as preset data
         *   - array $config['placeholder'] Placeholder message for input
         *   - array $config['name'] Name attribute (used in forms)
+        *   - number $config['tagLimit'] Maximum number of selected titles
+        *   - bool $config['showMissing'] Show missing pages
+        *   - array $config['input'] Config options for the input widget
         */
        public function __construct( array $config = [] ) {
                parent::__construct( $config );
@@ -35,12 +40,22 @@ class TitlesMultiselectWidget extends \OOUI\Widget {
                if ( isset( $config['placeholder'] ) ) {
                        $this->inputPlaceholder = $config['placeholder'];
                }
+               if ( isset( $config['tagLimit'] ) ) {
+                       $this->tagLimit = $config['tagLimit'];
+               }
+               if ( isset( $config['showMissing'] ) ) {
+                       $this->showMissing = $config['showMissing'];
+               }
+               if ( isset( $config['input'] ) ) {
+                       $this->input = $config['input'];
+               }
 
-               $textarea = new MultilineTextInputWidget( [
+               $textarea = new MultilineTextInputWidget( array_merge( [
                        'name' => $this->inputName,
                        'value' => implode( "\n", $this->titlesArray ),
                        'rows' => 10,
-               ] );
+               ], $this->input ) );
+
                $this->appendContent( $textarea );
                $this->addClasses( [ 'mw-widgets-titlesMultiselectWidget' ] );
        }
@@ -59,6 +74,15 @@ class TitlesMultiselectWidget extends \OOUI\Widget {
                if ( $this->inputPlaceholder !== null ) {
                        $config['placeholder'] = $this->inputPlaceholder;
                }
+               if ( $this->tagLimit !== null ) {
+                       $config['tagLimit'] = $this->tagLimit;
+               }
+               if ( $this->showMissing !== null ) {
+                       $config['showMissing'] = $this->showMissing;
+               }
+               if ( $this->input !== null ) {
+                       $config['input'] = $this->input;
+               }
 
                $config['$overlay'] = true;
                return parent::getConfig( $config );
index 8be2d6a..4a330ad 100644 (file)
@@ -153,25 +153,27 @@ class ConverterRule {
                        $to = trim( $v[1] );
                        $v = trim( $v[0] );
                        $u = explode( '=>', $v, 2 );
+                       $vv = $this->mConverter->validateVariant( $v );
                        // if $to is empty (which is also used as $from in bidtable),
                        // strtr() could return a wrong result.
-                       if ( count( $u ) == 1 && $to !== '' && in_array( $v, $variants ) ) {
-                               $bidtable[$v] = $to;
+                       if ( count( $u ) == 1 && $to !== '' && $vv ) {
+                               $bidtable[$vv] = $to;
                        } elseif ( count( $u ) == 2 ) {
                                $from = trim( $u[0] );
                                $v = trim( $u[1] );
+                               $vv = $this->mConverter->validateVariant( $v );
                                // if $from is empty, strtr() could return a wrong result.
-                               if ( array_key_exists( $v, $unidtable )
-                                       && !is_array( $unidtable[$v] )
+                               if ( array_key_exists( $vv, $unidtable )
+                                       && !is_array( $unidtable[$vv] )
                                        && $from !== ''
-                                       && in_array( $v, $variants ) ) {
-                                       $unidtable[$v] = [ $from => $to ];
-                               } elseif ( $from !== '' && in_array( $v, $variants ) ) {
-                                       $unidtable[$v][$from] = $to;
+                                       && $vv ) {
+                                       $unidtable[$vv] = [ $from => $to ];
+                               } elseif ( $from !== '' && $vv ) {
+                                       $unidtable[$vv][$from] = $to;
                                }
                        }
                        // syntax error, pass
-                       if ( !isset( $this->mConverter->mVariantNames[$v] ) ) {
+                       if ( !isset( $this->mConverter->mVariantNames[$vv] ) ) {
                                $bidtable = [];
                                $unidtable = [];
                                break;
index aa287e9..0efade9 100644 (file)
@@ -1833,22 +1833,19 @@ class Language {
                while ( $hebrewMonth <= 12 ) {
                        # Calculate days in this month
                        if ( $isLeap && $hebrewMonth == 6 ) {
-                               # Adar in a leap year
-                               if ( $isLeap ) {
-                                       # Leap year - has Adar I, with 30 days, and Adar II, with 29 days
-                                       $days = 30;
+                               # Leap year - has Adar I, with 30 days, and Adar II, with 29 days
+                               $days = 30;
+                               if ( $hebrewDay <= $days ) {
+                                       # Day in Adar I
+                                       $hebrewMonth = 13;
+                               } else {
+                                       # Subtract the days of Adar I
+                                       $hebrewDay -= $days;
+                                       # Try Adar II
+                                       $days = 29;
                                        if ( $hebrewDay <= $days ) {
-                                               # Day in Adar I
-                                               $hebrewMonth = 13;
-                                       } else {
-                                               # Subtract the days of Adar I
-                                               $hebrewDay -= $days;
-                                               # Try Adar II
-                                               $days = 29;
-                                               if ( $hebrewDay <= $days ) {
-                                                       # Day in Adar II
-                                                       $hebrewMonth = 14;
-                                               }
+                                               # Day in Adar II
+                                               $hebrewMonth = 14;
                                        }
                                }
                        } elseif ( $hebrewMonth == 2 && $yearPattern == 2 ) {
index 3c8d300..8fdf4f5 100644 (file)
@@ -1176,8 +1176,21 @@ class LanguageConverter {
                        //    [1] => 'zh-hant:<span style="font-size:120%;">yyy</span>'
                        //    [2] => ''
                        //  ]
-                       $pat = '/;\s*(?=';
+                       $expandedVariants = [];
                        foreach ( $this->mVariants as $variant ) {
+                               $expandedVariants[ $variant ] = 1;
+                               // Accept standard BCP 47 names for variants as well.
+                               $expandedVariants[ LanguageCode::bcp47( $variant ) ] = 1;
+                       }
+                       // Accept old deprecated names for variants
+                       foreach ( LanguageCode::getDeprecatedCodeMapping() as $old => $new ) {
+                               if ( isset( $expandedVariants[ $new ] ) ) {
+                                       $expandedVariants[ $old ] = 1;
+                               }
+                       }
+
+                       $pat = '/;\s*(?=';
+                       foreach ( $expandedVariants as $variant => $ignore ) {
                                // zh-hans:xxx;zh-hant:yyy
                                $pat .= $variant . '\s*:|';
                                // xxx=>zh-hans:yyy; xxx=>zh-hant:zzz
index 27af14b..1da3a54 100644 (file)
@@ -64,9 +64,10 @@ class CrhConverter extends LanguageConverter {
         * @param array $flags
         */
        function __construct( Language $langobj, $maincode,
-                                                               $variants = [],
-                                                               $variantfallbacks = [],
-                                                               $flags = [] ) {
+               $variants = [],
+               $variantfallbacks = [],
+               $flags = []
+       ) {
                parent::__construct( $langobj, $maincode,
                        $variants, $variantfallbacks, $flags );
 
index f315473..170ff9a 100644 (file)
@@ -36,14 +36,16 @@ class GanConverter extends LanguageConverter {
                $variants = [],
                $variantfallbacks = [],
                $flags = [],
-               $manualLevel = [] ) {
+               $manualLevel = []
+       ) {
                $this->mDescCodeSep = ':';
                $this->mDescVarSep = ';';
                parent::__construct( $langobj, $maincode,
                        $variants,
                        $variantfallbacks,
                        $flags,
-                       $manualLevel );
+                       $manualLevel
+               );
                $names = [
                        'gan' => '原文',
                        'gan-hans' => '简体',
@@ -94,7 +96,8 @@ class LanguageGan extends LanguageZh {
                $this->mConverter = new GanConverter( $this, 'gan',
                        $variants, $variantfallbacks,
                        [],
-                       $ml );
+                       $ml
+               );
        }
 
        /**
index ea35ac8..d829ead 100644 (file)
@@ -45,9 +45,10 @@ class KkConverter extends LanguageConverter {
         * @param array $flags
         */
        function __construct( Language $langobj, $maincode,
-                                                               $variants = [],
-                                                               $variantfallbacks = [],
-                                                               $flags = [] ) {
+               $variants = [],
+               $variantfallbacks = [],
+               $flags = []
+       ) {
                parent::__construct( $langobj, $maincode,
                        $variants, $variantfallbacks, $flags );
 
@@ -315,8 +316,8 @@ class KkConverter extends LanguageConverter {
                                        // is matched the word to front vowels?
                                        // exclude a words matched to е, э, г, к, к, қ,
                                        // them should be without hamza
-                                       if ( preg_match( '/[' . $front . ']/u', $m[0] )
-                                               && !preg_match( '/[' . $excludes . ']/u', $m[0] )
+                                       if ( preg_match( '/[' . $front . ']/u', $m[0] ) &&
+                                               !preg_match( '/[' . $excludes . ']/u', $m[0] )
                                        ) {
                                                $ret .= preg_replace( '/[' . $letters . ']+/u', H_HAMZA . '$0', $m[0] );
                                        } else {
index 580f64a..31c9f46 100644 (file)
@@ -76,8 +76,8 @@ class KuConverter extends LanguageConverter {
                't' => 'ت', 'v' => 'ڤ',
                'x' => 'خ', 'y' => 'ی', 'z' => 'ز',
 
-               'B' => 'ب', 'C' => 'ج', 'Ç' => 'چ', 'D' => 'د', 'F' => 'ف', 'G' => 'گ', 'H' => 'ھ',
-               'H' => 'ہ', 'H' => 'ه', 'H' => 'ح', 'J' => 'ژ', 'K' => 'ك', 'K' => 'ک', 'L' => 'ل',
+               'B' => 'ب', 'C' => 'ج', 'Ç' => 'چ', 'D' => 'د', 'F' => 'ف', 'G' => 'گ',
+               'H' => 'ح', 'J' => 'ژ', 'K' => 'ک', 'L' => 'ل',
                'M' => 'م', 'N' => 'ن', 'P' => 'پ', 'Q' => 'ق', 'R' => 'ر', 'S' => 'س', 'Ş' => 'ش',
                'T' => 'ت', 'V' => 'ڤ', 'W' => 'و', 'X' => 'خ',
                'Y' => 'ی', 'Z' => 'ز',
index 36821b0..ba1e1b6 100644 (file)
@@ -40,7 +40,7 @@ class ShiConverter extends LanguageConverter {
                'ⴰ' => 'a', 'ⴱ' => 'b', 'ⴳ' => 'g', 'ⴷ' => 'd', 'ⴹ' => 'ḍ', 'ⴻ' => 'e',
                'ⴼ' => 'f', 'ⴽ' => 'k', 'ⵀ' => 'h', 'ⵃ' => 'ḥ', 'ⵄ' => 'ε', 'ⵅ' => 'x',
                'ⵇ' => 'q', 'ⵉ' => 'i', 'ⵊ' => 'j', 'ⵍ' => 'l', 'ⵎ' => 'm', 'ⵏ' => 'n',
-               'âµ\93' => 'u', 'âµ\94' => 'r', 'âµ\95' => 'á¹\9b', 'âµ\96' => 'γ', 'âµ\99' => 's', 'âµ\9a' => 'á¹£',
+               'ⵓ' => 'u', 'ⵔ' => 'r', 'ⵕ' => 'ṛ', 'ⵙ' => 's', 'ⵚ' => 'ṣ',
                'ⵛ' => 'š', 'ⵜ' => 't', 'ⵟ' => 'ṭ', 'ⵡ' => 'w', 'ⵢ' => 'y', 'ⵣ' => 'z',
                'ⵥ' => 'ẓ', 'ⵯ' => 'ʷ', 'ⵖ' => 'ɣ', 'ⵠ' => 'v', 'ⵒ' => 'p',
        ];
index e205dc9..0f1e456 100644 (file)
@@ -50,7 +50,6 @@ class UzConverter extends LanguageConverter {
                'т' => 't', 'Т' => 'T',
                'у' => 'u', 'У' => 'U',
                'ф' => 'f', 'Ф' => 'F',
-               'ц' => 'c', 'Ц' => 'C',
                'ў' => 'oʻ', 'Ў' => 'Oʻ',
                // note: at the beginning of a word and right after a consonant, only "s" is used
                'ц' => 'ts', 'Ц' => 'Ts',
index 27d6972..455678d 100644 (file)
@@ -34,17 +34,19 @@ class ZhConverter extends LanguageConverter {
         * @param array $manualLevel
         */
        function __construct( Language $langobj, $maincode,
-                                                               $variants = [],
-                                                               $variantfallbacks = [],
-                                                               $flags = [],
-                                                               $manualLevel = [] ) {
+               $variants = [],
+               $variantfallbacks = [],
+               $flags = [],
+               $manualLevel = []
+       ) {
                $this->mDescCodeSep = ':';
                $this->mDescVarSep = ';';
                parent::__construct( $langobj, $maincode,
-                                                                       $variants,
-                                                                       $variantfallbacks,
-                                                                       $flags,
-                                                                       $manualLevel );
+                       $variants,
+                       $variantfallbacks,
+                       $flags,
+                       $manualLevel
+               );
                $names = [
                        'zh' => '原文',
                        'zh-hans' => '简体',
@@ -143,9 +145,10 @@ class LanguageZh extends LanguageZh_hans {
                ];
 
                $this->mConverter = new ZhConverter( $this, 'zh',
-                                                               $variants, $variantfallbacks,
-                                                               [],
-                                                               $ml );
+                       $variants, $variantfallbacks,
+                       [],
+                       $ml
+               );
        }
 
        /**
index 92c1f86..bd90fc6 100644 (file)
@@ -657,12 +657,8 @@ class CrhExceptions {
                                self::WB . ')/u' => '$1ö$2ь$3',
                        '/' . self::WB . '([bcgkpşBCGKPŞ])Ö([' . Crh::L_N_CONS . '])([' . Crh::L_CONS . ']|' .
                                self::WB . ')/u' => '$1Ö$2Ь$3',
-                       '/' . self::WB . '([bcgkpşBCGKPŞ])Ö([' . Crh::L_N_CONS . '])([' . Crh::L_CONS . ']|' .
-                               self::WB . ')/u' => '$1Ö$2Ь$3',
                        '/' . self::WB . '([bcgkpşBCGKPŞ])ü([' . Crh::L_N_CONS . '])([' . Crh::L_CONS . ']|' .
                                self::WB . ')/u' => '$1ü$2ь$3',
-                       '/' . self::WB . '([bcgkpşBCGKPŞ])Ü([' . Crh::L_N_CONS . '])([' . Crh::L_CONS . ']|' .
-                               self::WB . ')/u' => '$1Ü$2Ь$3',
                        '/' . self::WB . '([bcgkpşBCGKPŞ])Ü([' . Crh::L_N_CONS . '])([' . Crh::L_CONS . ']|' .
                                self::WB . ')/u' => '$1Ü$2Ь$3',
 
index 9e45c2d..84d118e 100644 (file)
        "about": "Bhaih",
        "article": "Teunuléh",
        "newwindow": "(peuhah bak tingkap barô)",
-       "cancel": "Peubateuë",
+       "cancel": "Pubateue",
        "moredotdotdot": "Lom...",
        "morenotlisted": "Dapeuta nyoe kadang hana leungkap",
        "mypage": "Laman",
        "ns-specialprotected": "Laman kusuih h'an jeuet geupeusaneut",
        "titleprotected": "Nan nyoe ka geupeulindông nibak neuandam lé [[User:$1|$1]].\nDalèhjih nakeuh <em>$2</em>.",
        "invalidtitle-knownnamespace": "Nan nyang hana sah ngön ruweueng nan \"$2\" ngön \"$3\"",
-       "exception-nologin": "Goh lom tamong log",
+       "exception-nologin": "Goh lom neutamöng",
        "exception-nologin-text": "Droëneuh suwah [[Special:Userlogin|neutamöng]] mangat jeuët neupeuhah laman nyoë",
        "virus-unknownscanner": "Antivirus hana geuturi:",
-       "logouttext": "'''Droeneuh ka neutubiet log.'''\n\nBeuneuteupue meunyoe na padum-padum laman nyang deuh lagèe na neutamöng log, sampoe ka lheuh neupeugléh ''cache''.",
+       "logouttext": "<strong>Droeneuh ka neuteubiet.</strong>\n\nBeu neutupeue meunyo na padum-padum laman nyang leumah lagèe na neutamöng, sampoe ka neupeugléh cache browser.",
        "cannotlogoutnow-title": "H'an jeuet teubiet jinoe",
        "welcomeuser": "Seulamat trôk teuka, $1 !",
        "welcomecreation-msg": "Akun-neuh ka geupeugöt. \nDroeneuh jeuet neugantoe {{SITENAME}} [[Special:Preferences|peuatô]] meunyö neumeuh'eut.",
        "yourname": "Ureuëng ngui:",
        "userlogin-yourname": "Ureuëng ngui",
-       "userlogin-yourname-ph": "Peutamöng nan ureuëng ngui droëneuh",
+       "userlogin-yourname-ph": "Peutamöng nan ureueng ngui",
        "createacct-another-username-ph": "Pasoë nan ureuëng ngui droëneuh",
-       "yourpassword": "Lageuëm:",
-       "userlogin-yourpassword": "Lageuëm rahsia",
-       "userlogin-yourpassword-ph": "Pasoë lageuëm rahsia droëneuh",
-       "createacct-yourpassword-ph": "Pasoë lageuëm rahsia",
-       "yourpasswordagain": "Pasoë lom lageuëm rahsia:",
-       "createacct-yourpasswordagain": "Peunyo lageuëm rahsia",
-       "createacct-yourpasswordagain-ph": "Pasoë lom lageuëm rahsia",
+       "yourpassword": "Lageuem tamöng:",
+       "userlogin-yourpassword": "Lageuem tamöng",
+       "userlogin-yourpassword-ph": "Pasoe lageuem tamöng",
+       "createacct-yourpassword-ph": "Pasoe lageuem tamöng",
+       "yourpasswordagain": "Pasoe lom lageuem tamöng:",
+       "createacct-yourpasswordagain": "Peunyo lageuem tamöng",
+       "createacct-yourpasswordagain-ph": "Pasoe lom lageuem tamöng",
        "userlogin-remembermypassword": "Pubiyeuë lôn tamöng",
        "userlogin-signwithsecure": "Ngui koneksi aman",
        "cannotlogin-title": "H'an jeuet tamöng",
        "cannotloginnow-title": "H'an jeuet tamöng jinoe",
        "cannotcreateaccount-title": "H'an jeuet peugöt akun",
        "yourdomainname": "Domain droeneuh:",
-       "password-change-forbidden": "Droëneuh h‘an jeuët neuubah lageuëm rahsia bak wiki nyoë.",
+       "password-change-forbidden": "Droeneuh h'an jeuet neuubah lageuem tamöng bak wiki nyoe.",
        "externaldberror": "Na seunalah bak peusahèh basis data luwa atawa droëneuh hana geubri idin keu neupubarô akun luwa droëneuh",
        "login": "Tamöng",
        "nav-login-createaccount": "Tamöng / peugöt akun",
        "userlogin-noaccount": "Goh lom na akun?",
        "userlogin-joinproject": "Neugabông ngön {{SITENAME}}",
        "createaccount": "Peudapeuta nan barô",
-       "userlogin-resetpassword-link": "Tuwö lageuëm rahsia?",
-       "userlogin-helplink2": "Beunantu tamöng log",
+       "userlogin-resetpassword-link": "Tuwö lageuem tamöng?",
+       "userlogin-helplink2": "Beunantu tamöng",
        "userlogin-loggedin": "Droëneuh ka neutamöng seubagoë $1. Neungui blangko di yup keu neutamöng seubagoë ureuëng ngui la’én",
        "userlogin-createanother": "Peugöt akun laén",
        "createacct-emailrequired": "Alamat surat-e",
        "createacct-emailoptional": "Alamat surat-e (hana wajéb)",
        "createacct-email-ph": "Neupasoë alamat surat-e droëneuh",
        "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",
+       "createaccountmail": "Neungui lageuem tamöng beurangkapeue keu siat nyoë. Lheueh nyan neupeuét u surat-e nyang droeneuh meuh'eut",
        "createacct-realname": "Nan aseuli (hana wajéb)",
        "createacct-reason": "Alasan:",
        "createacct-reason-ph": "Pakön droëneuh neupeugöt nan ureuëng ngui la’én",
        "createacct-benefit-body1": "{{PLURAL:$1|peusaneut}}",
        "createacct-benefit-body2": "{{PLURAL:$1|$1 halaman}}",
        "createacct-benefit-body3": "{{PLURAL:$1|ureuëng tuléh}} seuneulheuëh",
-       "badretype": "Lageuëm rahsia nyang neupasoë salah.",
+       "badretype": "Lageuem tamöng nyang neupasoe salah.",
        "userexists": "Nan ureuëng ngui nyang neupasoë ka na soë ngui.\nNeupiléh nan nyang la'én.",
        "loginerror": "Salah bak tamöng",
        "createacct-error": "Pumeugöt akun hana meuhasé",
        "createaccounterror": "H'an jeuet peugöt akun: $1",
-       "nocookiesnew": "Nan ureueng ngui nyoe ka meupeugöt, tapi goh meutamöng.\n{{SITENAME}} jingui ''cookies'' keu peutamöng ureueng ngui.\n''Cookies'' droeneuh hana meupeuudép.\nNeupeuudép ''cookies'' dilèe, lheuh nyan neutamöng ngön nan ureueng ngui ngön lageuem rahsia droeneuh.",
+       "nocookiesnew": "Akun ureueng ngui nyoe ka geupeugöt, tapi droeneuh goh lom neutamöng.\n{{SITENAME}} jingui kuki keu jipeutamöng ureueng ngui.\nKuki droeneuh hana geupeuudép.\nNeupeuudép kuki dilèe, lheueh nyan neutamöng ngön nan ureueng ngui ngön lageuem tamöng barô droeneuh.",
        "noname": "Nan ureuëng ngui nyang Droënueh peutamöng hana sah.",
-       "loginsuccesstitle": "Meuhasé tamöng log",
+       "loginsuccesstitle": "Meuhasé neutamöng",
        "loginsuccess": "'''Droëneuh  jinoë ka neutamöng di {{SITENAME}} sibagoë \"$1\".'''",
        "nosuchuser": "Hana ureuëng ngui ngön nan \"$1\".\nHaraih rayek ngön haraih ubeut na peungarôh.\nNeuparéksa ijaan-neuh, atawa [[Special:CreateAccount|neupeugöt akun]].",
        "nosuchusershort": "Hana ureuëng ngui ngön nan \"$1\".\nPréksa keulayi neu’ija Droëneuh.",
        "nouserspecified": "Neupasoë nan Droëneuh.",
        "login-userblocked": "Ureuëng ngui nyoë ka teublokir, hana idin/hanjeut tamöng.",
        "wrongpassword": "Lageuëm nyang neupasoë salah. Neuci lom.",
-       "wrongpasswordempty": "Droëneuh hana neupasoë lageuëm. Neuci lom.",
+       "wrongpasswordempty": "Lageuem tamöng nyang neupasoe soh.\nNeuci lom.",
        "passwordtooshort": "Lageuëm paléng h'an harôh na {{PLURAL:$1|1 karakter|$1 karakter}}.",
-       "password-name-match": "Lageuëm Droeuneuh beubida nibak nan Ureuëng ngui.",
-       "password-login-forbidden": "Ngui nan ureuëng ngui ngön lageuëm nyoë ka jitham.",
+       "password-name-match": "Lageuem tamöng droeneuh beu bida ngön nan ureuëng ngui.",
+       "password-login-forbidden": "Meuneungui nan ureueng ngui ngön lageuem tamöng nyoë ka jitham.",
        "mailmypassword": "Atô keulayi lageuëm rahsia",
-       "passwordremindertitle": "Lageuëm seumeuntara barô keu {{SITENAME}}",
+       "passwordremindertitle": "Lageuem tamöng sijamong barô keu {{SITENAME}}",
        "passwordremindertext": "Salah sidroë (kadang Droëneuh, ngön alamat IP $1) geulakèë lageuëm barô keu {{SITENAME}} ($4). Lageuëm si'at keu ureuëng ngui \"$2\" ka geupeuna ngön ka geuatô jeuet keu \"$3\". Meunyö nyoe nakeuh meukeusud droeneuh, droeneuh peureulèë neutamöng ngön neupiléh lageuëm barô jinoe. Lageuem siat droeneuh meung abéh lam {{PLURAL:$5|siuroe|$5 uroe}}.\n\nMeunyö ureuëng la'én nyang peugöt neulakèë nyoe, atawa meunyö droeneuh ka neuingat lageuëm droeneuh, ngön droeneuh h'an ék neugantoë lé, droeneuh jeuet hana neupeureumeuën peusan nyoe ngön neulanjut neungui lageuem awaineuh.",
        "noemail": "Hana alamat surat-e nyang teucatat keu ureuëng ngui \"$1\".",
        "noemailcreate": "Droeneuh suwah neuseudia alamt surat-e nyang jeut ngui.",
        "resetpass_submit": "Atô lageuëm rahsia lheuëh nyan tamöng",
        "changepassword-success": "Lageuëm rahsia droëneuh meuhasé geugantoë!",
        "botpasswords-label-create": "Peugöt",
-       "botpasswords-label-update": "Peubarô",
+       "botpasswords-label-update": "Pubarô",
        "botpasswords-label-cancel": "Pubateue",
        "botpasswords-label-delete": "Sampôh",
-       "botpasswords-label-resetpassword": "Atô keulayi lageuem rahsia",
+       "botpasswords-label-resetpassword": "Atô keulayi lageuem tamöng",
        "resetpass_forbidden": "Lageuëm rahsia h'an jeuët geugantoë",
-       "resetpass_forbidden-reason": "Lageuëm rahsia h`an jeuët geugantoë: $1",
+       "resetpass_forbidden-reason": "Lageuem tamöng h'an jeuet geugantoe: $1",
        "resetpass-no-info": "Droëneuh suwah neutamöng mangat jeuët neu'eu laman nyoë",
        "resetpass-submit-loggedin": "Gantoë lageuëm rahsia",
        "resetpass-submit-cancel": "Pubateuë",
        "resetpass-temp-password": "Lageuem rahsia keu siat:",
        "resetpass-abort-generic": "Meuubah narit rahsia ka geupeubateuë lé ekstensi",
        "resetpass-validity-soft": "Lageuëm rahsia hana sah: $1",
-       "passwordreset": "Atô keulayi lageuëm rahsia",
+       "passwordreset": "Atô keulayi lageuem tamöng",
        "passwordreset-text-one": "Neupeuleungkap formulir nyoë keu meuatô keulayi narit rahsia",
        "passwordreset-text-many": "{{PLURAL:$1|Neupasoë saboh kutak dimeuyub nyoë keu neuteumèe narit rahsia siat rot e-surat}}",
        "passwordreset-disabled": "Meuatô narit rahsia keulayi ka geupeumaté lam wiki nyoë",
        "publishchanges-start": "Peuteubiet neuubah...",
        "preview": "Eu dilèë",
        "showpreview": "Peuleumah hasé",
-       "showdiff": "Peuleumah neuubah",
+       "showdiff": "Peuleumah nyang meuubah",
        "anoneditwarning": "<strong>Peuneugah:</strong> Droëneuh goh lom neutamong. Alamat IP-neuh jeuët leumah bak ureuëng la'én meunyö neupeusaneut sipeue-peue. Meunyö Droëneuh <strong>[$1 neutamong]</strong> atawa <strong>[$2 neudapeuta]</strong>, atra neupeusaneut jeuët teutuléh ateuëh nan Droëneuh ngön na lom meunapha'at nyang la'én.",
        "missingcommenttext": "Neupasoë beunalah di yup.",
        "summary-preview": "Eu neuringkaih neuandam:",
        "moveddeleted-notice": "Laman nyoë ka geusampôh.\nLog seunampôh, neulindông ngön peuninah keu laman nyoe na di yup nyoe keu catatan.",
        "log-fulllog": "Eu ban dum ceunatat",
        "edit-hook-aborted": "Seunampôh geupeubateuë lé kaw'ét parser.\nHana jeuneulaih.",
-       "edit-gone-missing": "Han jeut peubarô ôn.\nÔn nyoe mungkén ka geusampôh.",
+       "edit-gone-missing": "Han jeuet pubarô ôn.\nÔn nyoe mungkén ka geusampôh.",
        "edit-conflict": "Konflik peusaneut.",
        "postedit-confirmation-saved": "Neuandam droeneuh ka meukubah.",
        "edit-already-exists": "Han jeuet peugöt laman barô.\nLaman nyoe ka lheueh na.",
        "last": "sigohlom",
        "page_first": "phôn",
        "page_last": "keuneulheuëh",
-       "histlegend": "Piléh duwa teuneugön radiô, lheuëh nyan teugön teuneugön ''peubandéng'' keu pubandéng seunalén. Teugön saboh uroe buleuen keu neukalön seunalén laman bak uroe buleuen nyan.<br />(jin) = bida ngön seunalén jinoë, (akhé) = bida ngön seunalén sigohlomjih. '''b''' = peusaneut bacut, '''bot''' = peusaneut bot, → = peusaneut bideuëng, ← = ehtisa otomatis",
+       "histlegend": "Piléh duwa teuneugön radiô, lheuëh nyan teugön teuneugön ''pubandéng'' keu neupubandéng seunalén. Teugön saboh uroe buleuen keu neukalön seunalén laman bak uroe buleuen nyan.<br />(jin) = bida ngön seunalén jinoë, (akhé) = bida ngön seunalén sigohlomjih. '''b''' = peusaneut bacut, '''bot''' = peusaneut bot, → = peusaneut bideuëng, ← = ehtisa otomatis",
        "history-fieldset-title": "Mita revisi",
        "history-show-deleted": "Nyang geusampôh mantöng",
        "histfirst": "paléng trép",
        "revdelete-hide-comment": "Mohtasa neuandam",
        "revdelete-radio-same": "(bèk neugantoe)",
        "revdelete-radio-set": "Teusom",
-       "revdelete-radio-unset": "Deuih",
+       "revdelete-radio-unset": "Leumah",
        "revdelete-log": "Alasan:",
        "revdel-restore": "Gantoë neuleumah",
        "pagehist": "Riwayat laman",
        "history-title": "Riwayat geunantoë nibak \"$1\"",
        "difference-title": "Bida antara revisi nibak \"$1\"",
        "lineno": "Baréh $1:",
-       "compareselectedversions": "Peubandéng curak teupiléh",
+       "compareselectedversions": "Pubandéng rèvisi teupiléh",
        "editundo": "pubateuë",
        "diff-empty": "(Hana bida)",
        "diff-multi-sameuser": "({{PLURAL:$1|Saboh revisi antara|$1 revisi antara}} lé ureueng ngui nyang saban hana geupeuleumah)",
        "rcfilters-days-show-days": "$1 {{PLURAL:$1|uroe}}",
        "rcfilters-quickfilters": "Seunaréng teukeubah",
        "rcfilters-savedqueries-defaultlabel": "Seunaréng teukeubah",
-       "rcfilters-show-new-changes": "Peuleumah neuubah barô",
+       "rcfilters-show-new-changes": "Peuleumah nyang ban meuubah",
        "rcfilters-search-placeholder": "Saréng neuubah (ngui menu atawa plôk mita keu neusaréng nan)",
        "rcfilters-filter-editsbyself-label": "Atra lôn peusaneut",
        "rcfilters-filter-editsbyother-label": "Atra geupeusaneut lé gop",
        "rcfilters-filter-logactions-label": "Buet teucètèt",
        "rcfilters-liveupdates-button": "Ban meuubah",
        "rcnotefrom": "Di yup nyoe nakeuh {{PLURAL:$5|neuubah}} yôh <strong>$3, $4</strong> (trôk 'an <strong>$1</strong> geupeuleumah).",
-       "rclistfrom": "Peuleumah neuubah barô yôh $3 $2 kön",
+       "rclistfrom": "Peuleumah nyang ban meuubah mulayi $3 poh $2",
        "rcshowhideminor": "$1 peusaneut bacut",
        "rcshowhideminor-show": "Peuleumah",
        "rcshowhideminor-hide": "Peusom",
        "recentchangeslinked-title": "Neuubah nyang meukaw'èt ngön $1",
        "recentchangeslinked-summary": "Neupasoe saboh nan laman keu neukalon neuubah bak laman nyang mupawôt u atawa nibak laman nyan. (Keu neukalon anggèeta nibak saboh kawan, neupasoe {{ns:category}}:Nan kawan). Neuubah bak laman nyang na bak [[Special:Watchlist|dapeuta keunalön]] teutuléh <strong>teubai</strong>.",
        "recentchangeslinked-page": "Nan laman:",
-       "recentchangeslinked-to": "Peuleumah neuubah nibak laman-laman nyang mupawôt ngön laman nyang geubri",
+       "recentchangeslinked-to": "Peuleumah nyang ban meuubah bak laman nyang mupawôt ngön laman nyang geumeukeusud",
        "upload": "Peutamöng beureukaih",
        "uploadbtn": "Peutamong beureukaih",
        "reuploaddesc": "Riwang u laman peutamöng",
        "filehist-user": "Ureuëng ngui",
        "filehist-dimensions": "Dimènsi",
        "filehist-filesize": "Rayek beureukah",
-       "filehist-comment": "Seuneu'ôt",
+       "filehist-comment": "Beunalaih",
        "imagelinks": "Seuneungui beureukaih",
        "linkstoimage": "{{PLURAL:$1|laman}} di yup nyoe mupawôt u beureukaih nyoe:",
        "nolinkstoimage": "Hana laman nyang na meupawôt u beureukaih nyoe.",
        "undeletecomment": "Alasan:",
        "undelete-search-submit": "Mita",
        "namespace": "Ruweuëng nan:",
-       "invert": "Peubalék peuniléh",
+       "invert": "Pubalék peuniléh",
        "tooltip-invert": "Neuceuë kutak nyoë keu neupeusom neuubah laman lam ruweuëng nan nyang neupiléh (ngön ruweuëng nan teukaw`èt meunyö neuceuë)",
        "namespace_association": "Ruweuëng nan meuhubông",
        "tooltip-namespace_association": "Neuceuë kutak nyoë keu neupeurôh ruweuëng nan marit atawa bhaih nyang teukaw`èt ngön ruweuëng nan teupiléh",
        "mycontris": "Beuneuri",
        "anoncontribs": "Beuneuri",
        "contribsub2": "Keu {{GENDER:$3|$1}} ($2)",
-       "uctop": "(jinoë)",
+       "uctop": "jinoë",
        "month": "Mula phôn buleuën (ngön sigohlomjih)",
        "year": "Mula phôn thôn (ngön sigohlomjih)",
        "sp-contributions-newbies": "Peuleumah beuneuri atra ureuëng ban dapeuta mantöng",
        "sp-contributions-logs": "log",
        "sp-contributions-talk": "marit",
        "sp-contributions-search": "Mita soë nyang tuléh",
-       "sp-contributions-username": "Alamat IP atawa nan ureuëng ngui:",
+       "sp-contributions-username": "Alamat IP atawa nan ureueng ngui:",
        "sp-contributions-toponly": "Peuleumah geunantoe nyang baro mantong",
        "sp-contributions-newonly": "Peuleumah pumeugöt laman mantöng",
        "sp-contributions-hideminor": "Peusom peusaneut bacut",
        "tooltip-ca-nstab-category": "Kalön laman kawan",
        "tooltip-minoredit": "Peutanda nyoë sibagoë peusaneut bacut",
        "tooltip-save": "Keubah neuubah Droëneuh",
-       "tooltip-preview": "Peuleumah neuubah Droëneuh, neungui nyoë sigohlom neukeubah!",
+       "tooltip-preview": "Peuleumah nyang ban neupeusaneut. Neungui nyoë yôh goh lom neukeubah.",
        "tooltip-diff": "Peuleumah neuubah nyang ka Droëneuh peugöt",
        "tooltip-compareselectedversions": "Ngiëng bida nibak duwa geunantoë laman nyang teupiléh",
        "tooltip-watch": "Tamah laman nyoë u dapeuta kalön droëneuh",
        "tags": "Tag neuubah nyang sah",
        "tag-filter": "Saréng [[Special:Tags|tag]]:",
        "tag-filter-submit": "Saréng",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Tag}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Tag}}]]: $2",
        "tags-active-yes": "Nyo",
        "tags-active-no": "H`an",
        "tags-hitcount": "$1 {{PLURAL:$1|neuubah}}",
        "duration-centuries": "{{PLURAL:$1|abad}}",
        "duration-millennia": "{{PLURAL:$1|milenium}}",
        "pagelang-reason": "Alasan",
-       "mw-widgets-abandonedit-keep": "Lanjut peusaneut"
+       "mw-widgets-abandonedit-keep": "Peusaneut lom"
 }
index 1540601..2186ac9 100644 (file)
        "mycontris": "Лэжьыгъэ",
        "contribsub2": "{{GENDER:$3|$1}} пае ($2)",
        "contributions-userdoesnotexist": "Аккаунтэу \"$1\" регистрацие шIыгъэп.",
-       "uctop": "(джырэ)",
+       "uctop": "джырэ",
        "month": "Мазэм ыкӀоцӀ (ыкӀи нахь жьэу):",
        "year": "Илъэсым ыкӀоцӀ (ыкӀи нахь жьэу):",
        "sp-contributions-newbies": "Аккаунт кШэ закъомэ я лэжьыгъэр къэгъэлъагъу",
        "specialpages": "ЯӀамышӀыкӀ нэкӀубгъохэр",
        "specialpages-group-login": "Къыхахь / аккаунт къэубл",
        "tag-filter": "[[Special:Tags|Tag]] филтрэр:",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Гъэнэфалъ|Гъэнэфалъэхэр}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Гъэнэфалъ|Гъэнэфалъэхэр}}]]: $2",
        "logentry-delete-delete": "$3 нэкӀубгъор $1 {{GENDER:$2|Ӏыгъ}}",
        "logentry-move-move": "$1 {{GENDER:$2|ыгъэкощыгъэ}} нэкIубгъоу $3-р $4-м",
        "logentry-newusers-create": "ХэлэжьэкIо аккаунтэу $1 {{GENDER:$2|ублагъэ}}",
index 5300808..c3522f1 100644 (file)
        "rcfilters-other-review-tools": "Ander hulpmiddels",
        "rcfilters-group-results-by-page": "Groepeer resultate per bladsy",
        "rcfilters-activefilters": "Aktiewe filters",
+       "rcfilters-activefilters-hide": "Versteek",
        "rcfilters-advancedfilters": "Gevorderde filters",
        "rcfilters-limit-title": "Wysigings om te wys",
        "rcfilters-limit-and-date-label": "{{PLURAL:$1|wysiging|$1 wysigings}}, $2",
        "contribsub2": "Vir {{GENDER:$3|$1}} ($2)",
        "contributions-userdoesnotexist": "Die gebruiker \"$1\" is nie geregistreer nie.",
        "nocontribs": "Geen veranderinge wat by hierdie kriteria pas, is gevind nie.",
-       "uctop": "(laaste wysiging)",
+       "uctop": "laaste wysiging",
        "month": "Vanaf maand (en vroeër):",
        "year": "Vanaf jaar (en vroeër):",
        "sp-contributions-newbies": "Wys slegs bydraes van nuwe gebruikers",
        "tags": "Geldige wysigings-etikette",
        "tag-filter": "[[Special:Tags|Etiketfilter]]:",
        "tag-filter-submit": "Filter",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Etiket|Etikette}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Etiket|Etikette}}]]: $2",
        "tags-title": "Etikette",
        "tags-intro": "Hierdie bladsy bevat die etikette waarmee die sagteware wysigings mee kan merk, en hul betekenis.",
        "tags-tag": "Etiketnaam",
        "dberr-again": "Wag 'n paar minute en probeer dan weer.",
        "dberr-info": "(Kan nie die databasisbediener kontak nie: $1)",
        "dberr-info-hidden": "(Kan nie die databasisbediener kontak nie)",
-       "dberr-usegoogle": "Tot tyd en wyl kan u inligting op Google soek.",
-       "dberr-outofdate": "Let daarop dat hulle indekse van ons inhoud moontlik verouderd mag wees.",
-       "dberr-cachederror": "Hierdie is 'n gekaste kopie van die aangevraagde blad, en dit mag moontlik nie op datum wees nie.",
        "htmlform-invalid-input": "Daar is probleme met van die ingevoerde waardes",
        "htmlform-select-badoption": "Die ingevoerde waarde is ongeldig.",
        "htmlform-int-invalid": "Die ingevoer waarde is nie 'n heeltal nie.",
index 60b7791..72eff5d 100644 (file)
        "contribsub2": "{{GENDER:$3|$1}} a paanin ($2)",
        "contributions-userdoesnotexist": "misaungayay canghaw \"$1\" caay henay pangangan.",
        "nocontribs": "cay katepa matatungus sakacucek a sumad",
-       "uctop": "(ayza)",
+       "uctop": "ayza",
        "month": "sazikuzay demiad nabuladan:",
        "year": "sazikuzay demiad mihcaan:",
        "sp-contributions-newbies": "paazih a cacay baluhay canghaw a paanin",
        "tags": "kapah misumad tu tazihan a paya",
        "tag-filter": "[[Special:Tags|aazihen paya]] kilim:",
        "tag-filter-submit": "kilim",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|aazihen paya’}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|aazihen paya’}}]]: $2",
        "tag-mw-contentmodelchange": "lacul tatudungen misanga’  misumad",
        "tag-mw-contentmodelchange-description": "mikawaway-kalumyiti  [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:ChangeContentModel misumad kasabelih a lacul tatudungen misanga’].",
        "tags-title": "aazihen a paya",
        "dberr-again": "sawsawni pinapina ku widi pitanam aca.",
        "dberr-info": "(la’cus misuped-miala kalunasulitan-sulu: $1)",
        "dberr-info-hidden": "(la’cus misuped-miala sulu nu nasulitan)",
-       "dberr-usegoogle": "kapah tu kisu mitanam ilabu nu kakatekuhan pisaungay Google kilim.",
-       "dberr-outofdate": "azihen, napatizeng nu heni pikiliman tu nisulitan miasip a lacul hakay caay kawbaluhayay.",
-       "dberr-cachederror": "uyniyan sa amilungucay balih a kabilil-miala nikopian, hakay caay ku sabaluhayay.",
        "htmlform-invalid-input": "sulitan nu misu a lacul izaw ku munday.",
        "htmlform-select-badoption": "matuzu’ay a sulyang nu misu u la’cusay a mapiliay.",
        "htmlform-int-invalid": "matuzu’ay a sulyang nu misa caay ku milisimet-sulyang.",
index 6d111fc..d30dead 100644 (file)
        "contributions-title": "Kontributet e përdoruesit në $1",
        "mycontris": "Redaktimet e mia",
        "contribsub2": "Për $1 ($2)",
-       "uctop": "(në krye)",
+       "uctop": "në krye",
        "month": "Prej muejit (e mâ herët):",
        "year": "Prej vjetit (e mâ herët):",
        "sp-contributions-newbies": "Trego sall kontributet e përdoruesve të rij",
index 09f0d0c..9ef5490 100644 (file)
        "mycontris": "የኔ አስተዋጽኦች፤",
        "contribsub2": "ለ $1 ($2)",
        "nocontribs": "ምንም አልተገኘም።",
-       "uctop": "(ላይኛ)",
+       "uctop": "ላይኛ",
        "month": "እስከዚህ ወር ድረስ፦",
        "year": "እስከዚህ አመት (እ.ኤ.አ.) ድረስ፡-",
        "sp-contributions-newbies": "የአዳዲስ ተጠቃሚዎች አስተዋጽዖ ብቻ እዚህ ይታይ",
        "tag-filter-submit": "ማጣሪያ",
        "tags-edit": "አርም",
        "tags-hitcount": "$1 {{PLURAL:$1|ለውጥ|ለውጦች}}",
-       "dberr-usegoogle": "ለአሁኑ ጊዜ በጉግል መፈልግ ይችላሉ።",
        "htmlform-submit": "ለማቅረብ",
        "htmlform-selectorother-other": "ሌላ",
        "logentry-delete-delete": "$1 ገጹን $3 አጠፋ",
index 0f91c77..06b3a79 100644 (file)
        "fileduplicatesearch-submit": " saoo’",
        "specialpages": " micidekay a felih",
        "tag-filter": "[[Special:Tags|sakacipinang a ’otoc]] misolap:",
-       "tag-list-wrapper": "([[Special:Tags|$1 sakacipinang a ’otoc]]:$2)",
+       "tag-list-wrapper": "[[Special:Tags|$1 sakacipinang a ’otoc]]:$2",
        "tag-mw-rollback": " patatikol",
        "tag-mw-undo": " patikor",
        "tags-source-header": "lalengatan",
index ff8bf7b..6ca6342 100644 (file)
        "mycontris": "Contribucions",
        "contribsub2": "Ta {{GENDER:$3|$1}} ($2)",
        "nocontribs": "No s'han trobato cambeos que concordasen con ixos criterios",
-       "uctop": "(zaguer cambeo)",
+       "uctop": "zaguer cambeo",
        "month": "Dende o mes (y anteriors):",
        "year": "Dende l'anyo (y anteriors):",
        "sp-contributions-newbies": "Amostrar nomás as contrebucions d'os usuarios nuevos",
        "dberr-problems": "Lo sentimos. Iste sitio ye experimentando dificultatz tecnicas.",
        "dberr-again": "Mire de recargar en bells menutos.",
        "dberr-info": "(No s'ha puesto contactar con o servidor d'a base de datos: $1)",
-       "dberr-usegoogle": "Entremistanto puet preba a mirar a traviés de Google.",
-       "dberr-outofdate": "Pare cuenta que o suyo endice d'o nuestro conteniu puet que no siga esviellau.",
-       "dberr-cachederror": "A siguient pachina ye una pachina alzada d'a pachina solicitada, y podría no estar actualizada.",
        "htmlform-invalid-input": "Bi ha problemas con belún d'os datos que ha escrito",
        "htmlform-select-badoption": "A valura especificada no ye una opción conforme.",
        "htmlform-int-invalid": "A valura que especificó no ye un entero.",
index a716930..6880b1a 100644 (file)
        "mycontris": "Mīna forðunga",
        "anoncontribs": "forðunga",
        "contribsub2": "For {{GENDER:$3|$1}} ($2)",
-       "uctop": "(genge)",
+       "uctop": "genge",
        "month": "Fram mōnþe (and ǣr)",
        "year": "Fram iēare (and ǣr)",
        "sp-contributions-talk": "mōtung",
index 9154182..91ad42e 100644 (file)
        "redirect-file": "फ़ाइल नाम",
        "specialpages": "खास पन्ना",
        "tag-filter": "[[Special:Tags|चिप्पी]] छननी:",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|टैग}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|टैग}}]]: $2",
        "tags-active-yes": "हाँ",
        "tags-active-no": "नै",
        "tags-hitcount": "$1 {{PLURAL:$1|बदलाव|बदलाव सिनी}}",
index 0cc8e95..66a56fe 100644 (file)
        "help": "مساعدة",
        "search": "بحث",
        "search-ignored-headings": "# <!-- اترك هذا السطر كما هو --> <pre>\n# سيتم تجاهل الترويسات خلال عملية البحث\n#التغييرات ستأخذ مجراها ما أن يتم فهرسة الصفحة التي تحتوي على ترويسات\n# يمكنك فرض عملية فهرسة الصفحة من خلال تعديل فارغ\n# الصيغة هي كالأتي:\n# * كل ما يكتب بعد \"#\" إلى آخر السطر يعتبر تعليق\n# * كل سطر غير فارغ سيكون العنوان الذي سيتم تجاهله (سيأخذ العنوان كما هو بالضبط بالتشكيل وخلافه)\nالمراجع\nالوصلات الخارجية\nانظر أيضا\n#</pre><!--أترك هذا السطر كما هو -->",
-       "searchbutton": "ابحث",
+       "searchbutton": "بحث",
        "go": "اذهب",
        "searcharticle": "اذهب",
        "history": "تاريخ الصفحة",
        "passwordtooshort": "يجب أن تتكون كلمة السر على الأقل من {{PLURAL:$1|حرف واحد|حرفين|$1 حروف|$1 حرفا|$1 حرف}}.",
        "passwordtoolong": "كلمات السر لا يجب أن تكون أطول من  {{PLURAL:$1|1 حرف|$1 حروف}}.",
        "passwordtoopopular": "لا يمكن استخدام كلمات المرور المختارة بشكل عام; يُرجَى اختيار كلمة مرور يصعب تخمينها.",
+       "passwordinlargeblacklist": "كلمة المرور التي تم إدخالها موجودة في قائمة كلمات المرور شائعة الاستخدام; الرجاء اختيار كلمة مرور فريدة.",
        "password-name-match": "يجب أن تكون كلمة المرور مختلفة عن اسم المستخدم.",
        "password-login-forbidden": "تم منع استخدام اسم المستخدم هذا وكلمة السر.",
        "mailmypassword": "أعد تعيين كلمة السر",
        "botpasswords-label-needsreset": "(تحتاج كلمة المرور إلى إعادة الضبط)",
        "botpasswords-label-appid": "اسم البوت:",
        "botpasswords-label-create": "أنشأ",
-       "botpasswords-label-update": "حدث",
+       "botpasswords-label-update": "تحدÙ\8aث",
        "botpasswords-label-cancel": "ألغ",
        "botpasswords-label-delete": "احذف",
        "botpasswords-label-resetpassword": "أعد ضبط كلمة السر",
        "prefs-email": "خيارات البريد الإلكتروني",
        "prefs-rendering": "المظهر",
        "saveprefs": "احفظ",
-       "restoreprefs": "استرجع Ù\83Ù\84 Ø§Ù\84إعدادات Ø§Ù\84اÙ\81تراضÙ\8aØ©",
+       "restoreprefs": "استرجاع Ù\83Ù\84 Ø§Ù\84إعدادات Ø§Ù\84اÙ\81تراضÙ\8aØ© (Ù\81Ù\8a Ù\83Ù\84 Ø§Ù\84Ø£Ù\82ساÙ\85)",
        "prefs-editing": "التحرير",
        "searchresultshead": "بحث",
        "stub-threshold": "الحد لتنسيق وصلة البذرة ($1):",
        "timezonelegend": "المنطقة الزمنية:",
        "localtime": "الوقت المحلي:",
        "timezoneuseserverdefault": "استخدام الويكي الافتراضي ($1)",
-       "timezoneuseoffset": "آخر (حدد الفرق)",
+       "timezoneuseoffset": "غير ذلك (حدد الإزاحة أدناه)",
+       "timezone-useoffset-placeholder": "مثال القيم: \"-07:00\" أو \"01:00\"",
        "servertime": "وقت الخادم:",
        "guesstimezone": "أدخل التوقيت من المتصفح",
        "timezoneregion-africa": "أفريقيا",
        "prefs-editor": "محرر",
        "prefs-preview": "عرض مسبق",
        "prefs-advancedrc": "خيارات متقدمة",
-       "prefs-opt-out": "إلغاء الاشتراك في التحسينات",
        "prefs-advancedrendering": "خيارات متقدمة",
        "prefs-advancedsearchoptions": "خيارات متقدمة",
        "prefs-advancedwatchlist": "خيارات متقدمة",
        "prefs-displayrc": "خيارات العرض",
        "prefs-displaywatchlist": "خصائص العرض",
+       "prefs-changesrc": "التغييرات المعروضة",
+       "prefs-changeswatchlist": "التغييرات المعروضة",
+       "prefs-pageswatchlist": "الصفحات المراقبة",
        "prefs-tokenwatchlist": "مفتاح",
        "prefs-diffs": "فروقات",
        "prefs-help-prefershttps": "سيتم تفعيل هذا التفضيل عند ولوجوك في المرة القادمة.",
        "rcfilters-watchlist-markseen-button": "اعتبر كل التغييرات منظورة",
        "rcfilters-watchlist-edit-watchlist-button": "تعديل قائمة الصفحات المراقبة",
        "rcfilters-watchlist-showupdated": "التغييرات للصفحات التي لم تزرها منذ حدوث التغييرات تكون <strong>بالخط العريض</strong>، مع علامات صلبة.",
-       "rcfilters-preference-label": "أخÙ\81 Ø§Ù\84Ù\86سخة Ø§Ù\84Ù\85حسÙ\86Ø© Ù\85Ù\86 Ø£Ø­Ø¯Ø« Ø§Ù\84تغÙ\8aÙ\8aرات",
-       "rcfilters-preference-help": "Ù\8aسترجع Ø¹Ù\85Ù\84Ù\8aØ© Ø¥Ø¹Ø§Ø¯Ø© ØªØµÙ\85Ù\8aÙ\85 Ø§Ù\84Ù\88اجÙ\87Ø© Ù\84عاÙ\85 2017 Ù\88Ù\83Ù\84 Ø§Ù\84أدÙ\88ات Ø§Ù\84تÙ\8a Ø£Ø¶Ù\8aÙ\81ت Ù\85Ù\86Ø° Ø°Ù\84Ù\83 Ø§Ù\84Ù\88Ù\82ت.",
-       "rcfilters-watchlist-preference-label": "إخÙ\81اء Ø§Ù\84Ù\86سخة Ø§Ù\84Ù\85حسÙ\86Ø© Ù\85Ù\86 Ù\82ائÙ\85Ø© Ø§Ù\84Ù\85راÙ\82بة",
-       "rcfilters-watchlist-preference-help": "Ù\8aتراجع Ø¹Ù\86 Ø¥Ø¹Ø§Ø¯Ø© ØªØµÙ\85Ù\8aÙ\85 Ù\88اجÙ\87Ø© Ø¹Ø§Ù\85 2017 Ù\88جÙ\85Ù\8aع Ø§Ù\84أدÙ\88ات Ø§Ù\84تÙ\8a ØªÙ\85ت Ø¥Ø¶Ø§Ù\81تÙ\87ا Ù\85Ù\86Ø° Ø°Ù\84Ù\83 Ø§Ù\84Ø­Ù\8aÙ\86.",
+       "rcfilters-preference-label": "استخدÙ\85 Ù\88اجÙ\87Ø© ØºÙ\8aر Ø¬Ø§Ù\81ا Ø³Ù\83رÙ\8aبت",
+       "rcfilters-preference-help": "Ù\8aØ­Ù\85Ù\84 Ø£Ø­Ø¯Ø« Ø§Ù\84تغÙ\8aÙ\8aرات Ø¯Ù\88Ù\86 Ù\88ظÙ\8aÙ\81Ø© Ø§Ù\84Ù\85رشحات Ø£Ù\88 ØªØ³Ù\84Ù\8aØ· Ø§Ù\84ضÙ\88Ø¡.",
+       "rcfilters-watchlist-preference-label": "استخدÙ\85 Ù\88اجÙ\87Ø© ØºÙ\8aر Ø¬Ø§Ù\81ا Ø³Ù\83رÙ\8aبت",
+       "rcfilters-watchlist-preference-help": "Ù\8aØ­Ù\85Ù\84 Ù\82ائÙ\85Ø© Ø§Ù\84Ù\85راÙ\82بة Ø¯Ù\88Ù\86 Ù\88ظÙ\8aÙ\81Ø© Ø§Ù\84Ù\85رشحات Ø£Ù\88 ØªØ³Ù\84Ù\8aØ· Ø§Ù\84ضÙ\88Ø¡.",
        "rcfilters-filter-showlinkedfrom-label": "عرض التغييرات في الصفحات الموصولة من",
        "rcfilters-filter-showlinkedfrom-option-label": "<strong>الصفحات الموصولة من</strong> الصفحة المختارة",
        "rcfilters-filter-showlinkedto-label": "عرض التغييرات في الصفحات الموصولة بصفحة",
        "recentchanges-page-removed-from-category": "أزيلت [[:$1]] من التصنيف",
        "recentchanges-page-removed-from-category-bundled": "أزيلت [[:$1]] من التصنيف، [[Special:WhatLinksHere/$1|هذه الصفحة مضمنة في صفحات أخرى]]",
        "autochange-username": "تغيير آلي لميدياويكي",
-       "upload": "ارÙ\81ع Ù\85Ù\84Ù\81ا",
+       "upload": "رÙ\81ع Ù\85Ù\84Ù\81",
        "uploadbtn": "ارفع الملف",
        "reuploaddesc": "إلغاء الرفع والرجوع إلى استمارة الرفع",
        "upload-tryagain": "أرسل وصف ملف معدل",
        "listgrants-summary": "التالي هو قائمة بالمنح بعمليات الوصول لصلاحيات المستخدم المصاحبة لها. المستخدمون يمكنهم إعطاء صلاحية للتطبيقات لاستخدام حساباتهم، ولكن بسماحات محدودة بناء على المنح التي أعطاها المستخدم للتطبيق. تطبيق يعمل بالنيابة عن مستخدم لا يمكنه استخدام الصلاحيات التي لا يمتلكها المستخدم بالفعل.\nربما تكون هناك [[{{MediaWiki:Listgrouprights-helppage}}|معلومات إضافية]] حول الصلاحيات الفردية.",
        "listgrants-grant": "المنحة",
        "listgrants-rights": "الصلاحيات",
-       "trackingcategories": "تصانيف التتبع",
-       "trackingcategories-summary": "تسرد هذه الصفحة تصانيف التتبع التي ينشئها برنامج ميدياويكي. يمكن تغيير أسمائها بتغيير رسائل النظام في نطاق {{ns:8}}.",
-       "trackingcategories-msg": "تصانيف التتبع",
+       "trackingcategories": "تصنيفات التتبع",
+       "trackingcategories-summary": "تسرد هذه الصفحة تصنيفات التتبع التي ينشئها برنامج ميدياويكي. يمكن تغيير أسمائها بتغيير رسائل النظام في نطاق {{ns:8}}.",
+       "trackingcategories-msg": "تصنيف التتبع",
        "trackingcategories-name": "اسم الرسالة",
        "trackingcategories-desc": "معايير إدراج تصنيف",
        "restricted-displaytitle-ignored": "الصفحات بعناوين عرض تم تجاهلها",
        "rollback-success-notify": "تم استرجاع التعديلات بواسطة $1;\nتم التغيير إلى آخر مراجعة بواسطة $2. [$3 عرض التغييرات]",
        "sessionfailure-title": "فشل في الجلسة",
        "sessionfailure": "يبدو أنه هناك مشكلة في جلسة الدخول الخاصة بك؛\nلذلك فقد ألغيت هذه العملية كإجراء احترازي ضد الاختراق.\nمن فضلك أعد إرسال الاستمارة مرة أخرى.",
-       "changecontentmodel": "غير نموذج المحتوى لصفحة",
+       "changecontentmodel": "تغÙ\8aير نموذج المحتوى لصفحة",
        "changecontentmodel-legend": "غير نموذج المحتوى",
        "changecontentmodel-title-label": "عنوان الصفحة",
        "changecontentmodel-model-label": "نموذج محتوى جديد",
        "contribsub2": "ل{{GENDER:$3|$1}} ($2)",
        "contributions-userdoesnotexist": "حساب المستخدم \"$1\" غير مسجل.",
        "nocontribs": "لم يتم العثور على تغييرات تطابق هذه المحددات.",
-       "uctop": "(حالية)",
+       "uctop": "حالية",
        "month": "من شهر (وأقدم):",
        "year": "من سنة (وأقدم):",
        "date": "من تاريخ (وأقدم).",
        "whatlinkshere-filters": "مرشحات",
        "whatlinkshere-submit": "اذهب",
        "autoblockid": "منع تلقائي #$1",
-       "block": "امنع المستخدم",
+       "block": "منع المستخدم",
        "unblock": "إلغاء منع مستخدم",
        "blockip": "منع {{GENDER:$1|المستخدم|المستخدمة}}",
        "blockiptext": "استخدم النموذج التالي لمنع مستخدم، أو عنوان آيبي، معين من التعديل أو إنشاء حسابات جديدة. تُستخدم هذه العملية لمنع التخريب فقط، ويجب أن تتماشى مع [[{{MediaWiki:Policy-url}}|سياسة المنع]]. أدخل تعليلاً واضحًا لسبب المنع في الخانة المخصصة لذلك (مثلاً: ذكر صفحات محددة تمّ تخريبها من قبل المستخدم).\nيمكنك منع نطاقات عناوين IP باستخدام [https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing CIDR] قواعد; أكبر نطاق مسموح به هو /$1 إلى IPv4 و /$2 إلى IPv6.",
        "move-watch": "راقب هذه الصفحة",
        "movepagebtn": "انقل الصفحة",
        "pagemovedsub": "تم النقل بنجاح",
+       "cannotmove": "تعذر نقل الصفحة; {{PLURAL:$1|للسبب التالي|للأسباب التالية}}:",
        "movepage-moved": "'''نُقِلت \"$1\" إلى \"$2\"'''",
        "movepage-moved-redirect": "أنشئت تحويلة.",
        "movepage-moved-noredirect": "إنشاء التحويلة تم التغاضي عنه.",
        "tooltip-watchlistedit-raw-submit": "حدث قائمة المراقبة",
        "tooltip-recreate": "أعد إنشاء الصفحة رغم كونها حذفت",
        "tooltip-upload": "ابدأ الرفع",
-       "tooltip-rollback": "\"استرجاع\" تسترجع تعديلات آخر محرّر لهذه الصفحة بضغطة واحدة.",
+       "tooltip-rollback": "\"استرجاع\" تسترجع تعديلات آخر محرر لهذه الصفحة بضغطة واحدة",
        "tooltip-undo": "\"رجوع\" تسترجع هذا التعديل وتفتح نافذة التعديل في نمط العرض المسبق. تسمح بإضافة سبب في الملخص.",
        "tooltip-preferences-save": "احفظ التغييرات",
        "tooltip-summary": "أدخل ملخصا قصيرا",
        "tags": "وسوم التغيير الصحيحة",
        "tag-filter": "مرشح [[Special:Tags|الوسوم]]:",
        "tag-filter-submit": "مرشح",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1||وسم|وسمان|وسوم}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1||وسم|وسمان|وسوم}}]]: $2",
        "tag-mw-contentmodelchange": "تغيير موديل المحتوى",
        "tag-mw-contentmodelchange-description": "التعديلات التي [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:ChangeContentModel تغير موديل المحتوى] لصفحة",
        "tag-mw-new-redirect": "تحويلة جديدة",
        "tags-manage-no-permission": "ليس لديك صلاحية إدارة وسوم التغيير.",
        "tags-manage-blocked": "لا يمكنك إدارة وسوم التغيير أثناء {{GENDER:$1|منعك}}.",
        "tags-create-heading": "إنشاء وسم جديد",
-       "tags-create-explanation": "في الوضع الافتراضي، الوسوم الجديدة المنشأة سيتاح استخدامها للبوتات والمستخدمين.",
+       "tags-create-explanation": "افتراضيا، الوسوم المنشأة حديثا سيتاح استخدامها للمستخدمين والبوتات.",
        "tags-create-tag-name": "اسم الوسم:",
        "tags-create-reason": "السبب:",
        "tags-create-submit": "أنشئ",
        "tags-create-already-exists": "الوسم \"$1\" موجود بالفعل.",
        "tags-create-warnings-above": "{{PLURAL:$2|التحذير التالي حدث|التحذيرات التالية حدثت}} عند محاولة إنشاء الوسم \"$1\":",
        "tags-create-warnings-below": "هل تود متابعة إنشاء الوسم؟",
-       "tags-delete-title": "احذÙ\81 Ø§Ù\84Ù\88سÙ\85",
+       "tags-delete-title": "حذف الوسم",
        "tags-delete-explanation-initial": "أنت على وشك حذف الوسم \"$1\" من قاعدة البيانات.",
        "tags-delete-explanation-in-use": "ستتم إزالته من {{PLURAL:$2|$2 مراجعة او مدخلة سجل|كل $2 مراجعات و/أو مدخلات سجل}} الذي هو مطبق عليهم حاليا.",
        "tags-delete-explanation-warning": "هذا الفعل <strong>غير رجعي</strong> و <strong>لا يمكن التراجع عنه</strong>، ولا حتى بواسطة إداريي قاعدة البيانات. كن متاكدا من أن هذا هو الوسم الذي تريد حذفه.",
        "dberr-again": "جرب الانتظار بضع دقائق وإعادة التحميل.",
        "dberr-info": "(لا يمكن الوصول إلى خادوم قاعدة البيانات: $1)",
        "dberr-info-hidden": "(لا يمكن الاتصال بخادم قاعدة البيانات)",
-       "dberr-usegoogle": "يمكنك محاولة البحث من خلال جوجل في الوقت الحاضر.",
-       "dberr-outofdate": "لاحظ أن فهارسهم لمحتوانا ربما تكون غير محدثة.",
-       "dberr-cachederror": "التالي نسخة مخزنة من الصفحة المطلوبة، وربما لا تكون محدثة.",
        "htmlform-invalid-input": "توجد مشكلات ضمن بعض من مدخلاتك",
        "htmlform-select-badoption": "القيمة التي تم تحديدها غير صالحة كخيار.",
        "htmlform-int-invalid": "القيمة التي حددتها ليست عددا صحيحا.",
        "logentry-block-reblock": " {{GENDER:$2|غير|غيرت}} $1 إعدادات المنع ل{{GENDER:$4|$3}} بتاريخ انتهاء $5 $6",
        "logentry-partialblock-block": "$1 {{GENDER:$2|منع|منعت}} {{GENDER:$4|$3}} من تحرير {{PLURAL:$8|صفحة|الصفحات}} $7 مع وقت انتهاء يبلغ $5 $6",
        "logentry-partialblock-reblock": "$1 {{GENDER:$2|غير|غيرت}} إعدادات منع {{GENDER:$4|$3}} التي تمنع التعديلات على {{PLURAL:$8|صفحة|الصفحات}} $7 بوقت انتهاء يبلغ $5 $6",
-       "logentry-non-editing-block-block": "$1 {{GENDER:$2|منع|منعت}} {{GENDER:$4|$3}} من إجراءات عدم التعديل بوقت انتهاء يبلغ $5 $6",
-       "logentry-non-editing-block-reblock": "$1 {{GENDER:$2|غير|غيرت}} إعدادات منع {{GENDER:$4|$3}} لإجراءات عدم التعديل بوقت انتهاء يبلغ $5 $6",
+       "logentry-non-editing-block-block": "$1 {{GENDER:$2|منع|منعت}} {{GENDER:$4|$3}} من إجراءات محددة غير التعديل بوقت انتهاء $5 $6",
+       "logentry-non-editing-block-reblock": "$1 {{GENDER:$2|غير|غيرت}} إعدادات منع {{GENDER:$4|$3}} لإجراءات محددة غير التعديل بوقت انتهاء يبلغ $5 $6",
        "logentry-suppress-block": "{{GENDER:$2|منع|منعت}} $1 {{GENDER:$4|$3}} لفترة زمنية مدتها $5 $6",
        "logentry-suppress-reblock": "$1 {{GENDER:$2|غير|غيرت}} إعدادات المنع ل{{GENDER:$4|$3}} بتاريخ انتهاء $5 $6",
        "logentry-import-upload": "$1 {{GENDER:$2|استورد}} $3 بواسطة رفع ملف",
        "logentry-move-move_redir-noredirect": "{{GENDER:$2|نقل|نقلت}} $1 صفحة $3 إلى $4 على تحويلة دون ترك تحويلة",
        "logentry-patrol-patrol": "{{GENDER:$2|عاين|عاين}} $1 المراجعة $4 للصفحة $3",
        "logentry-patrol-patrol-auto": "{{GENDER:$2|عاين|عاينت}} $1 تلقائيا المراجعة $4 للصفحة $3",
-       "logentry-newusers-newusers": "تم فتح حساب {{GENDER:$2|المستخدم|المستخدمة}} $1",
-       "logentry-newusers-create": "تم فتح حساب {{GENDER:$2|المستخدم|المستخدمة}} $1",
+       "logentry-newusers-newusers": "تم إنشاء حساب {{GENDER:$2|المستخدم|المستخدمة}} $1",
+       "logentry-newusers-create": "تم إنشاء حساب {{GENDER:$2|المستخدم|المستخدمة}} $1",
        "logentry-newusers-create2": "أنشأ $1 حسابا {{GENDER:$2|للمستخدم|للمستخدمة}} $3",
        "logentry-newusers-byemail": "{{GENDER:$2|أنشأ|أنشأت}} $1 حساب المستخدم $3 وأُرسلت كلمة السر بالبريد الإلكتروني",
        "logentry-newusers-autocreate": "أنشئ حساب {{GENDER:$2|المستخدم|المستخدمة}} $1 تلقائيًا",
        "passwordpolicies-policy-passwordcannotmatchblacklist": "لا يمكن أن تتطابق كلمة المرور مع كلمات المرور المدرجة على القائمة السوداء تحديدا",
        "passwordpolicies-policy-maximalpasswordlength": "يجب أن يكون طول كلمة المرور أقل من $1 {{PLURAL:$1|حرف|أحرف}}",
        "passwordpolicies-policy-passwordcannotbepopular": "لا يمكن أن تكون كلمة المرور {{PLURAL:$1|كلمة المرور الشائعة|في قائمة كلمات المرور الشائعة الـ$1}}",
+       "passwordpolicies-policy-passwordnotinlargeblacklist": "لا يمكن أن تكون كلمة المرور في قائمة كلمات المرور الـ100.000 الأكثر استخداما.",
        "easydeflate-invaliddeflate": "المحتوى المقدم لا يتم تفريغه بشكل صحيح",
        "unprotected-js": "لأسباب تتعلق بالأمان; لا يمكن تحميل جافا سكريبت من الصفحات غير المحمية; الرجاء إنشاء جافا سكريبت فقط في نطاق ميدياويكي: أو كصفحة فرعية للمستخدم"
 }
index 1e98162..b77d6b4 100644 (file)
        "contributions-title": "ܫܘܬܦܘ̈ܬܐ ܕܡܦܠܚܢܐ ܠ$1",
        "mycontris": "ܫܘܬܦܘ̈ܬܐ",
        "contribsub2": "ܠ{{GENDER:$3|$1}} ($2)",
-       "uctop": "(ܗܫܝܐ)",
+       "uctop": "ܗܫܝܐ",
        "month": "ܡܢ ܝܪܚܐ ܕ (ܘܡܢ ܩܕܡ ܗܝܕܝܢ):",
        "year": "ܡܢ ܫܢܬ (ܘܡܢ ܩܕܡ ܗܝܕܝܢ):",
        "sp-contributions-newbies": "ܚܘܝ ܫܘܬܦܘ̈ܬܐ ܕܚܘܫܒܢ̈ܐ ܚܕ̈ܬܐ ܒܠܚܘܕ",
index b4686a1..660df1a 100644 (file)
        "contributions-title": "kellufe $1 ñi wirin",
        "mycontris": "Tañi kellukontun",
        "contribsub2": "$1 ($2)",
-       "uctop": "(wente)",
+       "uctop": "wente",
        "month": "Küyeṉ:",
        "year": "Tripantu:",
        "sp-contributions-newbies": "Pengelün weke kellufe ñi wirin müten",
index 9871e33..f5cf5fc 100644 (file)
        "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)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1||وسم|وسمان|وسوم}}]]: $2",
        "tags-active-yes": "إيه",
        "tags-active-no": "لالا",
        "tags-edit": "بدّل",
index 061591e..9f735d3 100644 (file)
        "contributions-title": "L-Mosahamaṫ dyal $1",
        "mycontris": "L-mosahamaṫ dyawli",
        "contribsub2": "Le $1 ($2)",
-       "uctop": "(l-foq)",
+       "uctop": "l-foq",
        "month": "Men ċher (o qdem)",
        "year": "Men ĝam (o men qbel)",
        "sp-contributions-newbies": "وري غير المساهمات ديال المستخدمين الجداد",
        "dberr-problems": "smh lina had lmawqia ando chi machakil tiqniya",
        "dberr-again": "jrb tssna 5 dqayq oaawd thmil",
        "dberr-info": "mayqdrch ittasl b qaaidat lbayanat : $1",
-       "dberr-usegoogle": "imkn lik tqllb f Google f lwaqt lhadir",
-       "dberr-outofdate": "khssk tlahd anna lfahadriss dyalhom l lmohtawa dyalna iqdr matkonch met a jour",
-       "dberr-cachederror": "hadchi rah ghir nskha msjla, o iqdr matkonch a jour",
        "htmlform-invalid-input": "kayna chi mochkilat f chi modkhalat dyalk",
        "htmlform-select-badoption": "lqima li drtiha masalhach ka khiyar",
        "htmlform-int-invalid": "lqima li drtiha machi adad shih",
index b386762..177da10 100644 (file)
        "resetpass_submit": "اظبط الباسورد و ادخل",
        "changepassword-success": "الباسورد بتاعتك اتغيرت بنجاح!",
        "changepassword-throttled": "انت عملت  محاولات لوجين كتيره  ع الحساب ده.\nمن فضلك استنى $1 قبل المحاولة مرة تانيه.",
+       "botpasswords-label-update": "تحديث",
        "resetpass_forbidden": "مش ممكن تغيير الباسورد",
        "resetpass-no-info": "لازم تسجل دخولك علشان تقدر توصل للصفحة دى على طول.",
        "resetpass-submit-loggedin": "غير الباسورد",
        "mycontris": "تعديلاتى",
        "contribsub2": "ل{{GENDER:$3|$1}} ($2)",
        "nocontribs": "مالقيناش   تغييرات تطابق المحددات دي.",
-       "uctop": "(آخر تعديل)",
+       "uctop": "آخر تعديل",
        "month": "من شهر (واللى قبل كده):",
        "year": "من سنة (واللى قبل كده):",
        "sp-contributions-newbies": "عرض مساهمات الحسابات الجديدة بس",
        "tags": "وسوم التغيير الصحيحة",
        "tag-filter": "فلتر [[Special:Tags|الوسم]]:",
        "tag-filter-submit": "فلتر",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1||وسم|وسمين|وسوم}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1||وسم|وسمين|وسوم}}]]: $2",
        "tags-title": "وسوم",
        "tags-intro": "الصفحه دى فيها ليستة الوسوم اللى ممكن البرنامج يعلم عى التعديل بيها، و معانيهم",
        "tags-tag": "اسم الوسم",
        "dberr-problems": "متأسفين، السايت دا بيعانى من صعوبات فنيه",
        "dberr-again": "حاول تستنا كام دقيقه و بعدين اعمل تحميل من تانى",
        "dberr-info": "(مش قادرين نتصل بـ السيرفر بتاع قاعدة البيانات: $1)",
-       "dberr-usegoogle": "ممكن تحاول تدور باستعمال جوجل دلوقتى.",
-       "dberr-outofdate": "خد بالك فهارس المحتوى بتاعنا اللى عندهم ممكن تكون مش متحدثه.",
-       "dberr-cachederror": "دى نسخه متخزنه من الصفحه المطلوبه، و ممكن ما تكونش متحدثه.",
        "htmlform-invalid-input": "فى مشاكل فى المدخلات بتاعتك",
        "htmlform-select-badoption": "القيمه اللى حددتها ما تنفعش كاختيار.",
        "htmlform-int-invalid": "القيمه اللى حددتها ما هياش عدد صحيح",
index e4a70d5..5ee5547 100644 (file)
        "anoncontribs": "বৰঙণি",
        "contribsub2": "{{GENDER:$3|$1}} ($2)ৰ কাৰণে",
        "nocontribs": "এই গুণসমূহৰ লগত মিল থকা কোনো সালসলনি পোৱা নগ’ল ।",
-       "uctop": "(বৰ্তমান)",
+       "uctop": "বৰ্তমান",
        "month": "এই মাহৰ পৰা (আৰু আগৰ):",
        "year": "এই বছৰৰ পৰা (আৰু আগৰ):",
        "sp-contributions-newbies": "কেৱল নতুন একাউন্টৰ বৰঙণিসমূহ দেখুৱাওক",
        "tags": "সালসলনি টেগসমূহ চাওক",
        "tag-filter": "[[Special:Tags|টেগ]] ছেকনী:",
        "tag-filter-submit": "সংশোধন",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|টেগ্‌}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|টেগ্‌}}]]: $2",
        "tags-title": "টেগসমূহ",
        "tags-intro": "ছফ্টৱেৰে সম্পাদনা চিহ্নিত কৰিব পৰা টেগসমূহ আৰু সেইবোৰৰ অৰ্থ এই পৃষ্ঠাত তালিকাভুক্ত কৰা হৈছে।",
        "tags-tag": "টেগ নাম",
        "dberr-again": "অলপ সময় অপেক্ষা কৰি পুনৰ আপল'ডৰ চেষ্টা কৰক ।",
        "dberr-info": "(তথ্যকোষৰ চাৰ্ভাৰৰ লগত যোগাযোগ কৰিব নোৱাৰি: $1)",
        "dberr-info-hidden": "(তথ্যকোষৰ চাৰ্ভাৰৰ লগত যোগাযোগ কৰিব নোৱাৰি)",
-       "dberr-usegoogle": "এই পৰিস্থিতিত আপুনি গুগলৰ মাধ্যমেৰে সন্ধান কৰিব পাৰে।",
-       "dberr-outofdate": "মন কৰক যে, আমাৰ বিষয়বস্তু সম্পৰ্কে তেওঁলোকৰ সূচী পুৰণা হ'ব পাৰে ।",
-       "dberr-cachederror": "এইখন অনুৰোধ কৰা পৃষ্ঠাৰ কেচ্‌ড লিপি, যিখন নবীকৰণ নকৰাও হ'ব পাৰে ।",
        "htmlform-invalid-input": "আপোনাৰ কিছুমান অন্তৰ্ভুক্তিত সমস্যা হৈছে",
        "htmlform-select-badoption": "আপুনি ধাৰ্য কৰা মান উপযুক্ত বিকল্প নহয়।",
        "htmlform-int-invalid": "অপুনি ধাৰ্য কৰা মান অখণ্ড সংখ্যা (integer) নহয়।",
index b6cc810..2eb3003 100644 (file)
        "prefs-editor": "Editor",
        "prefs-preview": "Vista previa",
        "prefs-advancedrc": "Opciones avanzaes",
-       "prefs-opt-out": "Borrase de los ameyoramientos",
        "prefs-advancedrendering": "Opciones avanzaes",
        "prefs-advancedsearchoptions": "Opciones avanzaes",
        "prefs-advancedwatchlist": "Opciones avanzaes",
        "contribsub2": "Pa {{GENDER:$3|$1}} ($2)",
        "contributions-userdoesnotexist": "La cuenta d'usuariu «$1» nun ta rexistrada.",
        "nocontribs": "Nun s'atoparon cambeos que coincidan con esi criteriu.",
-       "uctop": "(actual)",
+       "uctop": "actual",
        "month": "Dende'l mes (y anteriores):",
        "year": "Dende l'añu (y anteriores):",
        "date": "Dende la fecha (y anteriores):",
        "tags": "Etiquetes de cambiu válides",
        "tag-filter": "Filtru d'[[Special:Tags|etiquetes]]:",
        "tag-filter-submit": "Peñera",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Etiqueta|Etiquetes}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Etiqueta|Etiquetes}}]]: $2",
        "tag-mw-contentmodelchange": "cambiu nel modelu de conteníu",
        "tag-mw-contentmodelchange-description": "Ediciones que [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:ChangeContentModel camuden el modelu de conteníu] d'una páxina",
        "tag-mw-new-redirect": "Redireición nueva",
        "dberr-again": "Tenta esperar dellos minutos y recargar.",
        "dberr-info": "(Nun hai accesu a la base de datos: $1)",
        "dberr-info-hidden": "(Nun hai accesu a la base de datos)",
-       "dberr-usegoogle": "Pue probar a buscar con Google mentanto.",
-       "dberr-outofdate": "Atalanta que los sos índices del nuesu conteníu seique nun tean actualizaos.",
-       "dberr-cachederror": "Esta ye una copia na caché de la páxina que se pidiera, y pue que nun tea actualizada.",
        "htmlform-invalid-input": "Hai problemes con parte de la to entrada",
        "htmlform-select-badoption": "El valor que conseñasti nun ye una opción válida.",
        "htmlform-int-invalid": "El valor que conseñasti nun ye un númberu enteru.",
index 4a131e8..049c927 100644 (file)
        "contributions": "Wir ka ki witcihietc {{GENDER:$1|User}}",
        "mycontris": "Witcihewin",
        "anoncontribs": "E ki witcihehin",
-       "uctop": "(mekwatc)",
+       "uctop": "mekwatc",
        "month": "Anotc pisimw ka akotcinitc (nac nte nictam):",
        "year": "Taci e ici matce tato piponikak(acit nictam):",
        "sp-contributions-blocklog": "wapatcikan taci e nanikactek",
        "specialpages": "Ka ici wectakaniwok",
        "specialpages-group-login": "Posi / masinahotiso",
        "tag-filter": "Nihipita nehi[[Special:Tags|balises]] :",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Kicawatcikanicic|Kicawatcikanica}}]] : $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Kicawatcikanicic|Kicawatcikanica}}]] : $2",
        "tags-source-header": "Ite wetciparik",
        "tags-active-yes": "Ehe",
        "tags-active-no": "Nama",
index f6de868..84a1d76 100644 (file)
@@ -8,7 +8,8 @@
                        "Wikimistusik",
                        "Zetud",
                        "아라",
-                       "Macofe"
+                       "Macofe",
+                       "Axel xadolik"
                ]
        },
        "tog-underline": "Levconhani gluyasiki se",
        "actions": "Tegira",
        "namespaces": "Yoltxo",
        "variants": "Arapeniks",
+       "navigation-heading": "Exulera",
        "errorpagetitle": "Rokla",
        "returnto": "Dimgrablera va $1 bu.",
        "tagline": "Teliz mal {{SITENAME}}.",
        "printableversion": "Rorubian siatos",
        "permalink": "Elupkafi gluyasiki",
        "print": "Rubiara",
+       "view": "Wira",
+       "view-foreign": "Va $1 nedil",
        "edit": "Betara",
        "create": "Redura",
+       "create-local": "Va lizukafa pimtara loplekul",
        "delete": "Sulara",
        "undelete_short": "Dimplekura {{PLURAL:$1|tanoy betaks|$1 betaks}}",
        "protect": "Nendara",
        "otherlanguages": "Ara ava",
        "redirectedfrom": "(Graskan mal $1)",
        "redirectpagesub": "Bugraskara",
-       "lastmodifiedat": "Ironakafa betara va bu tir ba $2, $1.",
+       "lastmodifiedat": "Darefa betara va bu tir ba $2 dene $1.",
        "viewcount": "Batu bu {{PLURAL:$1|1-on|$1 -on}} al zo ruper.",
        "protectedpage": "Nendanu bu",
        "jumpto": "Grablé kal",
        "nstab-template": "Teza",
        "nstab-help": "Pomara",
        "nstab-category": "Loma",
+       "mainpage-nstab": "Emudexo",
        "nosuchaction": "Megrupena tegira",
        "nosuchactiontext": "Ruidanaca koe URL gan wiki me zo kagruper.\nURL lanon tir ordajaf ok gluyajan.\nBatcoba va zvak koe talpeyot ke {{SITENAME}} dere robazer.",
        "nosuchspecialpage": "Mekruldesu aptafu bu",
        "accountcreatedtext": "Favesikpata ke $1 tir reduyuna.",
        "createaccount-title": "Pataredura koe {{SITENAME}}",
        "loginlanguagelabel": "Ava : $1",
+       "pt-login": "Pilkomodá",
+       "pt-createaccount": "Pataredú",
        "changepassword": "Betara va remravlem",
        "resetpass_announce": "Rin kan ugalorafa 'email' beksa va int pilkomodayal.\nTa da wan zo pilkomodal, va warzaf remravlem batlize gobazel :",
        "resetpass_header": "Va remravlem gobetal !",
        "newarticle": "(Warzaf)",
        "newarticletext": "Va gluyasiki va metisu bu su vulegal.\nTa buredura, ko vlevef bor toz geltsutel (va [$1 pomarabu] ta loa giva wil).\nEde batlize roklason tigil, va '''back''' uzadjo ke nedisiki vulegal.",
        "anontalkpagetext": "---- ''Vous êtes sur la page de discussion d'un utilisateur anonyme qui n'a pas encore créé un compte ou qui ne l'utilise pas. Pour cette raison, nous devons utiliser l'adresse IP numérique pour l'identifier. Une adresse de ce type peut être partagée entre plusieurs utilisateurs. Si vous êtes un utilisateur anonyme et si vous constatez que des commentaires qui ne vous concernent pas vous ont été adressés, vous pouvez [[Special:UserLogin|créer un compte ou vous connecter]] afin d'éviter toute future confusion.''",
-       "noarticletext": "Moe batu bu mek krent dure tir.\nVanmiae yonaru bu [[Special:Search/{{PAGENAME}}|va man buvergumvelt rotaneyal]],\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} va gluyan log robetal],\noke [{{fullurl:{{FULLPAGENAME}}|action=edit}} va batu bu robetal]</span>.",
-       "noarticletext-nopermission": "Dure me krent koe batu bu.\nVanmia yonaru bu [[Special:Search/{{PAGENAME}}|va batu bu rotaneyal]],\noke <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|bu={{FULLPAGENAMEE}}}} va icdef logs rotaneyal]</span>.",
+       "noarticletext": "Moe batu bu mek krent dure tir.\nVanmiae yonaru bu [[Special:Search/{{PAGENAME}}|va man buvergumvelt rotaneyal]],\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} va gluyan log robetal],\noke [{{fullurl:{{FULLPAGENAME}}|action=edit}} va batu bu redul]</span>.",
+       "noarticletext-nopermission": "Dure me krent koe batu bu.\nVanmia yonaru bu [[Special:Search/{{PAGENAME}}|va batu bu rotaneyal]],\noke <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|bu={{FULLPAGENAMEE}}}} va icdef logs rotaneyal]</span>, voxe va batu bu vol ronoredul.",
        "userpage-userdoesnotexist": "\"<nowiki>$1</nowiki>\" favesikpata me tir vuesteyena. Vay stujel ede va batu bu roredul ike robetal.",
        "clearyourcache": "'''Note :''' Après avoir sauvegardé, vous devez forcer le rechargement de la page pour voir les changements : '''Mozilla / Konqueror / Firefox''' : ''ctrl-shift-r'', '''IE''' : ''ctrl-f5'', '''Safari''' : ''cmd-shift-r''; '''Konqueror''' : ''f5''.",
        "usercssyoucanpreview": "'''Astuce :''' utilisez le bouton '''Prévisualisation''' pour tester votre nouvelle feuille css/js avant de l'enregistrer.",
        "searchprofile-advanced-tooltip": "Aneyara ko pilkovafo yoltxo",
        "search-result-size": "$1 ({{PLURAL:$2|1 trogarn|$2 trogarn}})",
        "search-result-category-size": "{{PLURAL:$1|1 bewik|$1 bewik}} ({{PLURAL:$2|1 volveyloma|$2 volveyloma}}, {{PLURAL:$3|1 iyeltak|$3 iyeltak}})",
-       "search-redirect": "(graskara va $1)",
+       "search-redirect": "( graskara male $1 )",
        "search-section": "($1 gabot)",
        "search-suggest": "Va $1 sugdalayal ?",
        "search-interwiki-caption": "Beraf abdumimakseem",
        "searchrelated": "skedaf",
        "searchall": "kot",
        "showingresults": "Vlevefa nedira va {{PLURAL:$1|'''1''' trasiks|'''$1''' trasiks}} dem #'''$2''' toza.",
+       "search-showingresults": "{{PLURAL:$4|Nekiks <strong>$1</strong> ke <strong>$3</strong>|Nekiks <strong>$1 – $2</strong> ke <strong>$3</strong>}}",
        "search-nonefound": "Mek trasiks vas kucilara",
        "powersearch-legend": "Aneyapara",
        "powersearch-ns": "Aneyara koe yoltxo:",
        "action-browsearchive": "aneyara va sulayanu bu",
        "action-siteadmin": "Elekara ok grielekara va origak",
        "nchanges": "$1 {{PLURAL:$1|betaks|betaks}}",
+       "enhancedrc-history": "izvot",
        "recentchanges": "Noeltaf betakseem",
        "recentchanges-legend": "Ikatcuks ke noeltaf betaks",
        "recentchanges-summary": "Moo batu bu va ironokaf betakseem ke {{SITENAME}} suzdal.",
        "recentchanges-label-minor": "Betamaks",
        "recentchanges-label-bot": "Bata betara gan \"bot\" zo sopuyur",
        "recentchanges-label-unpatrolled": "Bat betaks men al zo fier",
+       "recentchanges-label-plusminus": "Ota vas \"bytes\" ke batu bu num aldo al betawed",
+       "recentchanges-legend-heading": "<strong>Pebuda :</strong>",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ( va [[Special:NewPages|vexala dem warzabu bu]] dere wil )",
        "rcnotefrom": "Tir skuyun betakseem mali <strong>$2</strong> (<b>$1</b> cugon).",
        "rclistfrom": "Nedira va warzaf betakseem mali $3 $2",
        "rcshowhideminor": "$1 betamakseem",
+       "rcshowhideminor-hide": "Palsel",
        "rcshowhidebots": "$1 stiernik",
-       "rcshowhideliu": "$1 vertokayan favesikeem",
+       "rcshowhidebots-show": "Nedil",
+       "rcshowhideliu": "$1 vertokayan favesik",
+       "rcshowhideliu-hide": "Palsel",
        "rcshowhideanons": "$1 yoltiskaf favesikeem",
+       "rcshowhideanons-hide": "Palsel",
        "rcshowhidepatr": "$1 fierabetareem",
        "rcshowhidemine": "$1 va jinaf webekseem",
-       "rclinks": "Nedira va $1 ironokaf betaks mali $2 ironokaf viel; $3 betamaks.",
+       "rcshowhidemine-hide": "Palsel",
+       "rclinks": "Nedira va $1 daref betaks mali $2 daref viel",
        "diff": "amid-",
        "hist": "izvot",
        "hide": "palsera va",
        "newpageletter": "W",
        "boteditletter": "s",
        "number_of_watching_users_pageview": "[$1 nedis {{PLURAL:$1|favesik|favesik}}]",
+       "rc-change-size-new": "$1 {{PLURAL:$1|byte|bytes}} radimi betara",
        "newsectionsummary": "/* $1 */ warzaf gabot",
        "rc-enhanced-expand": "Pintanedira (JavaScript tir adraf)",
        "rc-enhanced-hide": "Pintapalsera",
        "recentchangeslinked-feed": "Gluyasikisuzdara",
        "recentchangeslinked-toolbox": "Gluyasikisuzdara",
        "recentchangeslinked-title": "Betakseem skedas va \"$1\"",
-       "recentchangeslinked-summary": "Batu aptafu bu va ironokaf betakseem va gluyasikikirafu bu vexalar.\nBu koe [[Special:Watchlist|rinafi suzdasiki]] tid '''vastaakorafu'''.",
+       "recentchangeslinked-summary": "Va buyolt bazel enide va betara va kotu bu gluyaxakirafu di wil. ( Witison va bewa ke loma, pune {{ns:category}}:Yolt ke loma bazel). Betaks ke bu koe [[Special:Watchlist|rinafa suzdaxa]] tid '''vastaakorafu'''.",
        "recentchangeslinked-page": "Buyolt :",
        "recentchangeslinked-to": "Nedira va bueem gluyarakirafu gu batu bu ikaon",
        "upload": "Iyeltakkalvajara",
        "filehist-filesize": "Iyeltakaldo",
        "filehist-comment": "Sebuks",
        "imagelinks": "Favera va iyeltak",
-       "linkstoimage": "Vlevefi {{PLURAL:$1|bugluyasiki|$1 bugluyasiki}} va bat iyeltak :",
+       "linkstoimage": "Valevefa {{PLURAL:$1|bugluyaxa|$1 bugluyaxa}} va bat iyeltak :",
        "nolinkstoimage": "Meku bu va bata ewava ruldar.",
        "morelinkstoimage": "Rupera va [[Special:WhatLinksHere/$1|lofi skedasiki]] va bat iyeltak.",
        "duplicatesoffile": "Bat {{PLURAL:$1|iyeltak tir|$1 iyeltak tid}} jontolaca ke bat iyeltak ([[Special:FileDuplicateSearch/$2|lo pinta]]) :",
        "sharedupload": "Bat iyeltak tir ke $1 ise gan ar abdumimaks zo rofaver.",
        "sharedupload-desc-here": "Bat iyeltak tir mal $1 ise gan yonar abdumimaks rotir zo faver.\nPimtara moe inafu [$2 iyeltakbu] vleveon zo nedir.",
        "uploadnewversion-linktext": "Kalvajara va warzaf siatos ke bat iyeltak",
+       "upload-disallowed-here": "Va bat iyeltak me romosutel",
        "filerevert": "Dimplekura va $1",
        "filerevert-legend": "Dimplekura va iyeltak",
        "filerevert-comment": "Sebuks :",
        "undelete-show-file-submit": "En",
        "namespace": "Yoltxo:",
        "invert": "Tukevolara va rebara",
+       "namespace_association": "Gesiano yoltxo",
        "blanknamespace": "(Nelkaxo)",
-       "contributions": "Webereem ke favesik",
+       "contributions": "webereem ke {{GENDER:$1|Favesik}}",
        "contributions-title": "Favesikwebekseem icde $1",
        "mycontris": "Jinaf webekseem",
        "contribsub2": "Ke $1 ($2)",
        "nocontribs": "Meka betara vadjesa va bata luda se al zo trasir.",
-       "uctop": " (ironokaf)",
+       "uctop": " ironokaf",
        "month": "Mali aksat (is logaveon) :",
        "year": "Mali ilana (is logaveon) :",
        "sp-contributions-newbies": "Anton nedira va warzafavesikaf webekseem",
        "tooltip-pt-mycontris": "Jinaf webekseem",
        "tooltip-pt-login": "Pataredura zo koldar voxe me tir vrebafa.",
        "tooltip-pt-logout": "Voldogluyara",
+       "tooltip-pt-createaccount": "Gopataredul aze pilkomodal ; voxe me zo gonaskil",
        "tooltip-ca-talk": "Keyaksera va telizbu",
-       "tooltip-ca-edit": "Va batu bu robetal. Va \"Abdinedira\" vulegasiki abdi giwara vay favel !",
+       "tooltip-ca-edit": "Bubetara",
        "tooltip-ca-addsection": "Bokara va warzaf gabot",
        "tooltip-ca-viewsource": "Batu bu zo nendar. Rin va klita rowil.",
        "tooltip-ca-history": "Abdif siatoseem ke batu bu.",
        "tooltip-t-recentchangeslinked": "Noeltaf betakseem koe kotu bu skedasu va batu bu",
        "tooltip-feed-rss": "RSS rust icde batu bu",
        "tooltip-feed-atom": "Atom rust icde batu bu",
-       "tooltip-t-contributions": "Wira va webekseem ke bat favesik",
+       "tooltip-t-contributions": "Wira va yon webeks ke {{GENDER:$1|bat favesik}}",
        "tooltip-t-emailuser": "Staksara pu bat favesik",
        "tooltip-t-upload": "Kalvajara va iyeltak",
        "tooltip-t-specialpages": "Aptabueem",
        "tooltip-ca-nstab-main": "Rupera va cekbu",
        "tooltip-ca-nstab-user": "Wira va favesikbu",
        "tooltip-ca-nstab-media": "Wira va kanacabu",
-       "tooltip-ca-nstab-special": "Batu bu tis aptafu bu vaon me robetal",
+       "tooltip-ca-nstab-special": "Batu bu tir aptafu numen zo robetar",
        "tooltip-ca-nstab-project": "Wira va abdumimaks bu",
        "tooltip-ca-nstab-image": "Wira va iyeltakbu",
        "tooltip-ca-nstab-mediawiki": "Wira va bolkstaksa",
        "spambot_username": "Tucuara va MediaWiki \"spam\"\nMediaWiki spam cleanup",
        "spam_reverting": "Dimplekura va ironokaf siatos meruldas va gluyasiki do $1",
        "spam_blanking": "Kot betaks ruldas va gluyasiki do $1, tuvlardara",
+       "pageinfo-toolboxlink": "Bugiva",
        "markaspatrolleddiff": "Marquer comme vérifiée",
        "markaspatrolledtext": "Marquer cet article comme vérifié",
        "markedaspatrolled": "Marqué comme vérifié",
        "file-info-size": "$1 × $2 pixel, iyeltakaldo : $3, MIME ord : $4",
        "file-nohires": "Me roderaykan logijaf lum.",
        "svg-long-desc": "SVG iyeltak, prekson $1 × $2 pixels, iyeltakaldo : $3",
-       "show-big-image": "Geltraf lum",
+       "show-big-image": "Xantaf iyeltak",
+       "show-big-image-preview": "Lum ke bata abdiwira : $1.",
+       "show-big-image-size": "$1 × $2 px",
        "newimages": "Warzaf ewaviyeltak yo",
        "imagelisttext": "Tir vexala dem '''$1''' {{PLURAL:$1|iyeltak|iyeltak}} $2 pulana.",
        "newimages-summary": "Batu aptafu bu va ironokaf kalvajayan iyeltakeem nedir.",
        "specialpages-group-spam": "Spam xekeem",
        "blankpage": "Butuvlardara",
        "tag-filter": "[[Special:Tags|Tag]] espara:",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Tag|Tags}}]]: $2",
+       "logentry-delete-delete": "$1 {{GENDER:$2|sulayanu}} $3 bu",
        "revdelete-restricted": "irutara rewana pu ristusik",
        "revdelete-unrestricted": "irutara tiolteyena pu ristusik",
-       "rightsnone": "(mek)"
+       "rightsnone": "(mek)",
+       "searchsuggest-search": "Va {{SITENAME}} betar"
 }
index 8b995ff..0958e8d 100644 (file)
        "contribsub2": "{{GENDER:$3|$1}} ($2) कय खर्तीन",
        "contributions-userdoesnotexist": "सदस्य \"$1\" पंजीकृत नाइ है।",
        "nocontribs": "इन कसौटियों से मिलनेवाले बदलाव मिले नहीं।",
-       "uctop": "(अबहिनै कय)",
+       "uctop": "अबहिनै कय",
        "month": "इ महिन्नासे (औ पुरान):",
        "year": "इ सालसे (औ पुरान):",
        "sp-contributions-newbies": "खालि नँवा सदस्यन् कय योगदान देखावा जाय",
        "tags": "वैध बदलाव चिप्पि",
        "tag-filter": "[[Special:Tags|चिप्पी]] छननी:",
        "tag-filter-submit": "फिल्टर",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|टैग}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|टैग}}]]: $2",
        "tags-title": "चिप्पि",
        "tags-intro": "यह पृष्ठ अर्थ सहित वह चिप्पियाँ दर्शाता है जिनका कोई तंत्रांश किसी संपादन पर निशान लगाने के लिए इस्तेमाल कर सकता है।",
        "tags-tag": "चिप्पी कय नाँव",
        "dberr-again": "कुछ मिन रुकि कय फिरसे लोड किन जाय",
        "dberr-info": "(डाटाबेस से संपर्क नहीं हो पा रहा: $1)",
        "dberr-info-hidden": "(डाटाबेस से संपर्क नहीं किया जा सका)",
-       "dberr-usegoogle": "इही बिंचे आप गूगल से खोज कै सका जात है ।",
-       "dberr-outofdate": "ध्यान दे, हो सकता है कि हमारी सामग्री से संबंधित उनकी सूची बासी हो।",
-       "dberr-cachederror": "यह अनुरोधित पन्ने की संचित प्रति है, हो सकता है यह ताज़ी न हो।",
        "htmlform-invalid-input": "आपके द्वारा प्रदत्त कुछ सामग्री में समस्याएँ हैं",
        "htmlform-select-badoption": "आपके द्वारा निर्दिष्ट मान वैध विकल्प नहीं है।",
        "htmlform-int-invalid": "आपके द्वारा निर्दिष्ट मान पूर्णांक नहीं है।",
index bf67318..eb1c485 100644 (file)
        "anoncontribs": "Fəaliyyətim",
        "contribsub2": "{{GENDER:$3|$1}} ($2) adlı istifadəçinin fəaliyyəti",
        "nocontribs": "Bu kriteriyaya uyğun redaktələr tapılmadı",
-       "uctop": "(hal-hazırkı)",
+       "uctop": "hal-hazırkı",
        "month": "Ay",
        "year": "Axtarışa bu tarixdən etibarən başla:",
        "sp-contributions-newbies": "Ancaq yeni istifadəçilərin fəaliyyətlərini göstər",
index b63440c..dd3d0e0 100644 (file)
        "parser-unstrip-loop-warning": "تکرارلاما دونمه سی قبول ائدیلدی",
        "unstrip-depth-warning": "حداکثر ارجاع دستور دا unstrip تجاوز گئچیب دیر ($1)",
        "converter-manual-rule-error": "خطا ال مبدیلی قانون لاریندا",
-       "undo-success": "بو دَییشیک‌لیک گئری آلینا بیلر. لطفاً آشاغی‌داکی موقاییسه ائتمیی نظارت ائدین، حقیقتن بو دییشیک‌لیگی ائتمک ایستدیگینیزدن امین اولون و صحیفنی یازا‌راق بیر اوولکی دییشیک‌لیگی گئرییه آلین.",
+       "undo-success": "بو دَییشیک‌لیک قایتاریلا بیلر. لوطفاً آشاغی‌داکی موقایسه‌نی یوْخلاییب، دوغرودان بو دییشیک‌لیگی ائتمک ایستدیگینیزدن آرخایین اولون و صفحه‌نی ذخیره ائتمکله قاباقکی دییشیکلیگی قایتارین.",
        "undo-failure": "دییشیک‌لیک‌لرین توققوشماسی نتیجه‌سینده گئرییه قایتارما ایشی اوغورسوز اولدو.",
        "undo-norev": "دوزلیش‌لر گئری قایتاریلا بیلینمیر، چونکی اونلار یا مؤوجود دئییل، یا دا سیلینیب.",
        "undo-nochange": "نظره گلیر دَییشدیرمه قاباغجادان قایتاریلیب.",
        "showhideselectedversions": "سئچیلمیش نوسخه‌لری گؤستر/گیزلد",
        "editundo": "قایتار",
        "diff-empty": "فرقیسیز",
-       "diff-multi-sameuser": "(همن کی ایشلدیچی طرفیندن ائدیلمیش  {{PLURAL:$1|بیر دَییشلیک|$1 بیر نئچه دَییشلیک}} گوستریلمیر)",
+       "diff-multi-sameuser": "(بۇ ایشلدنین طرفیندن ائدیلمیش  {{PLURAL:$1|بیر دَییشیکلیک|$1 بیر نئچه دَییشیکلیک}} گؤستریلمیر)",
        "diff-multi-otherusers": "({{PLURAL:$1|۱ میانی نوسخه لر|$1 میانی نوسخه لر}} دَییک اولونموش {{PLURAL:$2|۱ ایشلدچی|$2 ایشلدچی}}طرفیندن گوستریلمیر)",
        "diff-multi-manyusers": "{{PLURAL:$2|بیر|$2}}-دن چوخ ایستیفاده‌چی یارادان {{PLURAL:$1|بیر|$1}} نوسخه، گؤستریلمه‌ییب‌دیر",
        "difference-missing-revision": "بو فرقین ($1) {{PLURAL:$2|بیر|$2}} نوسخه‌سی تاپیلانمادی.\n\nعموماً بو خطا، سیلینن بیر صحیفه‌یه واختی گئچمیش بیر فرق باغلانتی‌سیلا گلمک ایله آرا گلر.\n[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}}سیلمک سیاهی‌سی]ندا باشقا بیلگیلر اولا بیلر.",
        "recentchanges-legend-heading": "<strong>قیسالتمالار:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (بیرده [[Special:NewPages|یئنی صفحه‌لرین لیستینه]] باخین)",
        "rcfilters-other-review-tools": "داها یوخلاما آلتلری",
+       "rcfilters-group-results-by-page": "دییشیکلیکلری صفحه‌لرینه گؤره سیرالا",
        "rcfilters-activefilters": "چالیشقان فیلترلر",
-       "rcfilters-limit-title": "دَییشدرمه سایی‌سی",
+       "rcfilters-activefilters-hide": "گیزلت",
+       "rcfilters-advancedfilters": "گئنیش فیلترلر",
+       "rcfilters-limit-title": "دَییشدیرمه سایی‌سی",
        "rcfilters-date-popup-title": "آختاریش چاغی",
        "rcfilters-days-title": "سوْن گۆنلر",
        "rcfilters-hours-title": "سوْن ساعاتلار",
        "rcfilters-quickfilters": "ذخیره اولونموش فیلترلر",
        "rcfilters-quickfilters-placeholder-title": "هله‌لیک هئچ بیر فیلتر ذخیره اوْلونماییبدیر",
        "rcfilters-savedqueries-defaultlabel": "ذخیره اوْلونموش فیلترلر",
+       "rcfilters-savedqueries-setdefault": "دفالت حالتده تنظیمله",
+       "rcfilters-savedqueries-new-name-placeholder": "فیلتر هدفینی آچیقلا",
+       "rcfilters-savedqueries-apply-label": "فیلتر یارات",
+       "rcfilters-clear-all-filters": "بۆتون فیلترلری سیل",
        "rcfilters-show-new-changes": "اَن سون دَییشیکلیکلره باخ",
        "rcfilters-search-placeholder": "سوْن دییشیکلیکلری فیلترله (منودان سئچین یوْخسا فیلتر آدینی آختارین)",
        "rcfilters-filterlist-title": "فیلترلر",
        "rcfilters-filterlist-feedbacklink": "بیزه بو فیلترلره گؤره دوشوندوگونوزو بیلیندیرین!",
        "rcfilters-highlightbutton-title": "نتیجه‌لری هایلایتلا",
        "rcfilters-filtergroup-authorship": "دییشدیرن",
+       "rcfilters-filtergroup-userExpLevel": "ایشلدن آدیازدیرما و تجروبه‌سی",
+       "rcfilters-filter-user-experience-level-registered-label": "آدیازدیریلمیش",
+       "rcfilters-filter-user-experience-level-unregistered-label": "آدیازدیریلمامیش",
+       "rcfilters-filter-user-experience-level-learner-label": "اؤیرننلر",
+       "rcfilters-filter-user-experience-level-experienced-label": "تجروبه‌لی ایشلدنلر",
        "rcfilters-filtergroup-automated": "اوْتوماتیک دییشدیرمه‌لر",
        "rcfilters-filter-humans-label": "اینسان (غئیر روْبات)",
        "rcfilters-filter-humans-description": "اینسان اَلی ایله دییشدیرمه‌لر",
+       "rcfilters-filtergroup-reviewstatus": "یوخلاما وضعیتی",
+       "rcfilters-filter-minor-label": "کیچیک دَییشدیرمه‌لر",
+       "rcfilters-filter-major-label": "کیچیک اوْلمایان دییشدیرمه‌لر",
+       "rcfilters-filtergroup-watchlist": "ایزلنمیش صفحه‌لر",
+       "rcfilters-filter-watchlist-watched-label": "ایزلنمیش",
        "rcfilters-filtergroup-changetype": "دَییشیکلیک نوعو",
        "rcfilters-filter-pageedits-label": "صفحه دییشدیرمه‌لری",
        "rcfilters-filter-newpages-label": "صفحه یاراتما",
        "rcfilters-filter-logactions-label": "چالیشمالار ژورنالی",
        "rcfilters-filtergroup-lastRevision": "سوْن نوسخه‌لر",
        "rcfilters-filter-lastrevision-label": "سوْن نوسخه",
+       "rcfilters-filter-previousrevision-label": "سوْن نوسخه اولمایان",
        "rcfilters-exclude-button-off": "سئچیلمیشلرین چیخاریلماسی",
        "rcfilters-exclude-button-on": "سئچیلمیشلرین چیخاریلماسی",
+       "rcfilters-view-tags": "اتیکتلنمیش دییشدیرمه‌لر",
        "rcfilters-liveupdates-button": "دیری یئنیلنمه‌لر",
        "rcnotefrom": "آشاغی داکی دَییشیک لرده <strong>$3, $4</strong> (دن <strong>$1</strong> {{PLURAL:$5|چان گوستریلیب|چان گوستریلیب دیر}}).",
        "rclistfrom": "$3 $2 واختیندان باشلایاراق یئنی دییشیکلری گؤستر",
        "trackingcategories-disabled": "بؤلمه باغلانیب‌دیر.",
        "mailnologin": "گؤندرمه آدرسی یوخدور",
        "mailnologintext": "باشقا ایستیفاده‌چیلره ایمیل گؤندرک اوچون، [[Special:UserLogin|گیریش]] ائدیب و [[Special:Preferences|ترجیحلر]]ینیزده گئچرلی ایمیل آدرسی وئرمه‌لیسینیز.",
-       "emailuser": "بÙ\88 Ø§Û\8cستÛ\8cÙ\81ادÙ\87â\80\8cÚ\86Û\8câ\80\8cÛ\8cÙ\87 Ø§Û\8cÙ\85یل گؤندر",
-       "emailuser-title-target": "بÙ\88 {{GENDER:$1|اÛ\8cستÛ\8cÙ\81ادÙ\87â\80\8cÚ\86Û\8c}}â\80\8cÛ\8cÙ\87 Ø§Û\8cÙ\85یل گؤندر",
+       "emailuser": "بÙ\88 Ø§Û\8cØ´Ù\84دÙ\86Ù\87 Ø§Û\8cÙ\85ئیل گؤندر",
+       "emailuser-title-target": "بÙ\88 {{GENDER:$1|اÛ\8cØ´Ù\84دÙ\86Ù\87}}â\80\8c Ø§Û\8cÙ\85ئیل گؤندر",
        "emailuser-title-notarget": "ایستیفاده‌چی‌یه ایمیل گؤندر",
        "emailpagetext": "آشاغیداکی فورمدان، بو {{GENDER:$1|ایستیفاده‌چی}}‌یه ایمئیل گؤندرمک اۆچون ایستیفاده ائده بیلرسینیز.\n[[Special:Preferences|اؤز ترجیحلرینیز]]ده وئرن ایمئیل آدرسی، بو ایمئیلین \"From\" یئرینده گؤستریله‌رک ایمئیلی آلان سیزه موستقیم جاواب گؤندره بیلر.",
        "defemailsubject": "«$1» آدلی ایستیفاده‌چی‌دن، {{SITENAME}} ایمیلی",
        "watchlistanontext": "لطفاً، ایزلدیگینیز صحیفه‌لری گؤرمک و یا دَییشدیرمک اوچون گیریش ائدین.",
        "watchnologin": "داخیل اولمامیسینیز",
        "addwatch": "ایزلمه سیاهی‌سینا علاوه ائت",
-       "addedwatchtext": "\"[[:$1]]\" صحیفه‌سی [[Special:Watchlist|ایزله‌دیکلرینیزه]] آرتیریلدی. بو صحیفه‌ده و ایلگیلی دانیشیق صحیفه‌سین‌ده‌کی بوتون دییشیکلیکلر اوردا گؤستریله‌جکلر.",
+       "addedwatchtext": "\"[[:$1]]\" صفحه‌سی [[Special:Watchlist|ایزله‌دیکلرینیزه]] آرتیریلدی. بو صفحه‌ده و باغلی دانیشیق صفحه‌سینده‌کی بوتون دییشیکلیکلر اورادا گؤستریله‌جکلر.",
        "addedwatchtext-short": "«$1» صفحه‌سی سیزین ایزله‌دیلرینیزه آرتیریلدی.",
        "removewatch": "بو صحیفنی ایزلدیگیم صحیفه‌لر سیاهی‌سین‌دان چیخار",
        "removedwatchtext": "\"[[:$1]]\" صفحه‌سی [[Special:Watchlist|ایزلمه لیستینیزدن]] چیخاریلدی.",
        "contribsub2": "{{GENDER:$3|$1}} اوچون ($2)",
        "contributions-userdoesnotexist": "«$1» ایشلدن حسابی ثبت اولونماییب‌دیر.",
        "nocontribs": "بو موشخصاتا اویان دییشیکلیک تاپیلمادی.",
-       "uctop": "(ایندیکی)",
+       "uctop": "ایندیکی",
        "month": "بۇ آی‌دان (و قاباقجا):",
        "year": "بۇ ایل‌دن (و قاباقجا):",
        "sp-contributions-newbies": "تکجه یئنی ایشلدنلرین چالیشمالارینی گؤستر",
        "movepagetext-noredirectfixer": "آشاغی‌داکی فوْرمو دوْلدورماق بیر صفحه‌نی یئنی‌دن آدلاندیریر، بۆتون گئچمیشینی یئنی آدا داشیییر.\nکؤهنه موضوعو یئنی باشلیغا بیر یوْللاندیرما صفحه‌سی اوْلار.\n[[Special:DoubleRedirects|ایکی‌قات]] یوْخسا [[Special:BrokenRedirects|خطالی یوْللاندیرمالار]] صفحه‌لرینی یوْخلایین.\nباغلانتی‌لارین گئتمه‌لری گرک اولان یئرلره گئتدیک‌لرینی آرخایین اوْلماق سیزین مسعولیتینیزدیر.\n\nیئنی باشلیقدا مؤوجود بیر صفحه وارسا، بوْش یوْخسا بیر یوْللاندیرما اوْلمادیقجا و دییشیک‌لیک گئچمیشی اوْلمازسا، صفحه داشینمایاجاق.\nبۇ یانی، بیر صفحه‌نی اشتباه ائتسه‌نیز صفحه‌نی کؤهنه آدییلا یئنی‌دن آدلاندیرا بیلرسینیز، آنجاق بیر صفحه‌نی قاباقجادان مووجود اوْلان صفحه‌یه یوْللاندیرا بیلمزسینیز.\n\n' 'تذکور!'\nچوْخ گؤروشلو صفحه‌لرین یوْللاندیرماسی گؤزله‌نیلمز اثرلری اوْلا بیلر. لوطفا یوْللاندیرمادان قاباق، ایشینیزین نتیجه‌سیندن آرخایین اوْلون.",
        "movepagetalktext": "باغلی دانیشیق صفحه‌سی اوتوماتیک داشیناجاقدیر 'گر:'\n* بوش اولمایان دانیشیق صفحه‌سی یئنی آدلا آرتیق مؤوجوددورسا، و یا\n* سیز بایراغی آشاغی‌دان گؤتورسه‌نیز.\n\nبو حال‌لاردا ، احتیاج یارانارسا سیز صفحه‌لری ال ایله بیرلش‌دیرمک مجبوریتینده قالاجاقسینیز",
        "moveuserpage-warning": "' 'خبردارلیق:' بیر ایستیفاده‌چی صحیفه‌سینی داشیماق اوزرسینیز. خاهیش ائدیریک یالنیز صحیفه‌نین تاشیناجاغینا، آنجاق ایستیفاده‌چی‌نین یئنی‌دن آدلاندیریلمایاجاغینا دقت ائدین.",
+       "movecategorypage-warning": "<strong>تذکور:</strong> سیز بیر بؤلمه صفحه‌سینی داشیماق ایسته‌ییرسینیز. لطفاً نظرده آلین تکجه بؤلمه داشیناجاق، صفحه‌لر قاباقکی بؤلمه‌ده قالیب، یئنی بؤلمه‌یه <em>داشینمایاجاقدیر</em>.",
        "movenologintext": "صحیفه‌نین آدینی دییشیک‌لیک اوچون قئیدیات‌لی و [[Special:UserLogin|سیستئمه]] داخیل اولمانیز لازیم‌دیر.",
        "movenotallowed": "سیز صحیفه‌لرین آدینی دییشه بیلمزسینیز.",
        "movenotallowedfile": "سیز فایل‌لارین آدینی دییشه بیلمزسینیز.",
        "tags": "مومکون دییشیک‌لیک ائتیکئت‌لری",
        "tag-filter": "[[Special:Tags|اِتیکِت]] فیلتری:",
        "tag-filter-submit": "سۆزگَج",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|اِتیکِت|اِتیکِتلر}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|اِتیکِت|اِتیکِتلر}}]]: $2",
+       "tag-mw-new-redirect": "یئنی یوْللاندیرما",
+       "tag-mw-removed-redirect": "یوْللاندیرما سیلیندی",
+       "tag-mw-blank": "بوْشالتما",
        "tags-title": "اِتیکتلر",
        "tags-intro": "بو صفحه، نرم افزار دَییشدیرمه‌لری علامتله‌ین اِتیکِتلری و اونلارین معنالارینی گؤستریر.",
        "tags-tag": "اِتیکت آدی",
        "dberr-problems": "عوذر ایسته‌ییریک! بو سایت‌دا تِکنیکی ایشکال‌لار واردیر.",
        "dberr-again": "بیر نئچه دقیقه دؤزوب سونرا یئنی‌دن یوکله‌یین.",
        "dberr-info": "(دیتابیسه باغلانماق اولونمادی: $1)",
-       "dberr-usegoogle": "بو آرادا، گوگل‌ده آختارابیلرسینیز.",
-       "dberr-outofdate": "دیقت ائدین کی اوردا بیزیم سایتیمیزین ایندِکسی کؤهنه اولا بیلر.",
-       "dberr-cachederror": "بو ایسته‌نیلن صحیفه‌نین بیر کَش اولونموش کوپی‌سیدیر و کؤهنه اولا بیلر.",
        "htmlform-invalid-input": "سیزین بعضی وئردیکلرینیزله ایلگی‌لی موشکول‌لر وار",
        "htmlform-select-badoption": "سیز وئردیگینیز دَیَر، گئچرلی دئییل.",
        "htmlform-int-invalid": "سیز وئردیگینیز دَیَر، بیر تام عدد دئییل.",
index 06994ec..11c99f5 100644 (file)
        "contribsub2": "{{GENDER:$3|$1}} башҡарған эше ($2)",
        "contributions-userdoesnotexist": "«$1» исемле иҫәп яҙыуы юҡ.",
        "nocontribs": "Күрһәтелгән шарттарға яуап биргән үҙгәртеүҙәр табылманы.",
-       "uctop": "(ағымдағы)",
+       "uctop": "ағымдағы",
        "month": "Айҙан башлап (һәм элегерәк):",
        "year": "Йылдан башлап (һәм элегерәк):",
        "sp-contributions-newbies": "Яңы иҫәп яҙмалары башҡарған эште генә күрһәтергә",
        "tags": "Ҡулланылған үҙгәртеү билдәләре",
        "tag-filter": "[[Special:Tags|Билдәләрҙе]] һайлау:",
        "tag-filter-submit": "Һайлау",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Тамғалар}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Тамғалар}}]]: $2",
        "tag-mw-contentmodelchange": "Йөкмәтке моделен үҙгәртеү",
        "tag-mw-contentmodelchange-description": "Биттең [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:ChangeContentModel йөкмәткеһе моделен үҙгәрткән] төҙәтеүҙәр",
        "tags-title": "Билдәләр",
        "dberr-again": "Битте бер нисә минуттан яңыртып ҡарағыҙ.",
        "dberr-info": "(Мәғлүмәттәр базаһы серверы менән тоташтырылып булмай: $1)",
        "dberr-info-hidden": "(Мәғлүмәт базаларының серверына тоташып булмай)",
-       "dberr-usegoogle": "Әлегә һеҙ Google ярҙамында эҙләп ҡарай алһығыҙ.",
-       "dberr-outofdate": "Әммә уның индекстары иҫекргән булыуы мөмкинлеген күҙ уңында тотоғоҙ.",
-       "dberr-cachederror": "Түбәндә һоралған биттең кэшта һаҡланған өлгөһө күрһәтелгән, унда аҙаҡҡы үҙгәртеүҙәр булмауы мөмкин.",
        "htmlform-invalid-input": "Һеҙ кереткән мәғлүмәттең ниндәйҙер өлөшө ҡыйынлыҡтар тыуҙыра",
        "htmlform-select-badoption": "Һеҙ керетҡән мәғәнә дөрөҫ түгел",
        "htmlform-int-invalid": "Һеҙ бөтөн һан керетмәгәнһегеҙ.",
index c1bb56b..8b7cf40 100644 (file)
        "contributions-title": "Nutzabeidräg vo „$1“",
        "mycontris": "Meine Beidreg",
        "contribsub2": "Vo {{GENDER:$3|$1}} ($2)",
-       "uctop": "(aktuell)",
+       "uctop": "aktuell",
        "month": "und Monad:",
        "year": "Bis zan Joar:",
        "sp-contributions-newbies": "Nua Beidräg vo de neichn Nutza ozoagn",
        "tags": "Gütige Änderrungsmarkiarunen",
        "tag-filter": "[[Special:Tags|Markiarungs]]-Fuita:",
        "tag-filter-submit": "Füter",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Markierung|Markiarunga}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Markierung|Markiarunga}}]]: $2",
        "tags-title": "Markiarungen",
        "tags-intro": "Dé Seiten zoagt olle Markiarungen, dé fyr Beorweidungen vawendt wern, sówia dé Bedeitung voh dé.",
        "tags-tag": "Markiarungsnåm",
        "dberr-problems": "Tschuidigung. Dé Seiten hod im Moment technische Próbléme.",
        "dberr-again": "Wort a por Minuten und vasuachs dånn neich z' loon.",
        "dberr-info": "(Kå koah Vabindung zum Daatenbånkserver herstön: $1)",
-       "dberr-usegoogle": "Du kunntersd dawei mid Google suachen.",
-       "dberr-outofdate": "Beochtt, daas da Suachindex voh inserne Inhoitt bei Google vaoiterd seih kunnt.",
        "htmlform-required": "Der Wert do werd braucht.",
        "htmlform-submit": "Speichern",
        "htmlform-reset": "Änderrungen ryckgängég mochen",
index 65b91c6..7e61da2 100644 (file)
        "mycontris": "می مشارکتان",
        "contribsub2": "په $1 ($2)",
        "nocontribs": "هچ تغییر هم دپ گون ای معیار در نه بوت.",
-       "uctop": "(بالا)",
+       "uctop": "بالا",
        "month": "چه ماه(و پیش تر):",
        "year": "چه سال(و پیشتر)",
        "sp-contributions-newbies": "پیش دار فقط مشارکتان نوکین حسایانء",
        "dberr-problems": "شرمنده! این سایت ءَ تکنیکی مشکل هستن.",
        "dberr-again": "چنت دقیقه صبر کنیت و دگه صفحه بیاریت",
        "dberr-info": "(نه توینت گون دیتابیس سرور تماس گیرت: $1)",
-       "dberr-usegoogle": "شما تونید دان آ وهد گردگ ته گوگل ءَ آزمایش کنیت.",
-       "dberr-outofdate": "توجه ببینت که می ایندکس محتواءَ بلکین قدیمی ببنت.",
-       "dberr-cachederror": "آ چیزی که رندا کیت یک کپی ذخیره ای چه لوتگین صفحه انت و بلکین قدیمی ببیت",
        "htmlform-invalid-input": "لهتی چه ورودی شما مشکل هست",
        "htmlform-select-badoption": "مقدار وارد بیتگ یک گزینهٔ قابل قبول نهنت.",
        "htmlform-int-invalid": "مقداری که وارد کرته اید یک عدد صحیح نهنت.",
index b19b3b5..d5463dc 100644 (file)
        "anoncontribs": "Mga Kaarambagan",
        "contribsub2": "Para ki {{GENDER:$3|$1}} ($2)",
        "nocontribs": "Mayong mga pagbabago na nahanap na kapadis sa ining mga criteria.",
-       "uctop": "(sa ngunyan)",
+       "uctop": "sa ngunyan",
        "month": "Poon bulan (asin mas amay):",
        "year": "Poon taon (asin mas amay):",
        "sp-contributions-newbies": "Ipahiling an mga kaarambagan kan mga baguhong panindog sana",
        "tags": "Balidong mga marka nin kaliwatan",
        "tag-filter": "[[Special:Tags|Tag]] saraon:",
        "tag-filter-submit": "Saraan",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Tatak|Mga Tatak}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Tatak|Mga Tatak}}]]: $2",
        "tags-title": "Mga marka",
        "tags-intro": "Ining pahina minalista kan mga marka na an kasungatan mapuwedeng maimarka an pagliwat kaini, asin an saindang mga kahulugan.",
        "tags-tag": "Ngarang panmarka",
        "dberr-again": "Prubaring maghalat tabi nin nagkapirang minutos asin otrohon ikarga.",
        "dberr-info": "(Dae makakontak sa serbidor kan datos-sarayan: $1)",
        "dberr-info-hidden": "(Dae makakontak sa serbidor kan datos-sarayan)",
-       "dberr-usegoogle": "Ika puwedeng magprubar na maghanap sa Google nguna.",
-       "dberr-outofdate": "Pasinon mo tabi na an saindang mga indekso kan satuyang laog puwedeng luwas na sa petsa.",
-       "dberr-cachederror": "Ini sarong nakasaray na kopya kan pinaghahagad na pahina, asin puwedeng bakong angat sa petsa.",
        "htmlform-invalid-input": "Igwa nin mga problema an iba sa saimong pinaglaog",
        "htmlform-select-badoption": "An halaga na saimong pinagsambit bakong saro sa balidong pagpipilian.",
        "htmlform-int-invalid": "An halaga na saimong pinagsambit bako na sarong integer.",
index c31c191..124d23b 100644 (file)
        "passwordtooshort": "Паролі павінны ўтрымліваць ня менш за $1 {{PLURAL:$1|сымбаль|сымбалі|сымбаляў}}.",
        "passwordtoolong": "Паролі ня могуць быць даўжэй за $1 {{PLURAL:$1|сымбаль|сымбалі|сымбаляў}}.",
        "passwordtoopopular": "Нельга выкарыстоўваць простыя паролі. Калі ласка, абярыце пароль, які значна цяжэй падабраць.",
+       "passwordinlargeblacklist": "Уведзены пароль знаходзіцца ў сьпісе найбольш частаўжываных пароляў. Калі ласка, абярыце больш унікальны пароль.",
        "password-name-match": "Ваш пароль павінен адрозьнівацца ад Вашага імя ўдзельніка.",
        "password-login-forbidden": "Выкарыстаньне гэтага імя ўдзельніка і паролю было забароненае.",
        "mailmypassword": "Скінуць пароль",
        "timezonelegend": "Часавы пояс:",
        "localtime": "Мясцовы час:",
        "timezoneuseserverdefault": "Выкарыстоўваць стандартныя налады {{GRAMMAR:родны|{{SITENAME}}}} ($1)",
-       "timezoneuseoffset": "Іншы (пазначце розьніцу ў часе)",
+       "timezoneuseoffset": "Іншы (пазначце ніжэй розьніцу ў часе)",
+       "timezone-useoffset-placeholder": "Напрыклад: «-07:00» ці «01:00»",
        "servertime": "Час на сэрвэры:",
        "guesstimezone": "Запоўніць з браўзэра",
        "timezoneregion-africa": "Афрыка",
        "prefs-editor": "Рэдактар",
        "prefs-preview": "Папярэдні прагляд",
        "prefs-advancedrc": "Дадатковыя налады",
-       "prefs-opt-out": "Адмовіцца ад паляпшэньняў",
        "prefs-advancedrendering": "Дадатковыя налады",
        "prefs-advancedsearchoptions": "Дадатковыя налады",
        "prefs-advancedwatchlist": "Дадатковыя налады",
        "prefs-displayrc": "Налады паказу",
        "prefs-displaywatchlist": "Налады паказу",
+       "prefs-changesrc": "Паказваць зьменаў",
+       "prefs-changeswatchlist": "Паказваць зьменаў",
+       "prefs-pageswatchlist": "Старонкі для назіраньня",
        "prefs-tokenwatchlist": "Токен",
        "prefs-diffs": "Розьніцы вэрсіяў",
        "prefs-help-prefershttps": "Гэтая налада набудзе моц пры наступным уваходзе ў сыстэму.",
        "rcfilters-watchlist-markseen-button": "Пазначыць усе зьмены як прагледжаныя",
        "rcfilters-watchlist-edit-watchlist-button": "Рэдагаваць ваш сьпіс назіраньня за старонкамі",
        "rcfilters-watchlist-showupdated": "Зьмены старонак, якія вы не наведвалі пасьля гэтых зьменаў, пазначаныя <strong>тоўстым</strong> з адпаведнымі пазнакамі.",
-       "rcfilters-preference-label": "СÑ\85аваÑ\86Ñ\8c Ð¿Ð°Ð»ÐµÐ¿Ñ\88анÑ\83Ñ\8e Ð²Ñ\8dÑ\80Ñ\81Ñ\96Ñ\8e Ð°Ð¿Ð¾Ñ\88нÑ\96Ñ\85 Ð·Ñ\8cменаÑ\9e",
-       "rcfilters-preference-help": "Ð\90дкаÑ\82вае Ñ\80Ñ\8dдÑ\8bзайн Ñ\96нÑ\82Ñ\8dÑ\80Ñ\84Ñ\8dйÑ\81Ñ\83 2017 Ð³Ð¾Ð´Ñ\83 Ñ\96 Ñ\9eÑ\81е Ñ\96нÑ\81Ñ\82Ñ\80Ñ\83мÑ\8dнÑ\82Ñ\8b, Ð´Ð°Ð´Ð°Ð´Ð·ÐµÐ½Ñ\8bÑ\8f Ð· Ñ\82аго Ñ\87аÑ\81Ñ\83.",
-       "rcfilters-watchlist-preference-label": "СÑ\85аваÑ\86Ñ\8c Ð¿Ð°Ð»ÐµÐ¿Ñ\88анÑ\83Ñ\8e Ð²Ñ\8dÑ\80Ñ\81Ñ\96Ñ\8e Ñ\81Ñ\8cпÑ\96Ñ\81Ñ\83 Ð½Ð°Ð·Ñ\96Ñ\80анÑ\8cнÑ\8f",
-       "rcfilters-watchlist-preference-help": "Ð\90дмÑ\8fнÑ\8fе Ñ\80Ñ\8dдÑ\8bзайн Ñ\96нÑ\82Ñ\8dÑ\80Ñ\84Ñ\8dйÑ\81Ñ\83 2017 Ð³Ð¾Ð´Ñ\83 Ñ\96 Ñ\9eÑ\81е Ñ\96нÑ\81Ñ\82Ñ\80Ñ\83мÑ\8dнÑ\82Ñ\8b Ð´Ð°Ð´Ð°Ð´Ð·ÐµÐ½Ñ\8bÑ\8f Ð· Ñ\82аго Ñ\87аÑ\81Ñ\83.",
+       "rcfilters-preference-label": "Ð\92Ñ\8bкаÑ\80Ñ\8bÑ\81Ñ\82оÑ\9eваÑ\86Ñ\8c Ñ\96нÑ\82Ñ\8dÑ\80Ñ\84Ñ\8dйÑ\81 Ð±ÐµÐ· JavaScript",
+       "rcfilters-preference-help": "Ð\97агÑ\80Ñ\83жае Ð°Ð¿Ð¾Ñ\88нÑ\96Ñ\8f Ð·Ñ\8cменÑ\8b Ð±Ñ\8fзÑ\8c Ñ\84Ñ\96лÑ\8cÑ\82Ñ\80аÑ\9e Ñ\86Ñ\96 Ñ\96нÑ\81Ñ\82Ñ\80Ñ\83мÑ\8dнÑ\82аÑ\9e Ð²Ñ\8bлÑ\83Ñ\87Ñ\8dнÑ\8cнÑ\8f.",
+       "rcfilters-watchlist-preference-label": "Ð\92Ñ\8bкаÑ\80Ñ\8bÑ\81Ñ\82оÑ\9eваÑ\86Ñ\8c Ñ\96нÑ\82Ñ\8dÑ\80Ñ\84Ñ\8dйÑ\81 Ð±ÐµÐ· JavaScript",
+       "rcfilters-watchlist-preference-help": "Ð\97агÑ\80Ñ\83жае Ñ\81Ñ\8cпÑ\96Ñ\81 Ð½Ð°Ð·Ñ\96Ñ\80анÑ\8cнÑ\8f Ð±Ñ\8fзÑ\8c Ñ\84Ñ\96лÑ\8cÑ\82Ñ\80аÑ\9e Ñ\86Ñ\96 Ñ\96нÑ\81Ñ\82Ñ\80Ñ\83мÑ\8dнÑ\82аÑ\9e Ð²Ñ\8bлÑ\83Ñ\87Ñ\8dнÑ\8cнÑ\8f.",
        "rcfilters-filter-showlinkedfrom-label": "Паказаць зьмены на старонках, на якія спасылаецца",
        "rcfilters-filter-showlinkedfrom-option-label": "<strong>Старонкі, на якія спасылаецца</strong> абраная старонка",
        "rcfilters-filter-showlinkedto-label": "Паказаць зьмены старонак, якія спасылаюцца на",
        "listfiles_description": "Апісаньне",
        "listfiles_count": "Вэрсіі",
        "listfiles-show-all": "Уключаць старыя вэрсіі файлаў",
-       "listfiles-latestversion": "Ð\91Ñ\8fгÑ\83Ñ\87ая вэрсія",
+       "listfiles-latestversion": "Ð\90кÑ\82Ñ\83алÑ\8cная вэрсія",
        "listfiles-latestversion-yes": "Так",
        "listfiles-latestversion-no": "Не",
        "file-anchor-link": "Файл",
        "filehist-nothumb": "Няма мініятуры",
        "filehist-user": "Удзельнік",
        "filehist-dimensions": "Памеры",
-       "filehist-filesize": "Памер файла",
+       "filehist-filesize": "Памер файлу",
        "filehist-comment": "Камэнтар",
        "imagelinks": "Выкарыстаньне файла",
        "linkstoimage": "{{PLURAL:$1|1=Наступная старонка выкарыстоўвае|Наступныя старонкі выкарыстоўваюць}} гэты файл:",
        "linkstoimage-redirect": "$1 (перанакіраваньне на файл) $2",
        "duplicatesoffile": "{{PLURAL:$1|1=Наступны файл дублюе|Наступныя файлы дублююць}} гэты файл ([[Special:FileDuplicateSearch/$2|падрабязнасьці]]):",
        "sharedupload": "Гэты файл паходзіць з $1 і можа выкарыстоўвацца іншымі праектамі.",
-       "sharedupload-desc-there": "Гэты файл паходзіць з $1 і можа выкарыстоўвацца іншымі праектамі.\nКалі ласка, глядзіце падрабязнасьці на [$2 старонцы апісаньня файла].",
+       "sharedupload-desc-there": "Гэты файл паходзіць з $1 і можа выкарыстоўвацца іншымі праектамі.\nКалі ласка, глядзіце падрабязнасьці на [$2 старонцы апісаньня файлу].",
        "sharedupload-desc-here": "Гэты файл паходзіць з $1 і можа выкарыстоўвацца іншымі праектамі.\nАпісаньне са [$2 старонкі апісаньня файла] пададзенае ніжэй.",
-       "sharedupload-desc-edit": "Гэты файл паходзіць з $1 і можа  выкарыстоўвацца іншымі праектамі.\nКалі спатрэбіцца, вы можаце зьмяніць апісаньне файла на [$2 адпаведнай старонцы].",
+       "sharedupload-desc-edit": "Гэты файл паходзіць з $1 і можа выкарыстоўвацца іншымі праектамі.\nКалі спатрэбіцца, вы можаце зьмяніць апісаньне файлу на [$2 адпаведнай старонцы].",
        "sharedupload-desc-create": "Гэты файл паходзіць з $1 і можа выкарыстоўвацца іншымі праектамі.\nКалі спатрэбіцца, вы можаце зьмяніць апісаньне на [$2 адпаведнай старонцы].",
        "filepage-nofile": "Файл з гэтай назвай не існуе.",
-       "filepage-nofile-link": "Файл з гэтай назвай не існуе, але Вы можаце [$1 загрузіць яго].",
+       "filepage-nofile-link": "Файл з такой назвай не існуе, але вы можаце [$1 загрузіць яго].",
        "uploadnewversion-linktext": "Загрузіць новую вэрсію гэтага файла",
-       "shared-repo-from": "$1",
+       "shared-repo-from": "з $1",
        "shared-repo": "агульнага сховішча",
        "shared-repo-name-wikimediacommons": "Вікісховішча",
        "upload-disallowed-here": "Вы ня можаце перазапісаць гэты файл.",
        "filerevert": "Вярнуць $1",
-       "filerevert-legend": "Вярнуць папярэднюю вэрсію файла",
-       "filerevert-intro": "Вы вяртаеце '''[[Media:$1|$1]]''' да [вэрсіі $4 ад $3, $2].",
+       "filerevert-legend": "Вярнуць папярэднюю вэрсію файлу",
+       "filerevert-intro": "Вы вяртаеце файл <strong>[[Media:$1|$1]]</strong> да [$4 вэрсіі ад $3, $2].",
        "filerevert-comment": "Прычына:",
        "filerevert-defaultcomment": "Вернутая вэрсія ад $2 $1 ($3)",
        "filerevert-submit": "Вярнуць",
        "contribsub2": "Для {{GENDER:$3|$1}} ($2)",
        "contributions-userdoesnotexist": "Рахунак удзельніка «$1» не зарэгістраваны.",
        "nocontribs": "Ня знойдзена зьменаў, якія адпавядаюць гэтым крытэрыям.",
-       "uctop": "(апошняя)",
+       "uctop": "апошняя",
        "month": "Ад месяца (і раней):",
        "year": "Ад году (і раней):",
        "date": "З даты (і раней):",
        "move-watch": "Назіраць за гэтай старонкай",
        "movepagebtn": "Перанесьці старонку",
        "pagemovedsub": "Пасьпяховы перанос",
+       "cannotmove": "Гэтая старонка ня можа быць перанесеная з {{PLURAL:$1|1=наступнай прычыны|наступных прычынаў}}:",
        "movepage-moved": "'''Старонка «$1» была перанесеная ў «$2»'''",
        "movepage-moved-redirect": "Перанакіраваньне было створана.",
        "movepage-moved-noredirect": "Перанакіраваньне не было створанае.",
        "tags": "Дзейныя меткі зьменаў",
        "tag-filter": "Фільтар [[Special:Tags|метак]]:",
        "tag-filter-submit": "Фільтар",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|1=Метка|Меткі}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|1=Метка|Меткі}}]]: $2",
        "tag-mw-contentmodelchange": "зьмена мадэлі зьместу",
        "tag-mw-contentmodelchange-description": "Рэдагаваньні, якія [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:ChangeContentModel зьмяняюць мадэль зьместу] старонкі",
        "tag-mw-new-redirect": "Новае перанакіраваньне",
        "dberr-again": "Паспрабуйце пачакаць некалькі хвілінаў і абнавіць.",
        "dberr-info": "(Немагчыма злучыцца з базай зьвестак: $1)",
        "dberr-info-hidden": "(Няма доступу да базы зьвестак)",
-       "dberr-usegoogle": "Вы можаце пакуль паспрабаваць пашукаць праз Google.",
-       "dberr-outofdate": "Увага, індэксы нашага зьместу могуць быць састарэлымі.",
-       "dberr-cachederror": "Наступная старонка была загружана з кэшу і можа быць састарэлай.",
        "htmlform-invalid-input": "Узьніклі праблемы з некаторымі з Вашых уваходных зьвестак",
        "htmlform-select-badoption": "Значэньне, якое Вы выбралі, не зьяўляецца слушным.",
        "htmlform-int-invalid": "Значэньне, якое Вы выбралі, не зьяўляецца цэлым лікам.",
        "logentry-block-reblock": "$1 {{GENDER:$2|зьмяніў|зьмяніла}} тэрмін блякаваньня {{GENDER:$4|$3}} на пэрыяд $5 $6",
        "logentry-partialblock-block": "$1 {{GENDER:$2|заблякаваў|заблякавала}} {{GENDER:$4|$3}} ад рэдагаваньня {{PLURAL:$8||старонак}} $7 з часам сканчэньня $5 $6",
        "logentry-partialblock-reblock": "$1 {{GENDER:$2|зьмяніў|зьмяніла}} налады блякаваньня для {{GENDER:$4|$3}} і забараніў праўкі на {{PLURAL:$8||старонках}} $7 на тэрмін $5 $6",
-       "logentry-non-editing-block-block": "$1 {{GENDER:$2|заблякаваў|заблякавала}} {{GENDER:$4|$3}} ад дзеяньняў, не датычных да рэдагаваньня, на тэрмін $5 $6",
-       "logentry-non-editing-block-reblock": "$1 {{GENDER:$2|зьмяніў|зьмяніла}} налады блякаваньня для {{GENDER:$4|$3}} для дзеяньняў, не датычных рэдагаваньня, на тэрмін $5 $6",
+       "logentry-non-editing-block-block": "$1 {{GENDER:$2|заблÑ\8fкаваÑ\9e|заблÑ\8fкавала}} {{GENDER:$4|$3}} Ð°Ð´ Ð²Ñ\8bзнаÑ\87анÑ\8bÑ\85 Ð´Ð·ÐµÑ\8fнÑ\8cнÑ\8fÑ\9e, Ð½Ðµ Ð´Ð°Ñ\82Ñ\8bÑ\87нÑ\8bÑ\85 Ð´Ð° Ñ\80Ñ\8dдагаванÑ\8cнÑ\8f, Ð½Ð° Ñ\82Ñ\8dÑ\80мÑ\96н $5 $6",
+       "logentry-non-editing-block-reblock": "$1 {{GENDER:$2|зÑ\8cмÑ\8fнÑ\96Ñ\9e|зÑ\8cмÑ\8fнÑ\96ла}} Ð½Ð°Ð»Ð°Ð´Ñ\8b Ð±Ð»Ñ\8fкаванÑ\8cнÑ\8f Ð´Ð»Ñ\8f {{GENDER:$4|$3}} Ð´Ð»Ñ\8f Ð²Ñ\8bзнаÑ\87анÑ\8bÑ\85 Ð´Ð·ÐµÑ\8fнÑ\8cнÑ\8fÑ\9e, Ð½Ðµ Ð´Ð°Ñ\82Ñ\8bÑ\87нÑ\8bÑ\85 Ñ\80Ñ\8dдагаванÑ\8cнÑ\8f, Ð½Ð° Ñ\82Ñ\8dÑ\80мÑ\96н $5 $6",
        "logentry-suppress-block": "$1 {{GENDER:$2|заблякаваў|заблякавала}} {{GENDER:$4|$3}} на тэрмін $5 $6",
        "logentry-suppress-reblock": "$1 {{GENDER:$2|зьмяніў|зьмяніла}} тэрмін блякаваньня {{GENDER:$4|$3}} на пэрыяд $5 $6",
        "logentry-import-upload": "$1 {{GENDER:$2|імпартаваў|імпартавала}} $3 праз загрузку файлу",
        "passwordpolicies-policy-passwordcannotmatchblacklist": "Пароль ня можа супадаць з паролямі з чорнага сьпісу",
        "passwordpolicies-policy-maximalpasswordlength": "Пароль мусіць быць даўжынёй менш за $1 {{PLURAL:$1|сымбаль|сымбалі|сымбаляў}}",
        "passwordpolicies-policy-passwordcannotbepopular": "Пароль ня можа {{PLURAL:$1|супадаць з самым папулярным паролем|быць зь сьпісу $1 папулярных пароляў}}",
+       "passwordpolicies-policy-passwordnotinlargeblacklist": "Пароль ня можа быць зь сьпісу 100 000 найчасьцей ужываных пароляў.",
        "easydeflate-invaliddeflate": "Пададзены зьмест ня сьціснуты адпаведным чынам",
        "unprotected-js": "З прычынаў бясьпекі JavaScript ня можа быць загружаны зь неабароненых сайтаў. Калі ласка, стварайце javascript выключна ў прасторы назваў MediaWiki: ці як падстаронку ўдзельніка"
 }
index 939c157..de62590 100644 (file)
        "view": "Паказ",
        "view-foreign": "Глядзець на $1",
        "edit": "Правіць",
-       "edit-local": "Правіць тутэйшае апісанне",
+       "edit-local": "Правіць лакальнае апісанне",
        "create": "Стварыць",
-       "create-local": "Дадаць тутэйшае апісанне",
+       "create-local": "Дадаць лакальнае апісанне",
        "delete": "Выдаліць",
        "undelete_short": "Аднавіць {{PLURAL:$1|адну праўку|$1 правак}}",
        "viewdeleted_short": "Паказаць {{PLURAL:$1|адну сцёртую праўку|$1 сцёртыя праўкі}}",
        "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-legend": "Пашыраны пошук",
        "powersearch-ns": "Шукаць у прасторах назваў:",
        "powersearch-togglelabel": "Пазначыць:",
        "powersearch-toggleall": "Усе",
        "prefs-editor": "Рэдактар",
        "prefs-preview": "Перадпаказ",
        "prefs-advancedrc": "Пашыраныя настройкі",
-       "prefs-opt-out": "Адмова ад паляпшэнняў",
        "prefs-advancedrendering": "Пашыраныя настройкі",
        "prefs-advancedsearchoptions": "Пашыраныя настройкі",
        "prefs-advancedwatchlist": "Пашыраныя настройкі",
        "group-autoconfirmed": "Аўта-пацверджаныя ўдзельнікі",
        "group-bot": "Боты",
        "group-sysop": "Адміністратары",
+       "group-interface-admin": "Адміністратары інтэрфейсу",
        "group-bureaucrat": "Бюракраты",
        "group-suppress": "Схоўваючыя",
        "group-all": "(усе)",
        "deadendpages": "Старонкі без спасылак",
        "deadendpagestext": "Спіс старонак без спасылак на тутэйшыя артыкулы.",
        "protectedpages": "Старонкі пад аховай",
+       "protectedpages-filters": "Фільтры:",
        "protectedpages-indef": "Толькі бестэрміновыя аховы",
        "protectedpages-summary": "На гэтай старонцы пералічаны наяўныя старонкі, якія зараз знаходзяцца пад аховай. Спіс назваў, абароненых ад стварэння, гл. [[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]].",
        "protectedpages-cascade": "Толькі каскадныя засцераганні",
        "dellogpage": "Журнал выдаленняў",
        "dellogpagetext": "Ніжэй паказаны спіс апошніх выдаленняў.",
        "deletionlog": "журнал выдаленняў",
+       "log-name-create": "Журнал стварэння старонак",
+       "log-description-create": "Ніжэй прыведзены спіс апошніх стварэнняў старонак.",
+       "logentry-create-create": "$1 {{GENDER:$2|стварыў|стварыла}} старонку $3",
        "reverted": "Адкочана да ранейшай версіі",
        "deletecomment": "Прычына:",
        "deleteotherreason": "Іншы/дадатковы повад:",
        "contribsub2": "Для $1 ($2)",
        "contributions-userdoesnotexist": "Уліковы запіс удзельніка \"$1\" не зарэгістраваны.",
        "nocontribs": "Не знойдзена змен, адпаведных зададзеным параметрам.",
-       "uctop": "(апошн.)",
+       "uctop": "апошн.",
        "month": "Ад месяца (і раней):",
        "year": "Ад года (і раней):",
        "date": "Ад даты (і раней):",
        "tooltip-preferences-save": "Захаваць настройкі",
        "tooltip-summary": "Дайце кароткае апісанне",
        "common.css": "/** CSS, упісаны сюды, будзе дзейнічаць на карыстальнікаў усіх світаў */",
+       "group-autoconfirmed.css": "/* Размешчаны тут CSS будзе прымяняцца для аўтапацверджаных удзельнікаў */",
        "common.js": "/* Яваскрыпт, упісаны сюды, будзе выконвацца для кожнага чытача, на кожным счытванні старонкі. */",
+       "group-autoconfirmed.js": "/* Размешчаны тут код JavaScript будзе прымяняцца для толькі аўтапацверджаных удзельнікаў */",
        "anonymous": "Ананімны{{PLURAL:$1| ўдзельнік|я ўдзельнікі}} на пляцоўцы {{SITENAME}}",
        "siteuser": "удзельнік $1 з {{SITENAME}}",
        "anonuser": "ананімны ўдзельнік {{SITENAME}} - $1",
        "redirect-logid": "ID журнала",
        "redirect-not-exists": "Значэнне не знойдзена",
        "fileduplicatesearch": "Пошук дублікатных файлаў",
-       "fileduplicatesearch-summary": "Ð\9fоÑ\88Ñ\83к Ð´Ñ\83блÑ\96каÑ\82нÑ\8bÑ\85 Ñ\84айлаÑ\85 на падставе іх хэшаў.",
+       "fileduplicatesearch-summary": "Ð\9fоÑ\88Ñ\83к Ð´Ñ\83блÑ\96каÑ\82нÑ\8bÑ\85 Ñ\84айлаÑ\9e на падставе іх хэшаў.",
        "fileduplicatesearch-filename": "Назва файла:",
        "fileduplicatesearch-submit": "Знайсці",
        "fileduplicatesearch-info": "$1 × $2 кропак<br />Аб'ём файла: $3<br />Тып MIME: $4",
        "tags": "Дапушчальныя біркі",
        "tag-filter": "Фільтр [[Special:Tags|бірак]]:",
        "tag-filter-submit": "Фільтр",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Тэг|Тэгі}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Тэг|Тэгі}}]]: $2",
        "tag-mw-contentmodelchange": "змена мадэлі змесціва",
        "tag-mw-contentmodelchange-description": "Праўкі, якія [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:ChangeContentModel мяняюць мадэль змесціва] старонкі",
        "tag-mw-new-redirect": "Новая перасылка",
        "dberr-again": "Паспрабуйце перачытаць праз некалькі хвілін.",
        "dberr-info": "(Немагчыма звязацца з базай даных: $1)",
        "dberr-info-hidden": "(Немагчыма звязацца з базай звестак)",
-       "dberr-usegoogle": "Тымчасам можна паспрабаваць пошук праз Гугл.",
-       "dberr-outofdate": "Заўважце, што тамтэйшыя індэксы тутэйшага зместу могуць быць састарэлымі.",
-       "dberr-cachederror": "Гэта копія старонкі, узятая з кэшу, і, магчыма, састарэлая.",
        "htmlform-invalid-input": "Праблемы з упісаным вамі",
        "htmlform-select-badoption": "Пададзенае значэнне не з’яўляецца дапушчальным выбарам.",
        "htmlform-int-invalid": "Пададзенае значэнне не з’яўляецца цэлым лікам.",
        "logentry-tag-update-add-logentry": "$1 {{GENDER:$2|дадаў|дадала}} {{PLURAL:$7|1=бірку|біркі}} $6 да запісу ў журнале $5 старонкі $3",
        "logentry-tag-update-remove-revision": "$1 {{GENDER:$2|выдаліў|выдаліла}} {{PLURAL:$9|1=бірку|біркі}} $8 з версіі $4 старонкі $3",
        "rightsnone": "(няма)",
+       "rightslogentry-temporary-group": "$1 (часова, да $2)",
        "feedback-adding": "Даданне водгуку на старонку…",
        "feedback-back": "Назад",
        "feedback-bugcheck": "Выдатна! Толькі праверце, што ў спісе [$1 вядомых памылак] яе няма падобнага запісу.",
        "default-skin-not-found-no-skins": "Упс! Прадвызначаная вокладка для вашай вікі (<code>$wgDefaultSkin</code>), <code>$1</code>, недаступна.\n\nВы не ўстанавілі вокладкі.\n\n; Калі вы толькі што ўстанавілі ці абнавілі MediaWiki:\n: Магчыма, вы ўстанавілі з git, ці наўпрост з зыходнага коду, выкарыстаўшы іншы метад. Гэта нармальна. MediaWiki 1.24 і навейшыя не ўключаюць вокладкі ў асноўнае сховішча. Паспрабуйце ўстанавіць некалькі вокладак з [https://www.mediawiki.org/wiki/Category:All_skins каталога вокладак mediawiki.org], такім чынам:\n:* Узяўшы [https://www.mediawiki.org/wiki/Download tarball-інсталятар], які ўтрымлівае некалькі вокладак і прыставак. Вы можаце скапіяваць і ўставіць каталог <code>skins/</code> адтуль.\n:* Зрабіўшы клон аднаго з сховішчаў <code>mediawiki/skins/*</code> праз git у каталог <code>skins/</code> вашай інсталяцыі MediaWiki.\n: Калі вы распрацоўшчык MediaWiki, гэта не павінна адбіцца на вашым git-сховішчы. Гл. [https://www.mediawiki.org/wiki/Manual:Skin_configuration Інструкцыя: Настройка вокладак] дзеля інфармацыі па ўключэнні вокладак і выбары прадвызначэння.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (уключана)",
        "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 (<strong>выключана</strong>)",
-       "mediastatistics": "статыстыка медыя",
+       "mediastatistics": "Статыстыка медыя",
        "mediastatistics-summary": "Статыстычная звесткі пра тыпы запампаваных файлаў. Статыстыка ўключае звесткі толькі пра апошнія версіі файлаўю Старыя або выдаленыя версіі файлаў не ўлічваюцца.",
        "mediastatistics-bytespertype": "Агульны памер файлаў у гэтай секцыі: $1 {{PLURAL:$1|байт|байта|байт}} ($2; $3%).",
+       "mediastatistics-allbytes": "Агульны памер усіх файлаў: $1 {{PLURAL:$1|байт|байты|байтаў}} ($2).",
        "mediastatistics-table-mimetype": "MIME-тып",
        "mediastatistics-table-extensions": "Магчымыя прыстаўкі",
        "mediastatistics-table-count": "Колькасць файлаў",
index 26681d4..2cc7e2e 100644 (file)
        "prefs-editor": "Редактор",
        "prefs-preview": "Преглед",
        "prefs-advancedrc": "Разширени настройки",
-       "prefs-opt-out": "Отписване от подобренията",
        "prefs-advancedrendering": "Разширени настройки",
        "prefs-advancedsearchoptions": "Разширени настройки",
        "prefs-advancedwatchlist": "Разширени настройки",
        "right-deletedtext": "Преглед на изтрития текст и промените между изтритите версии",
        "right-browsearchive": "Търсене на изтрити страници",
        "right-undelete": "Възстановяване на страници",
-       "right-suppressrevision": "Преглед и възстановяване на версии, скрити от администраторите",
+       "right-suppressrevision": "Преглед, скриване и възстановяване на отделни версии на страници от който и да е потребител",
        "right-viewsuppressed": "Преглеждане на версии, скрити от който и да е потребител",
        "right-suppressionlog": "Преглеждане на скритите дневници",
        "right-block": "Спиране на достъпа до редактиране",
        "rcfilters-watchlist-markseen-button": "Отбелязване на всички промени като прегледани",
        "rcfilters-watchlist-edit-watchlist-button": "Редактиране на списъка за наблюдение",
        "rcfilters-watchlist-showupdated": "Промени по страници, които не сте посетили откакто са внесени промените, са в <strong>получер</strong>, с удебелени маркери.",
-       "rcfilters-preference-label": "СкÑ\80иване Ð½Ð° Ð¿Ð¾Ð´Ð¾Ð±Ñ\80енаÑ\82а Ð²ÐµÑ\80Ñ\81иÑ\8f Ð½Ð° Ð\9fоÑ\81ледни Ð¿Ñ\80омени",
+       "rcfilters-preference-label": "Ð\98зползване Ð½Ð° Ð¸Ð½Ñ\82еÑ\80Ñ\84ейÑ\81 Ð±ÐµÐ· JavaScript",
        "rcfilters-preference-help": "Отменя преработката на интерфейса направена през 2017 година, както и всички инструменти добавени от тогава до сега.",
-       "rcfilters-watchlist-preference-label": "СкÑ\80иване Ð½Ð° Ð¿Ð¾Ð´Ð¾Ð±Ñ\80енаÑ\82а Ð²ÐµÑ\80Ñ\81иÑ\8f Ð½Ð° Ð¡Ð¿Ð¸Ñ\81Ñ\8aк Ð·Ð° Ð½Ð°Ð±Ð»Ñ\8eдение",
+       "rcfilters-watchlist-preference-label": "Ð\98зползване Ð½Ð° Ð¸Ð½Ñ\82еÑ\80Ñ\84ейÑ\81 Ð±ÐµÐ· JavaScript",
        "rcfilters-watchlist-preference-help": "Отменя преработката на интерфейса направена през 2017 година, както и всички инструменти добавени от тогава до сега.",
        "rcfilters-filter-showlinkedfrom-label": "Показване на промени на страници, към които има връзка от",
        "rcfilters-filter-showlinkedfrom-option-label": "<strong>Страници, към които има връзка от</strong> избраната страница",
        "contribsub2": "За {{GENDER:$3|$1}} ($2)",
        "contributions-userdoesnotexist": "Няма регистрирана потребителска сметка за „$1“.",
        "nocontribs": "Не са намерени промени, отговарящи на критерия.",
-       "uctop": "(текуща)",
+       "uctop": "текуща",
        "month": "От месец (и по-рано):",
        "year": "От година (и по-рано):",
        "date": "От дата (и по-рано):",
        "tags": "Валидни етикети за промени",
        "tag-filter": "Филтър на [[Special:Tags|етикета]]:",
        "tag-filter-submit": "Филтриране",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Етикет|Етикети}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Етикет|Етикети}}]]: $2",
        "tag-mw-contentmodelchange": "промяна на модела на съдържание",
        "tag-mw-new-redirect": "Ново пренасочване",
        "tag-mw-removed-redirect": "Премахнато пренасочване",
        "dberr-again": "Изчакайте няколко минути и опитайте да презаредите.",
        "dberr-info": "(Няма достъп до базата от данни: $1)",
        "dberr-info-hidden": "(Няма връзка със сървъра на базата данни)",
-       "dberr-usegoogle": "Междувременно опитайте да потърсите в Google.",
-       "dberr-outofdate": "Имайте предвид, че индексираното от Гугъл наше съдържание може вече да е неактуално.",
-       "dberr-cachederror": "Следва складирано копие на поисканата страница. Възможно е складираното копие да не е актуално.",
        "htmlform-invalid-input": "Има проблеми с част от въведения от вас вход",
        "htmlform-select-badoption": "Посочената от вас стойност не е валидна алтернатива.",
        "htmlform-int-invalid": "Въведената от вас стойност не е цяло число.",
        "specialpage-securitylevel-not-allowed-title": "Не е позволено",
        "cannotauth-not-allowed-title": "Достъпът е отказан",
        "cannotauth-not-allowed": "Не ви е позволено да използвате тази страница",
-       "changecredentials": "Ð\9fÑ\80омÑ\8fна Ð½Ð° Ð¿Ð°Ñ\80ола",
+       "changecredentials": "Ð\9fÑ\80омÑ\8fна Ð½Ð° Ð¿Ð¾Ñ\82Ñ\80ебиÑ\82елÑ\81киÑ\82е Ð´Ð°Ð½Ð½Ð¸",
        "changecredentials-submit": "Промяна на парола",
        "removecredentials": "Премахване на потребителските данни",
        "removecredentials-submit": "Премахване на потребителските данни",
index 1f91f97..c2da1c5 100644 (file)
        "contribsub2": "په {{GENDER:$3|$1}} ($2)",
        "contributions-userdoesnotexist": "«$1» ئی کار زوروکین حساب راجستر نه بوته.",
        "nocontribs": "هیچ تغیری گۆ ای مشخصات ئان ودێ نه بوت",
-       "uctop": "(انونین نخسه)",
+       "uctop": "انونین نخسه",
        "month": "به اي ماه‌ای تا (و دیمتیر شه آیی):",
        "year": "به اي سالئ تا (و دیمتیر شه آیی):",
        "sp-contributions-newbies": "فقط نوکین مشارکتان نشان داته بیئنت",
        "tags": "مجازین تغیرانئ برچسپ",
        "tag-filter": "[[Special:Tags|برچسپ هاني]] فیلتر:",
        "tag-filter-submit": "فیلتر",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|برچسپ|برچسپ هان}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|برچسپ|برچسپ هان}}]]: $2",
        "tags-title": "برچسپ هان",
        "tags-tag": "برچسپئ نام",
        "tags-display-header": "نشان داتین بئ تعیراتانی لیست ئي تا",
        "feedback-thanks": "منتوارن! شمی فیدبک بئ «[$1 $2]» ئی دیمی تا ثبت بوت.",
        "feedback-thanks-title": "منتوارن!",
        "feedback-useragent": "کارزوروکی آگینت:",
-       "searchsuggest-search": "گشتین",
+       "searchsuggest-search": "گشتین {{SITENAME}}",
        "searchsuggest-containing": "شامیلین دیمان...",
        "api-error-badtoken": "داخیلی ئین خه تا: امنیتی ئین کوڈ سه ئی نه اینت (Bad token).",
        "api-error-emptypage": "خالی ئین دیمانی جۆڑ کورتین جایز نه اینت.",
index 8ca47ef..66f8890 100644 (file)
        "anoncontribs": "योगदान",
        "contribsub2": "{{GENDER:$3|$1}} ($2) खातिर",
        "nocontribs": "एह पैमाना से मैच करत कौनो बदलाव ना मिलल।",
-       "uctop": "(वर्तमान)",
+       "uctop": "वर्तमान",
        "month": "महीना से (आ ओ से पहिले):",
        "year": "साल से (आ ओ से पहिले):",
        "sp-contributions-newbies": "खाली नया खाता के योगदान देखीं।",
        "specialpages-group-pages": "पन्नन के सूचीसभ",
        "specialpages-group-wiki": "डेटा अउर औजार",
        "tag-filter": "[[Special:Tags|टैग]] छननी:",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|टैग|टैग कुल}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|टैग|टैग कुल}}]]: $2",
        "tag-mw-new-redirect": "नाया अनुप्रेषण",
        "tags-active-yes": "हँऽ",
        "tags-active-no": "ना",
index 81ce363..7e42dc9 100644 (file)
        "mycontris": "Sumbangan ulun",
        "contribsub2": "Gasan $1 ($2)",
        "nocontribs": "Kadada paubahan nang rasuk lawan syarat itu.",
-       "uctop": " (atas)",
+       "uctop": " atas",
        "month": "Matan bulan (wan sabalumnya):",
        "year": "Matan tahun (wan sabalumnya):",
        "sp-contributions-newbies": "Tampaiakan sumbangan papamakai hanyar haja",
        "dberr-problems": "Ampun!Situs ngini mangalami kangalihan teknik.",
        "dberr-again": "Cuba hadangi babarapa manit wan muat-pulang.",
        "dberr-info": "(Kada kawa tasambung ka server databasis: $1)",
-       "dberr-usegoogle": "Pian kawa mancuba manggagai lung Google wayah pahadangan ngini.",
-       "dberr-outofdate": "Catat nang sidin indéks matan isi kami pinanya hudah kadaluarsa.",
-       "dberr-cachederror": "Ngini adalah sabuah rekap timbuluk tungkaran nang dipinta, wan pinanya kada pahanyarnya.",
        "htmlform-invalid-input": "Ada mamasalah awan babarapa masukan Pian",
        "htmlform-select-badoption": "Nilai nang Pian ajuakan kada sah.",
        "htmlform-int-invalid": "Nilai nang Pian ajuakan kada sabuah bilangan bulat.",
index add0108..bb963c6 100644 (file)
        "yourdomainname": "আপনার ডোমেইন:",
        "password-change-forbidden": "আপনি এই উইকিতে পাসওয়ার্ড পরিবর্তন করতে পারবেন না।",
        "externaldberror": "হয় কোন বহিঃস্থ যাচাইকরণ ডাটাবেজ ত্রুটি ঘটেছে অথবা আপনার বহিঃস্থ অ্যাকাউন্ট হালনাগাদ করার অনুমতি নেই।",
-       "login": "প্রবেশ",
+       "login": "প্রবেশ করুন",
        "login-security": "আপনার পরিচয় যাচাই করুন",
        "nav-login-createaccount": "প্রবেশ/নতুন অ্যাকাউন্ট",
        "logout": "প্রস্থান করুন",
        "passwordtooshort": "পাসওয়ার্ড কমপক্ষে {{PLURAL:$1|১ অক্ষরের|$1 অক্ষরের}} হতে হবে।",
        "passwordtoolong": "পাসওয়ার্ড {{PLURAL:$1|১|$1}} অক্ষরের চেয়ে দীর্ঘ হতে পারবে না।",
        "passwordtoopopular": "সাধারণভাবে নির্বাচিত পাসওয়ার্ড ব্যবহার করা যাবে না। দয়া করে এমন একটি পাসওয়ার্ড নির্বাচন করুন যা অনুমান করা আরও কঠিন।",
+       "passwordinlargeblacklist": "লিখিত পাসওয়ার্ডটি খুব সাধারণভাবে ব্যবহৃত পাসওয়ার্ডের তালিকায় থাকা একটি পাসওয়ার্ড। দয়া করে একটি আরো শক্তিশালী পাসওয়ার্ড নির্বাচন করুন।",
        "password-name-match": "আপনার পাসওয়ার্ড আপনার ব্যবহারকারী নাম থেকে আলাদা হতে হবে।",
        "password-login-forbidden": "এই ব্যবহারকারীর নাম এবং পাসওয়ার্ডটি ব্যবহার নিষিদ্ধ করা হয়েছে।",
        "mailmypassword": "পাসওয়ার্ড পুনঃস্থাপন",
        "botpasswords-invalid-name": "নির্দিষ্টকৃত ব্যবহারকারী নামটিতে বট পাসওয়ার্ড পৃথকীকারক অক্ষরটি (\"$1\") নেই।",
        "botpasswords-not-exist": "ব্যবহারকারী \"$1\"-এর \"$2\" নামক বট পাসওয়ার্ডটি নেই।",
        "botpasswords-needs-reset": "{{GENDER:$1|ব্যবহারকারী}} \"$1\"-এর \"$2\" নামের বটের জন্য বট পাসওয়ার্ড অবশ্যই পুনঃস্থাপন করা প্রয়োজন।",
+       "botpasswords-locked": "আপনার অ্যাকাউন্ট তালাবদ্ধ হবার কারণে আপনি একটি বট পাসওয়ার্ড দিয়ে প্রবেশ করতে পারবেন না।",
        "resetpass_forbidden": "পাসওয়ার্ড পরিবর্তন করা সম্ভব নয়",
        "resetpass_forbidden-reason": "পাসওয়ার্ড পরিবর্তন করা যাবে না: $1",
        "resetpass-no-info": "এই পাতাটিতে সরাসরি প্রবেশাধিকার পেতে আপনাকে অবশ্যই অ্যাকাউন্টে প্রবেশ করতে হবে।",
        "subject-preview": "বিষয়ের প্রাকদর্শন:",
        "previewerrortext": "আপনার পরিবর্তনগুলি প্রাকদর্শন করার চেষ্টা করার সময় একটি ত্রুটি ঘটেছে।",
        "blockedtitle": "ব্যবহারকারীকে বাধা দেয়া হয়েছে",
+       "blocked-email-user": "<strong>আপনার ব্যবহারকারী নামকে ইমেল পাঠানো থেকে বাধাদান করা হয়েছে। তবে পূর্বের ন্যায় আপনি এখনো এই উইকির অন্যান্য পাতা সম্পাদনা করতে পারবেন।</strong> আপনি [[Special:MyContributions|অ্যাকাউন্টের অবদানে]] বাধাদানের পূর্ণ বিবরণ দেখতে পারেন।\n\nএই বাধাটি প্রদান করেছেন $1।\n\nপ্রদত্ত কারণ হচ্ছে <em>$2</em>।\n\n* বাধা শুরুর তারিখ: $8\n* বাধা শেষ হওয়ার তারিখ: $6\n* বাধার উদ্দেশ্য: $7\n* বাধার আইডি #$5",
+       "blockedtext-partial": "<strong>আপনার ব্যবহারকারী নাম বা আইপি ঠিকানাকে এই পাতায় সম্পাদনা করা থেকে বাধাদান করা হয়েছে। তবে আপনি এখনো এই উইকির অন্যান্য পাতা সম্পাদনা করতে পারবেন।</strong> আপনি [[Special:MyContributions|অ্যাকাউন্টের অবদানে]] বাধাদানের পূর্ণ বিবরণ দেখতে পারেন।\n\nএই বাধাটি প্রদান করেছেন $1।\n\nপ্রদত্ত কারণ হচ্ছে <em>$2</em>।\n\n* বাধা শুরুর তারিখ: $8\n* বাধা শেষ হওয়ার তারিখ: $6\n* বাধার উদ্দেশ্য: $7\n* বাধার আইডি #$5",
        "blockedtext": "<strong>আপনার ব্যবহারকারী নাম বা আইপি ঠিকানাটিকে সম্পাদনায় বাধাদান করা হয়েছে।</strong>\n\n$1 এই বাধাটি প্রদান করেছেন। বাধার কারণ হিসেবে বলা হয়েছে:<em>$2</em>।\n\n* বাধা শুরুর সময়: $8\n* বাধা উঠিয়ে নেয়ার সময়: $6\n* যাকে বাধাদান করা হয়েছে: $7\n\nআপনি $1 অথবা অন্য [[{{MediaWiki:Grouppage-sysop}}|প্রশাসকদের]] সাথে এই বাধা সংক্রান্ত বিষয়ে আলোচনা করতে পারেন।\n\nআপনি \"{{int:emailuser}}\" বৈশিষ্ট্যটি ব্যবহার করতে পারবেন না যদি না আপনার [[Special:Preferences|অ্যাকাউন্টের পছন্দসমূহে]] একটি বৈধ ইমেইল ঠিকানা নির্দিষ্ট না করা হয়ে থাকে এবং আপনাকে এটি ব্যবহার করা থেকে অবরুদ্ধ না করা হয়ে থাকে।\n\nআপনার বর্তমান আইপি ঠিকানা হল $3, এবং আপনার বাধা নং হল #$5।\nদয়া করে আপনার যেকোন জিজ্ঞাসাতে উপরের সমস্ত বিবরণ অন্তর্ভুক্ত করুন।",
        "autoblockedtext": "আপনার আইপি ঠিকানাটিকে স্বয়ংক্রিয়ভাবে সম্পাদনায় বাধাদান করা হয়েছে কারণ এমন আরেকজন ব্যবহারকারী এটি ব্যবহার করেছেন, যাকে $1 বাধা দিয়েছেন।\nযে কারণে বাধা দেওয়া হয়েছে সেটি হল:\n\n:<em>$2</em>\n\n* বাধা শুরুর সময়: $8\n* বাধা শেষের সময়: $6\n* যাকে বাধাদান করা হয়েছে: $7\n\nআপনি $1-এর সাথে কিংবা অন্য যেকোন [[{{MediaWiki:Grouppage-sysop}}|প্রশাসকের]] সাথে যোগাযোগ করে এই বাধা সংক্রান্ত বিষয়ে আলোচনা করতে পারেন।\n\nলক্ষ্য করুন, আপনি \"{{int:emailuser}}\" বৈশিষ্ট্যটি ব্যবহার করতে পারবেন না যদি না আপনার [[Special:Preferences|অ্যাকাউন্টের পছন্দসমূহে]] একটি বৈধ ইমেইল ঠিকানা নিবন্ধিত না থাকে এবং আপনাকে এটি ব্যবহার করা থেকে অবরুদ্ধ না করা হয়ে থাকে।\n\nআপনার বর্তমান আইপি ঠিকানা হচ্ছে $3, এবং বাধা নং হল #$5।\nদয়া করে আপনার যেকোন জিজ্ঞাসাতে উপরের সমস্ত বিবরণ অন্তর্ভুক্ত করুন।",
        "systemblockedtext": "আপনার ব্যবহারকারী নাম অথবা আইপি ঠিকানাটিকে স্বয়ংক্রিয়ভাবে মিডিয়াউইকি দ্বারা বাধাদান করা হয়েছে। যে কারণটি দেওয়া হয়েছে, সেটি হল:\n\n:<em>$2</em>\n\n* বাধা শুরুর সময়: $8\n* বাধা উঠিয়ে নেয়ার সময়: $6\n* যাকে বাধাদান করা হয়েছে: $7\n\nআপনার বর্তমান আইপি ঠিকানাটি হল $3।\nদয়া করে আপনার যেকোন জিজ্ঞাসাতে উপরের সমস্ত বিবরণ অন্তর্ভুক্ত করুন।",
        "prefs-editor": "সম্পাদক",
        "prefs-preview": "প্রাকদর্শন",
        "prefs-advancedrc": "উচ্চতর পছন্দগুলি",
-       "prefs-opt-out": "উন্নতি অনির্বাচন",
        "prefs-advancedrendering": "উচ্চতর বিকল্পগুলি",
        "prefs-advancedsearchoptions": "উচ্চতর পছন্দগুলি",
        "prefs-advancedwatchlist": "উচ্চতর বিকল্পগুলি",
        "prefs-displayrc": "প্রদর্শনীর পছন্দগুলি",
        "prefs-displaywatchlist": "প্রদর্শনী অপশন",
+       "prefs-changesrc": "পরিবর্তন প্রদর্শন",
+       "prefs-changeswatchlist": "পরিবর্তন প্রদর্শন",
+       "prefs-pageswatchlist": "নজরে রাখা পাতা",
        "prefs-tokenwatchlist": "টোকেন",
        "prefs-diffs": "পার্থক্য",
        "prefs-help-prefershttps": "পরবর্তী প্রবেশের পর থেকে এই পরিবর্তনগুলো কার্যকর হবে।",
        "rcfilters-watchlist-markseen-button": "দেখা হিসাবে সব পরিবর্তন চিহ্নিত করুন",
        "rcfilters-watchlist-edit-watchlist-button": "আপনার নজরে রাখা পাতার তালিকা সম্পাদনা করুন",
        "rcfilters-watchlist-showupdated": "পরিবর্তন যখন ঘটেছে তখন থেকে যে পাতাগুলি আপনি এখনো দেখেননি তা মোটা চিহ্নসহ <strong>গাঢ়</strong> করে দেখানো হয়েছে।",
-       "rcfilters-preference-label": "সাম্প্রতিক পরিবর্তনের উন্নত সংস্করণটি লুকান",
-       "rcfilters-preference-help": "২০১৭-এর পুনঃনকশাকৃত ইন্টারফেস এবং তখন পর্যন্ত ও তখন থেকে যোগ করা সকল সরঞ্জামে ফেরত নিবে।",
-       "rcfilters-watchlist-preference-label": "নজরতালিকার উন্নত সংস্করণটি লুকান",
+       "rcfilters-preference-label": "জাভাস্ক্রিপ্টহীন ইন্টারফেস ব্যবহার করুন",
+       "rcfilters-preference-help": "ছাঁকনিগুলি বা আলোকপাতকরণ কার্যকারিতা ছাড়া সাম্প্রতিক পরিবর্তন লোড করে",
+       "rcfilters-watchlist-preference-label": "জাভাস্ক্রিপ্টহীন ইন্টারফেস ব্যবহার করুন",
+       "rcfilters-watchlist-preference-help": "ছাঁকনি বা আলোকপাতকরণ বৈশিষ্ট্য ছাড়া নজরতালিকা লোড করে।",
        "rcfilters-target-page-placeholder": "একটি পাতার নাম (বা বিষয়শ্রেণী) লিখুন",
        "rcnotefrom": "<strong>$2</strong>টা থেকে সংঘটিত পরিবর্তনগুলি (সর্বোচ্চ <strong>$1টি</strong> দেখানো হয়েছে)।",
        "rclistfromreset": "তারিখ নির্বাচন পুনঃস্থাপন করুন",
        "contribsub2": "{{GENDER:$3|$1}} ($2)-এর জন্য",
        "contributions-userdoesnotexist": "ব্যবহারকারী অ্যাকাউন্ট \"$1\" অনিবন্ধিত।",
        "nocontribs": "এই শর্তগুলির সাথে মিলে যায়, এমন কোন পরিবর্তন খুঁজে পাওয়া যায়নি।",
-       "uctop": "(বর্তমান)",
+       "uctop": "বর্তমান",
        "month": "এই মাস (বা তার আগে) থেকে:",
        "year": "এই বছর (বা তার আগে) থেকে:",
        "date": "এই তারিখ (বা তার আগে) থেকে:",
        "createaccountblock": "অ্যাকাউন্ট সৃষ্টিতে বাধা দেওয়া হয়েছে",
        "emailblock": "ই-মেইল বাধা দেয়া হয়েছে",
        "blocklist-nousertalk": "নিজস্ব আলাপ পাতা সম্পাদনা করতে পারবে না",
+       "blocklist-editing": "সম্পাদনা করছেন",
+       "blocklist-editing-sitewide": "সম্পাদনা করছেন (সাইটব্যাপী)",
        "ipblocklist-empty": "বাধাতালিকা খালি।",
        "ipblocklist-no-results": "অনুরুদ্ধ আইপি ঠিকানা বা ব্যবহারকারী নামটির উপর কোন বাধা নেই।",
        "blocklink": "বাধা দাও",
        "move-watch": "এই পাতাটি নজরে রাখুন",
        "movepagebtn": "পাতা স্থানান্তর করুন",
        "pagemovedsub": "সরিয়ে নেওয়া হয়েছে",
+       "cannotmove": "নিন্মলিখিত {{PLURAL:$1|কারণে}}, পাতাটি স্থানান্তর করা যায়নি:",
        "movepage-moved": "'''\"$1\"-কে \"$2\" শিরোনামে স্থানান্তর করা হয়েছে'''",
        "movepage-moved-redirect": "একটি পুনর্নির্দেশনা তৈরি হয়েছে।",
        "movepage-moved-noredirect": "পুনর্নির্দেশ তৈরীতে বাধা দেয়া হয়েছে।",
        "tags": "বৈধ পরিবর্তন ট্যাগ",
        "tag-filter": "[[Special:Tags|ট্যাগ]] ছাঁকনি:",
        "tag-filter-submit": "ছাঁকনি",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|ট্যাগ}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|ট্যাগ}}]]: $2",
        "tag-mw-contentmodelchange": "বিষয়বস্তুর রূপ পরিবর্তন",
        "tag-mw-contentmodelchange-description": "সম্পাদনা যা একটি পাতার [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:ChangeContentModel বিষয়বস্তুর রূপ পরিবর্তন] করে",
        "tag-mw-new-redirect": "নতুন পুনর্নির্দেশনা",
        "dberr-again": "কয়েক মিনিট পর পুনরায় পরিদর্শনের চেষ্টা করুন।",
        "dberr-info": "(ডেটাবেজ প্রবেশ করা সম্ভব হয়নি: $1)",
        "dberr-info-hidden": "(ডেটাবেজ প্রবেশ করা সম্ভব হয়নি)",
-       "dberr-usegoogle": "এই পরিস্থিতিতে আপনি গুগলের মাধ্যমে অনুসন্ধান করার চেষ্টা করতে পারেন।",
-       "dberr-outofdate": "খেয়াল করুন যে, আমাদের বিষয়বস্তু সম্পর্কিত তাদের সূচি মেয়াদ উত্তীর্ণ হতে পারে।",
-       "dberr-cachederror": "এটি অনুরোধকৃত পাতাটির ক্যাশ প্রতিলিপি, যা হালনাগাতকৃত না-ও হতে পারে।",
        "htmlform-invalid-input": "আপনার প্রদানকৃত ইনপুটে সমস্যা রয়েছে",
        "htmlform-select-badoption": "যে মান আপনি উল্লেখ করেছেন তা গ্রহণযোগ্য অপশন নয়।",
        "htmlform-int-invalid": "আপনার পরিবর্তীত সংখ্যাটি ইন্টিজার(পূর্ণসংখ্যা) নয়।",
index 6297e78..71019a2 100644 (file)
        "contributions-title": "$1 আতাকুরার অবদানহানি",
        "mycontris": "মর অবদান",
        "contribsub2": "$1 ($2)-র কা",
-       "uctop": "(গজ)",
+       "uctop": "গজ",
        "month": "মাহাহানাত্ত (বারো অতার আগেত্ত):",
        "year": "বসরেত্ত (বারো অতার আগেত্ত):",
        "sp-contributions-newbies": "হুদ্দা নুৱা একাউন্টর অবদানহানি দেহাদে",
        "dberr-problems": "ঙাক্করে দিবাঙ! সাইট এহানাত টেকনিক্যাল সমস্যা ইসে।",
        "dberr-again": "রিলোড আনার কা ডান্ড আহান বাসা।",
        "dberr-info": "(ডাটা সার্ভারর লগে যোগাযোগ নেয়সে: $1)",
-       "dberr-usegoogle": "হের অহাত তি গুগুলসে বিসারা পারর।",
-       "dberr-outofdate": "সুচীক্রম অহান আপটুডেট নাইসে।",
-       "dberr-cachederror": "এহান ক্যাস পাতাহানে, অহানে আপটুডেট না থাইব।",
        "htmlform-invalid-input": "তি বরিলে লেখা অতার মা লালুইসে",
        "htmlform-select-badoption": "তি দিলে সংখ্যা অহান লেপকরিসি অপসনহান নাবে।",
        "htmlform-int-invalid": "তি দিলে সংখ্যা অহান নম্বরগ নাবে।",
index 3a8c295..f7d90e7 100644 (file)
        "mycontris": "هومياریا",
        "anoncontribs": "هومياریا",
        "contribsub2": "سی $1 ($2)",
-       "uctop": "(تازاٛ باۋ)",
+       "uctop": "تازاٛ باۋ",
        "month": "در این ماه (و قبل زه آن):",
        "year": "در ای سال (وقبل زه آن):",
        "sp-contributions-newbies-sub": "سی حسابهای کاربری تازه",
        "version": "ترجمه یا تفسیر",
        "specialpages": "بلگاٛ آ ۋیجٱ",
        "tag-filter": "[[Special:سردیسا|سرديس]] فيلتر:",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|سرديس|سرديسا}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|سرديس|سرديسا}}]]: $2",
        "logentry-delete-delete": "$1 بألگأ {{GENDER:$2|پاکسا ڤابيأ}} $3",
        "logentry-move-move": "$1 {{GENDER:$2|جا ب جا کردإ}} بألگأ $3 نأ سي $4",
        "logentry-newusers-create": "هساڤ کارياري $1 {{GENDER:$2|راسد ڤابي}}",
index 6aea98f..806cdb0 100644 (file)
        "prefs-editor": "Aozer",
        "prefs-preview": "Rakwelet",
        "prefs-advancedrc": "Dibarzhioù araokaet",
-       "prefs-opt-out": "Nac'hañ ar c'hemmoù",
        "prefs-advancedrendering": "Dibarzhioù araokaet",
        "prefs-advancedsearchoptions": "Dibarzhioù araokaet",
        "prefs-advancedwatchlist": "Dibarzhioù araokaet",
        "contribsub2": "Evit {{GENDER:$3|$1}} ($2)",
        "contributions-userdoesnotexist": "N'eo ket enrollet ar gont implijer \"$1\".",
        "nocontribs": "N'eus bet kavet kemm ebet o klotañ gant an dezverkoù-se.",
-       "uctop": "(red)",
+       "uctop": "red",
        "month": "Abaoe miz (hag a-raok) :",
        "year": "Abaoe bloaz (hag a-raok) :",
        "sp-contributions-newbies": "Diskouez hepken degasadennoù ar c'hontoù nevez",
        "tags": "Tikedennoù ar c'hemmoù reizh",
        "tag-filter": "Silañ an [[Special:Tags|tikedennoù]] :",
        "tag-filter-submit": "Silañ",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Dikedenn|Tikedenn}}]] : $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Dikedenn|Tikedenn}}]] : $2",
        "tag-mw-contentmodelchange": "cheñch ar patrom danvez",
        "tag-mw-contentmodelchange-description": "KEmmoù a [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:ChangeContentModel cheñch patrom danvez] ur bajenn",
        "tag-mw-new-redirect": "Adkas nevez",
        "dberr-again": "Gortozit un nebeud munutennoù a-raok adkargañ.",
        "dberr-info": "(Dibosupl kevreañ ouzh an diaz roadennoù : $1)",
        "dberr-info-hidden": "(Ne c'haller ket mont d'an diaz roadennoù)",
-       "dberr-usegoogle": "E-keit-se esaeit klask dre c'hGoogle.",
-       "dberr-outofdate": "Notit mat e c'hall o menegerioù dezho bezañ dispredet e-keñver ar boued zo ganeomp.",
-       "dberr-cachederror": "Un eilstumm memoret eus ar bajenn goulennet eo hemañ, gallout a ra bezañ dispredet.",
        "htmlform-invalid-input": "Kudennoù zo gant talvoudennoù zo merket ganeoc'h.",
        "htmlform-select-badoption": "Direizh eo an dalvoudenn skrivet ganeoc'h.",
        "htmlform-int-invalid": "N'eus ket un niver anterin eus an dalvoudenn skrivet ganeoc'h.",
index 111affa..50f139e 100644 (file)
        "prefs-editor": "Uređivač",
        "prefs-preview": "Pregled",
        "prefs-advancedrc": "Napredne opcije",
-       "prefs-opt-out": "Isključivanje poboljšanja",
        "prefs-advancedrendering": "Napredne opcije",
        "prefs-advancedsearchoptions": "Napredne opcije",
        "prefs-advancedwatchlist": "Napredne opcije",
        "contribsub2": "Za {{GENDER:$3|$1}} ($2)",
        "contributions-userdoesnotexist": "Korisnički račun \"$1\" nije registriran.",
        "nocontribs": "Nema izmjena koje odgovaraju navedenim kriterijima.",
-       "uctop": "(trenutno)",
+       "uctop": "trenutno",
        "month": "Od mjeseca (i ranije):",
        "year": "Od godine (i ranije):",
        "date": "Od datuma (i ranije):",
        "tags": "Oznake valjane izmjene",
        "tag-filter": "Filter [[Special:Tags|oznaka]]:",
        "tag-filter-submit": "Filter",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|oznaka|oznake}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|oznaka|oznake}}]]: $2",
        "tag-mw-contentmodelchange": "promjena modela sadržaja",
        "tag-mw-contentmodelchange-description": "Izmjena kojom se [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:ChangeContentModel mijenja model sadržaja] stranice",
        "tag-mw-new-redirect": "novo preusmjerenje",
        "dberr-again": "Pokušajte pričekati par minuta i zatim osvježiti.",
        "dberr-info": "(ne može se pristupiti bazi podataka: $1)",
        "dberr-info-hidden": "(Ne mogu pristupiti bazi podataka)",
-       "dberr-usegoogle": "U međuvremenu, možete pokušati pretraživanje putem Google.",
-       "dberr-outofdate": "Zapamtite da njihovi indeksi našeg sadržaja ne moraju uvijek biti ažurni.",
-       "dberr-cachederror": "Sljedeći tekst je keširana kopija zahtijevane stranice, koja možda nije potpuno ažurirana.",
        "htmlform-invalid-input": "Postoje određeni problemi s Vašim unosom",
        "htmlform-select-badoption": "Vrijednost koju ste naveli nije valjana opcija.",
        "htmlform-int-invalid": "Vrijednost koju ste naveli nije cijeli broj.",
index 3a7befe..d9f2062 100644 (file)
        "anoncontribs": "Kontribusingku",
        "contribsub2": "Tu {{GENDER:$3|$1}} ($2)",
        "nocontribs": "Inda adong parubaan na sasue dohot kriteria on.",
-       "uctop": "(sonnari)",
+       "uctop": "sonnari",
        "month": "Tingon bulan (dot nasolpu)",
        "year": "Tingon taon (dot nasolpu)",
        "sp-contributions-newbies": "Patidaon kontribusi ni akun nabaru sajope",
        "redirect-file": "Gorarberkas:",
        "specialpages": "Alaman husus",
        "tag-filter": "[[Special:Tags|Tag]] saring:",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Tag|Tags}}]]:$2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Tag|Tags}}]]:$2",
        "tags-active-yes": "Olo",
        "tags-active-no": "Inda",
        "tags-hitcount": "$1 {{PLURAL:$1|change|parubaan}}",
index 6def10b..d2c7d60 100644 (file)
        "prefs-editor": "Edició",
        "prefs-preview": "Previsualització",
        "prefs-advancedrc": "Opcions avançades",
-       "prefs-opt-out": "Renuncia a les millores",
        "prefs-advancedrendering": "Opcions avançades",
        "prefs-advancedsearchoptions": "Opcions avançades",
        "prefs-advancedwatchlist": "Opcions avançades",
        "prefs-displayrc": "Opcions d'aparença",
        "prefs-displaywatchlist": "Opcions de visualització",
+       "prefs-changesrc": "Canvis mostrats",
+       "prefs-changeswatchlist": "Canvis mostrats",
+       "prefs-pageswatchlist": "Pàgines en seguiment",
        "prefs-tokenwatchlist": "Testimoni",
        "prefs-diffs": "Difs",
        "prefs-help-prefershttps": "Aquesta preferència tindrà efecte quan inicieu una nova sessió.",
        "uploadbtn": "Carrega un fitxer",
        "reuploaddesc": "Torna al formulari per apujar.",
        "upload-tryagain": "Envia la descripció del fitxer modificat",
+       "upload-tryagain-nostash": "Envia el fitxer carregat de nou i la descripció modificada",
        "uploadnologin": "No heu iniciat una sessió",
        "uploadnologintext": "Heu de $1 per a penjar-hi fitxers.",
        "upload_directory_missing": "No s'ha trobat el directori de càrrega ($1) i tampoc no ha pogut ser creat pel servidor web.",
        "file-deleted-duplicate-notitle": "Un fitxer idèntic a aquest fitxer havia estat suprimit abans, i també el títol. Hauríeu de demanar a algú que pugui veure les dades suprimides del fitxer que revisi la situació abans de procedir a tornar a carregar-lo.",
        "uploadwarning": "Avís de càrrega",
        "uploadwarning-text": "Modifiqueu la descripció de la imatge i torneu a intentar-ho.",
+       "uploadwarning-text-nostash": "Torneu a carregar el fitxer, modifiqueu la descripció a sota i torneu-ho a provar.",
        "savefile": "Desa el fitxer",
        "uploaddisabled": "S'ha inhabilitat la càrrega",
        "copyuploaddisabled": "Càrrega per URL deshabilitada.",
        "filehist-comment": "Comentari",
        "imagelinks": "Ús del fitxer",
        "linkstoimage": "{{PLURAL:$1|La pàgina següent utilitza|Les $1 pàgines següents utilitzen}} aquest fitxer:",
-       "linkstoimage-more": "Hi ha més de $1 {{PLURAL:$1|pàgina que enllaça|pàgines que enllacen}} a aquest fitxer.\nLa següent llista només mostra {{PLURAL:$1|la primera d'aquestes pàgines|les primeres $1 d'aquestes pàgines}}.\nPodeu consultar la [[Special:WhatLinksHere/$2|llista completa]].",
-       "nolinkstoimage": "No hi ha pàgines que enllacin a aquesta imatge.",
+       "linkstoimage-more": "Hi ha més de $1 {{PLURAL:$1|pàgina que utilitza|pàgines que utilitzen}} aquest fitxer.\nLa següent llista només mostra {{PLURAL:$1|la primera d'aquestes pàgines|les primeres $1 d'aquestes pàgines}} que utilitzen aquest fitxer.\nPodeu consultar la [[Special:WhatLinksHere/$2|llista completa]].",
+       "nolinkstoimage": "No hi ha pàgines que utilitzin aquest fitxer.",
        "morelinkstoimage": "Visualitza [[Special:WhatLinksHere/$1|més enllaços]] que porten al fitxer.",
        "linkstoimage-redirect": "$1 (fitxer redirigit) $2",
        "duplicatesoffile": "{{PLURAL:$1|Aquest fitxer és un duplicat del que apareix a continuació|A continuació s'indiquen els $1 duplicats d'aquest fitxer}} ([[Special:FileDuplicateSearch/$2|vegeu-ne més detalls]]):",
        "prefixindex": "Totes les pàgines per prefix",
        "prefixindex-namespace": "Totes les pàgines amb prefix (espai de noms $1)",
        "prefixindex-submit": "Mostra",
-       "prefixindex-strip": "Suprimeix el prefix a la llista",
+       "prefixindex-strip": "Amaga el prefix en els resultats",
        "shortpages": "Pàgines curtes",
        "longpages": "Pàgines llargues",
        "deadendpages": "Pàgines atzucac",
        "contribsub2": "Per a {{GENDER:$3|$1}} ($2)",
        "contributions-userdoesnotexist": "El compte d'usuari «$1» no està registrat.",
        "nocontribs": "No s’ha trobat cap canvi que encaixés amb aquests criteris.",
-       "uctop": "(actual)",
+       "uctop": "actual",
        "month": "Mes (i anteriors):",
        "year": "Any (i anteriors):",
        "sp-contributions-newbies": "Mostra les contribucions dels usuaris novells",
        "createaccountblock": "s'ha blocat la creació de nous comptes",
        "emailblock": "s'ha blocat l'enviament de correus electrònics",
        "blocklist-nousertalk": "no podeu modificar la pàgina de discussió pròpia",
+       "blocklist-editing": "edició",
+       "blocklist-editing-sitewide": "edició (a tot el lloc)",
        "ipblocklist-empty": "La llista de blocatges està buida.",
        "ipblocklist-no-results": "L'adreça IP o nom d'usuari sol·licitat no està blocat.",
        "blocklink": "bloca",
        "fix-double-redirects": "Actualitza també les redireccions que apuntin a l'article original",
        "move-leave-redirect": "Deixa enrere una redirecció",
        "protectedpagemovewarning": "'''AVÍS: Aquesta pàgina està protegida i només els usuaris que tenen drets d'administrador la poden reanomenar.\nA continuació es mostra la darrera entrada del registre com a referència:",
-       "semiprotectedpagemovewarning": "'''Nota:''' Aquesta pàgina està blocada i només els usuaris registrats la poden moure.\nA continuació es mostra la darrera entrada del registre com a referència:",
+       "semiprotectedpagemovewarning": "<strong>Nota:</strong> Aquesta pàgina està protegida i només els usuaris confirmats automàticament la poden moure.\nA continuació es mostra la darrera entrada del registre com a referència:",
        "move-over-sharedrepo": "[[:$1]] ja existeix al repositori compartit. Traslladant un fitxer a aquest títol se substituirà el fitxer compartit.",
        "file-exists-sharedrepo": "El nom de fitxer escollit ja s'utilitza al dipòsit compartit. Escolliu un altre nom.",
        "export": "Exportació de pàgines",
        "pageinfo-category-subcats": "ombre de subcategories",
        "pageinfo-category-files": "Nombre d'arxius",
        "pageinfo-user-id": "ID d'usuari",
+       "pageinfo-view-protect-log": "Mostra el registre de protecció d'aquesta pàgina.",
        "markaspatrolleddiff": "Marca com a supervisat",
        "markaspatrolledtext": "Marca la pàgina com a supervisada",
        "markaspatrolledtext-file": "Marc la versió del fitxer com patrullada",
        "previousdiff": "← Edició anterior",
        "nextdiff": "Edició següent →",
        "mediawarning": "<strong>Advertiment</strong>: aquest fitxer podria contenir codi maliciós.\nSi l’executeu, podeu comprometre la seguretat del vostre sistema.",
-       "imagemaxsize": "Límit de mida d'imatges:<br />''(per a pàgines de descripció de fitxers)''",
+       "imagemaxsize": "Límit de mida d'imatges en les pàgines de descripció dels fitxers:",
        "thumbsize": "Mida de la miniatura:",
        "widthheight": "$1 × $2",
        "widthheightpage": "$1 × $2, $3 {{PLURAL:$3|pàgina|pàgines}}",
        "confirm-unwatch-top": "Voleu treure aquesta pàgina de la llista de seguiment?",
        "confirm-rollback-button": "D'acord",
        "confirm-rollback-top": "Voleu revertir les modificacions a la pàgina?",
+       "confirm-mcrrestore-title": "Restaura una revisió",
        "confirm-mcrundo-title": "Desfés un canvi",
+       "mcrundofailed": "Ha fallat el desfer",
        "colon-separator": ":&#32;",
        "quotation-marks": "«$1»",
        "imgmultipageprev": "← pàgina anterior",
        "autosumm-blank": "Pàgina blanquejada",
        "autosumm-replace": "Contingut canviat per «$1».",
        "autoredircomment": "Redirecció a [[$1]]",
+       "autosumm-removed-redirect": "S'ha suprimit la redirecció a [[$1]]",
        "autosumm-new": "Es crea la pàgina amb «$1».",
        "autosumm-newblank": "S'ha creat una pàgina en blanc",
        "lag-warn-normal": "Els canvis més nous de $1 {{PLURAL:$1|segon|segons}} podrien no mostrar-se a la llista.",
        "tags": "Etiquetes de canvi vàlides",
        "tag-filter": "Filtre d'[[Special:Tags|etiquetes]]:",
        "tag-filter-submit": "Filtra",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Etiqueta|Etiquetes}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Etiqueta|Etiquetes}}]]: $2",
        "tag-mw-contentmodelchange": "canvi de model de contingut",
        "tag-mw-new-redirect": "Redirecció nova",
        "tag-mw-removed-redirect": "Redirecció suprimida",
        "dberr-again": "Intenteu esperar uns minuts i tornar a carregar.",
        "dberr-info": "(No es pot accedir a la base de dades: $1)",
        "dberr-info-hidden": "(No es pot accedir a la base de dades)",
-       "dberr-usegoogle": "Podeu intentar fer la cerca via Google mentrestant.",
-       "dberr-outofdate": "Tingueu en compte que la seva indexació del nostre contingut pot no estar actualitzada.",
-       "dberr-cachederror": "A continuació hi ha una còpia emmagatzemada de la pàgina demanada, que pot no estar actualitzada.",
        "htmlform-invalid-input": "Hi ha problemes amb alguna de les seves entrades",
        "htmlform-select-badoption": "El valor que heu especificat no és una opció vàlida.",
        "htmlform-int-invalid": "El valor que heu especificat no és un nombre enter.",
        "special-characters-title-endash": "guió curt",
        "special-characters-title-emdash": "guió llarg",
        "special-characters-title-minus": "signe menys",
-       "mw-widgets-abandonedit": "Esteu segurd que voleu tornar a la pàgina sense desar abans?",
+       "mw-widgets-abandonedit": "Esteu segur que voleu deixar el mode d'edició sense desar abans?",
        "mw-widgets-abandonedit-discard": "Descarta les edicions",
        "mw-widgets-abandonedit-keep": "Continua editant",
        "mw-widgets-abandonedit-title": "N'esteu segur?",
        "specialpage-securitylevel-not-allowed-title": "No permès",
        "specialpage-securitylevel-not-allowed": "Ho sentim, no podeu utilitzar la pàgina perquè no es pot verificar la vostra identitat.",
        "authpage-cannot-login": "No s'ha pogut iniciar la sessió.",
-       "authpage-cannot-login-continue": "No es pot continuar amb l'inicio de sessió. Probablement la vostra sessió ha expirat.",
+       "authpage-cannot-login-continue": "No es pot continuar amb l'inici de sessió. Probablement la vostra sessió ha expirat.",
        "authpage-cannot-create": "No s'ha pogut iniciar la creació del compte.",
        "authpage-cannot-create-continue": "No es pot prosseguir la creació del compte. Probablement la vostra sessió ha expirat.",
        "authpage-cannot-link": "No s'ha pogut iniciar l'enllaç del compte.",
        "passwordpolicies-group": "Grup",
        "passwordpolicies-policies": "Polítiques",
        "passwordpolicies-policy-minimalpasswordlength": "La contrasenya ha de tenir un mínim {{PLURAL:$1|d'un caràcter|de $1 caràcters}}",
-       "passwordpolicies-policy-passwordcannotmatchusername": "La contrasenya no pot ser igual que el nom d'usuari"
+       "passwordpolicies-policy-passwordcannotmatchusername": "La contrasenya no pot ser igual que el nom d'usuari",
+       "passwordpolicies-policy-passwordcannotmatchblacklist": "La contrasenya no pot coincidir amb una paraula que es trobi a llista negra de contrasenyes.",
+       "easydeflate-invaliddeflate": "El contingut proporcionat no està deflactat adequadament"
 }
index d210ca8..de0bd14 100644 (file)
        "mycontris": "我其貢獻",
        "anoncontribs": "Góng-hióng",
        "contribsub2": "{{GENDER:$3|$1}} gì góng-hióng ($2)",
-       "uctop": "(當前)",
+       "uctop": "當前",
        "month": "趁月(共更早):",
        "year": "趁年(共更早):",
        "sp-contributions-newbies": "囇顯示新開賬戶其貢獻",
        "redirect-file": "Ùng-gióng miàng",
        "specialpages": "Dĕk-sṳ̀-hiĕk",
        "tag-filter": "Áng [[Special:Tags|biĕu-chiĕng]] tō̤:",
-       "tag-list-wrapper": "([[Special:Tags|$1 bĭh biĕu-chiĕng]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|$1 bĭh biĕu-chiĕng]]: $2",
        "tag-mw-new-redirect": "Sĭng gì tṳ̀ng-dêng-hióng",
        "tags-active-yes": "Ciáng-sê",
        "tags-active-no": "Ng-sê",
index 84ca75c..98e7866 100644 (file)
        "prefs-editor": "Тадар",
        "prefs-preview": "Хьалххе хьажар",
        "prefs-advancedrc": "Кхин гӀирс нисбар",
-       "prefs-opt-out": "Дика кечъяр цаэшар",
        "prefs-advancedrendering": "Кхин гӀирс нисбар",
        "prefs-advancedsearchoptions": "Кхин гӀирс нисбар",
        "prefs-advancedwatchlist": "Кхин гӀирс нисбар",
        "contribsub2": "Къинхьегам $1 ($2)",
        "contributions-userdoesnotexist": "«$1» иштта декъашхочун дӀаяздар дац.",
        "nocontribs": "Дехарца хийцамаш цакарий.",
-       "uctop": "(карара)",
+       "uctop": "карара",
        "month": "Баттачохь (я хьалхе):",
        "year": "Шерачохь (я хьалхе):",
        "sp-contributions-newbies": "Керла декъашхойн къинхьегам бен ма гайта",
        "tags": "Болш болу хийцаман къастам",
        "tag-filter": "[[Special:Tags|Билгалонаш]] луьттург:",
        "tag-filter-submit": "Литта",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|1=Билгало|Билгалонаш}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|1=Билгало|Билгалонаш}}]]: $2",
        "tag-mw-contentmodelchange": "модулан чулацаман хийцам",
        "tag-mw-new-redirect": "Керла дӀасахьажорг",
        "tag-mw-removed-redirect": "дӀаяьккхина дӀасхьажорг",
        "dberr-problems": "Бехк ма бил! ХӀокху сайтехь техникан халонаш хила.",
        "dberr-again": "Хьажа карла йаккха агlо массех минот йаьлча.",
        "dberr-info": "(аьтто ца хили зӀе хӀотта серверца бухара хаамашца: $1)",
-       "dberr-usegoogle": "ЦӀачун хьо хьажа лаха гӀоьнца Google.",
-       "dberr-outofdate": "Хьуна хаалахь, цуьна йолу меттиг хила мега тишйелла черахь.",
        "htmlform-invalid-input": "Ахьа яздинчу цхьан дакхано гӀалат далина",
        "htmlform-select-badoption": "Ахьа яздина маьӀна магийна дац.",
        "htmlform-int-invalid": "Ахьа яздина маьӀна дуьззина терахь дац.",
index 5bfbf4a..962ff5d 100644 (file)
        "mycontris": "Mga tampo",
        "anoncontribs": "Mga tampo",
        "contribsub2": "Para $1 ($2)",
-       "uctop": "(hitaas)",
+       "uctop": "hitaas",
        "month": "Gikan sa bulan (ug mas sayo pa):",
        "year": "Gikan sa tuig (ug mas sayo pa):",
        "sp-contributions-newbies": "Ipakita lamang ang mga tampo sa mga bag-ong gumagamit",
        "watchlisttools-raw": "Usba ang hilaw nga talaan sa gibantayan",
        "specialpages": "Espesyal nga mga panid",
        "tag-filter": "[[Special:Tags|Tag]] nga pilter:",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Tag|Mga tag}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Tag|Mga tag}}]]: $2",
        "logentry-delete-delete": "Si $1 {{GENDER:$2|mipapas}} sa panid nga $3",
        "revdelete-restricted": "mga na-aplay nga restriksyon sa mga tagdumala",
        "revdelete-unrestricted": "gitangtang ang mga restriksyon alang sa mga tagdumala",
index ced2f6a..66d0f05 100644 (file)
        "contributions": "Kontribusion siha ni muna'sesetbi",
        "mycontris": "Kontribusion-hu",
        "contribsub2": "Para {{GENDER:$3|$1}} ($2)",
-       "uctop": "(sanhilo')",
+       "uctop": "sanhilo'",
        "month": "Ginen i mes (yan eståba):",
        "year": "Ginen i sakkan (yan eståba):",
        "sp-contributions-newbies-sub": "Para i mannuebu na kuenta siha",
index 7873eae..4a56710 100644 (file)
        "savechanges": "پاشەکەوتکردنی گۆڕانکارییەکان",
        "publishpage": "بڵاوکردنەوەی پەڕە",
        "publishchanges": "پاشەکەوتکردنی گۆڕانکارییەکان",
+       "savearticle-start": "پاشەکەوتکردنی پەڕە...",
+       "savechanges-start": "پاشەکەوتکردنی گۆڕانکارییەکان...",
+       "publishpage-start": "بڵاوکردنەوەی پەڕە...",
+       "publishchanges-start": "بڵاوکردنەوەی گۆڕانکارییەکان...",
        "preview": "پێشبینین",
        "showpreview": "پێشبینین نیشان بدە",
        "showdiff": "گۆڕانکارییەکان نیشان بدە",
        "subject-preview": "پێشبینینی بابەت:",
        "previewerrortext": "ھەڵەیەک دروست بوو لەکاتی ھەوڵدان بۆ بینینی دەستکارییەکانت.",
        "blockedtitle": "بەکارھێنەر بەربەست کراوە",
+       "blocked-email-user": "<strong>ھەژمارەکەت لە ناردنی پۆستی ئەلیکترۆنی بەربەستکراوە، بەڵام ھێشتا دەتوانیت دەستکاری پەڕە بکەیت لەم ویکییەدا.</strong> دەتوانیت وردەکارییەکانی بەربەستن لە [[Special:MyContributions|بەشدارییەکانی ھەژمار]] ببینیت.\n\nبەربەستنەکە لەلایەن $1 کراوە.\n\n* دەستپێکردنی بەربەستن: $8\n* بەسەرچوونی بەربەستن: $6\n* ھەژماری مەبەست: $7\n* پێناسی بەربەستن #$5",
+       "blockedtext-partial": "<strong>ھەژمارەکەت یان ناونیشانی ئایپیی ھەژمارەکەت لە دەستکاریکردنی ئەم پەڕەیە بەربەست کراوە، بەڵام ھێشتا دەتوانیت دەستکاری پەڕەکانی تری ئەم ویکییە بکەیت.</strong> دەتوانیت وردەکاری تەواوی بەربەستنەکە لە [[Special:MyContributions|بەشدارییەکانی ھەژمار]] ببینیت.\n\nبەربەستنەکە لەلایەن $1 ئەنجام دراوە.\n\nھۆکاری ئاماژە پێکراو بۆ بەربەستن: <em>$2</em>\n\n* دەستپێکردنی بەربەستن: $8\n* بەسەرچوونی بەربەستن: $6\n* ھەژماری مەبەست: $7\n* پێناسی بەربەستن #$5",
        "blockedtext": "'''ناوی بەکارهێنەری یان ئای‌پی ئەدرەسی تۆ بەربەست‌ کراوە.'''\n\nبەربەست لە لایەن $1 کراوە.\nهۆکاری بەربەست کردن ''$2''ە.\n\n* دەستپێکی بەربەست‌کران: $8\n* کۆتایی هاتنی بەربەست‌کران: $6\n* بابەتی بەربەست: $7\n\nبۆ وتووێژ سەبارەت بە بەربەست‌کرانەکە دەبێ پەیوەندی بکەی بە $1 یان یەکێ دی لە [[{{MediaWiki:Grouppage-sysop}}|بەڕێوبەران]].\nلە بیرت بێ تاکوو ئیمەیل ئەدرەسێکی بڕوا پێ‌کراو لە [[Special:Preferences|ھەڵبژاردەکانی بەکارھێنەر]] ڕاچاو نەکەی، نابێت لە هەلی «ئیمەیل ناردن بۆ ئەم بەکارهێنەرە» کەڵک وەر بگری؛ کەڵک وەرگرتن لەوە بەربەست نەکراوە بۆت.\n\nئای‌پی ئەدرەسی ئێستای تۆ $3 و پێناسەی بەربەست‌کراو #$5.\nتکایە لە هەر پرس و داواکاریەکت‌دا هەموو وردەکاریەکانی سەرەوە بگونجێنە.",
        "autoblockedtext": "ناونیشانی IPی تۆ بە شێوەی خۆکارانە بەرگیری لێ کراوە چوونکە بەکارھێنەرێکی دیکە بە خراپی بە کاری ھێناوە و بە دەستی $1 بەرگیری لێ کراوە.\nبەم ھۆکارەوە:\n\n:<em>$2</em>\n\n* دەست پێ کردنی بەرگیری: $8\n* بە سەر چوونی بەرگیری: $6\n* Intended blockee: $7\n\nدەتوانیت پەیوەندی بکەیت بە $1 یان یەکێکی دیکە لە [[{{MediaWiki:Grouppage-sysop}}|بەڕێوەبەران]] بۆ وتووێژ لە سەر بەرگیرییەکە.\n\nتێ بگە کە ناتوانیت ئامرازی «ئیمێل بنێرە بۆ ئەم بەکارھێنەرە» بە کار بھێنیت مەگەر ئەوەی کە پێشتر لە [[Special:Preferences|ھەڵبژاردەکانی بەکارھێنەر]]تدا ناونیشانێکی گونجاوی ئیمێلت تۆمار کردبێت و بەرگیریت لێ نەکرابێت لە بەکارھێنانی ئەو ئامرازەش.\n\nناونیشانی IPی ئێستای تۆ $3ـە و پێناسەی یەرگیرییەکە #$5ـە.\nتکایە ھەموو وردەکارییەکانی سەرەوە ھەبێت لە ھەر پرس و داوایک کە دەیکەیت.",
+       "systemblockedtext": "ھەژمارەکەت یان ئایپییەکەت بە شێوەیەکی خۆگەڕانە لەلایەن میدیاویکییەوە بەربەستکراوە. ھۆکاری بەربەستنەکە ئەمەیە: \n\n:<em>$2</em>\n\n* دەستپێکردنی بەربەستن: $8\n* بەسەرچوونی بەربەستن: $6\n* ھەژماری مەبەست: $7\n\nناونیشانی ئایپیی ئێستات پێکھاتووە لە $3.\nتکایە ئەم زانیارییانە لەکاتی داواکردنی یارمەتی دابنێ.",
        "blockednoreason": "هیچ هۆکارێک نەدراوە",
        "whitelistedittext": "بۆ دەستکاریی پەڕەکان دەبێ $1.",
        "confirmedittext": "پێویستە پێش هەرجۆرە دەستکاریەکی لاپەڕەکان ئەدرەسی ئیمەیلت ڕاچاو کردبێت .<br />\nتکایە لە [[Special:Preferences|ھەڵبژاردەکانی بەکارھێنەر]] ئی‌مەیلەکەت دانێ و بڕواپێکراوی بکە.",
        "longpageerror": "'''ھەڵە: ئەو دەقە تۆ ناردووتە {{PLURAL:$1|یەک کیلۆبایت|$1 کیلۆبایت}} درێژە، کە درێژترە لە زۆرینەی {{PLURAL:$2|یەک کیلۆبایت|$2 کیلۆبایت}}.'''\nئەمە پاشەکەوت ناکرێت.",
        "readonlywarning": "<strong>ئاگاداری: بنکەی زانیاری بۆ چاکسازی داخراوە، بۆیە ئێستا ناتوانی دەستکاریەکانت پاشەکەوت بکەیت.</strong>\nدەتوانیت دەقەکەت لەبەر بگریتەوە بۆ پەڕگەیەک و ھەڵی بگریت بۆ دوایی.\nئەو بەڕێوەبەرەی کە دای خستووە، ئەم هۆکارەی دەستنیشان کردووە: $1",
        "protectedpagewarning": "'''ئاگاداری: ئەم پەڕە پارێزراوە بۆ ئەوەی تەنیا ئەو بەکارھێنەرانە کە مافەکانی بەڕێوەبەرایەتییان ھەیە بتوانن دەستکاریی بکەن.'''\nدوایین لۆگ بۆ ژێدەر لە خوارەوەدا ھاتووە:",
-       "semiprotectedpagewarning": "'''ئاگاداری:''' ئەم پەڕە داخراوە بۆ ئەوی تەنھا بەکارھێنەرە تۆمارکراوەکان بتوانن دەستکاریی بکەن.\nدوایین لۆگ بۆ ژێدەر لە خوارەوەدا ھاتووە:",
+       "semiprotectedpagewarning": "<strong>ئاگاداری:</strong> ئەم پەڕەیە پارێزراوە بۆ ئەوەی تەنیا بەکارھێنەرەکان بە مافی پەسەندکراوی خۆگەڕ بتوانن دەستکاریی بکەن.\nدوایین لۆگ بۆ ژێدەر لە خوارەوەدا ھاتووە:",
        "cascadeprotectedwarning": "'''ئاگاداری:''' ئەم پەڕەیە داخراوە بۆ ئەوەی تەنھا ئەو کەسانەی کە [[Special:ListGroupRights|مافیان ھەیە]] بتوانن دەستکاری بکەن، چوونکە ئەم {{PLURAL:$1|لاپه‌ڕه‌|لاپه‌ڕانه‌}} لە زنجیرەی پارێزراوەکانی لە خۆ گرتووە‌:",
        "titleprotectedwarning": "'''ئاگاداری: ئەم پەڕە داخراوە، بۆئەوەی بۆ درووست‌کردنی [[Special:ListGroupRights|مافە تایبەتەکانت]] پێویستن.'''\nبۆ چاوانە دوایین لۆگ لە خوارەوەدا ھاتووە:",
        "templatesused": "ئەو {{PLURAL:$1|داڕێژەیە کە لەم پەڕەیەدا بە کارھێنراوە|داڕێژانە کە لەم پەڕەیەدا بە کارھێنراون}}:",
        "postedit-confirmation-created": "پەڕەکە دروست کرا.",
        "postedit-confirmation-restored": "پەڕەکە ھێنرایەوە.",
        "postedit-confirmation-saved": "دەستکارییەکەت پاشەکەوت کرا.",
+       "postedit-confirmation-published": "دەستکارییەکەت بڵاوکرایەوە.",
        "edit-already-exists": "تواناییی دروستکردنی پەڕەی نوێ نییە.\nئەمە پەڕەیە پێشتر هەبووە.",
        "defaultmessagetext": "دەقی پەیامی هەمیشەیی",
        "invalid-content-data": "دراوەی ناوەرۆکی نادروست",
        "revdelete-show-file-confirm": "ئایا دڵنیایت دەتەوێ پێداچوونەوەی سڕاوەی پەڕگەی \"<nowiki>$1</nowiki>\" لە $2، لە $3دا ببیینی؟",
        "revdelete-show-file-submit": "بەڵێ",
        "revdelete-selected-text": "{{PLURAL:$1|پێداچوونەوەی ھەڵبژێردراوی|پێداچوونەوە ھەڵبژێردراوەکانی}} [[:$2]]:",
+       "revdelete-selected-file": "وەشانە ھەڵبژێردراوەکانی [[:$2]]:",
        "logdelete-selected": "{{PLURAL:$1|لۆگی ڕووداوەی هەڵبژێراو|لۆگی ڕووداوە هەڵبژێراوەکان}}:",
        "revdelete-text-text": "پێداچوونە سڕاوەکان ھێشتا لە مێژووی پەڕەدا دەردەکەوێت بەڵام بەشێک لە ناوەرۆکەکەیان بۆ ھەمووان لەبەر دەست دەبێت.",
        "revdelete-text-file": "وەشانە سڕاوەکانی پەڕگە ھێشتا لە مێژووی پەڕگەدا دەردەکەوێت بەڵام بەشێک لە ناوەرۆکەکەیان بۆ ھەمووان لەبەر دەست دەبێت.",
        "mergehistory-empty": "ناتواندرێت هیچ یەک لە پێداچوونەوەکان بخرێتە ‌سەریەک.",
        "mergehistory-done": "$3 {{PLURAL:$3|پێداچوونەوە}}ی $1 بە سەرکەوتوویی خرایە سەر [[:$2]].",
        "mergehistory-fail": "کردنەیەکی مێژوو جێبەجێ ناکرێ، تکایە دیسان پارامەترەکانی پەڕە و کات تاوتوێ بکە.",
+       "mergehistory-fail-bad-timestamp": "کات ھەڵەیە.",
+       "mergehistory-fail-invalid-source": "پەڕەی سەرچاوە ھەڵەیە.",
+       "mergehistory-fail-invalid-dest": "پەڕەی ئامانج ھەڵەیە.",
        "mergehistory-no-source": "پەڕەی سەرچاوەی $1 بوونی نییە.",
        "mergehistory-no-destination": "پەڕەی مەبەستی $1 بوونی نییە.",
        "mergehistory-invalid-source": "پەڕەی سەرچاوە دەبێ سەردێڕێکی دروست بێت.",
        "prefs-editwatchlist": "دە‌ستکاری لیستی چاودێری",
        "prefs-editwatchlist-label": "دەستکاری لیستی چاودێرییەکەت بکە",
        "prefs-editwatchlist-edit": "ناونیشانەکانی نێو لیستی چاودێرییەکەت ببینە و بسڕەوە",
+       "prefs-editwatchlist-raw": "دەستکاریی پێڕستی خاوی چاودێری",
        "prefs-editwatchlist-clear": "لیستی چاودێرییەکەت پاک بکەرەوە",
        "prefs-watchlist-days": "ژمارەی ڕۆژەکان بۆ نیشاندان لە لیستی چاودێری:",
        "prefs-watchlist-days-max": "ئەوپەڕی $1 {{PLURAL:$1|ڕۆژە|ڕۆژە}}",
        "prefs-help-recentchangescount": "زۆرترین ژمارە: ١٠٠٠",
        "prefs-help-watchlist-token2": "ئەمە کلیلێکی تایبەتیی پێڕستی چاودێرییەکەتە. ھەرکەسێک بیزانێت دەتوانێت پێڕستی چاودێرییەکەت ببینێت، بۆیە لای خۆت بیپارێزە.\nئەگەر پێویستی کرد، [[Special:ResetTokens|دەتوانیت بیگۆڕیت]].",
        "savedprefs": "ھەڵبژاردەکانت پاشەکەوت کران",
+       "savedrights": "گرووپەکانی بەکارھێنەر بۆ $1 پاشەکەوت کران.",
        "timezonelegend": "ناوچەی کاتی:",
        "localtime": "کاتی خۆماڵی:",
        "timezoneuseserverdefault": "دیفاڵتی ویکی بەکاربێنە ($1)",
        "youremail": "ئیمەیل:",
        "username": "{{GENDER:$1|ناوی بەکارھێنەر}}:",
        "prefs-memberingroups": "{{GENDER:$2|ئەندامی}} {{PLURAL:$1|گرووپی|گرووپەکانی}}:",
+       "group-membership-link-with-expiry": "$1 (ھەتاکوو $2)",
        "prefs-registration": "کاتی خۆتۆمارکردن:",
        "yourrealname": "ناوی ڕاستی:",
        "yourlanguage": "زمان",
        "prefs-dateformat": "ڕازاندنەوەی ڕێکەوت",
        "prefs-timeoffset": "قەرەبووکەری کات",
        "prefs-advancedediting": "ھەڵبژاردە گشتییەکان",
+       "prefs-developertools": "ئامرازەکانی پەرەپێدەران",
        "prefs-editor": "دەستکاریکەر",
        "prefs-preview": "پێشبینین",
        "prefs-advancedrc": "ھەڵبژاردەکانی پێشکەوتوو",
        "userrights-expiry-current": "بەسەردەچێ لە $1",
        "userrights-expiry-none": "بەسەرناچێت",
        "userrights-expiry": "بەسەردەچێت:",
+       "userrights-expiry-existing": "کاتی بەسەرچوونی ئێستا: $3، $2",
        "userrights-expiry-othertime": "کاتی تر:",
+       "userrights-expiry-options": "١ ڕۆژ:1 day,١ حەفتە:1 week,١ مانگ:1 month,٣ مانگ:3 months,٦ مانگ:6 months,١ ساڵ:1 year",
        "userrights-invalid-expiry": "کاتی بەسەرچوون بۆ گرووپی «$1» ھەڵەیە.",
        "userrights-expiry-in-past": "کاتی بەسەرچوون بۆ گرووپی «$1» لە ڕابردوودایە.",
+       "userrights-conflict": "کێشە لە گۆڕینی مافەکانی بەکارھێنەر! تکایە دووبارە بەسەر گۆڕانکارییەکانت بچۆرەوە و پاشکەوتیان بکە.",
        "group": "گرووپ:",
        "group-user": "بەکارھێنەران",
        "group-autoconfirmed": "بەکارھێنەرانی پەسەندکراوی خۆگەڕ",
        "right-sendemail": "ناردنی ئیمەیل بۆ بەکارھێنەرانی تر",
        "right-managechangetags": "دروستکردن و (نا)چالاککردنی [[Special:Tags|تاگەکان]]",
        "right-deletechangetags": "سڕینەوەی [[Special:Tags|tags]] لە بنکەی زانیاری",
+       "grant-generic": "کۆمەڵەی مافەکانی «$1»",
+       "grant-group-page-interaction": "مامەڵەکردن بە پەڕەکانەوە",
        "grant-group-file-interaction": "مامەڵەکردن لەگەڵ میدیا",
+       "grant-group-watchlist-interaction": "مامەڵەکردن بە پێڕستی چاودێریتەوە",
        "grant-group-email": "ناردنی ئیمەیل",
+       "grant-group-customization": "تایبەتمەندێتی و ھەڵبژاردەکان",
+       "grant-group-administration": "ئەنجامدانی کردەوەی بەڕێوەبەرایەتی",
+       "grant-group-private-information": "بینینی زانیارییە تایبەتییەکانی خۆت",
+       "grant-group-other": "چالاکیی زیاتر",
        "grant-blockusers": "بەربەستکردن و بەربەستنەکردنی بەکارھێنەران",
        "grant-createaccount": "دروستکردنی ھەژمار",
        "grant-createeditmovepage": "دروستکردن، دەستکاریکردن و گواستنەوەی پەڕەکان",
+       "grant-delete": "سڕینەوەی پەڕەکان، بەسەرداچوونەوەکان و لۆگەکان",
        "grant-editmyoptions": "دەستکاریی ھەڵبژاردەکانی خۆت",
        "grant-editmywatchlist": "دەستکاریکردنی لیستی چاودێرییەکەت",
        "grant-editpage": "پەڕە ھەبووەکان دەستکاری بکە",
        "action-editmyprivateinfo": "دەستکاری زانیارییە تایبەتییەکانت بکە",
        "action-purge": "پاکسازی ئەم پەڕەیە بکە",
        "nchanges": "$1 {{PLURAL:$1|گۆڕانکاری}}",
+       "enhancedrc-since-last-visit": "$1 لە ماوەی دوایین سەردانەوە",
        "enhancedrc-history": "مێژوو",
        "recentchanges": "دوایین گۆڕانکارییەکان",
        "recentchanges-legend": "ھەڵبژاردەکانی دوایین گۆڕانکارییەکان",
        "recentchanges-summary": "لەم پەڕەیەدا شوێنی دوایین گۆڕانکارییەکانی ویکی بکەوە.",
        "recentchanges-noresult": "ھیچ گۆڕانکارییەک لە نێوان ماوەی پێدراو لەگەڵ ئەم پێوەرانە وێک نەھاتەوە.",
+       "recentchanges-network": "لەبەر کێشەی تەکنیکی، نەتواندرا ھیچ ئەنجامێک بار بکرێت. تکایە ھەوڵی خاوێنکردنەوەی پەڕەکە بدە.",
        "recentchanges-feed-description": "دوای دوایین گۆڕانکارییەکانی ئەم ویکیە بکەوە لەم «فید»ەوە.",
        "recentchanges-label-newpage": "ئەم دەستکارییە پەڕەیەکی نوێی دروست کرد",
        "recentchanges-label-minor": "ئەمە دەستکارییەکی بچووکە",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (ھەروەھا بڕوانە [[Special:NewPages|پێرستی پەڕە نوێکان]])",
        "recentchanges-legend-plusminus": "(''±۱٢٣'')",
        "recentchanges-submit": "نیشانی بدە",
+       "rcfilters-tag-remove": "لابردنی «$1»",
        "rcfilters-legend-heading": "<strong>پێرستی ناوبڕەکان:</strong>",
        "rcfilters-other-review-tools": "ئامرازەکانی تری بەسەرداچوونەوە",
        "rcfilters-group-results-by-page": "ئەنجامەکان بە پێی پەڕە کۆبکەرەوە",
        "rcfilters-activefilters": "پاڵێوەرە چالاکەکان",
+       "rcfilters-activefilters-hide": "شاردنەوە",
+       "rcfilters-activefilters-show": "نیشاندان",
        "rcfilters-advancedfilters": "پاڵوێنە پێشکەوتووەکان",
        "rcfilters-limit-title": "ئەنجام بۆ نیشاندان",
        "rcfilters-limit-and-date-label": "$1 گۆڕانکاری، $2",
        "rcfilters-days-title": "ڕۆژ",
        "rcfilters-hours-title": "کاتژمێر",
        "rcfilters-days-show-days": "$1 {{PLURAL:$1|ڕۆژ}}",
+       "rcfilters-days-show-hours": "$1 سەعات",
+       "rcfilters-highlighted-filters-list": "ڕووناککراو: $1",
        "rcfilters-quickfilters": "پاڵوێنە پاشەکەوتکراوەکان",
        "rcfilters-quickfilters-placeholder-title": "ھیچ پاڵوێنەیەک پاشەکەوت نەکراوە",
        "rcfilters-quickfilters-placeholder-description": "بۆ پاشەکەوتکردنی ھەڵبژاردەی پاڵوێنەکان و دووبارە بەکارھێنانەوەیان، کرتە لەسەر نیشانی نیشانەی کتێبەکە بکە.",
        "rcfilters-savedqueries-defaultlabel": "پاڵوێنە پاشەکەوتکراوەکان",
+       "rcfilters-savedqueries-rename": "ناونانەوە",
        "rcfilters-savedqueries-setdefault": "بە بنەڕەتی کارای بکە",
+       "rcfilters-savedqueries-unsetdefault": "لابردن وەک بنەڕەت",
+       "rcfilters-savedqueries-remove": "سڕینەوە",
        "rcfilters-savedqueries-new-name-label": "ناو",
        "rcfilters-savedqueries-new-name-placeholder": "وەسفی کاری پاڵوێنەکە بکە",
        "rcfilters-savedqueries-apply-label": "دروستکردنی پاڵوێنە",
+       "rcfilters-savedqueries-apply-and-setdefault-label": "دروستکردنی پاڵوێنەی بنەڕەتی",
        "rcfilters-savedqueries-cancel-label": "ھەڵوەشاندنەوە",
        "rcfilters-savedqueries-add-new-title": "پاشەکەوتکردنی ھەڵبژاردەکانی پاڵوێنەکەی ئێستا",
        "rcfilters-restore-default-filters": "ھێنانەوەی پاڵوێنە بنچینەییەکان",
        "rcfilters-filter-lastrevision-description": "تەنیا دوایین گۆڕانکاری سەر پەڕەکان.",
        "rcfilters-filter-previousrevision-label": "دوایین گۆڕانکاری نا",
        "rcfilters-filter-previousrevision-description": "ھەموو ئەو گۆڕانکارییەی «نوێترین وەشان» نین.",
+       "rcfilters-filter-excluded": "دەرکراو",
        "rcfilters-view-tags": "دەستکارییە تاگکراوەکان",
        "rcfilters-view-tags-help-icon-tooltip": "زیاتر بزانە لەسەر دەستکارییە تاگکراوەکان",
        "rcfilters-liveupdates-button": "نوێکردنەوەی زیندوو",
+       "rcfilters-watchlist-markseen-button": "ھەموو گۆڕانکارییەکان وەک بینراو نیشان بکە",
        "rcfilters-watchlist-edit-watchlist-button": "دەستکاریکردنی پێڕستی پەڕە چاودێریکراوەکانت",
        "rcfilters-watchlist-showupdated": "ئەو پەڕانەی دەستکاریکراون و لەکاتی دەستکاریکردنەکەوە سەردانت نەکردوونەتەوە بە <strong>تۆخ</strong> دەردەکەون، بە نیشانی پڕکراوەوە.",
        "rcfilters-preference-label": "گەڕاندنەوەی وەشانی نوێی دوایین گۆڕانکارییەکان",
+       "rcfilters-preference-help": "ئەم ھەڵبژاردەیە وەشانی نوێی ڕووکار و ھەموو ئامرازەکانی لەو کاتەوە زیاد کراون دەگەڕێنێتەوە.",
        "rcfilters-watchlist-preference-label": "شاردنەوەی وەشانی نوێی پێڕستی چاودێری",
        "rcfilters-watchlist-preference-help": "ئەم ھەڵبژاردەیە وەشانی نوێی ڕووکار و ھەموو ئامرازەکانی لەو کاتەوە زیاد کراون دەگەڕێنێتەوە.",
        "rcnotefrom": "ژێرەوە {{PLURAL:$5|گۆڕانکارییەکەیە|گۆڕانکارییەکانە}} لە <strong>$3، $4</strong>ەوە (ھەتا <strong>$1</strong> نیشان دراوە).",
        "deadendpages": "پەڕە بنبەستەکان",
        "deadendpagestext": "ئەم پەڕانەی خوارەوە پەیوەندییان لەگەڵ پەڕەکانی تری {{SITENAME}} نییە.",
        "protectedpages": "پەڕە پارێزراوەکان",
+       "protectedpages-filters": "پاڵوێنەکان:",
        "protectedpages-indef": "تەنیا پاراستنە بێسنوورەکان",
        "protectedpages-cascade": "تەنیا پاراستنە زنجیرییەکان",
        "protectedpages-noredirect": "ڕەوانەکەرەکان بشارەوە",
        "protectedpagesempty": "هیچ لاپەڕەیک ئێستا بەم دیاریکراوانە نەپارێزراوە.",
+       "protectedpages-timestamp": "کات",
        "protectedpages-page": "پەڕە",
        "protectedpages-expiry": "بەسەردەچێت",
        "protectedpages-performer": "پاراستنی بەکارھێنەر",
        "protectedpages-unknown-performer": "بەکارھێنەرێکی نەناسراو",
        "protectedtitles": "سەرناوە پارێزراوەکان",
        "protectedtitlesempty": "ھیچ سەرناوێک بەم سنوورانەوە ئێستا نەپارێزراوە.",
+       "protectedtitles-submit": "نیشاندانی سەردێڕەکان",
        "listusers": "پێرستی بەکارھێنەران",
        "listusers-editsonly": "تەنیا ئەو بەکارھێنەرانە نیشان بدە کە دەستکارییان کردووە",
        "listusers-temporarygroupsonly": "تەنیا ئەو بەکارھێنەرانە نیشان بدە کە بە شێوەیەکی کاتی مافیان ھەیە",
        "pager-newer-n": "{{PLURAL:$1|یەکێکی نوێتر|$1ی نوێتر}}",
        "pager-older-n": "{{PLURAL:$1|یەکێک کۆنتر|$1ی کۆنتر}}",
        "suppress": "چاودێری",
+       "apihelp-no-such-module": "مۆدیوولی «$1» نەدۆزرایەوە.",
        "apisandbox-submit": "داواکاری",
        "apisandbox-reset": "سڕینەوە",
        "apisandbox-retry": "ھەوڵداناوە",
        "apisandbox-dynamic-parameters-add-label": "زیادکردنی پارامەتر",
        "apisandbox-dynamic-parameters-add-placeholder": "ناوی پارامەتر",
        "apisandbox-dynamic-error-exists": "پارامەترێک بە ناوی «$1» ھەیە.",
+       "apisandbox-add-multi": "زیادکردن",
        "apisandbox-submit-invalid-fields-message": "تکایە بەشە دیاریکراوەکان ڕاست بکەرەوە و دووبارە ھەوڵ بدەرەوە.",
        "apisandbox-results": "ئاکامەکان",
        "apisandbox-continue": "بەردەوامبوون",
        "apisandbox-continue-clear": "سڕینەوە",
+       "apisandbox-multivalue-all-namespaces": "$1 (ھەموو بۆشایی ناوەکان)",
+       "apisandbox-multivalue-all-values": "$1 (ھەموو بەھاکان)",
        "booksources": "سەرچاوەکانی کتێب",
        "booksources-search-legend": "گەڕان بۆ سەرچاوەکانی کتێب",
        "booksources-search": "بگەڕێ",
        "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بە سوپاسەوە، سیستمی ڕاگەیاندنی {{SITENAME}}\n\n--\nبۆ گۆڕینی رێکخستنەکانی ڕاگەیاندن بە ئیمەیل، بڕوانە\n{{canonicalurl:{{#special:Preferences}}}}\n\nبۆ گۆڕینی ڕێکخستنەکانی پێرستی چاودێرییەکەت، بڕوانە\n{{canonicalurl:{{#special:EditWatchlist}}}}\n\nبۆ سڕینەوەی پەڕەکە لە پێرستی چاودێرییەکەت، بڕوانە\n$UNWATCHURL\n\nکاردانەوە و یارمەتیی زۆرتر:\n$HELPPAGE",
+       "enotif_minoredit": "ئەمە دەستکارییەکی بچووکە",
        "created": "دروستکرا",
        "changed": "گۆڕدرا",
        "deletepage": "پەڕە بسڕەوە",
        "contribsub2": "بۆ {{GENDER:$3|$1}} ($2)",
        "contributions-userdoesnotexist": "ھەژماری بەکارھێنەریی «$1» تۆمار نەکراوە.",
        "nocontribs": "هیچ گۆڕانکاریەکی هاوتای ئەم پێوەرانە نودۆزرایەوە",
-       "uctop": "(ھەنووکە)",
+       "uctop": "ھەنووکە",
        "month": "لە مانگی (و پێشترەوە):",
        "year": "لە ساڵی (و پێشترەوە):",
        "date": "لە ڕێکەوتی (و پێشترەوە)",
        "pageinfo-category-pages": "ژمارەی پەڕەکان",
        "pageinfo-category-subcats": "ژمارەی ژێرپەڕەکان",
        "pageinfo-category-files": "ژمارەی پەڕگەکان",
+       "pageinfo-user-id": "پێناسەی بەکارھێنەر",
        "markaspatrolleddiff": "وەک پاس دراو نیشان بکە",
        "markaspatrolledtext": "ئەم پەڕەیە وەک پاس دراو نیشان بکە",
        "markedaspatrolled": "وەک پاس دراو نیشان کرا",
        "tags": "تاگەکانی گۆڕانکاریی گونجاو",
        "tag-filter": "پاڵێوی [[Special:Tags|تاگ]]:",
        "tag-filter-submit": "پاڵاوتن",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|تاگ|تاگەکان}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|تاگ|تاگەکان}}]]: $2",
+       "tag-mw-new-redirect": "ڕەوانەکەری نوێ",
+       "tag-mw-removed-redirect": "لابردنی ڕەوانەکەر",
+       "tag-mw-blank": "واڵاکردنەوە",
+       "tag-mw-replace": "لەجیاتیدانان",
+       "tag-mw-rollback": "گەڕاندنەوە",
+       "tag-mw-undo": "پووچەڵکردنەوە",
        "tags-title": "تاگەکان",
        "tags-intro": "ئەم پەڕەیە پێرستی ناو و مانای ئەو تاگانەیە کە نەرمامێر لەوانەیە دەستکارییەکی پێوە دیاری بکات.",
        "tags-tag": "ناوی تاگ",
        "dberr-problems": "ببورە! ئەم ماڵپەڕە ئێستا خەریک ئەزموونێکی کێشەی تەکنیکیە.",
        "dberr-again": "چەن خولک ڕاوەستە و نوێی بکەوە.",
        "dberr-info": "(ناتوانیت بگەیت بە بنکەدراو: $1)",
-       "dberr-usegoogle": "دەتوانی هاوکات هەوڵی گەڕان بە گووگڵ بدەیت.",
-       "dberr-outofdate": "لەیادت بێ لەوانەیە پێرستەکەیان سەبارەت نە ناوەڕۆک ئەم ماڵپەڕە ماوە بەسەرچوو بێت.",
-       "dberr-cachederror": "ئەمە ڕوونووسێکی کاش‌کراوی لاپەڕەی داواکراوە و لەوانەیە بەڕۆژ نەبێت.",
        "htmlform-invalid-input": "هێندێ کێشە هەیە لە بڕێک لە ناودراوەکانت",
        "htmlform-select-badoption": "ئەو نرخەی دیاریت‌کردووە هەڵبژاردەیەکی گونجاو نیە.",
        "htmlform-int-invalid": "ئەو نرخەی دیاریت‌کردووه ژمارەیەکی تەواو نیە.",
        "logentry-upload-upload": "$1 $3ی {{GENDER:$2|بار کرد}}",
        "logentry-upload-overwrite": "$1 وەشانێکی نوێی $3ی {{GENDER:$2|بار کرد}}",
        "logentry-managetags-create": "$1 تاگی \"$4\"ی دروست کرد",
+       "log-name-tag": "لۆگی تاگ",
        "rightsnone": "(ھیچ)",
        "rightslogentry-temporary-group": "$1 (کاتیی، تاوەکوو $2)",
        "feedback-back": "گەڕانەوە",
        "feedback-cancel": "ھەڵوەشاندنەوە",
        "feedback-close": "کرا",
+       "feedback-dialog-title": "بۆچووندان",
        "feedback-message": "پەیام:",
        "feedback-subject": "بابەت:",
        "feedback-submit": "ناردن",
+       "feedback-thanks-title": "سوپاس!",
+       "feedback-useragent": "وەکیلی بەکارھێنەر:",
        "searchsuggest-search": "لە {{SITENAME}}دا بگەڕێ",
        "searchsuggest-containing": "بە لەبەرگرتنەوەی ...",
        "api-error-unknownerror": "ھەڵەی نەزانراو: «$1».",
        "mediastatistics-header-bitmap": "وێنەی Bitmap",
        "mediastatistics-header-audio": "دەنگ",
        "mediastatistics-header-video": "ڤیدیۆکان",
+       "mediastatistics-header-total": "ھەموو پەڕگەکان",
        "json-error-syntax": "ھەڵەی ئیملایی",
        "special-characters-group-latin": "لاتینی",
        "special-characters-group-latinextended": "لاتینیی پەرەپێدراو",
        "special-characters-group-gujarati": "گوجەراتی",
        "special-characters-group-thai": "تایلەندی",
        "special-characters-group-khmer": "خمێری",
+       "mw-widgets-abandonedit-title": "دڵنیایت؟",
        "mw-widgets-dateinput-no-date": "ڕێکەوت ھەڵنەبژێردراوە",
+       "mw-widgets-categoryselector-add-category-placeholder": "زیادکردنی پۆل...",
        "mw-widgets-usersmultiselect-placeholder": "زیادکردن...",
+       "mw-widgets-titlesmultiselect-placeholder": "زیادکردنی زیاتر...",
        "date-range-from": "لە ڕێکەوتی:",
        "date-range-to": "بۆ ڕێکەوتی:",
        "log-action-filter-block": "جۆری بلۆک:",
        "log-action-filter-contentmodel": "جۆری گۆڕینی مۆدێلی ناوەڕۆک:",
        "log-action-filter-delete": "جۆری سڕینەوە:",
        "log-action-filter-all": "ھەموو",
+       "log-action-filter-block-block": "بەربەستن",
+       "log-action-filter-block-unblock": "ھەڵگرتنی بەربەستن",
        "log-action-filter-upload-upload": "بارکردنی نوێ",
-       "authmanager-email-label": "ئیمەیڵ"
+       "authmanager-create-disabled": "دروستکردنی ھەژمار ناچالاکە.",
+       "authmanager-create-from-login": "بۆ دروستکردنی ھەژمارەکەت، تکایە ئەم بۆشاییانە پڕ بکەرەوە.",
+       "authmanager-userdoesnotexist": "ھەژماری بەکارھێنەر «$1» تۆمار نەکراوە.",
+       "authmanager-username-help": "ناوی بەکارھێنەر بۆ دڵنیابوونەوە.",
+       "authmanager-password-help": "تێپەڕوشە بۆ دڵنیابوونەوە.",
+       "authmanager-retype-help": "دووبارە تێپەڕوشە بۆ دڵنیابوونەوە.",
+       "authmanager-email-label": "ئیمەیڵ",
+       "authmanager-email-help": "ناونیشانی ئیمەیڵ",
+       "authmanager-realname-label": "ناوی ڕاستی",
+       "authmanager-realname-help": "ناوی ڕاستیی بەکارھێنەر",
+       "authmanager-provider-temporarypassword": "تێپەڕوشەی کاتی",
+       "authprovider-resetpass-skip-label": "پەڕاندن",
+       "authprovider-resetpass-skip-help": "گۆڕینی تێپەڕوشە بپەڕێنە.",
+       "specialpage-securitylevel-not-allowed-title": "ڕێگە پێنەدراوە",
+       "credentialsform-account": "ناوی ھەژمار:",
+       "edit-error-short": "هەڵە: $1",
+       "edit-error-long": "ھەڵەکان:\n\n$1",
+       "revid": "پێداچوونەوەی $1"
 }
index 86d642c..08af6cd 100644 (file)
        "contributions-title": "Cuntribuzione di $1",
        "mycontris": "Cuntribuzioni",
        "contribsub2": "Per {{GENDER:$3|$1}} ($2)",
-       "uctop": "(currente)",
+       "uctop": "currente",
        "month": "Da u mese (è nanzu):",
        "year": "Da l'annu (è nanzu):",
        "sp-contributions-newbies": "Mustrà solu e mudifiche di i novi cuntributori",
index efe0557..f9d890c 100644 (file)
        "contributions-title": "Mga nabulig sang tagagamit nga si $1",
        "mycontris": "Akon nabulig",
        "contribsub2": "Para kay $1 ($2)",
-       "uctop": "(ibabaw)",
+       "uctop": "ibabaw",
        "month": "Halin sa bulan (kag sa mas timprano):",
        "year": "Halin sa tu-ig (kag sa mas timprano):",
        "sp-contributions-newbies": "Ipakita lang gid ang mga kontribusyon sang mga bag-o nga account",
index 6216acd..9697394 100644 (file)
        "anoncontribs": "Исселер",
        "contribsub2": "$1 ($2)",
        "nocontribs": "Бу критерийлерге уйгъан денъиштирме тапыламады",
-       "uctop": "(сонъки)",
+       "uctop": "сонъки",
        "month": "Бу ай (ве ондан эрте):",
        "year": "Бу сене (ве ондан эрте):",
        "sp-contributions-newbies": "Тек янъы къулланыджыларнынъ исселерини косьтер",
        "intentionallyblankpage": "Бу саифе аселет бош къалдырылгъан",
        "tag-filter": "[[Special:Tags|Бельги]] сюзгючи:",
        "tag-filter-submit": "Сюз",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Бельги|Бельгилер}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Бельги|Бельгилер}}]]: $2",
        "tags-title": "Бельгилер",
        "htmlform-reset": "Денъишикликлерни кери ал",
        "logentry-move-move": "$1 адлы къуланыджы $3 саифесининъ адыны $4 деп {{GENDER:$2|денъиштирильди}}.",
index 7435577..2f20b09 100644 (file)
        "anoncontribs": "İsseler",
        "contribsub2": "$1 ($2)",
        "nocontribs": "Bu kriteriylerge uyğan deñiştirme tapılamadı",
-       "uctop": "(soñki)",
+       "uctop": "soñki",
        "month": "Bu ay (ve ondan erte):",
        "year": "Bu sene (ve ondan erte):",
        "sp-contributions-newbies": "Tek yañı qullanıcılarnıñ isselerini köster",
        "intentionallyblankpage": "Bu saife aselet boş qaldırılğan",
        "tag-filter": "[[Special:Tags|Belgi]] süzgüçi:",
        "tag-filter-submit": "Süz",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Belgi|Belgiler}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Belgi|Belgiler}}]]: $2",
        "tags-title": "Belgiler",
        "comparepages": "Saifelerni teñeştirüv",
        "compare-submit": "Teñeştir",
index b140a47..cc78e3f 100644 (file)
        "disclaimerpage": "Project:Vyloučení odpovědnosti",
        "edithelp": "Pomoc při editování",
        "helppage-top-gethelp": "Nápověda",
-       "mainpage": "Hlavní stránka",
-       "mainpage-description": "Hlavní stránka",
+       "mainpage": "Hlavní strana",
+       "mainpage-description": "Hlavní strana",
        "policy-url": "Project:Pravidla",
        "portal": "Portál {{grammar:2sg|{{SITENAME}}}}",
        "portal-url": "Project:Portál {{grammar:2sg|{{SITENAME}}}}",
        "nstab-template": "Šablona",
        "nstab-help": "Nápověda",
        "nstab-category": "Kategorie",
-       "mainpage-nstab": "Hlavní stránka",
+       "mainpage-nstab": "Hlavní strana",
        "nosuchaction": "Neznámý úkon",
        "nosuchactiontext": "Činnost („action“) uvedená v URL je neplatná.\nZřejmě jste se při zadávání adresy překlepli nebo jste přešli na chybný odkaz.\nMůže se ale jednat také o chybu v softwaru {{GRAMMAR:2sg|{{SITENAME}}}}.",
        "nosuchspecialpage": "Neexistující speciální stránka",
        "badarticleerror": "Tuto činnost nelze na této stránce provést.",
        "cannotdelete": "Nebylo možné smazat stránku nebo soubor „$1“.\nMožná už byl(a) smazán(a) někým jiným.",
        "cannotdelete-title": "Stránku „$1“ nelze smazat",
+       "delete-scheduled": "Smazání stránky „$1“ bylo naplánováno.\nBuďte prosím trpěliví.",
        "delete-hook-aborted": "Smazání bylo bez bližšího vysvětlení zrušeno přípojným bodem.",
        "no-null-revision": "Nepodařilo se vytvořit novou prázdnou revizi stránky „$1“",
        "badtitle": "Neplatný název",
        "botpasswords-invalid-name": "Uvedené uživatelské jméno neobsahuje oddělovač hesel pro boty („$1“).",
        "botpasswords-not-exist": "Uživatel „$1“ nemá heslo pro bota nazvaného „$2“.",
        "botpasswords-needs-reset": "Heslo pro bota jménem „$2“ {{GENDER:$2|uživatele|uživatelky}} „$1“ se musí resetovat.",
+       "botpasswords-locked": "Nemůžete se přihlásit s heslem pro bota, protože váš účet je zamčen.",
        "resetpass_forbidden": "Hesla nelze změnit.",
        "resetpass_forbidden-reason": "Hesla nelze změnit: $1",
        "resetpass-no-info": "K této stránce mají přímý přístup jen přihlášení uživatelé.",
        "subject-preview": "Náhled předmětu:",
        "previewerrortext": "Při pokusu o zobrazení náhledu vašich změn došlo k chybě.",
        "blockedtitle": "Uživatel zablokován",
+       "blocked-email-user": "<strong>Vašemu uživatelskému jménu byla zablokována možnost posílat e-maily. I nadále můžete editovat ostatní stránky této wiki.</strong> Úplné podrobnosti zablokování si můžete prohlédnout v [[Special:MyContributions|seznamu příspěvků]].\n\nZablokování provedl $1.\n\nUdaným důvodem blokování bylo <em>$2</em>.\n\n* Začátek blokování: $8\n* Konec blokování: $6\n* Původně blokovaný uživatel: $7\n* Identifikační číslo bloku: #$5",
+       "blockedtext-partial": "<strong>Vašemu uživatelskému jménu byla zablokována možnost editovat tuto stránku. I nadále můžete editovat ostatní stránky této wiki.</strong> Úplné podrobnosti zablokování si můžete prohlédnout v [[Special:MyContributions|seznamu příspěvků]].\n\nZablokování provedl $1.\n\nUdaným důvodem blokování bylo <em>$2</em>.\n\n* Začátek blokování: $8\n* Konec blokování: $6\n* Původně blokovaný uživatel: $7\n* Identifikační číslo bloku: #$5",
        "blockedtext": "<strong>Vaší IP adrese či uživatelskému jménu byla zablokována možnost editace.</strong>\n\nZablokování {{GENDER:$4|provedl|provedla}} $1.\nUdaným důvodem bylo <em>$2</em>.\n\n* Začátek blokování: $8\n* Zablokování vyprší: $6\n* Blokovaný uživatel: $7\n\nPokud chcete zablokování prodiskutovat, můžete kontaktovat {{GENDER:$4|uživatele|uživatelku}} $1 či jiného [[{{MediaWiki:Grouppage-sysop}}|správce]].\nUvědomte si, že nemůžete použít funkci „{{int:emailuser}}“, jestliže nemáte ve svém [[Special:Preferences|nastavení]] uvedenu platnou e-mailovou adresu nebo pokud vám byla tato možnost zakázána.\nVaše IP adresa je $3 a&nbsp;identifikační číslo bloku je #$5; tyto údaje uvádějte ve všech dotazech na správce.",
        "autoblockedtext": "Vaše IP adresa byla automaticky zablokována, protože ji používal jiný uživatel, kterého zablokoval $1.\nUdaný důvod blokování:\n\n:<em>$2</em>\n\n* Začátek blokování: $8\n* Konec blokování: $6\n* Původně blokovaný uživatel: $7\n\nZablokování můžete prodiskutovat se správcem $1 nebo některým z dalších [[{{MediaWiki:Grouppage-sysop}}|správců]].\n\nUvědomte si však, že funkci „{{int:emailuser}}“ nemůžete použít, pokud nemáte ve svém [[Special:Preferences|uživatelském nastavení]] zadaný platný e-mail a nebylo vám zablokováno jeho užívání.\n\nVaše současná IP adresa je $3, číslo vašeho zablokování je #$5.\nProsíme, uveďte tyto údaje při komunikaci se správci.",
        "systemblockedtext": "Vaše IP adresa byla automaticky zablokována softwarem MediaWiki.\nUdaný důvod blokování:\n\n:<em>$2</em>\n\n* Začátek blokování: $8\n* Konec blokování: $6\n* Původně blokovaný uživatel: $7\n\nVaše současná IP adresa je $3.\nProsíme, uveďte tyto údaje při komunikaci se správci.",
        "timezonelegend": "Časové pásmo:",
        "localtime": "Místní čas:",
        "timezoneuseserverdefault": "Použít časové pásmo wiki ($1)",
-       "timezoneuseoffset": "Jiné (zadejte posun)",
+       "timezoneuseoffset": "Jiné (níže zadejte posun)",
+       "timezone-useoffset-placeholder": "Příklady hodnot: „-07:00“ nebo „01:00“",
        "servertime": "Čas na serveru:",
        "guesstimezone": "Načíst z prohlížeče",
        "timezoneregion-africa": "Afrika",
        "prefs-editor": "Editor",
        "prefs-preview": "Náhled",
        "prefs-advancedrc": "Rozšířené možnosti",
-       "prefs-opt-out": "Nepoužívat vylepšení",
        "prefs-advancedrendering": "Rozšířené možnosti",
        "prefs-advancedsearchoptions": "Rozšířené možnosti",
        "prefs-advancedwatchlist": "Rozšířené možnosti",
        "prefs-displayrc": "Možnosti zobrazení",
        "prefs-displaywatchlist": "Možnosti zobrazení",
+       "prefs-changesrc": "Zobrazené změny",
+       "prefs-changeswatchlist": "Zobrazené změny",
+       "prefs-pageswatchlist": "Sledování stránek",
        "prefs-tokenwatchlist": "Klíč",
        "prefs-diffs": "Porovnání verzí",
        "prefs-help-prefershttps": "Toto nastavení se projeví při příštím přihlášení.",
        "rcfilters-watchlist-markseen-button": "Označit všechny změny jako zkontrolované",
        "rcfilters-watchlist-edit-watchlist-button": "Editovat seznam sledovaných stránek",
        "rcfilters-watchlist-showupdated": "Změny stránek, které jste od provedení změn nenavštívili, jsou zobrazeny <strong>tučně</strong> s vyplněnou značkou.",
-       "rcfilters-preference-label": "Skrýt vylepšenou verzi posledních změn",
-       "rcfilters-preference-help": "Zruší novou podobu rozhraní zavedenou v roce 2017 a všechny nástroje přidané od té doby.",
-       "rcfilters-watchlist-preference-label": "Skrýt vylepšenou verzi sledovaných stránek",
-       "rcfilters-watchlist-preference-help": "Zruší novou podobu rozhraní zavedenou v roce 2017 a všechny nástroje přidané od té doby.",
+       "rcfilters-preference-label": "Používat rozhraní bez JavaScriptu",
+       "rcfilters-preference-help": "Načte poslední změny bez filtrů či zvýrazňování.",
+       "rcfilters-watchlist-preference-label": "Používat rozhraní bez JavaScriptu",
+       "rcfilters-watchlist-preference-help": "Načte sledované stránky bez filtrů či zvýrazňování.",
        "rcfilters-filter-showlinkedfrom-label": "Zobrazit změny stránek, na které se odkazuje",
        "rcfilters-filter-showlinkedfrom-option-label": "<strong>Stránky odkazované z</strong> vybrané stránky",
        "rcfilters-filter-showlinkedto-label": "Zobrazit změny stránek, které sem odkazují",
        "contribsub2": "{{GENDER:$3|uživatele|uživatelky}} $1 ($2)",
        "contributions-userdoesnotexist": "Uživatelský účet „$1“ není zaregistrován.",
        "nocontribs": "Nenalezeny žádné změny vyhovující kritériím.",
-       "uctop": "(aktuální)",
+       "uctop": "aktuální",
        "month": "Do měsíce:",
        "year": "Do roku:",
        "date": "Od data (a dříve):",
        "ipb-disableusertalk": "Zabránit tomuto uživateli editovat vlastní uživatelskou diskusi po dobu zablokování",
        "ipb-change-block": "Znovu zablokovat uživatele s tímto nastavením",
        "ipb-confirm": "Potvrdit zablokování",
+       "ipb-sitewide": "Na celém projektu",
+       "ipb-partial": "Částečný",
+       "ipb-type-label": "Typ",
+       "ipb-pages-label": "Stránky",
        "badipaddress": "Neplatná IP adresa",
        "blockipsuccesssub": "Zablokování uspělo",
        "blockipsuccesstext": "„[[Special:Contributions/$1|$1]]“ je {{GENDER:$1|zablokován|zablokována}}.<br />\nMůžete si prohlédnout [[Special:BlockList|seznam zablokovaných uživatelů]].",
        "createaccountblock": "vytváření účtů zablokováno",
        "emailblock": "e-mail blokován",
        "blocklist-nousertalk": "nemůže editovat svou diskusní stránku",
+       "blocklist-editing": "editování",
+       "blocklist-editing-sitewide": "editování (na celém projektu)",
        "ipblocklist-empty": "Seznam probíhajících bloků je prázdný.",
        "ipblocklist-no-results": "Požadovaná IP adresa nebo uživatelské jméno není blokováno.",
        "blocklink": "zablokovat",
        "move-watch": "Sledovat tuto stránku",
        "movepagebtn": "Přesunout stránku",
        "pagemovedsub": "Úspěšně přesunuto",
+       "cannotmove": "Stránku nebylo možné přesunout z {{PLURAL:$1|tohoto důvodu|následujících důvodů}}:",
        "movepage-moved": "'''Stránka „$1“ byla přesunuta na „$2“'''",
        "movepage-moved-redirect": "Bylo vytvořeno přesměrování.",
        "movepage-moved-noredirect": "Přesměrování nebylo vytvořeno.",
        "tooltip-search": "Prohledat tuto wiki",
        "tooltip-search-go": "Jít na stránku s tímto názvem, pokud existuje",
        "tooltip-search-fulltext": "Hledat stránky s tímto textem",
-       "tooltip-p-logo": "Navštívit Hlavní stránku",
+       "tooltip-p-logo": "Navštívit Hlavní stranu",
        "tooltip-n-mainpage": "Navštívit Hlavní stranu",
        "tooltip-n-mainpage-description": "Přejít na hlavní stranu",
        "tooltip-n-portal": "O projektu, jak můžete pomoci, kde hledat",
        "tags": "Platné značky pro změny",
        "tag-filter": "Filtr podle [[Special:Tags|značek]]:",
        "tag-filter-submit": "Filtrovat",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Značka|Značky}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Značka|Značky}}]]: $2",
        "tag-mw-contentmodelchange": "změna modelu obsahu",
        "tag-mw-contentmodelchange-description": "Editace, které [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:ChangeContentModel mění obsah modelu] stránky",
        "tag-mw-new-redirect": "Nové přesměrování",
        "dberr-again": "Zkuste několik minut počkat a poté znovu načíst stránku.",
        "dberr-info": "(Nelze se připojit k databázi: $1)",
        "dberr-info-hidden": "(Nelze se připojit k databázi)",
-       "dberr-usegoogle": "Mezitím můžete zkusit hledat pomocí Google.",
-       "dberr-outofdate": "Uvědomte si, že jejich vyhledávací index našeho obsahu může být zastaralý.",
-       "dberr-cachederror": "Následující stránka je kopie z cache a nemusí být aktuální.",
        "htmlform-invalid-input": "Některé vámi zadané údaje jsou chybné.",
        "htmlform-select-badoption": "Vámi uvedená hodnota není platná možnost.",
        "htmlform-int-invalid": "Uvedená hodnota není celé číslo.",
        "logentry-block-block": "$1 {{GENDER:$2|zablokoval|zablokovala|blokuje}} {{GENDER:$4|uživatele|uživatelku}} „$3“ s časem vypršení $5 $6",
        "logentry-block-unblock": "$1 {{GENDER:$2|odblokoval|odblokovala|odblokovává}} {{GENDER:$4|uživatele|uživatelku}} „$3“",
        "logentry-block-reblock": "$1 {{GENDER:$2|změnil|změnila|mění}} nastavení bloku {{GENDER:$4|uživatele|uživatelky}} „$3“ s časem vypršení $5 $6",
+       "logentry-partialblock-block": "$1 {{GENDER:$2|zablokoval|zablokovala|blokuje}} {{GENDER:$4|uživateli $3|uživatelce $3}} editaci {{PLURAL:$8|stránky|stránek}} $7 s časem vypršení $5 $6",
+       "logentry-partialblock-reblock": "$1 {{GENDER:$2|změnil|změnila|mění}} {{GENDER:$4|uživateli $3|uživatelce $3}} nastavení blokování editace {{PLURAL:$8|stránky|stránek}} $7 s časem vypršení $5 $6",
+       "logentry-non-editing-block-block": "$1 {{GENDER:$2|zablokoval|zablokovala|blokuje}} {{GENDER:$4|uživateli $3|uživatelce $3}} vykonávání určitých činností s časem vypršení $5 $6",
+       "logentry-non-editing-block-reblock": "$1 {{GENDER:$2|změnil|změnila|mění}} {{GENDER:$4|uživateli $3|uživatelce $3}} nastavení blokování vykonávání určitých činností s časem vypršení $5 $6",
        "logentry-suppress-block": "$1 {{GENDER:$2|zablokoval|zablokovala|blokuje}} {{GENDER:$4|uživatele|uživatelku}} „$3“ s časem vypršení $5 $6",
        "logentry-suppress-reblock": "$1 {{GENDER:$2|změnil|změnila|mění}} nastavení bloku {{GENDER:$4|uživatele|uživatelky}} „$3“ s časem vypršení $5 $6",
        "logentry-import-upload": "$1 {{GENDER:$2|naimportoval|naimportovala}} $3 načtením souboru",
        "mw-widgets-titleinput-description-redirect": "přesměrování na $1",
        "mw-widgets-categoryselector-add-category-placeholder": "Přidat kategorii…",
        "mw-widgets-usersmultiselect-placeholder": "Přidat další…",
+       "mw-widgets-titlesmultiselect-placeholder": "Přidat další…",
        "date-range-from": "Od data:",
        "date-range-to": "Do data:",
        "sessionmanager-tie": "Nelze kombinovat několik typů autentizace požadavků: $1.",
        "passwordpolicies-policy-passwordcannotmatchblacklist": "Heslo nesmí být v seznamu určitých zakázaných hesel",
        "passwordpolicies-policy-maximalpasswordlength": "Heslo musí být kratší než {{PLURAL:$1|$1 znak|$1 znaky|$1 znaků}}",
        "passwordpolicies-policy-passwordcannotbepopular": "Heslo nesmí být {{PLURAL:$1|dané oblíbené heslo|v seznamu $1 oblíbených hesel}}",
-       "easydeflate-invaliddeflate": "Poskytnutý obsah nebyl správně zkomprimován"
+       "easydeflate-invaliddeflate": "Poskytnutý obsah nebyl správně zkomprimován",
+       "unprotected-js": "Z bezpečnostních důvodů nelze načítat JavaScript z nechráněných stran. Vyrábějte prosím JavaScriptové skripty jen ve jmenném prostoru MediaWiki: nebo jako uživatelskou podstránku"
 }
index ab129e1..425704d 100644 (file)
        "anoncontribs": "Mój wkłôd",
        "contribsub2": "Dlô {{GENDER:$3|brëkòwnika|brëkòwniczczi}} $1 ($2)",
        "nocontribs": "Felënk zjinaczi psaowny do tich kriteriów",
-       "uctop": "(aktualnô)",
+       "uctop": "aktualnô",
        "month": "Òd miesąca (ë wczasni):",
        "year": "Òd rokù (ë wczasni):",
        "sp-contributions-newbies": "Pòkażë edicëjã blós nowich brëkòwników",
        "redirect-file": "Miono lopka",
        "specialpages": "Specjalné starnë",
        "tag-filter": "Filtr [[Special:Tags|znakòwników]]:",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Znakòwnik|Znakòwniczi}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Znakòwnik|Znakòwniczi}}]]: $2",
        "tag-mw-changed-redirect-target": "Pòzmiana célu przeczerowaniô",
        "tag-mw-blank": "Rëmniãcé całi zamkłoscë starnë",
        "tag-mw-rollback": "Copniãcé zjinaków",
index a6f49ec..588f391 100644 (file)
        "mycontris": "добродѣꙗниꙗ",
        "anoncontribs": "добродѣꙗниꙗ",
        "contribsub2": "{{GENDER:$3|польꙃєватєлꙗ|польꙃєватєлицѧ}} имѧ ⁖ $1 ⁖ ѥстъ ($2)",
-       "uctop": "(нꙑнѣщьн҄ь обраꙁъ)",
+       "uctop": "нꙑнѣщьн҄ь обраꙁъ",
        "month": "отъ мѣсѧца и давѣѥ :",
        "year": "отъ лѣта и давѣи :",
        "sp-contributions-blocklog": "ꙁаграждєниꙗ їсторїꙗ",
        "specialpages-group-other": "инꙑ нарочьнꙑ страницѧ",
        "specialpages-group-login": "въниждєниѥ и сътворѥниѥ мѣстъ",
        "tag-filter": "[[Special:Tags|мѣтъць]] сито :",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|мѣтъка|мѣтъцѣ|мѣтъци}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|мѣтъка|мѣтъцѣ|мѣтъци}}]]: $2",
        "tags-active-yes": "да",
        "tags-active-no": "нѣтъ",
        "tags-edit": "исправлѥниѥ",
index 122d457..4775444 100644 (file)
        "anoncontribs": "Хушни",
        "contribsub2": "{{GENDER:$3|$1}} валли ($2)",
        "contributions-userdoesnotexist": "\"$1\" аккаунтне туман.",
-       "uctop": "(хальхи)",
+       "uctop": "хальхи",
        "month": "Уйăхран (маларах та):",
        "year": "Çултан (маларах та):",
        "sp-contributions-blocklog": "Чарса лартнисен журналĕ",
        "specialpages-group-users": "Хутшăнакансем тата правасем",
        "specialpages-group-highuse": "Нумай усă куракан страницăсем",
        "tag-filter": "[[Special:Tags|Тегсен]] фильтрĕ:",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Тег|Тегсем}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Тег|Тегсем}}]]: $2",
        "tags-title": "Тегсем",
        "tags-tag": "Тегĕн ячĕ",
        "compare-submit": "Танлаштар",
index 2651196..5341e61 100644 (file)
        "contribsub2": "Gan {{GENDER:$3|$1}} ($2)",
        "contributions-userdoesnotexist": "Nid oes cyfrif o'r enw \"$1\" wedi ei gofrestru yma.",
        "nocontribs": "Heb ddod o hyd i newidiadau gyda'r meini prawf hyn.",
-       "uctop": "(cyfredol)",
+       "uctop": "cyfredol",
        "month": "Cyfraniadau hyd at fis (ac yn gynharach):",
        "year": "Cyfraniadau hyd at y flwyddyn (ac yn gynharach):",
        "sp-contributions-newbies": "Dangos cyfraniadau gan gyfrifon newydd yn unig",
        "tags": "Tagiau newidiadau",
        "tag-filter": "Hidl [[Special:Tags|tagiau]]:",
        "tag-filter-submit": "Hidlo",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Tag|Tagiau}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Tag|Tagiau}}]]: $2",
        "tags-title": "Tagiau",
        "tags-intro": "Dyma restr o'r tagiau y mae'r meddalwedd yn defnyddio i farcio golygiad, ynghyd â'r rhesymau dros eu defnyddio.",
        "tags-tag": "Enw'r tag",
        "dberr-again": "Oedwch am ychydig funudau cyn ceisio ail-lwytho.",
        "dberr-info": "(Ni ellir cysylltu â chronfa ddata: $1)",
        "dberr-info-hidden": "(Ni ellir cysylltu â'r gronfa ddata)",
-       "dberr-usegoogle": "Yn y cyfamser gallwch geisio chwilio gyda Google.",
-       "dberr-outofdate": "Sylwch y gall eu mynegeion o'n cynnwys fod ar ei hôl hi.",
-       "dberr-cachederror": "Dyma gopi o'r dudalen a ofynnwyd amdani, a dynnwyd o'r celc. Mae'n bosib nad y fersiwn diweddaraf yw'r copi hwn.",
        "htmlform-invalid-input": "Mae problemau gyda pheth o'ch mewnbwn",
        "htmlform-select-badoption": "Nid yw'r gwerth a bennwyd gennych yn ddewis dilys.",
        "htmlform-int-invalid": "Nid yw'r gwerth a bennwyd gennych yn gyfanrif.",
index f864b14..c831929 100644 (file)
        "tog-watchlisthideminor": "Skjul mindre ændringer i overvågningslisten",
        "tog-watchlisthideliu": "Skjul indloggede brugeres redigeringer i overvågningslisten",
        "tog-watchlistreloadautomatically": "Opdater overvågningslisten automatisk, når et filter ændres (kræver JavaScript)",
-       "tog-watchlistunwatchlinks": "Tilføj direkte henvisninger for at overvåge/fjerne overvågning til overvågningsposter (JavaScript krævet for at skifte funktionalitet)",
+       "tog-watchlistunwatchlinks": "Føj mærker ({{int:Watchlist-unwatch}}/{{int:Watchlist-unwatch-undo}}) til at slå overvågning til og fra for overvågede sider med ændringer (JavaScript kræves for at kunne slå til og fra)",
        "tog-watchlisthideanons": "Skjul anonyme brugeres redigeringer i overvågningslisten",
        "tog-watchlisthidepatrolled": "Skjul patruljerede ændringer i overvågningslisten",
        "tog-watchlisthidecategorization": "Skjul kategorisering af sider",
        "timezonelegend": "Tidszone:",
        "localtime": "Lokaltid:",
        "timezoneuseserverdefault": "Brug wiki'ens standardindstilling ($1)",
-       "timezoneuseoffset": "Anden (angiv forskel)",
+       "timezoneuseoffset": "Anden (angiv forskel forneden)",
+       "timezone-useoffset-placeholder": "Eksempelværdier: \"-07:00\" eller \"01:00\"",
        "servertime": "Serverens tid:",
        "guesstimezone": "Hent tidszone fra browseren",
        "timezoneregion-africa": "Afrika",
        "prefs-editor": "Redigeringsprogrammet",
        "prefs-preview": "Forhåndsvisning",
        "prefs-advancedrc": "Avancerede indstillinger",
-       "prefs-opt-out": "Vælg ikke at få forbedringer",
        "prefs-advancedrendering": "Avancerede indstillinger",
        "prefs-advancedsearchoptions": "Avancerede indstillinger",
        "prefs-advancedwatchlist": "Avancerede indstillinger",
        "prefs-displayrc": "Indstillinger for visning",
        "prefs-displaywatchlist": "Visningsmuligheder",
+       "prefs-changesrc": "Ændringer vist",
+       "prefs-changeswatchlist": "Ændringer vist",
+       "prefs-pageswatchlist": "Overvågede sider",
        "prefs-tokenwatchlist": "Mærke",
        "prefs-diffs": "Forskelle",
        "prefs-help-prefershttps": "Denne indstilling træder i kraft næste gang du logger på.",
        "rcfilters-filter-watchlist-watchednew-description": "Ændringer af overvågede sider du ikke har besøgt siden ændringerne blev gjort.",
        "rcfilters-filter-watchlist-notwatched-label": "Ikke på overvågningsliste",
        "rcfilters-filter-watchlist-notwatched-description": "Alt undtagen ændringer af sider på din overvågningsliste.",
+       "rcfilters-filtergroup-watchlistactivity": "Aktivitet for overvågningsliste",
        "rcfilters-filter-watchlistactivity-unseen-label": "Usete ændringer",
+       "rcfilters-filter-watchlistactivity-unseen-description": "Ændringer på sider du ikke har besøgt siden ændringerne blev fortaget.",
        "rcfilters-filter-watchlistactivity-seen-label": "Sete ændringer",
+       "rcfilters-filter-watchlistactivity-seen-description": "Ændringer på sider du har besøgt siden ændringerne blev fortaget.",
        "rcfilters-filtergroup-changetype": "Type ændring",
        "rcfilters-filter-pageedits-label": "Sideredigeringer",
        "rcfilters-filter-pageedits-description": "Ændringer af wikiindhold, diskussioner, kategoribeskrivelser...",
        "contribsub2": "For {{GENDER:$3|$1}} ($2)",
        "contributions-userdoesnotexist": "Brugerkontoen \"$1\" er ikke registreret.",
        "nocontribs": "Ingen ændringer er fundet som opfylder disse kriterier.",
-       "uctop": "(seneste)",
+       "uctop": "nuværende",
        "month": "Fra måned (og tidligere):",
        "year": "Fra år (og tidligere):",
        "date": "Fra dato (og tidligere):",
        "tags": "Tags til sideversioner",
        "tag-filter": "[[Special:Tags|Tag]]filter:",
        "tag-filter-submit": "Filtrér",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Tag|Tags}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Tag|Tags}}]]: $2",
        "tag-mw-new-redirect": "Ny omdirigering",
        "tag-mw-removed-redirect": "Fjernede omdirigering",
        "tag-mw-changed-redirect-target": "Omdigeringsmål ændret",
        "dberr-again": "Prøv at vente et par minutter og opdater så siden igen.",
        "dberr-info": "(Kan ikke tilgå databasen: $1)",
        "dberr-info-hidden": "(Kan ikke tilgå databasen)",
-       "dberr-usegoogle": "Du kan prøve at søge med Google imens.",
-       "dberr-outofdate": "Bemærk at deres indeks over vores sider kan være forældet.",
-       "dberr-cachederror": "Det følgende er en mellemlagret kopi af den forespurgte side. Den kan være forældet.",
        "htmlform-invalid-input": "Det er problemer med dine angivelser",
        "htmlform-select-badoption": "Den angivne værdi er ikke gyldigt valg.",
        "htmlform-int-invalid": "Den angivne værdi er ikke et heltal.",
        "limitreport-expensivefunctioncount": "Antal dyre parserfunktioner",
        "limitreport-unstrip-size-value": "$1/$2 {{PLURAL:$2|byte|bytes}}",
        "expandtemplates": "Udfold skabeloner",
-       "expand_templates_intro": "Denne specialside tager en tekst og udfolder alle benyttede skabeloner rekursivt.\nDen udfolder også understøttede parserfunktioner så som\n<code><nowiki>{{</nowiki>#language:…}}</code> og variabler så som \n<code><nowiki>{{</nowiki>CURRENTDAY}}</code>\nFaktisk udfolder den stort set alt i dobbelte tuborgklammer.",
+       "expand_templates_intro": "Denne specialside tager en wikitekst og udfolder alle benyttede skabeloner rekursivt.\nDen udfolder også understøttede parserfunktioner så som\n<code><nowiki>{{</nowiki>#language:…}}</code> og variabler så som \n<code><nowiki>{{</nowiki>CURRENTDAY}}</code>\nFaktisk udfolder den stort set alt i dobbelte tuborgklammer.",
        "expand_templates_title": "Sammenhængstitel, for {{FULLPAGENAME}} osv.:",
        "expand_templates_input": "Input wikitekst:",
        "expand_templates_output": "Resultat",
        "special-characters-title-endash": "tankestreg",
        "special-characters-title-emdash": "lang tankestreg",
        "special-characters-title-minus": "minustegn",
-       "mw-widgets-abandonedit": "Er du sikker på du ønsker at gå forlade editoren uden at gemme først?",
+       "mw-widgets-abandonedit": "Er du sikker på du ønsker at forlade editoren uden at gemme først?",
+       "mw-widgets-abandonedit-discard": "Kasser redigeringer",
        "mw-widgets-abandonedit-keep": "Fortsæt med at redigere",
        "mw-widgets-abandonedit-title": "Er du sikker?",
        "mw-widgets-dateinput-no-date": "Ingen dato valgt",
index 01f1a1f..5bd1fdc 100644 (file)
        "watchlistedit-raw-done": "Ihre Beobachtungsliste wurde gespeichert.",
        "watchlistedit-clear-explain": "Alle Seiten werden ausnahmslos von Ihrer Beobachtungsliste entfernt.",
        "dberr-again": "Warten Sie bitte einige Minuten und versuchen Sie dann, die Seite erneut zu laden.",
-       "dberr-usegoogle": "Sie könnten in der Zwischenzeit mit Google suchen.",
-       "dberr-outofdate": "Beachten Sie, dass der Suchindex unserer Inhalte bei Google veraltet sein kann.",
        "feedback-bugcheck": "Super! Bitte überprüfen Sie noch, ob es sich hierbei nicht um einen bereits [$1 bekannten Fehler] handelt.",
        "feedback-bugornote": "Sofern Sie detailliert ein technisches Problem beschreiben möchten, melden Sie bitte [$1 einen Fehler].\nAnderenfalls können Sie auch das untenstehende einfache Formular nutzen. Ihr Kommentar wird, zusammen mit Ihrem Benutzernamen und der Version des von Ihnen verwendeten Webbrowsers sowie Betriebssystems, auf der Seite „[$3 $2]“ hinzugefügt.",
        "feedback-cancel": "Abbrechen",
index 8aadcb8..992040c 100644 (file)
        "tog-watchlisthideminor": "Kleine Bearbeitungen in der Beobachtungsliste ausblenden",
        "tog-watchlisthideliu": "Bearbeitungen angemeldeter Benutzer in der Beobachtungsliste ausblenden",
        "tog-watchlistreloadautomatically": "Sofern ein Filter geändert wurde, die Beobachtungsliste automatisch neu laden (erfordert JavaScript)",
-       "tog-watchlistunwatchlinks": "Direkte Entbeobachtungs-/Beobachtungsmarkierungen ({{int:Watchlist-unwatch}}/{{int:Watchlist-unwatch-undo}}) zu beobachteten Seiten mit Änderungen hinzufügen (hierfür ist JavaScript erforderlich)",
+       "tog-watchlistunwatchlinks": "Direkte Markierungen zum Nichtbeobachten/Beobachten ({{int:Watchlist-unwatch}}/{{int:Watchlist-unwatch-undo}}) zu beobachteten Seiten mit Änderungen hinzufügen (erfordert JavaScript)",
        "tog-watchlisthideanons": "Bearbeitungen anonymer Benutzer (IP-Adressen) in der Beobachtungsliste ausblenden",
        "tog-watchlisthidepatrolled": "Kontrollierte Änderungen in der Beobachtungsliste ausblenden",
        "tog-watchlisthidecategorization": "Kategorisierungen von Seiten in der Beobachtungsliste ausblenden",
        "passwordtooshort": "Passwörter müssen mindestens {{PLURAL:$1|1 Zeichen|$1 Zeichen}} lang sein.",
        "passwordtoolong": "Passwörter können nicht länger als {{PLURAL:$1|ein|$1}} Zeichen sein.",
        "passwordtoopopular": "Häufig ausgewählte Passwörter können nicht verwendet werden. Bitte wähle ein Passwort aus, das schwieriger zu erraten ist.",
+       "passwordinlargeblacklist": "Das eingegebene Passwort befindet sich in einer Liste sehr häufig verwendeter Passwörter. Bitte suche dir ein individuelleres Passwort aus.",
        "password-name-match": "Dein Passwort muss sich von deinem Benutzernamen unterscheiden.",
        "password-login-forbidden": "Die Verwendung dieses Benutzernamens und Passwortes ist nicht erlaubt.",
        "mailmypassword": "Passwort zurücksetzen",
        "timezonelegend": "Zeitzone:",
        "localtime": "Ortszeit:",
        "timezoneuseserverdefault": "Standardzeit dieses Wikis nutzen ($1)",
-       "timezoneuseoffset": "Andere (Unterschied angeben)",
+       "timezoneuseoffset": "Andere (unten Unterschied angeben)",
+       "timezone-useoffset-placeholder": "Beispielwerte: „-07:00“ oder „01:00“",
        "servertime": "Aktuelle Zeit auf dem Server:",
        "guesstimezone": "Vom Browser übernehmen",
        "timezoneregion-africa": "Afrika",
        "prefs-editor": "Bearbeitungsprogramm",
        "prefs-preview": "Vorschau",
        "prefs-advancedrc": "Erweiterte Optionen",
-       "prefs-opt-out": "Von den Verbesserungen abmelden",
        "prefs-advancedrendering": "Erweiterte Optionen",
        "prefs-advancedsearchoptions": "Erweiterte Optionen",
        "prefs-advancedwatchlist": "Erweiterte Optionen",
        "prefs-displayrc": "Anzeigeoptionen",
        "prefs-displaywatchlist": "Anzeigeoptionen",
+       "prefs-changesrc": "Angezeigte Änderungen",
+       "prefs-changeswatchlist": "Angezeigte Änderungen",
+       "prefs-pageswatchlist": "Beobachtete Seiten",
        "prefs-tokenwatchlist": "Token",
        "prefs-diffs": "Versionsvergleich",
        "prefs-help-prefershttps": "Diese Einstellung wird bei deiner nächsten Anmeldung wirksam.",
        "rcfilters-watchlist-markseen-button": "Alle Änderungen als gesehen markieren",
        "rcfilters-watchlist-edit-watchlist-button": "Deine Liste der beobachteten Seiten bearbeiten",
        "rcfilters-watchlist-showupdated": "Änderungen an Seiten, die du seit ihrem Auftreten nicht besucht hast, sind <strong>fett</strong> markiert.",
-       "rcfilters-preference-label": "Die neue Version der Letzten Änderungen ausblenden",
-       "rcfilters-preference-help": "Macht die Neugestaltung der Oberfläche aus dem Jahr 2017 und alle seitdem hinzugefügten Werkzeuge wieder rückgängig.",
-       "rcfilters-watchlist-preference-label": "Die verbesserte Version der Beobachtungsliste deaktivieren",
-       "rcfilters-watchlist-preference-help": "Setzt die Neugestaltung der Oberfläche aus dem Jahr 2017 und all die Werkzeuge zurück, die seitdem hinzugefügt wurden.",
+       "rcfilters-preference-label": "Die Oberfläche ohne JavaScript verwenden",
+       "rcfilters-preference-help": "Lädt die „Letzten Änderungen“ ohne Filter oder Hervorhebungsfunktion.",
+       "rcfilters-watchlist-preference-label": "Die Oberfläche ohne JavaScript verwenden",
+       "rcfilters-watchlist-preference-help": "Lädt die Beobachtungsliste ohne Filter oder Hervorhebungsfunktion.",
        "rcfilters-filter-showlinkedfrom-label": "Änderungen auf Seiten anzeigen, die verlinkt sind von",
        "rcfilters-filter-showlinkedfrom-option-label": "<strong>Seiten</strong>, die <strong>von</strong> der ausgewählten Seite <strong>verlinkt</strong> sind",
        "rcfilters-filter-showlinkedto-label": "Änderungen auf Seiten anzeigen, die verlinken auf",
        "contribsub2": "Von {{GENDER:$3|$1}} ($2)",
        "contributions-userdoesnotexist": "Das Benutzerkonto „$1“ ist nicht vorhanden.",
        "nocontribs": "Es wurden keine Benutzerbeiträge mit diesen Kriterien gefunden.",
-       "uctop": "(aktuell)",
+       "uctop": "aktuell",
        "month": "und Monat:",
        "year": "bis Jahr:",
        "date": "Von Datum (und früher):",
        "move-watch": "Quell- und Zielseite beobachten",
        "movepagebtn": "Seite verschieben",
        "pagemovedsub": "Verschiebung erfolgreich",
+       "cannotmove": "Die Seite konnte nicht verschoben werden, aus {{PLURAL:$1|dem folgenden Grund|den folgenden Gründen}}:",
        "movepage-moved": "'''Die Seite „$1“ wurde nach „$2“ verschoben.'''",
        "movepage-moved-redirect": "Eine Weiterleitung wurde erstellt.",
        "movepage-moved-noredirect": "Die Erstellung einer Weiterleitung wurde unterdrückt.",
        "tags": "Änderungsmarkierungen",
        "tag-filter": "[[Special:Tags|Markierungs]]-Filter:",
        "tag-filter-submit": "Filter",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Markierung|Markierungen}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Markierung|Markierungen}}]]: $2",
        "tag-mw-contentmodelchange": "Änderung des Inhaltsmodells",
        "tag-mw-contentmodelchange-description": "Bearbeitungen, die [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:ChangeContentModel das Inhaltsmodell einer Seite ändern]",
        "tag-mw-new-redirect": "Neue Weiterleitung",
        "dberr-again": "Warte bitte einige Minuten und versuche dann, die Seite erneut zu laden.",
        "dberr-info": "(Auf die Datenbank konnte nicht zugegriffen werden: $1)",
        "dberr-info-hidden": "(Auf die Datenbank konnte nicht zugegriffen werden)",
-       "dberr-usegoogle": "Du könntest in der Zwischenzeit mit Google suchen.",
-       "dberr-outofdate": "Beachte, dass der Suchindex unserer Inhalte bei Google veraltet sein kann.",
-       "dberr-cachederror": "Folgendes ist eine Kopie des Caches der angeforderten Seite und kann veraltet sein.",
        "htmlform-invalid-input": "Mit einer oder mehreren Eingabe(n) gibt es Probleme.",
        "htmlform-select-badoption": "Der angegebene Wert ist keine gültige Option.",
        "htmlform-int-invalid": "Der angegebene Wert ist keine Ganzzahl.",
        "logentry-block-reblock": "$1 {{GENDER:$2|änderte}} die Sperreinstellungen für {{GENDER:$4|$3}} mit einer Sperrdauer von $5 $6",
        "logentry-partialblock-block": "$1 {{GENDER:$2|sperrte}} {{GENDER:$4|$3}} für das Bearbeiten {{PLURAL:$8|von|der Seiten}} $7 mit einer Ablaufzeit von $5 $6",
        "logentry-partialblock-reblock": "$1 {{GENDER:$2|änderte}} die Sperreinstellungen für {{GENDER:$4|$3}} zum Verhindern von Bearbeitungen auf {{PLURAL:$8||den Seiten}} $7 mit einer Ablaufzeit von $5 $6",
-       "logentry-non-editing-block-block": "$1 {{GENDER:$2|sperrte}} {{GENDER:$4|$3}} für Nicht-Bearbeitungsaktionen mit einer Ablaufzeit von $5 $6",
-       "logentry-non-editing-block-reblock": "$1 {{GENDER:$2|änderte}} die Sperreinstellungen für {{GENDER:$4|$3}} für Nicht-Bearbeitungsaktionen mit einer Ablaufzeit von $5 $6",
+       "logentry-non-editing-block-block": "$1 {{GENDER:$2|sperrte}} {{GENDER:$4|$3}} für angegebene Nicht-Bearbeitungsaktionen mit einer Ablaufzeit von $5 $6",
+       "logentry-non-editing-block-reblock": "$1 {{GENDER:$2|änderte}} die Sperreinstellungen für {{GENDER:$4|$3}} für angegebene Nicht-Bearbeitungsaktionen mit einer Ablaufzeit von $5 $6",
        "logentry-suppress-block": "$1 {{GENDER:$2|sperrte}} {{GENDER:$4|$3}} mit einer Sperrdauer von $5 $6",
        "logentry-suppress-reblock": "$1 {{GENDER:$2|änderte}} die Sperreinstellungen für {{GENDER:$4|$3}} mit einer Sperrdauer von $5 $6",
        "logentry-import-upload": "$1 {{GENDER:$2|importierte}} $3 durch das Hochladen einer Datei",
        "passwordpolicies-policy-passwordcannotmatchblacklist": "Ein Passwort kann nicht mit speziellen schwarzgelisteten Passwörtern übereinstimmen",
        "passwordpolicies-policy-maximalpasswordlength": "Ein Passwort muss weniger als {{PLURAL:$1|ein|$1}} Zeichen lang sein",
        "passwordpolicies-policy-passwordcannotbepopular": "Ein Passwort kann nicht {{PLURAL:$1|das beliebteste Passwort|in der Liste der $1 beliebtesten Passwörter}} sein",
+       "passwordpolicies-policy-passwordnotinlargeblacklist": "Das Passwort kann nicht in der Liste der 100.000 am häufigsten verwendeten Passwörter sein.",
        "easydeflate-invaliddeflate": "Der angegebene Inhalt ist nicht ordnungsgemäß komprimiert",
        "unprotected-js": "Aus Sicherheitsgründen kann JavaScript-Code nicht mehr von ungeschützten Seiten geladen werden. Erstelle die JavaScript-Seite bitte ausschließlich im Namensraum „MediaWiki“ oder als Benutzerunterseite."
 }
index 093a1ff..bec8e8c 100644 (file)
@@ -31,7 +31,8 @@
                        "Dılmıc",
                        "Archaeodontosaurus",
                        "Fitoschido",
-                       "ديفيد"
+                       "ديفيد",
+                       "Orbot707"
                ]
        },
        "tog-underline": "Bınê gırey de xete bance:",
        "category_header": "Perrê kategoriya \"$1\"'i",
        "subcategories": "Kategoriyê bınêni",
        "category-media-header": "Dosye yê ke kategoriya \"$1\" dı",
-       "category-empty": "''Ena kategori dı hewna qet nuştey ya zi medya çıni yê.''",
+       "category-empty": "<em>Ena kategoriye de hewna qet nuştey ya zi medya çıniyê.</em>",
        "hidden-categories": "{{PLURAL:$1|Kategoriya nımıte|Kategoriyê nımıtey}}",
        "hidden-category-category": "Kategoriyê nımıtey",
        "category-subcat-count": "{{PLURAL:$2|Na kategoriye de tenya na bınkategoriye esta.|Na kategoriye de, $2 ra pêro piya, {{PLURAL:$1|bınkategoriye esta|$1 bınkategoriy estê}}.}}",
        "mycustomjsprotected": "Desturê şıma çıniyo ke na pela JavaScripti bıvurnê.",
        "myprivateinfoprotected": "Ğısusi malumatana ğo timar kerdışire icazeta şıma çıniya.",
        "mypreferencesprotected": "Terciha timar kerdışire icazeta şıam çıniya.",
-       "ns-specialprotected": "Perrê xısusiy nêvırniyenê.",
+       "ns-specialprotected": "Pelê xısusiyi nêşenê bıvurriyê.",
        "titleprotected": "No sername terefê [[User:$1|$1]] ra, afernayene ra şevekiyayo.\nSebebê xo <em>$2</em> dero.",
        "filereadonlyerror": "Dosyay vurnayışê \"$1\" nê abêno lakin depoy dosya da \"$2\" mod dê  salt wendi de yo.\n\nXızmetkarê  kılit kerdışi wa bewniro enay wa çım ra ravyarn o: \"$3\".",
        "invalidtitle-knownnamespace": "Canemey \"$2\" u metnê \"$3\" xırabo",
        "subject-preview": "Verqaytê mewzu:",
        "previewerrortext": "Verasayışê vırnayışê şıma de yew xeta veciya miyan.",
        "blockedtitle": "Karber blokekerdeo",
-       "blockedtext": "<strong>No nameyê karberi ya zi na adresa IP blokekerdeya.</strong>\n\nVıraştoğê blokeyi: $1\nSebebê blokeyi: <em>$2</em>.\n\n* Sıftekerdena blokeyi: $8\n* Qediyayışê blokeyi: $6\n* Blokebiyaye: $7\n\nŞıma şenê  $1 de ya zi  yewna [[{{MediaWiki:Grouppage-sysop}}|administrator]]i de irtıbat kewê ke na mesela sero werênê, cemaet vırazê. \nŞıma nêşenê xısusiyetê \"karberi rê e-posta bırışe\" bıgureynê/bıxebetnê heta ke [[Special:Preferences|Tercihanê hesabi]] de yew e-posteyo ke vêreno, beli bi û şıma gureynayışê cı ra mehrum nêbiyê.\nIP adresa şımaya nıkayêne $3o û numreyê bloki #$5.\nŞıma rê zehmet, eke kewnê ra dıme, teferruatanê corênan not kerên.",
+       "blockedtext": "<strong>No nameyê karberi ya zi na adresa IP blokekerdeya.</strong>\n\nVıraştoğê blokeyi: $1\nSebebê blokeyi: <em>$2</em>.\n\n* Başliya blokeyi: $8\n* Qediyayışê blokeyi: $6\n* Blokebiyaye: $7\n\nŞıma şenê  $1 de ya zi  yewna [[{{MediaWiki:Grouppage-sysop}}|administrator]]i de irtıbat kewê ke na mesela sero werênê, cemaet vırazê. \nŞıma nêşenê xısusiyetê \"karberi rê e-posta bırışe\" bıgureynê/bıxebetnê heta ke [[Special:Preferences|Tercihanê hesabi]] de yew e-posteyo ke vêreno, beli bi û şıma gureynayışê cı ra mehrum nêbiyê.\nIP adresa şımaya nıkayêne $3o û numreyê bloki #$5.\nŞıma rê zehmet, eke kewnê ra dıme, teferruatanê corênan not kerên.",
        "autoblockedtext": "IP adresê şıma otomotikmen kerda kılit, çıkı $1 verniya nê hesabi grota.\nSebebê cı zi:\n\n:''$2''\n\n* Dest pê kerdışê verni grotışi: $8\n* Qedyayişê verni grotışi: $6\n* Qayile ke bloqe bıbo: $7\n\nŞıma qayile qey weri kewtışê na mesela,  $1 ya na [[{{MediaWiki:Grouppage-sysop}}|serkaran ra]] yewi ra şenê irtibat kewê.\n\nNot, [[Special:Preferences|Tercihê karberi]] eke şıma yew e-postayo raşt nênuşt se şıma nêşenê na xususiyet ra \"karber rê e-posta bırışê\" istifade bıkeri.\n\nIP adresiya şıma yo nıkayên $3 u ID şıma yo ke musade nêdaye #$5. Eke şıma yew tehqiqat vırazeni malumatê corênan xo vira mekerê.",
        "blockednoreason": "sebeb nidaniyo",
        "whitelistedittext": "Qandê vurnayış kerdışi rê $1.",
        "recentchangeslinked-feed": "Vırnayışê bestiyaey",
        "recentchangeslinked-toolbox": "Vırnayışê bestiyaey",
        "recentchangeslinked-title": "Heqa \"$1\" de vurnayışi",
-       "recentchangeslinked-summary": "Ena liste, perra spesifike rê (ya zi karberanê kategoriya spesifike rê) perranê gırêdayoğan de lista de vırnayışê peyênana.\n[[Special:Watchlist|Lista şımaya seyrkedışi de]] perri be nuşteyo <strong>qalınd</strong> bêli kerdê.",
+       "recentchangeslinked-summary": "Ena liste, perra spesifike rê (ya zi karberanê {{ns:category}} spesifike rê) perranê gırêdayoğan de lista de vırnayışê peyênana.\n[[Special:Watchlist|Lista şımaya seyrkedışi de]] perri be nuşteyo <strong>qalın</strong> de bêli kerdê.",
        "recentchangeslinked-page": "Namey perrer:",
        "recentchangeslinked-to": "Heruna perra kı yena dayene, vurnayışanê perranê ke daye ra gırêdayiyê inan bımotne",
        "recentchanges-page-added-to-category": "[[:$1]] kerd kategoriye miyan",
        "filehist-filesize": "Ebadê dosya",
        "filehist-comment": "Mışewre",
        "imagelinks": "Gurenayışê dosya",
-       "linkstoimage": "Ena {{PLURAL:$1|pela|$1 pela}} gıreye ena dosya:",
-       "linkstoimage-more": "$1 ra ziyed {{PLURAL:$1|pel|pel}} re gırey dano.\nlisteya ke ha ver a têna na {{PLURAL:$1|dosyaya ewwili|dosyaya $1 ewwili}} mocnena.\n[[Special:WhatLinksHere/$2|pêroyê liste]] mevcud o.",
-       "nolinkstoimage": "Ena dosya rê gırê dayen ju per çıni ya.",
+       "linkstoimage": "Ena {{PLURAL:$1|pela kariya |$1 pelê kariyê}} gıreye ena dosya:",
+       "linkstoimage-more": "$1 ra ziyed {{PLURAL:$1|pel karneno |peli karnenê}} na dosya .\nlisteya ke ha ver a têna na {{PLURAL:$1|dosyaya ewwili|dosyaya $1 ewwili}} mocnena.\n[[Special:WhatLinksHere/$2| liste pêro ]] mevcud o.",
+       "nolinkstoimage": "Qet yew pele ena dosya nikarneno.",
        "morelinkstoimage": "[[Special:WhatLinksHere/$1|Linkanê zafyerî]] ena pele ra link biyo bivîne.",
        "linkstoimage-redirect": "$1 (Dosya raçarnayış) $2",
        "duplicatesoffile": "a {{PLURAL:$1|dosya|$1 dosya}}, kopyayê na dosyayi ([[Special:FileDuplicateSearch/$2|teferruati]]):",
        "mimetype": "Babetê NIME",
        "download": "Bıselagnê",
        "unwatchedpages": "Pelanê seyrnibiyeyî",
-       "listredirects": "Listeya Hetenayışan",
+       "listredirects": "Lista serşıkıtışan",
        "listduplicatedfiles": "Lista dosyeyanê ke kopyaya cı vêniyena",
        "listduplicatedfiles-entry": "[[$3|{{PLURAL:$2|kapyay|$2 kopyey}}]] dosya da [[:File:$1|$1]]'i est a",
-       "unusedtemplates": "Şablonê kı nêgurweyênê",
+       "unusedtemplates": "Şablonê ke nêguriyenê",
        "unusedtemplatestext": "no pel, {{ns:template}} pelê ke pelê binan de nêaseni, ninan keno.",
        "unusedtemplateswlh": "linkanê binî",
        "randompage": "Perra raştameyiye",
        "statistics-users": "Karberê qeydıni",
        "statistics-users-active": "Karberê aktifi",
        "statistics-users-active-desc": "{{PLURAL:$1|roco peyin de|$1 roco peyin de}} karber ê ke kar kerdê.",
-       "pageswithprop": "Perrê kı hendê ju perrer rê",
+       "pageswithprop": "Peli be yew xısusiyetê pele",
        "pageswithprop-legend": "Peli be yew xısusiyetê pele",
        "pageswithprop-text": "Na per pimanen pera kena liste.",
        "pageswithprop-prop": "Nameyo xısusi:",
        "pageswithprop-submit": "Şo",
        "pageswithprop-prophidden-long": "Erca metinda derger nımneya ($1)",
        "pageswithprop-prophidden-binary": "Erca dıdıyına ($1) nımneyé",
-       "doubleredirects": "Hetenayışê dıleti",
+       "doubleredirects": "Serşıkıtışê dıleti",
        "doubleredirectstext": "no pel pelê ray motışani liste keno.\ngıreyê her satıri de gıreyi; raş motışê yewın u dıyıni esto.\n<del>serê ey nuşteyi</del> safi biye.",
        "double-redirect-fixed-move": "[[$1]] kırışiye.\nNa otomatikmen biye rocaniye û nıka [[$2]] ser şıknena.",
        "double-redirect-fixed-maintenance": "Serkışışteno dıletê [[$1]] ra  pela da [[$2]] vuriyeno.",
        "brokenredirectstext": "Redireksiyonê ey ki pelanê hama çiniyeno ra link dano:",
        "brokenredirects-edit": "bıvırne",
        "brokenredirects-delete": "bestere",
-       "withoutinterwiki": "Perrê ke zıwananê binan rê gıreyê cı çıni yo",
+       "withoutinterwiki": "Pelê ke zıwananê binan rê gıreyê cı çıniyo",
        "withoutinterwiki-summary": "Enê pelî ke versiyonê ziwanî binî ra link nidano.",
        "withoutinterwiki-legend": "Verole",
        "withoutinterwiki-submit": "Bımocne",
-       "fewestrevisions": "Perrê kı tewr tayn timaryayê",
+       "fewestrevisions": "Pelê be senık çımraviyarnayışi",
        "nbytes": "$1 {{PLURAL:$1|bayt|bayti}}",
        "ncategories": "$1 {{PLURAL:$1|Kategori|Kategoriy}}",
        "ninterwikis": "$1 {{PLURAL:$1|interwiki|interwikiy}}",
        "nimagelinks": "$1 {{PLURAL:$1|pele de|pelan de}} gureyeno",
        "ntransclusions": "$1 {{PLURAL:$1|pele de|pelan de}} gureyeno",
        "specialpage-empty": "Seba na rapore netice çıniyo.",
-       "lonelypages": "Perrê kı cı rê gre çıni yo",
+       "lonelypages": "Pelê seyi",
        "lonelypagestext": "Ena pelî link nibiyê ya zi pelanê binî {{SITENAME}} de transclude biy.",
        "uncategorizedpages": "Pelê ke kategorize nêbiyê",
        "uncategorizedcategories": "Kategoriyê ke kategorize nêbiyê",
        "uncategorizedimages": "Dosyeyê kategorinêbiyay.",
        "uncategorizedtemplates": "Şablonê ke bêkategoriyê",
-       "unusedcategories": "Kategoriyê ke nêguriyay",
+       "unusedcategories": "Kategoriyê ke nêgureniyê",
        "unusedimages": "Dosyeyê ke nêguriyenê",
        "wantedcategories": "Kategoriyê ke waziyayê",
        "wantedpages": "Pelê ke waziyayê",
        "wantedpages-badtitle": "sernuşte meqbul niyo: $1",
-       "wantedfiles": "Dosyeyê waştey",
+       "wantedfiles": "Dosyeyê cıgeyriyayeyi",
        "wantedfiletext-cat": "Dosyaya cêrên karvıstedeya lakin çınya. Mewcud dosyayan de xeriba miyan de liste bena. Xırabiya wınisin dana <del>ateber</del>. Zewbi zi, şırê pela da dosyeyê ke çınyaya [[:$1]].",
        "wantedfiletext-nocat": "Dosyeyê cêrêni estê lekin karnêvıstê. Dosyeyê xeribi liste benê. bo babeta dano <del>ateber</del>",
        "wantedtemplates": "Şablonê ke waziyenê",
        "mostimages": "Dosyayan ke tewr zaf link estê.",
        "mostinterwikis": "Pelan ke tewr zaf interwiki biyê.",
        "mostrevisions": "Pelan ke tewr zaf revizyonî biyê.",
-       "prefixindex": "Verbenda pelli heme",
+       "prefixindex": "Pêro peli be verbend",
        "prefixindex-namespace": "Peleyê Veroleyıni ($1 cay nami)",
        "prefixindex-submit": "Bımocne",
        "prefixindex-strip": "Listeya réz bıyayışi",
        "shortpages": "Pelê kılmi",
        "longpages": "Pelê dergi",
-       "deadendpages": "Perrê kı perranê binan rê grey c çıni yo",
+       "deadendpages": "Pelê nêgıredayeyi",
        "deadendpagestext": "Ena pelan ke {{SITENAME}} de zerrî ey de link çini yo.",
        "protectedpages": "Pellê kı pawıyayeyè",
        "protectedpages-indef": "têna pawıteyê bêmuddeti",
        "newpages": "Perrê newey",
        "newpages-submit": "Bımocne",
        "newpages-username": "Nameyê karberi:",
-       "ancientpages": "Tewr pelê kıhani",
+       "ancientpages": "Pelê tewr kıhani",
        "move": "Bıkırışe",
        "movethispage": "Ena pele bıkırışe",
        "unusedimagestext": "Enê dosyey estê, feqet zerrey yew pele de wedardey niyê.\nXo vira mekerê ke, sıteyê webiê bini şenê direkt ebe URLi yew dosya ra gırê bê, u wına şenê verba gurênayışo feal de tiya hewna lista bê.",
        "prevpage": "Pela verêne ($1)",
        "allpagesfrom": "Herfa kı pa liste bo:",
        "allpagesto": "Perranê ke ena herfe qediyenê bımotne:",
-       "allarticles": "Peri pêro",
+       "allarticles": "Peli pêro",
        "allinnamespace": "Peli pênro ( $1 cayênameyî)",
        "allpagessubmit": "Şo",
        "allpagesprefix": "herfê ke şıma tiya de nuşti, pê ney herfan pelê ke destpêkenê liste ker:",
        "contribsub2": "Qandê {{GENDER:$3|$1}} ($2)",
        "contributions-userdoesnotexist": "Hesabê karberi \"$1\" qeyd nêbiyo.",
        "nocontribs": "Ena kriteriya de vurnayîş çini yo.",
-       "uctop": "(weziyet)",
+       "uctop": "weziyet",
        "month": "Aşme:",
        "year": "Serre:",
        "sp-contributions-newbies": "Tenya iştırakanê karberanê newan bımotne",
        "fileduplicatesearch-result-1": "Dosyayê ''$1î'' de hem-kopya çini yo.",
        "fileduplicatesearch-result-n": "Dosyayê ''$1î'' de {{PLURAL:$2|1 hem-kopya|$2 hem-kopyayî'}} esto.",
        "fileduplicatesearch-noresults": "Ebe namey \"$1\" ra dosya nêdiyayê.",
-       "specialpages": "Perrê xısusiy",
+       "specialpages": "Pelê xısusiyi",
        "specialpages-note-top": "Kıtabek",
        "specialpages-note-restricted": "* Pelê xasê normali.\n* <span class=\"mw-specialpagerestricted\">Pelê xasê nımıtey.</span>",
-       "specialpages-group-maintenance": "Raporê pawıtışi",
+       "specialpages-group-maintenance": "Rapora pawıtışi",
        "specialpages-group-other": "Pelê xısusiyê bini",
-       "specialpages-group-login": "Dekew / hesab vıraz",
+       "specialpages-group-login": "Cı kewe / hesab vıraze",
        "specialpages-group-changes": "Vırnayışê peyêni u qeydi",
        "specialpages-group-media": "Raporê medya û barkerdışi",
        "specialpages-group-users": "Karberi u heqê inan",
        "specialpages-group-highuse": "Peleyê ke vêşi karênê",
-       "specialpages-group-pages": "Listeyê pelan",
+       "specialpages-group-pages": "Listên pelan",
        "specialpages-group-pagetools": "Haletê pelan",
        "specialpages-group-wiki": "Melumat u haceti",
        "specialpages-group-redirects": "Pelê serşıkıtışiyê xısusiyi",
        "tags": "Ravêrde vurnayışanê etiketa",
        "tag-filter": "Parzûnê [[Special:Tags|etiketi]]:",
        "tag-filter-submit": "Avrêc",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Etiket|Etiketi}}]]: $2)",
-       "tags-title": "Etiketan",
-       "tags-intro": "Ena per şena ju vurnayışa etiketinu maney nustekeni liste  kena",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Etiket|Etiketi}}]]: $2",
+       "tags-title": "Etiketi",
+       "tags-intro": "Ena pele etiketê ke be vurnayışê nuşiyayışi ra nişan biyê û maneyê inan lista kena.",
        "tags-tag": "Nameyê etiketi",
-       "tags-display-header": "Listeyê vurnayîşî de esayîş",
+       "tags-display-header": "Lista vurnayışi de asayış",
        "tags-description-header": "Tam arezekerdışê maneyê cı",
        "tags-source-header": "Çıme",
        "tags-active-header": "Activ o?",
-       "tags-hitcount-header": "Vurnayîşî ke etiket biyê",
+       "tags-hitcount-header": "Vurnayışê ke etiket biyê",
        "tags-actions-header": "Kerdışi",
        "tags-active-yes": "Eya",
        "tags-active-no": "Nê",
        "dberr-again": "Dı-rê deqiqeyi vınde û heni bar ke.",
        "dberr-info": "(Erzmelumati ra xızmetkari nêreseno: $1)",
        "dberr-info-hidden": "(Ardendé erz malumatiya gredayışo nébeno)",
-       "dberr-usegoogle": "Ti eşkeno hem zi ser Google de bigêre.",
-       "dberr-outofdate": "Ekê raten da ma deyê belki zi newen niyo qandê coy diqet kerê.",
-       "dberr-cachederror": "Pel ke ti wazeno yew kopyayê cacheyî ay esto, ay belki rocaniyeyo.",
        "htmlform-invalid-input": "Inputê ti de tayê ğeletî estê",
        "htmlform-select-badoption": "Ena değer ke ti spesife kerd yew opsiyonê raştî ni yo.",
        "htmlform-int-invalid": "Ena değer ke ti spesife kerd yew reqem ni yo.",
index 163e2e3..340efd3 100644 (file)
        "contribsub2": "Za {{GENDER:$3|$1}} ($2)",
        "contributions-userdoesnotexist": "Wužywarske konto \"$1\" njejo zregistrowane.",
        "nocontribs": "Za toś te kriterije njejsu žedne změny se namakali.",
-       "uctop": "(aktualny)",
+       "uctop": "aktualny",
        "month": "wót mjaseca (a jěsnjej):",
        "year": "wót lěta (a jěsnjej):",
        "sp-contributions-newbies": "Pśinoski jano za nowych wužywarjow pokazaś",
        "tags": "Płaśiwe toflicki změnow",
        "tag-filter": "Filter [[Special:Tags|toflickow]]:",
        "tag-filter-submit": "Filter",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Wobznamjenje|Wobznamjeni|Wobznamjenja}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Wobznamjenje|Wobznamjeni|Wobznamjenja}}]]: $2",
        "tags-title": "Toflicki",
        "tags-intro": "Toś ten bok nalicyjo toflicki, z kótarymiž softwara móžo změnu markěrowaś a jich wóznam.",
        "tags-tag": "Mě toflicki",
        "dberr-again": "Pócakaj někotare minuty a aktualizěruj bok.",
        "dberr-info": "(Njejo móžno ze serwerom datoweje banki zwězaś: $1)",
        "dberr-info-hidden": "(Njejo móžno ze serwerom datoweje banki zwězaś)",
-       "dberr-usegoogle": "Móžoš mjaztym pśez Google pytaś.",
-       "dberr-outofdate": "Źiwaj na to, až jich indekse našogo wopśimjeśa by mógli zestarjone byś.",
-       "dberr-cachederror": "Slědujuca jo pufrowana kopija pominanego boka a by mógła zestarjona byś.",
        "htmlform-invalid-input": "Su někotare problemy z twójim zapodaśim",
        "htmlform-select-badoption": "Gódnota, kótaruž sy pódał, njejo płaśiwa opcija.",
        "htmlform-int-invalid": "Gódnota, kótaruž sy pódał, njejo ceła licba.",
index 8181f93..62bf2d3 100644 (file)
        "contributions-title": "Pinotoluod momomoguno montok $1",
        "mycontris": "Pinotoluodku",
        "contribsub2": "Montok $1 ($2)",
-       "uctop": "(id kaas)",
+       "uctop": "id kaas",
        "month": "Mantad tulan (om di tulaan po):",
        "year": "Mantad toun (om di touun po):",
        "sp-contributions-newbies": "Pokitono pinotoluod di takaun kawawagu nopo.",
index ecfa68d..d22d6d2 100644 (file)
        "contributions-title": "प्रयोगकर्ता $1 का योगदानअन",
        "mycontris": "मेरो योगदानहरू",
        "anoncontribs": "योगदान",
-       "uctop": "(अइलोऽ)",
+       "uctop": "अइलोऽ",
        "month": "महिना बठे (लै पैल्ली):",
        "year": "वर्ष बठे( लौ पैल्ली):",
        "sp-contributions-newbies": "नौला खाताअनाः योगदानअन लाई मात्तरी धेकाऽ",
        "specialpages-group-changes": "अल्लैका परिवर्तन लगहरू",
        "tags": "मान्य परिवर्तन ट्यागहरू",
        "tag-filter": "[[Special:Tags|पुछड]] छानिन्या",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|ट्याग|ट्यागहरू}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|ट्याग|ट्यागअन}}]]: $2",
        "tags-active-no": "नाइँ",
        "tags-hitcount": "$1 {{PLURAL:$1|परिवर्तन|परिवर्तनहरू}}",
        "tags-create-no-name": "तमीले ट्याग नाम निर्दिष्ट गद्दु पड्ड्या हुन्छ ।",
        "compare-invalid-title": "तमीले खुलायाको शिर्षक अमान्य छ ।",
        "compare-title-not-exists": "तमीले खुलायाको शिर्षक उपलब्ध छैन ।",
        "compare-revision-not-exists": "तमीले खुलायाको संस्करण उपलब्ध छैन ।",
-       "dberr-usegoogle": "तमी अहिले गुगलबठे खोज्न्या प्रयास गद्द सक्न्याहौ ।",
        "htmlform-invalid-input": "तमले प्रविष्ठ गर्याका कुनै सामग्रीहरू ठिक नाइथिन्",
        "htmlform-select-badoption": "तमीले खुलायाको मान मान्य विकल्प हैन ।",
        "htmlform-float-invalid": "तमीले जनायाको मान कुनै संख्या हैन ।",
index b26f6dc..b3089ac 100644 (file)
        "contributions-title": "Lavōr ed $1",
        "mycontris": "I mē lavōr",
        "contribsub2": "Per {{GENDER:$3|$1}}($2)",
-       "uctop": "(adès)",
+       "uctop": "adès",
        "month": "Dal mèiş (e quî préma):",
        "year": "Da l'ân (e quî préma):",
        "sp-contributions-newbies": "Fà vèder sōl i lavōr fât da j utèint nōv.",
index a5c0829..25545a4 100644 (file)
@@ -56,7 +56,8 @@
                        "Kostas20142",
                        "Nikosgranturismogt",
                        "KATRINE1992",
-                       "Fitoschido"
+                       "Fitoschido",
+                       "KATRINE1993"
                ]
        },
        "tog-underline": "Υπογράμμιση συνδέσμων:",
        "passwordtooshort": "Οι κωδικοί πρέπει να περιέχουν τουλάχιστον {{PLURAL:$1|1 χαρακτήρα|$1 χαρακτήρες}}.",
        "passwordtoolong": "Οι κωδικοί πρόσβασης δεν μπορούν να υπερβαίνουν {{PLURAL:$1|τον 1 χαρακτήρα|τους $1 χαρακτήρες}}.",
        "passwordtoopopular": "Κοινότυπα συνθηματικά που τείνουν να επιλέγονται συχνά από τους χρήστες δεν μπορούν να χρησιμοποιηθούν. Παρακαλούμε επιλέξτε ένα συνθηματικό που είναι πιο δύσκολο να μαντεφθεί.",
+       "passwordinlargeblacklist": "Ο κωδικός πρόσβασης που εισήχθηκε είναι σε μια λίστα πολύ κοινών κωδικών πρόσβασης που χρησιμοποιούνται. Παρακαλώ διαλέξτε έναν πιο συνηθισμένο κωδικό πρόσβασης.",
        "password-name-match": "Ο κωδικός σου θα πρέπει να είναι διαφορετικός από το όνομα χρήστη σου.",
        "password-login-forbidden": "Η χρήση αυτού του ονόματος χρήστη και συνθηματικού έχουν  απαγορευτεί.",
        "mailmypassword": "Επαναφορά κωδικού",
        "localtime": "Τοπική ώρα:",
        "timezoneuseserverdefault": "Χρήση της προεπιλογής του wiki ($1)",
        "timezoneuseoffset": "Ἀλλη (καθορισμός της διαφοράς)",
+       "timezone-useoffset-placeholder": "Τιμές ως παράδειγμα: \"-07:00\" or \"01:00\"",
        "servertime": "Η ώρα του διακομιστή:",
        "guesstimezone": "Συμπλήρωση μέσω του browser",
        "timezoneregion-africa": "Αφρική",
        "prefs-editor": "Συντάκτης",
        "prefs-preview": "Προεπισκόπηση",
        "prefs-advancedrc": "Προηγμένες επιλογές",
-       "prefs-opt-out": "Απόρριψη βελτιώσεων",
        "prefs-advancedrendering": "Προηγμένες επιλογές",
        "prefs-advancedsearchoptions": "Προηγμένες επιλογές",
        "prefs-advancedwatchlist": "Προηγμένες επιλογές",
        "rcfilters-watchlist-showupdated": "Σελίδες που έχουν υποστεί αλλαγές από την τελευταία φορά που τις επισκεφθήκατε εμφανίζονται με '''έντονους χαρακτήρες'''.",
        "rcfilters-preference-label": "Απόκρυψη της βελτιωμένης έκδοσης των Πρόσφατων Αλλαγών",
        "rcfilters-preference-help": "Αναστέλλει τον επανασχεδιασμό διεπαφής 2017 και όλα τα εργαλεία που προστέθηκαν στη συνέχεια και από τότε.",
+       "rcfilters-watchlist-preference-label": "Χρήση πίνακα διεπαφής όχι-JavaScript",
+       "rcfilters-watchlist-preference-help": "Φορτώσεις Watchlist χωρίς φίλτρα ή τονισμό με χρώμα.",
        "rcfilters-filter-showlinkedfrom-option-label": "<strong>Σελίδες που συνδέονται από</strong> τη επιλεγμένη σελίδα",
        "rcfilters-filter-showlinkedto-label": "Εμφάνιση αλλαγών σε σελίδες που συνδέουν σε",
        "rcfilters-target-page-placeholder": "Εισαγάγετε όνομα σελίδας (ή κατηγορίας)",
        "contribsub2": "Για {{GENDER:$3|$1}} ($2)",
        "contributions-userdoesnotexist": "Ο λογαριασμός χρήστη «$1» δεν είναι εγγεγραμμένος.",
        "nocontribs": "Δεν βρέθηκαν αλλαγές με αυτά τα κριτήρια.",
-       "uctop": "(τρέχουσα)",
+       "uctop": "τρέχουσα",
        "month": "Από το μήνα (και νωρίτερα):",
        "year": "Από το έτος (και νωρίτερα):",
        "sp-contributions-newbies": "Εμφάνιση των συνεισφορών των νέων λογαριασμών μόνο",
        "tags": "Έγκυρες ετικέτες αλλαγής",
        "tag-filter": "Φίλτρο [[Special:Tags|ετικετών]]:",
        "tag-filter-submit": "Φίλτρο",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Ετικέτα|Ετικέτες}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Ετικέτα|Ετικέτες}}]]: $2",
        "tag-mw-contentmodelchange": "αλλαγή μοντέλου περιεχομένου",
        "tag-mw-new-redirect": "Νέα ανακατεύθυνση",
        "tag-mw-removed-redirect": "Αφαιρέθηκε ανακατεύθυνση",
        "dberr-again": "Δοκιμάστε να περιμενένετε λίγα λεπτά και να ανανεώσετε.",
        "dberr-info": "(Δεν είναι δυνατή η πρόσβαση στη βάση δεδομένων: $1)",
        "dberr-info-hidden": "(Δεν είναι δυνατή η πρόσβαση στη βάση δεδομένων)",
-       "dberr-usegoogle": "Μπορείτε να δοκιμάσετε να ψάξετε στο Google εν τω μεταξύ.",
-       "dberr-outofdate": "Σημειώστε ότι οι ενδείξεις τους περί του περιεχομένου μας ενδέχεται να μην είναι ενημερωμένες.",
-       "dberr-cachederror": "Το ακόλουθο είναι ένα αντίγραφο από την μνήμη της σελίδας που ζητήσατε και ενδέχεται να μην είναι ενημερωμένο.",
        "htmlform-invalid-input": "Υπάρχουν κάποια προβλήματα με μερικές από τις εισροές σας",
        "htmlform-select-badoption": "Η τιμή που καθορίσατε δεν είναι μια έγκυρη επιλογή.",
        "htmlform-int-invalid": "Η τιμή που καθορίσατε δεν είναι ένας ακέραιος αριθμός.",
        "logentry-block-block": "{{GENDER:$2|Ο|Η}} $1 έθεσε φραγή {{GENDER:$4|στον $3|στην $3}} με χρόνο λήξης $5 $6",
        "logentry-block-unblock": "{{GENDER:$2|Ο|Η}} $1 αφαίρεσε τη φραγή {{GENDER:$4|του|της}} $3",
        "logentry-block-reblock": "{{GENDER:$2|Ο|Η}} $1 άλλαξε τις ρυθμίσεις φραγής {{GENDER:$4|για τον $3|για την $3}} με χρόνο λήξης $5 $6",
+       "logentry-non-editing-block-block": "$1 {{GENDER:$2|blocked}} {{GENDER:$4|$3}} από συγκεκριμένες ενέργειες μη έκδοσης με προθεσμία  $5 $6",
+       "logentry-non-editing-block-reblock": "$1 {{GENDER:$2|changed}} ρυθμίσεις μπλοκ for {{GENDER:$4|$3}} για συγκεκριμένες πράξεις μη έκδοσης με προθεσμία  $5 $6",
        "logentry-suppress-block": "{{GENDER:$2|Ο|Η}} $1 έθεσε φραγή {{GENDER:$4|στον $3|στην $3}} με χρόνο λήξης $5 $6",
        "logentry-suppress-reblock": "{{GENDER:$2|Ο|Η}} $1 άλλαξε τις ρυθμίσεις φραγής {{GENDER:$4|για τον $3|για την $3}} με χρόνο λήξης $5 $6",
        "logentry-import-upload": "{{GENDER:$2|Ο|Η}} $1 εισήγαγε τη σελίδα $3 μέσω ανεβάσματος αρχείου",
        "edit-error-long": "Σφάλματα: \n\n$1",
        "revid": "αναθεώρηση $1",
        "pagedata-title": "Δεδομένα σελίδας",
-       "pagedata-bad-title": "Μη έγκυρος τίτλος: $1."
+       "pagedata-bad-title": "Μη έγκυρος τίτλος: $1.",
+       "passwordpolicies-policy-passwordnotinlargeblacklist": "Ο κωδικός πρόσβασης δεν μπορεί να είναι στην λίστα των 100.000 πιο συνηθισμένων κωδικών πρόσβασης."
 }
index f03f82b..3c2c054 100644 (file)
        "version-license-info": "MediaWiki is free software; you can redistribute it and/or modify it under the terms of the GNU General Public Licence as published by the Free Software Foundation; either version 2 of the Licence, or (at your option) any later version.\n\nMediaWiki 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 Licence for more details.\n\nYou should have received [{{SERVER}}{{SCRIPTPATH}}/COPYING a copy of the GNU General Public Licence] along with this programme; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA or [//www.gnu.org/licenses/old-licenses/gpl-2.0.html read it online].",
        "specialpages": "Special pages",
        "tag-filter": "[[Special:Tags|Tag]] filter:",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Tag|Tags}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Tag|Tags}}]]: $2",
        "logentry-block-block": "$1 {{GENDER:$2|blocked}} {{GENDER:$4|$3}} with an expiry time of $5 $6",
        "logentry-block-reblock": "$1 {{GENDER:$2|changed}} block settings for {{GENDER:$4|$3}} with an expiry time of $5 $6",
        "logentry-suppress-block": "$1 {{GENDER:$2|blocked}} {{GENDER:$4|$3}} with an expiry time of $5 $6",
index 39ba360..159e705 100644 (file)
        "passwordtooshort": "Passwords must be at least {{PLURAL:$1|1 character|$1 characters}}.",
        "passwordtoolong": "Passwords cannot be longer than {{PLURAL:$1|1 character|$1 characters}}.",
        "passwordtoopopular": "Commonly chosen passwords cannot be used. Please choose a password that is more difficult to guess.",
+       "passwordinlargeblacklist": "The password entered is in a list of very commonly used passwords. Please choose a more unique password.",
        "password-name-match": "Your password must be different from your username.",
        "password-login-forbidden": "The use of this username and password has been forbidden.",
        "mailmypassword": "Reset password",
        "edit-gone-missing": "Could not update the page.\nIt appears to have been deleted.",
        "edit-conflict": "Edit conflict.",
        "edit-no-change": "Your edit was ignored because no change was made to the text.",
+       "edit-slots-cannot-add": "The following {{PLURAL:$1|slot is|slots are}} not supported here: $2.",
+       "edit-slots-cannot-remove": "The following {{PLURAL:$1|slot is|slots are}} required and cannot be removed: $2.",
+       "edit-slots-missing": "The following {{PLURAL:$1|slot is|slots are}} missing: $2.",
        "postedit-confirmation-created": "The page has been created.",
        "postedit-confirmation-restored": "The page has been restored.",
        "postedit-confirmation-saved": "Your edit was saved.",
        "defaultmessagetext": "Default message text",
        "content-failed-to-parse": "Failed to parse $2 content for $1 model: $3",
        "invalid-content-data": "Invalid content data",
-       "content-not-allowed-here": "\"$1\" content is not allowed on page [[$2]]",
+       "content-not-allowed-here": "\"$1\" content is not allowed on page [[$2]] in slot \"$3\"",
        "editwarning-warning": "Leaving this page may cause you to lose any changes you have made.\nIf you are logged in, you can disable this warning in the \"{{int:prefs-editing}}\" section of your preferences.",
        "editpage-invalidcontentmodel-title": "Content model not supported",
        "editpage-invalidcontentmodel-text": "The content model \"$1\" is not supported.",
        "timezonelegend": "Time zone:",
        "localtime": "Local time:",
        "timezoneuseserverdefault": "Use wiki default ($1)",
-       "timezoneuseoffset": "Other (specify offset)",
+       "timezoneuseoffset": "Other (specify offset below)",
+       "timezone-useoffset-placeholder": "Example values: \"-07:00\" or \"01:00\"",
        "servertime": "Server time:",
        "guesstimezone": "Fill in from browser",
        "timezoneregion-africa": "Africa",
        "prefs-editor": "Editor",
        "prefs-preview": "Preview",
        "prefs-advancedrc": "Advanced options",
-       "prefs-opt-out": "Opt out of improvements",
        "prefs-advancedrendering": "Advanced options",
        "prefs-advancedsearchoptions": "Advanced options",
        "prefs-advancedwatchlist": "Advanced options",
        "prefs-displayrc": "Display options",
        "prefs-displaywatchlist": "Display options",
+       "prefs-changesrc": "Changes shown",
+       "prefs-changeswatchlist": "Changes shown",
+       "prefs-pageswatchlist": "Watched pages",
        "prefs-tokenwatchlist": "Token",
        "prefs-diffs": "Diffs",
        "prefs-help-prefershttps": "This preference will take effect on your next login.",
        "rcfilters-watchlist-markseen-button": "Mark all changes as seen",
        "rcfilters-watchlist-edit-watchlist-button": "Edit your list of watched pages",
        "rcfilters-watchlist-showupdated": "Changes to pages you haven't visited since the changes occurred are in <strong>bold</strong>, with solid markers.",
-       "rcfilters-preference-label": "Hide the improved version of Recent Changes",
-       "rcfilters-preference-help": "Rolls back the 2017 interface redesign and all tools added then and since.",
-       "rcfilters-watchlist-preference-label": "Hide the improved version of the Watchlist",
-       "rcfilters-watchlist-preference-help": "Rolls back the 2017 interface redesign and all tools added then and since.",
+       "rcfilters-preference-label": "Use non-JavaScript interface",
+       "rcfilters-preference-help": "Loads RecentChanges without filters or highlighting functionality.",
+       "rcfilters-watchlist-preference-label": "Use non-JavaScript interface",
+       "rcfilters-watchlist-preference-help": "Loads Watchlist without filters or highlighting functionality.",
        "rcfilters-filter-showlinkedfrom-label": "Show changes on pages linked from",
        "rcfilters-filter-showlinkedfrom-option-label": "<strong>Pages linked from</strong> the selected page",
        "rcfilters-filter-showlinkedto-label": "Show changes on pages linking to",
        "contribsub2": "For {{GENDER:$3|$1}} ($2)",
        "contributions-userdoesnotexist": "User account \"$1\" is not registered.",
        "nocontribs": "No changes were found matching these criteria.",
-       "uctop": "(current)",
+       "uctop": "current",
        "month": "From month (and earlier):",
        "year": "From year (and earlier):",
        "date": "From date (and earlier):",
        "move-watch": "Watch source page and target page",
        "movepagebtn": "Move page",
        "pagemovedsub": "Move succeeded",
+       "cannotmove": "The page could not be moved, for the following {{PLURAL:$1|reason|reasons}}:",
        "movepage-moved": "<strong>\"$1\" has been moved to \"$2\"</strong>",
        "movepage-moved-redirect": "A redirect has been created.",
        "movepage-moved-noredirect": "The creation of a redirect has been suppressed.",
        "allmessages-filter-modified": "Modified",
        "allmessages-prefix": "Filter by prefix:",
        "allmessages-language": "Language:",
-       "allmessages-filter-submit": "Go",
+       "allmessages-filter-submit": "Filter",
        "allmessages-filter-translate": "Translate",
        "thumbnail-more": "Enlarge",
        "filemissing": "File missing",
        "tags-summary": "",
        "tag-filter": "[[Special:Tags|Tag]] filter:",
        "tag-filter-submit": "Filter",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Tag|Tags}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Tag|Tags}}]]: $2",
        "tag-mw-contentmodelchange": "content model change",
        "tag-mw-contentmodelchange-description": "Edits that [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:ChangeContentModel change the content model] of a page",
        "tag-mw-new-redirect": "New redirect",
        "dberr-again": "Try waiting a few minutes and reloading.",
        "dberr-info": "(Cannot access the database: $1)",
        "dberr-info-hidden": "(Cannot access the database)",
-       "dberr-usegoogle": "You can try searching via Google in the meantime.",
-       "dberr-outofdate": "Note that their indexes of our content may be out of date.",
-       "dberr-cachederror": "This is a cached copy of the requested page, and may not be up to date.",
        "htmlform-invalid-input": "There are problems with some of your input.",
        "htmlform-select-badoption": "The value you specified is not a valid option.",
        "htmlform-int-invalid": "The value you specified is not an integer.",
        "logentry-block-reblock": "$1 {{GENDER:$2|changed}} block settings for {{GENDER:$4|$3}} with an expiration time of $5 $6",
        "logentry-partialblock-block": "$1 {{GENDER:$2|blocked}} {{GENDER:$4|$3}} from editing {{PLURAL:$8||the pages}} $7 with an expiration time of $5 $6",
        "logentry-partialblock-reblock": "$1 {{GENDER:$2|changed}} block settings for {{GENDER:$4|$3}} preventing edits on {{PLURAL:$8||the pages}} $7 with an expiration time of $5 $6",
-       "logentry-non-editing-block-block": "$1 {{GENDER:$2|blocked}} {{GENDER:$4|$3}} from non-editing actions with an expiration time of $5 $6",
-       "logentry-non-editing-block-reblock": "$1 {{GENDER:$2|changed}} block settings for {{GENDER:$4|$3}} for non-editing actions with an expiration time of $5 $6",
+       "logentry-non-editing-block-block": "$1 {{GENDER:$2|blocked}} {{GENDER:$4|$3}} from specified non-editing actions with an expiration time of $5 $6",
+       "logentry-non-editing-block-reblock": "$1 {{GENDER:$2|changed}} block settings for {{GENDER:$4|$3}} for specified non-editing actions with an expiration time of $5 $6",
        "logentry-suppress-block": "$1 {{GENDER:$2|blocked}} {{GENDER:$4|$3}} with an expiration time of $5 $6",
        "logentry-suppress-reblock": "$1 {{GENDER:$2|changed}} block settings for {{GENDER:$4|$3}} with an expiration time of $5 $6",
        "logentry-import-upload": "$1 {{GENDER:$2|imported}} $3 by file upload",
        "passwordpolicies-policy-passwordcannotmatchblacklist": "Password cannot match specifically blacklisted passwords",
        "passwordpolicies-policy-maximalpasswordlength": "Password must be less than $1 {{PLURAL:$1|character|characters}} long",
        "passwordpolicies-policy-passwordcannotbepopular": "Password cannot be {{PLURAL:$1|the popular password|in the list of $1 popular passwords}}",
+       "passwordpolicies-policy-passwordnotinlargeblacklist": "Password cannot be in the list of 100,000 most commonly used passwords.",
        "easydeflate-invaliddeflate": "Content provided is not properly deflated",
        "unprotected-js": "For security reasons JavaScript cannot be loaded from unprotected pages. Please only create javascript in the MediaWiki: namespace or as a User subpage"
 }
index 2da557d..4855e3a 100644 (file)
@@ -52,7 +52,9 @@
                        "Kastanoto",
                        "Rafaneta",
                        "NMaia",
-                       "Joao Xavier"
+                       "Joao Xavier",
+                       "Surfo",
+                       "YvesNevelsteen"
                ]
        },
        "tog-underline": "Substrekado de ligiloj:",
        "badaccess": "Vi ne havas sufiĉe da redaktorajtoj por ĉi tiu paĝo.",
        "badaccess-group0": "Vi ne rajtas plenumi la agon, kiun vi petis.",
        "badaccess-groups": "La ago, kiun vi petis, estas limigita al uzantoj en {{PLURAL:$2|la grupo|unu el la grupoj}}: $1.",
-       "versionrequired": "Versio $1 de MediaWiki nepras",
+       "versionrequired": "Versio $1 de MediaWiki estas deviga",
        "versionrequiredtext": "La versio $1 de MediaWiki estas necesa por uzi ĉi tiun paĝon. Vidu [[Special:Version|paĝon pri versio]].",
        "ok": "Bone",
        "retrievedfrom": "Elŝutita el  \"$1\"",
        "nospecialpagetext": "<strong>Vi petis malvalidan specialan paĝon.</strong>\n\nListo de validaj specialaj paĝoj estas trovebla ĉe [[Special:SpecialPages|{{int:specialpages}}]].",
        "error": "Eraro",
        "databaseerror": "Datumbaza eraro",
-       "databaseerror-text": "Datumbaza eraro de la mendo okazis.\nĈi tiu eble indikas cimon de la programaro.",
+       "databaseerror-text": "Datumbaza eraro de la serĉmendo okazis.\nĈi tiu eble indikas cimon de la programaro.",
        "databaseerror-textcl": "Datumbaza eraro de la mendo okazis.",
-       "databaseerror-query": "Mendo: $1",
+       "databaseerror-query": "Serĉmendo: $1",
        "databaseerror-function": "Funkcio: $1",
        "databaseerror-error": "Eraro: $1",
        "transaction-duration-limit-exceeded": "Por eviti krei egan atendotempon de replikado, tiu transakcio estis ĉesigita pro la skribdaŭro ($1) superigis la limon da $2 {{plural:$2|sekondo|sekondoj}}.",
        "passwordtooshort": "Pasvortoj devas esti longaj almenaŭ  $1 {{PLURAL:$1|1 signon|$1 signojn}}.",
        "passwordtoolong": "Pasvorto ne povas esti pli longa ol {{PLURAL:$1|1 signo|$1 signoj}}.",
        "passwordtoopopular": "Ne eblas uzi kutimajn pasvortojn. Bonvolu uzi pasvorton, kiu estas malpli facile divenebla.",
+       "passwordinlargeblacklist": "La enigita pasvorto estas en listo de tre ofte uzita pasvortojn. Bonvolu elekti pli unikan pasvorton.",
        "password-name-match": "Via pasvorto devas nepre malsami vian salutnomon.",
        "password-login-forbidden": "Estas malpermesite uzi tiun ĉi salutnomon kaj pasvorton.",
        "mailmypassword": "Refari pasvorton",
        "botpasswords-restriction-failed": "Limigoj pri robota pasvorto malebligas tiun ensalutadon.",
        "botpasswords-invalid-name": "La difinita uzantnomo malenhavas la robotopasvortan disigilon (\"$1\").",
        "botpasswords-not-exist": "Uzanto \"$1\" ne havas robotopasvorton, kiu nomiĝas \"$2\".",
+       "botpasswords-needs-reset": "La robotpasvorto de la robotnomo \"$2\" de {{GENDER:$1|uzanto}} \"$1\" estu restarigita.",
+       "botpasswords-locked": "Vi ne povas ensaluti robotpasvorte, ĉar via konto estas ŝlosita.",
        "resetpass_forbidden": "Pasvortoj ne estas ŝanĝeblaj",
        "resetpass_forbidden-reason": "Pasvortoj ne povas esti ŝanĝita: $1",
        "resetpass-no-info": "Vi devas ensaluti por atingi ĉi tiun paĝon rekte.",
        "subject-preview": "Antaŭrigardo de temo:",
        "previewerrortext": "Dum provo antaŭrigardi viajn ŝanĝojn okazis eraro.",
        "blockedtitle": "La uzanto estas forbarita.",
+       "blocked-email-user": "<strong>Retpoŝtado de via salutnomo estis blokita. Vi povas ankoraŭ redakti aliajn paĝojn en ĉi tiu vikio.</strong> Ĉiujn detalojn pri la blokado vi povas vidi ĉe [[Special:MyContributions|viaj kontribuoj]].\n\nVin blokis $1.\n\nIndikita kialo: <em>$2</em>.\n\n* Blokita ekde: $8\n* Malblokota je: $6\n* Koncernato: $7\n* Blokado numero #$5",
+       "blockedtext-partial": "<strong>Al via salutnomo aŭ IP-adreso estas blokita ŝanĝado de ĉi tiu paĝo. Vi povas ankoraŭ redakti aliajn paĝojn en ĉi tiu vikio.</strong> Ĉiujn detalojn pri la blokado vi povas vidi ĉe [[Special:MyContributions|viaj kontribuoj]].\n \nVin blokis $1.\n\nIndikita kialo: <em>$2</em>.\n\n* Blokita ekde: $8\n* Malblokota je: $6\n* Koncernato: $7\n* Blokado numero #$5",
        "blockedtext": "'''Via konto aŭ IP-adreso estis blokita'''\n\nLa bloko estis farita de $1.\nLa skribita kialo estas ''$2''.\n\n* Komenco de forbaro: $8\n* Findato de forbarado: $6\n* Intencita forbarito: $7\n\nVi rajtas kontakti $1 aŭ alian [[{{MediaWiki:Grouppage-sysop}}|administranton]] por pridiskuti la forbaradon.\nVi ne povas uzi la funkcion “{{int:emailuser}}”, escepte se vi indikis validan retpoŝtan adreson en viaj [[Special:Preferences|kontaj agordoj]] kaj vi ne estas blokita uzi ĝin.\nVia IP-adreso estas $3 kaj la ID de la forbarado estas $5.\nBonvolu mencii jenajn indikojn en viaj ĉi-temaj kontaktoj.",
        "autoblockedtext": "Via IP-adreso estas aŭtomate forbarita, ĉar uzis ĝin alia uzanto, kiun baris $1.\nLa donita kialo estas jena:\n\n:<em>$2</em>\n\n*Komenco de forbaro: $8\n*Limdato de la blokado: $6\n*Intencis forbari uzanton: $7\n\nVi povas kontakti $1 aŭ iun ajn el la aliaj [[{{MediaWiki:Grouppage-sysop}}|administrantojn]] por diskuti la blokon.\n\nNotu, ke vi ne povas uzi la servon \"{{int:emailuser}}\" krom se vi havas validan retpoŝt-adreson registritan en viaj [[Special:Preferences|preferojn]], kaj vi estas ne blokita kontraŭ ĝia uzado.\n\nVia nuna IP-adreso estas $3, kaj la forbaro-identigo estas $5.\nBonvolu inkluzivi tiujn detalojn en iuj ajn demandoj kiun vi farus.",
        "systemblockedtext": "Via salutnomo aŭ IPa adreso estis aŭtomate forbarita de MediaWiki.\nLa kialo donita estas:\n\n:<em>$2</em>\n\n* Komenco de forbaro: $8\n* Eksvalidiĝo de forbaro: $6\n* Intenca forbarulo: $7\n\nVia nuna IPa adreso estas $3.\nBonvolu inkluzivi ĉiuj supraj detaloj en ajnaj demandoj vi faras.",
        "blocked-notice-logextract": "Ĉi tiu uzanto estas ĉi-momente forbarita.\nLa lasta protokolero estas jene montrata por via referenco:",
        "clearyourcache": "<strong>Notu:</strong>Post konservado, vi forviŝu la kaŝmemoron de via foliumilo por vidi la ŝanĝojn. \n* <strong>Firefox / Safari:</strong> Premu majuskligan klavon klakante <em>Reŝarĝi</em>, aŭ premu aŭ <em>Stir-F5</em> aŭ <em>Stir-R</em> (<em>⌘-R</em> kun Makintoŝo)\n* <strong>Google Chrome:</strong> Premu <em>Stir-majuskligklavon-R</em> (<em>⌘-Majuskligklavo-R</em> kun Makintoŝo)\n* <strong>Interreta Esplorilo</strong>: Premu <em>Stir</em> klakante <em>Refreŝu</em>, aŭ premu <em>Stir-F5</em> \n* <strong>Opera:</strong> Iru al <em>menuo →  parametroj</em> (<em>Opera →  Agordoj</em> per Makintoŝa) kaj tiam al <em>privateco kaj sekureco →  Nuligi retuman datenon → kaŝmemorataj bildoj kaj dosieroj</em>.",
        "usercssyoucanpreview": "'''Konsileto:''' Uzu la butonon \"Antaŭrigardi\" por provi vian novan CSS-kodon antaŭ konservado.",
+       "userjsonyoucanpreview": "<strong>Konsileto:</strong> Uzu la butonon \"{{int:showpreview}}\" por provi vian novan JSON antaŭ konservado.",
        "userjsyoucanpreview": "'''Konsileto:''' Uzu la butonon \"{{int:showpreview}}\" por provi vian novan Ĝavaskriptan kodon antaŭ konservado.",
        "usercsspreview": "'''Notu ke vi nur antaŭvidas vian uzanto-CSS.\nĜi ne jam estis konservita!'''",
+       "userjsonpreview": "<strong>Memoru ke vi nun nur provas kaj antaŭrigardas vian JSON. Ĝi ne estas jam konservita!</strong>",
        "userjspreview": "'''Memoru ke vi nun nur provas kaj antaŭrigardas vian uzantan Ĝavaskripton, ĝi ne estas jam konservita'''",
        "sitecsspreview": "'''Konsciu ke vi nur antaŭrigardas tiun ĉi CSS.'''\n'''Ĝi ne jam estis savita!''",
+       "sitejsonpreview": "<strong>Memoru ke vi nun nur provas kaj antaŭrigardas vian JSON-agordojn. Ĝi ne estas jam konservita!</strong>",
        "sitejspreview": "'''Konsciu ke vi nur antaŭrigardas tiun ĉi Ĝavaskripta kodon''. ''Ĝi ne jam estis konservita''.",
        "userinvalidconfigtitle": "<strong>Averto:</strong> Ne ekzistas etoso \"$1\".\nRememoru ke individuaj .css-aj, .json-aj kaj .js-aj paĝoj uzas minusklan titolon, ekz. {{ns:user}}:Foo/vector.css kontraŭe al {{ns:user}}:Foo/Vector.css.",
        "updated": "(Ĝisdatigita)",
        "expansion-depth-exceeded-warning": "Paĝo preterpasis la ekpansiprofundon.",
        "parser-unstrip-loop-warning": "Cirkloreferencon detektis",
        "unstrip-depth-warning": "Rikurlimiton de analizopoj ($1) superis",
+       "unstrip-size-category": "Paĝoj kiuj superas la limon de la unstrip-funkcio",
        "converter-manual-rule-error": "Eraron detektis en mana lingvokonverta regulo",
        "undo-success": "La redakto estas malfarebla.\nBonvolu kontroli la jenan komparaĵon por certiĝi ĉu tio estas tio, kion vi volas, kaj konservi la ŝanĝojn malsupre por fine malfari la redakton.",
        "undo-failure": "Ne povis nuligi redakton pro konfliktaj intermezaj redaktoj.",
+       "undo-main-slot-only": "La redakto ne povis esti malfarita, ĉar ĝi trafas enhavon ekster la ĉefa traktujo.",
        "undo-norev": "La redakto ne povis esti malfarita ĉar ĝi aŭ ne ekzistas aŭ estis forigita.",
        "undo-nochange": "Ŝajne la redakto jam estis malfarita.",
        "undo-summary": "Nuligis version $1 de [[Special:Contributions/$2|$2]] ([[User talk:$2|Diskuto]] | [[Special:Contributions/$2|{{MediaWiki:Contribslink}}]])",
        "diff-multi-sameuser": "({{PLURAL:$1|Unu meza versio|$1 mezaj versioj}} de la sama uzanto ne montriĝas)",
        "diff-multi-otherusers": "({{PLURAL:$1|Unu meza versio|$1 mezaj versioj}} de {{PLURAL:$2|alia uzanto|$2 uzantoj}} ne montriĝas)",
        "diff-multi-manyusers": "({{PLURAL:$1|Unu intermeza versio|$1 intermezaj versioj}} de pli ol {{PLURAL:$2|unu uzanto|$2 uzantoj}} ne estas {{PLURAL:$1|montrata|montrataj}}.)",
+       "diff-paragraph-moved-tonew": "Oni movis la alineon. Klaku por iri al la nova loko.",
+       "diff-paragraph-moved-toold": "Oni movis la alineon. Klaku por iri al la malnova loko.",
        "difference-missing-revision": "{{PLURAL:$2|Unu revizio|$2 revizioj}} de ĉi tiu malsameco ($1) ne {{PLURAL:$2|estis|estis}} trovebla.\n\nLa kutima kaŭzo estas sekvi malaktualan malsamo-ligilon al paĝo forviŝita.\nDetaloj troveblos en la [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} registro de forviŝoj].",
        "searchresults": "Serĉrezultoj",
+       "search-filter-title-prefix": "Serĉas nur en paĝoj, kies titolo komenciĝas \"$1\".",
        "search-filter-title-prefix-reset": "Traserĉi ĉiujn paĝojn",
        "searchresults-title": "Serĉrezultoj por \"$1\"",
        "titlematches": "Trovitaj laŭ titolo",
        "prefs-dateformat": "Data formato",
        "prefs-timeoffset": "Tempa deŝovo",
        "prefs-advancedediting": "Ĝeneralaj opcioj",
+       "prefs-developertools": "Iloj por programistoj",
        "prefs-editor": "Redaktilo",
        "prefs-preview": "Antaŭrigardo",
        "prefs-advancedrc": "Progresaj opcioj",
        "prefs-advancedwatchlist": "Progresaj opcioj",
        "prefs-displayrc": "Montraj opcioj",
        "prefs-displaywatchlist": "Montraj opcioj",
+       "prefs-changesrc": "Ŝanĝoj montritaj",
+       "prefs-changeswatchlist": "Ŝanĝoj montritaj",
+       "prefs-pageswatchlist": "Atentataj paĝoj",
        "prefs-tokenwatchlist": "Ĵetono",
        "prefs-diffs": "Diferencoj",
        "prefs-help-prefershttps": "Ĉi tiu agordo ekefikos je via sekva ensaluto.",
        "editinguser": "Ŝanĝado de uzantorajtoj de la {{GENDER:$1|uzanto}} <strong>[[User:$1|$1]]</strong> $2",
        "viewinguserrights": "Vidi uzantorajtojn de {{GENDER:$1|uzanto}} <strong>[[User:$1|$1]]</strong> $2",
        "userrights-editusergroup": "Redakti grupojn de uzantoj",
-       "userrights-viewusergroup": "Vidi grupojn de uzantoj",
+       "userrights-viewusergroup": "Vidi {{GENDER:$1|user}}-grupojn",
        "saveusergroups": "Konservi grupojn de {{GENDER:$1|uzantoj}}",
        "userrights-groupsmember": "Membro de:",
        "userrights-groupsmember-auto": "Implica membro de:",
        "right-editcontentmodel": "Redakti paĝan enhavmodelon",
        "right-editinterface": "Redakti la uzantointerfacon",
        "right-editusercss": "Redaktu CSS-dosierojn de aliaj uzantoj",
+       "right-edituserjson": "Redakti JSON-dosierojn de aliaj uzantoj",
        "right-edituserjs": "Redaktu JS-dosierojn de aliaj uzantoj",
        "right-editmyusercss": "Redakti viajn proprajn CSS-dosierojn",
        "right-editmyuserjs": "Redakti viajn proprajn JavaScript-dosierojn",
        "rcfilters-other-review-tools": "Aliaj reviziaj iloj",
        "rcfilters-group-results-by-page": "Grupigi rezultojn laŭ paĝoj",
        "rcfilters-activefilters": "Aktivaj filtriloj",
+       "rcfilters-activefilters-hide": "Kaŝu",
+       "rcfilters-activefilters-show": "Montru",
+       "rcfilters-activefilters-hide-tooltip": "Kaŝu la areon de aktivaj filtriloj",
+       "rcfilters-activefilters-show-tooltip": "Montru la areon de aktivaj filtriloj",
        "rcfilters-advancedfilters": "Altnivelaj filtriloj",
        "rcfilters-limit-title": "Rezultoj montrotaj",
+       "rcfilters-limit-and-date-label": "$1 {{PLURAL:$1|ŝanĝon|ŝanĝojn}}, $2",
+       "rcfilters-date-popup-title": "En kiu periodo serĉi",
        "rcfilters-days-title": "Ĵusaj tagoj",
        "rcfilters-hours-title": "Ĵusaj horoj",
        "rcfilters-days-show-days": "$1 {{PLURAL:$1|tago|tagoj}}",
        "rcfilters-savedqueries-new-name-label": "Nomo",
        "rcfilters-savedqueries-new-name-placeholder": "Priskribas la celon de la filtrilo",
        "rcfilters-savedqueries-apply-label": "Krei filtrilon",
+       "rcfilters-savedqueries-apply-and-setdefault-label": "Krei defaŭltan filtrilon",
        "rcfilters-savedqueries-cancel-label": "Nuligi",
+       "rcfilters-savedqueries-add-new-title": "Konservi la nunajn filtrilajn agordojn",
        "rcfilters-restore-default-filters": "Restarigi defaŭltajn filtrilojn",
        "rcfilters-clear-all-filters": "Nuligi ĉiujn filtrilojn",
        "rcfilters-show-new-changes": "Vidi la plej novajn ŝanĝojn",
        "rcfilters-filter-editsbyself-description": "Viaj kontribuoj.",
        "rcfilters-filter-editsbyother-label": "ŝanĝoj faritaj de aliuloj",
        "rcfilters-filter-editsbyother-description": "Ĉiuj ŝanĝoj, escepte de viaj.",
-       "rcfilters-filtergroup-userExpLevel": "Spertonivelo (nur por registritaj uzantoj)",
+       "rcfilters-filtergroup-userExpLevel": "Registriĝo kaj spertonivelo de uzanto",
        "rcfilters-filter-user-experience-level-registered-label": "Registritaj",
        "rcfilters-filter-user-experience-level-registered-description": "Ensalutitaj redaktantoj.",
        "rcfilters-filter-user-experience-level-unregistered-label": "Neregistritaj",
        "rcfilters-filter-bots-description": "Redaktoj farita de aŭtomatigitaj iloj.",
        "rcfilters-filter-humans-label": "Homa (ne robota)",
        "rcfilters-filter-humans-description": "Redaktoj farita de homaj redaktantoj.",
+       "rcfilters-filter-reviewstatus-unpatrolled-label": "Ne patrolita",
+       "rcfilters-filter-reviewstatus-manual-description": "Redaktoj mane markita kiel patrolita.",
+       "rcfilters-filter-reviewstatus-manual-label": "Mane patrolita",
+       "rcfilters-filter-reviewstatus-auto-description": "Redaktoj de altnivelaj uzantoj kies laboro estas aŭtomate markita kiel patrolita.",
+       "rcfilters-filter-reviewstatus-auto-label": "Aŭtomate patrolita",
        "rcfilters-filtergroup-significance": "Signifo",
        "rcfilters-filter-minor-label": "Etaj redaktoj",
        "rcfilters-filter-minor-description": "Redaktoj kiujn la aŭtoro markis kiel \"redakteto\".",
        "rcfilters-filter-major-label": "Redaktoj kiujn la aŭtoro ne markis kiel \"redakteto\".",
        "rcfilters-filter-major-description": "Redaktoj kiujn la aŭtoro ne markis kiel \"redakteto\".",
+       "rcfilters-filtergroup-watchlist": "Atentataj paĝoj",
+       "rcfilters-filter-watchlist-watched-label": "Sur atentaro",
+       "rcfilters-filter-watchlist-watched-description": "Ŝanĝoj al paĝoj sur via atentaro.",
+       "rcfilters-filter-watchlist-watchednew-label": "Nova ŝanĝoj en la atentaro",
+       "rcfilters-filter-watchlist-watchednew-description": "Ŝanĝoj al priatentataj paĝoj kiujn vi ne vizitis ekde kiam la ŝanĝoj okazis.",
+       "rcfilters-filter-watchlist-notwatched-label": "Ne sur la atentaro",
+       "rcfilters-filter-watchlist-notwatched-description": "Ĉio krom ŝanĝoj al viaj priatentataj paĝoj.",
+       "rcfilters-filtergroup-watchlistactivity": "Agado en la atentaro",
+       "rcfilters-filter-watchlistactivity-unseen-label": "Nevidataj ŝanĝoj",
+       "rcfilters-filter-watchlistactivity-unseen-description": "Ŝanĝoj al paĝoj kiujn vi ne vizitis ekde kiam la ŝanĝoj okazis.",
+       "rcfilters-filter-watchlistactivity-seen-label": "Viditaj ŝanĝoj",
+       "rcfilters-filter-watchlistactivity-seen-description": "Ŝanĝoj al paĝoj kiujn vi vizitis ekde kiam la ŝanĝoj okazis.",
        "rcfilters-filtergroup-changetype": "Tipo de ŝanĝo",
        "rcfilters-filter-pageedits-label": "Redaktoj de paĝoj",
        "rcfilters-filter-pageedits-description": "Redaktoj al vikia enhavo, diskutoj, kategoriaj priskriboj…",
        "rcfilters-filter-categorization-description": "Registroj de paĝoj aldonitaj aŭ forigitaj de kategorioj",
        "rcfilters-filter-logactions-label": "Registritaj agoj",
        "rcfilters-filter-logactions-description": "Administraciaj agoj, kontaj kreoj, paĝaj forigoj, alŝutoj…",
+       "rcfilters-filtergroup-lastRevision": "Lastaj revizioj",
+       "rcfilters-filter-lastrevision-label": "Lasta revizio",
+       "rcfilters-filter-lastrevision-description": "Nur la plej lasta ŝanĝo al paĝo.",
+       "rcfilters-filter-previousrevision-label": "Ne la lasta revizio",
+       "rcfilters-filter-previousrevision-description": "Ĉiuj ŝanĝoj kiu ne estas la \"lasta revizio\".",
+       "rcfilters-filter-excluded": "Ekskludita",
+       "rcfilters-liveupdates-button": "Aŭtomata ĝisdatigo",
+       "rcfilters-liveupdates-button-title-on": "Malŝalti aŭtomatajn ĝisdatigojn",
+       "rcfilters-liveupdates-button-title-off": "Montri novajn ŝanĝojn dum ili okazas",
+       "rcfilters-watchlist-markseen-button": "Marku ĉiujn ŝanĝojn viditaj",
+       "rcfilters-watchlist-edit-watchlist-button": "Redakti vian atentaron",
+       "rcfilters-watchlist-showupdated": "Ŝanĝoj en paĝo, kiun vi ne vizitis post la ŝanĝo, aperas <strong>graslitere</strong>, kun nigra disketo.",
        "rcnotefrom": "Malsupre estas la {{PLURAL:$5|ŝanĝo|ŝanĝoj}} ekde <strong>$3, $4</strong> (montrante ĝis <strong>$1</strong>).",
        "rclistfrom": "Montri novajn ŝanĝojn ekde \"$3 $2\"",
        "rcshowhideminor": "$1 etajn redaktojn",
        "filedesc": "Resumo",
        "fileuploadsummary": "Resumo:",
        "filereuploadsummary": "Dosieraj ŝanĝoj:",
-       "filestatus": "Aŭtorrajta statuso:",
+       "filestatus": "Aŭtorrajta stato:",
        "filesource": "Fonto:",
        "ignorewarning": "Ignori averton kaj konservi dosieron ĉiukaze",
        "ignorewarnings": "Ignori ĉiajn avertojn",
        "fileexists": "Dosiero kun tiu ĉi nomo jam ekzistas.\nBonvolu kontroli <strong>[[:$1]]</strong> krom se vi certas ke {{GENDER:|vi}} konscie volas ŝanĝi ĝuste tiun.\n[[$1|thumb]]",
        "filepageexists": "La priskriba paĝo por ĉi tiu dosiero jam estis kreita ĉe <strong>[[:$1]]</strong>, sed neniu dosiero kun ĉi tiu nomo nune ekzistas.\nLa resumo kiun vi entajpos ne aperos en la priskribo-paĝo.\nPor aperigi vian resumon, vi devos permane redakti ĝin.\n[[$1|thumb]]",
        "fileexists-extension": "Dosiero kun simila nomo ekzistas: [[$2|thumb]]\n* Nomo de la alŝutanta dosiero: <strong>[[:$1]]</strong>\n* Nomo de la ekzistanta dosiero: <strong>[[:$2]]</strong>\nBonvolu elekti malsaman nomon.",
-       "fileexists-thumbnail-yes": "Ĉi tiu dosiero ŝajnas kiel bildo de malkreskigita grandeco ''(bildeto)''. [[$1|thumb]]\nBonvolu kontroli la dosieron <strong>[[:$1]]</strong>.\nSe la kontrolita dosiero estas la sama bildo kiel la originala grandeco, ĝi ne nepras alŝuti plian bideton.",
+       "fileexists-thumbnail-yes": "Ĉi tiu dosiero ŝajnas kiel bildo de malkreskigita grandeco ''(bildeto)''. [[$1|thumb]]\nBonvolu kontroli la dosieron <strong>[[:$1]]</strong>.\nSe la kontrolita dosiero estas la sama bildo kiel la originala grandeco, ĝi ne devigas alŝuti plian bideton.",
        "file-thumbnail-no": "La dosiernomo komencas kun <strong>$1</strong>.\nĜi ŝajnas kiel bildo de malgrandigita grandeco ''(thumbnail)''.\nSe vi havas ĉi tiun bildon en plena distingivo, alŝutu ĉi tiun, alikaze bonvolu ŝanĝi la dosieran nomon.",
        "fileexists-forbidden": "Dosiero kun ĉi tiu nomo jam ekzistas kaj ne povas anstataŭigi ĝin.\nSe vi ankoraŭ volas alŝuti vian dosieron, bonvolu reprovi kun nova nomo.\n[[File:$1|thumb|center|$1]]",
        "fileexists-shared-forbidden": "Dosiero kun ĉi tia nomo jam ekzistas en la komuna dosierujo.\nSe vi ankoraŭ volas alŝuti vian dosieron, bonvolu retroigi kaj uzi novan nomon.[[File:$1|thumb|center|$1]]",
        "uploadstash-refresh": "Aktualigi la dosierliston.",
        "uploadstash-thumbnail": "Vidi bildeton",
        "uploadstash-exception": "Ne eblas alŝuti en kaŝkonservejon ($1): \"$2\".",
+       "uploadstash-bad-path-unrecognized-thumb-name": "Nerekonita miniatura nomo.",
        "invalid-chunk-offset": "Malvalida deŝovo de dosierpeco",
        "img-auth-accessdenied": "Atingo malpermisita",
-       "img-auth-nopathinfo": "Mankas PATH_INFO (informo pri dosiervojo).\nVia servilo ne estas konfigurita por sendi ĉi tiun informon.\nEble ĝi estas CGI-bazita kaj ne subtenas img_auth.\nVidu https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization (angle).",
+       "img-auth-nopathinfo": "Mankas informo pri vojo.\nVia servilo estu agordita por sendi la variablojn REQUEST_URI kaj/aŭ PATH_INFO.\nSe ĝi jam estas, provu aktivigon de $wgUsePathInfo.\nVidu https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization.",
        "img-auth-notindir": "Petita vojo ne estas en la konfigurita alŝuta dosierujo.",
        "img-auth-badtitle": "Ne povas konstrui validan titolon de \"$1\".",
        "img-auth-nologinnWL": "Vi ne estas ensalutita kaj \"$1\" ne estas en la blankalisto.",
        "deadendpages": "Paĝoj sen interna ligilo",
        "deadendpagestext": "La sekvaj paĝoj ne ligas al aliaj paĝoj en {{SITENAME}}.",
        "protectedpages": "Protektitaj paĝoj",
+       "protectedpages-filters": "Filtriloj",
        "protectedpages-indef": "Nur ĉiamaj protektaĵoj",
        "protectedpages-summary": "Ĉi tiu paĝo listigas ekzistantajn paĝojn, kiuj nuntempe estas protektitaj. Por listo de titoloj, kiuj estas protektitaj kontraŭ kreado, vidu [[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]].",
        "protectedpages-cascade": "Nur kaskadaj protektoj",
        "apisandbox-dynamic-error-exists": "Parametro nomata \"$1\" jam ekzistas.",
        "apisandbox-deprecated-parameters": "Evitindajn parametrojn",
        "apisandbox-fetch-token": "Aŭtoplenigu ĵetonon",
+       "apisandbox-add-multi": "Aldoni",
        "apisandbox-submit-invalid-fields-title": "Iuj kampoj estas malvalidaj.",
        "apisandbox-submit-invalid-fields-message": "Bonvolu ĝustigi la markitajn kampojn kaj provi denove.",
        "apisandbox-results": "Rezultoj",
        "dellogpage": "Protokolo pri forigoj",
        "dellogpagetext": "Jen listo de la plej lastaj forigoj.",
        "deletionlog": "protokolo pri forigoj",
+       "logentry-create-create": "$1 {{GENDER:$2|kreis}} paĝon $3",
        "reverted": "Malfaris al antaŭa revisio",
        "deletecomment": "Kialo:",
        "deleteotherreason": "Alia/plua kialo:",
        "contribsub2": "De {{GENDER:$3|$1}} ($2)",
        "contributions-userdoesnotexist": "Uzanto-konto \"$1\" ne estas registrita.",
        "nocontribs": "Trovis neniajn redaktojn laŭ tiu kriterio.",
-       "uctop": " (aktuala)",
+       "uctop": "nuna",
        "month": "Ekde monato (kaj pli frue):",
        "year": "Ekde jaro (kaj pli frue):",
        "sp-contributions-newbies": "Montri nur kontribuojn de novaj kontoj",
        "ipb-disableusertalk": "Preventi ĉi tiun uzanton redakti sian diskutpaĝon, dum ĝi estas forbarata",
        "ipb-change-block": "Reforbari la uzanton kun ĉi tiuj preferoj",
        "ipb-confirm": "Konfirmi forbaron",
+       "ipb-sitewide": "Tutreteja",
+       "ipb-partial": "Parta",
+       "ipb-pages-label": "Paĝoj",
        "badipaddress": "Neniu uzanto, aŭ la IP-adreso estas misformita.",
        "blockipsuccesssub": "Forbaro sukcesis.",
        "blockipsuccesstext": "[[Special:Contributions/$1|$1]] estas forbarita. <br />\nVidu la [[Special:BlockList|liston de forbaroj]] por kontroli.",
        "unblocked-id": "Forbaro $1 estas forigita.",
        "unblocked-ip": "[[Special:Contributions/$1|$1]] estis malforbarita.",
        "blocklist": "Forbaritaj uzantoj",
+       "autoblocklist-submit": "Serĉi",
        "ipblocklist": "Forbaritaj uzantoj",
        "ipblocklist-legend": "Trovi forbaritan uzanton.",
        "blocklist-userblocks": "Kaŝi konto-forbarojn",
        "createaccountblock": "Kreado de kontoj forbarita",
        "emailblock": "retpoŝto forbarita",
        "blocklist-nousertalk": "ne povas redakti sian propran diskuto-paĝon",
+       "blocklist-editing": "redaktado",
+       "blocklist-editing-sitewide": "redaktado (tutreteja)",
        "ipblocklist-empty": "La forbarlibro estas malplena.",
        "ipblocklist-no-results": "Ĉi tiu IP-adreso aŭ salutnomo ne estas forbarita.",
        "blocklink": "forbari",
        "ipbnounblockself": "Vi ne rajtas malforbari vin mem",
        "lockdb": "Ŝlosi datumbazon",
        "unlockdb": "Malŝlosi datumaron",
-       "lockdbtext": "Se vi ŝlosos la datumaron, tio malebligos al ĉiuj uzantoj\nredakti paĝojn, ŝanĝi preferojn, priumi atentarojn, kaj fari diversajn aliajn\naferojn, por kiuj nepras ŝanĝi la datumaron.\nBonvolu certigu, ke vi efektive intencas tion fari, kaj ke vi ja malŝlosos\nla datumaron post ol vi finos vian riparadon.",
-       "unlockdbtext": "Se vi malŝlosos la datumaron, tio reebligos al ĉiuj uzantoj\nredakti paĝojn, ŝanĝi preferojn, priumi la atentaron, kaj fari aliajn aferojn,\npor kiuj nepras ŝanĝi al la datumaro.\nBonvolu certigu, ke vi efektive intencas tion fari.",
+       "lockdbtext": "Se vi ŝlosos la datumaron, tio malebligos al ĉiuj uzantoj\nredakti paĝojn, ŝanĝi preferojn, priumi atentarojn, kaj fari diversajn aliajn\naferojn, por kiuj estas deviga ŝanĝi la datumaron.\nBonvolu certigu, ke vi efektive intencas tion fari, kaj ke vi ja malŝlosos\nla datumaron post ol vi finos vian riparadon.",
+       "unlockdbtext": "Se vi malŝlosos la datumaron, tio reebligos al ĉiuj uzantoj\nredakti paĝojn, ŝanĝi preferojn, priumi la atentaron, kaj fari aliajn aferojn,\npor kiuj estas deviga ŝanĝi al la datumaro.\nBonvolu certigu, ke vi efektive intencas tion fari.",
        "lockconfirm": "Jes, mi vere volas ŝlosi la datumaron.",
        "unlockconfirm": "Jes, mi vere volas malŝlosi la datumaron.",
        "lockbtn": "Ŝlosi datumbazon",
        "fix-double-redirects": "Ĝisdatigi iujn alidirektilojn kiuj direktas al la originala titolo",
        "move-leave-redirect": "Forlasi alidirektilon",
        "protectedpagemovewarning": "'''Averto:''' Ĉi tiu paĝo estis ŝlosita tiel nur uzantoj kun administranto-rajtoj povas movi ĝin.\nJen la lasta protokolero por via referenco:",
-       "semiprotectedpagemovewarning": "'''Averto:''' Ĉi tiu paĝo estis ŝlosita tiel ĝi estas nur movebla de registritaj uzantoj.\nJen la lasta protokolero por via referenco:",
+       "semiprotectedpagemovewarning": "<strong>Averto:</strong> Ĉi tiu paĝo estis ŝlosita tiel, ke ĝin povas movi nur aŭtomate konfirmitaj uzantoj.\nJen por vi la plej nova protokolero:",
        "move-over-sharedrepo": "[[:$1]] ekzistas en komuna dosierujo. Movado de dosiero al ĉi tiu titolo anstataŭigos la komunan dosieron.",
        "file-exists-sharedrepo": "La elektita dosiernomo jam estas uzita en komun dosierujo.\nBonvolu elekti alian nomon.",
        "export": "Elporti paĝojn",
        "tooltip-pt-watchlist": "Listo de paĝoj kies ŝanĝojn vi priatentas.",
        "tooltip-pt-mycontris": "Listo de viaj kontribuoj",
        "tooltip-pt-anoncontribs": "Listo de redaktoj faritaj el ĉi tiu IPa adreso",
-       "tooltip-pt-login": "Vi kuraĝigas ensaluti, tamen ne estas devige.",
+       "tooltip-pt-login": "Ni rekomendas ke vi ensalutu, kvankam tio ne estas devige.",
        "tooltip-pt-logout": "Elsaluti",
-       "tooltip-pt-createaccount": "Ni rekomendas al vi kreon de uzantokonto kaj ensaluto; tamen, tio ne estas deviga",
+       "tooltip-pt-createaccount": "Ni rekomendas ke vi kreu uzantokonton kaj ensalutu, kvankam tio ne estas deviga",
        "tooltip-ca-talk": "Diskuto pri la artikolo",
        "tooltip-ca-edit": "Redakti ĉi tiun paĝon",
        "tooltip-ca-addsection": "Starti novan sekcion",
        "tooltip-t-info": "Pli da informo pri ĉi tiu paĝo",
        "tooltip-t-upload": "Alŝuti dosierojn",
        "tooltip-t-specialpages": "Listo de ĉiuj specialaj paĝoj",
-       "tooltip-t-print": "Printebla versio de ĉi tiu paĝo",
+       "tooltip-t-print": "Presebla versio de ĉi tiu paĝo",
        "tooltip-t-permalink": "Konstanta ligilo al ĉi versio de la paĝo",
        "tooltip-ca-nstab-main": "Vidi la artikolon",
        "tooltip-ca-nstab-user": "Vidi la personan paĝon de la uzanto",
        "newimages-summary": "Ĉi tiu speciala paĝo montras la lastajn alŝutitajn dosierojn.",
        "newimages-legend": "Dosiernomo",
        "newimages-label": "Dosiernomo (aŭ parto de ĝi):",
+       "newimages-user": "IP-adreso aŭ uzantnomo",
        "newimages-showbots": "Montri alŝutojn per robotoj",
        "newimages-hidepatrolled": "Malvidigi la patrolitajn alŝutitojn",
        "noimages": "Nenio videbla.",
        "exif-nickname": "Malformala nomo de bildo",
        "exif-rating": "Taksado (el 5)",
        "exif-rightscertificate": "Atestilo de rajtoj-administrado",
-       "exif-copyrighted": "Aŭtorrajta statuso:",
+       "exif-copyrighted": "Aŭtorrajta stato:",
        "exif-copyrightowner": "Posedanto de la aŭtorrajto",
        "exif-usageterms": "Regularo pri uzado",
        "exif-webstatement": "Interreta deklarado pri aŭtorrajtoj",
        "version-specialpages": "Specialaj paĝoj",
        "version-parserhooks": "Sintaksaj hokoj",
        "version-variables": "Variabloj",
+       "version-editors": "Redaktoroj",
        "version-antispam": "Kontraŭspamilo",
        "version-other": "Alia",
        "version-mediahandlers": "Mediaj traktiloj",
        "version-license-not-found": "Por tiu ĉi etendilo ne estis trovitaj pli detalaj permesilaj informoj.",
        "version-credits-title": "Agnosko por $1",
        "version-credits-not-found": "Por tiu ĉi etendilo ne estis trovitaj pli detalaj informoj pri aŭtoroj.",
-       "version-poweredby-credits": "Ĉi tiu vikio funkcias per '''[https://www.mediawiki.org/ MediaWiki]''', aŭtorrajto ©&thinsp;2001–$1 $2.",
+       "version-poweredby-credits": "Ĉi tiu vikio funkcias per <strong>[https://www.mediawiki.org/ MediaWiki]</strong>, aŭtorrajto © 2001–$1 $2.",
        "version-poweredby-others": "aliaj",
        "version-poweredby-translators": "tradukantoj de translatewiki.net",
        "version-credits-summary": "Ni ŝatus agnoski la sekvajn personojn pro siaj kontribuoj al [[Special:Version|MediaWiki]].",
        "tags": "Validaj ŝanĝaj etikedoj",
        "tag-filter": "[[Special:Tags|Etikeda]] filtrilo:",
        "tag-filter-submit": "Filtrilo",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Etikedo|Etikedoj}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Etikedo|Etikedoj}}]]: $2",
        "tag-mw-contentmodelchange": "ŝanĝo de enhavomodelo",
        "tag-mw-contentmodelchange-description": "Redaktoj kiuj [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:ChangeContentModel ŝanĝas la enhavmodelon] de paĝo",
        "tags-title": "Etikedoj",
        "tags-create-reason": "Kialo:",
        "tags-create-submit": "Krei",
        "tags-create-no-name": "Vi devas specifi nomon de etikedo.",
-       "tags-create-invalid-chars": "Etikednomoj maldevas enhavi komojn (<code>,</code>) aŭ suprenstrekojn (<code>/</code>).",
+       "tags-create-invalid-chars": "La nomoj de etikedoj ne havu komojn (<code>,</code>), vertikalajn strekojn <code>|</code> aŭ suprenstrekojn (<code>/</code>).",
        "tags-create-invalid-title-chars": "Etikednomoj maldevas enhavi signojn, kiuj ne povas esti uzitaj en paĝo-titoloj.",
        "tags-create-already-exists": "La markilo \"$1\" jam ekzistas.",
        "tags-create-warnings-above": "Dum provo krei la etikedon \"$1\" estis {{PLURAL:$2|trafita jena atentigo|trafitaj jenaj atentigoj}}:",
        "compare-title-not-exists": "La titolo kiun vi specifis ne ekzistas.",
        "compare-revision-not-exists": "La revizio kiun vi specifis ne ekzistas.",
        "diff-form": "Malsamoj",
+       "permanentlink": "Konstanta ligilo",
        "dberr-problems": "Bedaŭrinde, ĉi tiu retejo suferas pro teknikaj problemoj.",
        "dberr-again": "Bonvolu atendi kelkajn minutojn kaj reŝargi.",
        "dberr-info": "(Ne eblas konekti la datumbazon: $1)",
        "dberr-info-hidden": "(Ne eblas konekti la datenbazon)",
-       "dberr-usegoogle": "Vi povas serĉi Guglon dume.",
-       "dberr-outofdate": "Notu ke iliaj indeksoj de nia enhavo eble ne estas ĝisdatigaj.",
-       "dberr-cachederror": "Jen kaŝmemorigita kopio de la petita paĝo, kaj eble ne estas ĝisdatigita.",
        "htmlform-invalid-input": "Estas problemoj kun iom da via enigo",
        "htmlform-select-badoption": "La valoro, kiun vi specifis, ne estas valida.",
        "htmlform-int-invalid": "La valoro, kiun vi specifis, ne estas entjero.",
        "htmlform-chosen-placeholder": "Elektu opcion",
        "htmlform-cloner-create": "Aldoni plian",
        "htmlform-cloner-delete": "Forigi",
-       "htmlform-cloner-required": "Almenaŭ unu valoro estas nepra.",
+       "htmlform-cloner-required": "Almenaŭ unu valoro estas deviga.",
        "htmlform-date-placeholder": "JJJJ-MM-TT",
        "htmlform-time-placeholder": "HH:MM:SS",
        "htmlform-datetime-placeholder": "JJJJ-MM-TT HH:MM:SS",
        "special-characters-title-endash": "mallonga streketo",
        "special-characters-title-emdash": "longa streketo",
        "special-characters-title-minus": "minus-signo",
-       "mw-widgets-abandonedit": "Ĉu vi vere volas foriri redaktan reĝimon sen konservo?",
+       "mw-widgets-abandonedit": "Ĉu vi vere volas forlasi la redaktan reĝimon sen konservo?",
        "mw-widgets-abandonedit-discard": "Forĵeti redaktojn",
        "mw-widgets-abandonedit-keep": "Redakti plu",
        "mw-widgets-abandonedit-title": "Ĉu vi certas?",
index 52d48e7..bf83063 100644 (file)
        "version-license-info": "MediaWiki es software libre; puede redistribuirlo o modificarlo según los términos de la Licencia General Pública de GNU tal como la publica la Free Software Foundation; ya sea la versión 2 de la licencia o (a su elección) cualquier versión posterior.\n\nMediaWiki se distribuye con la esperanza de que sea útil, pero <em>SIN NINGUNA GARANTÍA</em>; sin siquiera con la garantía implícita de <em>COMERCIABILIDAD</em> o de <em>IDONEIDAD PARA UN PROPÓSITO PARTICULAR</em>. Consulte la Licencia Pública General de GNU para más detalles.\n\nHa recibido [{{SERVER}}{{SCRIPTPATH}}/COPYING una copia de la Licencia Pública General de GNU] junto a este programa; si no es así, escríba a la Free Software Foundation, Inc., Calle Franklin 51, quinto piso, Boston, MA 02110-1301, EE. UU. o [//www.gnu.org/licenses/old-licenses/gpl-2.0.html léala en línea].",
        "fileduplicatesearch-summary": "Búsqueda de archivos duplicados en base a su valor hash.",
        "specialpages": "Páginas especiales",
-       "dberr-usegoogle": "Mientras tanto puede usted probar buscando a través de Google.",
        "htmlform-invalid-input": "Existen problemas con alguno de los datos que usted ha introducido",
        "htmlform-select-badoption": "El valo que usted ha especificado no es una opción válida.",
        "htmlform-int-invalid": "El valor que usted ha especificado no es un entero.",
index cb1d302..f0f713d 100644 (file)
                        "AHmed Khaled",
                        "Caleidoscopic",
                        "ديفيد",
-                       "LittlePuppers"
+                       "LittlePuppers",
+                       "Theklan",
+                       "Laura Ospina"
                ]
        },
        "tog-underline": "Subrayar los enlaces:",
-       "tog-hideminor": "Ocultar las ediciones menores de los cambios recientes",
-       "tog-hidepatrolled": "Ocultar las ediciones verificadas de los cambios recientes",
+       "tog-hideminor": "Ocultar las ediciones menores en cambios recientes",
+       "tog-hidepatrolled": "Ocultar las ediciones verificadas de cambios recientes",
        "tog-newpageshidepatrolled": "Ocultar las páginas verificadas de la lista de páginas nuevas",
        "tog-hidecategorization": "Ocultar la categorización de páginas",
        "tog-extendwatchlist": "Mostrar todos los cambios en la lista de seguimiento, no solo los más recientes",
-       "tog-usenewrc": "Agrupar los cambios por página en los cambios recientes y en la lista de seguimiento",
+       "tog-usenewrc": "Agrupar los cambios por página en cambios recientes y en la lista de seguimiento",
        "tog-numberheadings": "Numerar automáticamente los encabezados",
        "tog-editondblclick": "Editar páginas al hacer doble clic",
        "tog-editsectiononrightclick": "Permitir las modificaciones de sección al hacer clic derecho en sus títulos",
        "tog-watchcreations": "Añadir a mi lista de seguimiento las páginas que cree y los archivos que suba",
        "tog-watchdefault": "Añadir a mi lista de seguimiento las páginas y archivos que edite",
-       "tog-watchmoves": "Añadir a mi lista de seguimiento las páginas y archivos que mueva",
+       "tog-watchmoves": "Añadir a mi lista de seguimiento las páginas y archivos que traslade",
        "tog-watchdeletion": "Añadir las páginas y archivos que borre a mi lista de seguimiento",
        "tog-watchuploads": "Añadir a mi lista de seguimiento los archivos nuevos que suba",
        "tog-watchrollback": "Añadir a mi lista de seguimiento las páginas en las que haya realizado una reversión",
        "tog-enotifwatchlistpages": "Enviarme un mensaje de correo cuando se modifique una página o un archivo de mi lista de seguimiento",
        "tog-enotifusertalkpages": "Enviarme un mensaje de correo cuando se modifique mi página de discusión",
        "tog-enotifminoredits": "Notificarme también por correo electrónico los cambios menores de las páginas y archivos",
-       "tog-enotifrevealaddr": "Revelar mi dirección de correo electrónico en los correos de notificación",
+       "tog-enotifrevealaddr": "Mostrar mi dirección de correo electrónico en los correos de notificación",
        "tog-shownumberswatching": "Mostrar el número de usuarios que la vigilan",
        "tog-oldsig": "Tu firma actual:",
        "tog-fancysig": "Tratar la firma como wikitexto (sin un enlace automático)",
        "underline-default": "Configuración predeterminada de la apariencia o el navegador",
        "editfont-style": "Tipo de letra del área de edición:",
        "editfont-monospace": "Tipo de letra monoespaciado",
-       "editfont-sansserif": "Tipo de letra de palo seco",
-       "editfont-serif": "Tipo de letra con serifas",
+       "editfont-sansserif": "Tipo de letra Sans-serif",
+       "editfont-serif": "Tipo de letra con Serif",
        "sunday": "domingo",
        "monday": "lunes",
        "tuesday": "martes",
        "index-category": "Páginas indizadas",
        "noindex-category": "Páginas no indizadas",
        "broken-file-category": "Páginas con enlaces rotos a archivos",
+       "categoryviewer-pagedlinks": "($1) ($2)",
+       "category-header-numerals": "$1–$2",
        "about": "Acerca de",
        "article": "Página de contenido",
        "newwindow": "(se abre en una ventana nueva)",
        "versionrequired": "Se requiere la versión $1 de MediaWiki",
        "versionrequiredtext": "Se necesita la versión $1 de MediaWiki para utilizar esta página. Para más información, consulta [[Special:Version|la página de versión]].",
        "ok": "Aceptar",
+       "pagetitle": "$1 - {{SITENAME}}",
+       "pagetitle-view-mainpage": "{{SITENAME}}",
+       "backlinksubtitle": "← $1",
        "retrievedfrom": "Obtenido de «$1»",
        "youhavenewmessages": "{{PLURAL:$3|Tienes}} $1 ($2).",
        "youhavenewmessagesfromusers": "{{PLURAL:$4|Tienes}} $1 de {{PLURAL:$3|otro usuario|$3 usuarios}} ($2).",
        "page-rss-feed": "Canal RSS de «$1»",
        "page-atom-feed": "Canal Atom de «$1»",
        "feed-atom": "Atom",
+       "feed-rss": "RSS",
        "red-link-title": "$1 (la página no existe)",
        "sort-descending": "Orden descendente",
        "sort-ascending": "Orden ascendente",
        "badarticleerror": "Esta acción no se puede llevar a cabo en esta página.",
        "cannotdelete": "No se ha podido borrar la página o archivo «$1».\nPuede que ya haya sido borrado por otro usuario.",
        "cannotdelete-title": "No se puede borrar la página «$1»",
+       "delete-scheduled": "La página «$1» está programada para su borrado.\nPor favor se paciente.",
        "delete-hook-aborted": "Una extensión ha evitado el borrado de la página. No hay explicación disponible.",
-       "no-null-revision": "No se pudo crear una nueva revisión nula para la página «$1»",
+       "no-null-revision": "No se pudo crear una nueva revisión nula en la página «$1»",
        "badtitle": "Título incorrecto",
        "badtitletext": "El título de la página solicitada no es válido, está vacío, o es un título entre idiomas o interwiki incorrectamente vinculado.\nPuede que contenga uno o más caracteres que no se pueden usar en los títulos.",
        "title-invalid-empty": "El título de la página solicitada está vacío o contiene solo el nombre de un espacio de nombres.",
        "protectedpagetext": "Esta página ha sido protegida para evitar su edición u otras acciones.",
        "viewsourcetext": "Puedes ver y copiar el código fuente de esta página.",
        "viewyourtext": "Puedes ver y copiar el código de <strong>tus ediciones</strong> en esta página.",
-       "protectedinterface": "Esta página proporciona el texto de la interfaz del software en este wiki, y está protegida para prevenir el abuso.\nPara agregar o cambiar las traducciones para todos los wikis, usa [https://translatewiki.net/ translatewiki.net], el proyecto de localización de MediaWiki.",
+       "protectedinterface": "Esta página proporciona el texto de la interfaz del software en este wiki y está protegido para evitar abusos.\nPara agregar o cambiar las traducciones para todos los wikis, usa [https://translatewiki.net/ translatewiki.net], el proyecto de localización de MediaWiki.",
        "editinginterface": "<strong>Advertencia:</strong> estás editando una página usada para proporcionar texto de la interfaz al software. \nLos cambios en esta página afectarán la apariencia de la interfaz de los demás usuarios de este wiki.",
        "translateinterface": "Para añadir o cambiar traducciones para todos los wikis, usa [https://translatewiki.net/ translatewiki.net], el proyecto de regionalización de MediaWiki.",
        "cascadeprotected": "Esta página ha sido protegida contra edición porque está transcluida en {{PLURAL:$1|la siguiente página protegida|las siguientes páginas protegidas}} con la opción de «cascada» activa:\n$2",
        "namespaceprotected": "No tienes permiso para editar las páginas del espacio de nombres <strong>$1</strong>.",
-       "customcssprotected": "No tienes permiso para editar esta página CSS, porque contiene configuraciones personales de otro usuario.",
+       "customcssprotected": "No tienes permiso para editar esta página CSS porque contiene configuraciones personales de otro usuario.",
        "customjsonprotected": "No tienes permiso para editar esta página JSON porque contiene configuraciones personales de otro usuario.",
-       "customjsprotected": "No tienes permiso para editar esta página JavaScript, porque contiene configuraciones personales de otro usuario.",
+       "customjsprotected": "No tienes permiso para editar esta página JavaScript porque contiene configuraciones personales de otro usuario.",
        "sitecssprotected": "No tienes permiso para editar esta página CSS porque puede afectar a todos los visitantes.",
        "sitejsonprotected": "No tienes permiso para editar esta página JSON porque puede afectar a todos los visitantes.",
        "sitejsprotected": "No tienes permiso para editar esta página de JavaScript porque puede afectar a todos los visitantes.",
        "userlogin-yourpassword": "Contraseña",
        "userlogin-yourpassword-ph": "Escribe tu contraseña",
        "createacct-yourpassword-ph": "Escribe una contraseña",
-       "yourpasswordagain": "Confirma la contraseña:",
+       "yourpasswordagain": "Repite la contraseña:",
        "createacct-yourpasswordagain": "Confirma la contraseña",
-       "createacct-yourpasswordagain-ph": "Repite la contraseña",
+       "createacct-yourpasswordagain-ph": "Introduce de nuevo la contraseña",
        "userlogin-remembermypassword": "Mantener mi sesión iniciada",
        "userlogin-signwithsecure": "Usar conexión segura",
        "cannotlogin-title": "No se puede iniciar sesión",
        "nocookiesnew": "Se ha creado la cuenta de usuario, pero aún no has iniciado sesión.\n{{SITENAME}} usa <em>cookies</em> para identificar a los usuarios registrados.\nTu navegador tiene desactivadas las cookies.\nPor favor, actívalas e inicia sesión con tu nuevo nombre de usuario y contraseña.",
        "nocookieslogin": "{{SITENAME}} utiliza <em>cookies</em> para la autenticación de usuarios. Las <em>cookies</em> están desactivadas en tu navegador. Por favor, actívalas e inténtalo de nuevo.",
        "nocookiesfornew": "No se pudo crear la cuenta de usuario, porque no pudimos confirmar su origen.\nAsegúrate de que tienes las cookies activadas, luego recarga esta página e inténtalo de nuevo.",
+       "nocookiesforlogin": "{{int:nocookieslogin}}",
        "createacct-loginerror": "La cuenta se ha creado correctamente, pero no se pudo ingresar automáticamente. Procede al [[Special:UserLogin|acceso manual]].",
        "noname": "No se ha especificado un nombre de usuario válido.",
        "loginsuccesstitle": "Has accedido",
        "passwordtooshort": "Las contraseñas deben tener al menos {{PLURAL:$1|1 carácter|$1 caracteres}}.",
        "passwordtoolong": "Las contraseñas no deben tener más de {{PLURAL:$1|1 carácter|$1 caracteres}}.",
        "passwordtoopopular": "No es posible utilizar las contraseñas más comunes. Elige una que sea más difícil de descifrar.",
+       "passwordinlargeblacklist": "La contraseña usada está en la lista de contraseñas más usadas. Por favor selecciona una contraseña única.",
        "password-name-match": "Tu contraseña debe ser diferente de tu nombre de usuario.",
        "password-login-forbidden": "El uso de este nombre de usuario y contraseña han sido prohibidos.",
        "mailmypassword": "Restablecer la contraseña",
        "botpasswords-invalid-name": "El nombre de usuario especificado no contiene el separador de contraseña de bot («$1»).",
        "botpasswords-not-exist": "El usuario «$1» no tiene una contraseña de bot llamada «$2».",
        "botpasswords-needs-reset": "Se debe restablecer la contraseña del bot «$2», propiedad {{GENDER:$1|del usuario|de la usuaria}} «$1».",
+       "botpasswords-locked": "No puedes iniciar sesión con una contraseña de bot ya que tu cuenta está bloqueada.",
        "resetpass_forbidden": "No se pueden cambiar las contraseñas",
        "resetpass_forbidden-reason": "Las contraseñas no pueden cambiarse: $1",
        "resetpass-no-info": "Debes iniciar sesión para acceder directamente a esta página.",
        "resetpass-submit-loggedin": "Cambiar contraseña",
        "resetpass-submit-cancel": "Cancelar",
        "resetpass-wrong-oldpass": "La contraseña actual, o temporal, no es correcta.\nPuede que ya hayas cambiado tu contraseña o que hayas pedido una nueva contraseña temporal.",
-       "resetpass-recycled": "Cambia tu contraseña a algo distinto de tu contraseña actual.",
+       "resetpass-recycled": "Cambia tu contraseña por otra que no sea tu contraseña actual.",
        "resetpass-temp-emailed": "Has iniciado sesión con una contraseña temporal enviada por correo electrónico.\nPara continuar, debes establecer una nueva contraseña aquí:",
        "resetpass-temp-password": "Contraseña temporal:",
        "resetpass-abort-generic": "Una extensión ha cancelado el cambio de la contraseña.",
        "resetpass-expired": "Tu contraseña ha caducado. Por favor, establece una nueva contraseña para iniciar sesión.",
-       "resetpass-expired-soft": "Tu contraseña ha caducado, por lo que debes cambiarla. Elige ahora una contraseña nueva o pulsa en «{{int:authprovider-resetpass-skip-label}}» para cambiarla más tarde.",
+       "resetpass-expired-soft": "Tu contraseña ha caducado, por lo que debes cambiarla. Elige una contraseña nueva o pulsa en «{{int:authprovider-resetpass-skip-label}}» para cambiarla más tarde.",
        "resetpass-validity-soft": "La contraseña no es válida: $1\n\nCámbiala ahora por una nueva, o bien, pulsa en «{{int:authprovider-resetpass-skip-label}}» para cambiarla más tarde.",
        "passwordreset": "Restablecer contraseña",
        "passwordreset-text-one": "Completa este formulario para recibir una contraseña temporal por correo electrónico.",
        "passwordreset-emailelement": "Nombre de {{GENDER:$1|usuario|usuaria}}: \n$1\n\nContraseña temporal: \n$2",
        "passwordreset-emailsentemail": "Si esta dirección de correo electrónico está asociada a tu cuenta, entonces se enviará un correo electrónico para restablecer la contraseña.",
        "passwordreset-emailsentusername": "Si existe una dirección de correo electrónico asociada a este nombre de usuario, entonces se enviará un correo para restablecer la contraseña.",
-       "passwordreset-nocaller": "Debe de proporcionarse un interlocutor",
-       "passwordreset-nosuchcaller": "La persona que llama no existe: $1",
+       "passwordreset-nocaller": "Debes proporcionar un interlocutor",
+       "passwordreset-nosuchcaller": "El interlocutor no existe: $1",
        "passwordreset-ignored": "No se logró el reestablecimiento de la contraseña. ¿Tal vez no se configuró un proveedor?",
        "passwordreset-invalidemail": "Dirección de correo electrónico no válida.",
        "passwordreset-nodata": "No se ha proporcionado ni un nombre de usuario ni una dirección de correo electrónico",
        "resettokens-no-tokens": "No hay claves para restablecer.",
        "resettokens-tokens": "Claves:",
        "resettokens-token-label": "$1 (valor actual: $2)",
-       "resettokens-watchlist-token": "Clave para el canal (RSS/Atom) de los [[Special:Watchlist|cambios a las páginas en tu lista de seguimiento]]",
+       "resettokens-watchlist-token": "Clave del canal (Atom/RSS) de [[Special:Watchlist|cambios en las páginas de tu lista de seguimiento]]",
        "resettokens-done": "Restablecimiento de claves.",
        "resettokens-resetbutton": "Restablecer las claves",
        "bold_sample": "Texto en negrita",
        "subject-preview": "Previsualización del asunto:",
        "previewerrortext": "Se ha producido un error al intentar previsualizar tus cambios.",
        "blockedtitle": "El usuario está bloqueado",
-       "blockedtext": "<strong>Tu nombre de usuario o dirección IP ha sido bloqueada.</strong>\n\nEl bloqueo fue realizado por $1.\nEl motivo dado es el siguiente: <em>$2</em>.\n\n* Inicio del bloqueo: $8\n* Caducidad del bloqueo: $6\n* Bloqueo destinado a: $7\n\nPuedes contactar con $1 o con otro de los [[{{MediaWiki:Grouppage-sysop}}|administradores]] para discutir el bloqueo.\nObserva que no puedes utilizar la función «{{int:emailuser}}» a menos que hayas registrado una dirección de correo electrónico válida en tus [[Special:Preferences|preferencias de usuario]] y la función no haya sido también bloqueada.\nTu dirección IP actual es $3, y el identificador del bloqueo es el n.º $5.\nIncluye todos los datos aquí mostrados en cualquier consulta que hagas.",
+       "blocked-email-user": "<strong>Tu usuario ha sido bloqueado para evitar el envío de correos electrónicos. Aún puedes editar otras páginas en este wiki.</strong> Puedes ver los detalles completos del bloqueo en [[Special:MyContributions|Contribuciones del usuario]].\n\nEl bloqueo fue realizado por $1.\n\nLa razón dada es <em>$2</em>.\n\n* Inicio de bloqueo: $8\n* Caducidad del bloqueo: $6\n* Bloqueo destinado a: $7\n* Id. del bloqueo n.º $5",
+       "blockedtext-partial": "<strong>Se ha bloqueado tu usuario o dirección IP para para evitar que realices cambios en esta página. Aún puedes editar otras páginas en este wiki.</strong> Puedes ver los detalles completos del bloqueo en [[Special:MyContributions|Contribuciones del usuario]].\n\nEl bloqueo fue realizado por $1.\n\nLa razón dada es <em>$2</em>.\n\n* Inicio de bloqueo: $8\n* Caducidad del bloqueo: $6\n* Bloqueo destinado a: $7\n* Id. del bloqueo n.º $5",
+       "blockedtext": "<strong>Se ha bloqueado tu nombre de usuario o dirección IP.</strong>\n\nEl bloqueo fue realizado por $1.\nEl motivo dado es el siguiente: <em>$2</em>.\n\n* Inicio del bloqueo: $8\n* Caducidad del bloqueo: $6\n* Bloqueo destinado a: $7\n\nPuedes contactar con $1 o con otro de los [[{{MediaWiki:Grouppage-sysop}}|administradores]] para discutir el bloqueo.\nObserva que no puedes utilizar la función «{{int:emailuser}}» a menos que hayas registrado una dirección de correo electrónico válida en tus [[Special:Preferences|preferencias de usuario]] y la función no haya sido también bloqueada.\nTu dirección IP actual es $3, y el identificador del bloqueo es el n.º $5.\nIncluye todos los datos aquí mostrados en cualquier consulta que hagas.",
        "autoblockedtext": "Tu dirección IP ha sido bloqueada automáticamente porque fue utilizada por otro usuario, que resultó bloqueado por $1.\nEl motivo dado es el siguiente:\n\n:<em>$2</em>\n\n* Inicio del bloqueo: $8\n* Caducidad del bloqueo: $6\n* Bloqueo destinado a: $7\n\nPuedes contactar con $1 o con otro de los [[{{MediaWiki:Grouppage-sysop}}|administradores]] para discutir el bloqueo.\n\nObserva que no puedes utilizar la función «{{int:emailuser}}» a menos que hayas registrado una dirección de correo electrónico válida en tus [[Special:Preferences|preferencias de usuario]] y la función no haya sido también bloqueada.\n\nTu dirección IP actual es $3, y el identificador del bloqueo es n.º $5.\nIncluye todos los datos aquí mostrados en cualquier consulta que hagas.",
        "systemblockedtext": "Tu nombre de usuario o dirección IP ha sido bloqueado automáticamente por el software MediaWiki.\nLa razón dada es:\n\n:<em>$2</em>\n\n* Inicio del bloqueo: $8\n* Caducidad de bloqueo: $6\n* Destinatario del bloqueo: $7\n\nTu dirección IP actual es $3.\nPor favor, incluye todos los datos aquí mostrados en cualquier consulta que hagas.",
        "blockednoreason": "no se ha especificado el motivo",
        "template-semiprotected": "(semiprotegida)",
        "hiddencategories": "Esta página pertenece a {{PLURAL:$1|1 categoría oculta|$1 categorías ocultas}}:",
        "edittools": "<!-- Este texto aparecerá bajo los formularios de edición y subida. -->",
+       "edittools-upload": "-",
        "nocreatetext": "{{SITENAME}} ha restringido la posibilidad de crear nuevas páginas.\nPuedes volver atrás y editar una página existente, [[Special:UserLogin|identificarte o crear una cuenta]].",
        "nocreate-loggedin": "No tienes permiso para crear páginas nuevas.",
        "sectioneditnotsupported-title": "Edición de sección no admitida",
        "permissionserrorstext": "No tienes permiso para hacer eso, por {{PLURAL:$1|el siguiente motivo|los siguientes motivos}}:",
        "permissionserrorstext-withaction": "No tienes permiso para $2, por {{PLURAL:$1|el siguiente motivo|los siguientes motivos}}:",
        "contentmodelediterror": "No puedes editar esta revisión porque su modelo de contenido es <code>$1</code>, que difiere del modelo actual de contenido de la página <code>$2</code>.",
-       "recreate-moveddeleted-warn": "<strong>Atención: estás volviendo a crear una página que ha sido borrada anteriormente.</strong>\n\nPiensa si es adecuado continuar editando la página.\nA continuación, se proporciona el registro de borrado y traslados de esta página para más información:",
+       "recreate-moveddeleted-warn": "<strong>Atención: estás volviendo a crear una página que ha sido borrada anteriormente.</strong>\n\nComprueba si es adecuado continuar editándola. A continuación se muestra el registro de borrados y traslados de esta página para más información:",
        "moveddeleted-notice": "Esta página ha sido borrada.\nA continuación se muestra como referencia el registro de eliminaciones, protecciones y traslados de la página.",
        "moveddeleted-notice-recent": "Esta página se ha eliminado recientemente (durante las últimas 24 horas).\nA continuación, se muestra el registro de eliminaciones, protecciones y traslados de la página a modo de referencia.",
        "log-fulllog": "Ver el registro completo",
        "content-model-text": "texto sin formato",
        "content-model-javascript": "JavaScript",
        "content-model-css": "CSS",
+       "content-model-json": "JSON",
        "content-json-empty-object": "Objeto vacío",
        "content-json-empty-array": "Matriz vacía",
        "deprecated-self-close-category": "Páginas que utilizan etiquetas HTML autocerradas no válidas",
        "cantcreateaccount-text": "[[User:$3|$3]] ha bloqueado la creación de cuentas desde esta dirección IP (<strong>$1</strong>).\n\nEl motivo dado por $3 es <em>$2</em>",
        "cantcreateaccount-range-text": "[[User:$3|$3]] ha bloqueado la creación de cuentas de usuario desde direcciones IP en el rango <strong>$1</strong>, en el que se encuentra tu dirección IP (<strong>$4</strong>).\n\nEl motivo dado por $3 es <em>$2</em>",
        "viewpagelogs": "Ver los registros de esta página",
-       "nohistory": "No hay historial de ediciones para esta página.",
+       "nohistory": "No hay historial de ediciones de esta página.",
        "currentrev": "Revisión actual",
        "currentrev-asof": "Revisión actual del $1",
        "revisionasof": "Revisión del $1",
        "historysize": "({{PLURAL:$1|1 byte|$1 bytes}})",
        "historyempty": "(vacío)",
        "history-feed-title": "Historial de revisiones",
-       "history-feed-description": "Historial de revisiones para esta página en el wiki",
+       "history-feed-description": "Historial de revisiones de esta página en el wiki",
        "history-feed-item-nocomment": "$1 en $2",
        "history-feed-empty": "La página solicitada no existe.\nPuede que haya sido renombrada o borrada del wiki.\nPrueba a [[Special:Search|buscar en el wiki]] otras páginas relacionadas.",
        "history-edit-tags": "Editar etiquetas de revisiones seleccionadas",
        "mergehistory-comment": "Se ha fusionado [[:$1]] en [[:$2]]: $3",
        "mergehistory-same-destination": "Las páginas origen y destino no pueden ser la misma",
        "mergehistory-reason": "Motivo:",
+       "mergehistory-revisionrow": "$1 ($2) $3 . . $4 $5 $6",
        "mergelog": "Registro de fusiones",
        "revertmerge": "Deshacer fusión",
        "mergelogpagetext": "A continuación se muestra una lista de las fusiones de historiales más recientes.",
        "stub-threshold-disabled": "Desactivado",
        "recentchangesdays": "Días que mostrar en los cambios recientes:",
        "recentchangesdays-max": "Máximo {{PLURAL:$1|un día|$1 días}}",
-       "recentchangescount": "Número de ediciones que mostrar de manera predeterminada en Cambios recientes, los historiales de las páginas y en los registros:",
+       "recentchangescount": "Número de ediciones que mostrar de manera predeterminada en cambios recientes, en los historiales de las páginas y en los registros:",
        "prefs-help-recentchangescount": "Número máximo: 1000",
        "prefs-help-watchlist-token2": "Esta es la clave secreta del suministro web de tu lista de seguimiento.\nCualquiera que la conozca podrá consultar la lista, así que no la compartas.\n[[Special:ResetTokens|Puedes restablecerla si lo necesitas]].",
        "prefs-help-tokenmanagement": "Puedes ver y reiniciar la clave secreta que te permite ver tu lista de seguimiento vía Web. Cualquier persona que conozca dicha clave podrá ver tu lista de seguimiento. No la compartas.",
        "youremail": "Correo electrónico:",
        "username": "{{GENDER:$1|Nombre de usuario|Nombre de usuaria}}:",
        "prefs-memberingroups": "{{GENDER:$2|Miembro}} {{PLURAL:$1|del grupo|de los grupos}}:",
+       "prefs-memberingroups-type": "$1",
        "group-membership-link-with-expiry": "$1 (hasta $2)",
        "prefs-registration": "Fecha y hora de registro:",
+       "prefs-registration-date-time": "$1",
        "yourrealname": "Nombre real:",
        "yourlanguage": "Idioma:",
        "yourvariant": "Variante lingüística del contenido:",
        "email": "Correo electrónico",
        "prefs-help-realname": "El nombre real es opcional.\nSi lo proporcionas, se usará para dar atribución a tu trabajo.",
        "prefs-help-email": "La dirección de correo electrónico es opcional, pero es necesaria para el restablecimiento de tu contraseña, en caso de que la olvides.",
-       "prefs-help-email-others": "También puedes permitir que otros usuarios te contacten por correo a través de un enlace en tus páginas de usuario y de discusión.\nTu dirección de correo no se revela cuando otros usuarios te contactan.",
+       "prefs-help-email-others": "También puedes permitir que otros usuarios contacten contigo por correo electrónico a través de un enlace en tu página de usuario o de discusión.\nTu dirección de correo no se muestra cuando otros usuarios se ponen en contacto contigo.",
        "prefs-help-email-required": "Es necesario proporcionar una dirección de correo electrónico.",
        "prefs-info": "Información básica",
        "prefs-i18n": "Internacionalización",
        "prefs-editor": "Editor",
        "prefs-preview": "Previsualización",
        "prefs-advancedrc": "Opciones avanzadas",
-       "prefs-opt-out": "Renunciar a las mejoras",
        "prefs-advancedrendering": "Opciones avanzadas",
        "prefs-advancedsearchoptions": "Opciones avanzadas",
        "prefs-advancedwatchlist": "Opciones avanzadas",
        "prefs-displayrc": "Opciones de visualización",
        "prefs-displaywatchlist": "Opciones de visualización",
+       "prefs-changesrc": "Cambios mostrados",
+       "prefs-changeswatchlist": "Cambios mostrados",
+       "prefs-pageswatchlist": "Páginas vistas",
        "prefs-tokenwatchlist": "Clave",
        "prefs-diffs": "Diferencias",
        "prefs-help-prefershttps": "Los cambios surtirán efecto en tu próximo inicio de sesión.",
        "saveusergroups": "Guardar grupos {{GENDER:$1|del usuario|de la usuaria}}",
        "userrights-groupsmember": "Miembro de:",
        "userrights-groupsmember-auto": "Miembro implícito de:",
+       "userrights-groupsmember-type": "$1",
        "userrights-groups-help": "Puedes modificar los grupos a los que pertenece {{GENDER:$1|este usuario|esta usuaria}}:\n* Una casilla marcada significa que {{GENDER:$1|el usuario|la usuaria}} está en ese grupo.\n* Una casilla sin marcar significa que {{GENDER:$1|el usuario|la usuaria}} no está en ese grupo.\n* Un * indica que no podrás eliminar el grupo una vez que lo añadas, o viceversa.\n* Un # indica que puedes únicamente postergar, y no adelantar, la fecha de caducidad de la membresía a este grupo.",
        "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.",
        "userrights-changeable-col": "Grupos que puedes cambiar",
        "userrights-unchangeable-col": "Grupos que no puedes cambiar",
+       "userrights-irreversible-marker": "$1*",
        "userrights-expiry-current": "Caduca el $1",
        "userrights-expiry-none": "No caduca",
        "userrights-expiry": "Caduca:",
        "grant-editprotected": "Editar páginas protegidas",
        "grant-highvolume": "Gran cantidad de ediciones",
        "grant-oversight": "Ocultar a los usuarios y suprimir las revisiones",
-       "grant-patrol": "Verificar cambios a páginas",
+       "grant-patrol": "Verificar cambios en páginas",
        "grant-privateinfo": "Acceder a información privada",
        "grant-protect": "Proteger y desproteger páginas",
-       "grant-rollback": "Revertir cambios a páginas",
+       "grant-rollback": "Revertir cambios en páginas",
        "grant-sendemail": "Enviar mensajes de correo a otros usuarios",
        "grant-uploadeditmovefile": "Subir, reemplazar y renombrar archivos",
        "grant-uploadfile": "Subir archivos nuevos",
        "action-suppressrevision": "revisar y restaurar revisiones ocultas",
        "action-suppressionlog": "ver este registro privado",
        "action-block": "bloquear a este usuario para que no edite",
-       "action-protect": "cambiar los niveles de protección para esta página",
+       "action-protect": "cambiar los niveles de protección en esta página",
        "action-rollback": "revertir rápidamente las ediciones del último usuario que modificó una página en particular",
        "action-import": "importar páginas desde otro wiki",
        "action-importupload": "importar páginas mediante la carga de un archivo",
        "rcfilters-liveupdates-button-title-off": "Mostar los cambios en tiempo real",
        "rcfilters-watchlist-markseen-button": "Marcar todos los cambios como vistos",
        "rcfilters-watchlist-edit-watchlist-button": "Edita tu lista de seguimiento",
-       "rcfilters-watchlist-showupdated": "Los cambios hechos a páginas que no has visitado desde que se efectuaron aparecen en <strong>negrita</strong>, acompañados de marcadores sólidos.",
-       "rcfilters-preference-label": "Ocultar la versión mejorada de cambios recientes",
-       "rcfilters-preference-help": "Revierte el rediseño de la interfaz de 2017 y desactiva todas las herramientas añadidas desde entonces.",
-       "rcfilters-watchlist-preference-label": "Ocultar la versión mejorada de la lista de seguimiento",
-       "rcfilters-watchlist-preference-help": "Revierte el rediseño de la interfaz de 2017 y desactiva todas las herramientas añadidas desde entonces.",
+       "rcfilters-watchlist-showupdated": "Los cambios hechos en páginas que no has visitado desde que se efectuaron aparecen en <strong>negrita</strong>, acompañados de marcadores sólidos.",
+       "rcfilters-preference-label": "Usar la interfaz sin JavaScript",
+       "rcfilters-preference-help": "Cargar cambios recientes sin filtros ni la funcionalidad de resaltado.",
+       "rcfilters-watchlist-preference-label": "Usar interfaz sin JavaScript",
+       "rcfilters-watchlist-preference-help": "Cargar la lista de seguimiento sin filtros ni la funcionalidad de resaltado.",
        "rcfilters-filter-showlinkedfrom-label": "Mostrar cambios en páginas enlazadas desde",
        "rcfilters-filter-showlinkedfrom-option-label": "<strong>Páginas enlazadas desde</strong> la página seleccionada",
        "rcfilters-filter-showlinkedto-label": "Mostrar cambios en páginas que enlazan a",
        "fileexists-thumbnail-yes": "El archivo parece ser una imagen de tamaño reducido ''(thumbnail)''. [[$1|thumb]]\nPor favor comprueba el archivo <strong>[[:$1]]</strong>.\nSi el archivo comprobado es la misma imagen a tamaño original no es necesario subir un thumbnail más.",
        "file-thumbnail-no": "El nombre del archivo comienza con <strong>$1</strong>.\nParece ser una imagen de tamaño reducido ''(thumbnail)''.\nSi tiene esta imagen a toda resolución súbala, si no, por favor cambie el nombre del archivo.",
        "fileexists-forbidden": "Ya existe un archivo con este nombre, y no puede ser grabado encima de otro. Si quiere subir su archivo de todos modos, por favor vuelva atrás y utilice otro nombre. [[File:$1|thumb|center|$1]]",
-       "fileexists-shared-forbidden": "Ya existe un archivo con este nombre en el repositorio compartido.\nSi todavía quiere subir su archivo, por favor, regrese a la página anterior y use otro nombre. [[File:$1|thumb|center|$1]]",
+       "fileexists-shared-forbidden": "Ya existe un archivo con este nombre en el repositorio compartido.\nSi todavía quieres subir tu archivo, por favor, regresa a la página anterior y usa otro nombre. [[File:$1|thumb|center|$1]]",
        "fileexists-no-change": "Este es un duplicado exacto de la versión actual de <strong>[[:$1]]</strong>.",
        "fileexists-duplicate-version": "Este es un duplicado exacto de {{PLURAL:$2|una versión anterior|versiones anteriores}} de <strong>[[:$1]]</strong>.",
        "file-exists-duplicate": "Este archivo es un duplicado {{PLURAL:$1|del siguiente|de los siguientes}}:",
        "file-deleted-duplicate": "Un archivo idéntico a este ([[:$1]]) ha sido borrado con anterioridad. Debes comprobar el historial de borrado del archivo ante de volver a subirlo.",
-       "file-deleted-duplicate-notitle": "Un archivo idéntico a este ha sido borrado con anterioridad, y el título ha sido suprimido. Deberías contactar con alguien capaz de ver los datos de archivos borrados para que revise esta situación antes de proceder a subir de nuevo este archivo.",
+       "file-deleted-duplicate-notitle": "Un archivo idéntico a este ha sido borrado con anterioridad y el título ha sido suprimido. Deberías contactar con alguien capaz de ver los datos de archivos borrados para que revise esta situación antes de proceder a subir de nuevo este archivo.",
        "uploadwarning": "Alerta de carga",
        "uploadwarning-text": "Modifica la descripción del archivo abajo indicada e inténtalo de nuevo.",
        "uploadwarning-text-nostash": "Carga el archivo una vez más, modifica la descripción siguiente e inténtalo de nuevo.",
        "prefixindex": "Todas las páginas con prefijo",
        "prefixindex-namespace": "Todas las páginas con el prefijo (espacio de nombres $1)",
        "prefixindex-submit": "Mostrar",
-       "prefixindex-strip": "Quitar prefijos en la lista",
+       "prefixindex-strip": "Ocultar el prefijo en los resultados",
        "shortpages": "Páginas cortas",
        "longpages": "Páginas largas",
        "deadendpages": "Páginas sin salida",
        "apisandbox-dynamic-parameters-add-label": "Añadir parámetro:",
        "apisandbox-dynamic-parameters-add-placeholder": "Nombre del parámetro",
        "apisandbox-dynamic-error-exists": "Ya existe un parámetro llamado \"$1\".",
+       "apisandbox-templated-parameter-reason": "Esta [[Special:ApiHelp/main#main/templatedparams|plantilla de parámetros]] se ofrece en función {{PLURAL:$1|del valor|de los valores}} de $2.",
        "apisandbox-deprecated-parameters": "Parámetros en desuso",
        "apisandbox-fetch-token": "Rellenar la ficha automáticamente",
        "apisandbox-add-multi": "Añadir",
        "apisandbox-request-selectformat-label": "Mostrar los datos de la petición como:",
        "apisandbox-request-format-url-label": "Cadena de consulta de la URL",
        "apisandbox-request-url-label": "Petición URL:",
+       "apisandbox-request-format-json-label": "JSON",
        "apisandbox-request-json-label": "Petición JSON:",
        "apisandbox-request-time": "Tiempo de solicitud: {{PLURAL:$1|$1 ms}}",
        "apisandbox-results-fixtoken": "Corrige el token y vuelve a enviar",
        "enotif_lastvisited": "Consulta $1 para ver todos los cambios desde tu última visita",
        "enotif_lastdiff": "Consulta $1 para ver este cambio",
        "enotif_anon_editor": "usuario anónimo $1",
-       "enotif_body": "Hola, $WATCHINGUSERNAME:\n\n$PAGEINTRO $NEWPAGE\n\nResumen del editor: $PAGESUMMARY $PAGEMINOREDIT\n\nContacta con el editor:\ncorreo: $PAGEEDITOR_EMAIL\nwiki: $PAGEEDITOR_WIKI\n\nNo enviaremos más notificaciones si ocurre más actividad, a menos que visites esta página con la sesión iniciada. También puedes restablecer los estados de notificación para todas las páginas en tu lista de seguimiento.\n\nAtentamente, el sistema de notificaciones de {{SITENAME}}\n\n--\nPara cambiar tus ajustes de notificación por correo, visita\n{{canonicalurl:{{#special:Preferences}}}}\n\nPara cambiar los ajustes de tu lista de seguimiento, visita\n{{canonicalurl:{{#special:EditWatchlist}}}}\n\nPara quitar la página de tu lista de seguimiento, visita\n$UNWATCHURL\n\nPara ayuda y comentarios:\n$HELPPAGE",
+       "enotif_body": "Hola, $WATCHINGUSERNAME:\n\n$PAGEINTRO $NEWPAGE\n\nResumen del editor: $PAGESUMMARY $PAGEMINOREDIT\n\nContacta con el editor:\ncorreo: $PAGEEDITOR_EMAIL\nwiki: $PAGEEDITOR_WIKI\n\nNo enviaremos más notificaciones si ocurre más actividad, a menos que visites esta página con la sesión iniciada. También puedes restablecer los estados de notificación en todas las páginas de tu lista de seguimiento.\n\nAtentamente, el sistema de notificaciones de {{SITENAME}}\n\n--\nPara cambiar tus ajustes de notificación por correo, visita\n{{canonicalurl:{{#special:Preferences}}}}\n\nPara cambiar los ajustes de tu lista de seguimiento, visita\n{{canonicalurl:{{#special:EditWatchlist}}}}\n\nPara quitar la página de tu lista de seguimiento, visita\n$UNWATCHURL\n\nPara ayuda y comentarios:\n$HELPPAGE",
        "enotif_minoredit": "Esta es una edición menor",
        "created": "creada",
        "changed": "modificada",
        "contribsub2": "Para {{GENDER:$3|$1}} ($2)",
        "contributions-userdoesnotexist": "La cuenta de usuario «$1» no está registrada.",
        "nocontribs": "No se encontraron cambios que cumplieran estos criterios.",
-       "uctop": "(edición actual)",
+       "uctop": "edición actual",
        "month": "Desde el mes (y anteriores):",
        "year": "Desde el año (y anteriores):",
        "date": "Desde el día (y anteriores):",
        "ipaddressorusername": "Dirección IP o nombre de usuario:",
        "ipbexpiry": "Caducidad:",
        "ipbreason": "Motivo:",
-       "ipbreason-dropdown": "*Motivos comunes de bloqueo\n** Añadir información falsa\n** Eliminar contenido de las páginas\n** Publicitar enlaces a otras páginas web\n** Añadir basura a las páginas\n** Comportamiento intimidatorio u hostil\n** Abuso de múltiples cuentas\n** Nombre de usuario inaceptable",
+       "ipbreason-dropdown": "*Motivos comunes de bloqueo\n** Añadir información falsa\n** Eliminar contenido de las páginas\n** Publicitar enlaces a otras páginas web\n** Añadir basura en las páginas\n** Comportamiento intimidatorio u hostil\n** Abuso de múltiples cuentas\n** Nombre de usuario inaceptable",
        "ipb-hardblock": "Impedir que los usuarios identificados editen desde esta dirección IP",
        "ipbcreateaccount": "Prevenir la creación de cuentas de usuario",
        "ipbemailban": "Impedir que el usuario envíe correo electrónico",
        "ipb-disableusertalk": "Impedir que este usuario edite su propia página de discusión mientras esté bloqueado",
        "ipb-change-block": "Rebloquear al usuario con estos datos",
        "ipb-confirm": "Confirmar bloqueo",
+       "ipb-sitewide": "En todo el sitio",
+       "ipb-partial": "Parcial",
+       "ipb-type-label": "Tipo",
+       "ipb-pages-label": "Páginas",
        "badipaddress": "La dirección IP no tiene el formato correcto.",
        "blockipsuccesssub": "Bloqueo realizado con éxito",
        "blockipsuccesstext": "\"[[Special:Contributions/$1|$1]]\" ha sido bloqueado.<br />\nVéase la [[Special:BlockList|lista de bloqueos]] para revisarlo.",
        "createaccountblock": "creación de cuenta bloqueada",
        "emailblock": "correo electrónico bloqueado",
        "blocklist-nousertalk": "no puede editar su propia página de discusión",
+       "blocklist-editing": "editando",
+       "blocklist-editing-sitewide": "edición (en todo el sitio)",
        "ipblocklist-empty": "La lista de bloqueos está vacía.",
        "ipblocklist-no-results": "El nombre de usuario o IP indicado no está bloqueado.",
        "blocklink": "bloquear",
        "move-watch": "Vigilar páginas de origen y destino",
        "movepagebtn": "Trasladar la página",
        "pagemovedsub": "Traslado realizado con éxito",
+       "cannotmove": "La página podría no trasladarse por {{PLURAL:$1|el siguiente motivo|los siguientes motivos}}:",
        "movepage-moved": "<strong>«$1» ha sido trasladada a «$2»</strong>",
        "movepage-moved-redirect": "Se ha creado una redirección.",
        "movepage-moved-noredirect": "Se ha suprimido la creación de la redirección.",
+       "movepage-delete-first": "La página de destino tiene demasiadas revisiones a eliminar como parte de una página trasladada. Primero elimina la página de forma manual y a continuación inténtalo de nuevo.",
        "articleexists": "Ya existe una página con ese nombre o el nombre que elegiste no es válido.\nElige otro nombre.",
        "cantmove-titleprotected": "No puedes trasladar la página a esta ubicación, porque el nuevo título ha sido protegido para evitar su creación.",
        "movetalk": "Renombrar la página de discusión asociada",
        "import-interwiki-text": "Selecciona un wiki y un título de página para importar.\nLas fechas de revisiones y los nombres de editores se preservarán.\nTodas las importaciones de otros wikis se registran en el [[Special:Log/import|registro de importaciones]].",
        "import-interwiki-sourcewiki": "Wiki de origen:",
        "import-interwiki-sourcepage": "Página de origen:",
-       "import-interwiki-history": "Copiar todas las versiones históricas para esta página",
+       "import-interwiki-history": "Copiar todas las versiones históricas de esta página",
        "import-interwiki-templates": "Incluir todas las plantillas",
        "import-interwiki-submit": "Importar",
        "import-mapping-default": "Importar a ubicaciones predeterminadas",
        "tooltip-ca-protect": "Proteger esta página",
        "tooltip-ca-unprotect": "Cambiar protección de esta página",
        "tooltip-ca-delete": "Borrar esta página",
-       "tooltip-ca-undelete": "Restaurar las ediciones hechas a esta página antes de que fuese borrada",
+       "tooltip-ca-undelete": "Restaurar las ediciones hechas en esta página antes de que fuese borrada",
        "tooltip-ca-move": "Trasladar esta página",
        "tooltip-ca-watch": "Añadir esta página a tu lista de seguimiento",
        "tooltip-ca-unwatch": "Quitar esta página de tu lista de seguimiento",
        "siteusers": "{{PLURAL:$2|{{GENDER:$1|el usuario|la usuaria}}|los usuarios}} $1 de {{SITENAME}}",
        "anonusers": "{{PLURAL:$2|el usuario anónimo|los usuarios anónimos}} $1 de {{SITENAME}}",
        "creditspage": "Créditos de la página",
-       "nocredits": "No hay información de créditos para esta página.",
+       "nocredits": "No hay información de créditos en esta página.",
        "spamprotectiontitle": "Filtro de protección contra spam",
        "spamprotectiontext": "La página que quería guardar fue bloqueada por el filtro de spam.\nEsto podría estar causado por un enlace a un sitio externo incluido en la lista negra.",
        "spamprotectionmatch": "El siguiente texto es el que activó nuestro filtro de spam: $1",
        "previousdiff": "← Edición anterior",
        "nextdiff": "Edición siguiente →",
        "mediawarning": "<strong>Atención:</strong> este archivo puede contener código malicioso.\nEjecutarlo podría comprometer la seguridad de tu equipo.",
-       "imagemaxsize": "Límite de tamaño de imagen:<br />''(para páginas de descripción de archivo)''",
+       "imagemaxsize": "Límite de tamaño de imagen en páginas de descripción de archivo:",
        "thumbsize": "Tamaño de las vistas en miniatura:",
        "widthheight": "$1 × $2",
        "widthheightpage": "$1 × $2, $3 {{PLURAL:|página|páginas}}",
        "confirm-unwatch-button": "Aceptar",
        "confirm-unwatch-top": "¿Quitar esta página de tu lista de seguimiento?",
        "confirm-rollback-button": "Aceptar",
-       "confirm-rollback-top": "¿Revertir las ediciones a esta página?",
+       "confirm-rollback-top": "¿Revertir las ediciones en esta página?",
        "confirm-mcrrestore-title": "Restaurar la revisión",
        "confirm-mcrundo-title": "Deshacer un cambio",
        "mcrundofailed": "Error al deshacer",
        "mcrundo-missingparam": "Faltan parámetros requeridos en la solicitud.",
        "mcrundo-changed": "La página ha sido cambiada desde que viste el diff. Por favor revisa el nuevo cambio.",
+       "mcrundo-parse-failed": "Error al analizar la nueva revisión: $1",
        "comma-separator": ",&#32;",
        "ellipsis": "…",
        "percent": "$1 %",
        "autosumm-changed-redirect-target": "Se cambió el destino de la redirección de [[$1]] a [[$2]]",
        "autosumm-new": "Página creada con «$1»",
        "autosumm-newblank": "Se creó una página vacía",
+       "size-pixel": "$1 {{PLURAL:$1|píxel|píxeles}}",
        "lag-warn-normal": "Los cambios realizados en {{PLURAL:$1|el último segundo|los últimos $1 segundos}} podrían no mostrarse en esta lista.",
        "lag-warn-high": "Debido a una alta latencia el servidor de base de datos, los cambios realizados en {{PLURAL:$1|el último segundo|los últimos $1 segundos}} podrían no mostrarse en esta lista.",
        "watchlistedit-normal-title": "Editar lista de seguimiento",
        "tags": "Etiquetas de cambios",
        "tag-filter": "Filtro de [[Special:Tags|etiquetas]]:",
        "tag-filter-submit": "Filtro",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Etiqueta|Etiquetas}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Etiqueta|Etiquetas}}]]: $2",
        "tag-mw-contentmodelchange": "cambio de modelo de contenido",
        "tag-mw-contentmodelchange-description": "Ediciones que [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:ChangeContentModel cambian el modelo de contenido] de una página",
        "tag-mw-new-redirect": "Redirección nueva",
        "dberr-again": "Prueba a recargar dentro de unos minutos.",
        "dberr-info": "(No se puede acceder a la base de datos: $1)",
        "dberr-info-hidden": "(No se puede acceder a la base de datos)",
-       "dberr-usegoogle": "Mientras tanto puedes probar buscando a través de Google.",
-       "dberr-outofdate": "Ten en cuenta que su índice de nuestro contenido puede estar desactualizado.",
-       "dberr-cachederror": "La siguiente es una página guardada de la página solicitada, y puede no estar actualizada.",
        "htmlform-invalid-input": "Hay problemas con alguno de los datos que has ingresado.",
        "htmlform-select-badoption": "El valor que especificaste no es una opción válida.",
        "htmlform-int-invalid": "El valor que especificaste no es un entero.",
        "logentry-block-block": "$1 {{GENDER:$2|bloqueó}} a {{GENDER:$4|$3}} durante un plazo de $5 $6",
        "logentry-block-unblock": "$1 {{GENDER:$2|desbloqueó}} a {{GENDER:$4|$3}}",
        "logentry-block-reblock": "$1 {{GENDER:$2|cambió}} la configuración del bloqueo de {{GENDER:$4|$3}} durante un plazo de $5 $6",
+       "logentry-partialblock-block": "$1 {{GENDER:$2|bloqueó}} a {{GENDER:$4|$3}} la edición en {{PLURAL:$8|la página|las páginas}} $7 por un tiempo de caducidad de $5 $6",
+       "logentry-partialblock-reblock": "$1 {{GENDER:$2|cambió}} la configuración del bloqueo a {{GENDER:$4|$3}} impidiendo la edición en {{PLURAL:$8|la página|las páginas}} $7 por un tiempo de caducidad de $5 $6",
        "logentry-suppress-block": "$1 {{GENDER:$2|bloqueó}} a {{GENDER:$4|$3}} durante un plazo de $5 $6",
        "logentry-suppress-reblock": "$1 {{GENDER:$2|cambió}} la configuración del bloqueo de {{GENDER:$4|$3}} durante un plazo de $5 $6",
        "logentry-import-upload": "$1 {{GENDER:$2|importó}} $3 subiendo un archivo",
        "feedback-close": "Hecho",
        "feedback-external-bug-report-button": "Enviar una tarea técnica",
        "feedback-dialog-title": "Enviar comentarios",
-       "feedback-dialog-intro": "Puedes usar el formulario sencillo debajo para enviar tus comentarios. Ellos se agregarán a la página \"$1\", junto con tu nombre de usuario.",
+       "feedback-dialog-intro": "Puedes usar el sencillo formulario a continuación para enviar tus comentarios. Tu comentario se añadirá a la página «$1», junto con tu nombre de usuario.",
        "feedback-error1": "Error: No se reconoce resultado de API",
        "feedback-error2": "Error: Falló la edición",
        "feedback-error3": "Error: No hay respuesta de la API",
        "special-characters-title-endash": "semirraya",
        "special-characters-title-emdash": "raya",
        "special-characters-title-minus": "signo de resta",
-       "mw-widgets-abandonedit": "¿Estás seguro de quieres salir del modo de edición sin guardar primero?",
+       "mw-widgets-abandonedit": "¿Seguro que deseas abandonar el modo de edición sin guardar primero?",
        "mw-widgets-abandonedit-discard": "Descartar ediciones",
        "mw-widgets-abandonedit-keep": "Continuar editando",
-       "mw-widgets-abandonedit-title": "¿Lo confirmas?",
+       "mw-widgets-abandonedit-title": "¿Seguro?",
        "mw-widgets-dateinput-no-date": "Ninguna fecha seleccionada",
        "mw-widgets-dateinput-placeholder-day": "AAAA-MM-DD",
        "mw-widgets-dateinput-placeholder-month": "AAAA-MM",
        "mw-widgets-titleinput-description-redirect": "redirigir a $1",
        "mw-widgets-categoryselector-add-category-placeholder": "Agregar una categoría...",
        "mw-widgets-usersmultiselect-placeholder": "Añadir más…",
+       "mw-widgets-titlesmultiselect-placeholder": "Añadir más...",
        "date-range-from": "Desde la fecha:",
        "date-range-to": "Hasta la fecha:",
        "sessionmanager-tie": "No se pueden combinar múltiples tipos de autenticación de solicitudes: $1.",
        "authmanager-provider-password-domain": "Autenticación basada en contraseña y dominio",
        "authmanager-provider-temporarypassword": "Contraseña temporal",
        "authprovider-confirmlink-message": "Basado en tus últimos intentos para iniciar sesión, las siguientes cuentas pueden vincularse a tu cuenta wiki. Vincularlas permite iniciar sesión a través de esas cuentas. Selecciona cuáles deben vincularse.",
+       "authprovider-confirmlink-option": "$1 ($2)",
        "authprovider-confirmlink-request-label": "Cuentas que deberían vincularse",
        "authprovider-confirmlink-success-line": "$1: vinculado exitosamente.",
+       "authprovider-confirmlink-failed-line": "$1: $2",
        "authprovider-confirmlink-failed": "La vinculación de cuentas no se ha realizado con éxito: $1",
        "authprovider-confirmlink-ok-help": "Continuar luego de mostrar los mensajes de error en la vinculación.",
        "authprovider-resetpass-skip-label": "Omitir",
        "passwordpolicies-policy-passwordcannotmatchblacklist": "La contraseña no puede coincidir con la lista de contraseñas específicamente prohibidas",
        "passwordpolicies-policy-maximalpasswordlength": "La contraseña no puede tener más de $1 {{PLURAL:$1|caracter|caracteres}}",
        "passwordpolicies-policy-passwordcannotbepopular": "La contraseña no puede {{PLURAL:$1|ser la contraseña más popular|encontrarse en la lista de $1 contraseñas populares}}",
-       "easydeflate-invaliddeflate": "El contenido proporcionado no esta comprimido correctamente"
+       "passwordpolicies-policy-passwordnotinlargeblacklist": "La contraseña no puede estar en la lista de las 100.000 contraseñas más usadas.",
+       "easydeflate-invaliddeflate": "El contenido proporcionado no esta comprimido correctamente",
+       "unprotected-js": "Por razones de seguridad, JavaScript no se puede cargar desde páginas desprotegidas. Crea javascript solo en MediaWiki: espacio de nombres o como subpágina de usuario"
 }
index e8de6e7..2e20801 100644 (file)
        "passwordtooshort": "Parool peab koosnema vähemalt {{PLURAL:$1|ühest|$1}} tähemärgist.",
        "passwordtoolong": "Parool ei saa olla pikem kui {{PLURAL:$1|üks märk|$1 märk}}.",
        "passwordtoopopular": "Liiga levinud paroole ei saa kasutada. Palun vali parool, mida on keerulisem ära arvata.",
+       "passwordinlargeblacklist": "Sisestatud parool on väga sageli kasutatud paroolide loendis. Palun vali haruldasem parool.",
        "password-name-match": "Parool peab kasutajanimest erinema.",
        "password-login-forbidden": "Selle kasutajanime ja parooli kasutamine on keelatud.",
        "mailmypassword": "Lähtesta parool",
        "prefs-editor": "Toimeti",
        "prefs-preview": "Eelvaade",
        "prefs-advancedrc": "Täpsemad eelistused",
-       "prefs-opt-out": "Täiustustest äraütlemine",
        "prefs-advancedrendering": "Täpsemad eelistused",
        "prefs-advancedsearchoptions": "Täpsemad eelistused",
        "prefs-advancedwatchlist": "Täpsemad eelistused",
        "prefs-displayrc": "Kuvasätted",
        "prefs-displaywatchlist": "Kuvasätted",
+       "prefs-changesrc": "Näidatavad muudatused",
+       "prefs-changeswatchlist": "Näidatavad muudatused",
+       "prefs-pageswatchlist": "Jälgitavad leheküljed",
        "prefs-tokenwatchlist": "Luba",
        "prefs-diffs": "Erinevused",
        "prefs-help-prefershttps": "See eelistus jõustub pärast järgmist sisselogimist.",
        "rcfilters-watchlist-markseen-button": "Märgi kõik muudatused nähtuks",
        "rcfilters-watchlist-edit-watchlist-button": "Muuda jälgimisloendit",
        "rcfilters-watchlist-showupdated": "Muudatused lehekülgedel, mida sa pole pärast muudatuste tegemist külastanud, on <strong>rasvases</strong> kirjas ja tähistatud täidetud punktiga.",
-       "rcfilters-preference-label": "Peida viimaste muudatuste täiustatud versioon",
-       "rcfilters-preference-help": "Pöörab tagasi 2017. aastast alates tehtud muudatused kujunduses ja lisatud tööriistad.",
-       "rcfilters-watchlist-preference-label": "Peida jälgimisloendi täiustatud versioon",
-       "rcfilters-watchlist-preference-help": "Pöörab tagasi 2017. aastast alates tehtud muudatused kujunduses ja lisatud tööriistad.",
+       "rcfilters-preference-label": "Kasuta JavaScripti-vaba liidest",
+       "rcfilters-preference-help": "Laadib viimased muudatused ilma filtrite ja esiletõstmise võimaluseta.",
+       "rcfilters-watchlist-preference-label": "Kasuta JavaScripti-vaba liidest",
+       "rcfilters-watchlist-preference-help": "Laadib jälgimisloendi ilma filtrite ja esiletõstmise võimaluseta.",
        "rcfilters-filter-showlinkedfrom-label": "Näita muudatusi lehekülgedel, millele viidatakse leheküljelt:",
        "rcfilters-filter-showlinkedfrom-option-label": "<strong>Leheküljed, millele viidatakse</strong> valitud leheküljel",
        "rcfilters-filter-showlinkedto-label": "Näita muudatusi lehekülgedel, millel viidatakse leheküljele",
        "contribsub2": "Kasutaja {{GENDER:$3|$1}} ($2) kaastöö",
        "contributions-userdoesnotexist": "Kasutajakonto \"$1\" pole registreeritud.",
        "nocontribs": "Antud kriteeriumitele vastavaid muudatusi ei leitud.",
-       "uctop": "(praegune)",
+       "uctop": "praegune",
        "month": "Alates kuust (ja varasemad):",
        "year": "Alates aastast (ja varasemad):",
        "date": "Alates kuupäevast (ja varasemad):",
        "move-watch": "Jälgi lähte- ja sihtlehekülge",
        "movepagebtn": "Teisalda lehekülg",
        "pagemovedsub": "Lehekülg on teisaldatud",
+       "cannotmove": "Lehekülge ei õnnestunud teisaldada {{PLURAL:$1|järgmisel põhjusel|järgmistel põhjustel}}:",
        "movepage-moved": "<strong>\"$1\" on teisaldatud pealkirja \"$2\" alla.</strong>",
        "movepage-moved-redirect": "Ümbersuunamisleht loodud.",
        "movepage-moved-noredirect": "Ümbersuunamist ei loodud.",
        "pageinfo-category-files": "Faile",
        "pageinfo-user-id": "Kasutaja identifikaator",
        "pageinfo-file-hash": "Räsiväärtus",
-       "pageinfo-view-protect-log": "Vaata selle lehekülje kaitsmislogi.",
+       "pageinfo-view-protect-log": "Vaata selle lehekülje kaitsmislogi",
        "markaspatrolleddiff": "Märgi kontrollituks",
        "markaspatrolledtext": "Märgi see leht kontrollituks",
        "markaspatrolledtext-file": "Märgi see failiversioon kontrollituks",
        "tags": "Käibivad muudatusmärgised",
        "tag-filter": "[[Special:Tags|Märgisefilter]]:",
        "tag-filter-submit": "Filtri",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Märgis|Märgised}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Märgis|Märgised}}]]: $2",
        "tag-mw-contentmodelchange": "Sisumudeli muudatus",
        "tag-mw-contentmodelchange-description": "Lehekülje [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:ChangeContentModel sisumudelit muutvad] redaktsioonid",
        "tag-mw-new-redirect": "Uus ümbersuunamine",
        "dberr-again": "Oota mõni hetk ja laadi lehekülg uuesti.",
        "dberr-info": "(Juurdepääs andmebaasile puudub: $1)",
        "dberr-info-hidden": "(Juurdepääs andmebaasile puudub.)",
-       "dberr-usegoogle": "Proovi vahepeal otsida Google'ist.",
-       "dberr-outofdate": "Pane tähele, et Google'is talletatud meie sisu võib olla iganenud.",
-       "dberr-cachederror": "See koopia taotletud leheküljest on vahemälus ja ei pruugi olla ajakohane.",
        "htmlform-invalid-input": "Osaga sinu sisestatust on probleeme",
        "htmlform-select-badoption": "Antud väärtus ei sobi.",
        "htmlform-int-invalid": "Antud väärtus ei ole täisarv.",
        "logentry-block-reblock": "$1 {{GENDER:$2|muutis}} kasutaja {{GENDER:$4|$3}} blokeeringut; aegumistähtaeg $5 $6",
        "logentry-partialblock-block": "$1 {{GENDER:$2|blokeeris}} kasutaja {{GENDER:$4|$3}} redigeerimast {{PLURAL:$8|lehekülge|lehekülgi}} $7; aegumistähtaeg $5 $6",
        "logentry-partialblock-reblock": "$1 {{GENDER:$2|muutis}} kasutaja {{GENDER:$4|$3}} blokeeringut, mis takistab redigeerimist {{PLURAL:$8|leheküljel|lehekülgedel}} $7; aegumistähtaeg $5 $6",
-       "logentry-non-editing-block-block": "$1 {{GENDER:$2|blokeeris}} kasutaja {{GENDER:$4|$3}} tegemast teisi tegevusi peale redigeerimise; aegumistähtaeg $5 $6",
-       "logentry-non-editing-block-reblock": "$1 {{GENDER:$2|muutis}} kasutaja {{GENDER:$4|$3}} blokeeringut, mis takistab tegemast teisi tegevusi peale redigeerimise; aegumistähtaeg $5 $6",
+       "logentry-non-editing-block-block": "$1 {{GENDER:$2|blokeeris}} kasutaja {{GENDER:$4|$3}} tegemast määratud tegevusi peale redigeerimise; aegumistähtaeg $5 $6",
+       "logentry-non-editing-block-reblock": "$1 {{GENDER:$2|muutis}} kasutaja {{GENDER:$4|$3}} blokeeringut, mis takistab tegemast määratud tegevusi peale redigeerimise; aegumistähtaeg $5 $6",
        "logentry-suppress-block": "$1 {{GENDER:$2|blokeeris}} kasutaja {{GENDER:$4|$3}}; aegumistähtaeg $5 $6",
        "logentry-suppress-reblock": "$1 {{GENDER:$2|muutis}} kasutaja {{GENDER:$4|$3}} blokeeringut; aegumistähtaeg $5 $6",
        "logentry-import-upload": "$1 {{GENDER:$2|importis}} lehekülje $3 faili üleslaadimise teel",
        "passwordpolicies-policy-passwordcannotmatchblacklist": "Parool ei tohi olla kantud musta nimekirja.",
        "passwordpolicies-policy-maximalpasswordlength": "Parool peab olema $1 {{PLURAL:$1|märgist}} lühem.",
        "passwordpolicies-policy-passwordcannotbepopular": "Parool ei tohi olla {{PLURAL:$1|populaarne parool|$1 populaarse parooli loendis}}.",
+       "passwordpolicies-policy-passwordnotinlargeblacklist": "Parool ei saa olla 100&nbsp;000 kõige levinuma parooli loendis.",
        "easydeflate-invaliddeflate": "Ette antud sisu ei ole õigesti vähendatud",
        "unprotected-js": "Turvalisuse huvides ei saa JavaScripti laadida kaitsmata lehekülgedelt. Palun koosta JavaScripti ainult nimeruumis MediaWiki või kasutajate nimeruumi alamleheküljel."
 }
index adbeaa7..a9c05f6 100644 (file)
        "badarticleerror": "Ekintza hori ezin da orri honetan egin.",
        "cannotdelete": "Ezin izan da «$1» orria edo fitxategia ezabatu.\nBaliteke beste norbaitek ezabatu izana.",
        "cannotdelete-title": "Ezin da \"$1\" orrialdea ezabatu",
+       "delete-scheduled": "\"$1\" orrialdea ezabatuko da. \nMesedez, itxoin.",
        "delete-hook-aborted": "Ezabatzea hook batek gelditu du.\nEz du arrazoirik eman.",
        "no-null-revision": "Ezin izan da \"$1\" orrialdearen berrikuspen huts bat sortu",
        "badtitle": "Izenburu ezegokia",
        "customcssprotected": "Ez duzu baimenik CSS orrialde hau aldatzeko beste erabiltzaile baten hobespen pertsonalak dituelako.",
        "customjsonprotected": "Ez duzu baimenik JSON orrialde hau editatzeko beste erabiltzaile baten hobespen pertsonalak dituelako.",
        "customjsprotected": "Ez duzu baimenik JavaScript orrialde hau aldatzeko beste erabiltzaile baten hobespen pertsonalak dituelako.",
-       "sitecssprotected": "Ez daukazu CSS orri hau aldatzeko baimenik bisitari guztiei eragin diezaiekeelako",
-       "sitejsonprotected": "Ez daukazu JSON orri hau aldatzeko baimenik bisitari guztiei eragin diezaiekeelako",
-       "sitejsprotected": "Ez daukazu JavaScript orri hau aldatzeko baimenik bisitari guztiei eragin diezaiekeelako",
+       "sitecssprotected": "Ez daukazu CSS orri hau aldatzeko baimenik bisitari guztiei eragin diezaiekelako",
+       "sitejsonprotected": "Ez daukazu JSON orri hau aldatzeko baimenik bisitari guztiei eragin diezaiekelako",
+       "sitejsprotected": "Ez daukazu JavaScript orri hau aldatzeko baimenik bisitari guztiei eragin diezaiekelako",
        "mycustomcssprotected": "Ez duzu baimenik CSS orrialde hau aldatzeko.",
        "mycustomjsonprotected": "Ez duzu baimenik JSON orrialde hau aldatzeko.",
        "mycustomjsprotected": "Ez duzu baimentik JavaScript orrialdea aldatzeko.",
        "prefs-editor": "Editorea",
        "prefs-preview": "Aurreikusi",
        "prefs-advancedrc": "Aukera aurreratuak",
-       "prefs-opt-out": "Hobekuntzarik gabeko Opt",
        "prefs-advancedrendering": "Aukera aurreratuak",
        "prefs-advancedsearchoptions": "Aukera aurreratuak",
        "prefs-advancedwatchlist": "Aukera aurreratuak",
        "right-editusercss": "Beste lankideen CSS fitxategiak aldatu",
        "right-edituserjson": "Beste erabiltzaileen JSON fitxategiak aldatu",
        "right-edituserjs": "Beste lankideen JS fitxategiak aldatu",
+       "right-editsitecss": "Editati guneko CSS globala",
+       "right-editsitejson": "Editatu guneko JSON globala",
+       "right-editsitejs": "Editato guneko JavaScript globala",
        "right-editmyusercss": "Aldatu zure CSS fitxategi propioak",
        "right-editmyuserjson": "Zure erabiltzaile JSON fitxategi propioak aldatu",
        "right-editmyuserjs": "Aldatu zure JavaScript fitxategi propioak",
        "grant-editmycssjs": "Zure CSS/JSON/JavaScript erabiltzailea aldatu",
        "grant-editmyoptions": "Aldatu zure hobespenak",
        "grant-editmywatchlist": "Zure jarraipen zerrenda aldatu",
+       "grant-editsiteconfig": "Gune osoaren eta erabiltzaileen CSS/JS aldatu",
        "grant-editpage": "Aldatu dauden orrialdeak",
        "grant-editprotected": "Babestutako orriak aldatu",
        "grant-highvolume": "Bolumen-handiko edizioa",
        "contribsub2": "{{GENDER:$3|$1(r)entzat}} ($2)",
        "contributions-userdoesnotexist": "\"$1\" erabiltzaile-kontua ez dago erregistraturik.",
        "nocontribs": "Ez da ezaugarri horiekin bat datorren aldaketarik aurkitu.",
-       "uctop": "(azken aldaketa)",
+       "uctop": "azken aldaketa",
        "month": "Hilabetea (eta lehenagokoak):",
        "year": "Urtea (eta lehenagokoak):",
        "date": "Data honetatik (eta lehenagokoak):",
        "confirm-unwatch-top": "Orrialde hau zure jarraipen-zerrendatik kendu?",
        "confirm-rollback-button": "Ados",
        "confirm-rollback-top": "Orrialde honen edizioak leheneratu?",
+       "confirm-mcrundo-title": "Aldaketa bat desegin",
+       "mcrundofailed": "Desegiteak akatsa",
+       "mcrundo-missingparam": "Beharrezko eskaera parametroak falta dira.",
        "word-separator": "&#32;",
        "quotation-marks": "«$1»",
        "imgmultipageprev": "← aurreko orrialdea",
        "tags": "Etiketa aldaketa zuzena",
        "tag-filter": "[[Special:Tags|Etiketa]] iragazkia:",
        "tag-filter-submit": "Iragazkia",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Etiketa|Etiketak}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Etiketa|Etiketak}}]]: $2",
        "tag-mw-contentmodelchange": "Eduki eredu aldaketa",
        "tag-mw-contentmodelchange-description": "Orri baten [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:ChangeContentModel change the content model] aldaketak",
        "tag-mw-new-redirect": "Birbideratze berria",
        "dberr-again": "Saiatu pare bat minutu itxaroten edo kargatu ezazu orrialdea berriro.",
        "dberr-info": "($1: Ezin da datu-basera konektatu)",
        "dberr-info-hidden": "(Ezin da konektatu datu-basera)",
-       "dberr-usegoogle": "Bitartean Google bidez bilatzen saiatu zintezke.",
-       "dberr-outofdate": "Eduki hauek aurkibideak eguneratu gabe egon daitezke.",
-       "dberr-cachederror": "Ondorengoa eskatutako orriaren katxedun kopia da, eta eguneratu gabe egon daiteke.",
        "htmlform-invalid-input": "Zure sarrera batzuekin arazoak daude",
        "htmlform-select-badoption": "Zuk zehaztutako balioa ez da baliozko aukera.",
        "htmlform-int-invalid": "Zuk zehaztutako balioa ez da zenbaki osoa.",
        "logentry-delete-revision-legacy": "$1k {{GENDER:$2|}} $3 orriko berrikusketen ikuspena aldatu egin du",
        "logentry-suppress-delete": "$1 erabiltzaileak $3 orria {{GENDER:$2|ezabatu}} du",
        "logentry-suppress-event": "$1 wikilariak {{GENDER:$2|}} ezkutuan ikusgaitasuna aldatu {{PLURAL:$5|dio erregistroko sarrera bati|die erregistroko $5 sarrerei}} $3n: $4",
-       "logentry-suppress-revision": "$1 wikilariak ikusgaitasuna aldatu {{PLURAL:$5|dio berrikusketari|$5 berrikusketei}} $3 orrian: $4",
+       "logentry-suppress-revision": "$1 wikilariak ikusgaitasuna aldatu {{PLURAL:$5|dio berrikusketari|die $5 berrikusketari}} «$3» orrian: $4",
        "logentry-suppress-event-legacy": "$1k {{GENDER:$2|}} sekretuan $3 sarrera gertaeren ikuspena aldatu egin du",
        "logentry-suppress-revision-legacy": "$1 wikilariak izkutuan $3 orriko berrikusketen ikuspena {{GENDER:$2|aldatu}} egin du",
        "revdelete-content-hid": "edukia ezkutatu da",
        "mw-widgets-titleinput-description-redirect": "$1ra birzuzendu",
        "mw-widgets-categoryselector-add-category-placeholder": "Gehitu kategoria bat...",
        "mw-widgets-usersmultiselect-placeholder": "Gehitu gehiago...",
+       "mw-widgets-titlesmultiselect-placeholder": "Gehitu gehiago...",
        "date-range-from": "Data honetatik aurrera:",
        "date-range-to": "Data honetara arte:",
        "sessionmanager-tie": "Ezin dira autentifikazio eskaera mota ugari konbinatu: $1.",
index 885f9ea..5dd4eb5 100644 (file)
        "mycontris": "Endirguis",
        "contribsub2": "Pa $1 ($2)",
        "nocontribs": "Nu s'alcuentrun chambus con esus criterius.",
-       "uctop": "(úrtimu chambu)",
+       "uctop": "úrtimu chambu",
        "month": "Mes:",
        "year": "Añu:",
        "sp-contributions-newbies": "Solu muestral los endirguis de cuentas nuevas",
index 5dfd3c9..590df32 100644 (file)
@@ -68,7 +68,9 @@
                        "Alireza Ivaz",
                        "Iriman",
                        "Matěj Suchánek",
-                       "Amirsara"
+                       "Amirsara",
+                       "Physicsch",
+                       "Nbi"
                ]
        },
        "tog-underline": "خط کشیدن زیر پیوندها:",
        "badarticleerror": "نمی‌توان این عمل را بر این صفحه انجام داد.",
        "cannotdelete": "امکان حذف صفحه یا تصویر «$1» وجود ندارد.\nممکن است قبلاً فرد دیگری آن را حذف کرده باشد.",
        "cannotdelete-title": "نمی‌توان صفحهٔ «$1» را حذف کرد",
+       "delete-scheduled": "صفحه $1 برای حذف برنامه‌ریزی شده‌است. لطفاً صبور باشید.",
        "delete-hook-aborted": "حذف توسط قلاب لغو شد.\nتوضیحی در این مورد داده نشد.",
        "no-null-revision": "امکان ایجاد نسخهٔ پوچ تازه برای صفحهٔ «$1» وجود نداشت",
        "badtitle": "عنوان بد",
        "passwordtooshort": "گذرواژه باید دست‌کم {{PLURAL:$1|۱ حرف|$1 حرف}} داشته باشد.",
        "passwordtoolong": "گذرواژه نمی تواند حروفش بیشتر از {{PLURAL:$1|۱ حرف|$1 حرف}}  باشد.",
        "passwordtoopopular": "گذرواژه‌های متداول را نمی‌توانید استفاده کنید. لطفاً گذرواژه‌ای انتخاب کنید که حدس‌زدن آن سخت باشد.",
+       "passwordinlargeblacklist": "گذرواژه انتخابی در فهرست گذرواژه‌های معمول قرار دارد. لطفاً یک گذرواژه یکتاتر انتخاب کنید.",
        "password-name-match": "گذرواژهٔ شما باید با نام کاربری شما تفاوت داشته باشد.",
        "password-login-forbidden": "استفاده از این نام کاربری و گذرواژه ممنوع است.",
        "mailmypassword": "بازنشانی گذرواژه",
        "localtime": "زمان محلی:",
        "timezoneuseserverdefault": "استفاده از پیش‌فرض ویکی ($1)",
        "timezoneuseoffset": "دیگر (اختلاف را مشخص کنید)",
+       "timezone-useoffset-placeholder": "مثال مقادیر: \"-07:00\" یا \"01:00\"",
        "servertime": "زمان سرور:",
        "guesstimezone": "از مرورگر گرفته شود",
        "timezoneregion-africa": "آفریقا",
        "prefs-editor": "ویرایشگر",
        "prefs-preview": "پیش‌نمایش",
        "prefs-advancedrc": "گزینه‌های پیشرفته",
-       "prefs-opt-out": "گزینه برای بهبود",
        "prefs-advancedrendering": "گزینه‌های پیشرفته",
        "prefs-advancedsearchoptions": "گزینه‌های پیشرفته",
        "prefs-advancedwatchlist": "گزینه‌های پیشرفته",
        "prefixindex": "تمام صفحات با پیشوند",
        "prefixindex-namespace": "همهٔ صفحه‌های دارای پیشوند (فضای‌نام $1)",
        "prefixindex-submit": "نمایش",
-       "prefixindex-strip": "حذÙ\81 Ù¾Û\8cØ´Ù\88Ù\86د Ø¯Ø± Ù\81Ù\87رست",
+       "prefixindex-strip": "حذÙ\81 Ù¾Û\8cØ´Ù\88Ù\86د Ø¯Ø± Ù\86تاÛ\8cج",
        "shortpages": "صفحه‌های کوتاه",
        "longpages": "صفحه‌های بلند",
        "deadendpages": "صفحه‌های بن‌بست",
        "contribsub2": "برای {{GENDER:$3|$1}} ($2)",
        "contributions-userdoesnotexist": "حساب کاربری «$1» ثبت نشده‌است.",
        "nocontribs": "هیچ تغییری با این مشخصات یافت نشد.",
-       "uctop": "(نسخهٔ کنونی)",
+       "uctop": "نسخهٔ کنونی",
        "month": "در این ماه (و پیش از آن):",
        "year": "در این سال (و پیش از آن):",
        "date": "از تاریخ (و زودتر):",
        "redirect-file": "نام پرونده",
        "redirect-logid": "سیاهه شناسه",
        "redirect-not-exists": "مقدار پیدا نشد",
+       "redirect-not-numeric": "مقادیر غیر عددی",
        "fileduplicatesearch": "جستجو برای پرونده‌های تکراری",
        "fileduplicatesearch-summary": "جستجو برای پرونده‌های تکراری بر اساس مقدار درهم‌شدهٔ آن‌ها صورت می‌گیرد.",
        "fileduplicatesearch-filename": "نام پرونده:",
        "tags": "برچسب‌های تغییر مجاز",
        "tag-filter": "پالایش [[Special:Tags|برچسب‌ها]]:",
        "tag-filter-submit": "پالایه",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|برچسب|برچسب‌ها}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|برچسب|برچسب‌ها}}]]: $2",
        "tag-mw-contentmodelchange": "تغییر مدل محتوا",
        "tag-mw-contentmodelchange-description": "ویرایش‌هایی که [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:ChangeContentModel مدل محتوای صفحه را تغییر می‌دهند]",
        "tag-mw-new-redirect": "تغییر مسیر جدید",
        "dberr-again": "چند دقیقه صبر کنید و دوباره صفحه را بارگیری کنید.",
        "dberr-info": "(امکان برقراری ارتباط با پایگاه داده وجود ندارد: $1)",
        "dberr-info-hidden": "(امکان تماس با پایگاه‌داده نیست)",
-       "dberr-usegoogle": "شما در این مدت می‌توانید با استفاده از گوگل جستجو کنید.",
-       "dberr-outofdate": "توجه کنید که نمایه‌های آن‌ها از محتوای ما ممکن است به روز نباشد.",
-       "dberr-cachederror": "آن‌چه در ادامه می‌آید یک کپی از صفحهٔ درخواست شده است که در کاشه قرار دارد، و ممکن است به روز نباشد.",
        "htmlform-invalid-input": "بخشی از ورودی شما مشکل دارد",
        "htmlform-select-badoption": "مقدار وارد شده یک گزینهٔ قابل قبول نیست.",
        "htmlform-int-invalid": "مقداری که وارد کردید یک عدد صحیح نیست.",
        "special-characters-title-emdash": "خط فاسله کشیده",
        "special-characters-title-minus": "علامت منفی",
        "mw-widgets-abandonedit": "مطمئنید که می‌خواهید بدون ذخیره‌سازی حالت ویرایش را ترک کنید؟",
-       "mw-widgets-abandonedit-discard": "درنظر نگرفتن ویرایش‌ها",
+       "mw-widgets-abandonedit-discard": "چشم‌پوشی از ویرایش‌ها",
        "mw-widgets-abandonedit-keep": "ادامه دادن به ویرایش",
        "mw-widgets-abandonedit-title": "آیا مطمئن هستید؟",
        "mw-widgets-dateinput-no-date": "هیچ داده‌ای انتخاب نشده",
        "passwordpolicies-policy-passwordcannotmatchblacklist": "گذرواژه نمی‌تواند مشابه گذرواژه‌های فهرست شده در فهرست سیاه باشد",
        "passwordpolicies-policy-maximalpasswordlength": "گذرواژه باید کمتر از $1 {{PLURAL:$1|نویسه|نویسه}} طول داشته باشد",
        "passwordpolicies-policy-passwordcannotbepopular": "گذرواژه نمی‌تواند {{PLURAL:$1|گذرواژه پراستفاده باشد|در فهرست $1 گذرواژه‌های پراستفاده باشد}}",
-       "easydeflate-invaliddeflate": "محتوی تهیه‌شده به صورت درست خالی نشده‌است"
+       "easydeflate-invaliddeflate": "محتوی تهیه‌شده به صورت درست خالی نشده‌است",
+       "unprotected-js": "به دلایل امنیتی، جاوااسکریپت نمی‌تواند از صفحات محافظت‌نشده بارگیری شود. لطفا جاوااسکریپت را تنها در فضای نام مدیاویکی: و یا در زیرصفحهٔ کاربری خودتان ایجاد کنید."
 }
index bc60b1e..e54c2e1 100644 (file)
@@ -59,7 +59,8 @@
                        "Rueter",
                        "Kyykaarme",
                        "Surjection",
-                       "OneMember"
+                       "OneMember",
+                       "Valtlait"
                ]
        },
        "tog-underline": "Linkkien alleviivaus:",
@@ -95,7 +96,7 @@
        "tog-watchlisthideminor": "Piilota pienet muokkaukset tarkkailulistalta",
        "tog-watchlisthideliu": "Piilota kirjautuneiden käyttäjien muokkaukset tarkkailulistalta",
        "tog-watchlistreloadautomatically": "Päivitä tarkkailulista automaattisesti aina kun jotakin suodatinta on muutettu (vaatii JavaScriptiä)",
-       "tog-watchlistunwatchlinks": "Lisää suorat tarkkailemattomat/tarkkaillut linkit ({{int:Watchlist-unwatch}}/{{int:Watchlist-unwatch-undo}}) tarkkailulistan muutettujen sivujen merkintöihin (JavaScriptiä edellytetään nappuloiden toiminnallisuuteen)",
+       "tog-watchlistunwatchlinks": "Lisää tarkkailulistalle linkit ({{int:Watchlist-unwatch}}/{{int:Watchlist-unwatch-undo}}), joilla voit poistaa tai lisätä sivuja (vaatii JavaScriptin)",
        "tog-watchlisthideanons": "Piilota rekisteröitymättömien käyttäjien muokkaukset tarkkailulistalta",
        "tog-watchlisthidepatrolled": "Piilota muutostentarkastajien hyväksymät muokkaukset tarkkailulistalta",
        "tog-watchlisthidecategorization": "Piilota sivujen luokitusmuutokset",
        "versionrequiredtext": "MediaWikistä tarvitaan vähintään versio $1 tämän sivun käyttämiseen. Katso [[Special:Version|versio]].",
        "ok": "OK",
        "pagetitle": "$1 – {{SITENAME}}",
-       "retrievedfrom": "Noudettu kohteesta \"$1\"",
+       "retrievedfrom": "Noudettu kohteesta ”$1”",
        "youhavenewmessages": "Sinulle on $1 ($2).",
        "youhavenewmessagesfromusers": "{{PLURAL:$4|Sinulle on}} $1 {{PLURAL:$3|toiselta käyttäjältä|$3 käyttäjältä}} ($2).",
        "youhavenewmessagesmanyusers": "Sinulle on $1 uusia viestejä useilta käyttäjiltä ($2).",
        "readonly": "Tietokanta on lukittu",
        "enterlockreason": "Anna lukituksen syy sekä sen arvioitu poistamisaika",
        "readonlytext": "Tietokanta on tällä hetkellä lukittu. Uusia sivuja ei voi luoda eikä muitakaan muutoksia tehdä. Syynä on todennäköisesti rutiininomainen tietokannan huoltaminen.\n\nTietokannan lukinneen palvelinjärjestelmän ylläpitäjän antama selitys on: $1",
-       "missing-article": "Sivun sisältöä ei löytynyt tietokannasta nimellä \"$1\" $2.\n\nYleensä tämä johtuu vanhentuneesta vertailu- tai historialinkistä sivulle, joka on poistettu.\n\nJos kyseessä ei ole poistettu sivu, olet ehkä löytänyt virheen ohjelmistossa.\nIlmoita tästä [[Special:ListUsers/sysop|ylläpitäjälle]] ja kerro viestissäsi sivun URL.",
+       "missing-article": "Sivun sisältöä ei löytynyt tietokannasta nimellä ”$1” $2.\n\nYleensä tämä johtuu vanhentuneesta vertailu- tai historialinkistä sivulle, joka on poistettu.\n\nJos kyseessä ei ole poistettu sivu, olet ehkä löytänyt virheen ohjelmistossa.\nIlmoita tästä [[Special:ListUsers/sysop|ylläpitäjälle]] ja kerro viestissäsi sivun URL.",
        "missingarticle-rev": "(versio nro: $1)",
        "missingarticle-diff": "(vertailu: $1, $2)",
        "readonly_lag": "Tietokanta on automaattisesti lukittu, jotta kaikki tietokantapalvelimet saisivat kaikki tuoreet muutokset",
        "nonwrite-api-promise-error": "HTTP-header 'Promise-Non-Write-API-Action' on lähetetty, mutta pyyntö oli kohdistettu API:n kirjoitusmoduuliin (API write module).",
        "internalerror": "Sisäinen virhe",
        "internalerror_info": "Sisäinen virhe: $1",
-       "internalerror-fatal-exception": "Vakava virhe, jonka tyyppi on \"$1\"",
+       "internalerror-fatal-exception": "Vakava virhe, jonka tyyppi on ”$1”",
        "filecopyerror": "Tiedostoa <b>$1</b> ei voitu kopioida tiedostoksi <b>$2</b>.",
        "filerenameerror": "Tiedostoa <b>$1</b> ei voitu nimetä uudelleen nimellä <b>$2</b>.",
        "filedeleteerror": "Tiedostoa <b>$1</b> ei voitu poistaa.",
        "formerror": "Lomakkeen tiedot eivät kelpaa",
        "badarticleerror": "Tätä toimintoa ei voi suorittaa tälle sivulle.",
        "cannotdelete": "Sivun tai tiedoston ”$1” poisto epäonnistui.\nJoku muu on saattanut poistaa sen.",
-       "cannotdelete-title": "Sivua \"$1\" ei voi poistaa",
-       "delete-scheduled": "Sivu \"$1\" on poistumassa piakkoin.\nOdota rauhassa.",
+       "cannotdelete-title": "Sivua ”$1” ei voi poistaa",
+       "delete-scheduled": "Sivu ”$1” on poistumassa piakkoin.\nOdota rauhassa.",
        "delete-hook-aborted": "Laajennuskoodi esti poiston antamatta syytä.",
-       "no-null-revision": "Nollamuokkausta sivulla \"$1\" ei voi tehdä",
+       "no-null-revision": "Nollamuokkausta sivulla ”$1” ei voi tehdä",
        "badtitle": "Kelvoton sivun nimi",
        "badtitletext": "Pyytämäsi sivunimi oli virheellinen, tyhjä tai väärin linkitetty kieltenvälinen tai wikienvälinen nimi.\nSiinä saattaa olla yksi tai useampi sellainen merkki, jota ei voi käyttää sivujen nimissä.",
        "title-invalid-empty": "Pyydetty sivunimi on tyhjä tai sisältää ainoastaan nimiavaruuden nimen.",
        "mypreferencesprotected": "Sinulla ei ole oikeutta muuttaa omia asetuksiasi.",
        "ns-specialprotected": "Toimintosivuja ei voi muokata.",
        "titleprotected": "Käyttäjä [[User:$1|$1]] on suojannut tämän sivunimen, ja sivua ei voi luoda.\nSuojauksen syy on: <em>$2</em>.",
-       "filereadonlyerror": "Tiedostoa \"$1\" ei voida muuttaa, koska jaettu mediavarasto \"$2\" on asetettu tilaan ''vain lukeminen sallittu''.\n\nTietokannan lukinneen palvelinjärjestelmän ylläpitäjän antama selitys on: $3.",
+       "filereadonlyerror": "Tiedostoa ”$1” ei voida muuttaa, koska jaettu mediavarasto \"$2\" on asetettu tilaan ''vain lukeminen sallittu''.\n\nTietokannan lukinneen palvelinjärjestelmän ylläpitäjän antama selitys on: $3.",
        "invalidtitle": "Virheellinen sivun nimi",
-       "invalidtitle-knownnamespace": "Virheellinen sivunimi, nimiavaruus \"$2\" ja teksti \"$3\"",
-       "invalidtitle-unknownnamespace": "Virheellinen sivunimi, tuntematon nimiavaruus numero $1 ja teksti \"$2\"",
+       "invalidtitle-knownnamespace": "Virheellinen sivunimi, nimiavaruus ”$2” ja teksti ”$3”",
+       "invalidtitle-unknownnamespace": "Virheellinen sivunimi, tuntematon nimiavaruus numero $1 ja teksti ”$2”",
        "exception-nologin": "Et ole kirjautunut sisään",
        "exception-nologin-text": "Ole hyvä ja kirjaudu sisään, niin pääset tälle sivulle tai tähän toimintoon.",
        "exception-nologin-text-manual": "Sinun pitää $1, jotta pääset tälle sivulle tai toimintoon.",
        "noname": "Et ole määritellyt kelvollista käyttäjänimeä.",
        "loginsuccesstitle": "Olet kirjautunut sisään",
        "loginsuccess": "'''Olet kirjautunut sivustolle {{SITENAME}} käyttäjänä $1.'''",
-       "nosuchuser": "Käyttäjää \"$1\" ei ole olemassa.\nNimet ovat kirjainkoosta riippuvaisia. \nTarkista kirjoititko nimen oikein, tai [[Special:CreateAccount|luo uusi käyttäjätunnus]].",
+       "nosuchuser": "Käyttäjää ”$1” ei ole olemassa.\nNimet ovat kirjainkoosta riippuvaisia. \nTarkista, kirjoititko nimen oikein, tai [[Special:CreateAccount|luo uusi käyttäjätunnus]].",
        "nosuchusershort": "Käyttäjää nimeltä ”$1” ei ole. Kirjoititko nimen oikein?",
        "nouserspecified": "Käyttäjätunnusta ei ole määritelty.",
        "login-userblocked": "Tämä käyttäjä on estetty. Kirjautuminen ei ole sallittua.",
        "passwordtooshort": "Salasanan täytyy olla vähintään {{PLURAL:$1|yhden merkin pituinen|$1 merkkiä pitkä}}.",
        "passwordtoolong": "Salasanat saavat olla enintään $1 {{PLURAL:$1|merkin}} pituisia.",
        "passwordtoopopular": "Tavanomaisen kaltaisia salasanoja ei saa käyttää. Valitse salasana, joka on vaikeampi arvata.",
+       "passwordinlargeblacklist": "Annettu salasana on erittäin yleisesti käytettyjen salasanojen listalla. Valitse yksilöllisempi salasana.",
        "password-name-match": "Salasanasi täytyy olla eri kuin käyttäjätunnuksesi.",
        "password-login-forbidden": "Tämän käyttäjänimen ja salasanan käyttö on estetty.",
        "mailmypassword": "Hanki uusi salasana",
        "accountcreated": "Käyttäjätunnus luotiin",
        "accountcreatedtext": "Käyttäjätunnus [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|keskustelu]]) luotiin.",
        "createaccount-title": "Tunnuksen luominen {{GRAMMAR:illative|{{SITENAME}}}}",
-       "createaccount-text": "Joku on luonut tunnuksen $2 {{GRAMMAR:illative|{{SITENAME}}}} ($4).\nTunnus on \"$2\" ja sen salasana on \"$3\". Sinun on syytä kirjautua sisään ja vaihtaa salasanasi heti.\n\nSinun ei tarvitse välittää tästä viestistä, jos tämä tunnus on luotu virheellisesti.",
+       "createaccount-text": "Joku on luonut tunnuksen $2 {{GRAMMAR:illative|{{SITENAME}}}} ($4).\nTunnus on ”$2” ja sen salasana on ”$3”. Sinun on syytä kirjautua sisään ja vaihtaa salasanasi heti.\n\nSinun ei tarvitse välittää tästä viestistä, jos tämä tunnus on luotu virheellisesti.",
        "login-throttled": "Olet tehnyt liian monta kirjautumisyritystä.\nOdota $1 ennen kuin yrität uudelleen.",
        "login-abort-generic": "Kirjautuminen epäonnistui – keskeytetty",
        "login-migrated-generic": "Tunnuksesi on siirretty, ja käyttäjänimeäsi ei löydy enää tästä wikistä.",
        "botpasswords-label-grants": "Valittavissa olevat toimintaoikeudet:",
        "botpasswords-help-grants": "Toimintaoikeudet sallivat pääsyn oikeuksiin, joita käyttäjätililläsi jo on. Toimintaoikeuden käyttöönotto täällä ei lisää käyttäjätilillesi oikeuksia, joita sillä ei jo ole. Lisätietoja löytyy [[Special:ListGrants|toimintaoikeuksien luettelosta]].",
        "botpasswords-label-grants-column": "Myönnetään",
-       "botpasswords-bad-appid": "Botin nimi \"$1\" ei kelpaa.",
-       "botpasswords-insert-failed": "Botin nimen \"$1\" lisääminen epäonnsitui. Onko se jo lisätty?",
-       "botpasswords-update-failed": "Botin nimen \"$1\" päivittäminen epäonnistui. Onko se poistettu?",
+       "botpasswords-bad-appid": "Botin nimi ”$1” ei kelpaa.",
+       "botpasswords-insert-failed": "Botin nimen ”$1” lisääminen epäonnistui. Onko se jo lisätty?",
+       "botpasswords-update-failed": "Botin nimen ”$1” päivittäminen epäonnistui. Onko se poistettu?",
        "botpasswords-created-title": "Bottisalasana luotu",
-       "botpasswords-created-body": "Bottisalasana {{GENDER:$2|käyttäjän}} \"$2\" bottinimelle \"$1\" luotiin.",
+       "botpasswords-created-body": "Bottisalasana {{GENDER:$2|käyttäjän}} ”$2” bottinimelle ”$1” luotiin.",
        "botpasswords-updated-title": "Bottisalasana päivitetty",
-       "botpasswords-updated-body": "Bottisalasana {{GENDER:$2|käyttäjän}} \"$2\" bottinimelle \"$1\" päivitettiin.",
+       "botpasswords-updated-body": "Bottisalasana {{GENDER:$2|käyttäjän}} ”$2” bottinimelle ”$1” päivitettiin.",
        "botpasswords-deleted-title": "Bottisalasana poistettu",
-       "botpasswords-deleted-body": "Bottisalasana {{GENDER:$2|käyttäjän}} \"$2\" bottinimelle \"$1\" poistettiin.",
+       "botpasswords-deleted-body": "Bottisalasana {{GENDER:$2|käyttäjän}} ”$2” bottinimelle ”$1” poistettiin.",
        "botpasswords-newpassword": "Uusi salasana kirjautumiseen käyttäjällä <strong>$1</strong> on <strong>$2</strong>. <em>Säilytä tämä myöhempää käyttöä varten.</em> <br> (Vanhoilla boteilla, jotka vaativat kirjautumisnimen olevan sama kuin lopullinen käyttäjänimi, voit myös käyttää nimeä <strong>$3</strong> ja salasanaa <strong>$4</strong>.)",
        "botpasswords-no-provider": "BotPasswordsSessionProvider ei ole saatavilla.",
        "botpasswords-restriction-failed": "Bottisalasanan rajoitukset estävät tämän sisäänkirjautumisen.",
-       "botpasswords-invalid-name": "Annetussa käyttäjätunnuksessa ei ole bottisalasanan erotinta (\"$1\").",
-       "botpasswords-not-exist": "Käyttäjällä \"$1\" ei ole bottisalasanaa nimellä \"$2\".",
-       "botpasswords-needs-reset": "Bottisalasana {{GENDER:$1|käyttäjän}} \"$1\" bottinimelle \"$2\" täytyy nollata.",
+       "botpasswords-invalid-name": "Annetussa käyttäjätunnuksessa ei ole bottisalasanan erotinta (”$1”).",
+       "botpasswords-not-exist": "Käyttäjällä ”$1” ei ole bottisalasanaa nimellä ”$2”.",
+       "botpasswords-needs-reset": "Bottisalasana {{GENDER:$1|käyttäjän}} ”$1” bottinimelle ”$2” täytyy nollata.",
        "botpasswords-locked": "Et voi kirjautua sisään bottisalasanalla, koska tunnuksesi on lukittu.",
        "resetpass_forbidden": "Salasanoja ei voi vaihtaa.",
        "resetpass_forbidden-reason": "Salasanoja ei voi muuttaa: $1",
        "resetpass-temp-password": "Väliaikainen salasana:",
        "resetpass-abort-generic": "Laajennus keskeytti salasanan vaihdon.",
        "resetpass-expired": "Salasanasi on vanhentunut. Valitse uusi salasana, jotta pääset kirjautumaan sisään.",
-       "resetpass-expired-soft": "Salasanasi on vanhentunut ja se pitää vaihtaa. Valitse uusi salasana nyt tai paina \"{{int:authprovider-resetpass-skip-label}}\", niin voit vaihtaa salasanan myöhemmin.",
-       "resetpass-validity-soft": "Salasanasi ei ole kelvollinen: $1\n\nValitse nyt uusi salasana tai paina \"{{int:authprovider-resetpass-skip-label}}\", niin voit vaihtaa sen myöhemmin.",
+       "resetpass-expired-soft": "Salasanasi on vanhentunut ja se pitää vaihtaa. Valitse uusi salasana nyt tai paina ”{{int:authprovider-resetpass-skip-label}}”, niin voit vaihtaa salasanan myöhemmin.",
+       "resetpass-validity-soft": "Salasanasi ei ole kelvollinen: $1\n\nValitse nyt uusi salasana tai paina ”{{int:authprovider-resetpass-skip-label}}”, niin voit vaihtaa sen myöhemmin.",
        "passwordreset": "Salasanan uusiminen",
        "passwordreset-text-one": "Täytä tämä lomake uudistaaksesi salasanasi.",
        "passwordreset-text-many": "{{PLURAL:$1|Täytä yksi seuraavista kentistä, jolloin saat väliaikaisen salasanan sähköpostitse.}}",
        "preview": "Esikatselu",
        "showpreview": "Esikatsele",
        "showdiff": "Näytä muutokset",
-       "blankarticle": "<strong>Varoitus:</strong> Sivu, jota olet luomassa on tyhjä.\nJos napsautat \"$1\" uudelleen, sivu luodaan ilman sisältöä.",
+       "blankarticle": "<strong>Varoitus:</strong> Sivu, jota olet luomassa on tyhjä.\nJos napsautat ”$1” uudelleen, sivu luodaan ilman sisältöä.",
        "anoneditwarning": "<strong>Varoitus:</strong> Et ole kirjautunut sisään. IP-osoitteesi näkyy julkisesti kaikille, jos muokkaat. Jos <strong>[$1 kirjaudut sisään]</strong> tai <strong>[$2 luot tunnuksen]</strong>, muokkauksesi kirjataan käyttäjätunnuksesi tekemiksi ja samalla saat käyttöösi hyödyllisiä välineitä.",
        "anonpreviewwarning": "''Et ole kirjautunut sisään. Tallentaminen kirjaa IP-osoitteesi tämän sivun muutoshistoriaan.''",
        "missingsummary": "Et ole antanut yhteenvetoa. Jos valitset Tallenna uudelleen, niin muokkauksesi tallennetaan ilman yhteenvetoa.",
-       "selfredirect": "<strong>Varoitus:</strong> Olet tekemässä uudelleenohjausta, joka johtaa tästä sivusta tähän samaan sivuun. \n\nOlet ehkä määrittänyt ohjauksen kohteen väärin tai kenties muokkaat parhaillaan väärää sivua.\n\nJos painat toimintoa \"$1\" uudestaan, tämä ohjaussivu luodaan joka tapauksessa.",
+       "selfredirect": "<strong>Varoitus:</strong> Olet tekemässä uudelleenohjausta, joka johtaa tästä sivusta tähän samaan sivuun. \n\nOlet ehkä määrittänyt ohjauksen kohteen väärin tai kenties muokkaat parhaillaan väärää sivua.\n\nJos painat toimintoa ”$1” uudestaan, tämä ohjaussivu luodaan joka tapauksessa.",
        "missingcommenttext": "Kirjoita kommentti.",
        "missingcommentheader": "<strong>Muistutus:</strong> Et ole antanut aiheotsikkoa tälle kommentille. Napsauta ”$1”, jos haluat tallentaa kommenttisi ilman sellaista.",
        "summary-preview": "Yhteenvedon esikatselu:",
        "anontalkpagetext": "----''Tämä on nimettömän käyttäjän keskustelusivu. Hän ei ole joko luonut itselleen käyttäjätunnusta tai ei käytä sitä, jonka vuoksi hänet tunnistetaan nyt numeerisella IP-osoitteella. Kyseinen IP-osoite voi olla useamman henkilön käytössä. Jos olet nimetön käyttäjä ja sinusta tuntuu, että aiheettomia kommentteja on ohjattu sinulle, [[Special:CreateAccount|luo itsellesi käyttäjätunnus]] tai [[Special:UserLogin|kirjaudu sisään]] välttääksesi jatkossa sekaannukset muiden nimettömien käyttäjien kanssa.''",
        "noarticletext": "Tällä hetkellä tällä sivulla ei ole tekstiä.\nVoit [[Special:Search/{{PAGENAME}}|etsiä sivun nimellä]] muilta sivuilta,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} hakea aiheeseen liittyviä lokeja]\ntai [{{fullurl:{{FULLPAGENAME}}|action=edit}} luoda tämän sivun]</span>.",
        "noarticletext-nopermission": "Tällä hetkellä tällä sivulla ei ole tekstiä.\nVoit [[Special:Search/{{PAGENAME}}|etsiä sivun nimellä]] muilta sivuilta tai <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} hakea aiheeseen liittyviä lokeja]</span>, mutta sinulla ei ole oikeutta luoda tätä sivua.",
-       "missing-revision": "Sivusta \"{{FULLPAGENAME}}\" ei ole olemassa versiota $1.\n\nYleensä tämä johtuu vanhentuneesta historialinkistä sivulle, joka on poistettu.\nTarkempia tietoja löytyy [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} poistolokista].",
-       "userpage-userdoesnotexist": "Käyttäjätunnusta \"$1\" ei ole rekisteröity. \nVarmista, haluatko luoda tämän sivun tai muokata sitä.",
+       "missing-revision": "Sivusta ”{{FULLPAGENAME}}” ei ole olemassa versiota $1.\n\nYleensä tämä johtuu vanhentuneesta historialinkistä sivulle, joka on poistettu.\nTarkempia tietoja löytyy [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} poistolokista].",
+       "userpage-userdoesnotexist": "Käyttäjätunnusta ”$1” ei ole rekisteröity. \nVarmista, haluatko luoda tämän sivun tai muokata sitä.",
        "userpage-userdoesnotexist-view": "Käyttäjätunnusta ”$1” ei ole rekisteröity.",
        "blocked-notice-logextract": "Tämä käyttäjä on tällä hetkellä estetty.\nAlla on viimeisin estolokin tapahtuma:",
        "clearyourcache": "<strong>Huomautus:</strong> Selaimen välimuisti pitää tyhjentää asetusten tallentamisen jälkeen, jotta muutokset tulisivat voimaan.\n* <strong>Firefox ja Safari:</strong> Napsauta <em>Shift</em>-näppäin pohjassa <em>Päivitä</em>, tai paina <em>Ctrl-F5</em> tai <em>Ctrl-R</em> (<em>⌘-R</em> Macilla)\n* <strong>Google Chrome:</strong> Paina <em>Ctrl-Shift-R</em> (<em>⌘-Shift-R</em> Macilla)\n* <strong>Internet Explorer:</strong> Napsauta <em>Ctrl</em>-näppäin pohjassa <em>Päivitä</em> tai paina <em>Ctrl-F5</em>\n* <strong>Opera:</strong> <em>Menu → Settings</em> (<em>Opera → Preferences</em> Macilla) ja sitten <em>Privacy & security → Clear browsing data → Cached images and files</em>.",
        "usercssyoucanpreview": "Voit testata uutta CSS:ää ennen tallennusta käyttämällä painiketta ”{{int:showpreview}}”.",
-       "userjsonyoucanpreview": "<strong>Vihje:</strong> Käytä \"{{int:showpreview}}\" painiketta testataksesi uutta JSON:iasi ennen tallentamista.",
+       "userjsonyoucanpreview": "<strong>Vihje:</strong> Voit testata uutta JSONia ennen tallennusta käyttämällä painiketta ”{{int:showpreview}}”.",
        "userjsyoucanpreview": "Voit testata uutta JavaScriptiä ennen tallennusta käyttämällä painiketta ”{{int:showpreview}}”.",
        "usercsspreview": "'''Tämä on CSS:n esikatselu. Muutoksia ei ole vielä tallennettu.'''",
        "userjsonpreview": "<strong>Huomaa, että tämä on vasta JSON-käyttäjäasetusten esikatselu.\nMuutoksia ei ole vielä tallennettu!</strong>",
        "sitecsspreview": "'''Huomaa, että tämä on vasta CSS:n esikatselu.''' \n'''Muutoksia ei ole vielä tallennettu.'''",
        "sitejsonpreview": "<strong>Huomaa, että tämä on vasta JSON-asetusten esikatselu.\nMuutoksia ei ole vielä tallennettu!</strong>",
        "sitejspreview": "'''Huomaa, että tämä on vasta JavaScript-koodin esikatselu.'''\n'''Muutoksia ei ole vielä tallennettu.'''",
-       "userinvalidconfigtitle": "<strong>Varoitus:</strong> Tyyliä nimeltä ”$1” ei ole olemassa. Muista, että käyttäjän määrittelemät .css-, -json- ja .js-sivut alkavat pienellä alkukirjaimella, esim. {{ns:user}}:Matti Meikäläinen/vector.css eikä {{ns:user}}:Matti Meikäläinen/Vector.css.",
+       "userinvalidconfigtitle": "<strong>Varoitus:</strong> Tyyliä nimeltä ”$1” ei ole olemassa. Muista, että käyttäjän määrittelemät .css-, -.json- ja .js-sivut alkavat pienellä alkukirjaimella, esim. {{ns:user}}:Matti Meikäläinen/vector.css eikä {{ns:user}}:Matti Meikäläinen/Vector.css.",
        "updated": "(Päivitetty)",
        "note": "'''Huomautus:'''",
        "previewnote": "'''Tämä on vasta sivun esikatselu.'''\nTekemiäsi muutoksia ei ole vielä tallennettu.",
        "editingsection": "Muokataan osiota sivusta $1",
        "editingcomment": "Muokataan uutta osiota sivulla $1",
        "editconflict": "Päällekkäinen muokkaus: $1",
-       "explainconflict": "Joku muu on muuttanut tätä sivua sen jälkeen, kun aloit muokata sitä.\nYlempi tekstialue sisältää tämänhetkisen tekstin.\nTekemäsi muutokset näkyvät alemmassa ikkunassa.\nSinun täytyy yhdistää muutoksesi olemassa olevaan tekstiin.\n<strong>Vain</strong> ylemmässä alueessa oleva teksti tallentuu, kun napsautat \"$1\".",
+       "explainconflict": "Joku muu on muuttanut tätä sivua sen jälkeen, kun aloit muokata sitä.\nYlempi tekstialue sisältää tämänhetkisen tekstin.\nTekemäsi muutokset näkyvät alemmassa ikkunassa.\nSinun täytyy yhdistää muutoksesi olemassa olevaan tekstiin.\n<strong>Vain</strong> ylemmässä alueessa oleva teksti tallentuu, kun napsautat ”$1”.",
        "yourtext": "Oma tekstisi",
        "storedversion": "Tallennettu versio",
        "editingold": "'''Varoitus: Olet muokkaamassa vanhaa versiota tämän sivun tekstistä. Jos tallennat sen, kaikki tämän version jälkeen tehdyt muutokset katoavat.'''",
        "content-failed-to-parse": "Sisältö tyypiltään $2 ei jäsenny tyypiksi $1: $3",
        "invalid-content-data": "Virheellinen sisältö",
        "content-not-allowed-here": "Sivun [[$2]] sisältö ei voi olla tyyppiä $1.",
-       "editwarning-warning": "Tältä sivulta poistuminen saattaa aiheuttaa kaikkien tekemiesi muutosten katoamisen.\nJos olet kirjautunut sisään, voit poistaa tämän varoituksen käytöstä omien asetuksien osiossa \"{{int:prefs-editing}}\".",
+       "editwarning-warning": "Tältä sivulta poistuminen saattaa aiheuttaa kaikkien tekemiesi muutosten katoamisen.\nJos olet kirjautunut sisään, voit poistaa tämän varoituksen käytöstä omien asetuksien osiossa ”{{int:prefs-editing}}”.",
        "editpage-invalidcontentmodel-title": "Sisältömalli ei ole tuettu",
-       "editpage-invalidcontentmodel-text": "Sisältömalli \"$1\" ei ole tuettu.",
+       "editpage-invalidcontentmodel-text": "Sisältömalli ”$1” ei ole tuettu.",
        "editpage-notsupportedcontentformat-title": "Sisällön muotoa ei tueta",
        "editpage-notsupportedcontentformat-text": "Sisällön muotoa $1 ei tueta sisältömallilla $2.",
        "content-model-wikitext": "wikiteksti",
        "content-json-empty-array": "Tyhjä array",
        "deprecated-self-close-category": "Sivut, joissa on virheellisiä itsensäsulkevia HTML-tageja",
        "deprecated-self-close-category-desc": "Sivulla on virheellisiä itsensäsulkevia HTML-tageja, kuten <code>&lt;b/></code> tai <code>&lt;span/></code>. Niiden käyttäytyminen muuttuu pian HTLM5:n määritysten mukaiseksi, joten niiden käyttö wikitekstissä on vanhentunut.",
-       "duplicate-args-warning": "<strong>Varoitus:</strong> [[:$1]] kutsuu mallinetta [[:$2]] niin, että parametrille \"$3\" on annettu enemmän kuin yksi arvo. Ainoastaan viimeksi annettu arvo otetaan huomioon.",
+       "duplicate-args-warning": "<strong>Varoitus:</strong> [[:$1]] kutsuu mallinetta [[:$2]] niin, että parametrille ”$3” on annettu enemmän kuin yksi arvo. Ainoastaan viimeksi annettu arvo otetaan huomioon.",
        "duplicate-args-category": "Sivut, jotka käyttävät kaksinkertaisia argumentteja mallinekutsuissa",
        "duplicate-args-category-desc": "Tämä sivu sisältää sellaisia mallinekutsuja, jotka käyttävät kaksi kertaa samaa argumenttia kuten <nowiki>{{foo|bar=1|bar=2}}</nowiki></code> taikka <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
        "expensive-parserfunction-warning": "Tällä sivulla on liian monta hitaiden laajennusfunktioiden kutsua.\nKutsuja pitäisi olla alle $2 {{PLURAL:$2|kappale|kappaletta}}, mutta nyt niitä on $1 {{PLURAL:$1|kappale|kappaletta}}.",
        "deletedhist": "Poistettujen versioiden historia",
        "revdelete-hide-current": "Virhe piilotettaessa kohdetta päivämäärällä $1 kello $2: Tämä on uusin versio.\nSitä ei voi piilottaa.",
        "revdelete-show-no-access": "Virhe näyttäessä kohtaa $2 kello $1: kohta on merkitty ”rajoitetuksi”.\nSinulla ei ole oikeutta siihen.",
-       "revdelete-modify-no-access": "Virhe kohteen päivämäärällä $1 kello $2 muutoksessa: tämä kohde on merkitty \"rajoitetuksi\". \nSinulla ei ole oikeutta muuttaa kohdetta.",
+       "revdelete-modify-no-access": "Virhe kohteen päivämäärällä $1 kello $2 muutoksessa: tämä kohde on merkitty ”rajoitetuksi”. \nSinulla ei ole oikeutta muuttaa kohdetta.",
        "revdelete-modify-missing": "Virhe muuttaessa kohdetta, jonka tunniste on $1: Se puuttuu tietokannasta.",
        "revdelete-no-change": "'''Varoitus.''' Kohteessa päivämäärällä $1 kello $2 on jo valmiiksi haluamasi näkyvyysasetukset.",
        "revdelete-concurrent-change": "Virhe kohteen päivämäärällä $1 kello $2 muutoksessa: sen näkyvyysasetuksia on ilmeisesti joku muuttanut sillä aikaa kun yritit muuttaa sitä.\nOle hyvä ja tarkista lokit.",
        "diff-paragraph-moved-toold": "Kappale siirrettiin. Klikkaa hypätäksesi vanhaan sijaintiin.",
        "difference-missing-revision": "{{PLURAL:$2|Yhtä versiota|$2 versiota}} tästä vertailusta ($1) {{PLURAL:$2|ei}} löytynyt.\n\nUseimmiten tämä johtuu vanhentuneesta vertailulinkistä poistettuun sivuun.\nLisätietoja löytyy [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} poistolokista].",
        "searchresults": "Hakutulokset",
-       "search-filter-title-prefix": "Haetaan vain sivuista, joiden otsikko alkaa \"$1\"",
+       "search-filter-title-prefix": "Haetaan vain sivuista, joiden otsikko alkaa ”$1”",
        "search-filter-title-prefix-reset": "Hae kaikista sivuista",
        "searchresults-title": "Haun tulokset hakusanalle ”$1”",
        "titlematches": "Osumat sivujen otsikoissa",
        "shown-title": "Näytä $1 {{PLURAL:$1|osuma|osumaa}} sivulla",
        "viewprevnext": "Näytä [$3] kerralla.\n\n$1 {{int:pipe-separator}} $2",
        "searchmenu-exists": "'''Tässä wikissä on sivu nimellä [[:$1]].'''",
-       "searchmenu-new": "<strong>Luo sivu \"[[:$1]]\" tähän wikiin.</strong> {{PLURAL:$2|0=|Katso myös sivua, joka löytyi hakutoiminnolla.\n|Katso myös hakutuloksia.}}",
+       "searchmenu-new": "<strong>Luo sivu ”[[:$1]]” tähän wikiin.</strong> {{PLURAL:$2|0=|Katso myös sivua, joka löytyi hakutoiminnolla.\n|Katso myös hakutuloksia.}}",
        "searchprofile-articles": "Sisältösivut",
        "searchprofile-images": "Kuvat ja tiedostot",
        "searchprofile-everything": "Kaikki",
        "localtime": "Paikallinen aika",
        "timezoneuseserverdefault": "Käytä oletusta ($1)",
        "timezoneuseoffset": "Muu (määritä aikaero)",
+       "timezone-useoffset-placeholder": "Esimerkkiarvoja: \"-07:00\" tai \"01:00\"",
        "servertime": "Palvelimen aika",
        "guesstimezone": "Utele selaimelta",
        "timezoneregion-africa": "Afrikka",
        "prefs-editor": "Muokkain",
        "prefs-preview": "Esikatselu",
        "prefs-advancedrc": "Lisäasetukset",
-       "prefs-opt-out": "Jättäydy pois uudistuksista",
        "prefs-advancedrendering": "Lisäasetukset",
        "prefs-advancedsearchoptions": "Lisäasetukset",
        "prefs-advancedwatchlist": "Lisäasetukset",
        "prefs-displayrc": "Perusasetukset",
        "prefs-displaywatchlist": "Näyttöasetukset",
+       "prefs-changesrc": "Näytettävät muutokset",
+       "prefs-changeswatchlist": "Näytettävät muutokset",
+       "prefs-pageswatchlist": "Tarkkaillut sivut",
        "prefs-tokenwatchlist": "Avain",
        "prefs-diffs": "Eroavaisuudet",
        "prefs-help-prefershttps": "Tämä asetus tulee voimaan seuraavan sisäänkirjautumisesi yhteydessä.",
-       "prefswarning-warning": "Olet tehnyt asetuksiisi muutoksia, joita ei ole vielä tallennettu.\nJos poistut sivulta klikkaamatta \"$1\", asetuksiasi ei päivitetä.",
+       "prefswarning-warning": "Olet tehnyt asetuksiisi muutoksia, joita ei ole vielä tallennettu.\nJos poistut sivulta klikkaamatta ”$1”, asetuksiasi ei päivitetä.",
        "prefs-tabs-navigation-hint": "Vihje: Voit käyttää vasenta ja oikeata nuolinäppäintä liikkumiseen välilehtien välillä.",
        "userrights": "Käyttäjän oikeudet",
        "userrights-lookup-user": "Valitse käyttäjä",
        "userrights-expiry-existing": "Nykyinen vanhentumisaika: $2 kello $3",
        "userrights-expiry-othertime": "Muu aika:",
        "userrights-expiry-options": "1 päivä:1 day,1 viikko:1 week,1 kuukausi:1 month,3 kuukautta:3 months,6 kuukautta:6 months,1 vuosi:1 year",
-       "userrights-invalid-expiry": "Ryhmän \"$1\" vanhentumisaika on virheellinen.",
-       "userrights-expiry-in-past": "Ryhmän \"$1\" vanhentumisaika on mennyt.",
-       "userrights-cannot-shorten-expiry": "Et voi aikaistaa ryhmän \"$1\" jäsenyyden erääntymisaikoja. Vain käyttäjät, joilla on oikeus lisätä ja poistaa ryhmiä, voivat aikaistaa erääntymisaikoja.",
+       "userrights-invalid-expiry": "Ryhmän ”$1” vanhentumisaika on virheellinen.",
+       "userrights-expiry-in-past": "Ryhmän ”$1” vanhentumisaika on mennyt.",
+       "userrights-cannot-shorten-expiry": "Et voi aikaistaa ryhmän ”$1” jäsenyyden erääntymisaikoja. Vain käyttäjät, joilla on oikeus lisätä ja poistaa ryhmiä, voivat aikaistaa erääntymisaikoja.",
        "userrights-conflict": "Päällekkäinen käyttöoikeuksien muutos! Tarkista tekemäsi muutokset ja vahvista ne.",
        "group": "Ryhmä",
        "group-user": "käyttäjät",
        "right-ipblock-exempt": "Ohittaa IP-, automaattiset ja osoitealue-estot",
        "right-unblockself": "Poistaa esto itseltään",
        "right-protect": "Muuttaa suojaustasoja ja muokata tarttuvasti suojattuja sivuja",
-       "right-editprotected": "Muokata sivuja, jotka on suojattu tasolle \"{{int:protect-level-sysop}}\"",
-       "right-editsemiprotected": "Muokata sivuja, jotka on suojattu tasolle \"{{int:protect-level-autoconfirmed}}\"",
+       "right-editprotected": "Muokata sivuja, jotka on suojattu tasolle ”{{int:protect-level-sysop}}”",
+       "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-editusercss": "Muokata toisten käyttäjien CSS-tiedostoja",
        "right-applychangetags": "Asettaa [[Special:Tags|merkkauksia]] omien muutosten yhteyteen",
        "right-changetags": "Lisätä ja poistaa satunnaisia [[Special:Tags|merkkauksia]] yksittäisissä sivuversioissa tai lokimerkinnöissä",
        "right-deletechangetags": "Poistaa [[Special:Tags|merkkauksia]] tietokannasta",
-       "grant-generic": "\"$1\" oikeuksien joukko",
+       "grant-generic": "”$1” oikeuksien joukko",
        "grant-group-page-interaction": "Käsitellä sivuja",
        "grant-group-file-interaction": "Käsitellä mediatiedostoja",
        "grant-group-watchlist-interaction": "Käsitellä tarkkailulistaasi",
        "rcfilters-filter-user-experience-level-newcomer-label": "Tulokkaat",
        "rcfilters-filter-user-experience-level-newcomer-description": "Rekisteröityneet muokkaajat, joilla vähemmän kuin 10 muokkausta tai 4 päivää aktiivisuutta.",
        "rcfilters-filter-user-experience-level-learner-label": "Oppijat",
-       "rcfilters-filter-user-experience-level-learner-description": "Rekisteröityneet muokkaajat, joiden kokemus on välillä \"tulokas\" ja \"kokenut käyttäjä\".",
+       "rcfilters-filter-user-experience-level-learner-description": "Rekisteröityneet muokkaajat, joiden kokemus on välillä ”tulokas” ja ”kokenut käyttäjä”.",
        "rcfilters-filter-user-experience-level-experienced-label": "Kokeneet käyttäjät",
        "rcfilters-filter-user-experience-level-experienced-description": "Rekisteröityneet muokkaajat, joilla enemmän kuin 500 muokkausta ja 30 päivää aktiivisuutta.",
        "rcfilters-filtergroup-automated": "Automatisoidut muutokset",
        "rcfilters-filter-categorization-description": "Tulokset sivuista, joita on lisätty luokkiin tai poistettu luokista.",
        "rcfilters-filter-logactions-label": "Lokitoiminnot",
        "rcfilters-filter-logactions-description": "Ylläpidolliset toimet, tunnusten luonnit, sivujen poistot, tiedostolataukset…",
-       "rcfilters-hideminor-conflicts-typeofchange-global": "\"Pienet muutokset\" -suodatin on ristiriidassa yhden tai useamman Muutoksen tyyppi suodattimen kanssa, koska joitain muutostyyppejä ei voida pitää \"pieninä\". Ristiriidassa oleva suodatin on merkittynä Aktiivisissa suodattimissa, yläpuolella.",
-       "rcfilters-hideminor-conflicts-typeofchange": "Joitain muutostyyppejä ei voida määrittää \"pieneksi\", joten tämä suodatin on ristiriidassa seuraavien Muutoksen tyyppi suodattimien kanssa: $1",
-       "rcfilters-typeofchange-conflicts-hideminor": "\"Muutoksen tyyppi\" on ristiriidassa \"Pienet muutokset\" -suodattimen kanssa. Joitain muutostyyppejä ei voida merkitä \"pieniksi\".",
+       "rcfilters-hideminor-conflicts-typeofchange-global": "”Pienet muutokset” -suodatin on ristiriidassa yhden tai useamman Muutoksen tyyppi -suodattimen kanssa, koska joitain muutostyyppejä ei voida pitää ”pieninä”. Ristiriidassa oleva suodatin on merkittynä Aktiivisissa suodattimissa, yläpuolella.",
+       "rcfilters-hideminor-conflicts-typeofchange": "Joitain muutostyyppejä ei voida määrittää ”pieneksi”, joten tämä suodatin on ristiriidassa seuraavien Muutoksen tyyppi suodattimien kanssa: $1",
+       "rcfilters-typeofchange-conflicts-hideminor": "”Muutoksen tyyppi” on ristiriidassa ”Pienet muutokset” -suodattimen kanssa. Joitain muutostyyppejä ei voida merkitä ”pieniksi”.",
        "rcfilters-filtergroup-lastRevision": "Viimeisimmät versiot",
        "rcfilters-filter-lastrevision-label": "Viimeisin versio",
        "rcfilters-filter-lastrevision-description": "Vain viimeisin muutos sivuun.",
        "rcfilters-filter-previousrevision-label": "Ei viimeisin muutos",
-       "rcfilters-filter-previousrevision-description": "Kaikki muutokset, jotka eivät ole \"viimeisin versio\".",
+       "rcfilters-filter-previousrevision-description": "Kaikki muutokset, jotka eivät ole ”viimeisin versio”.",
        "rcfilters-filter-excluded": "Poissuljettu",
        "rcfilters-tag-prefix-namespace-inverted": "<strong>:ei</strong> $1",
        "rcfilters-exclude-button-off": "Poissulje valitut",
        "rcfilters-watchlist-markseen-button": "Merkitse kaikki muutokset nähdyiksi",
        "rcfilters-watchlist-edit-watchlist-button": "Muokkaa tarkkailemiasi sivuja",
        "rcfilters-watchlist-showupdated": "Muutokset sivuihin, joilla et ole vieraillut sen jälkeen kun muutokset on tehty, on <strong>lihavoitu</strong> ja värimerkitty.",
-       "rcfilters-preference-label": "Piilota tuoreiden muutosten parannettu versio",
-       "rcfilters-preference-help": "Peruuttaa vuoden 2017 käyttöliittymän uudistuksen ja kaikki sen jälkeen lisätyt työkalut.",
-       "rcfilters-watchlist-preference-label": "Piilota tarkkailulistan parannettu versio",
-       "rcfilters-watchlist-preference-help": "Poistaa käytöstä vuoden 2017 ulkoasun uudistuksen ja kaikki sen jälkeen lisätyt työkalut.",
+       "rcfilters-preference-label": "Käytä ilman JavaScriptiä toimivaa käyttöliittymää",
+       "rcfilters-preference-help": "Lataa tuoreimmat muutokset -näkymän ilman suodattimia tai korostustoimintoa.",
+       "rcfilters-watchlist-preference-label": "Käytä ilman JavaScriptiä toimivaa käyttöliittymää",
+       "rcfilters-watchlist-preference-help": "Lataa tarkkailulistan ilman suodattimia tai korostustoimintoa.",
        "rcfilters-filter-showlinkedfrom-label": "Näytä muutokset sivuilla, jonne on linkki sivulta",
        "rcfilters-filter-showlinkedfrom-option-label": "<strong>Sivut, joihin linkitetään</strong> valitulta sivulta",
        "rcfilters-filter-showlinkedto-label": "Näytä muutokset sivuilla, joista on linkki sivulle",
        "newsectionsummary": "/* $1 */ uusi osio",
        "rc-enhanced-expand": "Näytä yksityiskohdat",
        "rc-enhanced-hide": "Piilota yksityiskohdat",
-       "rc-old-title": "alun perin luotu nimellä \"$1\"",
+       "rc-old-title": "alun perin luotu nimellä ”$1”",
        "recentchangeslinked": "Linkitettyjen sivujen muutokset",
        "recentchangeslinked-feed": "Linkitettyjen sivujen muutokset",
        "recentchangeslinked-toolbox": "Linkitettyjen sivujen muutokset",
        "upload_directory_read_only": "Palvelimella ei ole kirjoitusoikeuksia tallennushakemistoon $1.",
        "uploaderror": "Tallennusvirhe",
        "upload-recreate-warning": "<strong>Varoitus: Tiedosto tällä nimellä on poistettu tai siirretty.</strong>\n\nPoisto- ja siirtoloki tälle sivulle näkyy alla:",
-       "uploadtext": "Käytä tätä alla olevaa lomaketta tiedostojen tallentamiseen.\nVoit katsella luetteloa aiemmin tallennetuista tiedostoista sivulla [[Special:FileList|tiedostoluettelo]]. Kaikki tallennukset kirjataan myös [[Special:Log/upload|tallennuslokiin]] ja tiedostojen poistot [[Special:Log/delete|poistolokiin]].\n\nJotta saat tiedoston näkymään sivulla, käytä jotakin seuraavista muotoiluista linkkinä siihen:\n* <strong><code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Tiedosto.jpg]]</nowiki></code></strong> käyttääksesi tiedoston kokonaista versiota.\n* <strong><code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Tiedosto.png|200px|thumb|left|teksti tähän]]</nowiki></code></strong> käyttääksesi tiedostoa sovitettuna 200 kuvapistettä leveään laatikkoon kuvatekstillä \"teksti tähän\".\n* <strong><code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:Tiedosto.ogg]]</nowiki></code></strong>, jos haluat suoran linkin tiedostoon ilman että tiedostoa näytetään.",
+       "uploadtext": "Käytä tätä alla olevaa lomaketta tiedostojen tallentamiseen.\nVoit katsella luetteloa aiemmin tallennetuista tiedostoista sivulla [[Special:FileList|tiedostoluettelo]]. Kaikki tallennukset kirjataan myös [[Special:Log/upload|tallennuslokiin]] ja tiedostojen poistot [[Special:Log/delete|poistolokiin]].\n\nJotta saat tiedoston näkymään sivulla, käytä jotakin seuraavista muotoiluista linkkinä siihen:\n* <strong><code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Tiedosto.jpg]]</nowiki></code></strong> käyttääksesi tiedoston kokonaista versiota.\n* <strong><code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Tiedosto.png|200px|thumb|left|teksti tähän]]</nowiki></code></strong> käyttääksesi tiedostoa sovitettuna 200 kuvapistettä leveään laatikkoon kuvatekstillä ”teksti tähän”.\n* <strong><code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:Tiedosto.ogg]]</nowiki></code></strong>, jos haluat suoran linkin tiedostoon ilman että tiedostoa näytetään.",
        "upload-permitted": "{{PLURAL:$2|Sallittu tiedostomuoto|Sallitut tiedostomuodot}}: $1.",
        "upload-preferred": "{{PLURAL:$2|Suositeltu tiedostomuoto|Suositellut tiedostomuodot}}: $1.",
        "upload-prohibited": "{{PLURAL:$2|Kielletty tiedostomuoto|Kielletyt tiedostomuodot}}: $1.",
        "backend-fail-read": "Tiedostoa $1 ei voitu lukea.",
        "backend-fail-create": "Tiedostoa $1 ei voitu luoda.",
        "backend-fail-maxsize": "Tiedostoa $1 ei voitu luoda, koska se on suurempi kuin {{PLURAL:$2|yksi tavu|$2 tavua}}.",
-       "backend-fail-readonly": "Taustajärjestelmä \"$1\" on tällä hetkellä vain lukutilassa. Syy tähän on: \"''$2''\"",
-       "backend-fail-synced": "Tiedoston \"$1\" tila ei vastaa tiedoston tilaa sisäisissä taustajärjestelmissä.",
-       "backend-fail-connect": "Varastojärjestelmään \"$1\" ei saada yhteyttä.",
-       "backend-fail-internal": "Tuntematon virhe taustajärjestelmässä \"$1\".",
+       "backend-fail-readonly": "Taustajärjestelmä ”$1” on tällä hetkellä vain luku -tilassa. Syy tähän on: ”''$2''”",
+       "backend-fail-synced": "Tiedoston ”$1” tila ei vastaa tiedoston tilaa sisäisissä taustajärjestelmissä.",
+       "backend-fail-connect": "Varastojärjestelmään ”$1” ei saada yhteyttä.",
+       "backend-fail-internal": "Tuntematon virhe taustajärjestelmässä ”$1”.",
        "backend-fail-contenttype": "Tiedostoa ei voitu tallentaa kohteeseen $1, koska tiedostomuotoa ei voitu määrittää.",
        "backend-fail-batchsize": "Taustajärjestelmälle on annettu $1 {{PLURAL:$1|tiedostotoiminto|toimintoa}}; enimmäismäärä on $2 {{PLURAL:$2|tiedostotoiminto|toimintoa}}.",
        "backend-fail-usable": "Tiedostoa $1 ei voitu lukea tai luoda, koska käyttöoikeudet eivät riittäneet tai hakemisto puuttuu.",
-       "filejournal-fail-dbconnect": "Ei voitu yhdistää kohteeseen journal database for storage backend \"$1\".",
-       "filejournal-fail-dbquery": "Ei voitu päivittää kohdetta journal database for storage backend \"$1\".",
+       "filejournal-fail-dbconnect": "Ei voitu yhdistää kohteeseen journal database for storage backend ”$1”.",
+       "filejournal-fail-dbquery": "Ei voitu päivittää kohdetta journal database for storage backend ”$1”.",
        "lockmanager-notlocked": "Kohteen $1 lukitusta ei voitu poistaa, koska se ei ole lukittu.",
        "lockmanager-fail-closelock": "Tiedoston $1 lukkotiedostoa ei voitu sulkea.",
        "lockmanager-fail-deletelock": "Tiedoston $1 lukkotiedostoa ei voitu poistaa.",
-       "lockmanager-fail-acquirelock": "Tiedostopolulle \"$1\" ei voitu luoda suojausta.",
+       "lockmanager-fail-acquirelock": "Tiedostopolulle ”$1” ei voitu luoda suojausta.",
        "lockmanager-fail-openlock": "Tiedoston $1 lukkotiedostoa ei voitu avata. Varmista että latauskansiosi on määritetty oikein ja verkkopalvelimellasi on oikeudet kirjoittaa tähän kansioon. Katso https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgUploadDirectory saadaksesi lisätietoja.",
        "lockmanager-fail-releaselock": "Tiedoston $1 lukituksen avaaminen epäonnistui.",
        "lockmanager-fail-db-bucket": "Ei voitu yhdistää riittävästi tietokantoja kohdassa $1.",
        "uploadstash-errclear": "Tiedostojen tyhjentäminen epäonnistui.",
        "uploadstash-refresh": "Päivitä tiedostoluettelo",
        "uploadstash-thumbnail": "näytä pienoiskuva",
-       "uploadstash-exception": "Tiedostoa ei kyetty säilömään latausmuistiin ($1): \"$2\"",
+       "uploadstash-exception": "Tiedostoa ei kyetty säilömään latausmuistiin ($1): ”$2”.",
        "uploadstash-bad-path": "\nPolkua ei ole.",
        "uploadstash-bad-path-invalid": "Polku ei kelpaa.",
-       "uploadstash-bad-path-unknown-type": "Tuntematon tyyppi \"$1\".",
+       "uploadstash-bad-path-unknown-type": "Tuntematon tyyppi ”$1”.",
        "uploadstash-bad-path-unrecognized-thumb-name": "Tunnistamaton pienoiskuvan nimi.",
        "uploadstash-bad-path-no-handler": "Tiedoston $2 MIME-tyypille $1 ei löytynyt käsittelijää.",
-       "uploadstash-bad-path-bad-format": "Avain \"$1\" ei ole sopivassa muodossa.",
-       "uploadstash-file-not-found": "Avainta \"$1\" ei löytynyt kätköstä.",
+       "uploadstash-bad-path-bad-format": "Avain ”$1” ei ole sopivassa muodossa.",
+       "uploadstash-file-not-found": "Avainta ”$1” ei löytynyt kätköstä.",
        "uploadstash-file-not-found-no-thumb": "Pienoiskuvaa ei voitu saada.",
        "uploadstash-file-not-found-no-local-path": "Skaalatulla kohteella ei ole paikallista polkua.",
        "uploadstash-file-not-found-no-object": "Ei voitu luoda paikallista tiedostokohdetta pienoiskuvalle.",
        "img-auth-public": "Img_auth.php:n tarkoitus on näyttää tiedostoja yksityisessä wikissä.\nTämä wiki on asennettu julkiseksi wikiksi.\nParhaan turvallisuuden vuoksi img_auth.php on poissa käytöstä.",
        "img-auth-noread": "Käyttäjillä ei ole oikeutta lukea tiedostoa ”$1”.",
        "http-invalid-url": "Kelpaamaton URL: $1",
-       "http-invalid-scheme": "Verkko-osoitteita kaavalla \"$1\" ei tueta",
+       "http-invalid-scheme": "Verkko-osoitteita kaavalla ”$1” ei tueta.",
        "http-request-error": "HTTP-pyyntö epäonnistui tuntemattoman virheen takia.",
        "http-read-error": "HTTP-lukuvirhe.",
        "http-timed-out": "HTTP-pyyntö aikakatkaistiin.",
        "listfiles-delete": "poista",
        "listfiles-summary": "Tämä toimintosivu näyttää kaikki tallennetut tiedostot.",
        "listfiles_search_for": "Etsi tiedoston nimellä:",
-       "listfiles-userdoesnotexist": "Käyttäntunnusta \"$1\" ei ole rekisteröity.",
+       "listfiles-userdoesnotexist": "Käyttäjätunnusta ”$1” ei ole rekisteröity.",
        "imgfile": "tiedosto",
        "listfiles": "Tiedostoluettelo",
        "listfiles_thumb": "Pienoiskuva",
        "uncategorizedcategories": "Luokittelemattomat luokat",
        "uncategorizedimages": "Luokittelemattomat tiedostot",
        "uncategorizedtemplates": "Luokittelemattomat mallineet",
-       "uncategorized-categories-exceptionlist": "# Sisältää luettelon luokkia, joita ei tulisi mainita Special:UncategorizedCategories-sivulla. Yksi riviä kohden, alkaen \"*\"-merkillä. Muilla merkeillä alkavat rivit jätetään huomiotta. Käytä \"#\"-merkkiä kommenttien kirjoittamiseen.",
+       "uncategorized-categories-exceptionlist": "# Sisältää luettelon luokkia, joita ei tulisi mainita Special:UncategorizedCategories-sivulla. Yksi riviä kohden, alkaen ”*”-merkillä. Muilla merkeillä alkavat rivit jätetään huomiotta. Käytä ”#”-merkkiä kommenttien kirjoittamiseen.",
        "unusedcategories": "Käyttämättömät luokat",
        "unusedimages": "Käyttämättömät tiedostot",
        "wantedcategories": "Halutut luokat",
        "apisandbox-submit": "Tee pyyntö",
        "apisandbox-reset": "Tyhjennä",
        "apisandbox-retry": "Yritä uudestaan",
-       "apisandbox-loading": "Ladataan tietoja API-moduulista \"$1\"...",
-       "apisandbox-load-error": "Tapahtui virhe ladattaessa tietoja API-moduulista \"$1\": $2",
+       "apisandbox-loading": "Ladataan tietoja API-moduulista ”$1”…",
+       "apisandbox-load-error": "Tapahtui virhe ladattaessa tietoja API-moduulista ”$1”: $2",
        "apisandbox-no-parameters": "Tässä API-moduulissa ei ole parametreja.",
        "apisandbox-helpurls": "Linkit ohjeisiin",
        "apisandbox-examples": "Esimerkit",
        "apisandbox-request-url-label": "Pyynnön URL",
        "apisandbox-request-json-label": "Pyydetty JSON:",
        "apisandbox-request-time": "Pyyntöön kulunut aika: {{PLURAL:$1|$1 ms}}",
-       "apisandbox-results-fixtoken": "Korjaa \"token\" ja lähetä uudelleen",
-       "apisandbox-results-fixtoken-fail": "\"$1\"-avaimen haku epäonnistui.",
+       "apisandbox-results-fixtoken": "Korjaa ”token” ja lähetä uudelleen",
+       "apisandbox-results-fixtoken-fail": "”$1”-avaimen haku epäonnistui.",
        "apisandbox-alert-page": "Tällä sivulla olevat kentät eivät ole kelvollisia.",
        "apisandbox-alert-field": "Tässä kentässä oleva arvo ei ole kelvollinen.",
        "apisandbox-continue": "Jatka",
        "linksearch-pat": "Hakuehto:",
        "linksearch-ns": "Nimiavaruus:",
        "linksearch-ok": "Hae",
-       "linksearch-text": "Jokerimerkkejä, kuten \"*.wikipedia.org\", voidaan käyttää.\nVaaditaan vähintään ylätason verkkotunnus, esimerkiksi \"*.org\".<br />\n{{PLURAL:$2|Tuettu protokolla|Tuetut protokollat}}: $1 (oletuksena on <code>http://</code>, jos protokollaa ei määritetä).",
+       "linksearch-text": "Jokerimerkkejä, kuten ”*.wikipedia.org”, voidaan käyttää.\nVaaditaan vähintään ylätason verkkotunnus, esimerkiksi ”*.org”.<br />\n{{PLURAL:$2|Tuettu protokolla|Tuetut protokollat}}: $1 (oletuksena on <code>http://</code>, jos protokollaa ei määritetä).",
        "linksearch-line": "$1 on linkitetty sivulta $2",
        "linksearch-error": "Jokerimerkkiä voi käyttää ainoastaan osoitteen alussa.",
        "listusersfrom": "Käyttäjien tunnukset alkavat kirjaimilla:",
        "watchlistanontext": "Sinun täytyy kirjautua sisään, jos haluat nähdä oman tarkkailulistasi.",
        "watchnologin": "Et ole kirjautunut sisään",
        "addwatch": "Lisää tarkkailulistalle",
-       "addedwatchtext": "\"[[:$1]]\" ja sen keskustelusivu on lisätty [[Special:Watchlist|tarkkailulistallesi]].",
-       "addedwatchtext-talk": "\"[[:$1]]\" ja siihen liittyvä sivu on lisätty [[Special:Watchlist|tarkkailulistallesi]].",
-       "addedwatchtext-short": "Sivu \"$1\" on lisätty tarkkailulistallesi.",
+       "addedwatchtext": "”[[:$1]]” ja sen keskustelusivu on lisätty [[Special:Watchlist|tarkkailulistallesi]].",
+       "addedwatchtext-talk": "”[[:$1]]” ja siihen liittyvä sivu on lisätty [[Special:Watchlist|tarkkailulistallesi]].",
+       "addedwatchtext-short": "Sivu ”$1” on lisätty tarkkailulistallesi.",
        "removewatch": "Poista tarkkailulistalta",
-       "removedwatchtext": "\"[[:$1]]\" ja sen keskustelusivu on poistettu [[Special:Watchlist|tarkkailulistaltasi]].",
-       "removedwatchtext-talk": "\"[[:$1]]\" ja siihen liittyvä sivu on poistettu [[Special:Watchlist|tarkkailulistaltasi]].",
+       "removedwatchtext": "”[[:$1]]” ja sen keskustelusivu on poistettu [[Special:Watchlist|tarkkailulistaltasi]].",
+       "removedwatchtext-talk": "”[[:$1]]” ja siihen liittyvä sivu on poistettu [[Special:Watchlist|tarkkailulistaltasi]].",
        "removedwatchtext-short": "Sivu ”$1” on poistettu tarkkailulistaltasi.",
        "watch": "Tarkkaile",
        "watchthispage": "Tarkkaile tätä sivua",
        "deletepage": "Poista sivu",
        "confirm": "Toteuta",
        "excontent": "sisälsi: ”$1”",
-       "excontentauthor": "sisältö oli: \"$1\", ja ainoa muokkaaja oli \"[[Special:Contributions/$2|$2]]\" ([[User talk:$2|keskustelu]])",
+       "excontentauthor": "sisältö oli: ”$1”, ja ainoa muokkaaja oli ”[[Special:Contributions/$2|$2]]” ([[User talk:$2|keskustelu]])",
        "exbeforeblank": "ennen tyhjentämistä sisälsi: ”$1”",
        "delete-confirm": "Poista ”$1”",
        "delete-legend": "Sivun poisto",
        "changecontentmodel-emptymodels-text": "Sisältöä sivulla [[:$1]] ei voida muuntaa mihinkään muotoon.",
        "log-name-contentmodel": "Sisältömallin muutosten loki",
        "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-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",
        "logentry-contentmodel-change-revert": "kumottu",
        "protectlogpage": "Suojausloki",
        "modifiedarticleprotection": "muutti sivun [[$1]] suojausasetuksia",
        "unprotectedarticle": "poisti suojauksen sivulta [[$1]]",
        "movedarticleprotection": "siirsi suojausasetukset sivulta [[$2]] sivulle [[$1]]",
-       "protectedarticle-comment": "{{GENDER:$2|Suojasi}} sivun \"[[$1]]\"",
-       "modifiedarticleprotection-comment": "{{GENDER:$2|Muutti suojaustasoa}} sivulla \"[[$1]]\"",
-       "unprotectedarticle-comment": "{{GENDER:$2|Otti pois suojauksen}} sivulta \"[[$1]]\"",
+       "protectedarticle-comment": "{{GENDER:$2|Suojasi}} sivun ”[[$1]]”",
+       "modifiedarticleprotection-comment": "{{GENDER:$2|Muutti suojaustasoa}} sivulla ”[[$1]]”",
+       "unprotectedarticle-comment": "{{GENDER:$2|Otti pois suojauksen}} sivulta ”[[$1]]”",
        "protect-title": "Muuta suojausta sivulla ”$1”",
        "protect-title-notallowed": "Katsele kohteen $1 suojauksen tasoa",
        "prot_1movedto2": "siirsi sivun [[$1]] uudelle nimelle [[$2]]",
        "contribsub2": "Käyttäjän {{GENDER:$3|$1}} ($2) muokkaukset",
        "contributions-userdoesnotexist": "Käyttäjätunnusta ”$1” ei ole rekisteröity.",
        "nocontribs": "Näihin ehtoihin sopivia muokkauksia ei löytynyt.",
-       "uctop": "(uusin)",
+       "uctop": "uusin",
        "month": "Alkaen kuukaudesta (ja aiemmin):",
        "year": "Vuosi",
        "date": "Alkaen päivämäärästä (ja sitä aiemmat):",
        "blockipsuccesssub": "Esto onnistui",
        "blockipsuccesstext": "[[Special:Contributions/$1|$1]] on estetty.<br />\nVoimassa olevat estot näkyvät [[Special:BlockList|estolistasta]].",
        "ipb-blockingself": "Olet estämässä itseäsi. Oletko varma, että haluat tehdä niin?",
-       "ipb-confirmhideuser": "Olet estämässä käyttäjää ”piilota käyttäjä” -toiminnon kanssa.  Tämä piilottaa käyttäjän nimen kaikissa luetteloissa ja lokitapahtumissa.  Oletko varma, että haluat tehdä näin?",
-       "ipb-confirmaction": "Jos olet varma että haluat todella tehdä tämän, tarkista kentän \"{{int:ipb-confirm}}\" sisältö alhaalta.",
+       "ipb-confirmhideuser": "Olet estämässä käyttäjää ”piilota käyttäjä” -toiminnon kanssa. Tämä piilottaa käyttäjän nimen kaikissa luetteloissa ja lokitapahtumissa. Oletko varma, että haluat tehdä näin?",
+       "ipb-confirmaction": "Jos olet varma että haluat todella tehdä tämän, tarkista kentän ”{{int:ipb-confirm}}” sisältö alhaalta.",
        "ipb-edit-dropdown": "Muokkaa estosyitä",
        "ipb-unblock-addr": "Poista käyttäjän $1 esto",
        "ipb-unblock": "Poista käyttäjän tai IP-osoitteen muokkausesto",
        "change-blocklink": "muuta estoa",
        "contribslink": "muokkaukset",
        "emaillink": "lähetä sähköpostia",
-       "autoblocker": "Olet automaattisesti estetty, koska jaat IP-osoitteen käyttäjän [[User:$1|$1]] kanssa. \nKäyttäjän $1 saaman eston syy on: \"$2\".",
+       "autoblocker": "Olet automaattisesti estetty, koska jaat IP-osoitteen käyttäjän [[User:$1|$1]] kanssa. \nKäyttäjän $1 saaman eston syy on: ”$2”.",
        "blocklogpage": "Estoloki",
        "blocklog-showlog": "Tämä käyttäjä on ollut aiemmin estettynä.\nAlla on ote estolokista.",
        "blocklog-showsuppresslog": "Tämä käyttäjä on ollut estettynä ja häivytettynä.\nAlla on ote häivytyslokista.",
        "cant-move-category-page": "Sinulla ei ole oikeutta siirtää luokkien sivuja.",
        "cant-move-to-category-page": "Sinulla ei ole oikeutta siirtää sivua luokkasivuksi.",
        "cant-move-subpages": "Sivulla ei ole oikeutta siirtää alasivuja.",
-       "namespace-nosubpages": "Nimiavaruus \"$1\" ei hyväksy alasivuja.",
+       "namespace-nosubpages": "Nimiavaruus ”$1” ei hyväksy alasivuja.",
        "newtitle": "Uusi nimi sivulle:",
        "move-watch": "Tarkkaile tätä sivua",
        "movepagebtn": "Siirrä sivu",
        "pagemovedsub": "Siirto onnistui",
+       "cannotmove": "Sivua ei voi siirtää {{PLURAL:$1|seuraavasta syystä|seuraavista syistä}}:",
        "movepage-moved": "'''$1 on siirretty nimelle $2'''",
        "movepage-moved-redirect": "Ohjaus luotiin.",
        "movepage-moved-noredirect": "Ohjausta ei luotu.",
        "delete_and_move_confirm": "Kyllä, poista kohdesivu",
        "delete_and_move_reason": "Sivu on sivun [[$1]] siirron tiellä.",
        "selfmove": "Nimi on sama;\nSivua ei voi siirtää itsensä päälle.",
-       "immobile-source-namespace": "Sivuja ei voi siirtää nimiavaruudessa ”$1”",
-       "immobile-target-namespace": "Sivuja ei voi siirtää nimiavaruuteen ”$1”",
+       "immobile-source-namespace": "Sivuja ei voi siirtää nimiavaruudessa ”$1”.",
+       "immobile-target-namespace": "Sivuja ei voi siirtää nimiavaruuteen ”$1”.",
        "immobile-target-namespace-iw": "Kielilinkki ei ole kelvollinen kohde sivun siirrolle.",
        "immobile-source-page": "Tämä sivu ei ole siirrettävissä.",
        "immobile-target-page": "Kyseiselle kohdenimelle ei voi siirtää.",
        "import-error-special": "Sivua $1 ei tuotu, koska se kuuluu erityiseen nimiavaruuteen, joka ei salli sivuja.",
        "import-error-invalid": "Sivua $1 ei tuotu, koska se nimi, jolle se tuotaisiin, ei ole kelvollinen tässä wikissä.",
        "import-error-unserialize": "Versiota $2 sivusta $1 ei voida jakaa osiin. Version ilmoitettiin käyttävän sisältömallia $3 ja sarjoitusmuotoilua $4.",
-       "import-error-bad-location": "Sivun versiota $2, joka käyttää sisällön mallia $3, ei voi tallettaa kohteeseen \"$1\" tässä wikissä, koska tuota mallia ei tueta kyseisellä sivulla.",
+       "import-error-bad-location": "Sivun versiota $2, joka käyttää sisällön mallia $3, ei voi tallettaa kohteeseen ”$1” tässä wikissä, koska tuota mallia ei tueta kyseisellä sivulla.",
        "import-options-wrong": "{{PLURAL:$2|Väärä asetus|Väärät asetukset}}: <nowiki>$1</nowiki>",
        "import-rootpage-invalid": "Annettu perussivun nimi ei kelpaa.",
-       "import-rootpage-nosubpage": "Annetun perussivun nimiavaruus \"$1\" ei salli alasivuja.",
+       "import-rootpage-nosubpage": "Annetun perussivun nimiavaruus ”$1” ei salli alasivuja.",
        "importlogpage": "Tuontiloki",
        "importlogpagetext": "Loki ylläpitäjien toisista wikeistä tuomista sivuista, joissa on muokkaushistoriaa.",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|versio|versiota}} tuotiin",
        "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|versio|versiota}} tuotiin wikistä $2",
        "javascripttest": "JavaScriptin testaus",
-       "javascripttest-pagetext-unknownaction": "Tuntematon toiminto \"$1\".",
+       "javascripttest-pagetext-unknownaction": "Tuntematon toiminto ”$1”.",
        "javascripttest-qunit-intro": "Katso [$1 testausohjeet] mediawiki.orgissa.",
        "tooltip-pt-userpage": "{{GENDER:|Oma käyttäjäsivusi}}",
        "tooltip-pt-anonuserpage": "IP-osoitteesi käyttäjäsivu",
        "previousdiff": "← Vanhempi muutos",
        "nextdiff": "Uudempi muutos →",
        "mediawarning": "'''Varoitus''': Tämä tiedostomuoto saattaa sisältää vahingollista koodia.\nSuorittamalla sen järjestelmäsi voi muuttua epäluotettavaksi.",
-       "imagemaxsize": "Kuvien enimmäiskoko kuvaussivuilla",
+       "imagemaxsize": "Kuvien enimmäiskoko tiedostokuvaussivuilla",
        "thumbsize": "Pienoiskuvien koko",
        "widthheightpage": "$1 × $2, $3 {{PLURAL:$3|sivu|sivua}}",
        "file-info": "$1, MIME-tyyppi: $2",
        "invalidateemail": "Sähköpostiosoitteen varmennuksen peruuttaminen",
        "notificationemail_subject_changed": "Sivuston {{SITENAME}} rekisteröity sähköpostiosoite on vaihdettu",
        "notificationemail_subject_removed": "Sivuston {{SITENAME}} rekisteröity sähköpostiosoite on poistettu",
-       "notificationemail_body_changed": "Joku, todennäköisesti sinä, IP-osoitteesta $1 on vaihtanut tunnuksen \"$2\" sähköpostiosoitteeksi \"$3\" sivustolla {{SITENAME}}.\n\nJos se et ollut sinä, ota yhteyttä sivuston ylläpitäjään välittömästi.",
-       "notificationemail_body_removed": "Joku, todennäköisesti sinä, IP-osoitteesta $1 on poistanut tunnuksen \"$2\" sähköpostiosoitteen sivustolla {{SITENAME}}.\n\nJos se et ollut sinä, ota yhteyttä sivuston ylläpitäjään välittömästi.",
+       "notificationemail_body_changed": "Joku, todennäköisesti sinä, IP-osoitteesta $1 on vaihtanut tunnuksen ”$2” sähköpostiosoitteeksi ”$3” sivustolla {{SITENAME}}.\n\nJos se et ollut sinä, ota yhteyttä sivuston ylläpitäjään välittömästi.",
+       "notificationemail_body_removed": "Joku, todennäköisesti sinä, IP-osoitteesta $1 on poistanut tunnuksen ”$2” sähköpostiosoitteen sivustolla {{SITENAME}}.\n\nJos se et ollut sinä, ota yhteyttä sivuston ylläpitäjään välittömästi.",
        "scarytranscludedisabled": "[Wikienvälinen sisällytys ei ole käytössä]",
        "scarytranscludefailed": "[Mallineen hakeminen epäonnistui: $1]",
        "scarytranscludefailed-httpstatus": "[Mallineen hakeminen epäonnistui: $1 HTTP $2]",
        "mcrundo-changed": "Sivu on muuttunut siitä lähtien, kun katsoit tätä muokkausta. Arvioi uusi muokkaus.",
        "mcrundo-parse-failed": "Uuden version jäsentäminen epäonnistui: $1",
        "percent": "$1&#160;%",
-       "quotation-marks": "\"$1\"",
+       "quotation-marks": "”$1”",
        "imgmultipageprev": "← edellinen sivu",
        "imgmultipagenext": "seuraava sivu →",
        "imgmultigo": "Siirry",
        "watchlisttools-raw": "Muokkaa listaa raakamuodossa",
        "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|keskustelu]])",
        "timezone-local": "Paikallinen",
-       "duplicate-defaultsort": "'''Varoitus:''' Oletuslajitteluavain ”$2” korvaa aiemman oletuslajitteluavaimen ”$1”.",
-       "duplicate-displaytitle": "<strong>Varoitus:</strong> Näytettävä otsikko \"$2\" päällekirjoittaa edellisen otsikon \"$1\".",
-       "restricted-displaytitle": "<strong>Varoitus:</strong> Näytettävää otsikkoa \"$1\" ei huomioitu, koska se ei vastaa sivun oikeaa nimeä.",
+       "duplicate-defaultsort": "<strong>Varoitus:</strong> Oletuslajitteluavain ”$2” korvaa aiemman oletuslajitteluavaimen ”$1”.",
+       "duplicate-displaytitle": "<strong>Varoitus:</strong> Näytettävä otsikko ”$2” korvaa edellisen otsikon ”$1”.",
+       "restricted-displaytitle": "<strong>Varoitus:</strong> Näytettävää otsikkoa ”$1” ei huomioitu, koska se ei vastaa sivun oikeaa nimeä.",
        "invalid-indicator-name": "<strong>Virhe:</strong> Sivun tilan osoittimien attribuutti <code>name</code> ei saa olla tyhjä.",
        "version": "Versio",
        "version-extensions": "Asennetut laajennukset",
        "tags": "Voimassa olevat muutosten merkkaukset",
        "tag-filter": "[[Special:Tags|Merkkausten]] suodatin:",
        "tag-filter-submit": "Suodata",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Merkkaus|Merkkaukset}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Merkkaus|Merkkaukset}}]]: $2",
        "tag-mw-contentmodelchange": "sisältömallin muutos",
        "tag-mw-contentmodelchange-description": "Muokkaukset, jotka [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:ChangeContentModel muuttavat sivun sisältömallia]",
        "tag-mw-new-redirect": "Uusi ohjaus",
        "tags-create-no-name": "Sinun täytyy antaa merkkaukselle nimi.",
        "tags-create-invalid-chars": "Merkkausten nimissä ei saa olla pilkkuja (<code>,</code>), putkia (<code>|</code>) tai kauttaviivoja (<code>/</code>).",
        "tags-create-invalid-title-chars": "Merkkausten nimissä ei saa olla sellaisia merkkejä, joita ei voida käyttää sivujen nimissä.",
-       "tags-create-already-exists": "Merkkaus \"$1\" on jo olemassa.",
-       "tags-create-warnings-above": "{{PLURAL:$2|Seuraava varoitus|Seuraavat varoitukset}} ilmenivät, kun yritettiin luoda merkkausta \"$1\":",
+       "tags-create-already-exists": "Merkkaus ”$1” on jo olemassa.",
+       "tags-create-warnings-above": "{{PLURAL:$2|Seuraava varoitus|Seuraavat varoitukset}} ilmenivät, kun yritettiin luoda merkkausta ”$1”:",
        "tags-create-warnings-below": "Haluatko jatkaa merkkauksen luomista?",
        "tags-delete-title": "Hävitä merkkaus pysyvästi",
-       "tags-delete-explanation-initial": "Olet parhaillaan poistamassa (eli tuhoamassa pysyvästi) merkkauksen \"$1\" tietokannasta.",
+       "tags-delete-explanation-initial": "Olet parhaillaan poistamassa (eli tuhoamassa pysyvästi) merkkauksen ”$1” tietokannasta.",
        "tags-delete-explanation-in-use": "Se poistuu {{PLURAL:$2|$2 sivun versiosta tai lokimerkinnästä|kaikista $2 sivuversiosta tai lokimerkinnöistä}}, joissa se tällä hetkellä on käytössä.",
        "tags-delete-explanation-warning": "Tämä toimenpide on <strong>peruuttamaton</strong> ja <strong>poistettua merkkausta ei voi palauttaa takaisin</strong>. Siihen ei pysty edes tietokannan ylläpitohenkilöstö. Sinun pitää olla täysin varma, että haluat poistettavaksi juuri tämän merkkauksen.",
-       "tags-delete-explanation-active": "<stron>Merkkaus \"$1\" on edelleen käytössä ja sitä käytetään myös jatkossa.</strong>. Jos haluat merkkauksen pois käytöstä, mene sinne missä merkkaus on asetettu ja ota se pois siellä.",
+       "tags-delete-explanation-active": "<strong>Merkkaus ”$1” on edelleen käytössä ja sitä käytetään myös jatkossa.</strong>. Jos haluat merkkauksen pois käytöstä, mene sinne missä merkkaus on asetettu ja ota se pois siellä.",
        "tags-delete-reason": "Syy:",
        "tags-delete-submit": "Tuhoa tämä merkkaus peruuttamattomasti ja pysyvästi",
        "tags-delete-not-allowed": "Sellaisia merkkauksia, jotka tulevat erityisestä ohjelmistolaajennuksesta, ei voi poistaa ennen kuin tämä laajennus erityisesti sallii sen.",
-       "tags-delete-not-found": "Merkkausta \"$1\" ei ole olemassa.",
-       "tags-delete-too-many-uses": "Tämä merkkaus \"$1\" on käytössä useammassa kuin $2 sivuversiossa, joten sitä ei voi poistaa.",
-       "tags-delete-warnings-after-delete": "Merkkaus \"$1\" poistettiin, mutta toimenpide sai aikaan {{PLURAL:$2|seuraavan varoituksen|seuraavat varoitukset}}:",
+       "tags-delete-not-found": "Merkkausta ”$1” ei ole olemassa.",
+       "tags-delete-too-many-uses": "Tämä merkkaus ”$1” on käytössä useammassa kuin $2 sivuversiossa, joten sitä ei voi poistaa.",
+       "tags-delete-warnings-after-delete": "Merkkaus ”$1” poistettiin, mutta toimi sai aikaan {{PLURAL:$2|seuraavan varoituksen|seuraavat varoitukset}}:",
        "tags-delete-no-permission": "Sinulla ei ole oikeutta poistaa muutoksien yhteydessä olevia merkkauksia.",
        "tags-activate-title": "Aktivoi merkkaus",
-       "tags-activate-question": "Olet nyt aktivoimassa merkkausta \"$1\".",
+       "tags-activate-question": "Olet nyt aktivoimassa merkkausta ”$1”.",
        "tags-activate-reason": "Syy:",
-       "tags-activate-not-allowed": "Ei ole mahdollista aktivoida merkkausta \"$1\".",
-       "tags-activate-not-found": "Merkkausta \"$1\" ei ole olemassa.",
+       "tags-activate-not-allowed": "Ei ole mahdollista aktivoida merkkausta ”$1”.",
+       "tags-activate-not-found": "Merkkausta ”$1” ei ole olemassa.",
        "tags-activate-submit": "Aktivoi",
        "tags-deactivate-title": "Ota merkkaus pois käytöstä",
-       "tags-deactivate-question": "Olet parhaillaan poistamassa käytöstä (eli deaktivoimassa) merkkausta \"$1\".",
+       "tags-deactivate-question": "Olet parhaillaan poistamassa käytöstä (eli deaktivoimassa) merkkausta ”$1”.",
        "tags-deactivate-reason": "Syy:",
-       "tags-deactivate-not-allowed": "Ei ole mahdollista poistaa käytöstä merkkausta \"$1\".",
+       "tags-deactivate-not-allowed": "Ei ole mahdollista poistaa käytöstä merkkausta ”$1”.",
        "tags-deactivate-submit": "Poista käytöstä",
        "tags-apply-no-permission": "Sinulla ei ole oikeutta käyttää merkkauksia muutostesi yhteydessä.",
        "tags-apply-blocked": "Et voi asettaa merkkauksia muutostesi yhteyteen, kun {{GENDER:$1|olet}} estettynä.",
-       "tags-apply-not-allowed-one": "Merkkausta \"$1\" ei ole sallittua asettaa käsin.",
+       "tags-apply-not-allowed-one": "Merkkausta ”$1” ei ole sallittua asettaa käsin.",
        "tags-apply-not-allowed-multi": "Seuraavia {{PLURAL:$2|merkkauksia}} ei ole sallittua asettaa käsin: $1",
        "tags-update-no-permission": "Sinulla ei ole oikeutta lisätä tai poistaa merkkauksia yksittäisissä sivuversioissa tai lokimerkinnöissä.",
        "tags-update-blocked": "Et voi lisätä tai poistaa merkkauksia, kun {{GENDER:$1|olet}} estettynä.",
-       "tags-update-add-not-allowed-one": "Merkkausta \"$1\" ei ole sallittua asettaa käsin.",
+       "tags-update-add-not-allowed-one": "Merkkausta ”$1” ei ole sallittua asettaa käsin.",
        "tags-update-add-not-allowed-multi": "Seuraavia {{PLURAL:$2|merkkauksia}} ei ole sallittua asettaa käsin: $1",
-       "tags-update-remove-not-allowed-one": "Merkkausta \"$1\" ei ole sallittua poistaa.",
+       "tags-update-remove-not-allowed-one": "Merkkausta ”$1” ei ole sallittua poistaa.",
        "tags-update-remove-not-allowed-multi": "Seuraavia {{PLURAL:$2|merkkauksia}} ei ole sallittua poistaa käsin: $1",
        "tags-edit-title": "Muokkaa merkkauksia",
        "tags-edit-manage-link": "Hallinnoi merkkauksia",
        "dberr-again": "Odota hetki ja lataa sivu uudelleen.",
        "dberr-info": "(Tietokantaan ei saada yhteyttä: $1)",
        "dberr-info-hidden": "(Tietokantaan ei saada yhteyttä)",
-       "dberr-usegoogle": "Voit koettaa hakea Googlesta, kunnes virhe korjataan.",
-       "dberr-outofdate": "Googlen indeksi ei välttämättä ole ajan tasalla.",
-       "dberr-cachederror": "Alla on välimuistissa oleva sivun versio, joka ei välttämättä ole ajan tasalla.",
        "htmlform-invalid-input": "Antamassasi syötteessä on ongelmia",
        "htmlform-select-badoption": "Antamasi arvo ei ole kelvollinen.",
        "htmlform-int-invalid": "Antamasi arvo ei ole kokonaisluku.",
        "logentry-upload-revert": "$1 {{GENDER:$2|tallensi}} tiedoston $3",
        "log-name-managetags": "Merkkausten hallinnan loki",
        "log-description-managetags": "Tällä sivulla on luettelo tehtävistä, jotka koskevat [[Special:Tags|merkkauksia]]. Lokissa ovat vain ne toimenpiteet, jotka ylläpitäjä on suorittanut käsin. Merkkauksia voi syntyä ja poistua myös wikin ohjelmiston kautta eivätkä ne näy tässä lokissa.",
-       "logentry-managetags-create": "$1 {{GENDER:$2|on luonut}} merkkauksen \"$4\"",
-       "logentry-managetags-delete": "$1 {{GENDER:$2|tuhosi}} merkkauksen \"$4\" (poistettu $5 {{PLURAL:$5|sivuversiosta tai lokimerkinnästä}})",
-       "logentry-managetags-activate": "$1 {{GENDER:$2|aktivoi}} merkkauksen \"$4\" käyttäjien ja bottien käytettäväksi",
-       "logentry-managetags-deactivate": "$1 {{GENDER:$2|otti pois käytöstä}} merkkauksen \"$4\" käyttäjiltä ja boteilta",
+       "logentry-managetags-create": "$1 {{GENDER:$2|on luonut}} merkkauksen ”$4”",
+       "logentry-managetags-delete": "$1 {{GENDER:$2|tuhosi}} merkkauksen ”$4” (poistettu $5 {{PLURAL:$5|sivuversiosta tai lokimerkinnästä}})",
+       "logentry-managetags-activate": "$1 {{GENDER:$2|aktivoi}} merkkauksen ”$4” käyttäjien ja bottien käytettäväksi",
+       "logentry-managetags-deactivate": "$1 {{GENDER:$2|otti pois käytöstä}} merkkauksen ”$4” käyttäjiltä ja boteilta",
        "log-name-tag": "Merkkausloki",
        "log-description-tag": "Tällä sivulla näytetään käyttäjien lisäämät tai poistamat [[Special:Tags|merkkaukset]] yksittäisissä sivuversioissa tai lokimerkinnöissä. Lokiin eivät kirjaudu merkkaukset silloin, kun ne tulevat muokkaamisen, poistamisen tai muun vastaavan toimenpiteen yhteydessä.",
        "logentry-tag-update-add-revision": "$1 {{GENDER:$2|lisäsi}} {{PLURAL:$7|merkkauksen|merkkaukset}} $6 kohdeversioon $4 sivulla $3",
        "feedback-back": "Takaisin",
        "feedback-bugcheck": "Hyvä! Varmista vielä, että ohjelmointivirhettä ei löydy [$1 tunnettujen virheiden luettelosta].",
        "feedback-bugnew": "Olen varmistanut. Ilmoitan uuden ohjelmointivirheen",
-       "feedback-bugornote": "Jos voit kuvailla teknisen ongelman tarkasti – [$1 ilmoita ohjelmointivirheestä].\nMuussa tapauksessa voit käyttää alla olevaa helpompaa lomaketta. Kommenttisi lisätään sivulle [$3 $2], ja siinä on mukana käyttäjätunnuksesi.",
+       "feedback-bugornote": "Jos voit kuvailla teknisen ongelman tarkasti, [$1 ilmoita ohjelmointivirheestä].\nMuussa tapauksessa voit käyttää alla olevaa helpompaa lomaketta. Kommenttisi lisätään sivulle [$3 $2], ja siinä on mukana käyttäjätunnuksesi.",
        "feedback-cancel": "Peruuta",
        "feedback-close": "Valmis",
        "feedback-external-bug-report-button": "Lähetä tekninen tehtävä",
        "feedback-dialog-title": "Lähetä palautetta",
-       "feedback-dialog-intro": "Voit käyttää tätä helppoa lomaketta palautteesi lähettämiseen. Kommenttisi lisätään sivulle \"$1\" käyttäjätunnuksesi kera.",
+       "feedback-dialog-intro": "Voit käyttää tätä helppoa lomaketta palautteesi lähettämiseen. Kommenttisi lisätään sivulle ”$1” käyttäjätunnuksesi kera.",
        "feedback-error1": "Virhe: Ohjelmointirajapinnan vastausta ei tunnistettu",
        "feedback-error2": "Virhe: Muokkaus epäonnistui",
        "feedback-error3": "Virhe: Ohjelmointirajapinta ei vastaa",
        "api-error-emptypage": "Ei ole sallittua luoda uutta, tyhjää sivua.",
        "api-error-publishfailed": "Sisäinen virhe: Väliaikaisen tiedoston julkaiseminen epäonnistui.",
        "api-error-stashfailed": "Sisäinen virhe: Väliaikaisen tiedoston tallentaminen epäonnistui.",
-       "api-error-unknown-warning": "Tuntematon varoitus: \"$1\".",
+       "api-error-unknown-warning": "Tuntematon varoitus: ”$1”.",
        "api-error-unknownerror": "Tuntematon virhe: $1.",
        "duration-seconds": "$1 {{PLURAL:$1|sekunti|sekuntia}}",
        "duration-minutes": "$1 {{PLURAL:$1|minuutti|minuuttia}}",
        "authprovider-confirmlink-ok-help": "Jatka yhteydenottohäiriöilmoitusten näyttämisen jälkeen.",
        "authprovider-resetpass-skip-label": "Ohita",
        "authprovider-resetpass-skip-help": "Ohita salasanan palautus.",
-       "authform-nosession-login": "Varmennus onnistui, mutta selaimesi ei pysty \"muistamaan\" sisäänkirjautumista.\n\n$1",
-       "authform-nosession-signup": "Tunnus luotiin, mutta selaimesi ei pysty \"muistamaan\" sisäänkirjautumista.\n\n$1",
-       "authform-newtoken": "Puuttuva \"token\". $1",
-       "authform-notoken": "Puuttuva \"token\"",
-       "authform-wrongtoken": "Väärä \"token\"",
+       "authform-nosession-login": "Varmennus onnistui, mutta selaimesi ei pysty ”muistamaan” sisäänkirjautumista.\n\n$1",
+       "authform-nosession-signup": "Tunnus luotiin, mutta selaimesi ei pysty ”muistamaan” sisäänkirjautumista.\n\n$1",
+       "authform-newtoken": "Puuttuva ”token”. $1",
+       "authform-notoken": "Puuttuva ”token”",
+       "authform-wrongtoken": "Väärä ”token”",
        "specialpage-securitylevel-not-allowed-title": "Ei sallittu",
        "specialpage-securitylevel-not-allowed": "Valitettavasti sinulla ei ole oikeutta muokata tätä sivua, koska henkilöllisyyttäsi ei voitu varmentaa.",
        "authpage-cannot-login": "Kirjautumista ei voitu aloittaa.",
        "passwordpolicies-policy-passwordcannotmatchblacklist": "Salasana ei saa olla mustalla listalla",
        "passwordpolicies-policy-maximalpasswordlength": "Salasanan tulee olla lyhyempi kuin $1 {{PLURAL:$1|merkki|merkkiä}}",
        "passwordpolicies-policy-passwordcannotbepopular": "Salasana ei saa olla {{PLURAL:$1|suosittu salasana|$1 suosituimman salasanan listalla}}",
+       "passwordpolicies-policy-passwordnotinlargeblacklist": "Salasana ei voi olla 100&nbsp;000 yleisimmin käytetyn joukossa.",
        "unprotected-js": "Turvallisuussyistä JavaScriptiä ei voi ladata suojaamattomilta sivuilta. Luo JavaScript-sivuja vain MediaWiki-nimiavaruuteen tai käyttäjän alasivulle."
 }
index 1acc664..1a533f5 100644 (file)
        "anoncontribs": "Íkøst",
        "contribsub2": "Fyri {{GENDER:$3|$1}} ($2)",
        "nocontribs": "Ongar broytingar vóru funnar, sum samsvaraðu hesar treytirnar.",
-       "uctop": "(verandi)",
+       "uctop": "verandi",
        "month": "Frá mánaði (og áðrenn):",
        "year": "Frá ár (og áðrenn):",
        "sp-contributions-newbies": "Vís bert íkast frá nýggjum kontoum",
        "external_image_whitelist": "↓  #Lat hesa linjuna vera júst sum hon er<pre>\n#Skriva partar av vanligum orðingum (bert partin sum er ímillum //) niðanfyri\n#Hesar verða samanbornar við URL'ar á eksternum (hotlinkaðum) myndum\n#Tey sum passa saman verða víst sum myndir, í øðrum lagi verður bert ein slóð til myndina víst\n#Linjur sum byrja við # verða viðfarin sum viðmerkingar\n#Hetta er ikki følsamt fyri stórir og lítlir bókstavir\n\n#Skriva allar vanligar málberingar omanfyri hesa linju. Lat hesa linjuna verða júst sum hon er</pre>",
        "tag-filter": "[[Special:Tags|Tag]] filtur:",
        "tag-filter-submit": "Filtur",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Merki|Merkir}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Merki|Merkir}}]]: $2",
        "tags-title": "Lyklaorð",
        "tags-edit": "rætta",
        "tags-hitcount": "$1 {{PLURAL:$1|broyting|broytingar}}",
index 6292fe3..821f4da 100644 (file)
                        "KATRINE1992",
                        "Friday83260",
                        "Niridya",
-                       "Pamputt"
+                       "Pamputt",
+                       "Ash Crow"
                ]
        },
        "tog-underline": "Soulignement des liens :",
        "passwordtooshort": "Votre mot de passe doit contenir au moins $1 caractère{{PLURAL:$1||s}}.",
        "passwordtoolong": "Les mots de passe ne peuvent pas dépasser $1 caractère{{PLURAL:$1||s}}.",
        "passwordtoopopular": "Les mots de passe trop courants ne peuvent pas être utilisés. Veuillez choisir un mot de passe plus difficile à deviner.",
+       "passwordinlargeblacklist": "Le mot de passe entré appartient à une liste très courante de mots de passe utilisés. Veuillez choisir un mot de passe plus unique.",
        "password-name-match": "Votre mot de passe doit être différent de votre nom d’utilisateur.",
        "password-login-forbidden": "L’utilisation de ce nom d’utilisateur ou de ce mot de passe a été interdite.",
        "mailmypassword": "Réinitialiser le mot de passe",
        "timezonelegend": "Fuseau horaire :",
        "localtime": "Heure locale :",
        "timezoneuseserverdefault": "Utiliser la valeur par défaut du wiki ($1)",
-       "timezoneuseoffset": "Autre (spécifier le décalage)",
+       "timezoneuseoffset": "Autre (spécifier le décalage ci-dessous)",
+       "timezone-useoffset-placeholder": "Exemple de valeurs: « -07:00 » ou « 01:00 »",
        "servertime": "Heure du serveur :",
        "guesstimezone": "Utiliser la valeur du navigateur",
        "timezoneregion-africa": "Afrique",
        "prefs-emailconfirm-label": "Confirmation du courriel :",
        "youremail": "Courriel :",
        "username": "{{GENDER:$1|Nom d'utilisateur|Nom d'utilisatrice}} :",
-       "prefs-memberingroups": "{{GENDER:$2|Membre}} {{PLURAL:$1|du groupe|des groupes}} :",
+       "prefs-memberingroups": "{{GENDER:$2|Membre}} {{PLURAL:$1|du groupe|des groupes}} :",
        "prefs-memberingroups-type": "$1",
        "group-membership-link-with-expiry": "$1 (jusqu'à $2)",
        "prefs-registration": "Date d'inscription :",
        "prefs-editor": "Éditeur",
        "prefs-preview": "Aperçu",
        "prefs-advancedrc": "Options avancées",
-       "prefs-opt-out": "Refuser les améliorations",
        "prefs-advancedrendering": "Options avancées",
        "prefs-advancedsearchoptions": "Options avancées",
        "prefs-advancedwatchlist": "Options avancées",
        "prefs-displayrc": "Options d'affichage",
        "prefs-displaywatchlist": "Options d'affichage",
+       "prefs-changesrc": "Modifications affichées",
+       "prefs-changeswatchlist": "Modifications affichées",
+       "prefs-pageswatchlist": "Pages suivies",
        "prefs-tokenwatchlist": "Jeton",
        "prefs-diffs": "Différences",
        "prefs-help-prefershttps": "Cette préférence sera effective lors de votre prochaine connexion.",
        "rcfilters-watchlist-markseen-button": "Marquer toutes les modifications comme vues",
        "rcfilters-watchlist-edit-watchlist-button": "Modifier votre liste de pages suivies",
        "rcfilters-watchlist-showupdated": "Les modifications faites aux pages que vous n’avez pas visitées depuis qu’elles ont été modifiées sont en <strong>gras</strong>, avec des puces pleines.",
-       "rcfilters-preference-label": "Masquer la version améliorée des modifications récentes",
-       "rcfilters-preference-help": "Désactive la version 2017 de l'interface ainsi que de tous les outils ajoutés alors et depuis.",
-       "rcfilters-watchlist-preference-label": "Masquer la version améliorée de la liste de suivi",
-       "rcfilters-watchlist-preference-help": "Annuler la nouvelle conception de l’interface 2017 et tous les outils ajoutés alors et depuis.",
+       "rcfilters-preference-label": "Utiliser l'interface non-JavaScript",
+       "rcfilters-preference-help": "Charge les modifications récentes sans les fonctions de filtrage ni de mise en valeur.",
+       "rcfilters-watchlist-preference-label": "Utiliser l'interface non-JavaScript",
+       "rcfilters-watchlist-preference-help": "Charge la liste de suivi sans les fonctions de filtrage ni de mise en valeur.",
        "rcfilters-filter-showlinkedfrom-label": "Montrer les modifications des pages liées depuis",
        "rcfilters-filter-showlinkedfrom-option-label": "<strong>Pages liées depuis</strong> la page sélectionnée",
        "rcfilters-filter-showlinkedto-label": "Montrer les modifications des pages pointant vers",
        "contribsub2": "Pour {{GENDER:$3|$1}} ($2)",
        "contributions-userdoesnotexist": "Le compte d’utilisateur « $1 » n’est pas enregistré.",
        "nocontribs": "Aucune modification correspondant à ces critères n'a été trouvée.",
-       "uctop": "(actuelle)",
+       "uctop": "actuelle",
        "month": "À partir du mois (et précédents) :",
        "year": "À partir de l'année (et précédentes) :",
        "date": "À partir du (et antérieurement) :",
        "move-watch": "Suivre les pages originale et nouvelle",
        "movepagebtn": "Renommer la page",
        "pagemovedsub": "Renommage réussi",
+       "cannotmove": "La page n’a pas pu être déplacée, pour {{PLURAL:$1|la raison suivante|les raisons suivantes}} :",
        "movepage-moved": "<strong>« $1 » a été renommée en « $2 »</strong>",
        "movepage-moved-redirect": "Une redirection depuis l’ancien nom a été créée.",
        "movepage-moved-noredirect": "La création d’une redirection depuis l’ancien nom a été annulée.",
        "pageinfo-display-title": "Titre affiché",
        "pageinfo-default-sort": "Clé de tri par défaut",
        "pageinfo-length": "Taille de la page (en octets)",
-       "pageinfo-article-id": "Numéro de la page",
+       "pageinfo-article-id": "ID de la page",
        "pageinfo-language": "Langue du contenu de la page",
        "pageinfo-language-change": "modifier",
        "pageinfo-content-model": "Modèle de contenu de la page",
        "exif-compression": "Type de compression",
        "exif-photometricinterpretation": "Modèle colorimétrique",
        "exif-orientation": "Orientation",
-       "exif-samplesperpixel": "Composantes par pixel",
+       "exif-samplesperpixel": "Nombre de composants",
        "exif-planarconfiguration": "Arrangement des données",
        "exif-ycbcrsubsampling": "Taux de sous-échantillonnage de Y à C",
        "exif-ycbcrpositioning": "Positionnement YCbCr",
        "tags": "Balises des modifications valides",
        "tag-filter": "Filtrer les [[Special:Tags|balises]] :",
        "tag-filter-submit": "Filtrer",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Balise|Balises}}]] : $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Balise|Balises}}]] : $2",
        "tag-mw-contentmodelchange": "modification du modèle de contenu",
        "tag-mw-contentmodelchange-description": "Modifications qui [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:ChangeContentModel changent le modèle de contenu] d'une page",
        "tag-mw-new-redirect": "Nouvelle redirection",
        "dberr-again": "Essayez d'attendre quelques minutes et rechargez.",
        "dberr-info": "(Accès à la base de données impossible : $1)",
        "dberr-info-hidden": "(Accès à la base de données impossible)",
-       "dberr-usegoogle": "Vous pouvez essayer de chercher avec Google pendant ce temps.",
-       "dberr-outofdate": "Notez que leurs index de notre contenu peuvent ne plus être actuels.",
-       "dberr-cachederror": "Ceci est une copie cachée de la page demandée et peut ne plus être actuelle.",
        "htmlform-invalid-input": "Des problèmes sont survenus avec certaines de vos valeurs.",
        "htmlform-select-badoption": "La valeur que vous avez spécifiée n'est pas une option valide.",
        "htmlform-int-invalid": "La valeur que vous avec spécifiée n'est pas un entier.",
        "logentry-block-reblock": "$1 {{GENDER:$2|a modifié}} les paramètres de blocage pour {{GENDER:$4|$3}} avec une durée de $5 $6",
        "logentry-partialblock-block": "$1 {{GENDER:$2|a bloqué}} {{GENDER:$4|$3}} pour modifier {{PLURAL:$8|la page|les pages}} $7 avec une date d’expiration à $5 $6",
        "logentry-partialblock-reblock": "$1 {{GENDER:$2|a modifié}} les paramètres du blocage pour {{GENDER:$4|$3}} empêchant les modifications sur {{PLURAL:$8|la page|les pages}} $7 avec une date d’expiration au $5 $6",
-       "logentry-non-editing-block-block": "$1 {{GENDER:$2|a bloqué}} {{GENDER:$4|$3}} pour les actions autres que la modification avec une date d’expiration au $5 $6",
-       "logentry-non-editing-block-reblock": "$1 {{GENDER:$2|a modifié}} les paramètres du blocage de {{GENDER:$4|$3}} pour les actions autres que la modification avec une date d’expiration au $5 $6",
+       "logentry-non-editing-block-block": "$1 {{GENDER:$2|a bloqué}} {{GENDER:$4|$3}} pour les actions spécifiées autres que la modification avec une date d’expiration au $5 $6",
+       "logentry-non-editing-block-reblock": "$1 {{GENDER:$2|a modifié}} les paramètres du blocage de {{GENDER:$4|$3}} pour les actions spécifiées autres que la modification avec une date d’expiration au $5 $6",
        "logentry-suppress-block": "$1 {{GENDER:$2|a bloqué}} {{GENDER:$4|$3}} avec une durée de $5 $6",
        "logentry-suppress-reblock": "$1 {{GENDER:$2|a modifié}} les paramètres de blocage pour {{GENDER:$4|$3}} avec une durée de $5 $6",
        "logentry-import-upload": "$1 {{GENDER:$2|a importé}} $3 par téléversement de fichier",
        "passwordpolicies-policy-passwordcannotmatchblacklist": "Les mots de passe ne peuvent pas être identiques à ceux qui sont dans la liste noire.",
        "passwordpolicies-policy-maximalpasswordlength": "Les mots de passe doivent avoir moins de $1 caractère{{PLURAL:$1||s}} de long",
        "passwordpolicies-policy-passwordcannotbepopular": "Le mot de passe ne peut pas être {{PLURAL:$1|le mot de passe populaire|dans la liste des $1 mots de passe populaires}}",
+       "passwordpolicies-policy-passwordnotinlargeblacklist": "Le mot de passe ne peut pas faire partie de la liste des 100 000 mots de passe les plus communément utilisés.",
        "easydeflate-invaliddeflate": "Le contenu fourni n'est pas correctement développé",
        "unprotected-js": "Pour des raisons de sécurité, JavaScript ne peut pas être chargé depuis des pages non protégées. Veuillez ne créer du javascript que dans l’espace de noms MediaWiki: ou comme sous-page utilisateur"
 }
index 9c338a3..1e83b48 100644 (file)
        "blanknamespace": "(Principal)",
        "contributions": "Contributions de l’{{GENDER:$1|useur|useuse}}",
        "mycontris": "Contributions",
-       "uctop": "(actuel)",
+       "uctop": "actuel",
        "sp-contributions-talk": "Discuter",
        "sp-contributions-submit": "Charcher",
        "whatlinkshere": "Pages liées",
index 914bea9..9fd27ea 100644 (file)
        "contribsub2": "Por {{GENDER:$3|$1}} ($2)",
        "contributions-userdoesnotexist": "Lo comptio utilisator « $1 » est pas encartâ.",
        "nocontribs": "Y at gins de changement que corrèspond a celos critèros.",
-       "uctop": "(d’ora)",
+       "uctop": "d’ora",
        "month": "Dês lo mês (et devant) :",
        "year": "Dês l’an (et devant) :",
        "sp-contributions-newbies": "Montrar ren que les contribucions des novéls utilisators",
        "tags": "Balises des changements justos",
        "tag-filter": "Filtrar les [[Special:Tags|balises]] :",
        "tag-filter-submit": "Filtrar",
-       "tag-list-wrapper": "([[Special:Tags|Balis{{PLURAL:$1|a|es}}]] : $2)",
+       "tag-list-wrapper": "[[Special:Tags|Balis{{PLURAL:$1|a|es}}]] : $2",
        "tags-title": "Balises",
        "tags-intro": "Cela pâge liste les balises que la programeria pôt empleyér por marcar un changement et lor significacion.",
        "tags-tag": "Nom de la balisa",
        "dberr-problems": "Dèsolâ ! Ceti seto rencontre des dificultâts tècniques.",
        "dberr-again": "Tâchiéd d’atendre doux-três menutes et pués rechargiéd.",
        "dberr-info": "(Branchement u sèrvor de bâsa de balyês empossiblo : $1)",
-       "dberr-usegoogle": "Vos pouede tâchiér de chèrchiér avouéc Google pendent cél temps.",
-       "dberr-outofdate": "Notâd que lors endèxes de noutron contegnu pôvont étre dèpassâs.",
-       "dberr-cachederror": "O est una copia cachiê de la pâge demandâ et pôt étre dèpassâ.",
        "htmlform-invalid-input": "Des problèmos sont arrevâs avouéc quârques valors",
        "htmlform-select-badoption": "La valor que vos éd spècefiâ est pas un chouèx valido.",
        "htmlform-int-invalid": "La valor que vos éd spècefiâ est pas un entiér.",
index c30928f..4f467dc 100644 (file)
        "prefs-editor": "Skriiwer",
        "prefs-preview": "Föörskau",
        "prefs-advancedrc": "Ütjwidjet mögelkhaiden",
-       "prefs-opt-out": "Faan ferbeedrangen ufmelde",
        "prefs-advancedrendering": "Ütjwidjet mögelkhaiden",
        "prefs-advancedsearchoptions": "Ütjwidjet mögelkhaiden",
        "prefs-advancedwatchlist": "Ütjwidjet mögelkhaiden",
        "contribsub2": "För {{GENDER:$3|$1}} ($2)",
        "contributions-userdoesnotexist": "Son brükerkonto \"$1\" jaft at ei.",
        "nocontribs": "Diar wiar nian paasin brükerbidracher",
-       "uctop": "(aktuel)",
+       "uctop": "aktuel",
        "month": "faan muun (of iarer):",
        "year": "faan juar (of iarer):",
        "sp-contributions-newbies": "Wise bluas bidracher faan nei brükern",
        "whatlinkshere": "Ferwisangen üüb detdiar sidj",
        "whatlinkshere-title": "Sidjen, diar üüb \"$1\" ferwise",
        "whatlinkshere-page": "Sidj:",
-       "linkshere": "Jodiar sidjen ferwise üüb '''„$2“''':",
-       "nolinkshere": "Nian sidj ferwiset üüb $2",
+       "linkshere": "Jodiar sidjen ferwise üüb <strong>„$2“</strong>:",
+       "nolinkshere": "Nian sidj ferwiset üüb <strong>$2</strong>.",
        "nolinkshere-ns": "Nian sidj ferwiset üüb '''„$2“''' uun di ütjsoocht nöömrüm.",
        "isredirect": "widjerfeerang",
        "istemplate": "iinbünjen föörlaagen",
        "tags": "Feranrangskääntiaken",
        "tag-filter": "[[Special:Tags|Kääntiaken]] filter:",
        "tag-filter-submit": "Filter",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Kääntiaken|Kääntiakens}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Kääntiaken|Kääntiakens}}]]: $2",
        "tag-mw-new-redirect": "Nei widjerfeerang",
        "tag-mw-new-redirect-description": "Feranrangen, diar en nei widjerfeerang iinracht.",
        "tag-mw-removed-redirect": "Widjerfeerang wechnimen",
        "dberr-again": "Teew en uugenblak an ferschük det noch ans.",
        "dberr-info": "(Koon ei üüb det dootenbeenk tugrip: $1)",
        "dberr-info-hidden": "(Üüb det dootenbeenk küd ei tugreben wurd)",
-       "dberr-usegoogle": "Uun a teskentidj küdst dü det mä Google ferschük.",
-       "dberr-outofdate": "Seenk diaram, dat Google ferlicht ual dooten uunwiset.",
-       "dberr-cachederror": "Detheer komt ütj en cache an as ferlicht ei muar aktuel.",
        "htmlform-invalid-input": "Diar as wat skiaf gingen mä din uunfraag.",
        "htmlform-select-badoption": "Didiar wäärs as ei tuläät.",
        "htmlform-int-invalid": "Didiar wäärs as nian hial taal.",
        "special-characters-group-ipa": "IPA",
        "special-characters-group-symbols": "Sümboolen",
        "special-characters-group-greek": "Griichisk",
+       "special-characters-group-greekextended": "Griichisk, ütjwidjet",
        "special-characters-group-cyrillic": "Kyrilisk",
        "special-characters-group-arabic": "Araabisk",
        "special-characters-group-arabicextended": "Araabisk, ütjwidjet",
        "special-characters-group-thai": "Thai",
        "special-characters-group-lao": "Laotisk",
        "special-characters-group-khmer": "Khmer",
+       "special-characters-group-canadianaboriginal": "Kanaadisk silwenskraft",
        "special-characters-title-endash": "seenkstreg",
        "special-characters-title-emdash": "speegelstreg",
        "special-characters-title-minus": "minus tiaken",
index fe384d1..ce3f487 100644 (file)
        "external_image_whitelist": " #Lasse cheste rie cemût che a je<pre>\n#Inserìs lis espressions regolârs (dome il toc che al va tal mieç di //) ca sot\n#Chestis e saran controladis cun lis URLs des figuris esternis\n#A vignaran mostradis dome chês che a corispuindin, di chês altris si viodarà dome un leam\n#Lis riis che a scomencin cun # a son consideradis come coments\n#Si considerin diviersis lis letaris maiusculis e minusculis\n\n#Met ducj i framents regex parsore di cheste rie. Lasse cheste rie cemût che e je</pre>",
        "tag-filter": "Filtre par [[Special:Tags|etichetis]]:",
        "tag-filter-submit": "Filtre",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Etichete|Etichetis}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Etichete|Etichetis}}]]: $2",
        "tags-edit": "cambie",
        "tags-hitcount": "$1 {{PLURAL:$1|cambiament|cambiaments}}",
        "dberr-problems": "Nus displâs, chest sît web al è daûr a vê dificoltâts tecnichis.",
index 6e06565..ce240fe 100644 (file)
        "anoncontribs": "Bydragen",
        "contribsub2": "Foar {{GENDER:$3|$1}} ($2)",
        "nocontribs": "Der binne gjin feroarings fûn dyt't hjirmei oerienkomme.",
-       "uctop": "(lêste feroaring)",
+       "uctop": "lêste feroaring",
        "month": "Fan moanne (en earder):",
        "year": "Fan jier (en earder):",
        "sp-contributions-newbies": "Allinne bydragen fan nije brûkers besjen",
        "specialpages-group-spam": "Spamhelpmiddels",
        "blankpage": "Side is leech",
        "intentionallyblankpage": "Dizze side is bewust leech lizzen en wurdt brûkt foar benchmarks, ensfh.",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Label|Labels}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Label|Labels}}]]: $2",
        "tags-source-header": "Boarne",
        "tags-active-header": "Aktyf?",
        "tags-actions-header": "Aksjes",
index 84e0c0a..f46610e 100644 (file)
        "youhavenewmessagesmulti": "Tá teachtaireachtaí nua agat ar $1",
        "editsection": "cuir in eagar",
        "editold": "athraigh",
-       "viewsourceold": "féach ar foinse",
+       "viewsourceold": "féach ar an bhfoinse",
        "editlink": "cuir in eagar",
-       "viewsourcelink": "féach ar foinse",
+       "viewsourcelink": "féach ar an bhfoinse",
        "editsectionhint": "Cuir rannán in eagar: $1",
        "toc": "Clár ábhair",
        "showtoc": "taispeáin",
        "anoncontribs": "Dréachtaí",
        "contribsub2": "Do $1 ($2)",
        "nocontribs": "Ní bhfuarthas aon athrú a bhí cosúil le na crítéir seo.",
-       "uctop": "(reatha)",
+       "uctop": "reatha",
        "month": "Ón mhí seo (agus níos luaithe):",
        "year": "Ón bhliain seo (agus níos luaithe):",
        "sp-contributions-newbies": "Taispeáin iarrachtaí ó chuntais nua amháin",
        "version-software": "Bogearraí suiteáilte",
        "version-software-version": "Leagan",
        "version-entrypoints-header-url": "URL",
+       "redirect-submit": "Gabh",
        "redirect-file": "Ainm an chomhaid",
        "fileduplicatesearch-filename": "Ainm comhaid:",
        "fileduplicatesearch-submit": "Cuardaigh",
        "specialpages-group-wiki": "Sonraí agus uirlisí",
        "specialpages-group-spam": "Uirlisí turscar",
        "blankpage": "Leathanach bán",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|chlib amháin|clib}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|chlib amháin|clib}}]]: $2",
        "diff-form-submit": "Taispeáin difríochtaí",
        "htmlform-selectorother-other": "Eile",
        "logentry-move-move": "{{GENDER:$2|Bhog}} $1 an leathanach $3 go $4",
index 3e53476..a9cb6c6 100644 (file)
        "contributions-title": "$1 için kullanıcı katılmakları",
        "mycontris": "Katılmaklarım",
        "contribsub2": "$1 ($2)",
-       "uctop": "(bitki)",
+       "uctop": "bitki",
        "month": "Ay:",
        "year": "Yıl:",
        "sp-contributions-newbies": "Sadä eni esap açan kullanıcıların katılmaklarını göster",
index 0c54f4b..2a6ba98 100644 (file)
        "mycontris": "偶𠮶贡献",
        "contribsub2": "$1𠮶贡献 ($2)",
        "nocontribs": "冇寻到合到条件𠮶改动。",
-       "uctop": "(头上)",
+       "uctop": "头上",
        "month": "从个月 (或更早):",
        "year": "从个年 (或更早):",
        "sp-contributions-newbies": "单显到新用户𠮶贡献",
index ecac1c6..e4dfaaf 100644 (file)
        "mycontris": "我嗰貢獻",
        "contribsub2": "$1嗰貢獻 ($2)",
        "nocontribs": "冇尋到合到條件嗰改動。",
-       "uctop": "(頭上)",
+       "uctop": "頭上",
        "month": "從箇月 (或更早):",
        "year": "從箇年 (或更早):",
        "sp-contributions-newbies": "單顯到新用戶嗰貢獻",
index aa48de5..150504e 100644 (file)
        "anoncontribs": "Kontribisyon",
        "contribsub2": "Pou {{GENDER:$3|$1}} ($2)",
        "nocontribs": "Pyès modifikasyon korèspondan à sa kritèr trouvé.",
-       "uctop": "(atchwèl)",
+       "uctop": "atchwèl",
        "month": "À partir di mwa (é présédan) :",
        "year": "À partir di lannen (é présédant) :",
        "sp-contributions-newbies": "Montré ren ki kontribisyon-yan dé nouvèl itilizatò",
        "redirect-file": "Non di fiché",
        "specialpages": "Paj èspésyal",
        "tag-filter": "Filtré [[Special:Tags|baliz]] :",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Baliz}}]] : $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Baliz}}]] : $2",
        "tags-active-yes": "Enren",
        "tags-active-no": "Awa",
        "tags-hitcount": "$1 modifikasyon{{PLURAL:$1|}}",
index c4e700b..63a3fd8 100644 (file)
        "contribsub2": "Airson $1 ($2)",
        "contributions-userdoesnotexist": "Cha deach an cunntas cleachdaiche \"$1\" a chlàradh.",
        "nocontribs": "Cha deach atharrachadh a lorg a dh'fhreagradh ris na cuspairean-luirg seo.",
-       "uctop": "(làithreach)",
+       "uctop": "làithreach",
        "month": "On mhìos (agus na bu tràithe):",
        "year": "On bhliadhna (agus na bu tràithe):",
        "sp-contributions-newbies": "Seall obair le cunntasan ùra a-mhàin",
        "tags": "Tagaichean atharrachaidh dligheach",
        "tag-filter": "Criathrag [[Special:Tags|thagaichean]]:",
        "tag-filter-submit": "Criathraich",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Taga|Tagaichean}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Taga|Tagaichean}}]]: $2",
        "tags-title": "Tagaichean",
        "tags-intro": "Seallaidh an duilleag seo na tagaichean a chleachdas am bathar-bog gus deasachadh a chomharrachadh 's an ciall a th' orra.",
        "tags-tag": "Ainm an taga",
        "dberr-again": "Feitheamh mionaid no dhà 's ath-luchdaich i.",
        "dberr-info": "(Chan urrainn dhuinn an stòr-dàta inntrigeadh: $1)",
        "dberr-info-hidden": "(Chan urrainn duinn an stòr-dàta inntrigeadh)",
-       "dberr-usegoogle": "Feuch lorg le Google san eadar-àm.",
-       "dberr-outofdate": "Thoir an aire nach eil an clàr acasan air an t-susbaint againn cho ùr sa ghabhas ma dh'fhaoidte.",
-       "dberr-cachederror": "Seo lethbhreac dhen duilleag a dh'iarr thu on tasgadan 's chan eil e cho ùr 's a ghabhas, ma dh'fhaoidte.",
        "htmlform-invalid-input": "Cha duilgheadas le cuid dhe na chuir thu a-steach.",
        "htmlform-select-badoption": "Chan eil an luach a thug thu seachad 'na roghainn dhligheach.",
        "htmlform-int-invalid": "Chan eil an luach a thug thu seachad 'na àireamh shlàn.",
index f3b8433..9db517b 100644 (file)
        "prefs-editor": "Editor",
        "prefs-preview": "Vista previa",
        "prefs-advancedrc": "Opcións avanzadas",
-       "prefs-opt-out": "Excluír de melloras",
        "prefs-advancedrendering": "Opcións avanzadas",
        "prefs-advancedsearchoptions": "Opcións avanzadas",
        "prefs-advancedwatchlist": "Opcións avanzadas",
        "prefs-displayrc": "Opcións de visualización",
        "prefs-displaywatchlist": "Opcións de visualización",
+       "prefs-changesrc": "Cambios mostrados",
+       "prefs-changeswatchlist": "Cambios mostrados",
+       "prefs-pageswatchlist": "Páxinas vixiadas",
        "prefs-tokenwatchlist": "Pase",
        "prefs-diffs": "Diferenzas",
        "prefs-help-prefershttps": "Esta preferencia ha aplicarse no seu vindeiro acceso ao sistema.",
        "contribsub2": "De {{GENDER:$3|$1}} ($2)",
        "contributions-userdoesnotexist": "A conta de usuario \"$1\" non está rexistrada.",
        "nocontribs": "Non se deron atopado cambios con eses criterios.",
-       "uctop": "(última revisión)",
+       "uctop": "actual",
        "month": "Desde o mes de (e anteriores):",
        "year": "Desde o ano (e anteriores):",
        "date": "Dende a data (e anteriores):",
        "move-watch": "Vixiar esta páxina",
        "movepagebtn": "Mover a páxina",
        "pagemovedsub": "O movemento foi un éxito",
+       "cannotmove": "Non se puido mover a páxina {{PLURAL:$1|polo seguinte motivo|polos seguintes motivos}}:",
        "movepage-moved": "<strong>A páxina \"$1\" foi movida a \"$2\"</strong>",
        "movepage-moved-redirect": "Creouse unha redirección da primeira cara á segunda.",
        "movepage-moved-noredirect": "Cancelouse a creación da redirección da primeira cara á segunda.",
        "tags": "Etiquetas de cambios válidas",
        "tag-filter": "Filtrar as [[Special:Tags|etiquetas]]:",
        "tag-filter-submit": "Filtro",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Etiqueta|Etiquetas}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Etiqueta|Etiquetas}}]]: $2",
        "tag-mw-contentmodelchange": "cambio de modelo de contido",
        "tag-mw-contentmodelchange-description": "Edicións que [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:ChangeContentModel cambian o modelo de contido] dunha páxina",
        "tag-mw-new-redirect": "Nova redirección",
        "dberr-again": "Por favor, agarde uns minutos e logo probe a cargar de novo a páxina.",
        "dberr-info": "(Non se pode acceder ao servidor da base de datos: $1)",
        "dberr-info-hidden": "(Non se pode acceder ao servidor da base de datos)",
-       "dberr-usegoogle": "Mentres tanto, pode probar a procurar co Google.",
-       "dberr-outofdate": "Teña en conta que os índices de Google do noso contido poden non estar actualizados.",
-       "dberr-cachederror": "O seguinte contido é unha copia da memoria caché da páxina solicitada, polo que pode non estar actualizada.",
        "htmlform-invalid-input": "Hai algún problema con partes do texto que inseriu",
        "htmlform-select-badoption": "O valor que especificou non é unha opción válida.",
        "htmlform-int-invalid": "O valor que especificou non é un número enteiro.",
        "special-characters-title-emdash": "raia",
        "special-characters-title-minus": "signo menos",
        "mw-widgets-abandonedit": "Está seguro de querer saír do modo de edición sen gardar primeiro?",
-       "mw-widgets-abandonedit-discard": "Desbotar as edicións",
+       "mw-widgets-abandonedit-discard": "Desbotar edicións",
        "mw-widgets-abandonedit-keep": "Continuar editando",
        "mw-widgets-abandonedit-title": "Está seguro?",
        "mw-widgets-dateinput-no-date": "Non se seleccionou ningunha data",
index 6105215..3845fee 100644 (file)
        "mycontris": "مۊشارکتؤن",
        "anoncontribs": "مۊشارکتؤن",
        "contribsub2": "{{GENDER:$3|$1}} ($2)ˇ ويسين",
-       "uctop": "(ألؤنˇ نۊسخه)",
+       "uctop": "ألؤنˇ نۊسخه",
        "month": "اي ماه مئن (ؤ دأميشک):",
        "year": "اي سالˇ مئن (ؤ دأميشک):",
        "sp-contributions-blocklog": "دبۊستنˇ سياهه'ن",
        "redirect-file": "فايلˇ نؤم",
        "specialpages": "خاصˇ ولگؤن",
        "specialpages-group-login": "ديرين/ثبتˇ نؤم",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|تگ|تگؤن}}]]: $2)",
+       "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|جؤرأکشئه}}",
index 46c062d..05fb232 100644 (file)
        "contributions": "{{GENDER:$1|वापरपी}} योगदानां",
        "contributions-title": "$1 खातीर वापरप्याचीं योगदानां",
        "mycontris": "योगदान",
-       "uctop": "(हालीचें)",
+       "uctop": "हालीचें",
        "month": "ह्या म्हयन्या सावन (आनी आदलें):",
        "year": "ह्या वर्सा सावन (आनी आदलें):",
        "sp-contributions-newbies": "फकत नव्या खात्यांचीं योगदानां दाखयात",
        "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|उलयात]])",
        "specialpages": "विशेश पानां",
        "tag-filter": "[[Special:Tags|कुर्वेचीट]] गाळणो:",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|कुरवेचीट|कुरवेचीटी}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|कुरवेचीट|कुरवेचीटी}}]]: $2",
        "htmlform-title-not-exists": "$1 अस्तित्वांत ना.",
        "logentry-delete-delete": "$1 {{GENDER:$2|काडून उडयल्ले पान}} $3",
        "logentry-move-move": "$1 हाणें $3 पानाक $4 {{GENDER:$2|हालयला}}",
index 242345b..e4a8c0f 100644 (file)
@@ -18,9 +18,9 @@
        "tog-shownumberswatching": "Nodor dovorpi vangdianche sonkhya dakhoi",
        "tog-oldsig": "Tujea sod'dheachi soy:",
        "tog-uselivepreview": "Boroitastana zolok dahkoi",
-       "tog-watchlisthideown": "Sadurvollerint mhojeo bodlopam lipoi",
-       "tog-watchlisthidebots": "Sadurvollerint robotani kel'lim bodlopam lipoi",
-       "tog-watchlisthideminor": "Sadurvollerint daktim bodlopam lipoi",
+       "tog-watchlisthideown": "Sadurvollerint mhoje bodol lipoi",
+       "tog-watchlisthidebots": "Sadurvollerint robotani kel'le bodol lipoi",
+       "tog-watchlisthideminor": "Sadurvollerint dhaktem bodol lipoi",
        "tog-showhiddencats": "Lipoiloleo vorg dakhoi",
        "underline-always": "Soddankal",
        "underline-never": "Kednach na",
        "create": "Roch",
        "create-local": "Thollavem vornon zod",
        "delete": "Kadun udoi",
-       "undelete_short": "{{PLURAL:$1|Ek kadun udoil'lo bodol|$1 kadun udoil'le bodlopam}} portun had",
-       "viewdeleted_short": "{{PLURAL:$1|Ek kadun udoil'lo bodol|$1 kadun udoil'le bodlopam}} dakhoi",
+       "undelete_short": "{{PLURAL:$1|Ek kadun udoil'lo bodol|$1 kadun udoil'le bodol}} portun had",
+       "viewdeleted_short": "{{PLURAL:$1|Ek kadun udoil'lo bodol|$1 kadun udoil'le bodol}} dakhoi",
        "protect": "Rakh",
        "protect_change": "bodol",
        "unprotect": "Surokxechem sthor bodol",
        "poolcounter-usage-error": "Upyogachi chuk: $1",
        "aboutsite": "{{SITENAME}} babtint",
        "aboutpage": "Project:Vixoiavixim",
+       "copyright": "Mozkur $1 hachea khala uplobdh asa kheriz her nondi kelea xivai.",
        "copyrightpage": "{{ns:project}}:Prat-hokk",
        "currentevents": "Chalu ghoddnneo",
        "currentevents-url": "Project:Chalu ghoddneo",
        "ok": "Zait",
        "retrievedfrom": "\"$1\" savn prapt kelam",
        "youhavenewmessages": "Tumkam $1 ($2) asat.",
+       "youhavenewmessagesfromusers": "Tuka {{PLURAL:$3|ek vaporpi|$3 vaporpi}} koddlean $1 {{PLURAL:$4|asa|asat}} ($2).‎",
        "newmessageslinkplural": "{{PLURAL:$1|novo sondex|999=nove sondex}}‎",
        "newmessagesdifflinkplural": "{{PLURAL:$1|nimanno bodol|999=nimanneo bodol}}",
        "youhavenewmessagesmulti": "$1 cher tuka noveo sondex asat",
        "page-rss-feed": "\"$1\" RSS purvoi",
        "page-atom-feed": "\"$1\" Atom purvonn",
        "red-link-title": "$1 (hea nanvachem pan ostitvant na)",
-       "sort-descending": "Devtea kromacher kromboddh kor",
+       "sort-descending": "Devtea kromacher arin ghal",
        "sort-ascending": "Chodtea kromacher kromboddh kor",
        "nstab-main": "Pan",
        "nstab-user": "Vaporpeachem pan",
        "createacct-submit": "Tujem khatem roch",
        "createacct-another-submit": "Khatem roch",
        "createacct-benefit-heading": "{{SITENAME}} tujea bhaxen lokani kel'la",
-       "createacct-benefit-body1": "{{PLURAL:$1|bodol|bodlopam}}",
+       "createacct-benefit-body1": "{{PLURAL:$1|bodol}}",
        "createacct-benefit-body2": "{{PLURAL:$1|pan|panam}}",
        "createacct-benefit-body3": "halincheo {{PLURAL:$1|yogdan diupi}}",
        "badretype": "Tunven ghatlelim gupitutram zullnant.",
        "minoredit": "Hem ek dhaktem bodol",
        "watchthis": "Hea panar dixtt dovor",
        "savearticle": "Pan samball",
-       "savechanges": "Bodlopam samball",
+       "savechanges": "Bodol samball",
        "preview": "Zholok",
        "showpreview": "Zholok dakhoi",
-       "showdiff": "Bodolpam dakhoi",
-       "anoneditwarning": "<strong>Chotrai:</strong> Tuven sotrorombh korunk nai. Tu bodlopam korit zalear tuzo IP pot'to soglleank polleunk zatelem. Tu <strong>[$1 sotrorombh korit]</strong> vo <strong>[$2 kont rochit]</strong> zalear, tujeo bodlopam tuzo vagddiachem nanvak zoddteleo ani anik-ui faide asat.",
-       "missingcommenttext": "Upkar korun tumcheo xiro boroi.",
+       "showdiff": "Bodol dakhoi",
+       "anoneditwarning": "<strong>Chotrai:</strong> Tuven sotrorombh korunk nai. Tu bodol korit zalear tuzo IP pot'to soglleank polleunk zatelem. Tu <strong>[$1 sotrorombh korit]</strong> vo <strong>[$2 kont rochit]</strong> zalear, tuje bodol tuzo vagddiachem nanvak zoddteleo ani anik-ui faide asat.",
+       "missingcommenttext": "Upkar korun tuzo xero boroi.",
        "blockedtitle": "Vapurpeak addaila",
        "blockedtext": "<strong>Tujem vaporpeachem nanv vo IP pot'to addavpant aila.</strong>\n\nAddavop $1 hannem kelam.\nKaronn dilam tem <em>$2</em>.\n\n* Addavpachi survat: $8\n* Addavpachea somp’pacho vell: $6\n* Addavpak ievjila: $7\n\nTujean $1-ak vo dusrea [[{{MediaWiki:Grouppage-sysop}}|karbhariak]] addavnne bodol bhasabhas korunk sompork korunk zata. Tujean \"{{int:emailuser}}\" sobhavgunn vaprunk zaina kheriz ek void email pot'to tujea [[Special:Preferences|khatem posontint]] nischit kelea xivai ani tuka tem vaporpak addavnk na zalear. Tuzo chalont IP pot'to asa $3, ani addavnnecheo ank #$5 asa. Soglleo voileo bariksanno tum kortai tea vicharant somavex kor.",
        "blockednoreason": "Kainch karonn diunk na",
        "accmailtitle": "Gupitutor dhaddlea",
        "newarticle": "(Novem)",
        "newarticletext": "Tuven ek zoddneche patlav kelai, zachem pan azun rochunk na.\nPan rochunk, khallchea chovkottan boroi (anik mahitik [$1 adar pan] polloi).\nTu hangasor chukin pavlai zalear tujea internet browser-achi '''Fatim'' vo '''Back''' butao dab.",
+       "anontalkpagetext": "----\n<em>Hem bhasabhasechem pan ek ninami vaporpeak zannem ozun ek khatem ugddunk na, vo to tem vaporna.</em>\nHea khatir amkam ankddeancho IP pot'to vaprunk podta taka vollkhunk.\nToslo IP pot'to sabar vaporpeamni vaprum ieta.\nTum zor ek ninami vaporpi asa ani tuka dista ki sombondit xere tuje vixim keleat, upkar korun [[Special:CreateAccount|ek khatem roch]] vo [[Special:UserLogin|log in]] fuddle guspop ninami vaporpeanchem tallunk.‎",
        "noarticletext": "Sodheak hem pan rinte asa.\nTujean dusrea panani [[Special:Search/{{PAGENAME}}|hea panache nanv sodunk zata]], <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} sombondhi sotrani sodunk zata], vo [{{fullurl:{{FULLPAGENAME}}|action=edit}} hem pan rochunk zata]</span>.",
        "noarticletext-nopermission": "Sodheak hem pan rinte asa.\nTujean dusrea panani [[Special:Search/{{PAGENAME}}|hea panache nanv sodunk zata]], vo <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} sombondhi sotrani sodunk zata], pun tuka hem pan rochunk porvangi na.",
        "userpage-userdoesnotexist-view": "\"$1\" hea vapurpeachea khateachi nondnni korunk na.",
        "clearyourcache": "<strong>Note:</strong> Samball’llea uprant, tuka ghoddiek tujea browseracho cache koddsoravnk poddot bodol pollonvche khatir.\n* <strong>Firefox / Safari:</strong> <em>Shift</em> dhor <em>Reload</em> klik kortana, vo dam <em>Ctrl-F5</em> vo <em>Ctrl-R</em> (<em>⌘-R</em> Mac-acher)\n* <strong>Google Chrome:</strong> <em>Ctrl-Shift-R</em> dam (<em>⌘-Shift-R</em> eka Mac-acher)\n* <strong>Internet Explorer:</strong> <em>Ctrl</em> dhor <em>Refresh</em> klik kortana, vo dam <em>Ctrl-F5</em>\n* <strong>Opera:</strong> Hanga voch: <em>Menu → Settings</em> (<em>Opera → Preferences</em> Mac-acher) ani uprant <em>Privacy & security → Clear browsing data → Cached images and files</em>.‎",
-       "previewnote": "'''Hi fokot ek zholok mhonn ugddas dhor.'''\nTujim bodolpam azun sambhallun dovrunk nant!",
+       "previewnote": "<strong>Hem fokot ek zholok mhonn ugddas dhor.</strong>\nTuje bodol azun sambhallun dovrunk nant!",
        "continue-editing": "Sompadon korpachea zagear voch",
        "editing": "$1 bodolta",
        "creating": "$1 rochta",
        "editingsection": "Sompadon kortai: $1 (khond)",
        "yourtext": "Tuzo mozkur",
        "templatesused": "Hea panant uzar {{PLURAL:$1|kel'lo sancho|kel'le sanche}}:",
+       "templatesusedpreview": "{{PLURAL:$1|Sacho|Sache}} hea zholokant vaporleat:‎",
        "template-protected": "(rakhlelem)",
        "template-semiprotected": "(ordhem rakhun dovorlelem)",
        "hiddencategories": "Hem pan {{PLURAL:$1|1 lipoilelea vorgacho vangddi|$1 lipoileleam vorgancho vangddi}}:",
        "post-expand-template-inclusion-category": "Zea panani sache zoddpachem akarachem merakin chod zala",
        "post-expand-template-argument-warning": "'''Chotrai:''' Hea panan ek tori oslo sacheacho parametro asa zacho patlloylea uprant akar chod vhoddlo zata.\nHeo parametrank durlokx keleat.",
        "post-expand-template-argument-category": "Sacheache parametro zoddunknan osle panam",
+       "undo-failure": "Bodol portavunk zavnk na kiteak gusponneche modle bodol asat.",
        "viewpagelogs": "Hea panachim sotram polloi",
        "currentrev-asof": "$1, hachi halinchi uzollnni",
        "revisionasof": "$1 hachi uzollnni",
        "page_last": "akhirchem",
        "histlegend": "Frk nivoddni: Jeo uzollneo tuka comparar korunk zai, tenche fudle ''radio'' butao petoi ani ''Enter'' nazalear khalcho butao dab.<br />\nVivron: <strong>({{int:cur}})</strong> = halinchi uzollnie borobor forok, <strong>({{int:last}})</strong> = adli uzollnie borobor forok, <strong>{{int:minoreditletter}}</strong> = dhaktem bodol.",
        "history-fieldset-title": "Uzollnne khatir sod",
-       "history-show-deleted": "Fokot kadun udoilelem",
+       "history-show-deleted": "Fokot uzollnni kadun udoilelem",
        "histfirst": "sogleavon adhlem",
        "histlast": "sogleavon novem",
        "history-feed-title": "Uzollnniancho itihas",
        "compareselectedversions": "Nivodloleo uzollneo comparar kor",
        "editundo": "kel'lem portavchem",
        "diff-empty": "(Kaim forok na)‎",
-       "diff-multi-sameuser": "(Heach vangdian {{PLURAL:$1|kel'lo modlo ek bodol dakhounk na|kel'le modle $1 bodlopam dakhounk nan}})",
+       "diff-multi-sameuser": "(Heach vangdian {{PLURAL:$1|kel'lo modlo ek bodol dakhounk na|kel'le modle $1 bodol dakhounk nan}})",
        "diff-multi-otherusers": "({{PLURAL:$1|Ek modli uzollnni|$1 modleo uzollnneo}} {{PLURAL:$2|ek her vaporpi|$2 her vaporpi}}, hache vorvim dakhovnk na)‎",
        "searchresults": "Sodache porinaman",
        "searchresults-title": "\"$1\" -khatir sodache porinaman",
        "yourrealname": "Khorem nanv:",
        "prefs-help-email": "Email potto sokticho na, pun tum gupitutor visroxi zalear gupitutor punorsthapon korunk email pottechi goroz podta.",
        "prefs-help-email-others": "Tujean dusreank tujea vapurpeacho panar vo bhasabhasache panar aslele eke email zodde vorvim tuje xim sompork korunk diunk zata.\nDusre tuje xim sompork kortat tednam tuzo email potto tankam kollchenam.",
+       "group-bot": "Robotam",
        "group-sysop": "Karbhari",
        "group-all": "(soglle)",
+       "grouppage-bot": "{{ns:project}}:Robotam",
        "grouppage-sysop": "{{ns:project}}:Karbhari",
        "right-writeapi": "Borovpeache API-cho vapor",
        "newuserlogpage": "Vapurpi rochnnechem sotr",
        "rightslog": "Vaporpeachea hokancho sotr",
        "action-edit": "hem pan sudar",
-       "nchanges": "$1 {{PLURAL:$1|bodlop|bodlopam}}",
+       "action-createaccount": "hem vaporpeachem khatem roch",
+       "nchanges": "$1 {{PLURAL:$1|bodol}}",
        "enhancedrc-history": "itihas",
        "recentchanges": "Halinche bodol",
        "recentchanges-legend": "Hallinch zalleo bodolancheo poryay",
        "recentchanges-summary": "Hea wikicher halinch zal'le bodolancher nodor dovor.",
        "recentchanges-noresult": "Dilolea kallache bodol hea nikoxak zullnant.‎",
-       "recentchanges-feed-description": "Wiki'k kel'le halinche bodlopancher hea vhawa vorvim nodor dovor.",
+       "recentchanges-feed-description": "Wiki'k kel'le halinche bodolancher hea vhawa vorvim nodor dovor.",
        "recentchanges-label-newpage": "Hea bodolan ek novem pan rochlam",
        "recentchanges-label-minor": "Ho ek dhaktto bodol",
        "recentchanges-label-bot": "Hem bodol eka robotan kel'lem",
        "recentchanges-label-plusminus": "Hea panacho akar itlea baitani bodol'lo",
        "recentchanges-legend-heading": "<strong>Kunji:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|nove pananchi suchi]]-ui polloi)",
-       "rcnotefrom": "Sokoil <strong>$3, $4<strong> savn {{PLURAL:$5|zalelem bodlop dilam|zalelim bodolpam dileant}} (<strong>$1<strong> meren {{PLURAL:$5|dakhoilam|dakhoileant}}).",
-       "rclistfrom": "$3 $2 savn suru zatelim novim bodolpam dakhoi",
-       "rcshowhideminor": "$1 dhaktteo bodlopam",
+       "rcnotefrom": "Sokoil <strong>$3, $4<strong> savn {{PLURAL:$5|zalelem bodol dilam|zalelem bodol dileant}} (<strong>$1<strong> meren {{PLURAL:$5|dakhoilam|dakhoileant}}).",
+       "rclistfrom": "$3 $2 savn suru zatelim nove bodol dakhoi",
+       "rcshowhideminor": "$1 dhakte bodol",
        "rcshowhideminor-show": "Dakhoi",
        "rcshowhideminor-hide": "Lipoi",
        "rcshowhidebots": "$1 robot",
        "rcshowhidepatr": "$1 paro kelele sudharop",
        "rcshowhidepatr-show": "Dakhoi",
        "rcshowhidepatr-hide": "Lipoi",
-       "rcshowhidemine": "Mhojeo bodlopam $1",
+       "rcshowhidemine": "Mhoje bodol $1",
        "rcshowhidemine-show": "Dakhoi",
        "rcshowhidemine-hide": "Lipoi",
-       "rclinks": "Xevtiche $2 disanim zal'le $1 bodlopam dakhoi",
+       "rclinks": "Xevtiche $2 disanim zal'le $1 bodol dakhoi",
        "diff": "frk",
        "hist": "iti",
        "hide": "Lipoi",
        "rc-change-size-new": "$1 {{PLURAL:$1|byte|byti}} bodol kel'lea uprant",
        "rc-enhanced-expand": "Bariksann dakhoi",
        "rc-enhanced-hide": "Bariksann lipoi",
-       "recentchangeslinked": "Sombondit bodolpam",
+       "rc-old-title": "orombhant rochloli \"$1\" hea nanvan‎.",
+       "recentchangeslinked": "Sombondit bodol",
        "recentchangeslinked-feed": "Sombondit bodol",
-       "recentchangeslinked-toolbox": "Sombondit bodlopam",
-       "recentchangeslinked-title": "\"$1\"che sombondit bodolpam",
+       "recentchangeslinked-toolbox": "Sombondit bodol",
+       "recentchangeslinked-title": "\"$1\"che sombondit bodol",
        "recentchangeslinked-summary": "Eka panachem nanv boroi jea vorvim zulloilolea panancher vo panam pasun bodol  distolo. (Eka vorgonnache vangddi pollovnk, boroi {{ns:category}}:Vorgonnachem nanv). [[Special:Watchlist|Tujea sadurvollerint]] aslelim panacher bodol <strong>datt</strong> asat.",
        "recentchangeslinked-page": "Panache nanv:",
-       "recentchangeslinked-to": "Dil'em panache bodlek haka zodlelem panank kel'lim bodlopam dakhoi",
+       "recentchangeslinked-to": "Dil'em panache bodlek haka zodlelem panank kel'le bodol dakhoi",
        "upload": "Fayl upload kor",
        "uploadbtn": "Fail upload kor",
        "uploadlogpage": "Uploadachem sotr",
        "license-header": "Porvangi",
        "listfiles-delete": "kadun udoi",
        "imgfile": "fayl",
+       "listfiles": "Faylichi volleri‎",
        "listfiles_date": "Tarikh",
        "listfiles_name": "Nanv",
        "listfiles_user": "Vaporpi",
        "filehist-datetime": "Tarikh/Vell",
        "filehist-thumb": "Lhan-imaz",
        "filehist-thumbtext": "$1chi avrutti khatir lhan-imaz",
+       "filehist-nothumb": "Lhan-imaz na",
        "filehist-user": "Vapurpi",
        "filehist-dimensions": "Akar",
-       "filehist-comment": "vivek",
+       "filehist-comment": "Xero",
        "imagelinks": "Faylicho vapor",
        "linkstoimage": "{{PLURAL:$1|Hem pan|$1 Him panam}} hi fayl {{PLURAL:$1|vaporta|vaportat}}:",
+       "linkstoimage-more": "$1 poros odik {{PLURAL:$1|pan vaporta|panam vaporta}} hi fayl.\nSokoili volleri dakhoita {{PLURAL:$1|poilem pan|poilim $1 panam}} jem hich fayl vaporta. Ek [[Special:WhatLinksHere/$2|purnn volleri]] uplobdh asa.‎",
        "nolinkstoimage": "Hea faylik vaportat toslim panam nant",
        "linkstoimage-redirect": "$1 (fayl punornirdexon) $2",
        "sharedupload-desc-here": "Hi fayl $1, hachi ani dusrea prokolpanim haka uzar korunk zata.\nHachem [$2 faylichem vivron panan] asleli vivron khala dilea:",
        "prefixindex": "Panam jenche nanvache survatek asa...",
        "shortpages": "Dhaktim panam",
        "longpages": "Lamb panam",
+       "listusers": "Vaporpeanchi volleri",
        "usercreated": "$3 hannem $1 disa $2 vaztam rochlelem",
        "newpages": "Novim panam",
        "move": "Zago bodol",
        "speciallogtitlelabel": "Vishoi vo {{ns:user}}:vapurpeachem nanv:",
        "log": "Sotram",
        "all-logs-page": "Soglle bhousache sotram",
+       "alllogstext": "{{SITENAME}} hacheo sogllea uplobdh sotranchi ektthaim dakhovnni.\nTujean tuzo dekhavo ornum ieta ek sotracho prokar vinchun, vaporpeachem nanv (vhodle and dhakte okxora modem forok podta), vo porinnam zalolem pan (hanga-ui vhodle and dhakte okxora modem forok podta).‎",
        "logempty": "Sotran zullpi nog nant.‎",
        "allpages": "Sogllim panam",
        "nextpage": "Fuddlem pan ($1)",
        "allpagesfrom": "Hanga thavn suru zatelea panank dakhoi:",
        "allarticles": "Sogllim panam",
        "allpagessubmit": "Voch",
+       "allpages-hide-redirects": "Punornirdexonam lipoi",
        "categories": "Vorg",
        "linksearch-ns": "Nanv-tholl:",
        "linksearch-ok": "Sod",
        "unwatch": "Nodor kadd",
        "watchlist-details": "Tujea Sadurvollerint {{PLURAL:$1|$1 pan asa|$1 panam asat}} (te-bhair ulovpachim panam asat).",
        "wlheader-showupdated": "Tujea fatle bhette san bodol'lean tim panam '''datt''' dakhoileant.",
+       "wlnote": "Sokoil {{PLURAL:$1|ho nimanno bodol|hem nimanneo <strong>$1</strong> bodol}} nimannea {{PLURAL:$2|horan|<strong>$2</strong> horanim}}, $3, $4 porian.‎",
        "wlshowlast": "Xevottchim $1 voram $2 dis  dakhoi",
        "watchlist-options": "Sadurvollericheo poryay",
        "watching": "Disht dovortanv...",
        "unwatching": "Disht kaddthanv...",
+       "enotif_reset": "Panam bhett dilolim mhunn khunnai",
        "delete-legend": "Kadun udoi",
        "actioncomplete": "Karvai sompurnn",
        "actionfailed": "Karvai oiesiesvi",
        "dellogpage": "Kadun udouneche sotr",
        "deleteotherreason": "Dusrem/aniki karon:",
        "rollbacklink": "kovoll",
-       "rollbacklinkcount": "$1 {{PLURAL:$1|bodol|bodlopam}} kovoll",
+       "rollbacklinkcount": "$1 {{PLURAL:$1|bodol}} kovoll",
        "changecontentmodel-title-label": "Panacho mathallo",
        "changecontentmodel-reason-label": "Karonn:",
        "protectlogpage": "Surokxitechem sotr",
        "protectedarticle": "rakhlelem \"[[$1]]\"",
+       "modifiedarticleprotection": "surokxechi patlli \"[[$1]]\"‎ hache khatir bodol’lea",
        "protect-default": "Sogllea vaporpeank porvangi di‎",
        "protect-otherreason": "Dusrem/aniki karon:",
        "protect-otherreason-op": "Dusrem karon",
        "undeleteviewlink": "polloi",
        "namespace": "Nanv-tholl",
        "invert": "Nonddni urfattoi",
-       "tooltip-invert": "Vinchlele nanvtholla (ani khunnailam zalear sombondhit nanvtholla) bhitorlea pananim kel'le bodlopam lipounk hem boks khunnai",
+       "tooltip-invert": "Vinchlele nanvtholla (ani khunnailam zalear sombondhit nanvtholla) bhitorlea pananim kel'le bodol lipounk hem boks khunnai",
        "namespace_association": "Sombondhit nanvtholl",
        "tooltip-namespace_association": "Vinchlele nanvthollache sombondhit bhasabhas vo vixoiacho nanvthollakui gheupak hem boks khunnai",
        "blanknamespace": "(Mukhel)",
        "mycontris": "Yogdanam",
        "anoncontribs": "Yogdanam",
        "contribsub2": "{{GENDER:$3|$1}} hacheo ($2)",
-       "uctop": "(atachem)",
+       "nocontribs": "Hea nixkoxank khoinchech bodol zul’llele mellunk nan.",
+       "uctop": "atachem",
        "month": "Mhoinea savn (ani adichem):",
        "year": "Hea vorsa savn (ani adichem):",
        "sp-contributions-newbies": "Fokot novea khateachim yogdanam dakhoi",
        "whatlinkshere-hidelinks": "$1 zoddnio",
        "whatlinkshere-hideimages": "$1 faylinchim zoddni",
        "whatlinkshere-filters": "Challnio",
-       "ipboptions": "2 voram:2 hours,1 dis:1 day,3 dis:3 days,1 satollo:1 week,2 satolle:2 weeks,1 mhoino:1 month,3 mhoine:3 months,6 mhoine:6 months,1 voros:1 year,sasnnank:infinite",
+       "ipboptions": "2 voram:2 hours,1 dis:1 day,3 dis:3 days,1 satollo:1 week,2 satolle:2 weeks,1 mhoino:1 month,3 mhoine:3 months,6 mhoine:6 months,1 voros:1 year,xevott na:infinite",
        "ipblocklist": "Addhailele vaporpi",
+       "infiniteblock": "xevott na",
        "blocklink": "addavnnni",
        "unblocklink": "Addavnni kadd",
        "change-blocklink": "Addavnnni bodol",
        "contribslink": "yogdan",
        "blocklogpage": "addavnnechem sotr",
        "blocklogentry": "[[$1]] addailelem $2 asun vellacho ont: $3",
+       "reblock-logentry": "addavpachem bosovp bodol’lam [[$1]] hache khatir sompacho vell dilam $2 $3‎",
        "block-log-flags-nocreate": "Khatem rochop opatr kelam",
        "proxyblocker": "Protinidhi-sirvidor addavpi‎",
        "move-watch": "Hea panar dixtt dovor",
        "revertmove": "porti",
        "export": "Panank niryat kor",
        "allmessagesname": "Nanv",
-       "allmessagesdefault": "Falta sondex mozkur",
+       "allmessagesdefault": "Default sondex mozkur",
        "thumbnail-more": "Vhodlem kor",
        "thumbnail_error": "Lhan-imaz toiar kortana chuk zali. Karonn: $1",
        "importlogpage": "Aiatacho sotr",
        "tooltip-ca-nstab-template": "Saacho polloi",
        "tooltip-ca-nstab-category": "Vorgachem pan polloi",
        "tooltip-minoredit": "Haka ek kirkoll sudharop mhunn khunnay",
-       "tooltip-save": "Tujim bodolpam sambhall",
+       "tooltip-save": "Tuje bodol sambhall",
        "tooltip-preview": "Bodolanchi zholok polloi, upkar hem samballche adim vapor!",
        "tooltip-diff": "Tumi hea mozkurant kelelo bodol dakhoiat",
        "tooltip-compareselectedversions": "Hea panacheo don nivoddleleo uzollneo modem forok polloi",
        "pageinfo-header-restrictions": "Panachi surokxa",
        "pageinfo-header-properties": "Panache gunndhorm",
        "pageinfo-display-title": "Manddlolem mathallem",
-       "pageinfo-default-sort": "Falta vanttnnechi chavi",
+       "pageinfo-default-sort": "Default arin manddunk chavi",
        "pageinfo-length": "Panachi lambai (bayt-ant)‎",
        "pageinfo-article-id": "Panacho ank",
        "pageinfo-language": "Panachea mozkurachi bhas",
        "pageinfo-content-model": "Panachea mozkuracho nomuno",
        "pageinfo-robot-policy": "Robotam koddlean suchien ghalop",
        "pageinfo-robot-index": "Porvangi asa",
+       "pageinfo-robot-noindex": "Porvangi nam",
        "pageinfo-watchers": "Panacher dixtt dovortoleancho ankddo",
        "pageinfo-few-watchers": "$1 poros thoddem {{PLURAL:$1|dixtt dovorpi}}‎",
        "pageinfo-redirects-name": "Hea pana khatir punornirdexonacho ankddo‎",
+       "pageinfo-subpages-name": "Hea panachea up-panacho ankddo",
+       "pageinfo-subpages-value": "$1 ($2 {{PLURAL:$2|purnornirdexon|purnornirdexonam}}; $3 {{PLURAL:$3|punornirdexon naslelem}})‎",
        "pageinfo-firstuser": "Pan rochpi",
        "pageinfo-firsttime": "Pan rochpachi tarikh",
        "pageinfo-lastuser": "Halincho sompadok",
        "pageinfo-authors": "Veglle borovpeancho ekunn ankddo",
        "pageinfo-recent-edits": "Halinchea bodolanche ankdde (gele $1)‎",
        "pageinfo-recent-authors": "Halinche veglle borovpi",
+       "pageinfo-magic-words": "{{PLURAL:$1|Jaduchem utor|Jaduchim utram}} ($1)‎",
+       "pageinfo-hidden-categories": "Lipoilele {{PLURAL:$1|vorg}} ($1)",
        "pageinfo-templates": "{{PLURAL:$1|Sacho durasth-somaves zala|Sache durasth-somaves zale}} ($1)‎",
        "pageinfo-toolboxlink": "Panachi mahiti",
        "pageinfo-contentpage": "Ek mozkurachem pan koxem dhorpant ailam‎",
        "patrol-log-page": "Paro korpeacho sotr",
        "previousdiff": "←  Adlo bodol",
        "nextdiff": "Fuddlem bodol →",
+       "widthheightpage": "$1 × $2, $3 {{PLURAL:$3|pan|panam}}",
        "file-info-size": "$1 × $2 chitrotvam, faylicho akar: $3, MIME prokar: $4",
+       "file-info-size-pages": "$1 × $2 chitrotvam, faylicho akar: $3, MIME prokar: $4, $5 {{PLURAL:$5|pan|panam}}‎",
        "file-nohires": "Odhik bariksai na.",
        "svg-long-desc": "SVG fayl, nanvak $1 × $2 chitrotvam, faylcho akar: $3",
        "show-big-image": "Mullavi fayl",
        "monthsall": "sogllem",
        "confirm-rollback-button": "Borem",
        "confirm-rollback-top": "Hea pana voile somadon asle toxe porot kor?",
-       "watchlisttools-view": "Sombondhi bodlopam polloi",
+       "imgmultipagenext": "Fuddlem pan →",
+       "imgmultigo": "Voch!",
+       "imgmultigoto": "$1 ‎panar voch",
+       "watchlisttools-clear": "Sadurvolleri nivoll kor",
+       "watchlisttools-view": "Sombondhit bodol polloi",
        "watchlisttools-edit": "Sadurvolleri polloi ani sudar",
        "watchlisttools-raw": "Sadurvollerichi mull-an bodol kor",
        "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|uloi]])",
-       "duplicate-defaultsort": "'''Chotrai:''' Falta anukraman mukhel ''$2'' rodd korta adhlem falta anukraman mukhel ''$1'', haka.",
+       "duplicate-defaultsort": "'''Chotrai:''' Default arin manddunk chavi ''$2'' rodd korta adhlem default arin manddunk chavi ''$1'', haka.",
        "redirect": "Fayl, vaporpi, pan, uzollnni vo sotr ank‎ vorvim punornirdexon kor",
        "redirect-summary": "Hem vixex pan punornirdexit korta eka faylik (faylichem nanv dilear), eke panak (uziollnecho ank vo panacho ank dilear), ek vaporpeachem panak (eke vaporpeache ank dilear), vo ek sotr provishtt (sotrachem ank dilear). Vapor: [[{{#Special:Redirect}}/file/Dekhik.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], [[{{#Special:Redirect}}/user/101]], vo [[{{#Special:Redirect}}/logid/186]].",
        "redirect-submit": "Voch‎",
        "redirect-revision": "Panachi uzollnni",
        "redirect-file": "Faylichem nanv",
        "specialpages": "Vixex panam",
-       "external_image_whitelist": " #Hi voll asa toxich dovor<pre>\n#Khala sodpache sache (''regular expressions'') ghal (fokot // modem voita poi tem bhag)\n#Hanche borobor bhaile zodlele murt comparar kel'le zatele\n#Mell khatat tim murt koxeo distele, na zalear fokot mortek ek zodd distele\n#Jeo voll #-an suru zatele tem vivek mhunn manlele zatele\n#Hanga vhodle and dhakte okxora modem forok podona\n\n#Soglle sodpache sache hea volla voir ghal. Hi voll asa toxich dovor</pre>",
+       "external_image_whitelist": " #Hi voll asa toxich dovor<pre>\n#Khala sodpache sache (''regular expressions'') ghal (fokot // modem voita poi tem bhag)\n#Hanche borobor bhaile zodlele murt comparar kel'le zatele\n#Mell khatat tim murt koxeo distele, na zalear fokot mortek ek zodd distele\n#Jeo voll #-an suru zatele tem xere mhunn manlele zatele\n#Hanga vhodle and dhakte okxora modem forok podona\n\n#Soglle sodpache sache hea volla voir ghal. Hi voll asa toxich dovor</pre>",
        "tag-filter": "[[Special:Tags|Kurvechit]] challni:",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Kurvechit|Kurvechiti}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Kurvechit|Kurvechiti}}]]: $2",
+       "tags-active-yes": "Hoi",
+       "tags-active-no": "Na",
        "tags-hitcount": "$1 {{PLURAL:$1|bodol}}",
        "htmlform-title-not-exists": "$1 ostitvant na.",
-       "logentry-delete-delete": "$1-an {{GENDER:$2|kadun udoile}} pan $3",
+       "logentry-delete-delete": "$1, hannem {{GENDER:$2|kadun udoile}} pan $3",
+       "logentry-delete-restore": "$1 hannem {{GENDER:$2|porot haddlam}} pan $3 ($4)‎",
        "logentry-delete-revision": "$1 hannem {{PLURAL:$5|uzolliechem}} disnem  $3, hea panar {{GENDER:$2|bodol’la}}: $4‎",
        "revdelete-content-hid": "mozkur lipoila",
-       "logentry-move-move": "$1-an $3 panak $4 {{GENDER:$2|haloilea}}",
+       "logentry-move-move": "$1, hannem $3 panak $4 {{GENDER:$2|haloilea}}",
        "logentry-move-move-noredirect": "$1, hannem pan $3 savn $4 {{GENDER:$2|haloilam}} punornirdexon dorinastanam‎",
        "logentry-move-move_redir": "$1 hannem pan $3 savn $4 {{GENDER:$2|haloilolo}} punornirdexonavoir",
        "logentry-patrol-patrol-auto": "$1-an $3, hea panachem $4, hea uzollniecho paro kelam mhonn apoap {{GENDER:$2|khunnailam}}.",
        "mw-widgets-dateinput-no-date": "Tarikh nivddunk na",
        "mw-widgets-dateinput-placeholder-day": "VVVV-MM-DD",
        "mw-widgets-dateinput-placeholder-month": "VVVV-MM",
-       "randomrootpage": "Koxea koxeim mull pan"
+       "randomrootpage": "Khoincheim adlem modlem mull pan"
 }
index 4cf3bd2..25bce61 100644 (file)
        "anoncontribs": "Kontribusi",
        "contribsub2": "Ode {{GENDER:$3|$1}} ($2)",
        "nocontribs": "Diya'a u loboli'a mohumayawa lo kriteria botiya.",
-       "uctop": "(masatiya)",
+       "uctop": "masatiya",
        "month": "Lonto hulalo (wawu to'udiipo)",
        "year": "Lonto taawunu (wawu to'udiipo)",
        "sp-contributions-newbies": "Popobilohe bo lonto ta ohu'uwo bohu",
        "redirect-file": "Tanggulo berkas",
        "specialpages": "Halaman Spesial",
        "tag-filter": "[[Special:Tags|Tag]]filter:",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Tag}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Tag}}]]: $2",
        "tags-active-yes": "Jo",
        "tags-active-no": "De'e",
        "tags-hitcount": "$1 {{PLURAL:$1|boli'o|loboli'a}}",
index ca7c9e2..f64292c 100644 (file)
        "mycontris": "𐌱𐌹𐌰𐌿𐌺𐌰𐌹𐌽𐌴𐌹𐍃",
        "contribsub2": "𐍆𐌰𐌿𐍂 $1 ($2)",
        "nocontribs": "𐌽𐌹 𐌱𐌹𐌲𐌹𐍄𐌰𐌽𐍉𐍃 𐌹𐌽𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐍉𐍃 𐌲𐌰𐌻𐌴𐌹𐌺𐍉𐌽𐌳𐌴𐌹𐌽𐍃 𐌸𐌰𐌹𐌼 𐌱𐌹𐌳𐍉𐌼.",
-       "uctop": "(𐌷𐌰𐌿𐌱𐌹𐌸)",
+       "uctop": "𐌷𐌰𐌿𐌱𐌹𐌸",
        "month": "𐍆𐍂𐌰𐌼 𐌼𐌴𐌽𐍉𐌸 (𐌾𐌰𐌷 𐌰𐌹𐍂𐌹𐍃):",
        "year": "𐍆𐍂𐌰𐌼 𐌾𐌴𐍂𐌰 (𐌾𐌰𐌷 𐌰𐌹𐍂𐌹𐍃):",
        "sp-contributions-newbies-sub": "𐌽𐌹𐌿𐌾𐌰𐌹𐌼 𐍂𐌰𐌷𐌽𐌴𐌹𐌽𐌹𐌼",
        "redirect-file": "𐍆𐌰𐌾𐌻𐌰𐌽𐌰𐌼𐍉",
        "specialpages": "𐌿𐍃𐍃𐌹𐌽𐌳𐌰𐌹 𐌻𐌰𐌿𐌱𐍉𐍃",
        "tag-filter": "[[Special:𐍃𐍉𐌺𐌴𐌹𐌽𐌹𐍅𐌰𐌿𐍂𐌳𐌰|𐍃𐍉𐌺𐌴𐌹𐌽𐌹𐍅𐌰𐌿𐍂𐌳]] 𐍆𐌹𐌻𐍄𐍂𐌿𐌼",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|𐍃𐍉𐌺𐌴𐌹𐌽𐌹𐍅𐌰𐌿𐍂𐌳|𐍃𐍉𐌺𐌴𐌹𐌽𐌹𐍅𐌰𐌿𐍂𐌳𐌰}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|𐍃𐍉𐌺𐌴𐌹𐌽𐌹𐍅𐌰𐌿𐍂𐌳|𐍃𐍉𐌺𐌴𐌹𐌽𐌹𐍅𐌰𐌿𐍂𐌳𐌰}}]]: $2",
        "tags-source-header": "𐌱𐍂𐌿𐌽𐌽𐌰",
        "tags-actions-header": "𐍄𐍉𐌾𐌰",
        "tags-active-yes": "𐌾𐌰𐌹",
index 5c6bd75..728df60 100644 (file)
        "anoncontribs": "Ἔρανoς",
        "contribsub2": "Πρὸς $1 ($2)",
        "nocontribs": "Οὐδεμία ἀλλαγὴ ηὑρέθη προσήκουσα εἰς τάδε τὰ κριτήρια.",
-       "uctop": "(ἄκρον)",
+       "uctop": "ἄκρον",
        "month": "Μήν:",
        "year": "Ἔτος:",
        "sp-contributions-newbies": "Δεικνύναι ἐράνους νέων λογισμῶν μόνον",
        "tags": "Ἔγκυρα προσαρτήματα μεταβολῆς",
        "tag-filter": "Διηθητήριον [[Special:Tags|προσαρτήματος]]:",
        "tag-filter-submit": "Διηθητήριον",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Ἐτικέτα|Ἐτικέται}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Ἐτικέτα|Ἐτικέται}}]]: $2",
        "tags-title": "Προσαρτήματα",
        "tags-intro": "Ἥδε ἡ δέλτος προσαρτήματα συγκαταλέγει (οἷσπερ ἔξεστι τῷ λογισμικῷ χρῆσθαι πρὸς τὸ σημαίνειν μεταγραφὴν τινά) καὶ τὴν νοηματικὴν σήμανσιν σφῶν.",
        "tags-tag": "ὄνομα προσαρτήματος",
        "dberr-problems": "Συγγνώμην! Ἐμπεφανίκασι τεχνικαὶ δυσχέρειαι.",
        "dberr-again": "Πείρασον ἀναμένειν ὀλίγα λεπτὰ τῆς ὥρας καὶ ὕστερον ἐπιφόρτισον πάλιν.",
        "dberr-info": "(Ἀδύνατος ἡ ἐπαφὴ μετὰ τοῦ ἐξυπηρετητικοῦ συστήματος τῆς βάσεως δεδομένων: $1)",
-       "dberr-usegoogle": "Ἐν τῷ μεταξὺ χρόνῳ πείρασον τῆν ζήτησιν μέσῳ τοῦ Google.",
-       "dberr-outofdate": "Αἱ ἐνδείξεις σφῶν περὶ τοῦ περιεχομένου ἡμῶν πιθανῶς ούκ είσὶ ἐνήμεραι.",
-       "dberr-cachederror": "Τόδε λανθάνον ἀντίγραφόν τι τῆς ἐζητημένης δέλτου ἐστίν, πιθανῶς μὴ ἐνήμερον.",
        "htmlform-invalid-input": "Μέρος τῶν εἰσαγομένων δεδομένων σου προβληματικὸν ἐστίν",
        "htmlform-select-badoption": "Ἡ τιμὴ ἡ καθωρισμένη ὑπὸ ἐσοῦ οὐκ ἔστι ἔγκυρος ἐπιλογή.",
        "htmlform-int-invalid": "Ἡ τιμὴ ἡ καθωρισμένη ὑπὸ ἐσοῦ οὐκ ἔστι ἀκέραιος ἀριθμός.",
index 9417a00..03db90f 100644 (file)
        "tog-shownumberswatching": "Aazahl Benutzer aazeige, wo ne Syten am Aaluege sy (i den Artikelsyte, i de «letschten Änderigen» und i der Beobachtigslischte)",
        "tog-oldsig": "Aktuelli Unterschrift:",
        "tog-fancysig": "Unterschrift as Wikitext behandle (ohni automatischi Verlinkig)",
-       "tog-uselivepreview": "Vorschau sofort aazeige",
+       "tog-uselivepreview": "Vorschau ohni Neilade vu dr Syte aazaige",
        "tog-forceeditsummary": "Sag mer s, wänn i s Zämmefassigsfeld läär loss",
        "tog-watchlisthideown": "Eigeni Änderige uf d Beobachtigslischt usblände",
        "tog-watchlisthidebots": "Bot-Änderige in d Beobachtigslischt usblende",
        "tog-watchlisthideminor": "Chlyni Änderige nit in de Beobachtigslischte aazeige",
        "tog-watchlisthideliu": "Bearbeitige vu aagmäldete Benutzer usblände",
        "tog-watchlistreloadautomatically": "Wänn e Filter gänderet woren isch, d Beobachtigslischt automatisch nei lade (brucht JavaScript)",
+       "tog-watchlistunwatchlinks": "Diräkti Nimi-Beobachte-/Beobachte-Markierige ({{int:Watchlist-unwatch}}/{{int:Watchlist-unwatch-undo}}) zue beobachtete Syte mit Ändrige zuefiege (doderfiur bruucht s JavaScript)",
        "tog-watchlisthideanons": "Bearbeitige vu anonyme Benutzer (IP-Adresse) usblände",
        "tog-watchlisthidepatrolled": "vum Fäldhieter aagluegti Änderige in dr Beobachtigslischt usblände",
        "tog-watchlisthidecategorization": "Kategorisierig vo de Syte nid zeige",
        "contribsub2": "Vu {{GENDER:$3|$1}} ($2)",
        "contributions-userdoesnotexist": "Ds Benutzerkonto «$1» isch nid registriert.",
        "nocontribs": "S sin keini Benutzerbyytreg mit däne Kriterie gfunde wore.",
-       "uctop": "(aktuell)",
+       "uctop": "aktuell",
        "month": "u Monet:",
        "year": "bis Jahr:",
        "sp-contributions-newbies": "Zeig nume Biträg vo neie Benutzer",
        "tags": "Änderigs-Tag priefe",
        "tag-filter": "[[Special:Tags|Markierigs]]filter:",
        "tag-filter-submit": "Filter",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Markierig|Markierige}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Markierig|Markierige}}]]: $2",
        "tags-title": "Tag",
        "tags-intro": "Die Syte zeigt alli Tag, wu Bearbeitige mit markiert wäre un derzue d Bedytig vun ene.",
        "tags-tag": "Markierigsname",
        "dberr-again": "Wart e paar Minute un lad derno nej.",
        "dberr-info": "(Kei Zuegriff uf d Datebank: $1)",
        "dberr-info-hidden": "(Kei Zuegriff uf d Datebank)",
-       "dberr-usegoogle": "Du chenntsch in dr Zwischezyt mit Google sueche.",
-       "dberr-outofdate": "Obacht: Dr Suechindex vu unsere Syte chennt veraltet syy.",
-       "dberr-cachederror": "Des isch e Kopii vum Cache vu dr Syte, wu Du aagforderet hesch, un chennt veraltet syy.",
        "htmlform-invalid-input": "Mit e Teil Yygabe git s Probläm",
        "htmlform-select-badoption": "Dr Wärt, wu aagee hesch, isch kei giltigi Option.",
        "htmlform-int-invalid": "Dr Wärt, wu aagee hesch, isch kei Ganzzahl.",
index dfe816f..030415b 100644 (file)
        "savechanges": "પરિવર્તન સાચવો",
        "publishpage": "પાનું પ્રકાશિત કરો",
        "publishchanges": "ફેરફારો પ્રકાશિત કરો",
+       "savearticle-start": "પાનું સંગ્રહો...",
+       "savechanges-start": "ફેરફારો સંગ્રહો...",
+       "publishpage-start": "પાનું પ્રકાશિત કરો...",
+       "publishchanges-start": "ફેરફારો પ્રકાશિત કરો...",
        "preview": "પૂર્વાવલોકન",
        "showpreview": "ઝલક જુવો",
        "showdiff": "ફેરફારો દર્શાવો",
        "anoneditwarning": "<strong>ચેતવણી:</strong> તમે તમારા સભ્ય નામથી પ્રવેશ કર્યો નથી.\nઆ પાનાનાં ઇતિહાસમાં તમારૂં આઇ.પી. (IP) એડ્રેસ નોંધવામાં આવશે અને તમારૂં આઈ.પી. લોકો જાહેર રીતે જોઈ શકશે. માટે <strong>[$1 પ્રવેશ કરો]</strong> અથવા તમે <strong>[$2 ખાતું બનાવો]</strong> તો ફેરફારો તમારા સભ્યનામ હેઠળ થશે અને અન્ય ફાયદાઓ પણ મળશે.",
        "anonpreviewwarning": "તમે સભ્યનામથી પ્રવેશ કર્યો નથી,આ પાનું ઈતિહાસમાંતમારા IP સરનામાના નામે  સાચવવામાં આવશે",
        "missingsummary": "<strong>ચેતવણી:</strong> તમે ફેરફારોનો સારાંશ આપ્યો નથી.\nજો તમે \"$1\"  પર ફરી ક્લિક કરશો તો, તમારા ફેરફારો સારાંશ વગર સાચવવામાં આવશે.",
-       "missingcommenttext": "કૃપા કરી નીચે ટીપ્પણી લખો.",
+       "missingcommenttext": "કૃપા કરીને ટીપ્પણી ઉમેરો.",
        "missingcommentheader": "<strong>ચેતવણી:</strong> તમે તમારી ટિપ્પણી ને શીર્ષક/મથાળુ આપ્યું નથી.\nજો તમે  \"$1\" પર ફરીથી ક્લિક કરશો, તો તમારા ફેરફારો મથાળા વગર સચવાશે.",
        "summary-preview": "સંપાદન સારાંશ પૂર્વાવલોકન:",
        "subject-preview": "વિષયનું પૂર્વાવલોકન:",
        "recentchangesdays": "તાજા ફેરફારોમાં દેખાડવાના દિવસો",
        "recentchangesdays-max": "મહત્તમ  $1 {{PLURAL:$1|દિવસ|દિવસો}}",
        "recentchangescount": "સમાન્ય પણે ફલકમાં બતાવવાના ફેરફારોની સંખ્યા",
-       "prefs-help-recentchangescount": "àª\86માàª\82 àª¤àª¾àª\9cા àª«à«\87રફારà«\8b,  àª\87તિહાસ àª\85નà«\87 àª²à«\8bàª\97 àª¶àª¾àª®àª¿àª² àª\9bà«\87.",
+       "prefs-help-recentchangescount": "મહતà«\8dતમ àª¸àª\82àª\96à«\8dયા: à«§à«¦à«¦à«¦",
        "savedprefs": "તમારી પસંદગી સચવાઈ ગઈ છે.",
        "timezonelegend": "સમય ક્ષેત્ર:",
        "localtime": "સ્થાનીક સમય:",
        "timezoneregion-europe": "યુરોપ",
        "timezoneregion-indian": "હિંદ મહાસાગર",
        "timezoneregion-pacific": "પ્રશાંત મહાસાગર",
-       "allowemail": "àª\85નà«\8dય àª¸àª­à«\8dયà«\8b àª¤àª°àª«àª¥à«\80 àª\86વતા àª\87-મà«\87લનà«\87 àªªàª°àªµàª¾àª¨àª\97à«\80 આપો",
+       "allowemail": "àª\85નà«\8dય àª¸àª­à«\8dયà«\8b àª¤àª°àª«àª¥à«\80 àª®àª¨à«\87 àª\87-મà«\87લનà«\80 àª\85નà«\81મતિ આપો",
        "prefs-searchoptions": "શોધો",
        "prefs-namespaces": "નામ અવકાશો",
        "default": "મૂળ વિકલ્પ",
        "grouppage-bureaucrat": "{{ns:project}}: રાજનૈતિક",
        "grouppage-suppress": "{{ns:project}}:નાબૂદ",
        "right-read": " પાના વાંચો",
-       "right-edit": "પાના બદલો",
+       "right-edit": "પાનાઓમાં ફેરફાર કરો",
        "right-createpage": "પાના બનાવો ( જે ચર્ચા પાના ન હોય)",
        "right-createtalk": "ચર્ચાનું પાનું બનાવો",
        "right-createaccount": "નવા સભ્ય ખાતા ખોલો",
        "rcfilters-legend-heading": "<strong>સંક્ષેપોની યાદી:</strong>",
        "rcfilters-other-review-tools": "અન્ય ચકાસણી સાધનો",
        "rcfilters-activefilters": "સક્રિય ગાળકો",
-       "rcfilters-limit-title": "દરà«\8dશાવવાના àª«à«\87રફારો",
+       "rcfilters-limit-title": "દરà«\8dશાવવાના àªªàª°àª¿àª£àª¾àª®ો",
        "rcfilters-days-title": "તાજેતરના દિવસો",
        "rcfilters-hours-title": "તાજેતરના કલાકો",
        "rcfilters-savedqueries-cancel-label": "રદ કરો",
        "statistics-files": "ચડાવેલ ફાઇલો",
        "statistics-edits": "{{SITENAME}} શરૂ થયા પછી ફેરફાર થયેલ પાના",
        "statistics-edits-average": "પાનાં દીઠ સરેરાશ ફેરફારો",
-       "statistics-users": "નોંધણી થયેલ  [[Special:ListUsers|users]]",
+       "statistics-users": "નોંધણી થયેલા સભ્યો",
        "statistics-users-active": "સક્રીય સભ્યો",
        "statistics-users-active-desc": "સભ્ય કે જેમણે છેલ્લા {{PLURAL:$1|દિવસ|$1 દિવસો}}માં ફેરફારો કર્યાં છે",
        "pageswithprop": "પાનાં ગુણધર્મ સાથેનાં પાનાંઓ",
        "anoncontribs": "યોગદાનો",
        "contribsub2": "($2) માટે {{GENDER:$3|$1}}",
        "nocontribs": "આ પરિમાણને મળતી પરિણામ નથી મળ્યાં",
-       "uctop": "(વર્તમાન)",
+       "uctop": "વર્તમાન",
        "month": "આ મહિનાથી (અને તેના પહેલાનાં) →",
        "year": "આ વર્ષથી (અને તેના પહેલાનાં) →",
        "sp-contributions-newbies": "માત્ર નવા ખુલેલાં ખાતાઓનું યોગદાન બતાવો",
        "tags": "વૈધ ફેરફાર પાના",
        "tag-filter": "[[Special:Tags|ટૅગ]] ચાળણી:",
        "tag-filter-submit": "ચાળણી",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|ટેગ|ટેગ્સ}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|ટેગ|ટેગ્સ}}]]: $2",
        "tags-title": "ટૅગ્સ",
        "tags-intro": "આ પાના પર સૉફ્ટવૅર દ્વારા, સંપાદનને ચિહ્નિત કરાયેલાં ટૅગ્સની યાદી અને તેનાં અર્થ છે.",
        "tags-tag": "ટૅગનું નામ",
        "dberr-again": "થોડી વાર રાહ જોઈને ફરી પેજ લોડ કરવાનો પ્રયત્ન કરો.",
        "dberr-info": "(ડેટાબેઝનો સંપર્ક કરી શકાયો નહી: $1)",
        "dberr-info-hidden": "(ડેટાબેઝનો સંપર્ક કરી શકાયો નહી)",
-       "dberr-usegoogle": "તેસમયા દરમ્યાન તમે ગુગલ દ્વારા શોધી શકો",
-       "dberr-outofdate": "આપણી માહિતી સંબંધી તેમની સૂચિ કાલાતિત હોઇ શકે.",
-       "dberr-cachederror": "વિનંતિ કરેલ પાનાની આ એક સંગ્રહીત પ્રત માત્ર છે અને તે અધ્યતન ન પણ હોય.",
        "htmlform-invalid-input": "તમારા અમુક ઉમેરામાં ક્ષતિઓ છે.",
        "htmlform-select-badoption": "તમે બતાવેલ વિકલ્પ અવૈધ છે",
        "htmlform-int-invalid": "તમે લખેલ વિકલ્પ અંક નથી",
        "limitreport-walltime-value": "$1 {{PLURAL:$1|સેકંડ|સેકંડો}}",
        "limitreport-postexpandincludesize-value": "$1/$2 {{PLURAL:$2|બાઇટ|બાઇટ્સ}}",
        "limitreport-templateargumentsize-value": "$1/$2 {{PLURAL:$2|બાઇટ|બાઇટ્સ}}",
-       "expand_templates_input": "પાઠ àª\89મà«\87રણ:",
+       "expand_templates_input": "વિàª\95િલàª\96ાણ àª\89મà«\87રà«\8b:",
        "expand_templates_output": "પરિણામ:",
        "expand_templates_xml_output": "XML આઉટપુટ",
        "expand_templates_ok": "મંજૂર",
index b394d56..31f0392 100644 (file)
        "contributions-title": "Cohortyssyn liorish $1",
        "mycontris": "My chohortyssyn",
        "contribsub2": "Da $1 ($2)",
-       "uctop": "(baare)",
+       "uctop": "baare",
        "month": "Veih'n vee (as ny s'aa):",
        "year": "Veih'n vlein (as ny s'aa):",
        "sp-contributions-newbies": "Taishbyn cohortyssyn ec coontyssyn noa ny lomarcan",
index 4650230..9362132 100644 (file)
@@ -12,7 +12,7 @@
        "tog-underline": "Zana layin link",
        "tog-hideminor": "A ɓoye ƙananan gyare-gyare na baya-bayan nan",
        "tog-hidepatrolled": "A ɓoye gyare-gyaren kan ido a cikin gyare-gyare bayan-bayan nan",
-       "tog-newpageshidepatrolled": "A ɓoye shafuna kan ido a cikin sabbin shafuna",
+       "tog-newpageshidepatrolled": "A ɓoye shafunan kan ido daga cikin jerin sabbin shafuna",
        "tog-extendwatchlist": "A faɗaɗa jerin kan ido ya nuna duka gyare-gyare, ba na baya-bayan nan kawai ba",
        "tog-usenewrc": "A yi amfani da kyautattun gyare-gyare na baya-bayan nan (ana buƙatar Javascript)",
        "tog-numberheadings": "A lambace kanun matani kai tsaye",
@@ -22,7 +22,7 @@
        "tog-watchdefault": "A daɗa shafunan da na gyara a cikin jerina na kan ido",
        "tog-watchmoves": "A daɗa shafunan da na gusar a cikin jerina na kan ido",
        "tog-watchdeletion": "A daɗa shafunan da na shafe a cikin jerina na kan ido",
-       "tog-minordefault": "A alamta gyare-gyarena a matsayin ƙanana bisa manufa",
+       "tog-minordefault": "A alamta duk gyaruka a matsayin ƙanana bisa manufa",
        "tog-previewontop": "A nuna filin rigya-gani sama ga filin gyare-gyare",
        "tog-previewonfirst": "A nuna rigya-gani tun gyaran farin",
        "tog-enotifwatchlistpages": "A shaida mani ta Imel idan wani shafin jeerina na bin-sau ya sauya",
        "contributions-title": "Jerin gudummuwar ma'aikaci $1",
        "mycontris": "Gudummawata",
        "contribsub2": "Na $1 ($2)",
-       "uctop": "(sama)",
+       "uctop": "sama",
        "month": "Tun daga wata (da gabansa):",
        "year": "Tun daga shekara (da gabanta):",
        "sp-contributions-newbies": "Nuna gudummuwar sabbin akwantoci kawai",
index 57b01f4..40216f8 100644 (file)
        "specialpages": "Thi̍t-sû ya̍p",
        "external_image_whitelist": " #留下撈邇行一樣嘅文字<pre>\n#在下背(//中間部份)輸入正則表達式\n#邇兜將會撈外部(已超鏈接嘅)圖片配合\n#遐兜配合上嘅會顯示成圖片,否則就單淨會顯示成鏈接\n#有#開頭嘅行會當成意見\n#大小寫並無區分\n\n#在邇行上片輸入全部正則表達式。留下撈邇行一樣嘅文字</pre>",
        "tag-filter": "[[Special:Tags|Phiêu-chhiam]] ko-lì-hi:",
-       "tag-list-wrapper": "([[Special:Tags|$1 ke phiêu-chhiam]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|$1 ke phiêu-chhiam]]: $2",
        "logentry-delete-delete": "$1 san-chhù ya̍p-mien $3",
        "revdelete-restricted": "yí-kîn yin-yung han-tsṳ tsṳ tshâu-tsok-yèn",
        "revdelete-unrestricted": "yí-kîn yì-tshù yû-kûan tshâu-tsok-yè ke han-tsṳ",
index 901a417..ecce9a2 100644 (file)
        "contributions-title": "Nā Hāʻawina mea hoʻohana no $1",
        "mycontris": "Kaʻu mau haʻawina",
        "contribsub2": "No {{GENDER:$3|$1}} ($2)",
-       "uctop": "(okamanawa)",
+       "uctop": "okamanawa",
        "month": "Mai ka mahina (mamua aku nei nō hoʻi):",
        "year": "Mai ka makahiki (mamua aku nei nō hoʻi):",
        "sp-contributions-newbies": "Hōʻike i nā hāʻawina o nā moʻokāki hou wale nō",
index 32a46b2..75d725c 100644 (file)
        "passwordtooshort": "סיסמאות חייבות להיות באורך {{PLURAL:$1|תו אחד|$1 תווים}} לפחות.",
        "passwordtoolong": "סיסמאות אינן יכולות להיות ארוכות {{PLURAL:$1|מתו אחד|מ־$1 תווים}}.",
        "passwordtoopopular": "לא ניתן להשתמש בסיסמאות נפוצות. יש לבחור סיסמה קשה יותר לניחוש.",
+       "passwordinlargeblacklist": "הסיסמה שנבחרה נמצאת ברשימה של סיסמאות נפוצות מאוד. יש לבחור סיסמה ייחודית יותר.",
        "password-name-match": "סיסמתך חייבת להיות שונה משם המשתמש שלך.",
        "password-login-forbidden": "השימוש בשם המשתמש והסיסמה האלה נאסר.",
        "mailmypassword": "איפוס סיסמה",
        "timezonelegend": "אזור זמן:",
        "localtime": "שעה מקומית:",
        "timezoneuseserverdefault": "ברירת המחדל של האתר ($1)",
-       "timezoneuseoffset": "אחר (יש לציין את ההפרש)",
+       "timezoneuseoffset": "אחר (יש לכתוב למטה את ההפרש)",
+       "timezone-useoffset-placeholder": "ערכים לדוגמה: \"-07:00\" או \"01:00\"",
        "servertime": "השעה הנוכחית בשרת:",
        "guesstimezone": "קבלה מהדפדפן",
        "timezoneregion-africa": "אפריקה",
        "prefs-editor": "חלון העריכה",
        "prefs-preview": "תצוגה מקדימה",
        "prefs-advancedrc": "אפשרויות מתקדמות",
-       "prefs-opt-out": "ביטול שיפורים",
        "prefs-advancedrendering": "אפשרויות מתקדמות",
        "prefs-advancedsearchoptions": "אפשרויות מתקדמות",
        "prefs-advancedwatchlist": "אפשרויות מתקדמות",
        "prefs-displayrc": "אפשרויות תצוגה",
        "prefs-displaywatchlist": "אפשרויות תצוגה",
+       "prefs-changesrc": "שינויים שמוצגים",
+       "prefs-changeswatchlist": "שינויים שמוצגים",
+       "prefs-pageswatchlist": "דפים לרשימת המעקב",
        "prefs-tokenwatchlist": "אסימון",
        "prefs-diffs": "הבדלים בין גרסאות",
        "prefs-help-prefershttps": "העדפה זו תיכנס לתוקף בכניסה הבאה לחשבון.",
        "rcfilters-watchlist-markseen-button": "סימון כל השינויים כאילו נצפו",
        "rcfilters-watchlist-edit-watchlist-button": "עריכת רשימת הדפים במעקב שלך",
        "rcfilters-watchlist-showupdated": "שינויים בדפים שלא ביקרת בהם מאז ביצוע השינויים מופיעים בכתב <strong>מודגש</strong>, ומסומנים בצבע.",
-       "rcfilters-preference-label": "×\94סתרת ×\94×\92רס×\94 ×\94×\9eש×\95פרת ×©×\9c ×\94ש×\99× ×\95×\99×\99×\9d ×\94×\90×\97ר×\95× ×\99×\9d",
-       "rcfilters-preference-help": "×\91×\99×\98×\95×\9c ×©×\9c ×\94×¢×\99צ×\95×\91 ×\9e×\97×\93ש ×©×\9c ×\94×\9e×\9eשק (ש×\91×\95צע ×\91שנת 2017) ×\95ש×\9c ×\9b×\9c ×\94×\9b×\9c×\99×\9d ×©× ×\95ספ×\95 ×\90×\96 ×\95×\9e×\90×\96.",
-       "rcfilters-watchlist-preference-label": "×\94סתרת ×\94×\92רס×\94 ×\94×\9eש×\95פרת ×©×\9c ×¨×©×\99×\9eת ×\94×\9eעק×\91",
-       "rcfilters-watchlist-preference-help": "×\91×\99×\98×\95×\9c ×©×\9c ×\94×¢×\99צ×\95×\91 ×\9e×\97×\93ש ×©×\9c ×\94×\9e×\9eשק (ש×\91×\95צע ×\91שנת 2017) ×\95ש×\9c ×\9b×\9c ×\94×\9b×\9c×\99×\9d ×©× ×\95ספ×\95 ×\90×\96 ×\95×\9e×\90×\96.",
+       "rcfilters-preference-label": "ש×\99×\9e×\95ש ×\91×\9e×\9eשק ×\9c×\9c×\90 JavaScript",
+       "rcfilters-preference-help": "ש×\99×\9e×\95ש ×\91ש×\99× ×\95×\99×\99×\9d ×\94×\90×\97ר×\95× ×\99×\9d ×\91×\9c×\99 ×\9eסננ×\99×\9d ×\95×\91×\9c×\99 ×\94×\91×\9c×\98×\95ת.",
+       "rcfilters-watchlist-preference-label": "ש×\99×\9e×\95ש ×\91×\9e×\9eשק ×\9c×\9c×\90 JavaScript",
+       "rcfilters-watchlist-preference-help": "ש×\99×\9e×\95ש ×\91רש×\99×\9eת ×\94×\9eעק×\91 ×\91×\9c×\99 ×\9eסננ×\99×\9d ×\95×\91×\9c×\99 ×\94×\91×\9c×\98×\95ת.",
        "rcfilters-filter-showlinkedfrom-label": "הצגת שינויים בדפים שמקושרים מתוך",
        "rcfilters-filter-showlinkedfrom-option-label": "<strong>דפים שמקושרים מתוך</strong> הדף שנבחר",
        "rcfilters-filter-showlinkedto-label": "הצגת שינויים בדפים שמקשרים אל",
        "contribsub2": "עבור {{GENDER:$3|$1}} ($2)",
        "contributions-userdoesnotexist": "חשבון המשתמש \"$1\" אינו רשום.",
        "nocontribs": "לא נמצאו שינויים המתאימים לקריטריונים אלו.",
-       "uctop": "(נוכחי)",
+       "uctop": "נוכחי",
        "month": "עד החודש:",
        "year": "עד השנה:",
        "date": "עד התאריך:",
        "move-watch": "מעקב אחרי דף המקור ואחרי דף היעד",
        "movepagebtn": "העברת הדף",
        "pagemovedsub": "ההעברה הושלמה בהצלחה",
+       "cannotmove": "העברת הדף נכשלה, {{PLURAL:$1|מהסיבה הבאה|מהסיבות הבאות}}:",
        "movepage-moved": "<strong>הדף \"$1\" הועבר לשם \"$2\"</strong>",
        "movepage-moved-redirect": "נוצרה הפניה.",
        "movepage-moved-noredirect": "יצירת ההפניה בוטלה.",
        "allmessages-filter-modified": "הודעות ששונו",
        "allmessages-prefix": "סינון לפי קידומת:",
        "allmessages-language": "שפה:",
-       "allmessages-filter-submit": "×\94צ×\92×\94",
+       "allmessages-filter-submit": "ס×\99× ×\95×\9f",
        "allmessages-filter-translate": "תרגום",
        "thumbnail-more": "הגדלה",
        "filemissing": "קובץ חסר",
        "tags": "התגיות הקיימות לסימון שינויים",
        "tag-filter": "מסנן [[Special:Tags|תגיות]]:",
        "tag-filter-submit": "סינון",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|תגית|תגיות}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|תגית|תגיות}}]]: $2",
        "tag-mw-contentmodelchange": "שינוי מודל התוכן",
        "tag-mw-contentmodelchange-description": "עריכות ש[https://www.mediawiki.org/wiki/Special:MyLanguage/Help:ChangeContentModel משנות את מודל התוכן] של דף",
        "tag-mw-new-redirect": "הפניה חדשה",
        "dberr-again": "נסו להמתין מספר שניות ולהעלות מחדש את הדף.",
        "dberr-info": "(לא ניתן לגשת לבסיס הנתונים: $1)",
        "dberr-info-hidden": "(לא ניתן לגשת לבסיס הנתונים)",
-       "dberr-usegoogle": "באפשרותך לנסות לחפש באמצעות גוגל בינתיים.",
-       "dberr-outofdate": "שימו לב שהתוכן שלנו כפי שנשמר במאגר שם עשוי שלא להיות מעודכן.",
-       "dberr-cachederror": "זהו עותק שמור של המידע, והוא עשוי שלא להיות מעודכן.",
        "htmlform-invalid-input": "יש בעיות עם חלק מהקלט שהוכנס.",
        "htmlform-select-badoption": "הערך שציינת אינו אפשרות תקינה.",
        "htmlform-int-invalid": "הערך שציינת אינו מספר שלם.",
        "logentry-block-reblock": "$1 {{GENDER:$2|שינה|שינתה}} את הגדרות החסימה של {{GENDER:$4|$3}} עם זמן פקיעה של $5 $6",
        "logentry-partialblock-block": "$1 {{GENDER:$2|חסם|חסמה}} את {{GENDER:$4|$3}} מעריכת {{PLURAL:$8||הדפים}} $7 למשך $5 $6",
        "logentry-partialblock-reblock": "$1 {{GENDER:$2|שינה|שינתה}} את הגדרות החסימה של {{GENDER:$4|$3}} כך שימנעו עריכה של {{PLURAL:$8||הדפים}} $7 למשך $5 $6",
-       "logentry-non-editing-block-block": "$1 {{GENDER:$2|חסם|חסמה}} את {{GENDER:$4|$3}} מפעולות שאינן עריכה למשך $5 $6",
-       "logentry-non-editing-block-reblock": "$1 {{GENDER:$2|שינה|שינתה}} את הגדרות החסימה של {{GENDER:$4|$3}} עבור פעולות שאינן עריכה למשך $5 $6",
+       "logentry-non-editing-block-block": "$1 {{GENDER:$2|×\97ס×\9d\97ס×\9e×\94}} ×\90ת {{GENDER:$4|$3}} ×\9eפע×\95×\9c×\95ת ×\9eס×\95×\99×\9e×\95ת ×©×\90×\99× ×\9f ×¢×¨×\99×\9b×\94 ×\9c×\9eש×\9a $5 $6",
+       "logentry-non-editing-block-reblock": "$1 {{GENDER:$2|ש×\99× ×\94|ש×\99נת×\94}} ×\90ת ×\94×\92×\93ר×\95ת ×\94×\97ס×\99×\9e×\94 ×©×\9c {{GENDER:$4|$3}} ×¢×\91×\95ר ×¤×¢×\95×\9c×\95ת ×\9eס×\95×\99×\9e×\95ת ×©×\90×\99× ×\9f ×¢×¨×\99×\9b×\94 ×\9c×\9eש×\9a $5 $6",
        "logentry-suppress-block": "$1 {{GENDER:$2|חסם|חסמה}} את {{GENDER:$4|$3}} עם זמן פקיעה של $5 $6",
        "logentry-suppress-reblock": "$1 {{GENDER:$2|שינה|שינתה}} את הגדרות החסימה של {{GENDER:$4|$3}} עם זמן פקיעה של $5 $6",
        "logentry-import-upload": "$1 {{GENDER:$2|ייבא|ייבאה}} את הדף $3 באמצעות העלאת קובץ",
        "passwordpolicies-policy-passwordcannotmatchblacklist": "הסיסמה לא יכולה להתאים לסיסמאות מסוימות שנמצאות ברשימה השחורה",
        "passwordpolicies-policy-maximalpasswordlength": "הסיסמה חייבת להיות קצרה יותר {{PLURAL:$1|מתו אחד|מ־$1 תווים}}",
        "passwordpolicies-policy-passwordcannotbepopular": "הסיסמה לא יכולה להיות זהה {{PLURAL:$1|לסיסמה נפוצה|לאחת הסיסמאות שנמצאות ברשימה של $1 הסיסמאות הנפוצות}}",
+       "passwordpolicies-policy-passwordnotinlargeblacklist": "הסיסמה לא יכולה להיות ברשימת 100,000 הסיסמאות הנפוצות ביותר.",
        "easydeflate-invaliddeflate": "התוכן שהועבר אינו דחוס כנדרש",
        "unprotected-js": "מסיבות אבטחה, לא ניתן לטעון JavaScript מדפים שאינם מוגנים. ניתן ליצור סקריפטי JavaScript רק במרחב השם \"מדיה ויקי:\" או בדפי משנה של דף המשתמש."
 }
index 7f886b7..0488f2c 100644 (file)
        "badarticleerror": "इस पृष्ठ पर यह कार्य नहीं किया जा सकता।",
        "cannotdelete": "\"$1\" पृष्ठ या फ़ाइल को हटाया नहीं जा सकता।\nशायद किसी और ने इसे पहले ही हटा दिया हो।",
        "cannotdelete-title": "\"$1\" पृष्ठ को हटाया नहीं जा सकता",
+       "delete-scheduled": "पृष्ठ \"$1\" को हटाने के लिए अनुसूचित किया गया है।\nकृपया शान्त रहें।",
        "delete-hook-aborted": "हुक द्वारा हटाना बीच में ही छोड़ा गया।\nइसने कोई कारण नहीं बताया।",
        "no-null-revision": "\"$1\" पृष्ठ के लिए बिना बदलावों का नया अवतरण बनाने में असफल।",
        "badtitle": "खराब शीर्षक",
        "ns-specialprotected": "विशेष पृष्ठ सम्पादित नहीं किये जा सकते।",
        "titleprotected": "सदस्य [[User:$1|$1]] ने इस शीर्षक का पृष्ठ बनाने से सुरक्षित किया हुआ है।\nइसके लिये निम्न कारण दिया गया है: <em>$2</em>",
        "filereadonlyerror": "\"$1\" फ़ाइल को बदलने में असक्षम क्योंकि भण्डार \"$2\" इस समय 'केवल पाठन हेतु' (रीड ओनली) है।\n\nजिस कार्यकारी प्रबंधक ने ये प्रबंध लगाया है उन्होंने निम्न विवरण प्रदान किया है: \"$3\"।",
+       "invalidtitle": "अवैध शीर्षक",
        "invalidtitle-knownnamespace": "\"$2\" नामस्थान और \"$3\" नाम वाला गलत शीर्षक",
        "invalidtitle-unknownnamespace": "अज्ञात नामस्थान संख्या $1 और नाम \"$2\" वाला गलत शीर्षक",
        "exception-nologin": "लॉग इन नहीं किया है",
        "botpasswords-invalid-name": "जो सदस्य नाम आप बता रहे हो, उसमें बॉट पासवर्ड अलग करने वाला (\"$1\") नहीं है।",
        "botpasswords-not-exist": "सदस्य \"$1\" के आप बॉट पासवर्ड नहीं है, जिसका नाम \"$2\" है।",
        "botpasswords-needs-reset": "{{GENDER:$1|सदस्य}} ''$1'' के बॉट नाम ''$2'' का कूटशब्द रीसेट करना पड़ेगा।",
+       "botpasswords-locked": "आप बॉट पासवर्ड के साथ लॉगिन नहीं कर सकते क्योंकि आपका खाता अवरुद्ध किया गया है।",
        "resetpass_forbidden": "कूटशब्द बदले नहीं जा सकते",
        "resetpass_forbidden-reason": "पासवर्ड नहीं बदला : $1",
        "resetpass-no-info": "इस पृष्ठ का सीधे प्रयोग करने के लिए आपको लॉग इन करना होगा।",
        "subject-preview": "विषय की झलक:",
        "previewerrortext": "आपके परिवर्तनों का पूर्वावलोकन करने का प्रयास करते समय एक त्रुटि हुई।",
        "blockedtitle": "सदस्य अवरुद्ध है",
+       "blocked-email-user": "<strong>आपका सदस्यनाम ईमेल भेजने से प्रतिबन्धित किया गया है। अभी भी आप विकि पर अन्य पृष्ठों को सम्पादित कर सकते हैं।</strong> आप प्रतिबन्धित करने की पूर्ण जानकारी [[Special:MyContributions|खाता योगदान]] पर देख सकते हैं।\n\nयह प्रतिबन्ध $1 ने लगाया है।\n\nइसका दिया गया कारण <em>$2</em> है।\n\n* प्रतिबन्ध आरम्भ: $8\n* प्रतिबन्ध समाप्ति: $6\n* प्रतिबन्धी प्रयोजन: $7\n* प्रतिबन्ध पता #$5",
        "blockedtext": "<strong>आपका सदस्यनाम अथवा आइ॰पी पता अवरोधित कर दिया गया हैं ।</strong>\n\nअवरोध $1 द्वारा किया गया था।\nअवरोध का कारण है <em>$2</em>\n\n* अवरोध का आरंभ: $8\n* अवरोध की समाप्ति: $6\n* अवरोधित इकाई: $7\n\nइस अवरोध के बारे में चर्चा करने के लिए आप $1 या किसी अन्य [[{{MediaWiki:Grouppage-sysop}}|प्रबन्धक]] से संपर्क कर सकते हैं।\nअगर आपने [[Special:Preferences|अपनी वरीयताओं]] में वैध ई-मेल पता प्रविष्ट किया है तो ही आप {{int:emailuser}} सुविधा का इस्तेमाल कर सकते हैं और आपको इसका इस्तेमाल करने से नहीं रोका गया है।\nआपका मौजूदा आइ॰पी पता $3 है और अवरोध क्रमांक #$5 है।\nअपने किसी भी प्रश्न में कृपया यह सभी जानकारी भी शामिल करें।",
        "autoblockedtext": "एक और सदस्य आपके ही आइ॰पी का प्रयोग कर रहे थे और उन्हें $1 द्वारा अवरोधित कर दिया गया था। फलस्वरूप आपका आइ॰पी पता भी स्वचालित रूप से अवरोधित हो गया है।\nअवरोध करने का कारण है:\n\n:<em>$2</em>\n\n* अवरोध प्रारंभ: $8\n* अवरोध समाप्ति: $6\n* अवरोधित सदस्य: $7\n\nअवरोध की चर्चा करने के लिए आप $1 या किसी अन्य [[{{MediaWiki:Grouppage-sysop}}|प्रबंधक]] से संपर्क कर सकते हैं।\n\nकृपया ध्यान दें कि यदि आपक \"{{int:emailuser}}\" सुविधा का प्रयोग करना चाहते हैं तो आपकी [[Special:Preferences|वरीयताओं]] में वैध ई-मेल पता होना चाहिए और इसका प्रयोग आपके लिए अवरोधित नहीं होना चाहिए।\n\nआपका मौजूदा आइ॰पी पता $3 है और अवरोध क्रमांक #$5 है।\nअपने किसी भी प्रश्न में कृपया यह सभी जानकारी भी शामिल करें।",
        "systemblockedtext": "आपका यूज़र नेम या आईपी का पता स्वचालित रूप से MediaWiki द्वारा अवरुद्ध कर दिया गया है।\nकारण दिया है:\n:<em>$2</em>\n\n* ब्लॉक का प्रारंभ: $8\n* ब्लॉक की समय सीमा समाप्त: $6\n* इरादा : $7\n\nआपका वर्तमान आईपी पता $3 है।\nआप किसी भी प्रश्न में सभी जानकारी भी शामिल करें।",
        "prefs-editor": "सम्पादक",
        "prefs-preview": "पूर्वावलोकन",
        "prefs-advancedrc": "उन्नत विकल्प",
-       "prefs-opt-out": "बदलावों के बहार का विकल्प",
        "prefs-advancedrendering": "उन्नत विकल्प",
        "prefs-advancedsearchoptions": "उन्नत विकल्प",
        "prefs-advancedwatchlist": "उन्नत विकल्प",
        "prefixindex": "उपसर्ग अनुसार पृष्ठ",
        "prefixindex-namespace": "उपसर्ग वाले सभी पृष्ठ ($1 नामस्थान)",
        "prefixindex-submit": "दिखाएँ",
-       "prefixindex-strip": "सà¥\82à¤\9aà¥\80 में उपसर्ग छुपाएँ",
+       "prefixindex-strip": "परिणाम में उपसर्ग छुपाएँ",
        "shortpages": "छोटे पृष्ठ",
        "longpages": "लम्बे पृष्ठ",
        "deadendpages": "बंद सिरे पृष्ठ",
        "contribsub2": "{{GENDER:$3|$1}} ($2) के लिये",
        "contributions-userdoesnotexist": "उपयोगकर्ता खाता  \"$1\" पंजीकृत नहीं है।",
        "nocontribs": "इन कसौटियों से मिलनेवाले बदलाव मिले नहीं।",
-       "uctop": "(वर्तमान)",
+       "uctop": "वर्तमान",
        "month": "इस महिनेसे (और पुरानें):",
        "year": "इस सालसे (और पुराने):",
        "sp-contributions-newbies": "सिर्फ़ नये सदस्यों के योगदान दर्शायें",
        "tags": "वैध बदलाव चिप्पियाँ",
        "tag-filter": "[[Special:Tags|चिप्पी]] छननी:",
        "tag-filter-submit": "छननी",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|टैग}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|टैग}}]]: $2",
        "tag-mw-contentmodelchange": "सामग्री मॉडल परिवर्तन",
        "tag-mw-contentmodelchange-description": "पृष्ठ [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:ChangeContentModel सामग्री मॉडल को परिवर्तित करें] के संपादन।",
        "tag-mw-new-redirect": "नया अनुप्रेषण",
        "dberr-again": "कुछ मिनट रुकने के बाद फिर से चढ़ाएँ।",
        "dberr-info": "(डाटाबेस से संपर्क नहीं हो पा रहा: $1)",
        "dberr-info-hidden": "(डाटाबेस से संपर्क नहीं किया जा सका)",
-       "dberr-usegoogle": "इस बीच आप गूगल से खोज करने की कोशिश कर सकते हैं।",
-       "dberr-outofdate": "ध्यान दे, हो सकता है कि हमारी सामग्री से संबंधित उनकी सूची बासी हो।",
-       "dberr-cachederror": "यह अनुरोधित पन्ने की संचित प्रति है, हो सकता है यह ताज़ी न हो।",
        "htmlform-invalid-input": "आपके द्वारा प्रदत्त कुछ सामग्री में समस्याएँ हैं",
        "htmlform-select-badoption": "आपके द्वारा निर्दिष्ट मान वैध विकल्प नहीं है।",
        "htmlform-int-invalid": "आपके द्वारा निर्दिष्ट मान पूर्णांक नहीं है।",
index f6e1432..95dbc2e 100644 (file)
        "contribsub2": "{{GENDER:$3|$1}} ($2) ke khatir",
        "contributions-userdoesnotexist": "User account \"$1\" register nai karaa gais hae",
        "nocontribs": "Ii critera ke rakam ke koi badlao nai pawa gais hai.",
-       "uctop": "(abhi waala)",
+       "uctop": "abhi waala",
        "month": "Mahina se (aur pahile):",
        "year": "Saal se (aur pahile):",
        "sp-contributions-newbies": "Khaali nawaa account ke yogdaan dekhao",
        "tags": "Valid change tags",
        "tag-filter": "[[Special:Tags|Tag]] filter karo:",
        "tag-filter-submit": "Filter",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Tag|Tags}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Tag|Tags}}]]: $2",
        "tag-mw-contentmodelchange": "Content model ke badlao",
        "tag-mw-contentmodelchange-description": "Badlao, jon ki [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:ChangeContentModel change the content model] of a page",
        "tags-title": "Tags",
        "dberr-again": "Thora deri wait kar ke fir se load kare ke try karo",
        "dberr-info": "(Cannot access the database: $1)",
        "dberr-info-hidden": "(Database ke nai access kare sakaa jaawe hae)",
-       "dberr-usegoogle": "Fir haal aap Google se khoje saktaa hae",
-       "dberr-outofdate": "Note karna ki you logan jon ham logan ke contents ke index Karin hae, saait out of date hoi.",
-       "dberr-cachederror": "Ii maaga gais panna ke ek cached copy hae, aur saait up to date nai hoi.",
        "htmlform-invalid-input": "App ke kuchh input se problem hae.",
        "htmlform-select-badoption": "Jon value ke aap specify karaa hae, ek valid option nai hae.",
        "htmlform-int-invalid": "Jon value ke aap specify karaa hae, ek integer nai hae.",
index fb09e25..abf3a4c 100644 (file)
        "contributions-title": "Mga Kontribusyon sang Naga-Usar para $1",
        "mycontris": "Kontribusyon",
        "contribsub2": "Para {{GENDER:$3|$1}} ($2)",
-       "uctop": "(ibabaw)",
+       "uctop": "ibabaw",
        "month": "Halin sa bulan (kag sang timprano):",
        "year": "Halin sa tu-ig (kag sang timprano):",
        "sp-contributions-newbies": "Ipakita ang mga kontribusyon sang mga bag-o nga akawnts lamang",
index 59ede99..0abf3a2 100644 (file)
        "prefs-editor": "Uređivač",
        "prefs-preview": "Prikaži kako će izgledati",
        "prefs-advancedrc": "Napredne mogućnosti",
-       "prefs-opt-out": "Izuzimanje od poboljšanja",
        "prefs-advancedrendering": "Napredne mogućnosti",
        "prefs-advancedsearchoptions": "Napredne mogućnosti",
        "prefs-advancedwatchlist": "Napredne mogućnosti",
        "contribsub2": "Za {{GENDER:$3|$1}} ($2)",
        "contributions-userdoesnotexist": "Suradnički račun \"$1\" nije registriran.",
        "nocontribs": "Nema promjena koje udovoljavaju ovim kriterijima.",
-       "uctop": "(vrh)",
+       "uctop": "vrh",
        "month": "Od mjeseca (i ranije):",
        "year": "Od godine (i ranije):",
        "date": "Do nadnevka (i prije):",
        "tags": "Valjane oznake izmjena",
        "tag-filter": "Filtar [[Special:Tags|oznaka]]:",
        "tag-filter-submit": "Filtar",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Oznaka|Oznake|Oznaka}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Oznaka|Oznake|Oznaka}}]]: $2",
        "tag-mw-contentmodelchange": "promjena modela sadržaja",
        "tag-mw-contentmodelchange-description": "Uređivanja koja [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:ChangeContentModel mijenjanju model sadržaja] stranice",
        "tag-mw-new-redirect": "novo preusmjeravanje",
        "dberr-again": "Pričekajte nekoliko minuta i ponovno učitajte.",
        "dberr-info": "(Ne mogu pristupiti bazi podataka: $1)",
        "dberr-info-hidden": "(Ne mogu pristupiti bazi podataka)",
-       "dberr-usegoogle": "U međuvremenu pokušajte tražiti putem Googlea.",
-       "dberr-outofdate": "Imajte na umu da su njihova kazala našeg sadržaja možda zastarjela.",
-       "dberr-cachederror": "Sljedeće je dohvaćena kopija tražene stranice, te možda nije ažurirana.",
        "htmlform-invalid-input": "Postoje problemi s dijelom Vašeg unosa",
        "htmlform-select-badoption": "Vrijednost koju ste naveli nije vrijedeća mogućnost.",
        "htmlform-int-invalid": "Vrijednost koju ste naveli nije cijeli broj.",
index 13e5c8b..fb394dc 100644 (file)
        "contribsub2": "Von {{GENDER:$3|$1}} ($2)",
        "contributions-userdoesnotexist": "Das Benutzerkonto \"$1\" ist net registriert.",
        "nocontribs": "Do woard ken Benutzerbeiträche mit den Kriterie gefund.",
-       "uctop": "(aktuell)",
+       "uctop": "aktuell",
        "month": "und Monat:",
        "year": "bis Joahr (und früher):",
        "sp-contributions-newbies": "Zeich nuar Beiträche von neier Benutzer",
        "tags": "Gültiche Ännrungsmarkierunge",
        "tag-filter": "[[Special:Tags|Markierungs]]-Filter:",
        "tag-filter-submit": "Filter",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Markierung|Markierunge}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Markierung|Markierunge}}]]: $2",
        "tags-title": "Markierunge",
        "tags-intro": "Die Seit zeicht alle Markierunge, die für Beoorbeitunge verwendt worre, sowie ehre Bedeitung. \n\nBei entsprechender Einstellung könne die Missbrauchfilter beliebiche Markierung in die Versionsgeschicht setze. Man kann die Versionsgeschicht dann noh den Markierunge filtriere.",
        "tags-tag": "Markierungsnoome",
        "dberr-again": "Woort en pooh Minute und versuch dann nochmo zu loode.",
        "dberr-info": "(Kann ken Verbinnung zum Datebank-Server hearstelle: $1)",
        "dberr-info-hidden": "(Do konnt keh Verbinnung mit dem Datebankserver heargestellt sin)",
-       "dberr-usegoogle": "Du könnst in der Zwischichzeit mit Google suche.",
-       "dberr-outofdate": "Beacht, dass der Suchindex unsrer Inhalte bei Google veraltet sin kann.",
-       "dberr-cachederror": "Follichendes ist en Kopie von der Cache der oongeforderte Seit und kann veraltet sin.",
        "htmlform-invalid-input": "Do gebt es mit en orrer mehre Eingäb(e), Probleme.",
        "htmlform-select-badoption": "Der oongebne Weart ist ken gültiche Option.",
        "htmlform-int-invalid": "Der oongebne Weart ist ken Ganzzoohl.",
index 9b4f2a4..a700ae7 100644 (file)
        "contribsub2": "Za {{GENDER:$3|$1}} ($2)",
        "contributions-userdoesnotexist": "Wužiwarske konto \"$1\" njeje zregistrowane.",
        "nocontribs": "Žane změny, kotrež podatym kriterijam wotpowěduja.",
-       "uctop": "(aktualny)",
+       "uctop": "aktualny",
        "month": "wot měsaca (a do toho):",
        "year": "wot lěta (a do toho):",
        "sp-contributions-newbies": "jenož přinoški nowačkow pokazać",
        "tags": "Płaćiwe taflički změnow",
        "tag-filter": "Filter [[Special:Tags|tafličkow]]:",
        "tag-filter-submit": "Filter",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Značka|Značce|Znački}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Značka|Značce|Znački}}]]: $2",
        "tags-title": "Taflički",
        "tags-intro": "Tuta strona nalistuje taflički, z kotrymiž softwara móže změnu markěrować a jich woznam.",
        "tags-tag": "Mjeno taflički",
        "dberr-again": "Počakń někotre mjeńšiny a zaktualizuj stronu.",
        "dberr-info": "(Njeje móžno na datowu banku přistup měć: $1)",
        "dberr-info-hidden": "(Přistup na datowu banku móžno njeje)",
-       "dberr-usegoogle": "Mjeztym móžeš z pomocu Google pytać.",
-       "dberr-outofdate": "Wobkedźbuj, zo jich indeksy našeho wobsaha móhli zestarjene być.",
-       "dberr-cachederror": "Slědowaca je pufrowana kopija požadaneje strony a móhła zestarjena być.",
        "htmlform-invalid-input": "Su problemy z twojim zapodaćom",
        "htmlform-select-badoption": "Hódnota, kotruž sy zapodał, płaćiwa opcija njeje.",
        "htmlform-int-invalid": "Hódnota, kotruž sy zapodał, cyła ličba njeje.",
index 01d3006..9e0f151 100644 (file)
        "contributions-title": "Lis tout kontribisyon itilizatè ki rele $1",
        "mycontris": "Kontribisyon mwen",
        "contribsub2": "Lis kontribisyon $1 ($2).",
-       "uctop": "(tèt)",
+       "uctop": "tèt",
        "month": "depi mwa (ak mwa anvan yo) :",
        "year": "Depi lane (ak anvan tou) :",
        "sp-contributions-newbies": "Montre sèlman kontribisyon nouvo itilizatè yo",
        "version": "Vèsyon",
        "specialpages": "Paj espesyal yo",
        "tag-filter": "Filtre [[Special:Tags|Tag]]:",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Tag|Tags}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Tag|Tags}}]]: $2",
        "htmlform-reset": "Revoke chanjman yo",
        "revdelete-restricted": "aplike restriksyon sa yo pou administratè yo",
        "logentry-newusers-create": "Kont itilizatè $1 a kreye",
index 56c19b1..7f9c58e 100644 (file)
@@ -87,7 +87,7 @@
        "tog-watchlisthideminor": "Apró változtatások elrejtése",
        "tog-watchlisthideliu": "Bejelentkezett szerkesztők módosításainak elrejtése a figyelőlistáról",
        "tog-watchlistreloadautomatically": "A figyelőlista automatikus újratöltése bármelyik szűrő megváltoztatása esetén (JavaScript szükséges)",
-       "tog-watchlistunwatchlinks": "Figyelőlista elemeinek eltávolítására szolgáló közvetlen link hozzáadása (JavaScript szükséges)",
+       "tog-watchlistunwatchlinks": "Figyelőlista elemeinek eltávolítására szolgáló közvetlen link ({{int:Watchlist-unwatch}}/{{int:Watchlist-unwatch-undo}}) hozzáadása (JavaScript szükséges)",
        "tog-watchlisthideanons": "Névtelen szerkesztések elrejtése",
        "tog-watchlisthidepatrolled": "Az ellenőrzött szerkesztések elrejtése",
        "tog-watchlisthidecategorization": "Lapok kategorizálásának elrejtése",
        "passwordtooshort": "A jelszónak legalább $1 karakterből kell állnia.",
        "passwordtoolong": "A jelszó nem lehet hosszabb $1 karakternél.",
        "passwordtoopopular": "A gyakran használt jelszavak nem használhatók. Válassz olyan jelszót, amit nehezebb kitalálni.",
+       "passwordinlargeblacklist": "A megadott jelszó szerepel a gyakran használt jelszavak listáján. Kérlek, válassz egyedibb jelszót.",
        "password-name-match": "A jelszavadnak különböznie kell a szerkesztőnevedtől.",
        "password-login-forbidden": "Ezen felhasználónév és jelszó használata tiltott.",
        "mailmypassword": "Jelszó alaphelyzetbe állítása",
        "subject-preview": "Tárgy előnézete:",
        "previewerrortext": "Hiba történt a változások előnézetének megjelenítése során.",
        "blockedtitle": "A szerkesztő blokkolva van",
+       "blocked-email-user": "<strong>Szerkesztőneved számára az e-mail küldési lehetőséget blokkoltuk. Továbbra is szerkeszthetsz egyéb lapokat.</strong> A blokkolás további részleteit a [[Special:MyContributions|fiók közreműködéseinél]] találod.\n\nA blokkolást $1 hajtotta végre.\n\nAz általa megadott indok: <em>$2.</em>\n\n* A blokk kezdete: $8\n* A blokk lejárata: $6\n* Blokkolt szerkesztő: $7\n* A blokkolás azonosítószáma: $5",
+       "blockedtext-partial": "<strong>Szerkesztőneved vagy IP-címed számára az oldal szerkesztését blokkoltuk. Továbbra is szerkeszthetsz egyéb lapokat.</strong> A blokkolás további részleteit a [[Special:MyContributions|fiók közreműködéseinél]] találod.\n\nA blokkolást $1 hajtotta végre.\n\nAz általa megadott indok: <em>$2.</em>\n\n* A blokk kezdete: $8\n* A blokk lejárata: $6\n* Blokkolt szerkesztő: $7\n* A blokkolás azonosítószáma: $5",
        "blockedtext": "<strong>A szerkesztőnevedet vagy az IP-címedet blokkoltuk.</strong>\n\nA blokkolást $1 végezte el.\nAz általa felhozott indok: <em>$2.</em>\n\n* A blokk kezdete: $8\n* A blokk lejárata: $6\n* Blokkolt szerkesztő: $7\n\nKapcsolatba léphetsz $1 szerkesztőnkkel vagy egy másik [[{{MediaWiki:Grouppage-sysop}}|adminisztrátorral]], és megbeszélheted vele a blokkolást.\nAz „{{int:emailuser}}” funkciót csak akkor használhatod, ha érvényes e-mail-címet adtál meg [[Special:Preferences|fiókbeállításaidban]], és nem blokkolták a használatát.\nJelenlegi IP-címed: $3, a blokkolás azonosítószáma: #$5.\nKérjük, hogy érdeklődés esetén minden fenti részletet adj meg.",
        "autoblockedtext": "Az IP-címed automatikusan blokkolva lett, mert korábban egy olyan szerkesztő használta, akit $1 blokkolt, az alábbi indoklással:\n\n:''$2''\n\n*A blokk kezdete: '''$8'''\n*A blokk lejárata: '''$6'''\n*Blokkolt szerkesztő: '''$7'''\n\nKapcsolatba léphetsz $1 szerkesztőnkkel, vagy egy másik [[{{MediaWiki:Grouppage-sysop}}|adminisztrátorral]], és megbeszélheted vele a blokkolást.\n\nAz „{{int:emailuser}}” funkciót csak akkor használhatod, ha érvényes e-mail címet adtál meg\n[[Special:Preferences|fiókbeállításaidban]], és nem blokkolták a használatát.\n\nJelenlegi IP-címed: $3, a blokkolás azonosítószáma: #$5.\nKérjük, hogy érdeklődés esetén mindkettőt add meg.",
        "systemblockedtext": "A felhasználónevedet vagy IP-címedet automatikusan blokkolta a MediaWiki.\nA blokkolás indoka:\n\n:<em>$2</em>\n\n* A blokk kezdete: $8\n* A blokk lejárata: $6\n* Blokkolt szerkesztő: $7\n\nA jelenlegi IP-címed: $3.\nKérjük, hogy érdeklődés esetén minden fenti részletet adj meg.",
        "converter-manual-rule-error": "Hiba van a kézi nyelvi konverziós szabályban",
        "undo-success": "A szerkesztés visszavonható. Kérlek ellenőrizd alább a változásokat, hogy valóban ezt szeretnéd-e tenni, majd kattints a lap mentése gombra a visszavonás véglegesítéséhez.",
        "undo-failure": "A szerkesztést nem lehet automatikusan visszavonni vele ütköző későbbi szerkesztések miatt.",
+       "undo-main-slot-only": "A szerkesztést nem lehet automatikusan visszavonni, mert érinti a tartalom más részét is.",
        "undo-norev": "A szerkesztés nem állítható vissza, mert nem létezik vagy törölve lett.",
        "undo-nochange": "A szerkesztés már vissza lett állítva.",
        "undo-summary": "Visszavontam [[Special:Contributions/$2|$2]] ([[User talk:$2|vita]]) szerkesztését (oldid: $1)",
        "recentchangescount": "Az alapértelmezettként mutatott szerkesztések száma a friss változtatásoknál, laptörténetekben és naplókban:",
        "prefs-help-recentchangescount": "Legfeljebb 1000",
        "prefs-help-watchlist-token2": "Ez a titkos kulcs a figyelőlistádhoz.\nAki ismeri, meg tudja nézni, milyen lapokat figyelsz, úgyhogy ne oszd meg másokkal.\nHa meg szeretnéd változtatni, [[Special:ResetTokens|kattints ide]].",
+       "prefs-help-tokenmanagement": "Megtekintheted és új titkos kulcsot generálhatsz, amivel a webes feedek hozzáférhetnek a figyelőlistádhoz. Bárki, aki ismeri ezt a kulcsot képes olvasni a figyelőlistád tartalmát, ezért ne oszd meg mással.",
        "savedprefs": "Az új beállításaid érvénybe léptek.",
        "savedrights": "{{GENDER:$1|$1}} felhasználói csoportjai el lettek mentve.",
        "timezonelegend": "Időzóna:",
        "localtime": "Helyi idő:",
        "timezoneuseserverdefault": "Az alapértelmezett beállítás használata ($1)",
        "timezoneuseoffset": "Egyéb (eltérés megadása)",
+       "timezone-useoffset-placeholder": "Példaértékek: „-07:00” vagy „01:00”",
        "servertime": "A kiszolgáló ideje:",
        "guesstimezone": "Töltse ki a böngésző",
        "timezoneregion-africa": "Afrika",
        "prefs-editor": "Szerkesztő",
        "prefs-preview": "Előnézet",
        "prefs-advancedrc": "Haladó beállítások",
-       "prefs-opt-out": "Fejlesztések kikapcsolása",
        "prefs-advancedrendering": "Haladó beállítások",
        "prefs-advancedsearchoptions": "Haladó beállítások",
        "prefs-advancedwatchlist": "Haladó beállítások",
        "prefs-displayrc": "Megjelenítési beállítások",
        "prefs-displaywatchlist": "Megjelenítési beállítások",
+       "prefs-changesrc": "Megjelenítendő változtatások",
+       "prefs-changeswatchlist": "Megjelenítendő változtatások",
+       "prefs-pageswatchlist": "Figyelt lapok",
        "prefs-tokenwatchlist": "Token",
        "prefs-diffs": "Eltérések (diffek)",
        "prefs-help-prefershttps": "A beállítás a legközelebbi belépés után lép érvénybe.",
        "rcfilters-filter-humans-label": "Ember (nem bot)",
        "rcfilters-filter-humans-description": "Emberi szerkesztők szerkesztései",
        "rcfilters-filtergroup-reviewstatus": "Felülvizsgálati státusz",
+       "rcfilters-filter-reviewstatus-unpatrolled-description": "Olyan szerkesztések, amelyek nem lettek kézzel vagy automatikusan ellenőrzöttnek jelölve.",
        "rcfilters-filter-reviewstatus-unpatrolled-label": "Ellenőrizetlen",
        "rcfilters-filter-reviewstatus-manual-description": "Járőrök által ellenőrzött szerkesztések",
        "rcfilters-filter-reviewstatus-manual-label": "Járőrök által ellenőrzött",
        "rcfilters-watchlist-markseen-button": "Összes változtatás megjelölése olvasottként",
        "rcfilters-watchlist-edit-watchlist-button": "A figyelőlistád szerkesztése",
        "rcfilters-watchlist-showupdated": "Az újabb változtatások, amiket még nem néztél meg, <strong>vastagítva</strong> láthatók, kitöltött jelzőkkel.",
-       "rcfilters-preference-label": "A friss változtatások fejlesztett változatának elrejtése",
-       "rcfilters-preference-help": "A 2017-es felületátdolgozás és minden azóta hozzáadott eszköz visszaállítása.",
-       "rcfilters-watchlist-preference-label": "A Figyelőlista fejlesztett változatának elrejtése",
-       "rcfilters-watchlist-preference-help": "A 2017-es felületátdolgozás és minden azóta hozzáadott eszköz visszaállítása.",
+       "rcfilters-preference-label": "JavaScript-nélküli felület használata",
+       "rcfilters-preference-help": "Friss változtatások betöltése szűrők és kiemelések nélkül.",
+       "rcfilters-watchlist-preference-label": "JavaScript-nélküli felület használata",
+       "rcfilters-watchlist-preference-help": "Friss változtatások betöltése szűrők és kiemelések nélkül.",
        "rcfilters-filter-showlinkedfrom-label": "A következő lapra hivatkozó lapok változtatásainak megjelenítése",
        "rcfilters-filter-showlinkedfrom-option-label": "A kiválasztott <strong>lapról</strong> hivatkozott lapok",
        "rcfilters-filter-showlinkedto-label": "A következő lapról hivatkozott lapok változtatásainak megjelenítése",
        "contribsub2": "$1 ($2)",
        "contributions-userdoesnotexist": "Nincs regisztrálva „$1” szerkesztői azonosító.",
        "nocontribs": "Nem található a feltételeknek megfelelő változtatás.",
-       "uctop": "(aktuális)",
+       "uctop": "aktuális",
        "month": "E hónap végéig:",
        "year": "Eddig az évig:",
        "date": "Eddig a dátumig:",
        "ipb-disableusertalk": "Megakadályozza, hogy a felhasználó szerkeszthesse a saját vitalapját, miközben blokkolva van",
        "ipb-change-block": "Blokk beállításainak megváltoztatása",
        "ipb-confirm": "Blokk megerősítése",
+       "ipb-sitewide": "Teljes körű",
+       "ipb-partial": "Részleges",
+       "ipb-type-label": "Típus",
+       "ipb-pages-label": "Lapok",
        "badipaddress": "Érvénytelen IP-cím",
        "blockipsuccesssub": "Sikeres blokkolás",
        "blockipsuccesstext": "„[[Special:Contributions/$1|$1]]” felhasználót blokkoltad.\n<br />Lásd a [[Special:BlockList|blokkolt IP-címek listáját]] az érvényben lévő blokkok áttekintéséhez.",
        "createaccountblock": "új felhasználó létrehozása blokkolva",
        "emailblock": "e-mail-cím blokkolva",
        "blocklist-nousertalk": "nem szerkesztheti a vitalapját",
+       "blocklist-editing": "szerkesztés",
+       "blocklist-editing-sitewide": "szerkesztés (teljes körű)",
        "ipblocklist-empty": "A blokkoltak listája üres.",
        "ipblocklist-no-results": "A kért IP-cím vagy felhasználónév nem blokkolt.",
        "blocklink": "blokkolás",
        "move-watch": "Figyeld a lapot",
        "movepagebtn": "Lap átnevezése",
        "pagemovedsub": "Az átnevezés sikerült",
+       "cannotmove": "A lapot nem sikerült átnevezni a következő {{PLURAL:$1|ok|okok}} miatt:",
        "movepage-moved": "'''„$1” átnevezve „$2” névre'''",
        "movepage-moved-redirect": "Átirányítás létrehozva.",
        "movepage-moved-noredirect": "A régi címről nem készült átirányítás.",
+       "movepage-delete-first": "A céloldal túl sok változattal rendelkezik ahhoz, ezért az átnevezés részeként nem törölhető. Kérlek, előbb töröld a lapot kézzel, aztán próbáld újra.",
        "articleexists": "Ilyen névvel már létezik lap, vagy az általad választott név érvénytelen.\nKérlek, válassz egy másik nevet.",
        "cantmove-titleprotected": "Nem nevezheted át a lapot, mert az új cím le van védve a létrehozás ellen.",
        "movetalk": "Nevezd át a vitalapot is, ha lehetséges",
        "confirm-mcrundo-title": "Egy változtatás visszavonva",
        "mcrundofailed": "A visszavonás nem sikerült",
        "mcrundo-missingparam": "Kötelező paraméterek hiányoznak a kérésből.",
+       "mcrundo-changed": "A változtatások megtekintése óta az oldal megváltozott. Kérlek, tekintsd meg az új változtatásokat.",
        "ellipsis": "…",
        "quotation-marks": "„$1”",
        "imgmultipageprev": "← előző oldal",
        "tags": "Lapváltozat-címkék",
        "tag-filter": "[[Special:Tags|Címkeszűrő]]:",
        "tag-filter-submit": "Szűrő",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Címke|Címkék}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Címke|Címkék}}]]: $2",
        "tag-mw-contentmodelchange": "tartalommodell-változtatás",
        "tag-mw-contentmodelchange-description": "Szerkesztések, amelyek [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:ChangeContentModel megváltoztatják egy lap tartalommodelljét].",
        "tag-mw-new-redirect": "Új átirányítás",
        "dberr-again": "Várj néhány percet, majd frissítsd az oldalt.",
        "dberr-info": "(Nem sikerült kapcsolódni az adatbázishoz: $1)",
        "dberr-info-hidden": "(Nem sikerült kapcsolódni az adatbázishoz)",
-       "dberr-usegoogle": "A probléma elmúlásáig próbálhatsz keresni a Google-lel.",
-       "dberr-outofdate": "Fontos tudnivaló, hogy az oldal tartalmáról készített indexeik elavultak lehetnek.",
-       "dberr-cachederror": "Lenn a kért oldal gyorsítótárazott változata látható, és lehet, hogy nem teljesen friss.",
        "htmlform-invalid-input": "Probléma van az általad megadott értékkel",
        "htmlform-select-badoption": "A megadott érték nem érvényes.",
        "htmlform-int-invalid": "A megadott érték nem szám.",
        "logentry-block-block": "$1 {{GENDER:$2|blokkolta}} „{{GENDER:$4|$3}}”-t $5 időtartamra $6",
        "logentry-block-unblock": "$1 {{GENDER:$2|feloldotta}} {{GENDER:$4|$3}} blokkolását",
        "logentry-block-reblock": "$1 {{GENDER:$2|módosította}} a blokk beállításokat „{{GENDER:$4|$3}}” szerkesztőnél $5 időtartamra $6",
+       "logentry-partialblock-block": "$1 {{GENDER:$2|blokkolta}} „{{GENDER:$4|$3}}”-t $5 időtartamra $6 a következő {{PLURAL:$8|lap|lapok}} szerkesztésétől: $7",
+       "logentry-partialblock-reblock": "$1 {{GENDER:$2|módosította}} a(z) $7 {{PLURAL:$8|lap|lapok}} szerkesztését megakadályozó blokk beállítását „{{GENDER:$4|$3}}” szerkesztőnél $5 időtartamra $6",
+       "logentry-non-editing-block-block": "$1 {{GENDER:$2|blokkolta}} „{{GENDER:$4|$3}}”-t nem-szerkesztési műveletektől $5 időtartamra $6",
+       "logentry-non-editing-block-reblock": "$1 {{GENDER:$2|módosította}} a nem-szerkesztési műveletekre vonatkozó blokk beállításait „{{GENDER:$4|$3}}” szerkesztőnél $5 időtartamra $6",
        "logentry-suppress-block": "$1 {{GENDER:$2|blokkolta}} „{{GENDER:$4|$3}}”-t $5 időtartamra $6",
        "logentry-suppress-reblock": "$1 {{GENDER:$2|módosította}} a blokk beállításokat „{{GENDER:$4|$3}}” szerkesztőnél $5 időtartamra $6",
        "logentry-import-upload": "$1 {{GENDER:$2|importálta}} $3 lapot fájl feltöltéssel",
        "special-characters-title-endash": "kötőjel",
        "special-characters-title-emdash": "hosszú kötőjel",
        "special-characters-title-minus": "minusz jel",
-       "mw-widgets-abandonedit": "Biztosan el szeretnéd hagyni a szerkesztés módot mentés nélkül?",
+       "mw-widgets-abandonedit": "Biztosan el szeretnéd hagyni a szerkesztési módot mentés nélkül?",
        "mw-widgets-abandonedit-discard": "Változtatások elvetése",
        "mw-widgets-abandonedit-keep": "Szerkesztés folytatása",
        "mw-widgets-abandonedit-title": "Biztos vagy benne?",
        "passwordpolicies-policy-passwordcannotmatchblacklist": "A jelszó nem lehet azonos a feketelistán szereplő jelszavakkal.",
        "passwordpolicies-policy-maximalpasswordlength": "A jelszó legfeljebb $1 karakter hosszú lehet",
        "passwordpolicies-policy-passwordcannotbepopular": "A jelszó nem {{PLURAL:$1|lehet a gyakran használt jelszó|szerepelhet a(z) $1 leggyakrabban használt jelszó listáján}}",
+       "passwordpolicies-policy-passwordnotinlargeblacklist": "A jelszó nem szerepelhet a 100 000 leggyakrabban használt jelszó listáján .",
        "unprotected-js": "Biztonsági okokból JavaScript nem tölthető be védtelen lapokról. Kérlek egyedül a MediaWiki névtérben készíts JavaScriptet, vagy szerkesztői allapként."
 }
index 1808851..bdad332 100644 (file)
        "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» Õ¡Õ¶Õ¾Õ¡Õ¶Õ´Õ¡Õ´Õ¢ Õ£Ö\80Õ¡Õ¶Ö\81Õ¾Õ¡Õ® Õ´Õ¡Õ½Õ¶Õ¡Õ¯Õ«Ö\81 Õ¹Õ¯Õ¡Ö\89",
+       "userpage-userdoesnotexist-view": "«$1» անվամբ գրանցված մասնակից չկա։",
        "blocked-notice-logextract": "Այս մասնակիցը ներկա պահին արգելափակված է։\nՍտորև ներկայացված է արգելափակման տեղեկամատյանի վերջին գրառումը.",
        "clearyourcache": "'''Ծանուցում. Հիշելուց հետո կատարված փոփոխությունները տեսնելու համար մաքրեք ձեր զննարկիչի հիշապահեստը. '''\n'''Mozilla / Firefox / Safari'''՝ ''Ctrl+Shift+R''  (''Cmd+Shift+R'' Mac OS X-ում)\n'''Konqueror'''՝ ''F5''\n'''Opera'''՝ ''Tools→Preferences'' ընտրացանկից։\n'''Internet Explorer'''՝ ''Ctrl+F5''",
        "usercssyoucanpreview": "'''Հուշում.''' Էջը հիշելուց առաջ օգտվեք «{{int:showpreview}}» կոճակից՝ ձեր նոր CSS-նիշքը ստուգելու համար։",
        "prefs-signature": "Ստորագրություն",
        "prefs-dateformat": "Ամսաթվի ձևաչափ",
        "prefs-timeoffset": "Ժամային տարբերություն",
-       "prefs-advancedediting": "Ընդլայնված ընրանքներ",
+       "prefs-advancedediting": "Ընդլայնված ընտրանքներ",
        "prefs-editor": "Խմբագիր",
        "prefs-preview": "Նախադիտել",
-       "prefs-advancedrc": "Ընդլայնված ընրանքներ",
-       "prefs-advancedrendering": "Ընդլայնված ընրանքներ",
-       "prefs-advancedsearchoptions": "Ընդլայնված ընրանքներ",
-       "prefs-advancedwatchlist": "Ընդլայնված ընրանքներ",
+       "prefs-advancedrc": "Ընդլայնված ընտրանքներ",
+       "prefs-advancedrendering": "Ընդլայնված ընտրանքներ",
+       "prefs-advancedsearchoptions": "Ընդլայնված ընտրանքներ",
+       "prefs-advancedwatchlist": "Ընդլայնված ընտրանքներ",
        "prefs-displayrc": "Ցուցադրման ընտրանքներ",
        "prefs-displaywatchlist": "Ցուցադրման ընտրանքներ",
        "prefs-diffs": "Տարբերություններ",
        "license-nopreview": "(Նախադիտումը մատչելի չէ)",
        "upload_source_url": " (գործուն, հանրամատչելի URL-հասցե)",
        "upload_source_file": " (նիշք ձեր համակարգչի վրա)",
-       "listfiles_search_for": "Õ\88Ö\80Õ¸Õ¶Õ¥Õ¬ ÕºÕ¡Õ¿Õ¯Õ¥Ö\80Õ« Õ¡Õ¶Õ¾Õ¡Õ¶Õ´Õ¡Õ´Õ¢.",
+       "listfiles_search_for": "Որոնել պատկերի անվամբ.",
        "imgfile": "նիշք",
        "listfiles": "Նիշքերի ցանկ",
        "listfiles_date": "Օր/Ժամ",
        "statistics-edits-average": "Էջի խմբագրումների միջին թիվը",
        "statistics-users": "Գրանցված մասնակիցներ",
        "statistics-users-active": "Ակտիվ մասնակիցներ",
-       "statistics-users-active-desc": "Õ\8eÕ¥Ö\80Õ»Õ«Õ¶ {{PLURAL:$1|Ö\85Ö\80|$1 Ö\85Ö\80}}Õ¸Ö\82Õ´ Õ¸Ö\80Ö\87Õ§ Õ£Õ¸Ö\80Õ®Õ¸Õ²Õ¸Ö\82Õ©ÕµÕ¸Ö\82Õ¶ Õ¥Õ¶ Õ¯Õ¡Õ¿Õ¡Ö\80Õ¡Õ® Õ´Õ¡Õ½Õ¶Õ¡Õ¯Õ«Ö\81Õ¶Õ¥Ö\80",
+       "statistics-users-active-desc": "Վերջին {{PLURAL:$1|օր|$1 օր}}ում որևէ գործողություն կատարած մասնակիցներ",
        "pageswithprop-submit": "Անցնել",
        "doubleredirects": "Կրկնակի վերահղումներ",
        "doubleredirectstext": "Այս էջում բերված են վերահղման էջերին վերահղող էջերը։ Յուրաքանչյուր տող պարունակում է հղումներ դեպի առաջին և երկրորդ վերահղումները, ինչպես նաև երկրորդ վերահղման նպատակային էջի առաջին տողը, որում սովորաբար նշված է էջի անվանումը, որին պետք է հղի նաև առաջին վերահղումը։",
        "anoncontribs": "Ներդրումներ",
        "contribsub2": "{{GENDER:$3|$1}}-ի ներդրումները ($2)",
        "nocontribs": "Այս չափանիշներին համապատասխանող փոփոխություններ չեն գտնվել։",
-       "uctop": " (վերջինը)",
+       "uctop": " վերջինը",
        "month": "Սկսած ամսից (և վաղ)՝",
        "year": "Սկսած տարեթվից (և վաղ)՝",
        "sp-contributions-newbies": "Ցույց տալ միայն նորաստեղծ հաշիվներից կատարված ներդրումները",
        "intentionallyblankpage": "Այս էջը միտումնավոր դատարկ է թողված։",
        "tag-filter": "[[Special:Tags|Պիտակների]] զտիչ՝",
        "tag-filter-submit": "Ֆիլտրել",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Պիտակ}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Պիտակ}}]]: $2",
        "tags-title": "Պիտակներ",
        "tags-source-header": "Աղբյուր",
        "tags-actions-header": "Գործողություններ",
index 066ca61..e395c46 100644 (file)
        "anoncontribs": "Ներդրումներ",
        "contribsub2": "{{GENDER:$3|$1}}ի ներդրումները ($2)",
        "nocontribs": "Այս չափանիշներուն համապատասխանող փոփոխութիւններ չգտնուեցան։",
-       "uctop": "(ընթացիկ)",
+       "uctop": "ընթացիկ",
        "month": "Սկսած ամիսէն (եւ աւելի վաղ)՝",
        "year": "Սկսեալ տարիէն (եւ աւելի վաղ)՝",
        "sp-contributions-newbies": "Ցոյց տալ միայն նոր հաշիւներէ եղած ներդրումները",
        "redirect-file": "Նիշքի անունը",
        "specialpages": "Յատուկ էջեր",
        "tag-filter": "[[Special:Tags|Պիտակներու]] զտիչ՝",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Պիտակ}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Պիտակ}}]]: $2",
        "tags-active-yes": "Այո",
        "tags-active-no": "Ոչ",
        "tags-hitcount": "{{PLURAL:$1|փոփոխութիւն}}",
index 4b79e2e..2205e10 100644 (file)
        "timezonelegend": "Fuso horari:",
        "localtime": "Hora local:",
        "timezoneuseserverdefault": "Usar le valor predefinite del wiki ($1)",
-       "timezoneuseoffset": "Altere (specifica le differentia)",
+       "timezoneuseoffset": "Altere (specifica le differentia hic infra)",
+       "timezone-useoffset-placeholder": "Exemplo de valores: \"-07:00\" or \"01:00\"",
        "servertime": "Hora del servitor:",
        "guesstimezone": "Obtener del navigator",
        "timezoneregion-africa": "Africa",
        "prefs-editor": "Editor",
        "prefs-preview": "Previsualisation",
        "prefs-advancedrc": "Optiones avantiate",
-       "prefs-opt-out": "Non incorporar meliorationes",
        "prefs-advancedrendering": "Optiones avantiate",
        "prefs-advancedsearchoptions": "Optiones avantiate",
        "prefs-advancedwatchlist": "Optiones avantiate",
        "prefs-displayrc": "Optiones de presentation",
        "prefs-displaywatchlist": "Optiones de presentation",
+       "prefs-changesrc": "Modificationes a monstrar",
+       "prefs-changeswatchlist": "Modificationes a monstrar",
+       "prefs-pageswatchlist": "Paginas a observar",
        "prefs-tokenwatchlist": "Indicio",
        "prefs-diffs": "Differentias",
        "prefs-help-prefershttps": "Iste preferentia habera effecto a partir de tu proxime session.",
        "rcfilters-watchlist-markseen-button": "Marcar tote le modificationes como vidite",
        "rcfilters-watchlist-edit-watchlist-button": "Modificar tu lista de paginas sub observation",
        "rcfilters-watchlist-showupdated": "Le modificationes del paginas que tu non ha visitate post que illos ha essite apportate se monstra in <strong>grasse</strong>, con marcatores solide.",
-       "rcfilters-preference-label": "Celar le version meliorate del Modificationes recente",
-       "rcfilters-preference-help": "Disface le nove interfacie de 2017 e tote le instrumentos addite alora e posta.",
-       "rcfilters-watchlist-preference-label": "Celar le version meliorate del observatorio",
-       "rcfilters-watchlist-preference-help": "Disface le redesigno del interfacie de 2017 e tote le instrumentos addite desde alora.",
+       "rcfilters-preference-label": "Usar le interfacie non JavaScript",
+       "rcfilters-preference-help": "Carga le modificationes recente sin filtros e sin coloration.",
+       "rcfilters-watchlist-preference-label": "Usar le interfacie non JavaScript",
+       "rcfilters-watchlist-preference-help": "Carga le observatorio sin filtros e sin coloration.",
        "rcfilters-filter-showlinkedfrom-label": "Monstrar modificationes sur paginas ligate ab",
        "rcfilters-filter-showlinkedfrom-option-label": "<strong>Paginas ligate ab</strong> le pagina seligite",
        "rcfilters-filter-showlinkedto-label": "Monstrar modificationes sur paginas que liga a",
        "contribsub2": "Pro {{GENDER:$3|$1}} ($2)",
        "contributions-userdoesnotexist": "Le conto de usator \"$1\" non es registrate.",
        "nocontribs": "Nulle modification correspondente a iste criterios ha essite trovate.",
-       "uctop": "(ultime)",
+       "uctop": "ultime",
        "month": "A partir del mense (e anterior):",
        "year": "A partir del anno (e anterior):",
        "date": "A partir del data (e anterior):",
        "tags": "Etiquettas valide de modification",
        "tag-filter": "Filtro de [[Special:Tags|etiquettas]]:",
        "tag-filter-submit": "Filtrar",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Etiquetta|Etiquettas}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Etiquetta|Etiquettas}}]]: $2",
        "tag-mw-contentmodelchange": "cambiamento de modello de contento",
        "tag-mw-contentmodelchange-description": "Modificationes que [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:ChangeContentModel cambia le modello de contento] de un pagina",
        "tag-mw-new-redirect": "Nove redirection",
        "dberr-again": "Proba attender alcun minutas e recargar.",
        "dberr-info": "(Non pote acceder al base de datos: $1)",
        "dberr-info-hidden": "(Non pote acceder al base de datos)",
-       "dberr-usegoogle": "Tu pote probar cercar con Google intertanto.",
-       "dberr-outofdate": "Nota que lor indices de nostre contento pote esser obsolete.",
-       "dberr-cachederror": "Lo sequente es un copia del cache del pagina requestate, e pote esser obsolete.",
        "htmlform-invalid-input": "Il ha problemas con un parte del datos que tu ha entrate",
        "htmlform-select-badoption": "Le valor que tu specificava non es un option valide.",
        "htmlform-int-invalid": "Le valor que tu specificava non es un numero integre.",
        "logentry-block-unblock": "$1 {{GENDER:$2|disblocava}} {{GENDER:$4|$3}}",
        "logentry-block-reblock": "$1 {{GENDER:$2|cambiava}} le configuration del blocada de {{GENDER:$4|$3}} con un tempore de expiration de $5 $6",
        "logentry-partialblock-block": "$1 {{GENDER:$2|blocava}} {{GENDER:$4|$3}} pro modificar {{PLURAL:$8||le paginas}} $7 con un tempore de expiration de $5 $6",
+       "logentry-partialblock-reblock": "$1 {{GENDER:$2|cambiava}} le configuration del blocada de {{GENDER:$4|$3}} impediente le modification {{PLURAL:$8|de|del paginas}} $7 con un tempore de expiration de $5 $6",
+       "logentry-non-editing-block-block": "$1 {{GENDER:$2|blocava}} {{GENDER:$4|$3}} pro certe actiones non-modification con un tempore de expiration de $5 $6",
+       "logentry-non-editing-block-reblock": "$1 {{GENDER:$2|cambiava}} le configuration del blocada de {{GENDER:$4|$3}} pro certe actiones non-modification con un tempore de expiration de $5 $6",
        "logentry-suppress-block": "$1 {{GENDER:$2|blocava}} {{GENDER:$4|$3}} con un tempore de expiration de $5 $6",
        "logentry-suppress-reblock": "$1 {{GENDER:$2|cambiava}} le configuration del blocada de {{GENDER:$4|$3}} con un tempore de expiration de $5 $6",
        "logentry-import-upload": "$1 {{GENDER:$2|importava}} $3 per incargamento de file",
        "mw-widgets-abandonedit": "Es tu secur de voler quitar le modo de modification sin salveguardar primo?",
        "mw-widgets-abandonedit-discard": "Abandonar modificationes",
        "mw-widgets-abandonedit-keep": "Continuar a modificar",
+       "mw-widgets-abandonedit-title": "Es tu secur?",
        "mw-widgets-dateinput-no-date": "Nulle data seligite",
        "mw-widgets-dateinput-placeholder-day": "AAAA-MM-DD",
        "mw-widgets-dateinput-placeholder-month": "AAAA-MM",
        "mw-widgets-titleinput-description-redirect": "redirection a $1",
        "mw-widgets-categoryselector-add-category-placeholder": "Adder un categoria…",
        "mw-widgets-usersmultiselect-placeholder": "Adder plus...",
+       "mw-widgets-titlesmultiselect-placeholder": "Adder plus...",
        "date-range-from": "A partir del:",
        "date-range-to": "Usque al:",
        "sessionmanager-tie": "Impossibile combinar plure typos de authentication de requesta: $1.",
index 1614925..786339e 100644 (file)
        "prefs-editor": "Penyunting",
        "prefs-preview": "Pratayang",
        "prefs-advancedrc": "Opsi lanjutan",
-       "prefs-opt-out": "Memilih keluar dari perbaikan",
        "prefs-advancedrendering": "Opsi lanjutan",
        "prefs-advancedsearchoptions": "Opsi lanjutan",
        "prefs-advancedwatchlist": "Opsi lanjutan",
        "rcfilters-preference-help": "Kembalikan perubahan antarmuka 2017 dan semua peralatan yang ditambahkan sejak saat itu.",
        "rcfilters-watchlist-preference-label": "Sembunyikan versi yang telah dikembangkan dari Daftar pantauan",
        "rcfilters-filter-showlinkedfrom-label": "Tampilkan perubahan pada halaman yang ditautkan dari",
-       "rcfilters-target-page-placeholder": "Masukkan nama halaman",
+       "rcfilters-target-page-placeholder": "Masukkan nama halaman (atau kategori)",
        "rcnotefrom": "Di bawah ini adalah {{PLURAL:$5|perubahan}} sejak <strong>$3, $4</strong> (ditampilkan sampai <strong>$1</strong> perubahan).",
        "rclistfromreset": "Atur ulang pilihan tanggal",
        "rclistfrom": "Perlihatkan perubahan terbaru sejak $3 $2",
        "lockmanager-fail-closelock": "Tidak dapat menutup penguncian berkas untuk \"$1\".",
        "lockmanager-fail-deletelock": "Tidak dapat menghapus penguncian berkas untuk \"$1\".",
        "lockmanager-fail-acquirelock": "Tidak dapat mendapatkan penguncian untuk \"$1\"",
-       "lockmanager-fail-openlock": "Tidak dapat membuka penguncian berkas untuk \"$1\".",
+       "lockmanager-fail-openlock": "Tidak dapat membuka penguncian berkas untuk \"$1\". Pastikan direktori pengunggahan Anda telah dikonfigurasi dengan benar dan peladen web Anda memiliki izin untuk menulis di direktori tersebut. Lihat https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgUploadDirectory untuk informasi lebih lanjut.",
        "lockmanager-fail-releaselock": "Tidak dapat melepaskan penguncian untuk \"$1\"",
        "lockmanager-fail-db-bucket": "Tidak bisa menghubungi database kunci yang mencukupi dalam ember $1.",
        "lockmanager-fail-db-release": "Tidak dapat melepaskan penguncian pada basis data $1.",
        "uploadstash-zero-length": "Berkas ini berukuran nihil.",
        "invalid-chunk-offset": "Ofset potongan tidak valid",
        "img-auth-accessdenied": "Akses ditolak",
-       "img-auth-nopathinfo": "PATH_INFO hilang.\nServer Anda tidak diatur untuk melewatkan informasi ini.\nServer tersebut mungkin berbasis CGI dan tidak dapat mendukung img_auth.\nLihat https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization.",
+       "img-auth-nopathinfo": "Informasi jalur hilang.\nPeladen Anda harus diatur untuk meloloskan variabel REQUEST_URI dan/atau PATH_INFO.\nJika sudah, coba aktifkan $wgUsePathInfo.\nLihat https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization.",
        "img-auth-notindir": "Alur yang diminta tidak diatur dalam direktori ungahan.",
        "img-auth-badtitle": "Tidak dapat membangun judul yang sah dari \"$1\".",
        "img-auth-nologinnWL": "Anda tidak masuk log dan \"$1\" tidak dalam daftar putih.",
        "http-timed-out": "Permintaan HTTP lewat tenggat.",
        "http-curl-error": "Kesalahan saat mengambil URL: $1",
        "http-bad-status": "Ada masalah saat permintaan halaman HTTP: $1 $2",
+       "http-internal-error": "Galat internal HTTP",
        "upload-curl-error6": "URL tidak dapat dihubungi",
        "upload-curl-error6-text": "URL yang diberikan tak dapat dihubungi. Harap periksa ulang bahwa URL tersebut tepat dan situs itu sedang aktif.",
        "upload-curl-error28": "Pemuatan lewat waktu",
        "filehist-filesize": "Besar berkas",
        "filehist-comment": "Komentar",
        "imagelinks": "Pranala berkas",
-       "linkstoimage": "{{PLURAL:$1|Halaman berikut}} memiliki pranala ke berkas ini:",
-       "linkstoimage-more": "Lebih dari $1 {{PLURAL:$1|halaman|halaman}} memiliki pranala ke berkas ini.\nDaftar berikut menampilkan {{PLURAL:$1|halaman dengan pranala langsung|$1 halaman dengan pranala langsung}} ke berkas ini.\nJuga tersedia [[Special:WhatLinksHere/$2|daftar selengkapnya]].",
-       "nolinkstoimage": "Tidak ada halaman yang memiliki pranala ke berkas ini.",
+       "linkstoimage": "{{PLURAL:$1|Halaman|$1 halaman}} berikut menggunakan berkas ini:",
+       "linkstoimage-more": "Lebih dari $1 {{PLURAL:$1|halaman|halaman}} menggunakan berkas ini.\nDaftar berikut menampilkan {{PLURAL:$1|halaman dengan pranala langsung|$1 halaman dengan pranala langsung}} ke berkas ini.\nJuga tersedia [[Special:WhatLinksHere/$2|daftar selengkapnya]].",
+       "nolinkstoimage": "Tidak ada halaman yang menggunakan berkas ini.",
        "morelinkstoimage": "Lihat [[Special:WhatLinksHere/$1|pranala lainnya]] ke berkas ini.",
        "linkstoimage-redirect": "$1 (pengalihan berkas) $2",
        "duplicatesoffile": "{{PLURAL:$1|Ada satu berkas yang|Sebanyak $1 berkas berikut}} merupakan duplikat dari berkas ini ([[Special:FileDuplicateSearch/$2|rincian lebih lanjut]]):",
        "doubleredirects": "Pengalihan ganda",
        "doubleredirectstext": "Halaman ini memuat daftar halaman yang dialihkan ke halaman pengalihan yang lain.\nSetiap baris memuat pranala ke pengalihan pertama dan pengalihan kedua serta target dari pengalihan kedua yang umumnya adalah halaman yang \"sebenarnya\". Halaman peralihan pertama seharusnya dialihkan ke halaman yang bukan merupakan halaman peralihan.\nNama yang telah <del>dicoret</del> berarti telah dibetulkan.",
        "double-redirect-fixed-move": "[[$1]] telah dipindahkan.\nKami telah memperbaruinya secara otomatis dan sekarang menjadi halaman peralihan ke [[$2]].",
-       "double-redirect-fixed-maintenance": "Memperbaiki pengalihan ganda dari [[$1]] ke [[$2]] dalam sebuah pemeliharaan.",
+       "double-redirect-fixed-maintenance": "Secara otomatis memperbaiki pengalihan ganda dari [[$1]] ke [[$2]] dalam sebuah pemeliharaan.",
        "double-redirect-fixer": "Revisi pengalihan",
        "brokenredirects": "Pengalihan rusak",
        "brokenredirectstext": "Pengalihan-pengalihan berikut merujuk pada halaman yang tidak ada:",
        "prefixindex": "Semua halaman dengan awalan (Indeks awalan)",
        "prefixindex-namespace": "Semua halaman dengan awalan (ruang nama $1)",
        "prefixindex-submit": "Tampilkan",
-       "prefixindex-strip": "Strip awalan dalam daftar",
+       "prefixindex-strip": "Hilangkan awalan dalam hasil",
        "shortpages": "Halaman pendek",
        "longpages": "Halaman panjang",
        "deadendpages": "Halaman buntu",
        "protectedtitles-submit": "Judul tampilan",
        "listusers": "Daftar pengguna",
        "listusers-editsonly": "Tampilkan hanya pengguna yang memiliki kontribusi",
+       "listusers-temporarygroupsonly": "Hanya tampilkan para pengguna dalam kelompok pengguna sementara",
        "listusers-creationsort": "Urutkan menurut tanggal pendaftaran",
        "listusers-desc": "Urutkan menurun",
        "usereditcount": "$1 {{PLURAL:$1|suntingan|suntingan}}",
        "cachedspecial-refresh-now": "Lihat versi terbaru.",
        "categories": "Daftar kategori",
        "categories-submit": "Tampilkan",
-       "categoriespagetext": "{{PLURAL:$1|Kategori berikut|Kategori-kategori berikut}} memiliki isi halaman atau media.\n[[Special:UnusedCategories|Kategori yang tak digunakan]] tidak ditampilkan di sini.\nLihat pula [[Special:WantedCategories|kategori yang diinginkan]].",
+       "categoriespagetext": "{{PLURAL:$1|Kategori berikut|Kategori-kategori}} ada di Wiki, dan mungkin saja digunakan atau tidak digunakan.\nLihat pula [[Special:WantedCategories|kategori yang diinginkan]].",
        "categoriesfrom": "Tampilkan kategori-kategori dimulai dengan:",
        "deletedcontributions": "Kontribusi yang dihapus",
        "deletedcontributions-title": "Kontribusi yang dihapus",
        "rollback-success": "Pembatalan suntingan oleh {{GENDER:$3|$1}}; dibatalkan ke versi terakhir oleh {{GENDER:$4|$2}}.",
        "rollback-success-notify": "Mengembalikan suntingan oleh $1; rubah kembali untuk revisi terakhir oleh $2. [$3 Lihat perubahan]",
        "sessionfailure-title": "Kegagalan sesi",
-       "sessionfailure": "Sepertinya ada masalah dengan sesi log Anda; log Anda telah dibatalkan untuk mencegah pembajakan. Silakan tekan tombol \"kembali\" dan muat kembali halaman sebelum Anda masuk, lalu coba lagi.",
+       "sessionfailure": "Sepertinya ada masalah dengan sesi log Anda; log Anda telah dibatalkan sebagai antisipasi untuk mencegah pembajakan. Silakan tekan tombol \"kembali\" dan muat kembali halaman sebelum Anda masuk, lalu coba lagi.",
        "changecontentmodel": "Ubah model isi sebuah halaman",
        "changecontentmodel-legend": "Ubah model isi",
        "changecontentmodel-title-label": "Judul halaman",
        "contribsub2": "Untuk {{GENDER:$3|$1}} ($2)",
        "contributions-userdoesnotexist": "Pengguna \"$1\" tidak terdaftar.",
        "nocontribs": "Tidak ada perubahan yang sesuai dengan kriteria tersebut.",
-       "uctop": "(saat ini)",
+       "uctop": "saat ini",
        "month": "Sejak bulan (dan sebelumnya):",
        "year": "Sejak tahun (dan sebelumnya):",
        "date": "Sejak tanggal (dan sebelumnya):",
        "ipb-disableusertalk": "Cegah pengguna ini untuk menyunting halaman pembicaraannya saat diblokir",
        "ipb-change-block": "Blokir kembali pengguna dengan set konfigurasi berikut",
        "ipb-confirm": "Konfirmasi blokir",
+       "ipb-sitewide": "Keseluruhan situs",
+       "ipb-partial": "Parsial",
+       "ipb-type-label": "Jenis",
+       "ipb-pages-label": "Halaman",
        "badipaddress": "Format alamat IP atau nama pengguna salah.",
        "blockipsuccesssub": "Pemblokiran sukses",
        "blockipsuccesstext": "[[Special:Contributions/$1|$1]] telah diblokir.<br />\nLihat [[Special:BlockList|daftar pemblokiran]] untuk meninjau kembali pemblokiran.",
        "createaccountblock": "pembuatan akun diblokir",
        "emailblock": "surel diblokir",
        "blocklist-nousertalk": "tidak dapat menyunting halaman pembicaraan sendiri",
+       "blocklist-editing": "penyuntingan",
+       "blocklist-editing-sitewide": "editing (keseluruhan situs)",
        "ipblocklist-empty": "Daftar pemblokiran kosong.",
        "ipblocklist-no-results": "Alamat IP atau pengguna yang diminta tidak diblokir.",
        "blocklink": "blokir",
        "move-watch": "Pantau halaman ini",
        "movepagebtn": "Pindahkan halaman",
        "pagemovedsub": "Pemindahan berhasil",
+       "cannotmove": "Halaman ini tidak dapat dipindahkan, atas {{PLURAL:$1|alasan|beberapa alasan}} berikut:",
        "movepage-moved": "'''\"$1\" telah dipindahkan ke \"$2\"'''",
        "movepage-moved-redirect": "Halaman pengalihan telah dibuat.",
        "movepage-moved-noredirect": "Pengalihan tidak dibuat.",
+       "movepage-delete-first": "Halaman target punya terlalu banyak revisi untuk dihapus sebagai bagian dari pemindahan halaman. Mohon hapus halaman tersebut secara manual, kemudian coba lagi.",
        "articleexists": "Halaman dengan nama tersebut telah ada atau nama yang dipilih tidak sah. Silakan pilih nama lain.",
        "cantmove-titleprotected": "Anda tidak dapat memindahkan halaman ke lokasi ini, karena judul tujuan sedang dilindungi dari pembuatan",
        "movetalk": "Pindahkan halaman pembicaraan yang terkait",
        "fix-double-redirects": "Perbaiki semua pengalihan ganda yang mungkin terjadi",
        "move-leave-redirect": "Buat pengalihan ke judul baru",
        "protectedpagemovewarning": "'''Peringatan''': Halaman ini telah dikunci sehingga hanya pengguna dengan hak akses pengurus yang bisa memindahkannya.\nEntri catatan terakhir disediakan di bawah untuk referensi:",
-       "semiprotectedpagemovewarning": "'''Catatan:''' Halaman ini telah dikunci sehingga hanya pengguna terdaftar yang dapat memindahkannya.\nEntri catatan terakhir disediakan di bawah untuk referensi:",
+       "semiprotectedpagemovewarning": "<strong>Catatan:</strong> Halaman ini telah dikunci sehingga hanya pengguna terdaftar yang dapat memindahkannya.\nEntri catatan terakhir disediakan di bawah untuk referensi:",
        "move-over-sharedrepo": "[[:$1]] sudah tersedia pada penyimpanan bersama. Memindahkan berkas ke judul ini akan menimpa berkas bersama.",
        "file-exists-sharedrepo": "Nama berkas yang dipilih sudah digunakan pada suatu penyimpanan bersama.\nSilakan pilih nama lain.",
        "export": "Ekspor halaman",
        "previousdiff": "← Revisi sebelumnya",
        "nextdiff": "Revisi selanjutnya →",
        "mediawarning": "'''Peringatan''': Berkas ini mungkin mengandung kode berbahaya.\nJika dijalankan, sistem Anda akan berisiko terserang.",
-       "imagemaxsize": "Batas ukuran gambar:<br />''(untuk halaman deskripsi berkas)''",
+       "imagemaxsize": "Batas ukuran gambar untuk halaman deskripsi berkas:",
        "thumbsize": "Ukuran miniatur:",
        "widthheight": "$1 × $2",
        "widthheightpage": "$1 × $2, $3 {{PLURAL:$3|halaman|halaman}}",
        "confirm-unwatch-top": "Hapus halaman ini dari daftar pantauan Anda?",
        "confirm-rollback-button": "OK",
        "confirm-rollback-top": "Kembalikan suntingan ke halaman ini?",
+       "confirm-mcrrestore-title": "Kembalikan revisi",
        "confirm-mcrundo-title": "Balikkan perubahan",
        "mcrundofailed": "Pembatalan gagal",
        "mcrundo-missingparam": "Parameter yang dibutuhkan ketika diminta tidak tersedia.",
        "tags": "Tag perubahan yang valid",
        "tag-filter": "Filter [[Special:Tags|tag]]:",
        "tag-filter-submit": "Penyaring",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Tag}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Tag}}]]: $2",
        "tag-mw-contentmodelchange": "Perubahan model konten",
        "tag-mw-contentmodelchange-description": "Perubahan yang [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:ChangeContentModel mengubah model konten] suatu halaman",
        "tag-mw-new-redirect": "Pengalihan baru",
        "dberr-again": "Cobalah menunggu beberapa menit dan muat ulang.",
        "dberr-info": "(Tak dapat mengakses basis data: $1)",
        "dberr-info-hidden": "(Tak dapat mengakses basis data)",
-       "dberr-usegoogle": "Anda dapat mencoba pencarian melalui Google untuk sementara waktu.",
-       "dberr-outofdate": "Harap diperhatikan bahwa indeks mereka terhadap isi kami mungkin sudah kedaluwarsa.",
-       "dberr-cachederror": "Berikut adalah salinan tersimpan halaman yang diminta, dan mungkin bukan yang terbaru.",
        "htmlform-invalid-input": "Ada kesalahan dalam beberapa input Anda",
        "htmlform-select-badoption": "Nilai yang Anda masukkan tidak sah",
        "htmlform-int-invalid": "Nilai yang Anda masukkan bukan integer.",
        "special-characters-title-endash": "en dash",
        "special-characters-title-emdash": "em dash",
        "special-characters-title-minus": "tanda kurang",
-       "mw-widgets-abandonedit": "Apakah Anda yakin meninggalkan mode penyuntingan tanpa menyimpan terlebih dahulu?",
+       "mw-widgets-abandonedit": "Apakah Anda yakin ingin meninggalkan mode penyuntingan tanpa menyimpan terlebih dahulu?",
        "mw-widgets-abandonedit-discard": "Buang suntingan",
        "mw-widgets-abandonedit-keep": "Lanjutkan penyuntingan",
        "mw-widgets-abandonedit-title": "Apakah Anda yakin?",
        "mw-widgets-titleinput-description-redirect": "mengalihkan ke $1",
        "mw-widgets-categoryselector-add-category-placeholder": "Tambah sebuah kategori...",
        "mw-widgets-usersmultiselect-placeholder": "Tambahkan lebih banyak...",
+       "mw-widgets-titlesmultiselect-placeholder": "Tambahkan lebih banyak...",
        "date-range-from": "Dari tanggal",
        "date-range-to": "Sampai tanggal",
        "sessionmanager-tie": "Tidak dapat menggabungkan banyak jenis otentikasi permintaan: $1.",
index a6b140a..5bf36a7 100644 (file)
        "mycontris": "Contributiones",
        "anoncontribs": "Contributiones",
        "contribsub2": "De {{GENDER:$3|$1}} ($2)",
-       "uctop": "(actual)",
+       "uctop": "actual",
        "month": "De mensu (e anterioris):",
        "year": "De annu (e anterioris):",
        "sp-contributions-newbies": "Monstar contributiones de nov contos solmen",
index a21d451..bda343a 100644 (file)
        "mycontris": "Ịhem mètàrà",
        "anoncontribs": "Mmètàrà",
        "contribsub2": "Maka $1 ($2)",
-       "uctop": "(dị ùgbu â)",
+       "uctop": "dị ùgbu â",
        "month": "Shi önwa (na nke ndi mbu):",
        "year": "Shi afọr (na ndi nke mbu):",
        "sp-contributions-newbies": "Zí orü áká ọ'bànifé ohúru náni",
index f09fe5d..1bd0f32 100644 (file)
        "contribsub2": "Para kenni {{GENDER:$3|$1}} ($2)",
        "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)",
+       "uctop": "agdama",
        "month": "Manipud iti bulan (ken nasapsapa):",
        "year": "Manipud iti tawen (ken nasapsapa):",
        "sp-contributions-newbies": "Iparang dagiti kontribusion dagiti kabarbaro a pakabilangan laeng",
        "tags": "Dagiti etiketa ti umiso a panagbaliw",
        "tag-filter": "Sagat ti [[Special:Tags|etiketa]]:",
        "tag-filter-submit": "Sagat",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Etiketa|Et-etiketa}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Etiketa|Et-etiketa}}]]: $2",
        "tag-mw-contentmodelchange": "panagbaliw ti modelo ti linaon",
        "tag-mw-contentmodelchange-description": "Dagiti panagurnos a [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:ChangeContentModel mangbaliw ti modelo ti linaon] ti panid",
        "tag-mw-new-redirect": "Baro a baw-ing",
        "dberr-again": "Padasem ti aguray kadagiti mano a minuto ken agikarga manen.",
        "dberr-info": "(Saan a maserrekan ti server ti database: $1)",
        "dberr-info-hidden": "(Saan a maserrekan ti database)",
-       "dberr-usegoogle": "Iti agdama mabalinmo a padasen ti agbiruk babaen ti Google.",
-       "dberr-outofdate": "Palagip a dagiti listaanda kadagiti kukuami a linaon ket mabalin a nagpaso.",
-       "dberr-cachederror": "Daytoy ket naidulin a kopia ti kiniddawmo a panid, ken mabalin a saan a kabarbaro.",
        "htmlform-invalid-input": "Adda pakirut kadagiti dadduma nga inkabilmo.",
        "htmlform-select-badoption": "Ti pateg a nainaganam ket saan a mabalin a pagpilian.",
        "htmlform-int-invalid": "Ti pateg a nainaganam ket saan a maysa a sibubukel.",
index a79eebd..b13c7c1 100644 (file)
        "prefs-developertools": "Кийчдархочун кечалаш",
        "prefs-preview": "Хьалххе бIаргтохар",
        "prefs-advancedrc": "Кхыдола шердаь оттамаш",
-       "prefs-opt-out": "Алсамдалар тӀацаэцар",
        "prefs-advancedrendering": "Кхыдола шердаь оттамаш",
        "prefs-advancedsearchoptions": "Шердаь оттамаш",
        "prefs-advancedwatchlist": "Кхыдола шердаь оттамаш",
        "anoncontribs": "Къахьегам",
        "contribsub2": "Къахьегам {{GENDER:$3|$1}} ($2)",
        "nocontribs": "ДIадийха хувцамаш корадаьдац",
-       "uctop": "(карара)",
+       "uctop": "карара",
        "month": "Укх бетт (кхы хьалхагIа)",
        "year": "Укх шер (кхы хьалхагIа):",
        "sp-contributions-newbies": "Хьахьокха алхха керда дагара йоазонашца баь бола къахьегам",
        "external_image_whitelist": "#Ер мугI ший болча тайпара бита<pre>\n#Укхаз оттаде кастта дувлача выражений фрагменташ (// юкъе дола дакъа)\n#арахьара суртий URL адресашца дIанийсалургда уш.\n#Мегаргдола сурташ санна хьахьекха хургда, дIаходараш, сурташта тIахьожаяргаш санна хьахьекха хургда.\n#Укханца # долалуш дола могIараш алараш санна лоархIаш да.\n#МогIараш регистраца кIаьда дац\n\n#Укх могIара лакхе оттаде кастта дувлача выражений фрагменташ. Ер мугI ший болча тайпара бита</pre>",
        "tag-filter": "[[Special:Tags|Фосташ]] луттарг:",
        "tag-filter-submit": "Литта",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|1=Фост|Фосташ}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|1=Фост|Фосташ}}]]: $2",
        "tag-mw-undo": "эшац",
        "tags-title": "Фосташ",
        "tags-tag": "Фоста цӀи",
index e67e280..1d75152 100644 (file)
        "rcfilters-highlightmenu-help": "Selektez koloro por emfazar ica proprajo",
        "rcfilters-filterlist-noresults": "Nula filtrilo trovesis",
        "rcfilters-noresults-conflict": "Nula rezulto trovesis, pro la kriterii di inquesti konfliktas l'unu kun l'altru",
+       "rcfilters-filtergroup-authorship": "Autoreso di la kontributaji",
        "rcfilters-filter-editsbyself-label": "Vua modifikuri",
        "rcfilters-filter-editsbyself-description": "Vua propra kontributaji",
        "rcfilters-filter-editsbyother-label": "Modifikuri da altri",
        "mostrevisions": "Pagini kun multa revizuri",
        "prefixindex": "Omna pagini kun prefixo",
        "prefixindex-submit": "Montrez",
+       "prefixindex-strip": "Celez la prefixo en la rezulti",
        "shortpages": "Kurta pagini",
        "longpages": "Longa pagini",
        "deadendpages": "Pagini sen ekiraji",
        "allarticles": "Omna pagini",
        "allinnamespace": "Omna pagini (nomaro $1)",
        "allpagessubmit": "Irez",
+       "allpagesprefix": "Montrez pagini kun prefixo:",
        "allpages-bad-ns": "{{SITENAME}} ne havas nomaro \"$1\".",
        "allpages-hide-redirects": "Celar ridirekti",
        "cachedspecial-refresh-now": "Vidar la lasta.",
        "undeletehistory": "Se vu restauros la pagino, omna antea revizi restauresos en la korespondanta historiala pagino.\nSe nova pagino kun la sama titulo kreesis pos l'efaco, la restaurita revizuri aparos en lua historiala pagino.",
        "undeleterevdel": "La restauro ne facesos se to produktos partala o totala efaco de la maxim recenta revizo.\nCa kazi, vu mustas desselektar o trovar la maxim recenta versiono efacita.",
        "undeletehistorynoadmin": "Ica pagino efacesis.\nLa motivo por l'efaco montresas en la rezumo adinfre, kune la detaligo dil uzeri qui redaktis la pagino ante lua efaco.\nLa kompleta texto di ca revizi efacita esas videbla nur por l'administreri.",
+       "undelete-revision": "Yen l'efacita revizo di $1 (skribita en $4, ye $5 kloki) da $3:",
        "undeleterevision-missing": "Nevalida o mankanta revizo.\nSive vu skribis la ligilo nekorekte, sive la revizo restauresis o removesis del arkivo.",
        "undeletebtn": "Restaurar",
        "undeletelink": "vidar/restaurar",
        "anoncontribs": "Kontributadi",
        "contribsub2": "De {{GENDER:$3|$1}} ($2)",
        "nocontribs": "Ne trovesis chanji qui fitez ita kriterii.",
-       "uctop": "(aktuala)",
+       "uctop": "aktuala",
        "month": "De monato (e plu frue):",
        "year": "De yaro (e plu frue):",
        "sp-contributions-newbies": "Montrez nur kontributadi di la nova uzeri",
        "reblock-logentry": "modifikis la tempo di blokuso [[$1]] por durado di $2 $3",
        "unblocklogentry": "desblokusis \"$1\"",
        "block-log-flags-nocreate": "ne povas krear konto",
+       "block-log-flags-noautoblock": "automatala blokuso nekapabligata",
        "block-log-flags-noemail": "e-posto blokusita",
        "block-log-flags-nousertalk": "ne povas redaktar lua propra diskuto-pagino",
        "ipb_expiry_invalid": "Nevalida expiro-tempo.",
        "movepage-page-moved": "La pagino $1 movesis a $2.",
        "movepage-page-unmoved": "La pagino $1 ne povis rinomizesar \"$2\".",
        "movelogpage": "Movo-registraro",
+       "movesubpage": "{{PLURAL:$1|Subpagino|Subpagini}}",
        "movereason": "Motivo:",
        "revertmove": "rekuperar",
        "delete_and_move_text": "Pagino kun la titulo \"[[:$1]]\" ja existas.\nKa vu dezirus efacar ol, por movor ica pagino ad ita titulo?",
        "blankpage": "Pagino sen-skribura",
        "tag-filter": "[[Special:Tags|etiketo]] filtrilo:",
        "tag-filter-submit": "Filtrez",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Etikedo|Etikedi}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Etikedo|Etikedi}}]]: $2",
        "tag-mw-contentmodelchange": "Modifiko di la kontenajo di ula modelo",
        "tag-mw-contentmodelchange-description": "Redakturi qui [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:ChangeContentModel modifikas la modelo di kontenajo] di ula pagino",
        "tag-mw-new-redirect": "Nova ridirekto",
        "dberr-again": "Voluntez vartar kelka minuti, e riprobez acesar ol.",
        "dberr-info": "(Ne povis acesar la datumaro: $1)",
        "dberr-info-hidden": "(La datumaro ne esas disponebla)",
-       "dberr-outofdate": "Atencez ke l'indexi pri kontenaji povas esar antiquatra.",
        "htmlform-reset": "Desfacar chanji",
        "htmlform-selectorother-other": "Altra",
        "htmlform-cloner-create": "Adjuntar plue",
index 8c08b6e..03ba77d 100644 (file)
        "prefs-editor": "Ritsjóri",
        "prefs-preview": "Forskoðun",
        "prefs-advancedrc": "Háþróaðir möguleikar",
-       "prefs-opt-out": "Hafna endurbótum",
        "prefs-advancedrendering": "Háþróaðir möguleikar",
        "prefs-advancedsearchoptions": "Háþróaðir möguleikar",
        "prefs-advancedwatchlist": "Háþróaðir möguleikar",
        "contribsub2": "Eftir {{GENDER:$3|$1}} ($2)",
        "contributions-userdoesnotexist": "Notandaaðgangurinn \"$1\" er ekki skráður.",
        "nocontribs": "Engar breytingar fundnar sem passa við þessa viðmiðun.",
-       "uctop": "(núverandi)",
+       "uctop": "núverandi",
        "month": "Frá mánuðinum (og fyrr):",
        "year": "Frá árinu (og fyrr):",
        "sp-contributions-newbies": "Sýna aðeins breytingar frá nýjum notendum",
        "tags": "Breyta virkum merkjum",
        "tag-filter": "[[Special:Tags|Merkja]]sía:",
        "tag-filter-submit": "Sía",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Merki}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Merki}}]]: $2",
        "tag-mw-new-redirect": "Ný endurbeining",
        "tag-mw-removed-redirect": "Fjarlægði endurbeiningu",
        "tag-mw-replace": "Skipt út",
        "dberr-again": "Reyndu að bíða í nokkrar mínútur og endurhlaða síðan síðuna.",
        "dberr-info": "(Mistókst að fá aðgang að gagnaþjóni: $1)",
        "dberr-info-hidden": "(Mistókst að fá aðgang að gagnaþjóni)",
-       "dberr-usegoogle": "Þú getur notað Google til að leita á meðan.",
-       "dberr-outofdate": "Athugaðu að afrit þeirra gætu verið úreld.",
-       "dberr-cachederror": "Þetta er afritað eintak af umbeðinni síðu og gæti verið úreld.",
        "htmlform-invalid-input": "Vandamál við hluta af innleggi þínu",
        "htmlform-select-badoption": "Gildið sem þú tilgreindir er ekki gildur möguleiki.",
        "htmlform-int-invalid": "Gildið sem þú tilgreindir er ekki heil tala.",
index 8fcb106..53dd90a 100644 (file)
        "passwordtooshort": "Le password devono contenere almeno {{PLURAL:$1|1 carattere|$1 caratteri}}.",
        "passwordtoolong": "La password non può contenere più di {{PLURAL:$1|1 carattere|$1 caratteri}}.",
        "passwordtoopopular": "Password comuni non possono essere usate. Scegli una password più difficile da indovinare.",
+       "passwordinlargeblacklist": "La password inserita è nell'elenco delle password utilizzate più comunemente. Si prega di scegliere una password più unica.",
        "password-name-match": "La password deve essere diversa dal nome utente.",
        "password-login-forbidden": "L'uso di questo nome utente e password è stato proibito.",
        "mailmypassword": "Reimposta password",
        "prefs-editor": "Editore",
        "prefs-preview": "Anteprima",
        "prefs-advancedrc": "Opzioni avanzate",
-       "prefs-opt-out": "Disattivazione dei miglioramenti",
        "prefs-advancedrendering": "Opzioni avanzate",
        "prefs-advancedsearchoptions": "Opzioni avanzate",
        "prefs-advancedwatchlist": "Opzioni avanzate",
        "prefs-displayrc": "Opzioni di visualizzazione",
        "prefs-displaywatchlist": "Opzioni di visualizzazione",
+       "prefs-changesrc": "Modifiche mostrate",
+       "prefs-changeswatchlist": "Modifiche mostrate",
+       "prefs-pageswatchlist": "Pagine osservate",
        "prefs-tokenwatchlist": "Token",
        "prefs-diffs": "Differenze",
        "prefs-help-prefershttps": "Questa preferenza avrà effetto dal prossimo accesso.",
        "rcfilters-watchlist-markseen-button": "Segna tutte le modifiche come già viste",
        "rcfilters-watchlist-edit-watchlist-button": "Modifica il tuo elenco di pagine osservate",
        "rcfilters-watchlist-showupdated": "Le modifiche alle pagine che non hai ancora visitato da quando le modifiche sono avvenute, vengono evidenziate in <strong>grassetto</strong> e con dei pallini pieni.",
-       "rcfilters-preference-label": "Nascondi la versione migliorata delle ultime modifiche",
-       "rcfilters-preference-help": "Ripristina la riprogettazione dell'interfaccia 2017 e tutti gli strumenti aggiunti allora e da allora.",
-       "rcfilters-watchlist-preference-label": "Nascondi la versione migliorata degli osservati speciali",
-       "rcfilters-watchlist-preference-help": "Ripristina la riprogettazione dell'interfaccia 2017 e tutti gli strumenti aggiunti allora e da allora.",
+       "rcfilters-preference-label": "Utilizza l'interfaccia senza JavaScript",
+       "rcfilters-preference-help": "Carica le ultime modifiche senza filtri o funzionalità di evidenziazione.",
+       "rcfilters-watchlist-preference-label": "Utilizza l'interfaccia senza JavaScript",
+       "rcfilters-watchlist-preference-help": "Carica gli osservati speciali senza filtri o funzionalità di evidenziazione.",
        "rcfilters-filter-showlinkedfrom-label": "Mostra le modifiche alle pagine collegate da",
        "rcfilters-filter-showlinkedfrom-option-label": "<strong>Pagine con collegamenti da</strong> la pagina selezionata",
        "rcfilters-filter-showlinkedto-label": "Mostra le modifiche alle pagine che collegano a",
        "contribsub2": "Per {{GENDER:$3|$1}} ($2)",
        "contributions-userdoesnotexist": "L'utenza \"$1\" non è registrata.",
        "nocontribs": "Non sono state trovate modifiche che soddisfino i criteri di ricerca.",
-       "uctop": "(attuale)",
+       "uctop": "attuale",
        "month": "Dal mese (e precedenti):",
        "year": "Dall'anno (e precedenti):",
        "date": "Dal giorno (e precedenti):",
        "tooltip-ca-move": "Sposta questa pagina (cambia titolo)",
        "tooltip-ca-watch": "Aggiungi questa pagina alla tua lista degli osservati speciali",
        "tooltip-ca-unwatch": "Rimuovi questa pagina dalla tua lista degli osservati speciali",
-       "tooltip-search": "Cerca all'interno di {{SITENAME}}",
+       "tooltip-search": "Cerca in {{SITENAME}}",
        "tooltip-search-go": "Vai a una pagina con il titolo indicato, se esiste",
        "tooltip-search-fulltext": "Cerca il testo indicato nelle pagine",
        "tooltip-p-logo": "Visita la pagina principale",
        "tags": "Etichette di modifiche valide",
        "tag-filter": "Filtra per [[Special:Tags|etichetta]]:",
        "tag-filter-submit": "Filtra",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Etichetta|Etichette}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Etichetta|Etichette}}]]: $2",
        "tag-mw-contentmodelchange": "modifica modello contenuti",
        "tag-mw-contentmodelchange-description": "Modifiche che [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:ChangeContentModel cambiano il modello di contenuti] di una pagina",
        "tag-mw-new-redirect": "Nuovo reindirizzamento",
        "dberr-again": "Prova ad attendere qualche minuto e ricaricare.",
        "dberr-info": "(Impossibile accedere al server del database: $1)",
        "dberr-info-hidden": "(Impossibile accedere al server del database)",
-       "dberr-usegoogle": "Puoi provare a cercare su Google nel frattempo.",
-       "dberr-outofdate": "Nota che la loro indicizzazione dei nostri contenuti potrebbe non essere aggiornata.",
-       "dberr-cachederror": "Quella che segue è una copia cache della pagina richiesta, e potrebbe non essere aggiornata.",
        "htmlform-invalid-input": "Ci sono problemi con i dati inseriti",
        "htmlform-select-badoption": "Il valore specificato non è un'opzione valida.",
        "htmlform-int-invalid": "Il valore specificato non è un intero.",
        "feedback-thanks": "Grazie! Il tuo feedback è stato pubblicato alla pagina \"[$2 $1]\".",
        "feedback-thanks-title": "Grazie!",
        "feedback-useragent": "User agent:",
-       "searchsuggest-search": "Cerca all'interno di {{SITENAME}}",
+       "searchsuggest-search": "Cerca in {{SITENAME}}",
        "searchsuggest-containing": "contenente...",
        "api-error-badtoken": "Errore interno: token errato.",
        "api-error-emptypage": "La creazione di nuove pagine vuote non è consentita.",
        "passwordpolicies-policy-passwordcannotmatchblacklist": "La password non può corrispondere a password specificate nell'elenco delle password proibite",
        "passwordpolicies-policy-maximalpasswordlength": "La password deve essere lunga meno di $1 {{PLURAL:$1|carattere|caratteri}}",
        "passwordpolicies-policy-passwordcannotbepopular": "La password non può essere {{PLURAL:$1|la password più popolare|nell'elenco delle $1 password più popolari}}",
+       "passwordpolicies-policy-passwordnotinlargeblacklist": "La password non può essere nell'elenco delle 100 000 password utilizzate più comunemente.",
        "unprotected-js": "Per motivi di sicurezza, non è possibile caricare JavaScript da pagine non protette. Crea javascript solo nel namespace MediaWiki o come sottopagina Utente"
 }
index d1e5572..ab933ca 100644 (file)
        "prefs-editor": "エディター",
        "prefs-preview": "プレビュー",
        "prefs-advancedrc": "詳細の設定",
-       "prefs-opt-out": "改善の使用を断る",
        "prefs-advancedrendering": "詳細の設定",
        "prefs-advancedsearchoptions": "詳細設定",
        "prefs-advancedwatchlist": "詳細の設定",
        "prefs-displayrc": "表示の設定",
        "prefs-displaywatchlist": "表示の設定",
+       "prefs-pageswatchlist": "ウォッチするページ",
        "prefs-tokenwatchlist": "トークン",
        "prefs-diffs": "差分",
        "prefs-help-prefershttps": "この設定は、次回ログインの際に反映されます。",
        "rcfilters-watchlist-markseen-button": "すべての変更を訪問済みにする",
        "rcfilters-watchlist-edit-watchlist-button": "ウォッチリストを編集",
        "rcfilters-watchlist-showupdated": "最終訪問以降に変更されたページは、塗りつぶされた丸印と一緒に、<strong>太字</strong>で表示されます。",
-       "rcfilters-preference-label": "最近の更新の改善版を隠す",
-       "rcfilters-preference-help": "2017年のインターフェース更新およびそれ以降に追加された新しいツールを無効化します。",
-       "rcfilters-watchlist-preference-label": "ウォッチリストの改善版を隠す",
-       "rcfilters-watchlist-preference-help": "2017年のインターフェース刷新と、左記実施以降の全てのツール追加を以前の内容に戻します。",
+       "rcfilters-preference-label": "非JavaScript版インターフェイスを使用",
+       "rcfilters-preference-help": "「最近の更新」ページに検索絞り込み機能や構文強調表示機能をかけずに表示します。",
+       "rcfilters-watchlist-preference-label": "非JavaScript版インターフェイスを使用",
+       "rcfilters-watchlist-preference-help": "ウォッチリストに検索絞り込み機能や構文強調表示機能をかけずに読み込みます。",
        "rcfilters-filter-showlinkedfrom-label": "指定されたページのリンク先の変更を表示",
        "rcfilters-filter-showlinkedfrom-option-label": "指定されたページから<strong>リンクされているページ(リンク先)</strong>",
        "rcfilters-filter-showlinkedto-label": "指定されたページのリンク元の変更を表示",
        "contribsub2": "利用者: {{GENDER:$3|$1}} ($2)",
        "contributions-userdoesnotexist": "利用者アカウント「$1」は登録されていません。",
        "nocontribs": "これらの条件に一致する変更は見つかりませんでした。",
-       "uctop": "(最新)",
+       "uctop": "最新",
        "month": "この月以前:",
        "year": "この年以前:",
        "date": "この日以前:",
        "pageinfo-category-files": "ファイル数",
        "pageinfo-user-id": "利用者 ID",
        "pageinfo-file-hash": "ハッシュ値",
+       "pageinfo-view-protect-log": "このページの保護記録を閲覧。",
        "markaspatrolleddiff": "巡回済みにする",
        "markaspatrolledtext": "このページを巡回済みにする",
        "markaspatrolledtext-file": "このファイルの版を巡回済みにする",
        "tags": "有効な変更タグ",
        "tag-filter": "[[Special:Tags|タグ]]絞り込み:",
        "tag-filter-submit": "絞り込み",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|タグ}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|タグ}}]]: $2",
        "tag-mw-contentmodelchange": "コンテンツ・モデルの変更",
        "tag-mw-contentmodelchange-description": "ページの[https://www.mediawiki.org/wiki/Special:MyLanguage/Help:ChangeContentModel コンテンツモデルを変更]する",
        "tag-mw-new-redirect": "新規リダイレクト",
        "dberr-again": "数分間待った後、もう一度読み込んでください。",
        "dberr-info": "(データベース $1 にアクセスできません)",
        "dberr-info-hidden": "(データベースにアクセスできません)",
-       "dberr-usegoogle": "元に戻るまで、Googleを利用して検索できます。",
-       "dberr-outofdate": "収集された内容は古い可能性があることに注意してください。",
-       "dberr-cachederror": "これは要求されたページをキャッシュした複製であり、古くなっている可能性があります。",
        "htmlform-invalid-input": "入力に何らかの問題があります。",
        "htmlform-select-badoption": "指定した値は有効な選択肢ではありません。",
        "htmlform-int-invalid": "指定した値は整数ではありません。",
index 33e24a0..da126aa 100644 (file)
        "mycontris": "Mi kanchribyuushan",
        "anoncontribs": "Kanchribyuushan",
        "contribsub2": "Fi $1 ($2)",
-       "uctop": "(tap)",
+       "uctop": "tap",
        "month": "Frahn mont (ahn oerlia):",
        "year": "Frahn ier (ahn oerlia):",
        "sp-contributions-newbies": "Shuo kanchribiushan fi onggl nyuu akount",
        "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|taak]])‎",
        "specialpages": "Peshal piej",
        "tag-filter": "[[Special:Tags|Tag]] filta:",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Tag|Tags}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Tag|Tags}}]]: $2",
        "logentry-delete-delete": "$1 {{GENDER:$2|diliitid}} piej $3‎",
        "logentry-move-move": "$1 {{GENDER:$2|muuv}} piej $3 tu $4‎",
        "logentry-newusers-create": "Yuuza akount $1 eh {{GENDER:$2|krietid}}‎",
index 30310e2..1714b50 100644 (file)
        "mycontris": "Bidraw",
        "anoncontribs": "Bidraw",
        "contribsub2": "For {{GENDER:$3|$1}} ($2)",
-       "uctop": "(siensti)",
+       "uctop": "siensti",
        "month": "Månj:",
        "year": "Or:",
        "sp-contributions-newbies-sub": "Fra nyj konto",
        "specialpages-group-maintenance": "Weliholjelsside",
        "specialpages-group-pages": "Sideliste",
        "tag-filter": "[[Special:Tags|Tag]]filtjer:",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Tag|Tags}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Tag|Tags}}]]: $2",
        "tags-active-yes": "Ja",
        "tags-active-no": "Nej",
        "logentry-delete-delete": "$1 {{GENDER:$2|slettetj}} siden $3",
index 46ada06..f50fe7c 100644 (file)
        "newsectionsummary": "/* $1 */ pérangan anyar",
        "rc-enhanced-expand": "Tuduhaké princèn",
        "rc-enhanced-hide": "Dhelikaké princèn",
-       "rc-old-title": "kawitané digawé minangka \"$1\"",
+       "rc-old-title": "kawitané kagawé minangka \"$1\"",
        "recentchangeslinked": "Owahan magepokan",
        "recentchangeslinked-feed": "Owah-owahan kang magepokan",
        "recentchangeslinked-toolbox": "Owahan magepokan",
        "anoncontribs": "Pasumbang",
        "contribsub2": "Kanggo {{GENDER:$3|$1}} ($2)",
        "nocontribs": "Owah-owahan kang cocog karo wewaton mangkono ora tinemu.",
-       "uctop": "(saiki)",
+       "uctop": "saiki",
        "month": "Saka wulan (lan sadurungé):",
        "year": "Saka taun (lan sadurungé):",
        "sp-contributions-newbies": "Tuduhaké mung pisumbangé akun-akun anyar waé",
        "tags": "Tag pangowahan kang absah",
        "tag-filter": "Panyaringan [[Special:Tags|tenger]]:",
        "tag-filter-submit": "Penyaring",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Tenger|Tenger}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Tenger|Tenger}}]]: $2",
        "tag-mw-contentmodelchange": "owahan modhèl isi",
        "tag-mw-new-redirect": "Alihan anyar",
        "tag-mw-blank": "Ngosongaké",
        "dberr-again": "Coba nunggu sawetara menit lan unggahna manèh.",
        "dberr-info": "(Ora bisa nggayut basis dhata: $1)",
        "dberr-info-hidden": "(Ora bisa nggayut basis dhata)",
-       "dberr-usegoogle": "Panjenengan bisa nyoba nggolèki nganggo Google kanggo sauntara wektu.",
-       "dberr-outofdate": "Perlu diweruhi yèn indhèks isi kita manawa wis kadaluwarsa.",
-       "dberr-cachederror": "Iki turunan kasimpen kaca kang dijaluk, lan manawa dudu kang paling anyar.",
        "htmlform-invalid-input": "Ana masalah jroning sawetara input panjenengan",
        "htmlform-select-badoption": "Aji kang panjenengan lebokaké ora absah",
        "htmlform-int-invalid": "Aji kang panjenengan lebokaké dudu angka wutuh (integer).",
index 6f63cd3..15a7a4f 100644 (file)
        "prefs-editor": "რედაქტორი",
        "prefs-preview": "წინასწარი გადახედვა",
        "prefs-advancedrc": "გაფართოებული პარამეტრები",
-       "prefs-opt-out": "გაუმჯობესების გამორიცხვა",
        "prefs-advancedrendering": "გაფართოებული პარამეტრები",
        "prefs-advancedsearchoptions": "გაფართოებული პარამეტრები",
        "prefs-advancedwatchlist": "გაფართოებული კონფიგურაციები",
        "contribsub2": "მომხმარებელი {{GENDER:$3|$1}} წვლილი ($2)",
        "contributions-userdoesnotexist": "მომხმარებლის ანგარიში „$1“ არ არის რეგისტრირებული.",
        "nocontribs": "ძებნისას მითითებული პარამეტრების შესაბამისი არც ერთი ცვლილება ნაპოვნი არ არის",
-       "uctop": "(მიმდინარე)",
+       "uctop": "მიმდინარე",
        "month": "თვე:",
        "year": "წელი:",
        "date": "თარიღიდან (და უფრო ადრე):",
        "tags": "ცვლილებათა მოქმედი მონიშვნები",
        "tag-filter": "[[Special:Tags|მონიშვნათა]] ფილტრი",
        "tag-filter-submit": "გაფილტვრა",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|იარლიყი|იარლიყები}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|იარლიყი|იარლიყები}}]]: $2",
        "tag-mw-contentmodelchange": "შინაარსის მოდელის ცვლილება",
        "tag-mw-contentmodelchange-description": "რედაქტირებები, რომლებიც [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:ChangeContentModel ცვლიან გვერდის შინაარსის მოდელს]",
+       "tag-mw-blank": "დაცარიელება",
        "tags-title": "მონიშვნები",
        "tags-intro": "ამ გვერდზე წარმოდგენილია მონიშვნათა სია, რომლითაც პროგრამული უზრუნველყოფა მონიშნავს შესწორებებს, ასევე ამ მონიშვნათა მნიშვნელობა.",
        "tags-tag": "ტეგის სახელი",
        "dberr-again": "ეცადეთ რამდენიმე წუთით დაცდა და ამ გვერდის გადატვირთვა",
        "dberr-info": "(მონაცემთა ბაზებთან კავშირი არ არის: $1)",
        "dberr-info-hidden": "(მონაცემთა ბაზებთან კავშირი არ არის)",
-       "dberr-usegoogle": "ამ დროს კი  შეგიძლიათ Google-ით ძიება",
-       "dberr-outofdate": "გაითვალისწინეთ, რომ თქვენი კონტენტის ინდექსები შეიძლება შეუსაბამო იყოს",
-       "dberr-cachederror": "ეს არის მოთხოვნილი გვერდის კეშირებული ვერსია, და შესაძლება მოძველდა.",
        "htmlform-invalid-input": "თქვენ მიერ შეყვანილი ინფორმაციის ნაწილმა გამოიწვია პრობლემები",
        "htmlform-select-badoption": "თქვენ მიერ მითითებული მნიშვნელობა მიუღებელია.",
        "htmlform-int-invalid": "თქვენ მიერ მითითებული მნიშვნელობა არ არის მთელი რიცხვი.",
index 34a7ffc..64c7471 100644 (file)
        "contributions-title": "$1 paydalanıwshısının' qosqan u'lesi",
        "mycontris": "Menin' u'lesim",
        "contribsub2": "$1 ushın ($2)",
-       "uctop": "(joqarg'ı)",
+       "uctop": "joqarg'ı",
        "month": "Aydag'ı (ha'm onnanda erterek):",
        "year": "Jıldag'ı (ha'm onnanda erterek):",
        "sp-contributions-newbies": "Tek taza akkauntlar u'leslerin ko'rset",
index 02ff34b..c449fd8 100644 (file)
        "contribsub2": "I {{GENDER:$3|$1}} ($2)",
        "contributions-userdoesnotexist": "Amiḍan n useqdac \"$1\" ur yettwasekles ara.",
        "nocontribs": "Ur yufi ara abddel i tebɣiḍ.",
-       "uctop": "(amiran)",
+       "uctop": "amiran",
        "month": "Seg uggur (d wid uqbel) :",
        "year": "Seg useggwas (d wid uqbel) :",
        "sp-contributions-newbies": "Ssken tikkin n yimseqdacen imaynuten kan",
        "tags": "Ticṛaḍ n ibeddilen sɣeblent",
        "tag-filter": "Astay n [[Special:Tags|ticraḍ]] :",
        "tag-filter-submit": "Sti",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Ticṛeṭ|Ticraḍ}}]] : $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Ticṛeṭ|Ticraḍ}}]] : $2",
        "tags-title": "Ticraḍ",
        "tags-intro": "Asebtar agi yettaked umuɣ n ticraḍ ay aseɣẓan yezmer ad yeseqdec iwakken ad yecreḍ abeddel d anamek i yal abeddel.",
        "tags-tag": "Isem n ticṛeṭ",
        "dberr-again": "Ɛreḍ ad arǧuḍ kra n tisdidin dɣa sismeḍ.",
        "dberr-info": "(Ur izmir ara ad yeqqen ar taffa n isefka: $1)",
        "dberr-info-hidden": "(Ur izmir ara ad yeqqen ara taffa n isefka)",
-       "dberr-usegoogle": "Tzemreḍ ad ɛreḍeḍ anadi s Google deg ukud agi.",
-       "dberr-outofdate": "Ani i imataren nsen n ugbur nneɣ zemren ad yetwagaren",
-       "dberr-cachederror": "Wagi d anɣel yeffren n usebtar i tebɣiḍ, yezmer ad yetwagar.",
        "htmlform-invalid-input": "Igna nnulfan-d s kra n azalen",
        "htmlform-select-badoption": "Azal id efkeḍ mačči d taxtiṛit i ɣeblen.",
        "htmlform-int-invalid": "Azal id efkeḍ mačči d amḍan ummid.",
index 048d018..a949fa6 100644 (file)
        "contributions-title": "Хэтым и хэлъхьэгъуэ $1",
        "mycontris": "Си хэлъхьэгъуэхэр",
        "contribsub2": "Хэлъхьэгъуэ $1 ($2)",
-       "uctop": "(яужырер)",
+       "uctop": "яужырер",
        "month": "Мазэм щыщIэдзауэ (икIи нэхъ пасэу):",
        "year": "Мы илъэсым щыщIэдзауэ (е нэхъпасэжу):",
        "sp-contributions-newbies": "Аккаунт щӀэхэм я хэлъхьэгъуэ къуэдер гъэлъэгъуэн",
index 1622be2..7dd037d 100644 (file)
        "mycontris": "مہ حصہ",
        "anoncontribs": "آرٹیکلز",
        "contribsub2": "{{GENDER:$3|$1}} ($2)",
-       "uctop": "(موجودہ نسخہ)",
+       "uctop": "موجودہ نسخہ",
        "month": "مس (وا ھیغاری پروشٹی):",
        "year": "سال (وا ھیغاری پروشٹی):",
        "sp-contributions-newbies": "صرفی نوغ اکاونٹو مضمونن پشاوے",
        "external_image_whitelist": " #ھیہ لاینو ھموش تان شیکو لاکے کیچہ کہ ھیہ شیر<pre>\n#موڑا ریگولر لوان دیور((صرف ھتیتان کیاغ ھمیتان موژی شینی //) //) \n#بیریو ھوٹوان آر ایلان سوم ھمیتان میچ کورنو بوی\n# کیاغ کہ میچ ھونی ھیتان ھوٹوان سوم پشینو بوی بصورت دیگر ھیتان لنک کیاغ کی شینی ھتیتان پشینو بوی\n#لاین کیاغ کی شروع بویان  # کومنٹ جوشونو بوی۔\n#ھیہ کیس سینسیٹو شیر۔\n\n#لینو سورا ریجیکس فریگمنٹو لاکھے. ھیہ لاینو ھموش تان شیکو لاکے کیچہ کہ ھیہ شیر۔</pre>",
        "tag-filter": "[[Special:Tags|Tag]] filter:",
        "tag-filter-submit": "فلٹر",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Tag|Tags}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Tag|Tags}}]]: $2",
        "tags-title": "Tags/ٹیگز",
        "tags-active-yes": "دی",
        "tags-active-no": "نو",
index 7dff56c..2cd4d36 100644 (file)
        "contributions-title": "$1 de iştırakê karberi",
        "mycontris": "İştıraki",
        "contribsub2": "Serba $1 ($2)",
-       "uctop": "(rocane)",
+       "uctop": "rocane",
        "month": "Asme ra (u ravêr):",
        "year": "Serre ra (u ravêr):",
        "sp-contributions-newbies": "Teyna iştırakunê neweqeydbiyaoğu basne",
index dd17c7f..81ff335 100644 (file)
@@ -78,7 +78,7 @@
        "subcategories": "ကၞါင့်ကါင်ဖါသယ်",
        "category-media-header": "အ်ုဆုဂ် \"$1\" ခဝ့် လိက်မေံလ်ုဖး",
        "category-empty": "<em>ဆ်ုဆုဂ်ယိုဝ် ခိင်ခါ့အိုဝ် လိက်မေံၜၠါ်လ်ုဖး လ်ုမွာဲၜး မီဒီယ်ုလ်ုဖး လ်ုအှ်ၜး။</em>",
-       "hidden-categories": "{{PLURAL:$1|အ်ှကှ်ေသူးထါ့ ကဏ္ဍ|အ်ှကှ်ေသူးထါ့ ကဏ္ဍသယ်}}",
+       "hidden-categories": "{{PLURAL:$1|အ်ှကှ်ေသူးထ အ်ုဆောတ်|အ်ှကှ်ေသူးထ အ်ုဆောတ်လ်ုဖး}}",
        "category-subcat-count": "{{PLURAL:$2|ဆ်ုဆုဂ်ယိုဝ် အ်ုဖံင့်လာ ဆ်ုဆုဂ်ကါင်ဖါလှ် အ်ှဝေ့ဍး။ |ဆ်ုဆုဂ်ယိုဝ် ကုံကံင်း $2 ၮါင်း သယ်လ်ုဖးခဝ့် အ်ုဖံင့်လာ {{PLURAL:$1|ဆ်ုဆုဂ်ကါင်ဖါ|ဆ်ုဆုဂ်ကါင်ဖါလ်ုဖး $1 ၮါင်း}} အ်ှဆေဝ်ႋ။}}",
        "category-article-count": "{{PLURAL:$2|ဆ်ုဆုဂ်ယိုဝ် အ်ုဖံင့်လာလိက်မေံလှ်အ်ှ။|ကုံကံင်း $2 ခဝ့်ၮှ် ဖံင့်လာ {{PLURAL:$1|လိက်မေံၜၠါ်|လိက်မေံၜၠါ်လ်ုဖး $1 ၮါင်းၮှ်}} ဆ်ုဆုဂ်ဖိုင်ယိုဝ် အ်ှလှ်။}}",
        "category-file-count": "{{PLURAL:$2|ဆ်ုဆုဂ်ယိုဝ် အ်ုဖံင့်လာလိက်မေံလှ်အ်ှ။|ကုံကံင်း $2 ခဝ့်ၮှ် ဖံင့်လာ {{PLURAL:$1|လိက်မေံၜၠါ်|လိက်မေံၜၠါ်လ်ုဖး $1 ၮါင်းၮှ်}} ဆ်ုဆုဂ်ဖိုင်ယိုဝ် အ်ှလှ်။}}",
        "about": "အ်ုကျံင်",
        "article": "ပ်ုယုံ့ခေါဟ်တင်လိက်မေံၜၠာ်",
        "newwindow": "(ဝင်းဒိုးသင့်လ်ုၮါင်းဝယ် မ်ုပုဂ်ထုင်း)",
-       "cancel": "á\80\99á\80¬á\80\9cá\80¾á\80ºá\80±á\80¡á\80±း",
+       "cancel": "á\80\9cá\80ºá\80¯á\80\99á\80¬á\80\9cá\80­á\80¯á\80\84á\80ºá\81\9cး",
        "moredotdotdot": "ၰိုဲမေံၜၠာ်...",
        "morenotlisted": "စ်ုရင့်ယိုဝ် ဍုဂ်ပါင်အေ့ယာႋ။",
        "mypage": "လက်မေံသး",
        "mytalk": "ဆ်ုခၠါင်ကါင်ကါ",
-       "anontalk": "á\80\86á\80ºá\80¯á\80\81á\81 á\80«á\80\84á\80ºá\80\80á\80\84á\80ºá\80\80á\80¬",
+       "anontalk": "á\80\86á\80ºá\80¯á\80\81á\81 á\80«á\80\84á\80ºá\80\80á\80«á\80\84á\80ºá\80\80á\80«",
        "navigation": "ပ်ုယုံ့",
        "and": "&#32;လ်ု",
        "faq": "ဆ်ုအင်းစာအးသယ်လ်ုဖး",
        "history_short": "မေင်ႋစိင်",
        "history_small": "မေင်ႋစိင်",
        "updatedmarker": "လေဝ်ယောဝ်ႋဝေ့အ်ုလါင်ခါင့်ခါ့ အင်းတင်ထဝေ့",
-       "printableversion": "á\80\95á\80ºá\80¯á\80\9bá\80\84á\80·á\80ºá\80\91á\80\84á\80ºá\82\8bá\81®á\80±á\80\9dá\80ºá\82\8b á\80\97á\80¬á\80¸á\80\9bá\80¾á\80\84á\80ºá\80¸",
-       "permalink": "á\80\86á\80ºá\80¯á\80\9eá\80¯á\80\82á\80ºá\80\80á\81 á\80\9aá\80ºá\80\9eá\80®á\80·",
+       "printableversion": "á\80\95á\80ºá\80¯á\80\9bá\80±á\80\94á\80ºá\82\8bá\80\91á\80\84á\80ºá\80¸á\80\8fá\80±á\80\9dá\80ºá\82\8b á\81\9cá\80«á\82\8bá\80\9aá\80¾á\80±á\80\94á\80ºá\82\8b",
+       "permalink": "á\80¡á\80ºá\80¯á\80\9cá\80\84á\80ºá\80\95á\80ºá\80¯á\80\9aá\80¯á\80¶á\80·á\80\81á\80­á\80¯á\80\84á\80·á\80º",
        "print": "ထုဂ်ထင်းလိက်",
        "view": "မ်ုယောဝ်ႋ",
        "view-foreign": "မ်ုယောဝ်ႋ $1 ဝယ်",
-       "edit": "á\80¡á\80\84á\80ºá\82\8bá\80\90á\80\84á\80ºá\82\8b",
+       "edit": "á\80\9eá\80¶á\80\84á\80·á\80ºá\81\9cá\80¸á\81¯á\80´",
        "edit-local": "အှ်လင်ကၠယ် ဆ်ုတုဂ်ကၠယ် မ်ုအင်းတင်လင်",
        "create": "ပ္တုံထံင်း",
        "create-local": "အှ်လင်ကၠယ် ဆ်ုတုဂ်ကၠယ် မ်ုဆူ့ဍုဂ်လင်",
        "protect_change": "မ်ုအင်းလယ်",
        "unprotect": "ဝီးၜါ်ထ မ်ုအင်းလယ်",
        "newpage": "လိက်မေံသင့်",
-       "talkpagelinktext": "á\80\86á\80ºá\80¯á\80\81á\81 á\80«á\80\84á\80ºá\80\80á\80\84á\80ºá\80\80á\80¬",
-       "specialpage": "လိက်မေံခေါဟ်",
+       "talkpagelinktext": "á\80\86á\80ºá\80¯á\80\81á\81 á\80«á\80\84á\80ºá\80\80á\80«á\80\84á\80ºá\80\80á\80«",
+       "specialpage": "á\80\9cá\80­á\80\80á\80ºá\80\99á\80±á\80¶á\81\9cá\81 á\80«á\80ºá\80\81á\80±á\80«á\80\9fá\80º",
        "personaltools": "ဟ်ုဆ်ုမာ ဆ်ုဖၠင့်",
-       "talk": "á\80\9cá\80\9dá\80ºá\80\91á\80¬á\80\84á\80ºá\80\80á\80\84á\80ºá\80\80á\80¬",
+       "talk": "á\80\9cá\80\9dá\80ºá\80\91á\80«á\80\84á\80ºá\80\80á\80«á\80\84á\80ºá\80\80á\80«",
        "views": "ဟ်ုဍးအ်ုလာၯင်သယ်အး",
-       "toolbox": "á\80\81á\80¼á\80®á\80\81á\80¼á\80¬á\80·á\80\9eá\80\9aá\80º",
+       "toolbox": "á\80\81á\80¼á\80®á\80\81á\80¼á\80¬á\80·á\80\9cá\80ºá\80¯á\80\96á\80¸",
        "tool-link-userrights": "{{GENDER:$1|ၮင့်ဆါႋ}}ကုံလွာဲသယ်လ်ုဖး မ်ုအင်းလယ်",
        "tool-link-userrights-readonly": "{{GENDER:$1|ၮင့်ဆါႋ}}ကုံလွာဲသယ်လ်ုဖး မ်ုယောဝ်ႋ",
        "tool-link-emailuser": "ယိုဝ်{{GENDER:$1|ၮင့်ဆါႋ}}ၮှ် မ်ုသုံ့အီမေံႋ",
        "viewhelppage": "မ်ုယောဝ်ႋဖိုင့်လိက်မေံ",
        "categorypage": "အ်ုဆုဂ်တုဂ်လိက်မေံသယ် မ်ုယောဝ်ႋ",
        "viewtalkpage": "မ်ုယောဝ်ႋ လဝ်ခၠါင်ဆ်ုခၠါင်",
-       "otherlanguages": "á\80\9cá\80­á\80\80á\80ºá\80\86á\80ºá\80¯á\80\81á\81 á\80«á\80\84á\80º á\80¡á\80ºá\80¯á\81¯á\80¬á\81¯á\80¶á\80\84á\80ºá\80\9eá\80\9aá\80º",
+       "otherlanguages": "á\80\9cá\80ºá\80¯á\80¡á\80ºá\80¯á\81°á\80¬á\82\8bá\81°á\80¶á\80\84á\80º á\80\86á\80ºá\80¯á\80\81á\81 á\80«á\80\84á\80ºá\80\98á\80¬á\82\8bá\80\9eá\80¬á\80·",
        "redirectedfrom": "($1 ခဝ့် ပ်ုယုံ့ထာ့)",
        "redirectpagesub": "ထါင်ၮဲအ်ုထိုဝ် လိက်မေံၜၠါ်",
        "redirectto": "က္ဍာထိုဝ်ၜုဂ် -",
        "protectedpage": "လိက်မေံဆ်ုဝီးၜါ်",
        "jumpto": "မ်ုၯယ့်ထါင်ယိုဝ်",
        "jumptonavigation": "ပ်ုယုံ့",
-       "jumptosearch": "á\80¡á\80\84á\80ºá\80¸á\81¯ူ့",
+       "jumptosearch": "á\80¡á\80\84á\80ºá\80¸á\81°ူ့",
        "pool-errorunknown": "လ်ုသီးယာ့ ဆ်ုမး",
        "poolcounter-usage-error": "ဆ်ုသုံႋဆာႋအ်ုမး: $1",
        "aboutsite": "အ်ုကျံင် {{SITENAME}}",
        "aboutpage": "Project:အ်ုၯံင်အ်ုကျံင်",
        "copyrightpage": "{{ns:project}}: ပ္တုံဆာပၞံင့်",
-       "currentevents": "အ်ုခါ့ယိုဝ် ကဲထင်းလေဝ်သယ်",
-       "currentevents-url": "Project:အ်ုခါ့ယိုဝ် ကဲထင်းလေဝ်သယ်",
-       "disclaimers": "á\80\90á\80\84á\80ºá\80\86á\80ºá\80¯á\80\81á\81 á\80«á\80\84á\80º",
+       "currentevents": "အ်ုခါ့ယိုဝ်ဆ်ုကဲထင်းလ်ုဖး",
+       "currentevents-url": "Project:အ်ုခါ့ယိုဝ်ဆ်ုကဲထင်းလ်ုဖး",
+       "disclaimers": "á\81\9cá\80¸á\80\90á\80ºá\80¯á\80\90á\80­á\80\80á\80ºá\80\9cá\80ºá\80¯á\80\96á\80¸",
        "disclaimerpage": "Project:ကိုဝ်မိင်ကိုဝ်စိင် ၜးတ်ုဒှ်",
-       "edithelp": "á\80¡á\80\84á\80ºá\82\8bá\80\90á\80\84á\80ºá\82\8b á\80\86á\80ºá\80¯á\80\99á\80¬á\81\9cိုင်",
+       "edithelp": "á\80\9eá\80¶á\80\84á\80·á\80ºá\81\9cá\80¸á\81¯á\80´ á\80\99á\80¬á\81\9cá\80­á\80¯á\80\84á\80ºá\80\99á\80¬á\80\86ိုင်",
        "helppage-top-gethelp": "မာၜိုင်မာဆိုင်",
-       "mainpage": "á\80\9cá\80­á\80\80á\80ºá\80\99á\80±á\80¶á\81\9cá\81 á\80«á\80ºá\80\81á\80±á\80«á\80\9fá\80º",
-       "mainpage-description": "á\80\9cá\80\80á\80ºá\80\99á\80±á\80¶á\80\9aá\80¬့",
+       "mainpage": "á\80\9cá\80­á\80\80á\80ºá\80\99á\80±á\80¶á\80\81á\81 á\80®á\80·",
+       "mainpage-description": "á\80\9cá\80­á\80\80á\80ºá\80\99á\80±á\80¶á\80\81á\81 á\80®့",
        "portal": "အ်ုထိုဝ်အ်ုမေံလင်",
        "portal-url": "Project:အ်ုထိုဝ်အ်ုမေံလင်",
-       "privacy": "á\80\9fá\80ºá\80¯á\80\86á\80ºá\80¯á\80\99á\80¬á\80\9fá\80ºá\80¯ á\80\86á\80ºá\80¯á\80\96á\80¶á\80\84á\80ºá\80\96á\81 á\80±á\80\9dá\80º",
+       "privacy": "á\81\9cá\80¸á\80\86á\80«á\80\84á\80·á\80ºá\80\9fá\80ºá\80¯á\80\80á\80ºá\80¯á\80\86á\80¬á\82\8b á\80\86á\80ºá\80¯á\80\96á\80¶á\80\84á\80ºá\80\96á\81 á\80±á\80",
        "privacypage": "Project:ၜးဆိုင့်ဟ်ုဆ်ုမာ ပဝ်လ်ုဆီ",
        "ok": "အိုဝ်ကေ",
        "retrievedfrom": "မာၮေဝ်လှ် \"$1\"ခဝ့်",
        "youhavenewmessagesfromusers": "{{PLURAL:$4|ၮ်ုအ်ှဝယ်}} {{PLURAL:$3|ၰာၰံင်ဆ်ုသုံ့ဆာ|ဆ်ုသုံ့ဆာသယ်လ်ုဖး $3 ၯာႋ}} လ်ုခဝ့် $1 အ်ှဝေ့ဆေဝ်ႋလှ် ($2)။",
        "newmessageslinkplural": "{{PLURAL:$1|လိက်ထိုင့်သင့် လ်ုၜိင်း|999=လိက်ထိုင့်သင့် အ်ုသင့်သယ်လ်ုဖး}}",
        "newmessagesdifflinkplural": "ဆ်ုအင်းလယ် $1 {{PLURAL:$1|ၮါင်း|ၮါင်းလ်ုဖး}}",
-       "editsection": "á\80¡á\80\84á\80ºá\82\8bá\80\90á\80«á\80\84á\80º",
-       "editold": "á\80¡á\80\84á\80ºá\82\8bá\80\90á\80\84á\80ºá\82\8b",
+       "editsection": "á\80\9eá\80¶á\80\84á\80·á\80ºá\81\9cá\80¸á\81¯á\80´",
+       "editold": "á\80\9eá\80¶á\80\84á\80·á\80ºá\81\9cá\80¸á\81¯á\80´",
        "viewsourceold": "မ်ုယောဝ်ႋ အ်ုထိုဝ်",
-       "editlink": "á\80¡á\80\84á\80ºá\82\8bá\80\90á\80\84á\80ºá\82\8b",
+       "editlink": "á\80\9eá\80¶á\80\84á\80·á\80ºá\81\9cá\80¸á\81¯á\80´",
        "viewsourcelink": "မ်ုယောဝ်ႋ အ်ုထိုဝ်",
        "editsectionhint": "ကၞါင့်ယိုဝ် မ်ုအင်းတင်: $1",
        "toc": "ပ်ုယုံ့ခေါဟ်တင်",
-       "showtoc": "á\80\8dá\80¯á\80\82á\80ºá\81®ဲ",
+       "showtoc": "á\80\8dá\80¬á\80\8fဲ",
        "hidetoc": "အ်ှသူး",
        "collapsible-collapse": "မ်ုပေဝ်ႋက္ဍာ",
-       "collapsible-expand": "á\80\9cá\80\9dá\80ºá\80\9cá\80²á\80¬",
+       "collapsible-expand": "á\80\99á\80¬á\80\9cá\80¬á\80²",
        "confirmable-confirm": "{{GENDER:$1|ၮ်ု}} ထီ့ဆာႋဝး?",
        "confirmable-yes": "မွာဲ",
        "confirmable-no": "လ်ုမာၜး",
        "page-atom-feed": "Atom feed $1 ဍူ",
        "red-link-title": "$1 (လိက်မေံ လ်ုအ်ှ​ဍေၜး)",
        "nstab-main": "လက်မေံသး",
-       "nstab-user": "á\80\86á\80ºá\80¯á\80\9eá\80¯á\80¶á\82\8bá\80\80á\80ºá\80¯á\80\86á\80¬á\82\8b á\80\9cá\80­á\80\80á\80ºá\80\99á\80±á\80¶á\81\9cá\81 á\80¬်",
+       "nstab-user": "á\80\86á\80ºá\80¯á\80\9eá\80¯á\80¶á\82\8bá\80\8fá\80\84á\80·á\80ºá\80\86á\80¬á\82\8b á\80\9cá\80­á\80\80á\80ºá\80\99á\80±á\80¶á\81\9cá\81 á\80«်",
        "nstab-media": "မီဒီယ်ုလိက်မေံၜၠာ်",
-       "nstab-special": "လိက်မေံခေါဟ်",
+       "nstab-special": "á\80\9cá\80­á\80\80á\80ºá\80\99á\80±á\80¶á\81\9cá\81 á\80«á\80ºá\80\81á\80±á\80«á\80\9fá\80º",
        "nstab-project": "ပ်ုရောဴဂျက်လိက်မေံၜၠါ်",
        "nstab-image": "ဖိုင်",
        "nstab-mediawiki": "လိက်ဖၠုံး",
        "nstab-template": "တန်ပ်ုလိတ်",
        "nstab-help": "ဆ်ုမာၜိုဝ်မာဆိုင် လိက်မေံၜၠာ်",
        "nstab-category": "အ်ုဆုဂ်တုဂ်",
-       "mainpage-nstab": "á\80\9cá\80­á\80\80á\80ºá\80\99á\80±á\80¶á\80\9aá\80¬့",
-       "nosuchspecialpage": "á\80\97ေ့ယိုဝ်သိုဝ် လိက်မေံၜၠါ်ခေါဟ် လ်ုအှ်ၜး",
+       "mainpage-nstab": "á\80\9cá\80­á\80\80á\80ºá\80\99á\80±á\80¶á\80\81á\81 á\80®့",
+       "nosuchspecialpage": "á\81\9cေ့ယိုဝ်သိုဝ် လိက်မေံၜၠါ်ခေါဟ် လ်ုအှ်ၜး",
        "nospecialpagetext": "<strong>ၮ်ုယိုဝ် လ်ုထီ့ဆာ့ၜး လိက်မေံခေါဟ်လ်ုၮါင်းအိုဝ် အင်းကိင်ဖှ်ေထဆေဝ်ႋလှ်။</strong>\n\nထီ့ဆာ့ လိက်မေံခေါဟ် စ်ုရင့်သယ် [[Special:SpecialPages|{{int:specialpages}}]] ခဝ့် ၮ်ုဍးၮေဝ်လှ်။",
        "error": "ဆ်ုမး",
        "databaseerror-error": "အ်ုမး: $1",
        "badtitle": "လိက်မေံဆ်ုနာႋ",
        "badtitletext": "အင်းကိင်ႋလင်ထ လိက်မေံၜၠါ် ခေါဟ်တင်ၮ်ှ လ်ုဖံင်ပၞံင့် (လ်ု) လ်ုအှ်မိင်ၜး (လ်ု) ၰာၰံင်ဘာႋသာ့လ်ုဖး(inter-language or inter-wiki title)အိုဝ် ထိုဝ်ၜုဂ်လင့်မးဝေ့လှ်။",
-       "viewsource": "á\80\99á\80ºá\80¯á\80\9aá\80±á\80¬á\80\9dá\80ºá\82\8bá\80¡á\80ºá\80¯á\80\9dá\80®á\80\81á\81\9eá\80¬",
+       "viewsource": "á\80\99á\80ºá\80¯á\80\9aá\80±á\80¬á\80\9dá\80ºá\82\8bá\80¡á\80ºá\80¯á\80\91á\80«á\80º",
        "viewsource-title": "$1အှ် အ်ုထိုဝ် မ်ုယောဝ်ႋ",
        "viewsourcetext": "လိက်မေံခေါဟ်အိုဝ် အ်ုထိုဝ် ယောဝ်ႋၯံင် ကေဝ်ဍံင်ၮေဝ်လှ်။",
-       "userlogin-yourname": "က်ုဆာမိင်",
+       "yourname": "ဆ်ုသုံႋဆာႋမိင်:",
+       "userlogin-yourname": "ဆ်ုသုံႋဆာႋမိင်",
        "userlogin-yourname-ph": "အွးလင်ႋလ်ုၮ်ုမိင်ႋ",
        "userlogin-yourpassword": "ၜီးၜါ်",
        "userlogin-yourpassword-ph": "ဆူ့လင်ကီ ၮင့်ဆါႋၜီးၜါ်",
        "loginsuccess": "'''ၮ်ုယိုဝ် {{SITENAME}} အိုဝ် \"$1\" သိုဝ် Login အွးလင်ၯံင်ယုဂ်။'''",
        "mailmypassword": "ထုဂ်ဆိင့် ဝီးၜါ်ဖၠုံး",
        "loginlanguagelabel": "လိက်ဆ်ုခၠါင် $1",
-       "pt-login": "မ်ုအွလင်",
+       "pt-login": "á\80\99á\80ºá\80¯á\80¡á\80½á\80¸á\80\9cá\80\84á\80º",
        "pt-login-button": "အွးလင်",
        "pt-createaccount": "မုတါင်ထါင် ဟ်ုဆ်ုမာ",
        "pt-userlogout": "တါ်ထင်း",
        "botpasswords-label-delete": "ထုဂ်ဆိင့်",
        "botpasswords-label-resetpassword": "ထုဂ်ဆိင့် ဝီးၜါ်ဖၠုံး",
        "passwordreset": "ၜီးၜါ်သင့် မ်ုအင်းတင်",
+       "passwordreset-username": "ဆ်ုသုံႋဆာႋမိင်:",
+       "changeemail-none": "(ပၠဝ်ပြေ)",
        "bold_sample": "လိက်ဖၠုံးသိုင့်",
        "bold_tip": "လိက်ဖၠုံးသိုင့်",
        "italic_sample": "လိက်ဖၠုံးပ်ု",
        "media_tip": "File လင့်",
        "sig_tip": "မူႋသင့်ခိင်ႋခါ့ၮဲဖှ်ေ ၮ်ုစူးဍံင်",
        "hr_tip": "ပၞံင့်ထီ့ဖါ (အင်းကုံဆၟိုဝ်လာႋ)",
-       "summary": "á\80¡á\80ºá\80¯á\80\81á\80\9dá\80·á\80ºá\80\95á\80ºá\80¯á\80\9aá\80\9dá\80·á\80ºá\80\91á\80\84á\80ºá\82\8b",
-       "minoredit": "á\80\9cá\80ºá\80¯á\80\81á\80±á\80«á\80\9fá\80ºá\80\8dá\80±á\80¬á\80\9fá\80ºá\81\9cá\80¸ á\80\86á\80ºá\80¯á\80¡á\80\84á\80ºá\80¸á\80\9cá\80ºá\80¯",
+       "summary": "á\80¡á\80ºá\80¯á\80¡á\80­á\80\84á\80ºá\80¸",
+       "minoredit": "á\80¡á\80ºá\80¯á\80\9aá\80­á\80¯á\80\9dá\80º á\80\99á\80½á\80¬á\80²á\80\9dá\80±á\80·á\80\86á\80ºá\80¯á\80¡á\80\84á\80ºá\80¸á\80\90á\80«á\80\84á\80ºá\80\96á\80±á\80«á\80\9fá\80ºá\80\9cá\80¾á\80º",
        "watchthis": "လိက်မေံယိုဝ် မ်ုအင်းခိုဝ်ယောဝ်ႋ",
-       "savearticle": "လိက်မေံမ်ုအင်းလုက်ခွိက်",
+       "savearticle": "လိက်မေံၜၠါ်ယိုဝ် မ်ုပ္ကုံ",
+       "savechanges": "ဆ်ုအင်းတါင်လ်ုဖးဏှ် မ်ုပ္ကုံ",
+       "publishpage": "မ်ုသုံ့ထင်း လိက်မေံၜၠါ်",
+       "publishchanges": "ဆ်ုအင်းတါင်သယ် မ်ုသုံ့ထင်း",
        "preview": "မ်ုယောဝ်ႋထါင်",
-       "showpreview": "á\80\99á\80ºá\80¯á\81®á\80²á\80\96á\80¾á\80ºá\80±á\80\86á\80ºá\80¯á\80\90á\80¯á\80\82á\80ºá\80\80á\81 á\80\9a်",
-       "showdiff": "á\80\99á\80ºá\80¯á\81®á\80²á\80\96á\80¾á\80ºá\80± á\80\86á\80ºá\80¯á\80¡á\80\84á\80ºá\80¸á\80\9cá\80\9aá\80ºá\80\9eá\80\9a်",
+       "showpreview": "á\80\99á\80ºá\80¯á\80\8dá\80¯á\80\82á\80ºá\80\8fá\80²á\80¡á\80ºá\80¯á\80\8dá\80®á\80¸á\80¡á\80ºá\80¯á\80\8dá\80¶á\80\84်",
+       "showdiff": "á\80\99á\80ºá\80¯á\80\8dá\80¯á\80\82á\80ºá\80\8fá\80² á\80\86á\80ºá\80¯á\80¡á\80\84á\80ºá\80¸á\80\90á\80«á\80\84်",
        "anoneditwarning": "<strong>ဖှ်ေဆ်ုတ်ုဒှ် - </strong> ၮ်ုယိုဝ် လော့ဂ်အင် လ်ုအွးထၜး။ ၮ်ုအင်းတင်စှ်ၜိုဝ် ၮ်ုအိုင်ပီလင်ဍာၮှ် မွာဲဖၠုံၯေဝ် ဍးဝေ့ဆေဝ်ႋလှ်။ လ်ုမွာဲ ၮ်ု <strong>[$1 လော့ဂ်အင်အွး]</strong> လ်ုမွာဲၜး <strong>[$2 ၮါင်ႋဆါ ပ္တုံ]</strong>ဆှ်ၜိုဝ်၊ ၮ်ုအင်းတင်ဆ်ုယိုဝ် ၮ်ုမိင်လ်ု ပ္ကုံမ်ုမာၮါင်းထလှ်။",
        "blockedtext": "<strong>ၮဲယိုဝ် ဆ်ုသုံ့ဆာအ်ုမိင် လ်ုမွာဲၜး အိုင်ပီလင်ဍာအိုဝ် ခၠာၜိင်ႋ ခံ\nထဆေဝ်ႋလှ်ဆှ်။</strong>\n\nဆ်ုခၠာၜိင်ႋယိုဝ် $1 ခဝ့် အင်းတါင်ထဆေဝ်ႋလှ်။\nအ်ုခဝ့်ပ်ုယဝ့်ၮှ် <em>$2</em> ဆေဝ်ႋလှ်။\n\n* ခၠာၜိင်ႋ ပ္တုံခါ့: $8\n* ခၠာၜိင် အ်ုယှောဟ်မ်ုလုက်ခါ့: $6\n* အ်ုခဝ့်ပ်ုယဝ့် blockee: $7\n\nၮ်ုယိုဝ် ဆ်ုခၠာၜိင်ႋၯင်း ဖှ်ေဆ်ုခၠါင် $1 လ်ုမွာဲၜး ၰာၰံင် [[{{MediaWiki:Grouppage-sysop}}|စီမံခန့်ခွဲသူ]] အိုဝ် ဖှ်ေလင်ပ်ုၮံင်ၮေဝ်။\nၮ်ုခဝ့် [[Special:Preferences|ၮ်ုဆ်ုမာ မလုဲႋဆ်ုသယ်လ်ုဖး]]တၞယ် ထီ့ဆာ့ အီးမေးလင်ဍာၮှ် လ်ုဆူ့ထၰင်စှ်ၜိုဝ် \"{{int:emailuser}}\" ဆ်ုသုဂ်ကၞယ် မ်ုအင်းသုံ့ လ်ုၮေဝ်ၜး။ ဗေ့ၮှ်သိုဝ် ဆ်ုတုဂ်ကၞယ်ၮှ် လ်ုခၠာၜိင်ႋထဝးမာႋ မာဖှ်ေမ်ုၮေဝ်ဆေဝ်ႋလှ်။\nၮ်ု အ်ုခါ့အိုဝ် အိုင်ပီလင်ဍာၮှ် $3 မွာဲၯံင်၊ ဆ်ုခၠာၜိင်ႋအိုင်ဒီၮှ် #$5 ဆေဝ်ႋလှ်။\nၮ်ုမ်ုမာ အင်းစာသယ်လ်ုဖး အ်ုဖံင့်ခေါဟ်၀ယ် အ်ုဍံင်လုက်ဆိင့် ဆူ့ဖှ်ေလာဆေဝ်ႋ။",
        "loginreqlink": "အွးလင်",
        "updated": "(တါင်သင့်ၰေဝ်)",
        "previewnote": "<strong>အ်ုယိုဝ် အ်ုဍံင် ဟ်ုယောဝ်ႋဍာလဝ့်ၮှ် သာ့ၮင်လ်ုၯေဝ်။</strong>\nၮ်ုအင်းလဲါထသယ်ၮှ် လ်ုသိုင့်ကုံဝးဍာ်ၜး။",
        "continue-editing": "မ်ုလေဝ် ဆ်ုအင်ႋတင်ႋလင်ႋ",
-       "editing": "$1 ၮှ် အင်းတင်ဖှ်ေဝေ့",
+       "editing": "ဆ်ုသံင့်ၜးၯဴ $1",
        "creating": "တင်ႋထုင်း $1",
        "editingsection": "$1 (ကၞါင့်) အိုဝ် အင်းတင်ဖှ်ေဝေ့။",
        "templatesused": "လိက်မေံၜၠါ်ယိုဝ် အင်းမာၮေဝ်ထ {{PLURAL:$1|တန်ပ်ုလိတ်|တန်ပ်ုလိတ်လ်ုဖး}} -",
        "permissionserrorstext-withaction": "အ်ုဖံင့်လာ အ်ုၯာင်းအ်ုကျံင် {{PLURAL:$1|ၮါင်း|ၮါင်းလ်ုဖး}} အိုဝ် $2 ၯင်း ဆ်ုပၠယ်တဝ်ႋလ်ုအှ်ၜး -",
        "recreate-moveddeleted-warn": "'''ဆ်ုတ်ုတိုက်။ ၮ်ုယိုဝ် အှ်ခါ့ အင်းဆဆိင့်ထ လိက်မေံၜၠါ်လ်ုၮါင်းၮှ် ထါင်အင်းတင်ဆေဝ်ႋ။'''\n\nၮ်ုၮှ် လိက်မေံၜၠါ်ယိုဝ် သံင့်လေဝ် မ်ုအင်းတင်ၯင်း မ်ုၰီၯံင် လ်ုၰီၜးၮှ် ခၠိုင်လင်သာ။\nအင်းဆိင့်ထ လ်ု လ်ုသုဲ့ထသိုဝ် ဆ်ုမာၮါင်းၮှ် ၮှ်အ်ုၯင်း  ထိုဝ်ၜုင်ၯင်း ၮဲဖၠဟ်ထဆေဝ်ႋလှ်။",
        "moveddeleted-notice": "လိက်မေံယိုဝ် ဆူ့ဆိင့်ထဆေဝ်ႋလှ်။\nဆ်ုဆူ့ဆိင့်၊ ခ်ုဝုင်ႋလ်ု အ်ုလါင်းအင်းလဲါသယ် ဆ်ုမာၮါင်းထးသယ် မာအ်ုထိုဝ်ၮေဝ် ဖံင့်လာ့ဝယ် ၮဲဖၠဟ်ထဆေဝ်ႋလှ်။",
-       "content-model-wikitext": "ဝီကီလိက်ဖၠုံး",
+       "content-not-allowed-here": "\"$1\" ပ်ုယုံ့ခေါဟ်တင်ဏှ် [[$2]] လိက်မေံၜၠါ်ယိုဝ်ခဝ့် လ်ုပၠယ်တဝ်ၜး။",
+       "content-model-wikitext": "ဝီးကေဝ်လိက်ယးထိုင့်",
        "undo-failure": "အွးလင်ပ္တုံဆာ အင်းတင်ဖှ်ေအ်ုခေါဟ်ကျံင် ဆ်ုအင်းတင်သယ် ထါင်အင်းလဲါ လ်ုၮေဝ်ၜး။",
        "viewpagelogs": "လိက်မေံၜၠါ်ယိုဝ်ၯင်း ဆ်ုမာၮါင်းသယ် မ်ုယောဝ်ႋ",
        "currentrev-asof": "$1 ခဝ့် လါင်းခါင့်ထုက် အင်းတင်ထါင်",
        "history-feed-description": "ဝီကီဖံင့်ခေါဟ် လိက်မေံၜၠါ်ယိုဝ် ဆ်ုအင်းတင်မေဝ်ႋစိင်",
        "history-feed-item-nocomment": "$2 ဝယ် $1",
        "rev-delundel": "ဟ်ုယောဝ်ႋၯင် မ်ုအင်းလယ်",
+       "revdelete-show-file-submit": "မွာဲ",
        "mergehistory-reason": "ဖှ်ေအ်ုၯာင်ႋအ်ုကျင်း:",
        "mergelog": "အင်းကုံ စ်ုရင့်",
        "history-title": "\"$1\"ၮှ် ဆ်ုအင်းတင် မေဝ်ႋစိင်",
        "searchall": "လုက်ဆိင့်",
        "search-showingresults": "{{PLURAL:$4|<strong>$3</strong> ၏ <strong>$1</strong> အ်ုတင်ၮေဝ်ႋ|<strong>$3</strong> ၏ <strong>$1 - $2</strong> အ်ုတင်ၮေဝ်ႋလ်ုဖး}}",
        "search-nonefound": "အင်းၰူ့ဆ်ုပ်ုယောဝ်ႋလ်ုၜးဍံင်သယ်လ်ုဖး အ်ုတင်ၮေဝ်လ်ုအှ်ၜးႋ။",
+       "powersearch-togglelabel": "မ်ုဆၟိုဝ်:",
        "powersearch-toggleall": "လုက်ဆိင့်",
        "powersearch-togglenone": "လ်ုအှ်မိင်ၜး",
-       "preferences": "တုဂ်ၮေဝ်ႋအ်ုဍံင်လ်ုဖး",
-       "mypreferences": "မ်ုလုဲႋၯင်းလ်ုဖး",
+       "preferences": "ဆ်ုလုဲႋလ်ုဖး",
+       "mypreferences": "မ်ုလုဲႋၯံင်လ်ုဖး",
+       "prefs-user-pages": "ဆ်ုသုံႋဏင့်ဆာႋ လိက်မေံၜၠါ်လ်ုဖး",
+       "prefs-watchlist": "ခိုဝ်ယောဝ်ႋစ်ုရင့်",
+       "username": "{{GENDER:$1|ဆ်ုသုံႋဆာႋမိင်}}:",
        "editusergroup": "မ်ုၮဲဖှ်ေ ဆ်ုသုံႋဆာႋကုံရွာဲ",
        "group-user": "ဆ်ုသုံႋဆာႋလ်ုဖး",
-       "group-autoconfirmed": "အ်ုဆ်ုမာအ်ုလ်ုအ်ု ဆ်ုထီ့ဆာႋထ ဆ်ုသုံႋဆာႋလ်ုဖး",
+       "group-autoconfirmed": "အ်ုဆ်ုမာအ်ု ဏေဝ်ႋၯုင်ႋခိုင့်ထ ဆ်ုသုံႋဆာႋလ်ုဖး",
        "group-bot": "ဘေါႋလ်ုဖး",
        "group-sysop": "ပိုင်ဆ်ုပျာဆ်ုလ်ုဖး",
        "grouppage-user": "{{ns:project}}:ဆ်ုသုံႋဆာႋလ်ုဖး",
        "action-edit": "လိက်မေံယိုဝ် မ်ုအင်းတါင်",
        "action-createaccount": "ဆ်ုအင်းသုံ့က်ုဆာဆ်ုမာ မ်ုအင်းတင်",
        "enhancedrc-history": "မေင်ႋစိင်",
-       "recentchanges": "အ်ုခါ့ယိုဝ် ဆ်ုအင်းလယ်",
+       "recentchanges": "အ်ုခါ့ယိုဝ် ဆ်ုအင်းလယ်လ်ုဖး",
        "recentchanges-legend": "အ်ုခါ့ ဆ်ုအင်းလယ်ၯင်း လုဲႋသယ်လ်ုဖး",
        "recentchanges-summary": "လိက်မေံၜၠါ်ယိုဝ် ဝီကီခဝ့် အ်ုဆိုင့်အ်ုထဝ်ႋ မ်ုထါင်အင်းၰူ့အ်ုထိုဝ်",
        "recentchanges-noresult": "ပ္တုံထအ်ုခါ့ထံင် ခိင်ခါ့ယိုဝ် ဆ်ုအင်းတင်ဆ်ုတုဂ်ကၠယ်လ်ု ဖံင်ဆ်ုအင်းလဲါ လ်ုအှ်ၜး။",
        "recentchanges-feed-description": "လိက်မေံၜၠါ်ယိုဝ် ဝီကီခဝ့် အ်ုဆိုင့်အ်ုထဝ်ႋ မ်ုထါင်အင်းၰူ့အ်ုထိုဝ်",
        "recentchanges-label-newpage": "ဆ်ုအင်းတင်ႋယိုဝ်တါင်လင်ႋဝေ့လိက်မေံသင့်ဆေဝ်လ်ှ။",
-       "recentchanges-label-minor": "á\80\9cá\80ºá\80¯á\80\81á\80±á\80«á\80\9fá\80ºá\80\8dá\80±á\80¬á\80\9fá\80ºá\81\9cá\80¸ á\80\86á\80ºá\80¯á\80¡á\80\84á\80ºá\80¸á\80\9cá\80ºá\80¯",
+       "recentchanges-label-minor": "á\80¡á\80ºá\80¯á\80\9aá\80­á\80¯á\80\9dá\80º á\80\99á\80½á\80¬á\80²á\80\9dá\80±á\80·á\80\86á\80ºá\80¯á\80¡á\80\84á\80ºá\80¸á\80\90á\80«á\80\84á\80ºá\80\96á\80±á\80«á\80\9fá\80ºá\80\9cá\80¾á\80º",
        "recentchanges-label-bot": "ဆ်ုအင်ႋတင်ႋယိုဝ် ဘော့မာဝေ့ဆေဝ်ႋလ်ှ",
        "recentchanges-label-unpatrolled": "ဆ်ုအင်ႋတင်ႋယိုဝ် လ်ုအင်းခေဝ်ယောဝ်ႋလ်ုဆၟိုဝ်ၯံင်ဍေၜး",
        "recentchanges-label-plusminus": "လိက်မေံၜၠါ်ယိုဝ် အ်ုဖံင့်လာ ဘိုက်အ်ုလူးအ်ုၯင့် အင်းလဲါထဆေဝ်ႋလှ်",
        "rcnotefrom": "ဖံင့်လာႋသယ်ၮှ် <strong>$3၊ $4</strong> ခဝ့် ၯံင် {{PLURAL:$5|ဆ်ုအင်းလဲါ|ဆ်ုအင်းလဲါလ်ုဖး}} မွာဲဆေဝ်ႋ  (<strong>$1</strong> ခဝ့်ဍာ် ၮဲဖှ်ေထ)။",
        "rclistfrom": "$3 $2 ခဝ့်ၯံင် ဆ်ုအင်းလယ်သင့်သယ်ၮှ် မ်ုၮဲဖှ်ေ",
        "rcshowhideminor": "အ်ုဍံင်လ်ုဍောဟ် ဆ်ုအင်းတင်ႋ $1 ၯင်း",
-       "rcshowhideminor-show": "á\80\8dá\80¯á\80\82á\80ºá\81®ဲ",
+       "rcshowhideminor-show": "á\80\8dá\80¬á\80\8fဲ",
        "rcshowhideminor-hide": "အ်ှသူး",
        "rcshowhidebots": "ဘော့သယ် $1သိုဝ်",
-       "rcshowhidebots-show": "á\80\8dá\80¯á\80\82á\80ºá\81®ဲ",
+       "rcshowhidebots-show": "á\80\8dá\80¬á\80\8fဲ",
        "rcshowhidebots-hide": "အ်ှသူး",
        "rcshowhideliu": "တံင်ထာ့အ်ှက်ုစာ စ်ုလေဝ်ကၠယ် $1",
-       "rcshowhideliu-show": "á\80\8dá\80¯á\80\82á\80ºá\81®ဲ",
+       "rcshowhideliu-show": "á\80\8dá\80¬á\80\8fဲ",
        "rcshowhideliu-hide": "အ်ှသူး",
        "rcshowhideanons": "အ်ုမိင်လ်ုအှ် ဆ်ုသုံက်ုဆာႋ $1ၮှ်",
-       "rcshowhideanons-show": "á\80\8dá\80¯á\80\82á\80ºá\81®ဲ",
+       "rcshowhideanons-show": "á\80\8dá\80¬á\80\8fဲ",
        "rcshowhideanons-hide": "အှ်သူး",
        "rcshowhidepatr": "ခိုဝ်ယောဝ်ဆ်ုအင်ႋတင်ႋ $1အိုဝ်",
        "rcshowhidemine": "$1 ၮင့်ဆါႋဆ်ုအင်ႋတင်ႋ",
-       "rcshowhidemine-show": "á\80\8dá\80¯á\80\82á\80ºá\81®ဲ",
+       "rcshowhidemine-show": "á\80\8dá\80¬á\80\8fဲ",
        "rcshowhidemine-hide": "အ်ှသူး",
        "rclinks": "$2 မူႋသင့်ဍာဲခါ့ လါင်းခါင့်ဆ်ုအင်းတင်ႋ $1 ၮါင်းၮှ် မ်ုၮဲဖှ်ေ",
        "diff": "လ်ုၜးဍံင်",
        "hist": "လိက်အုဂ်ကေဝ်",
        "hide": "အ်ှသူး",
-       "show": "á\80\8dá\80¯á\80\82á\80ºá\81®ဲ",
+       "show": "á\80\8dá\80¬á\80\8fဲ",
        "minoreditletter": "အ်ုဍံင်လ်ုဍောဟ်",
        "newpageletter": "အ်ုသင့်",
        "boteditletter": "ဘော့",
        "recentchangeslinked-to": "ပေးထားသော စာမျက်နှာများအစား လင့်များနှင့် ဆက်စပ်နေသာ စာမျက်နှာများ၏ အပြောင်းအလဲများကို ပြရန်",
        "upload": "မ်ုပ္တုံင်ထါင်ဖိုင်ႋ",
        "uploadlogpage": "ဖိုင်ႋတုံထါင်း ဆ်ုမာၮါင်း",
-       "filedesc": "အ်ုခဝ့်ပ်ုယဝ့်ထင်ႋ",
+       "filedesc": "အ်ုအိင်း",
+       "upload-form-label-infoform-description": "ဆ်ုဏဲဖၠဟ်",
        "license": "လိုင်စင်ပၞံင့်ပ္တုံ",
        "license-header": "လိုင်စင်ပၞံင့်ပ္တုံ",
        "imgfile": "ဖိုင်ႋ",
        "listfiles": "ဖိုင်ႋစ်ုရင့်",
+       "listfiles_description": "ဆ်ုဏဲဖၠဟ်",
+       "listfiles-latestversion-yes": "မွာဲ",
        "file-anchor-link": "ဖိုင်",
        "filehist": "ဃွှာန့်မေင်ႋစိင်",
        "filehist-help": "ဖိုင်ၮ်ှ ဗေ့မူႋသင့်သိုဝ် မ်ုဍးၯင်း မူႋသင့်/ခိင့်ခါ့ လ်ုမိင်မိင်ၮ်ှ ၜါ်လင်။",
        "filehist-revert": "ၜၠာ်က္ဍာ",
-       "filehist-current": "á\80\9cá\80ºá\80¯á\81®ီမူႋအ်ုခါ့ယိုဝ်",
+       "filehist-current": "á\80\9cá\80ºá\80¯á\80\8fီမူႋအ်ုခါ့ယိုဝ်",
        "filehist-datetime": "မူႋသင့်/ခိင့်ခါ့",
        "filehist-thumb": "လိက်ခၠံင့်ဆါႋ",
        "filehist-thumbtext": "$1 သင့်ခါ့ မူအ်ုၯင်း ဍာၮဲအ်ုဍီးဍံင်ၯင်ဃွှာင်",
        "sharedupload-desc-here": "ဖိုင်အ်ယိုဝ် လ်ု $1 ခဝ့်ၯင်ႋ အ်ုၰာၰံင်ပ်ုရာ်ဂျက်ခဝ့်ၮ်ှ သုဲးသီးသုံးသှ်ေဆေဝ်ႋလှ်။\nအ်ုဝေ့ [$2 ဖိုင်လိက်မေံအ်ုကျံင်] ဝယ် ဖှ်ေထာ့ဝေ့ၮ်ှ ဗေ့အ်ုဖၠင်လာႋသၠင်ဆေဝ်ႋလ်ှ။",
        "filepage-nofile": "လ်ုမၠိင်ယိုဝ် ဖိုင်ႋမိင်မိင် လ်ုအှ်ၜး။",
        "upload-disallowed-here": "ၮ်ု File အ်ုယိုဝ် ဖိုဟ်ထိုင့်သာ ကီလ်ုၮေဝ်ၜး။",
-       "randompage": "á\80\9cá\80ºá\80¯á\80\9cá\80­á\80\80á\80ºá\80\99á\80±á\80¶á\80\99á\80­á\80\84á\80ºá\80\99á\80­á\80\84်",
+       "randompage": "á\80\86á\80ºá\80¯á\80\90á\80¶á\80\84á\80ºá\80\8fá\80¶á\80\84á\80ºá\80¸á\80\9cá\80­á\80\80á\80ºá\80\99á\80±á\80¶á\81\9cá\81 á\80«်",
        "statistics": "စ်ုရင့်ကါင်ကါ",
        "double-redirect-fixer": "ထါင်ၮဲအ်ုထိုဝ်အင်းတင်ဆာ",
        "nbytes": "$1 {{PLURAL:$1|ဘိုက်|ဘိုက်လ်ုဖး}}",
        "nmembers": "ကုံလွာဲဆာ $1 {{PLURAL:$1|ၮါင်း|ၮါင်းလ်ုဖး}}",
-       "prefixindex": "á\80¡á\80ºá\80¯á\80\99á\80±á\80¶á\80\9aá\80¬á\82\8bá\80\81á\80\9dá\80·á\80º prefix á\80¡á\80¾á\80º á\80\9cá\80­á\80\80á\80ºá\80\99á\80±á\80¶á\81\9cá\81 á\80«á\80º လုက်ဆိင့်",
+       "prefixindex": "á\80¡á\80ºá\80¯á\80\99á\80±á\80¶á\80\9aá\80¬á\80· prefix á\80¡á\80¾á\80º á\80\9cá\80­á\80\80á\80ºá\80\99á\80±á\80¶á\81\9cá\81 á\80«á\80ºလုက်ဆိင့်",
        "listusers": "ဆ်ုအင်းသုံ့ဆာစ်ုရင့်",
+       "usercreated": "$1 $2 အ်ုခါ့ဏှ် {{GENDER:$3|ပ္တံင်ထ​ဝေ့လှ်}}",
        "newpages": "လိက်မေံသင့်",
+       "newpages-username": "ဏင့်ဆာႋမိင်:",
        "move": "မ်ုသုဂ်",
        "pager-newer-n": "{{PLURAL:$1|အ်ုလါင်းလီထုက် လ်ုၮါင်း|အ်ုလါင်းလီထုက် $1 ၮါင်း}}",
        "pager-older-n": "{{PLURAL:$1|အ်ုလါင်းလီထုက် လ်ုၮါင်း|အ်ုလါင်းလီထုက် $1 ၮါင်း}}",
        "booksources-search": "အင်းၰူ့",
        "specialloguserlabel": "မာထါင်ဆာ:",
        "speciallogtitlelabel": "အ်ုခေါဟ်ဍံင် (ခေါဟ်တင် အိုဝ် {{ns:user}}:ဆ်ုလေါဟ်ကုဲက်ုဆာၯင်း ဆ်ုအင်းသုံ့မၠိင်):",
-       "log": "á\80\80á\80ºá\80¯á\80\90á\80¯á\80\82á\80ºá\80\9eá\80\9aá\80º",
+       "log": "á\80\99á\80¬á\80\8fá\80«á\80\84á\80ºá\80¸á\80\9cá\80ºá\80¯á\80\96á\80¸",
        "all-logs-page": "ၜးဆါင့်ကိုဝ်ၯာစ်ုရင့်လုက်ဆိင့်",
        "alllogstext": "{{SITENAME}}ခဝ့် ၮေဝ်သှ်ေသယ်ၮှ် မာၮါင်းလုက်ဆိင့်လ်ုဖး အင်းကုံၮဲဖှ်ေထ ဆေဝ်ႋလှ်။\nမာၮါင်းအ်ုဍုံ၊ ဆ်ုသုံ့မၠိင် (လိက်ဖၠုံးအ်ုဍောဟ်အ်ုပေဝ့်)၊ လ်ုမွာဲၜး ၜးဆါင့်လိက်မေံၜၠါ် (လိက်ဖၠုံးအ်ုဍောဟ်အ်ုပေဝ့်) ၮှ် အင်းလုဲႋ ဆ်ုယောဝ်သယ်ၮ်ှ အင်းကုံဖှ်ေထဆေဝ်ႋလှ်။",
        "logempty": "လိက်မါၮါင်းဖိုင် ထိုဝ်ၜုဂ်ၯံင်ခေဝ် လ်ုဍးၜး။",
-       "allpages": "လိက်မေံ လုက်ဆိင့်",
-       "allarticles": "လိက်မေံလုက်ကၠာ",
+       "allpages": "လိက်မေံၜၠါ်လုက်ဆိင့်",
+       "allarticles": "လိက်မေံၜၠါ်လုက်ကၠာ",
+       "allinnamespace": "လိက်မေံၜၠါ်လုက်ဆိင့် (ဏဲပ်ုယုံ့မိင် $1)",
        "allpagessubmit": "လေဝ်",
        "allpages-hide-redirects": "ထါင်ၮဲအ်ုထိုဝ်သယ် မ်ုအဝ်ကှ်ေသူး",
        "categories": "အ်ုဆုဂ်တုဂ်",
        "listgrouprights-members": "(ပ္ကုံစ်ုရင့်)",
        "emailuser": "ဆ်ုသုံ့က်ုဆာယိုဝ်ၯင်း မ်ုသုံ့ဖှ်ေအီးမေး",
+       "emailusername": "ဆ်ုသုံႋဆာႋမိင်:",
        "usermessage-editor": "စ်ုနစ်မ်ုဆါင်းဂျ",
        "watchlist": "ခိုဝ်ယောဝ်ႋစ်ုရင့်",
        "mywatchlist": "ခိုဝ်ယောဝ်ႋစ်ုရင့်",
        "protectlogpage": "ခ်ုဝုင်ႋသယ်လ်ုဖး မာၮါင်း",
        "protectedarticle": "\"[[$1]]\" ၮှ် အ်ုဝုဂ်ႋထးဝေ့",
        "modifiedarticleprotection": "\"[[$1]]\" ၮှ် ဆ်ုဆ်ုဝုဂ်ႋ အ်ုဆင့်အိုဝ် မ်ုအင်းလယ်",
-       "protect-default": "á\80\95á\81 á\80\9aá\80ºá\80\90á\80\9dá\80º á\80\86á\80ºá\80¯á\80\9eá\80¯á\80¶á\80·á\80\80á\80ºá\80¯á\80\86á\80¬လုက်ဆိင့်",
-       "restriction-edit": "á\80¡á\80\84á\80ºá\82\8bá\80\90á\80\84á\80ºá\82\8b",
+       "protect-default": "á\80\95á\81 á\80\9aá\80ºá\80\90á\80\9dá\80º á\80\86á\80ºá\80¯á\80\9eá\80¯á\80¶á\82\8bá\80\8fá\80\84á\80·á\80ºá\80\86á\80¬á\82\8bလုက်ဆိင့်",
+       "restriction-edit": "á\80\9eá\80¶á\80\84á\80·á\80ºá\81\9cá\80¸á\81¯á\80´",
        "restriction-move": "မ်ုသုဂ်",
+       "undelete-show-file-submit": "မွာဲ",
        "namespace": "အ်ုမၠိင်ထိုဝ်",
        "invert": "လုဲႋထသယ် ဗေ့မ်ုထာင်က္ဍာၯင်း",
        "tooltip-invert": "အ်ုခွင်ဝယ်ယိုဝ် ဆ်ုတင်ထ လုဲႋဖှ်ေထ အ်ုမိင်ထိုဝ် (လ်ု ၜးဆါင့်အ်ုမိင်ထိုဝ်)ဝယ် ဆ်ုအင်းလယ်သယ် အှ်ကှ်ေသူးထ။",
        "namespace_association": "ထိုဝ်ၜိုဒ်ၜးဍံင်အှ် ၮဲဖှ်ေမိင်ႋ",
        "tooltip-namespace_association": "လုဲႋထ အ်ုမၠိင်က္ဍာထါင်လ်ု ၜးထိုဝ်ၜုဂ်လိက်လ်ုဖး အှ်ကုံဆ်ုခၠါင် လ်ုမွာဲၜး အ်ုၯာင်းအ်ုကျံင် အ်ုမိင်ထါင်ၮဲထါင် မ်ုပါ့ၯင်း လိက်လင်ခွင်ဝယ်ယိုဝ် ဆူ့လင်ဆ်ုၜးကီလာဆှ်",
        "blanknamespace": "(ခေါဟ်)",
-       "contributions": "{{GENDER:$1|á\80\86á\80ºá\80¯á\80¡á\80\84á\80ºá\80¸á\80\9eá\80¯á\80¶á\80·}} á\80\86á\80ºá\80¯á\80\9eá\80¯á\80\82á\80ºá\80\80á\81 á\80\9aá\80ºá\80\9eá\80\9aá\80º",
+       "contributions": "{{GENDER:$1|á\80\86á\80ºá\80¯á\80\9eá\80¯á\80¶á\82\8bá\80\8fá\80\84á\80·á\80ºá\80\86á\80¬á\82\8b}}á\80\81á\80\9dá\80·á\80º á\80\86á\80ºá\80¯á\80¡á\80\84á\80ºá\80¸á\80\99á\80¬á\80\9cá\80ºá\80¯á\80\96á\80¸",
        "contributions-title": "$1 ၯင်း ဆ်ုအင်းသုံ့က်ုဆာ ဆ်ုဍုဂ်ဆ်ုကၠယ် $1",
-       "mycontris": "á\80\8dá\80±á\80¬á\80\9fá\80ºá\80\96á\80¾á\80ºá\80±á\80\91á\80¬á\80·á\80\80á\80ºá\80¯á\80\86á\80¬",
-       "anoncontribs": "á\80\8dá\80±á\80¬á\80\9fá\80ºá\80\96á\80¾á\80ºá\80±á\80\91á\80¬á\80·á\80\80á\80ºá\80¯á\80\86á\80¬",
+       "mycontris": "á\80\86á\80ºá\80¯á\80\99á\80¬á\80\96á\80¾á\80ºá\80±á\80\91á\80\86á\80¬á\82\8bá\80\9cá\80ºá\80¯á\80\96á\80¸",
+       "anoncontribs": "á\80\86á\80ºá\80¯á\80\99á\80¬á\80\96á\80¾á\80ºá\80±á\80\91á\80\86á\80¬á\82\8bá\80\9cá\80ºá\80¯á\80\96á\80¸",
        "contribsub2": "{{GENDER:$3|$1}}အ်ုၯင်း ($2)",
        "nocontribs": "လ်ုပၞံင့်ယိုဝ် လ်ုၜးက္ဍာၜး ဆ်ုအင်းလယ် လ်ုအ်ှၜး။",
-       "uctop": "á\80\9cá\80ºá\80¯á\81®ီမူႋအ်ုခါ့ယိုဝ်",
+       "uctop": "á\80\9cá\80ºá\80¯á\80\8fီမူႋအ်ုခါ့ယိုဝ်",
        "month": "ၮိင်းအ်ုၮဝ့်ၯံင် ( ၮိင်းအှ်ၮှ်ၯံင်လါင်းခါင့်) :",
        "year": "ၮိင်းအ်ုၮဝ့်ၯံင် ( ဝီးၮင် ၮိင်းအ်ုၮှ်) :",
        "sp-contributions-newbies": "က်ုဆာအ်ုၮါင်းသင့်သယ်လ်ုဖး ဆ်ုမာၜိုဝ်မာဆိုင်သယ် မ်ုၮဲဖှ်ေ",
        "sp-contributions-blocklog": "ဆ်ုဍာ်အှ်ၯင်း  လိက်မါၮါင်း",
        "sp-contributions-uploads": "အးလုဂ်ထံင့်ဖှ်ေထး",
-       "sp-contributions-logs": "á\80\80á\80ºá\80¯á\80\90á\80¯á\80\82á\80ºá\80\9eá\80\9aá\80º",
-       "sp-contributions-talk": "á\80\86á\80ºá\80¯á\80\81á\81 á\80«á\80\84á\80ºá\80\80á\80\84á\80ºá\80\80á\80¬",
+       "sp-contributions-logs": "á\80\99á\80¬á\80\8fá\80«á\80\84á\80ºá\80¸á\80\9cá\80ºá\80¯á\80\96á\80¸",
+       "sp-contributions-talk": "á\80\86á\80ºá\80¯á\80\81á\81 á\80«á\80\84á\80ºá\80\80á\80«á\80\84á\80ºá\80\80á\80«",
        "sp-contributions-userrights": "{{GENDER:$1|ဆ်ုသုံႋဆာႋ}}ခဝ့် ၜးၮေဝ်ႋအ်ုလူးအ်ုထာ့ မ်ုပိုင်ကြိုင်စီရေင့်",
        "sp-contributions-search": "အင်းၰူ့ဆ်ုမာၜိုဒ်မာဆိုင်",
        "sp-contributions-username": "အိုင်ပီလင်ဍာ အိုဝ် ဆ်ုသုံ့က်ုဆာမိင် :",
        "sp-contributions-toponly": "ဟ်ုအင်းတံင်လိက်မေံသှ် မ်ုၮဲဖှ်ေ",
        "sp-contributions-newonly": "ဟ်ုအင်းတံင်လိက်မေံသှ် မ်ုၮဲဖှ်ေ",
        "sp-contributions-submit": "အင်းၰူ့",
-       "whatlinkshere": "á\80\91á\80«á\80\9dá\80ºá\80\9aá\80­á\80¯á\80\9dá\80º á\80\99á\80ºá\80¯á\80\9cá\80\84á\80·á\80ºá\80\81á\80ºá\80¯á\80\9cá\80²á\80«á\80\81á\80\9dá\80·á\80ºá\80\9cá\80²á\80«",
+       "whatlinkshere": "á\80\91á\80­á\80¯á\80\9dá\80ºá\81\9cá\80¯á\80\82á\80ºá\80\91á\80\81á\80\9dá\80·á\80ºá\80\9cá\80\9aá\80º",
        "whatlinkshere-title": "\"$1\" အိုဝ် ထိုဝ်ၜုဂ်ထလိက်မေံၜါ်လ်ုဖး",
        "whatlinkshere-page": "လိက်မေံသး",
        "linkshere": "ဖံင့်လာ့လိက်မေံၜၠါ်သယ်ၮှ် <strong>$2</strong> ခဝ့် ထိုဝ်ၜုဂ်ထဝေ့ -",
        "whatlinkshere-hidelinks": "$1 လင့်ခ်သယ်",
        "whatlinkshere-hideimages": "ဖိုင်ႋဆ်ုထိုဝ်ၜုဂ်လ်ုဖး $1 ၮါင်း",
        "whatlinkshere-filters": "ဆၟိုဝ်သယ်လ်ုဖး",
-       "ipboptions": "á\81\82 á\80\94á\80¬á\82\8bá\80\8dá\80®:2 hours,á\81\81 á\80\99á\80°á\82\8bá\80\9eá\80\84á\80·á\80º:1 day,á\81\83 á\80\99á\80°á\82\8bá\80\9eá\80\84á\80·á\80º:3 days,á\81\81 á\80\94á\80­á\80¯á\80²á\80·:1 week,á\81\82 á\80\94á\80­á\80¯á\80²á\80·:2 weeks,á\80\9cá\80¬ á\81\81 á\81\9cá\80­á\80\84á\80ºá\80¸:1 month,á\80\9cá\80¬ á\81\83 á\81\9cá\80­á\80\84á\80ºá\80¸:3 months,á\80\9cá\80¬ á\81\86 á\81\9cá\80­á\80\84á\80ºá\80¸:6 months,á\81\81 á\81®ိင်း:1 year,လ်ုထုက်ၜးတ:infinite",
+       "ipboptions": "á\81\82 á\80\94á\80¬á\82\8bá\80\8dá\80®:2 hours,á\81\81 á\80\99á\80°á\82\8bá\80\9eá\80\84á\80·á\80º:1 day,á\81\83 á\80\99á\80°á\82\8bá\80\9eá\80\84á\80·á\80º:3 days,á\81\81 á\80\94á\80­á\80¯á\80²á\80·:1 week,á\81\82 á\80\94á\80­á\80¯á\80²á\80·:2 weeks,á\80\9cá\80¬ á\81\81 á\81\9cá\80­á\80\84á\80ºá\80¸:1 month,á\80\9cá\80¬ á\81\83 á\81\9cá\80­á\80\84á\80ºá\80¸:3 months,á\80\9cá\80¬ á\81\86 á\81\9cá\80­á\80\84á\80ºá\80¸:6 months,á\81\81 á\80\8fိင်း:1 year,လ်ုထုက်ၜးတ:infinite",
        "ipb-partial": "ပါဍီယာႋ",
        "ipb-type-label": "အ်ုမိင်အ်ုကုဂ်",
        "ipb-pages-label": "လိက်မေံၜၠာ်လ်ုဖး",
        "tooltip-pt-login": "အွးဖှ်ေလါ လ်ုၮ်ုဆ်ုမာၮ်ှ။ လာၮင့်ၜိုဒ်သီး အင်းတါင်ၮ်ုအေ့။",
        "tooltip-pt-logout": "တါ်ထင်း",
        "tooltip-pt-createaccount": "တါင်ၮ်ုဆ်ုမာဝံင် အွးဖှ်ေလာ။ လာၮင့်သီး ၮ်ုဆ်ုမာလ်ှ။",
-       "tooltip-ca-talk": "á\80\95á\80ºá\80¯á\80\9aá\80¯á\80¶á\80·á\80\81á\80±á\80«á\80\9fá\80ºá\80\90á\80\84á\80º á\80\9cá\80­á\80\80á\80ºá\80\99á\80±á\80¶á\81¯á\80\84á\80ºá\80¸ á\80\86á\80ºá\80¯á\80\81á\81 á\80«á\80\84á\80ºá\80\80á\80\84á\80ºá\80\80á\80¬",
+       "tooltip-ca-talk": "á\80\95á\80ºá\80¯á\80\9aá\80¯á\80¶á\80·á\80\81á\80±á\80«á\80\9fá\80ºá\80\90á\80\84á\80º á\80\9cá\80­á\80\80á\80ºá\80\99á\80±á\80¶á\81\9cá\81 á\80«á\80ºá\81¯á\80¶á\80\84á\80º á\80\86á\80ºá\80¯á\80\81á\81 á\80«á\80\84á\80ºá\80\80á\80«á\80\84á\80ºá\80\80á\80«á\80\9cá\80ºá\80¯á\80\96á\80¸",
        "tooltip-ca-edit": "လိက်မေံအ်ုယိုဝ် မာၮေဝ်ထိုဝ်ၜုဂ်",
        "tooltip-ca-addsection": "ကၞါင့်သံင်လ်ုဍူ ပ္တုံသံင်ၜိုဒ်",
        "tooltip-ca-viewsource": "လိက်မေံယိုဝ် လ်ုအင်းတင်ႋခဝ့် ပၠယ်တဝ်ဝေ့အေး။ ၮ်ုယောဝ်ႋ လိက်အ်ုဍံင်ၮေဝ်ႋလှ်။",
        "tooltip-n-mainpage-description": "မ်ုယောဝ်ထံင် လိက်ႋပၟိက်မေံယာ့",
        "tooltip-n-portal": "ပ်ုရော့ဂျက်အကျံင်၊ ၮ်ုမာဖှ်ေၮေဝ်လ်ု မ်ုၜးအင်းၰူ့ခဝ့်လယ်",
        "tooltip-n-currentevents": "အ်ုခါ့ယိုဝ် ဆ်ုတုဂ်ဆ်ုကၠယ်သယ် မ်ုအင်းၰူး ထိုဝ်ၜါင်အးမိင်အးစိင်",
-       "tooltip-n-recentchanges": "á\80\9dá\80®á\80\80á\80®á\80\81á\80\9dá\80·á\80º á\80¡á\80ºá\80¯á\80\81á\80«á\80·á\80\9aá\80­á\80¯á\80\9dá\80º á\80\86á\80ºá\80¯á\80¡á\80\84á\80ºá\80¸á\80\9cá\80\9a်",
+       "tooltip-n-recentchanges": "á\80\9dá\80®á\80¸á\80\80á\80±á\80\9dá\80ºá\80\81á\80\9dá\80·á\80º á\80¡á\80ºá\80¯á\80\81á\80«á\80·á\80\9aá\80­á\80¯á\80\9dá\80º á\80\86á\80ºá\80¯á\80¡á\80\84á\80ºá\80¸á\80\9cá\80\9aá\80ºá\80\9cá\80ºá\80¯á\80\96á\80¸á\80\85á\80ºá\80¯á\80\9bá\80\84á\80·်",
        "tooltip-n-randompage": "လ်ုအ်ုၜးလိက်မေံမိင်မိင် မ်ုယောဝ်ႋ",
        "tooltip-n-help": "အင်းၰူးပ္တုံလင်ခၠယ်",
        "tooltip-t-whatlinkshere": "အ်ုလင်ယိုဝ် ဆ်ုၮဲလင်လင့်ထ ဝီကီလိက်မေံစ်ုရင့်",
        "tooltip-t-recentchangeslinked": "လိက်မေံယိုဝ်ခဝ့် ၮဲဖှ်ေထါင်ထဝေ့ လိက်မေံသယ်လ်ုဖး အ်ုခါ့ ဆ်ုအင်းလဲါသာ့လ်ုဖး",
        "tooltip-feed-atom": "လိက်မေံယိုဝ်ၯင်း Atom feed",
-       "tooltip-t-contributions": "{{GENDER:$1|á\80\86á\80ºá\80¯á\80\9eá\80¯á\80¶á\80·á\80\80á\80ºá\80¯á\80\86á\80¬á\80\9aá\80­á\80¯á\80\9dá\80º}}á\80\81á\80\9dá\80·á\80º á\80\86á\80ºá\80¯á\80\90á\80¯á\80\82á\80ºá\80\80á\81 á\80\9aá\80º စ်ုရင့်",
+       "tooltip-t-contributions": "{{GENDER:$1|á\80\86á\80ºá\80¯á\80\9eá\80¯á\80¶á\80·á\80\8fá\80\84á\80·á\80ºá\80\86á\80¬á\82\8bá\80\9aá\80­á\80¯á\80\9dá\80º}}á\80\81á\80\9dá\80·á\80º á\80\86á\80ºá\80¯á\80¡á\80\84á\80ºá\80¸á\80\99á\80¬á\80\9cá\80ºá\80¯á\80\96á\80¸ စ်ုရင့်",
        "tooltip-t-emailuser": "{{GENDER:$1|ဆ်ုသုံ့ဆာအိုဝ်}} မ်ုသုံ့အီးမေး",
        "tooltip-t-upload": "မ်ုပ္တုံင်ထါင်ဖိုင်ႋ",
        "tooltip-t-specialpages": "လိက်မေံ ခေါဟ် လုက်ဆိင့်",
-       "tooltip-t-print": "á\80\9cá\80­á\80\80á\80ºá\80\99á\80±á\80¶á\80¡á\80ºá\80¯á\80\9aá\80­á\80¯á\80\9dá\80º á\80\99á\80ºá\80¯ထုက်ထင်းပၞံင့်",
+       "tooltip-t-print": "á\80\9cá\80­á\80\80á\80ºá\80\99á\80±á\80¶á\81\9cá\81 á\80«á\80ºá\80\9aá\80­á\80¯á\80\9dá\80º á\80\99á\80ºá\80¯á\80\95á\80ºá\80¯á\80\9bá\80±á\80\94á\80ºá\82\8bထုက်ထင်းပၞံင့်",
        "tooltip-t-permalink": "အ်ုယိုဝ်မူၯင်း အ်ုသီ့လင်ဍာ",
        "tooltip-ca-nstab-main": "မ်ုယောဝ်ႋ ပ်ုယုံ့ခေါဟ်တင်",
-       "tooltip-ca-nstab-user": "á\80\9cá\80­á\80\80á\80ºá\80¡á\80¯á\80\82á\80º á\80\9cá\80­á\80\80á\80ºá\80\99á\80±á\80¶á\80\99á\80ºá\80¯á\80\9aá\80±á\80¬á\80\9dá\80ºá\82\8b",
+       "tooltip-ca-nstab-user": "á\80\99á\80ºá\80¯á\80\9aá\80±á\80¬á\80\9dá\80ºá\82\8bá\80\86á\80ºá\80¯á\80\9eá\80¯á\80¶á\82\8bá\80\8fá\80\84á\80·á\80ºá\80\86á\80¬á\82\8b á\80\9cá\80­á\80\80á\80ºá\80\99á\80±á\80¶á\81\9cá\81 á\80«á\80º",
        "tooltip-ca-nstab-special": "အှ်ယိုဝ်ၮှ် မွာဲဝေ့လိက်မေံခေါဟ်ဆေဝ်ႋလ်ှ။ လိက်မေံယိုဝ် ၯယ်အင်းတာင်လ်ုၮေဝ်ၜး။",
        "tooltip-ca-nstab-project": "မ်ုယောဝ်ႋ ပ်ုယုံ့ခေါဟ်တင်",
        "tooltip-ca-nstab-image": "လိက်အုဂ် လိက်မေံမ်ုယောဝ်ႋ",
        "tooltip-ca-nstab-category": "မ်ုယောဝ်ႋ အ်ုဆုဂ်တုဂ်လ်ုဖး",
        "tooltip-minoredit": "အ်ုပ်ုယဝ့်လ်ုဍောဟ် ဆ်ုအင်းတင်ဖှ်ေသိုဝ် မ်ုမာၮါင်း",
        "tooltip-save": "အင်းလယ်အ်ှကှ်ေ",
+       "tooltip-publish": "ဏ်ုဆ်ုအင်းတါင်သယ် မ်ုသုံ့ထင်း",
        "tooltip-preview": "ၮ်ုအင်းလယ်ထး မ်ုယောဝ်ႋၮင်ႋ။ အုဲးသာဆိုင် လ်ုအှ်ကှ်ေဍာ်ၜး သုံဖှ်ေလာ။",
        "tooltip-diff": "လိက်မေံဖၠုံးၮှ်လယ် ​အင်းလဲါသာႋ မ်ုၮဲဖှ်ေ",
        "tooltip-compareselectedversions": "လုဲႋထ ခါင်ထါင်ၮီၮါင်းၮှ် လ်ုၜးဍံင်သယ် မ်ုယောဝ်ႋ",
        "tooltip-summary": "အင်းတင်ႋဖူးဆူ့လင်",
        "anonusers": "{{SITENAME}} အ်ုမၠိင်လ်ုသှ်ယာႋ {{PLURAL:$2|ဆ်ုသုံႋဆာႋ|ဆ်ုသုံႋဆာႋလ်ုဖး}} $1",
        "simpleantispam-label": "Anti-spam အင်းၰူ့ၯင်းဆ်ုပၠယ်တဝ်။ အှ်ယိုဝ်ၮှ် <strong>ဖိုင့်ၰိုဲလ်ုၯေဝ်</strong>!",
-       "pageinfo-title": "\"$1\" á\80¡á\80ºá\80¯á\81¯á\80\84á\80ºá\80¸ á\80\86á\80ºá\80¯á\80\9eá\80¯á\80\82á\80ºá\80\80á\81 á\80\9aá\80ºလ်ုဖး",
+       "pageinfo-title": "\"$1\" á\80¡á\80ºá\80¯á\81¯á\80¶á\80\84á\80º á\80\86á\80ºá\80¯á\80\96á\81 á\80¶á\80\84á\80ºá\80¡á\80ºá\80¯á\80\96á\81 လ်ုဖး",
        "pageinfo-header-basic": "အ်ုခင်းထါ်ဆ်ုပြိုင့်အ်ုၯာင်ႋအ်ုကျံင်း",
-       "pageinfo-header-edits": "á\80¡á\80\84á\80ºá\82\8bá\80\90á\80\84á\80ºá\82\8b မေဝ်ႋစိင်",
+       "pageinfo-header-edits": "á\80\9eá\80¶á\80\84á\80·á\80ºá\81\9cá\80¸á\81¯á\80´ မေဝ်ႋစိင်",
        "pageinfo-header-restrictions": "လိက်မေံၜါ် ကွင်ပ္ဍင်လင်စိုဝ်ထ",
        "pageinfo-header-properties": "လိက်မေံၜၠါ် ခွင်ႋလ်ုဖး",
        "pageinfo-display-title": "ၮဲလင် ခေါဟ်တင်",
        "pageinfo-length": "လိက်မေံၜၠါ် အ်ုထင်ႋ (လ်ုဘိုက်ခဝ့်)",
        "pageinfo-article-id": "လိက်မေံၜၠါ် အိုင်ဒီ",
        "pageinfo-language": "လိက်မေံၜၠါ် လိက်ခီ့ ဘာႋသာ့ဆ်ုခၠါင်",
+       "pageinfo-language-change": "မ်ုအင်းလယ်",
        "pageinfo-content-model": "လိက်မေံၜၠါ် ပ်ုယုံ့ခေါဟ်တင်မော်ဒယ်",
+       "pageinfo-content-model-change": "မ်ုအင်းလယ်",
        "pageinfo-robot-policy": "စ်ုရုပ်သယ်ခဝ့် index ဆ်ုအင်းမာ",
-       "pageinfo-robot-index": "á\80\86á\80ºá\80¯á\80\95á\81 á\80\9aá\80ºá\80\90á\80\9dá\80ºá\81®á\80±á\80\9dá\80º",
+       "pageinfo-robot-index": "á\80\86á\80ºá\80¯á\80\95á\81 á\80\9aá\80ºá\80\90á\80\9dá\80ºá\80\8fá\80±á\80\9dá\80ºá\82\8b",
        "pageinfo-robot-noindex": "လ်ုပၠယ်တဝ်ၜး",
        "pageinfo-watchers": "လိက်မေံၜၠါ် ခိုဝ်ယောဝ်ႋက်ုဆာ အ်ုၯာႋအ်ုလုံ့",
        "pageinfo-few-watchers": "{{PLURAL:$1|အင်းခိုဝ်ယောဝ်ႋ|အင်းခိုဝ်ယောဝ်ႋက်ုဆာသယ်}} $1 ၯာခဝ့်ယှာ",
        "pageinfo-redirects-name": "လိက်မေံယိုဝ် ထါင်ၮဲထါင်ထ အ်ုလူးအ်ုၯယ်",
        "pageinfo-subpages-name": "လိက်မေံယိုဝ် လိက်မေံကါင်ဖါ ဝီႋဖၠုံး",
        "pageinfo-subpages-value": "$1 ({{PLURAL:$2|ထာင်ၮဲထာင်|ထာင်ၮဲထာင်လ်ုဖး}} $2 ၮါင်း; {{PLURAL:$3|ထာင်ၮဲထာင်-လ်ုမွာဲ|ထာင်ၮဲထာင်-လ်ုမွာဲၜး}} $3 ၮါင်း)",
-       "pageinfo-firstuser": "လိက်မေံ ပ္တုံက်ုဆာႋ",
-       "pageinfo-firsttime": "á\80\9cá\80­á\80\80á\80ºá\80\99á\80±á\80¶á\80\95á\80¹á\80\90á\80¯á\80¶á\80\91á\80¯á\80\84á\80ºá\80¸á\80¡á\80ºá\80¯á\81®á\80®á\80¡á\80ºá\80¯á\80\9eá\80¶á\80\84်",
-       "pageinfo-lastuser": "á\80\9cá\80«á\80\84á\80ºá\80¸á\80\81á\80«á\80\84á\80·á\80º á\80¡á\80\84á\80ºá\80¸á\80\90á\80\84á\80ºá\80\86á\80¬",
-       "pageinfo-lasttime": "á\80\9cá\80«á\80\84á\80ºá\80¸á\80\81á\80«á\80\84á\80·á\80ºá\80¡á\80\84á\80ºá\80¸á\80\90င် မူႋသင့်",
-       "pageinfo-edits": "á\80\95á\80¹á\80\80á\80¯á\80¶á\80\9cá\80¯á\80\80á\80ºá\80\86á\80­á\80\84á\80·á\80º á\80\86á\80ºá\80¯á\80¡á\80\84á\80ºá\82\8bá\80\90á\80\84á\80ºá\82\8b á\80\9dá\80®á\82\8bá\80\96á\81 á\80¯á\80¶á\80¸á\80\9cá\80¯á\80\80á\80º",
-       "pageinfo-authors": "á\80\91á\80®á\80·á\80\86á\80¬á\80· á\80¡á\80\84á\80ºá\82\8bá\80\90á\80\84á\80ºá\82\8bá\80\86á\80«á\80\9eá\80\9aá\80º á\80¡á\80ºá\80¯á\80\99á\80­á\80\84á\80ºá\80\99á\80­á\80\84á\80ºá\80\9cá\80¯á\80\80á\80ºá\80\99á\80­á\80\84á\80ºá\80\9cá\80¯á\80\80á\80ºá\80\86á\80­á\80\84á\80·á\80º",
-       "pageinfo-recent-edits": "á\80\9cá\80ºá\80¯á\80\9aá\80­á\80\80á\80ºá\80\9cá\80ºá\80¯á\80\99á\80\9dá\80ºá\82\8bá\80\81á\80«á\80· á\80\86á\80ºá\80¯á\80¡á\80\84á\80ºá\80¸á\80\90á\80\84á\80º á\80¡á\80ºá\80¯á\80\9dá\80®á\82\8bá\80\96á\81 á\80¯á\80¶á\80¸ (á\80¡á\80ºá\80¯á\80\86á\80­á\80¯á\80\84á\80·á\80ºá\80¡á\80ºá\80¯á\80\91á\80\9dá\80ºá\82\8b $1 á\80¡á\80ºá\80¯á\80\8dá\80¬á\80²)",
-       "pageinfo-recent-authors": "á\80\91á\80®á\80·á\80\86á\80¬á\80· á\80¡á\80\84á\80ºá\82\8bá\80\90á\80\84á\80ºá\82\8bá\80\86á\80«á\80\9eá\80\9aá\80º á\80¡á\80ºá\80¯á\80\99á\80­á\80\84á\80ºá\80\99á\80­á\80\84á\80ºá\80\9cá\80¯á\80\80á\80ºá\80\99á\80­á\80\84á\80ºá\80\9cá\80¯á\80\80á\80ºá\80\86á\80­á\80\84á\80·á\80º",
+       "pageinfo-firstuser": "လိက်မေံၜၠါ် ပ္တုံဏင့်ဆာႋ",
+       "pageinfo-firsttime": "á\80\9cá\80­á\80\80á\80ºá\80\99á\80±á\80¶á\81\9cá\81 á\80«á\80º á\80\95á\80¹á\80\90á\80¯á\80¶á\80\99á\80°á\82\8bá\80\9eá\80\84á\80·်",
+       "pageinfo-lastuser": "á\80\9cá\80\84á\80ºá\80\81á\80«á\80\84á\80·á\80º á\80¡á\80\84á\80ºá\80¸á\80\90á\80«á\80\84á\80ºá\80\86á\80¬á\82\8b",
+       "pageinfo-lasttime": "á\80\9cá\80\84á\80ºá\80\81á\80«á\80\84á\80·á\80ºá\80¡á\80\84á\80ºá\80¸á\80\90á\80«င် မူႋသင့်",
+       "pageinfo-edits": "á\80\80á\80¯á\80¶á\80\80á\80¶á\80\84á\80ºá\80¸ á\80\86á\80ºá\80¯á\80¡á\80\84á\80ºá\80¸á\80\90á\80«á\80\84á\80º á\80\86á\80ºá\80¯á\80\9dá\80®á\82\8bá\80\86á\80ºá\80¯á\80\8f",
+       "pageinfo-authors": "á\80\86á\80ºá\80¯á\80¡á\80\84á\80ºá\80¸á\80\90á\80«á\80\84á\80ºá\80\9cá\80­á\80\80á\80ºá\80\99á\80±á\80¶á\81\9cá\81 á\80«á\80ºá\80\86á\80¬á\82\8bá\80\9cá\80ºá\80¯á\80\96á\80¸ á\80\86á\80ºá\80¯á\80\9dá\80®á\82\8bá\80\86á\80ºá\80¯á\80\8fá\80\80á\80¯á\80¶á\80\80á\80¶á\80\84á\80ºá\80¸",
+       "pageinfo-recent-edits": "á\80\9cá\80ºá\80¯á\80\9aá\80­á\80\80á\80ºá\80\9cá\80ºá\80¯á\80\99á\80\9dá\80ºá\82\8bá\80\81á\80«á\80· á\80\86á\80ºá\80¯á\80¡á\80\84á\80ºá\80¸á\80\90á\80«á\80\84á\80º á\80\86á\80ºá\80¯á\80\9dá\80®á\82\8bá\80\86á\80ºá\80¯á\80\8f (á\80\91á\80ºá\80¯á\80\9cá\80\9aá\80·á\80ºá\80\81á\80­á\80¯á\80\80á\80º $1 á\80¡á\80ºá\80¯á\80\8dá\80½á\80\9aá\80ºá\80\81á\80«á\80·)",
+       "pageinfo-recent-authors": "á\80\9cá\80ºá\80¯á\80\9aá\80­á\80\80á\80ºá\80\9cá\80ºá\80¯á\80\99á\80\9dá\80ºá\80\81á\80«á\80· á\80\86á\80ºá\80¯á\80¡á\80\84á\80ºá\80¸á\80\90á\80«á\80\84á\80ºá\80\81á\80±á\80«á\80\9fá\80ºá\80\86á\80¬á\82\8b á\80\86á\80ºá\80¯á\80\9dá\80®á\82\8bá\80\86á\80ºá\80¯á\80\8f",
        "pageinfo-magic-words": "မှ်{{PLURAL:$1|လိက်ဖၠုံး|လိက်ဖၠုံးသယ်}} ($1)",
        "pageinfo-hidden-categories": "အ်ှကှ်ေသူးထ {{PLURAL:$1|ဆ်ုဆုဂ်တုဂ်|ဆ်ုဆုဂ်တုဂ်သယ်}} ($1)",
        "pageinfo-templates": "Transclude မာထ {{PLURAL:$1|တန်ပ်ုလိတ်|တန်ပ်ုလိတ်လ်ုဖး}} ($1)",
-       "pageinfo-toolboxlink": "လိက်မေံ အးမိင်အးစိင်သယ်",
+       "pageinfo-toolboxlink": "လိက်မေံၜၠါ် အ်ုၯာင်ႋအ်ုဖၠံင်လ်ုဖး",
        "pageinfo-contentpage": "ပ်ုယုံ့ခေါဟ်တင်လိက်မေံသယ်ၮ်ှ ဆ်ုအင်းတင်",
        "pageinfo-contentpage-yes": "မွာဲ",
+       "pageinfo-view-protect-log": "မ်ုယောဝ်ႋလိက်မေံၜၠါ်ယိုဝ် ဆ်ုခ်ုဝုင်ႋထလိက်မါဏါင်း",
        "patrol-log-page": "အင်းခိုဝ်ဆၟိုဝ် ဆ်ုမာၮါင်း",
        "previousdiff": "အ်ုလင်လီ ဆ်ုအင်ႋတင်ႋ",
        "nextdiff": "အင်းတင်ႋအ်ုသင့်ထုက်",
        "exif-datetimeoriginal": "ဒ်ှတာအင်းတင်ဖှ်ေ မူႋသင့်လ်ု အ်ုခါ့",
        "exif-datetimedigitized": "တ်ုဂျတယ်အင်းလယ် မူႋသင့်လ်ုအ်ုခါ့",
        "exif-orientation-1": "ဟ်ုအ်ှသှ်ေ",
+       "exif-lightsource-2": "မှ်ေထေဝ် အ်ုဖါန်ႋၯာင်ႋ",
        "namespacesall": "လုက်ခၠါ",
        "monthsall": "လုက်ဆိင့်",
        "imgmultipagenext": "လိက်မေံၜၠာ် လ်ုခဝ့်အိုဝ်",
        "imgmultigo": "လေဝ်",
        "imgmultigoto": "လိက်မေံ $1 မ်ုလေဝ်",
+       "watchlistedit-raw-titles": "ခေါဟ်တင်လ်ုဖး",
+       "watchlistedit-clear-titles": "ခေါဟ်တင်လ်ုဖး",
        "watchlisttools-clear": "ခိုဝ်ယောဝ်ႋစ်ုရင့်သယ် မ်ုအင်းဆိင့်",
        "watchlisttools-view": "ၜးဍံင်ၰံင် ဆ်ုအင်းလယ်သယ် မ်ုယောဝ်ႋ",
        "watchlisttools-edit": "ခိုဝ်ယောဝ်ႋစ်ုရင့် ယောဝ်ႋၯံင် မ်ုအင်းတင်။",
        "watchlisttools-raw": "ခိုဝ်ယောဝ်ႋစ်ုရင့် လိက်ခၠံင့်သယ် မ်ုအင်းတင်",
        "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|လေဝ်ထါင်ဆ်ုခၠါင်]])",
+       "version-specialpages": "လိက်မေံၜၠါ်ခေါဟ်လ်ုဖး",
+       "version-ext-colheader-description": "ဆ်ုဏဲဖၠဟ်",
+       "version-libraries-description": "ဆ်ုဏဲဖၠဟ်",
        "redirect": "ဖိုင်ႋ၊ သုံ့က်ုဆာ၊ လိက်မေံၜၠါ်၊ ဆ်ုအင်းတင်၊ လ်ုမွာဲၜး မာၮါင်းအိုင်ဒီ ခဝ့် ထါင်ၮဲထါင်ဖှ်ေ",
        "redirect-summary": "လိက်မေံခေါဟ်ယိုဝ် ဖိုင်ႋလ်ုၮါင်း (ဖှ်ေထ ဖိုင်ႋအ်ုမိင်)၊ လိက်မေံလ်ုၮါင်း (ဖှ်ေထ ဆ်ုအင်းတင် အိုင်ဒီ လ်ု လိက်မေံၜၠါ်အိုင်ဒီ)၊ ဆ်ုသုံ့ဆာမိင် (ဖှ်ေထ ဆ်ုသုံ့ဆာမိင်ဝီႋဖၠုံးအိုင်ဒီ)၊ လ်ုမွာဲၜး မာၮါင်းလ်ုၮါင်း (ဖှ်ေထ ဆ်ုမာၮါင်းအိုင်ဒီ) ခဝ့်အိုဝ် ထါင်ၮဲထါင်ဆေဝ်ႋလှ်။ ၜးသုံ့ပ်ုဍံင် - [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], [[{{#Special:Redirect}}/user/101]], လ်ုမွာဲၜး [[{{#Special:Redirect}}/logid/186]].",
        "redirect-submit": "လေဝ်",
        "redirect-page": "လိက်မေံၜၠါ် အိုင်ဒီ",
        "redirect-revision": "လိက်မေံၜၠါ် ဆ်ုအင်ႋတင်ႋ",
        "redirect-file": "ဖိုင်ႋမၠိင်",
-       "specialpages": "á\80\9cá\80­á\80\80á\80ºá\80\99á\80±á\80¶á\80\81á\80±á\80«á\80\9fá\80º",
+       "specialpages": "á\80\9cá\80­á\80\80á\80ºá\80\99á\80±á\80¶á\81\9cá\81 á\80«á\80ºá\80\81á\80±á\80«á\80\9fá\80ºá\80\9cá\80ºá\80¯á\80\96á\80¸",
        "tag-filter": "[[Special:Tags|Tag]] ထုက်ပၠာၰင် -",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|လိက်ထိက်ၜုဂ်|လိက်ထိက်ၜုဂ်လ်ုဖး}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|လိက်ထိက်ၜုဂ်|လိက်ထိက်ၜုဂ်လ်ုဖး}}]]: $2",
        "tags-active-yes": "မွာဲ",
        "tags-active-no": "လ်ုမွာဲၜး",
        "tags-hitcount": "ဆ်ုအင်းလယ် $1 {{PLURAL:$1|ၮါင်း|ၮါင်းလ်ုဖး}}",
+       "htmlform-yes": "မွာဲ",
        "logentry-delete-delete": "$3 လိက်မေံအိုဝ် $1 ၮ်ှ {{GENDER:$2|ပ္တုံသီ့ဝေ့ဆေဝ်ႋလ်ှ}}",
        "logentry-delete-restore": "$3 လိက်မေံအိုဝ် $4 ခဝ့် $1ၮှ် {{GENDER:$2|သုဂ်ထါင်ႋဖှ်ေထလှ်}}",
        "logentry-delete-revision": "$3 လိက်မေံၜၠါ်ခေါဟ်ခဝ့် {{PLURAL:$5|ဆ်ုအင်းတင်လ်ုၮါင်း|ဆ်ုအင်းတင် $5 ၮါင်း}}အိုဝ် ဟ်ုဍးအ်ုဍံင်သိုဝ် $1 ၮှ် {{GENDER:$2|အင်းလဲါထဆေဝ်ႋ}}: $4",
        "logentry-newusers-autocreate": "က်ုဆာအ်ုဆ်ုမာ $1 ၮှ် အ်ုဆ်ုမာသိုဝ် {{GENDER:$2|အင်းတင်ထဝေ့}}",
        "logentry-upload-upload": "$1 ၮှ် $3 အိုဝ် {{GENDER:$2|upload ဆောဟ်ထါင်ႋ}}",
        "logentry-upload-overwrite": "$3 ၮှ်ခဝ့် ဗားရှင်းအ်ုသင့်အိုဝ် $1 {{GENDER:$2|upload ပ္တုံထုင်းထဆေဝ်ႋ}}",
-       "searchsuggest-search": "{{SITENAME}}ဝဲါ မ်ုအင်းၰူ့",
+       "rightsnone": "(ပၠဝ်ပြေ)",
+       "searchsuggest-search": "{{SITENAME}} ဖိုင် မ်ုအင်းၰူ့",
        "duration-days": "$1 {{PLURAL:$1|မူႋသင့်|မူႋသင့်လ်ုဖး}}",
        "mw-widgets-titlesmultiselect-placeholder": "ဆူ့ဍုဂ် ဆ်ုအှ်ထါင်...",
        "randomrootpage": "လ်ုၜးမိင် အ်ုခံင့် လိက်မေံၜၠါ်"
index edb61af..b39f70c 100644 (file)
        "mycontris": "ۇلەسىم",
        "contribsub2": "$1 ($2) ۇلەسى",
        "nocontribs": "وسى ىزدەۋ شارتىنا سايكەس وزگەرىستەر تابىلعان جوق.",
-       "uctop": " (ٴۇستى)",
+       "uctop": " ٴۇستى",
        "month": "مىنا ايدان (جانە ەرتەرەكتەن):",
        "year": "مىنا جىلدان (جانە ەرتەرەكتەن):",
        "sp-contributions-newbies": "تەك جاڭا تىركەلگىدەن جاساعان ۇلەستەردى كورسەت",
index 7dc1b2d..5f69454 100644 (file)
        "contribsub2": "{{GENDER:$3|$1}} ($2) үлесі",
        "contributions-userdoesnotexist": "«$1» қатысушы акаунты тіркелмеді.",
        "nocontribs": "Осы іздеу шартына сәйкес өзгерістер табылған жоқ.",
-       "uctop": "(соңғы)",
+       "uctop": "соңғы",
        "month": "Мына айдан (және ертеректен):",
        "year": "Мына жылдан (және ертеректен):",
        "sp-contributions-newbies": "Тек жаңа тіркелгендер үлестерін көрсету",
        "tags": "Тектерді өзгерту жарамсыз",
        "tag-filter": "[[Special:Tags|Тег]] сүзгісі:",
        "tag-filter-submit": "Сүзгі",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Тег|Тег}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Тег|Тег}}]]: $2",
        "tags-title": "Тегтер",
        "tags-intro": "Бұл бет бағдарламалық жасақтама өңдемені белгілейтін тегтерді және олардың мағыналарын тізімдейді.",
        "tags-tag": "Тег атауы",
        "dberr-again": "Біраз күте тұрыңыз, сосын бетті қайта жүктеңіз.",
        "dberr-info": "(Дерекқорға байланыспады: $1)",
        "dberr-info-hidden": "(Дерекқорға байланыспады)",
-       "dberr-usegoogle": "Сіз әзірге Google арқылы іздете аласыз.",
-       "dberr-outofdate": "Біздің контент индексі ескіруі мүмкін екенін ескеріңіз.",
-       "dberr-cachederror": "Бұл сұратылған беттің бүркемеленген есесі, және жаңарту қажет.",
        "htmlform-invalid-input": "Сіздің біраз енгізілімдеріңізде проблем бар.",
        "htmlform-select-badoption": "Сіз көрсеткен мән жарамды баптау емес.",
        "htmlform-int-invalid": "Сіз көрсеткен мән бүтін сан емес.",
index 824ae67..106ed83 100644 (file)
        "mycontris": "Ülesim",
        "contribsub2": "$1 ($2) ülesi",
        "nocontribs": "Osı izdew şartına säýkes özgerister tabılğan joq.",
-       "uctop": " (üsti)",
+       "uctop": " üsti",
        "month": "Mına aýdan (jäne erterekten):",
        "year": "Mına jıldan (jäne erterekten):",
        "sp-contributions-newbies": "Tek jaña tirkelgiden jasağan ülesterdi körset",
index d0a9f48..ab618c0 100644 (file)
        "prefs-editor": "ឧបករណ៍កែប្រែ",
        "prefs-preview": "ឧបករណ៍មើលជាមុន",
        "prefs-advancedrc": "ជម្រើសថ្នាក់ខ្ពស់",
-       "prefs-opt-out": "ជម្រើសមិនប្រើមុខងារជឿនលឿន",
        "prefs-advancedrendering": "ជម្រើសថ្នាក់ខ្ពស់",
        "prefs-advancedsearchoptions": "ជម្រើសថ្នាក់ខ្ពស់",
        "prefs-advancedwatchlist": "ជម្រើសថ្នាក់ខ្ពស់",
        "contribsub2": "សម្រាប់{{GENDER:$3|$1}} ($2)",
        "contributions-userdoesnotexist": "គណនីអ្នកប្រើប្រាស់ដែលមានឈ្មោះ \"$1\"មិនទាន់បានចុះឈ្មោះទេ។",
        "nocontribs": "គ្មានការផ្លាស់ប្តូរត្រូវបានឃើញដូចនឹងលក្ខណៈវិនិច្ឆ័យទាំងនេះ។",
-       "uctop": "(បច្ចុប្បន្ន)",
+       "uctop": "បច្ចុប្បន្ន",
        "month": "ខែ៖",
        "year": "ឆ្នាំ៖",
        "sp-contributions-newbies": "បង្ហាញតែការរួមចំណែករបស់អ្នកប្រើប្រាស់ថ្មីៗ",
        "tags": "ស្លាក​បំលាស់​ប្ដូរ​ដែល​មាន​សុពលភាព​",
        "tag-filter": "[[Special:Tags|ស្លាក​]] តម្រង​:",
        "tag-filter-submit": "តម្រង",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|ស្លាក|ស្លាក}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|ស្លាក|ស្លាក}}]]: $2",
        "tag-mw-undo": "មិនធ្វើវិញ",
        "tags-title": "ស្លាក​",
        "tags-intro": "ទំព័រ​រាយ​នាម​ស្លាក​ទាំង​ឡាយ​ដែល​កម្មវិធី​ software អាចកត់​សម្គាល់កំណែ​ជាមួយ​ និង​អត្ថ​ន័យ​របស់​វា។​",
        "dberr-again": "សូមរង់ចាំប៉ុន្មាននាទីសិនហើយផ្ទុកឡើងវិញម្ដងទៀត។",
        "dberr-info": "(មិនអាចទាក់ទងទៅប្រភពទិន្នន័យបានទេ៖ $1)",
        "dberr-info-hidden": "(មិនអាចទាក់ទងទៅប្រភពទិន្នន័យបានទេ)",
-       "dberr-usegoogle": "អ្នកអាចសាកស្វែងរកតាមរយៈហ្គូហ្គល(Google)ជាបណ្ដោះអាសន្នសិន។",
-       "dberr-outofdate": "សូមចំណាំ​​ថា​ លិបិក្រម​នៃ​មាតិការ​របស់យើងប្រហែលជាហួស​សម័យ​។​",
-       "dberr-cachederror": "នេះ​គឺ​ជា​ច្បាប់​ចម្លង​ដែលបាន​ដាក់ទៅសតិភ្ជាប់នៃ​ទំព័រ​ដែលបានស្នើសុំ​ និងប្រហែលជាមិនទាន់សម័យ។",
        "htmlform-invalid-input": "មាន​បញ្ហាខ្លះ​​​ជាមួយ​ការ​វាយ​បញ្ចូល​មួយ​ចំនួន​របស់​អ្នក​",
        "htmlform-select-badoption": "តំលៃលេខដែលអ្នកបានកំនត់មិនត្រឹមត្រូវទេ។",
        "htmlform-int-invalid": "តំលៃលេខដែលអ្នកបានកំនត់មិនមែនជាចំនួនគត់ទេ។",
index 8d62dac..4a9f884 100644 (file)
        "mycontris": "ಕಾಣಿಕೆಗಳು",
        "anoncontribs": "ಕಾಣಿಕೆಗಳು",
        "contribsub2": "$1 ($2) ಗೆ",
-       "uctop": "(ಪ್ರಸಕ್ತ)",
+       "uctop": "ಪ್ರಸಕ್ತ",
        "month": "ಈ ತಿಂಗಳಿಂದ (ಮತ್ತು ಮುಂಚಿನ):",
        "year": "ಈ ವರ್ಷದಿಂದ (ಮತ್ತು ಮುಂಚಿನ):",
        "sp-contributions-newbies": "ಹೊಸ ಖಾತೆಗಳ ಕಾಣಿಕೆಗಳನ್ನು ಮಾತ್ರ ತೋರಿಸು",
        "blankpage": "ಖಾಲಿ ಪುಟ",
        "tag-filter": "[[Special:Tags|Tag]] ಶೋಧಕ:",
        "tag-filter-submit": "ಶೋಧಕ",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|ಟ್ಯಾಗ್|ಟ್ಯಾಗ್‌ಗಳು}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|ಟ್ಯಾಗ್|ಟ್ಯಾಗ್‌ಗಳು}}]]: $2",
        "tags-title": "ಅಂಕಿತಗಳು",
        "tags-tag": "ಅಂಕಿತ ನಾಮ",
        "tags-active-header": "ಸಕ್ರಿಯ?",
index 9d21431..69190ca 100644 (file)
        "userlogin-reauth": "당신이 {{GENDER:$1|$1}}임을 검증하려면 다시 로그인해야 합니다.",
        "userlogin-createanother": "다른 계정 만들기",
        "createacct-emailrequired": "이메일 주소",
-       "createacct-emailoptional": "이메일 주소 (선택 사항)",
+       "createacct-emailoptional": "이메일 주소(선택 사항)",
        "createacct-email-ph": "이메일 주소를 입력하세요",
        "createacct-another-email-ph": "이메일 주소를 입력하세요",
        "createaccountmail": "임의의 임시 비밀번호를 이메일로 보내기",
        "createaccountmail-help": "비밀번호를 기억하지 않고도 다른 사용자를 위한 계정을 만들 수 있습니다.",
        "createacct-realname": "실명 (선택 사항)",
        "createacct-reason": "이유",
-       "createacct-reason-ph": "왜 다른 계정을 또 만들어야 합니까",
+       "createacct-reason-ph": "다른 계정을 만들어야 하는 이유가 있나요",
        "createacct-reason-help": "계정 생성 로그에 표시되는 메시지",
        "createacct-submit": "계정 만들기",
        "createacct-another-submit": "계정 만들기",
        "passwordtooshort": "비밀번호는 {{PLURAL:$1|$1 글자}} 이상이어야 합니다.",
        "passwordtoolong": "비밀번호는 {{PLURAL:$1|1자|$1자}}보다 길어서는 안 됩니다.",
        "passwordtoopopular": "자주 사용되는 비밀번호는 쓸 수 없습니다. 추측하기 더 어려운 비밀번호를 지정해 주십시오.",
+       "passwordinlargeblacklist": "입력된 비밀번호는 매우 흔히 쓰이는 비밀번호의 목록에 속합니다. 더 고유한 비밀번호를 지정해 주십시오.",
        "password-name-match": "비밀번호는 사용자 계정 이름과 반드시 달라야 합니다.",
        "password-login-forbidden": "이 사용자 계정 이름과 비밀번호는 사용할 수 없습니다.",
        "mailmypassword": "비밀번호 재설정",
        "localtime": "현지 시각:",
        "timezoneuseserverdefault": "위키 기본값 사용 ($1)",
        "timezoneuseoffset": "기타 (시차를 입력해주세요)",
+       "timezone-useoffset-placeholder": "예시 값: \"-07:00\" 또는 \"01:00\"",
        "servertime": "서버 시각:",
        "guesstimezone": "웹 브라우저 설정에서 가져오기",
        "timezoneregion-africa": "아프리카",
        "prefs-editor": "편집기",
        "prefs-preview": "미리 보기",
        "prefs-advancedrc": "고급 옵션",
-       "prefs-opt-out": "개선 기능에 참여하지 않음",
        "prefs-advancedrendering": "고급 옵션",
        "prefs-advancedsearchoptions": "고급 옵션",
        "prefs-advancedwatchlist": "고급 옵션",
        "prefs-displayrc": "표시 설정",
        "prefs-displaywatchlist": "표시 설정",
+       "prefs-changesrc": "표시되는 변경사항",
+       "prefs-changeswatchlist": "표시되는 변경사항",
+       "prefs-pageswatchlist": "주시 중인 문서",
        "prefs-tokenwatchlist": "토큰",
        "prefs-diffs": "차이",
        "prefs-help-prefershttps": "이 사용자 환경 설정은 다음 로그인부터 적용됩니다.",
        "rcfilters-watchlist-markseen-button": "모든 변경사항을 본 것으로 표시",
        "rcfilters-watchlist-edit-watchlist-button": "내 주시문서 목록 편집",
        "rcfilters-watchlist-showupdated": "변경이 발생한 이후로 방문한 적이 없는 문서의 변경사항은 <strong>굵게</strong> 표시됩니다.",
-       "rcfilters-preference-label": "개선된 버전의 최근 바뀜 숨기기",
-       "rcfilters-preference-help": "2017년 인터페이스 재설계 부분과 그 당시와 그 이후에 추가된 모든 도구를 되돌립니다.",
-       "rcfilters-watchlist-preference-label": "개선된 버전의 주시문서 목록 숨기기",
-       "rcfilters-watchlist-preference-help": "2017 인터페이스 재설계와 이후에 추가된 모든 도구를 되돌립니다.",
+       "rcfilters-preference-label": "자바스크립트가 아닌 인터페이스 사용",
+       "rcfilters-preference-help": "필터 또는 강조 기능이 없는 최근 바뀜을 불러옵니다",
+       "rcfilters-watchlist-preference-label": "자바스크립트가 아닌 인터페이스 사용",
+       "rcfilters-watchlist-preference-help": "필터 또는 강조 기능이 없는 주시문서 목록을 불러옵니다.",
        "rcfilters-filter-showlinkedfrom-label": "다음 문서에서 링크한 문서의 변경사항 보기",
        "rcfilters-filter-showlinkedfrom-option-label": "<strong>선택된 문서에서 링크하는</strong> 문서들",
        "rcfilters-filter-showlinkedto-label": "다음 문서로 링크한 문서의 변경사항 보기",
        "contribsub2": "{{GENDER:$3|$1}}($2)의 기여",
        "contributions-userdoesnotexist": "\"$1\" 사용자 계정은 등록되어 있지 않습니다.",
        "nocontribs": "지정한 조건과 일치하는 바뀜을 찾을 수 없습니다.",
-       "uctop": "(최신)",
+       "uctop": "최신",
        "month": "월:",
        "year": "연도:",
        "date": "날짜부터 (혹은 이전):",
        "tags": "올바른 편집 태그",
        "tag-filter": "[[Special:Tags|태그]] 필터:",
        "tag-filter-submit": "필터",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|태그}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|태그}}]]: $2",
        "tag-mw-contentmodelchange": "콘텐츠 모델 변경",
        "tag-mw-contentmodelchange-description": "페이지의 [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:ChangeContentModel 콘텐츠 모델을 변경하는] 편집",
        "tag-mw-new-redirect": "새 넘겨주기",
        "dberr-again": "잠시 기다리고 나서 다시 불러오세요.",
        "dberr-info": "(데이터베이스 서버에 연결할 수 없습니다: $1)",
        "dberr-info-hidden": "(데이터베이스 서버에 연결할 수 없습니다)",
-       "dberr-usegoogle": "잠시 동안 Google을 통해 검색해볼 수 있습니다.",
-       "dberr-outofdate": "수집된 내용은 오래된 것일 수도 있음을 참고하세요.",
-       "dberr-cachederror": "다음은 요청한 문서의 캐시된 복사본이며, 최신이 아닐 수도 있습니다.",
        "htmlform-invalid-input": "입력한 값에 문제가 있습니다.",
        "htmlform-select-badoption": "지정한 값은 올바른 설정이 아닙니다.",
        "htmlform-int-invalid": "지정한 값은 정수가 아닙니다.",
        "passwordpolicies-policy-passwordcannotmatchblacklist": "비밀번호는 블랙리스트에 있는 비밀번호와 일치할 수 없습니다",
        "passwordpolicies-policy-maximalpasswordlength": "비밀번호는 적어도 $1 {{PLURAL:$1|자}} 미만이어야 합니다",
        "passwordpolicies-policy-passwordcannotbepopular": "비밀번호는 {{PLURAL:$1|저명한 비밀번호가 될|$1개의 저명한 비밀번호에 속할}} 수 없습니다",
+       "passwordpolicies-policy-passwordnotinlargeblacklist": "비밀번호는 가장 흔히 쓰이는 비밀번호 100,000개 목록에 속할 수 없습니다.",
        "easydeflate-invaliddeflate": "주어진 컨텐츠가 적절히 압축되지 않았습니다",
        "unprotected-js": "보안 상의 이유로 자바스크립트는 보호되지 않은 문서로부터 불러올 수 없습니다. 미디어위키: 이름공간이나 사용자의 하위 문서에서만 자바스크립트를 만들어 주십시오."
 }
index c21f150..2bb9d72 100644 (file)
        "contribsub2": "{{GENDER:$3|$1}} къошуму ($2)",
        "contributions-userdoesnotexist": "«$1» тергеу джазыу (аккаунт) регистрацияны ётмегенди.",
        "nocontribs": "Бу критерийлеге келишген тюрлениуле табылмадыла",
-       "uctop": "(бусагъатдагъы)",
+       "uctop": "бусагъатдагъы",
        "month": "Айдан башлаб (эм алгъаракъ):",
        "year": "Джылдан башлаб (эм алгъаракъ):",
        "sp-contributions-newbies": "Джангы тергеу джазыу (аккаунт) бла этилге къошакъны кёргюз",
        "tags": "Джараулу тюрлендириу белгиле",
        "tag-filter": "[[Special:Tags|Тег]] фильтр:",
        "tag-filter-submit": "Фильтрлендир",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Эн|Энле}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Эн|Энле}}]]: $2",
        "tags-title": "Тегле",
        "tags-intro": "Бу бет, джазылыуну тюрлениуюню кёргюзюрге боллукъ теглени эм аланы ангыламларыны тизмесиди.",
        "tags-tag": "Тегни аты",
        "dberr-again": "Талай минутну сакълаб, джангыдан кириб кёрюгюз.",
        "dberr-info": "(билги базаны сервери бла байлам къурулалмайды: $1)",
        "dberr-info-hidden": "(Билги базаны сервери бла байлам къурулалмайды)",
-       "dberr-usegoogle": "Google сайтны болушлугъу бла излеб кёрюрге боллукъсуз.",
-       "dberr-outofdate": "Аны индекси эски болургъа боллугъун унутмагъыз.",
-       "dberr-cachederror": "Тюбюндеги бет, изленнген бетни кэш этилген версиясыды, эмда ахыр тюрлендириулени кёргюзмезге болур.",
        "htmlform-invalid-input": "Сиз къошхан билгилени къаууму проблемагъа чурум болдула",
        "htmlform-select-badoption": "Сиз белгилеген багъа джараулу тюлдю",
        "htmlform-int-invalid": "Сиз белгилеген багъа сан тюлдю",
index f958d1f..576dca4 100644 (file)
        "contributions-title": "Käyttäjän $1 kohennukšet",
        "mycontris": "Kirjutukšet",
        "anoncontribs": "Omat kohennukšet",
-       "uctop": "(nykyhini)",
+       "uctop": "nykyhini",
        "month": "Kuukauši",
        "year": "Vuosi",
        "sp-contributions-newbies": "Näytä uušien käyttäjien muutokšet",
        "fileduplicatesearch-submit": "Ečindy",
        "specialpages": "Erikoiset šivut",
        "tag-filter": "[[Special:Tags|Tag]] filtri:",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Merkki|Merkit}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Merkki|Merkit}}]]: $2",
        "logentry-delete-delete": "$1 {{GENDER:$2|iäreotettu}} šivu $3",
        "logentry-move-move": "$1 {{GENDER:$2|šiirretty}} šivu $3 kohtah $4",
        "logentry-newusers-create": "Käyttäjätunnuš $1 {{GENDER:$2|oli luotu}}",
index a8c3cbd..e7fc0f4 100644 (file)
        "contribsub2": "För {{GENDER:$3|dä|et|dä Metmaacher|de|dat}} $1: $1 ($2)",
        "contributions-userdoesnotexist": "Ene Metmaacher mem Nahme „$1“ ham_mer nit.",
        "nocontribs": "Mer han kein Änderunge jefonge, en de Logböcher, di do paße dähte.",
-       "uctop": "(Neuste)",
+       "uctop": "Neuste",
        "month": "un Moohnt:",
        "year": "Beß Johr:",
        "sp-contributions-newbies": "Nor neu Metmaacher ier Beidräg zeije",
        "tags": "De jöltijje Makkehronge för Änderonge",
        "tag-filter": "[[Special:Tags|Makkehronge]] ußsöhke:",
        "tag-filter-submit": "Beschränke!",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1||$1|Keij}} Kännzeijsche]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1||$1|Keij}} Kännzeijsche]]: $2",
        "tags-title": "Makeeronge",
        "tags-intro": "Heh sin alle de Makeerunge opjeliß, di et Wikki för Änderunge verjävve kann, un wat se bedügge.",
        "tags-tag": "Dä Makkehrong iere Nahme",
        "dberr-again": "Versöhk eijfach en e paa Menotte, norr_ens di Sigg afzerohfe.",
        "dberr-info": "(Mer han kein Verbendong noh_m Dahtebangk-ẞööver krijje künne för: $1)",
        "dberr-info-hidden": "(Mer han kein Verbendong noh_m Dahtebangk-ẞööver krijje künne)",
-       "dberr-usegoogle": "De künnß zweschedorsch ad met <i lang=\"en\">Google</i> söke.",
-       "dberr-outofdate": "Müjjelesch, dat dat Verzeichnes vun uns Sigge do nit janß om neuste Shtannd es.",
-       "dberr-cachederror": "Wat heh noh kütt es en Kopih vum Zwescheschpeischer vun dä Sigg,\ndi De häs han welle. Se künnt jädd ällder un nit mih aktoäll sin.",
        "htmlform-invalid-input": "Mer han e Problem met jet wat De enjejovve häß",
        "htmlform-select-badoption": "Dinge aanjejovve Wäät es kein müjjelesche Ußwahl.",
        "htmlform-int-invalid": "Dinge aanjejovve Wäät eß kein janze Zahl.",
index ee46f7b..cd957a7 100644 (file)
        "mycontris": "Beşdariyên min",
        "anoncontribs": "Beşdariyên min",
        "contribsub2": "Bo {{GENDER:$3|$1}} ($2)",
-       "uctop": "(rojane)",
+       "uctop": "rojane",
        "month": "Ji meha (û zûtir):",
        "year": "Ji sala (û zûtir):",
        "sp-contributions-newbies": "Tenê beşdariyên bikarhênerên nû nîşan bide",
        "blankpage": "Rûpela vala",
        "tag-filter": "Parzûna [[Special:Tags|nîşankirinê]]:",
        "tag-filter-submit": "Parzûn",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Etîket}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Etîket}}]]: $2",
        "tag-mw-undo": "Betal bike",
        "tags-title": "Nîşankirin",
        "tags-tag": "Navê etîketê",
index fdf96e6..8862ef0 100644 (file)
        "anoncontribs": "Къошум",
        "contribsub2": "Ярдым {{GENDER:$3|$1}} ($2)",
        "nocontribs": "Берилген усуллагъа къыйышывлу алышынывлар табылмагъан.",
-       "uctop": "(гьалиги)",
+       "uctop": "гьалиги",
        "month": "Бу айдан (ва дагъы алдан):",
        "year": "Бу йылдан (ва дагъы алдын):",
        "sp-contributions-newbies": "Янгыз янгы гьисаплардан этилген ярдымны гёрсетмек",
        "redirect-file": "Сапламны аты",
        "specialpages": "Хас сагьифалар",
        "tag-filter": "[[Special:Tags|Гьарзилени]] сюзгючю",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Гьарзи|Гьарзилер}}]]: $2)‎",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Гьарзи|Гьарзилер}}]]: $2‎",
        "tags-active-yes": "Дюр",
        "tags-active-no": "Ёкъ",
        "tags-hitcount": "$1 {{PLURAL:$1|алышыныв|алышынывлар}}",
index 947f7a3..691b575 100644 (file)
        "mycontris": "Kevrohow",
        "anoncontribs": "Kevrohow",
        "contribsub2": "Gans {{GENDER:$3|$1}} ($2)",
-       "uctop": "(a-lemmyn)",
+       "uctop": "a-lemmyn",
        "month": "Dhyworth an mis (ha moy a-varr):",
        "year": "Dhyworth an vledhen (ha moy a-varr):",
        "sp-contributions-newbies": "Diskwedhes yn unnik kevrohow akontow nowyth",
        "specialpages-group-login": "Omgelmi / gwruthyl akont",
        "blankpage": "Folen wag",
        "tag-filter": "Sidhel [[Special:Tags|tagyow]]:",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Tagg|Taggys}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Tagg|Taggys}}]]: $2",
        "tags-title": "Taggys",
        "tags-active-no": "Nag yw",
        "tags-edit": "chanjya",
        "dberr-problems": "Drog yw genen! An wiasva-ma a's teves kaletter teknogel.",
        "dberr-again": "Assayewgh gortos pols ha daskarga.",
        "dberr-info": "(Ny yllir kestava orth servyer an database: $1)",
-       "dberr-usegoogle": "Hwi a yll assaya hwilas dre Google.",
        "logentry-delete-delete": "$1 a {{GENDER:$2|dhileas}} an folen $3",
        "logentry-move-move": "$1 {{GENDER:$2|a wayas}} an folen $3 dhe $4",
        "logentry-move-move-noredirect": "$1 {{GENDER:$2|a wayas}} an folen $3 dhe $4 heb gasa daskedyans",
index d979b6a..f601e80 100644 (file)
        "contributions-title": "$1 үчүн колдонуучунун салымдары",
        "mycontris": "Салымдар",
        "contribsub2": "$1 үчүн ($2)",
-       "uctop": "(учурдагы)",
+       "uctop": "учурдагы",
        "month": "Айынан (же андан мурдараак):",
        "year": "Жылынан (же андан мурдараак):",
        "sp-contributions-newbies": "Жаңы эсептерден кылынган салымдарды көрсөтүү",
index e209eba..880416a 100644 (file)
        "updated": "(Novata)",
        "note": "'''Nota:'''",
        "previewnote": "<strong>Memento istud nihil esse nisi prospectum!</strong>\nMutationes tuae nondum servatae sunt!",
-       "editing": "Recensio paginae \"$1\"",
-       "creating": "Creans $1",
-       "editingsection": "Recensens $1 (partem)",
-       "editingcomment": "Recensens $1 (nova pars)",
+       "editing": "Recensetur $1",
+       "creating": "Creabitur $1",
+       "editingsection": "Recensetur $1 (partim)",
+       "editingcomment": "Recensetur $1 (nova pars)",
        "editconflict": "Contentio recensionis: $1",
        "explainconflict": "Alius hanc paginam mutavit postquam eadem recensere incipiebas.\nCapsa superior paginae verba recentissima continet.\nMutationes tuae in capsa inferiore monstrantur.\nMutationes tuae in verba superiora adiungare debes.\n'''Solum''' verba capsae superioris servabuntur quando \"$1\" premes.",
        "yourtext": "Tua redactio",
        "deletereason-dropdown": "*Causae deletionum communes\n** Spam\n** Vandalismus\n** Violatio verborum privatorum\n** Desiderium auctoris\n** Redirectio fracta",
        "delete-edit-reasonlist": "Causas deletionum recensere",
        "rollback": "Reverti mutationes",
-       "rollbacklink": "reverti",
+       "rollbacklink": "Plura statim revertere",
        "rollbacklinkcount": "reverti {{PLURAL:$1|unam recensionem|$1 recensiones}}",
        "rollbacklinkcount-morethan": "reverti plus quam {{PLURAL:$1|unam recensionem|$1 recensiones}}",
        "rollbackfailed": "Reversum defecit",
        "anoncontribs": "Conlationes",
        "contribsub2": "factae ab usore \"$1\" ($2)",
        "nocontribs": "Nullae mutationes inventae sunt ex his indiciis.",
-       "uctop": "(vertex)",
+       "uctop": "vertex",
        "month": "Ab mense (et prior):",
        "year": "Ab anno (et prior):",
        "sp-contributions-newbies": "Nullas conlationes nisi a conlatoribus novis factis ostendere",
        "tags": "Affixa mutationum validarum",
        "tag-filter": "[[Special:Tags|Tag]] Colum:",
        "tag-filter-submit": "Filtrum",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Tag|Tags}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Tag|Tags}}]]: $2",
        "tags-title": "Affixa",
        "tags-active-yes": "Sic",
        "tags-edit": "recensere",
index 1fffe53..e5a4525 100644 (file)
        "contributions-title": "Ajustamientos {{GENDER:$1|del usuario|de la usuaria}} $1",
        "mycontris": "Kontribüsyones",
        "contribsub2": "Para {{GENDER:$3|$1}}($2)",
-       "uctop": "(korriente)",
+       "uctop": "korriente",
        "month": "Desde el mes (i antes):",
        "year": "Desde el anyo (i antes):",
        "sp-contributions-newbies": "Mostrar solo las ajustamientos de los usuarios nuevos",
index 7f80ac6..33c0478 100644 (file)
        "prefs-editor": "Editeur",
        "prefs-preview": "Kucken ouni ofzespäicheren",
        "prefs-advancedrc": "Méi Optiounen",
-       "prefs-opt-out": "Verbesserungen net méi benotzen",
        "prefs-advancedrendering": "Méi Optiounen",
        "prefs-advancedsearchoptions": "Méi Optiounen",
        "prefs-advancedwatchlist": "Méi Optiounen",
        "rcfilters-watchlist-edit-watchlist-button": "Ännert Är Lëscht vun iwwerwaachte Säiten",
        "rcfilters-watchlist-showupdated": "Ännerungen op Säiten déi Dir net besicht hutt zanter d'Ännerunge gemaach goufen si <strong>fett</strong> geschriwwen.",
        "rcfilters-preference-label": "Déi verbessert Versioun vun de rezenten Ännerunge verstoppen",
-       "rcfilters-watchlist-preference-label": "Déi verbessert Versioun vun der Iwwerwaachungslëscht verstoppen",
+       "rcfilters-watchlist-preference-label": "Den Interface ouni JavaScript benotzen",
        "rcfilters-target-page-placeholder": "Gitt en Numm vun enger Säit (oder enger Kategorie) an",
        "rcnotefrom": "Hei drënner {{PLURAL:$5|gëtt d'Ännerung|ginn d'Ännerungen}} zanter <strong>$3, $4</strong> (maximal <strong>$1</strong> Ännerunge gi gewisen).",
        "rclistfromreset": "Eraussiche vum Datum zrécksetzen",
        "contribsub2": "Fir {{GENDER:$3|den $1|d'$1|de Benotzer $1}} ($2)",
        "contributions-userdoesnotexist": "De Benotzerkont \"$1\" ass net registréiert.",
        "nocontribs": "Et goufe keng Ännerunge fonnt, déi dëse Critèren entspriechen.",
-       "uctop": "(aktuell)",
+       "uctop": "aktuell",
        "month": "Vum Mount (a virdrun):",
        "year": "Vum Joer (a virdrun):",
        "date": "Vum Datum (a virdrun):",
        "tags": "Valabel Ännerungsmarkéierungen",
        "tag-filter": "[[Special:Tags|Markéierungs]]-Filter:",
        "tag-filter-submit": "Filter",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Tag|Tags}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Tag|Tags}}]]: $2",
        "tag-mw-contentmodelchange": "Ännerung vum Modell vum Inhalt",
        "tag-mw-contentmodelchange-description": "Ännerungen, déi [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:ChangeContentModel de Modell vum Inhalt] vun enger Säit änneren",
        "tag-mw-new-redirect": "Nei Viruleedung",
        "dberr-again": "Versicht e puer Minutten ze waarden an dann nei ze lueden.",
        "dberr-info": "(D'Datebank kann net erreecht ginn: $1)",
        "dberr-info-hidden": "(D'Datebank kann net erreecht ginn)",
-       "dberr-usegoogle": "An der Tëschenzäit kënnt Dir probéiere mam Google ze sichen.",
-       "dberr-outofdate": "Denkt drunn, datt de Sichindex vun eisen Inhalte méiglecherweis net aktuell ass.",
-       "dberr-cachederror": "Dëst ass eng tëschegespäichert Kopie vun der gefroter Säit, a si kann eventuell net aktuell sinn.",
        "htmlform-invalid-input": "Et gëtt Problemer mat de Wäerter déi Dir aginn hutt.",
        "htmlform-select-badoption": "De Wäert deen Dir aginn hutt ass keng valabel Optioun.",
        "htmlform-int-invalid": "De Wäert deen Dir aginn hutt ass keng ganz Zuel.",
index 4c7a700..094cbd1 100644 (file)
        "prefs-editor": "Editador",
        "prefs-preview": "Previde",
        "prefs-advancedrc": "Elejes avansada",
-       "prefs-opt-out": "No partisipa en bonis",
        "prefs-advancedrendering": "Elejes avansada",
        "prefs-advancedsearchoptions": "Elejes avansada",
        "prefs-advancedwatchlist": "Elejes avansada",
        "contribsub2": "Per {{GENDER:$3|$1}} ($2)",
        "contributions-userdoesnotexist": "Conta de usor \"$1\" no es rejistrada.",
        "nocontribs": "No cambias corespondente a esta criterios ia es trovada.",
-       "uctop": "(aora)",
+       "uctop": "aora",
        "month": "De mense (e plu vea):",
        "year": "De anio (e plu vea):",
        "sp-contributions-newbies": "Mostra sola contribuis de contas nova",
        "tags": "Eticetas valida de cambia",
        "tag-filter": "Filtro par [[Special:Tags|eticeta]]:",
        "tag-filter-submit": "Filtri",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Eticeta|Eticetas}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Eticeta|Eticetas}}]]: $2",
        "tag-mw-contentmodelchange": "cambia de model de contenida",
        "tag-mw-contentmodelchange-description": "Editas cual [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:ChangeContentModel cambia la model de contenida] de un paje",
        "tag-mw-new-redirect": "Redirije nova",
        "dberr-again": "Per favore, pausa per alga minutos e recarga.",
        "dberr-info": "(Banco de datos no es asedable: $1)",
        "dberr-info-hidden": "(Banco de datos no es asedable)",
-       "dberr-usegoogle": "Tu pote usa Google per xerca entretempo.",
-       "dberr-outofdate": "Nota ce sua catalogos de nosa contenida es cisa nonfresca.",
-       "dberr-cachederror": "Esta es un copia prememorida de la paje solisitada, e es cisa nonfresca.",
        "htmlform-invalid-input": "Alga de tua enflue ave problemes.",
        "htmlform-select-badoption": "La valua spesifada no es un eleje valida.",
        "htmlform-int-invalid": "La valua spesifada no es un entero.",
index 3acc272..be1a338 100644 (file)
        "contributions-title": "$1 byawaddeyo",
        "mycontris": "Byempaddeyo",
        "contribsub2": "$1 ($2)",
-       "uctop": "(enkyukakyuka esembye ku lupapula)",
+       "uctop": "enkyukakyuka esembye ku lupapula",
        "month": "Mu mwezi (n'egyakulembera):",
        "year": "Mu mwaka (n'egyakulembera):",
        "sp-contributions-newbies": "Ndaga ebikoledwa abaak'egata ku Wiki byokka",
index ffc87a0..e490d21 100644 (file)
        "prefs-editor": "Bewirker",
        "prefs-preview": "Veurbesjouwing",
        "prefs-advancedrc": "Wiejer instèllinger",
-       "prefs-opt-out": "Neet mitdoen aan de verbeteringe",
        "prefs-advancedrendering": "Wiejer instèllinger",
        "prefs-advancedsearchoptions": "Wiejer instèllinger",
        "prefs-advancedwatchlist": "Wiejer instèllinger",
        "contribsub2": "Veur {{GENDER:$3|$1}} ($2)",
        "contributions-userdoesnotexist": "Gebroekerskonto \"$1\" is neet geregistreerd.",
        "nocontribs": "Gein wijzigingen gevonden die aan de gestelde criteria voldoen.",
-       "uctop": "(litste verangering)",
+       "uctop": "litste verangering",
        "month": "Van maond (en ierder):",
        "year": "Van jaor (en ierder):",
        "sp-contributions-newbies": "Tuin allein de biedrage van nuuj gebroekers",
        "tags": "Geldige wiezigingslabels",
        "tag-filter": "[[Special:Tags|Labelfilter]]:",
        "tag-filter-submit": "Filtere",
-       "tag-list-wrapper": "([[Special:Tags|Label{{PLURAL:$1||s}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|Label{{PLURAL:$1||s}}]]: $2",
        "tag-mw-contentmodelchange": "inhawdsmodelverangering",
        "tag-mw-contentmodelchange-description": "Bewirkinge die [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:ChangeContentModel 't  inhawdsmodel van 'n pagina verangere]",
        "tag-mw-new-redirect": "Nuje redirek",
        "dberr-again": "Wach n aantal minute en probeer t daonao opnuuj.",
        "dberr-info": "(Kan gein toegank kriege toet de databank: $1)",
        "dberr-info-hidden": "(Kan gein toegank kriege toet de databank)",
-       "dberr-usegoogle": "Wellich kins se in de tussetied zeuke via Google.",
-       "dberr-outofdate": "Let op: häör indices ven os pagina's zeen wellich neet recent.",
-       "dberr-cachederror": "Deze pagina is n kopie oet de cache en is wellich neet de lèste versie.",
        "htmlform-invalid-input": "d'r Zeen perbleme mit inkel ingegaeve waerd",
        "htmlform-select-badoption": "De ingegaeve waerd is óngeljig.",
        "htmlform-int-invalid": "De ingegaeve waerd is gei gans getal.",
index 6a59927..7399303 100644 (file)
        "contribsub2": "Pe {{GENDER:$3|$1}} ($2)",
        "contributions-userdoesnotexist": "L'utença \"$1\" a no l'è registrâ.",
        "nocontribs": "Cangi che soddisfan i critei de riçerca no se n'è atrovou.",
-       "uctop": "(atoâle)",
+       "uctop": "atoâle",
        "month": "Partindo da-o meize (e precedénti):",
        "year": "Partindo da l'anno (e precedenti):",
        "sp-contributions-newbies": "Fanni védde sôlo e contribuçioìn di nêuvi utenti",
        "tags": "Etichette de modiffiche vallide",
        "tag-filter": "Filtra pe [[Special:Tags|etichetta]]:",
        "tag-filter-submit": "Filtro",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Etichetta|Etichette}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Etichetta|Etichette}}]]: $2",
        "tag-mw-contentmodelchange": "cangio a-o modello di contegnui",
        "tag-mw-contentmodelchange-description": "Modiffiche che [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:ChangeContentModel cangian o modello di contegnui] de 'na paggina",
        "tags-title": "Etichette",
        "dberr-again": "Proeuva a aspêtâ quarche menuto e recarrega.",
        "dberr-info": "(Imposcibbile accede a-o database: $1)",
        "dberr-info-hidden": "(Imposcibbile accede a-o database)",
-       "dberr-usegoogle": "Ti poeu provâ a çercâ insce Google into fratempo.",
-       "dberr-outofdate": "Notta che a so indiçizaçion di nostri contegnui a poriæ no ese agiornâ.",
-       "dberr-cachederror": "Questa a l'è una coppia cache dea paggina domandâ, e a poriæ no ese agiornâ.",
        "htmlform-invalid-input": "Gh'è di problemi co-i dæti inseii.",
        "htmlform-select-badoption": "O valô specificou a no l'è un'opçion vallida.",
        "htmlform-int-invalid": "O valô specificou o no l'è un intrego.",
index 71b7f6e..5a7d305 100644 (file)
        "contribsub2": "برای {{GENDER:$3|$1}} ($2)",
        "contributions-userdoesnotexist": "حساب کاربری «$1» ثبت نشده‌است.",
        "nocontribs": "هیچ تغییری با این مشخصات یافت نشد.",
-       "uctop": "(نؤسخهٔ ایسه)",
+       "uctop": "نؤسخهٔ ایسه",
        "month": ":)در این سال (و پیش از آن",
        "year": ":)در این سال (و پیش از آن",
        "sp-contributions-newbies": "فقط مشارکت‌های تازه‌کاران نمایش داده شود",
        "tags": "برچسب‌های گؤەڕانن/تغییر مجاز",
        "tag-filter": ":فیلتر کۀ[[Special:Tags|برچسب‌ۀل]]",
        "tag-filter-submit": "پالانۀل/فیلترۀل",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|بۀرچۀسب|بۀرچۀسبۀل}}]]:$2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|بۀرچۀسب|بۀرچۀسبۀل}}]]:$2",
        "tags-title": "برچسب‌ها",
        "tags-intro": "این وةڵگة فهرستی‌است از برچسب‌هایی که نرم‌افزار با آن‌ها ویرایش‌ها را علامت‌گذری می‌کند، به همراه معانی آن‌ها.",
        "tags-tag": "نام برچسب",
        "dberr-again": "چند دقیقه صبر کنید و دوباره وةڵگة را بارگیری کنید.",
        "dberr-info": "(امکان برقراری ارتباط با پایگاه داده وجود ندارد: $1)",
        "dberr-info-hidden": "(امکان تماس با پایگاه‌داده نیست)",
-       "dberr-usegoogle": "شما در این مدت می‌توانید با استفاده از گوگل جستجو کنید.",
-       "dberr-outofdate": "توجه کنید که نمایه‌های آن‌ها از محتوای ما ممکن است به روز نباشد.",
-       "dberr-cachederror": "آن‌چه در ادامه می‌آید یک کپی از صفحهٔ درخواست شده است که در کاشه قرار دارد، و ممکن است به روز نباشد.",
        "htmlform-invalid-input": "بخشی از ورودی شما مشکل دارد",
        "htmlform-select-badoption": "مقدار وارد شده یک گزینهٔ قابل قبول نیست.",
        "htmlform-int-invalid": "مقداری که وارد کردید یک عدد صحیح نیست.",
index 2bc0fab..9b37217 100644 (file)
        "contributions-title": "Cuntribüzión de $1",
        "mycontris": "I mè intervent",
        "contribsub2": "Per $1 ($2)",
-       "uctop": "(ültima per la pagina)",
+       "uctop": "ültima per la pagina",
        "month": "A partì del mes (e quij inanz)",
        "year": "A partì de l'ann (e quij inanz)",
        "sp-contributions-newbies": "Fà vidè dumà i cuntribüzión di dvurat növ",
index 8011325..5aad6f3 100644 (file)
        "mycontris": "ປະກອບສ່ວນ",
        "contribsub2": "ສຳຫຼັບ $1 ($2)",
        "nocontribs": "ຍັງບໍ່ມີການປ່ຽນແປງ ໃນນີ້.",
-       "uctop": "(ເທິງສຸດ)",
+       "uctop": "ເທິງສຸດ",
        "month": "ແຕ່ເດືອນ (ແລະກ່ອນໜ້ານັ້ນ):",
        "year": "ແຕ່ປີ (ແລະກ່ອນໜ້ານັ້ນ):",
        "sp-contributions-newbies": "ສະແດງສະເພາະ ການປະກອບສ່ວນ ໂດຍ ບັນຊີໃໝ່",
index 06226ab..1c26d7b 100644 (file)
        "contributions": "Afina di sebelu",
        "mycontris": "Zwa afina",
        "contribsub2": "Di $1 ($2)",
-       "uctop": "(nca ng'i)",
+       "uctop": "nca ng'i",
        "month": "Di muna (previ):",
        "year": "Dyanu (previ):",
        "sp-contributions-newbies": "Kamukile afina di sebelu nca",
index 085d254..ddb0099 100644 (file)
        "contribsub2": "سي {{جنسيت:$3|$1}} ($2)",
        "contributions-userdoesnotexist": "کاریار \"$1\" ثوت نام نکرده.",
        "nocontribs": "هیچ آلشتی وا ای مشقصات دیاری نکرد.",
-       "uctop": "(تازه باو)",
+       "uctop": "تازه باو",
        "month": "د ما(یا زیتر)",
        "year": "د سال",
        "sp-contributions-newbies": "فقط هومیاری یایی که د حساو تازه بیه نشون بئه",
        "tags": "سردیسیا آلشت دئن خو",
        "tag-filter": "فيلتر [[Special:سردیس|سردیسیا]]:",
        "tag-filter-submit": "فيلتر",
-       "tag-list-wrapper": "([[Special:سردیسیا|{{PLURAL:$1|سردیس|سردیسیا}}]]: $2)",
+       "tag-list-wrapper": "[[Special:سردیسیا|{{PLURAL:$1|سردیس|سردیسیا}}]]: $2",
        "tags-title": "سردیسیا",
        "tags-intro": "ای بلگه یه گل نومگه د سردیسیاییه که نرم افزار وا ونو ویرایشتیا نه نشو کاری میکه، الوت واگرد هومبراوریاشو.",
        "tags-tag": "نوم سردیس",
        "dberr-again": "چن دیقه آهره داری بکیت و دنو بلگه نه سوار بکیت.",
        "dberr-info": "(نبوئه وه رسینه جا:$1 دسرسی داشتوئیت)",
        "dberr-info-hidden": "(نبوئه د رسینه گا دسرسی داشت)",
-       "dberr-usegoogle": "شما د ای گات می تونیت سی پی جوری گوگل نه وه کار بئریت.",
-       "dberr-outofdate": "د ویر داشتوئیت که سیائه یا ونو د مینونه یا ایما شایت وه هنگوم نبا.",
-       "dberr-cachederror": "او چی که ها نها میا یه گل ورداشته د بلگه حاستنیه که که ها د کش و شایت  وه هنگوم نبا.",
        "htmlform-invalid-input": "یه قری مشگل ها د پاره یی د درینده یا شما.",
        "htmlform-select-badoption": "ارزایشتی که دئیته یه گل گزینه حاستنی نئ.",
        "htmlform-int-invalid": "ارزایشتی که دئیته یه گل عدد صحیح نئ.",
index 27843f4..0887611 100644 (file)
        "prefs-editor": "Redaktorius",
        "prefs-preview": "Peržiūra",
        "prefs-advancedrc": "Papildomi nustatymai",
-       "prefs-opt-out": "Atsisakyti patobulinimų",
        "prefs-advancedrendering": "Papildomi nustatymai",
        "prefs-advancedsearchoptions": "Papildomi nustatymai",
        "prefs-advancedwatchlist": "Papildomi nustatymai",
        "group-autoconfirmed": "Automatiškai patvirtinti naudotojai",
        "group-bot": "Robotai",
        "group-sysop": "Administratoriai",
+       "group-interface-admin": "Sąsajos administratoriai",
        "group-bureaucrat": "Biurokratai",
        "group-suppress": "Slopintojai",
        "group-all": "(visi)",
        "group-autoconfirmed-member": "{{GENDER:$1|automatiškai patvirtintas naudotojas|automatiškai patvirtinta naudotoja}}",
        "group-bot-member": "{{GENDER:$1|robotas}}",
        "group-sysop-member": "{{GENDER:$1|administratorius|administratorė}}",
+       "group-interface-admin-member": "{{GENDER:$1|sąsajos administratorius}}",
        "group-bureaucrat-member": "{{GENDER:$1|biurokratas|biurokratė}}",
        "group-suppress-member": "{{GENDER:$1|slopintojas|slopintoja}}",
        "grouppage-user": "{{ns:project}}:Naudotojai",
        "contribsub2": "Naudotojas: {{GENDER:$3|$1}} ($2)",
        "contributions-userdoesnotexist": "Naudotojo paskyra „$1“ neužregistruota.",
        "nocontribs": "Jokie keitimai neatitiko šių kriterijų.",
-       "uctop": "(dabartinis)",
+       "uctop": "dabartinis",
        "month": "Nuo mėnesio (ir anksčiau):",
        "year": "Nuo metų (ir anksčiau):",
        "date": "Nuo datos (ir anksčiau):",
        "tags": "Leistinos keitimų žymės",
        "tag-filter": "[[Special:Tags|Žymų]] filtras:",
        "tag-filter-submit": "Filtras",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Žyma|Žymos}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Žyma|Žymos}}]]: $2",
        "tag-mw-contentmodelchange": "turinio modulio keitimas",
        "tag-mw-contentmodelchange-description": "Pakeitimai, kurie [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:ChangeContentModel keičia puslapio turinio modelį]",
        "tag-mw-new-redirect": "Naujas nukreipimas",
        "dberr-again": "Palaukite kelias minutes ir perkraukite puslapį.",
        "dberr-info": "(Nepavyksta pasiekti duomenų bazės: $1)",
        "dberr-info-hidden": "(Nepavyksta pasiekti duomenų bazės)",
-       "dberr-usegoogle": "Šiuo metu jūs galite ieškoti per „Google“.",
-       "dberr-outofdate": "Mūsų turinio kopijos ten gali būti pasenusios.",
-       "dberr-cachederror": "Tai prašomo puslapio išsaugota kopija, ji gali būti pasenusi.",
        "htmlform-invalid-input": "Yra problemų su jūsų įvestimi",
        "htmlform-select-badoption": "Reikšmė, kurią nurodėte, nėra leistina.",
        "htmlform-int-invalid": "Reikšmė, kurią nurodėte, nėra sveikasis skaičius.",
index b641dc0..ab7e9f6 100644 (file)
        "mycontris": "Kutthawhnate",
        "contribsub2": "$1 tan ($2) .",
        "nocontribs": "I zawn mil tihdanglamna a awm miah lo a nih hmel.",
-       "uctop": "(chung)",
+       "uctop": "chung",
        "month": "Thla (leh a hmalam):",
        "year": "Kum (leh a hmalam):",
        "sp-contributions-newbies": "Siangchan tharte kut-thawhna chauh tilang rawh",
index 4acf87d..fa745ca 100644 (file)
        "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|گأپ]])",
        "specialpages": "بألگە یل ڤیجە",
        "tag-filter": "[[Special:Tags|بأرچأسب]] فیلتر:",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|بأرچسب|بأرچسبل}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|بأرچسب|بأرچسبل}}]]: $2",
        "logentry-delete-delete": "$1 {{GENDER:$2|حأذف ڤابیدھ}} بألگە $3",
        "logentry-move-move": "$1 {{GENDER:$2|انتقال دادھ بیه}} بلگه $3 ۉھ $4",
        "logentry-newusers-create": "حسآۉ کارڤأر $1 ڤابیە {{GENDER:$2|راس ڤیدھ }}",
index 5bd70c9..fd6e131 100644 (file)
        "prefs-editor": "Redaktors",
        "prefs-preview": "Priekšskatījums",
        "prefs-advancedrc": "Papildu iespējas",
-       "prefs-opt-out": "Atteikties no uzlabojumiem",
        "prefs-advancedrendering": "Papildu iespējas",
        "prefs-advancedsearchoptions": "Papildu iespējas",
        "prefs-advancedwatchlist": "Papildu iespējas",
        "rcfilters-filtergroup-lastRevision": "Pašreizējās versijas",
        "rcfilters-filter-lastrevision-label": "Pašreizējā versija",
        "rcfilters-filter-lastrevision-description": "Tikai nesenākā lapas izmaiņa.",
-       "rcfilters-filter-previousrevision-label": "Agrākas versijas",
+       "rcfilters-filter-previousrevision-label": "Ne pēdējā versija",
        "rcfilters-filter-previousrevision-description": "Visas izmaiņas, kas nav lapas pēdējā izmaiņa.",
        "rcfilters-exclude-button-off": "Izslēgt izvēlētos",
        "rcfilters-view-tags": "Iezīmētie labojumi",
        "rcfilters-watchlist-markseen-button": "Atzīmēt visas izmaiņas kā apskatītas",
        "rcfilters-watchlist-edit-watchlist-button": "Labot manu uzraugāmo lapu sarakstu",
        "rcfilters-watchlist-showupdated": "Izmaiņas lapās, kuras nav apmeklētas kopš izmaiņu veikšanas, ir <strong>trekninātā rakstā</strong>.",
-       "rcfilters-preference-label": "Paslēpt uzlaboto pēdējo izmaiņu versiju",
+       "rcfilters-preference-label": "Izmantot saskarni bez JavaScript atbalsta",
        "rcfilters-target-page-placeholder": "Ievadi lapas nosaukumu (vai kategoriju)",
        "rcnotefrom": "Zemāk {{PLURAL:$5|redzamas izmaiņas|redzama izmaiņa|redzamas izmaiņas}} kopš <strong>$3, $4</strong> (parādītas ne vairāk kā <strong>$1</strong>).",
        "rclistfromreset": "Atiestatīt datuma izvēli",
        "speciallogtitlelabel": "Mērķis (nosaukums vai {{ns:user}}:lietotājvārds dalībniekam):",
        "log": "Reģistri",
        "logeventslist-submit": "Rādīt",
+       "logeventslist-patrol-log": "Pārbaudes reģistrs",
+       "logeventslist-tag-log": "Iezīmju žurnāls",
        "all-logs-page": "Visi publiski pieejamie reģistri",
        "alllogstext": "Visi pieejamie {{grammar:akuzatīvs{{SITENAME}}}} reģistri.\nTu vari sašaurināt aplūkojamo reģistru, izvēloties reģistra veidu, lietotāja vārdu vai reģistrēto lapu. Visi teksta lauki izšķir lielos un mazos burtus.",
        "logempty": "Reģistrā nav atbilstošu ierakstu.",
        "contribsub2": "{{GENDER:$3|Dalībnieks|Dalībniece}}: $1 ($2)",
        "contributions-userdoesnotexist": "Dalībnieks \"$1\" nav reģistrēts.",
        "nocontribs": "Netika atrastas izmaiņas, kas atbilstu šiem kritērijiem.",
-       "uctop": "(pēdējā izmaiņa)",
+       "uctop": "pēdējā izmaiņa",
        "month": "No mēneša (un senāki):",
        "year": "No gada (un senāki):",
+       "date": "No datuma (un senāki):",
        "sp-contributions-newbies": "Rādīt jauno lietotāju devumu",
        "sp-contributions-newbies-sub": "Jaunie lietotāji",
        "sp-contributions-newbies-title": "Jauno dalībnieku devums",
        "tags": "Derīgas izmaiņu iezīmes",
        "tag-filter": "[[Special:Tags|Iezīmju]] filtrs:",
        "tag-filter-submit": "Filtrs",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Iezīmes|Iezīme|Iezīmes}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Iezīmes|Iezīme|Iezīmes}}]]: $2",
        "tag-mw-contentmodelchange": "satura modeļa izmaiņa",
        "tag-mw-contentmodelchange-description": "Labojumi, kas [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:ChangeContentModel maina lapas satura modeli]",
        "tag-mw-new-redirect": "Jauna pāradresācija",
        "dberr-again": "Uzgaidiet dažas minūtes un pārlādējiet šo lapu.",
        "dberr-info": "(Nevar piekļūt datubāzei: $1)",
        "dberr-info-hidden": "(Nevar piekļūt datubāzei)",
-       "dberr-usegoogle": "Pa to laiku Jūs varat izmantot Google meklēšanu.",
-       "dberr-outofdate": "Ņemiet vērā, ka mūsu satura indeksācija var būt novecojusi.",
-       "dberr-cachederror": "Šī ir lapas agrāk saglabātā kopija, tā var nebūt atjaunināta.",
        "htmlform-invalid-input": "Ar dažiem datiem no Jūsu ievades ir problēmas",
        "htmlform-select-badoption": "Vērtība, ko Jūs norādījāt, nav derīga.",
        "htmlform-int-invalid": "Vērtība, ko Jūs norādījāt, nav vesels skaitlis.",
        "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 ($4)",
+       "restore-count-revisions": "{{PLURAL:$1|$1 versijas|$1 versija|$1 versijas}}",
        "restore-count-files": "{{PLURAL: $1|$1 faili|$1 fails|$1 faili}}",
        "logentry-delete-revision": "$1 {{GENDER:$2|nomainīja}} $5 {{PLURAL:$5|versiju|versijas|versiju}} redzamību lapai $3: $4",
        "logentry-suppress-delete": "$1 {{GENDER:$2|cenzēja}} lapu $3",
        "revdelete-unrestricted": "noņemt administratoriem ierobežojumus",
        "logentry-block-block": "$1 {{GENDER:$2|nobloķēja}} {{GENDER:$4|$3}} ar beigu termiņu $5 $6",
        "logentry-block-unblock": "$1 {{GENDER:$2|atbloķēja}} {{GENDER:$4|$3}}",
+       "logentry-import-interwiki": "$1 {{GENDER:$2|importēja}} $3 no citas vikivietnes",
        "logentry-move-move": "$1 {{GENDER:$2|pārvietoja}} lapu $3 uz $4",
        "logentry-move-move-noredirect": "$1 {{GENDER:$2|pārvietoja}} lapu $3 uz $4, neatstājot pāradresāciju",
        "logentry-move-move_redir": "$1 {{GENDER:$2|pārvietoja}} lapu $3 uz $4, atstājot pāradresāciju",
index f27c5de..0aa70fb 100644 (file)
@@ -24,7 +24,8 @@
                        "SolidBlock",
                        "Suchichi02",
                        "逆襲的天邪鬼",
-                       "Fitoschido"
+                       "Fitoschido",
+                       "A2093064"
                ]
        },
        "tog-underline": "以底線識鏈接:",
        "newwindow": "啟窗",
        "cancel": "捨",
        "moredotdotdot": "見逾",
-       "morenotlisted": "列未成。",
+       "morenotlisted": "å\88\97æ\88\96æ\9cªæ\88\90ã\80\82",
        "mypage": "寒舍",
        "mytalk": "書房",
        "anontalk": "議",
        "views": "覽",
        "toolbox": "多寶",
        "tool-link-userrights": "{{GENDER:$1|職權}}",
+       "tool-link-userrights-readonly": "權界",
        "tool-link-emailuser": "{{GENDER:$1|遺書}}",
        "imagepage": "述",
        "mediawikipage": "觀訊",
        "revdelete-hide-text": "審文",
        "revdelete-hide-image": "藏檔容",
        "revdelete-hide-comment": "纂摘",
-       "revdelete-hide-user": "簿、IP址以藏",
+       "revdelete-hide-user": "簿、IP址",
        "revdelete-hide-restricted": "廢有秩與簿之事",
        "revdelete-radio-same": "(無改)",
        "revdelete-radio-set": "藏",
        "searchprofile-advanced-tooltip": "自定名集中尋",
        "search-result-size": "$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-suggest": "爾否解之:$1",
        "search-interwiki-caption": "結義金蘭",
        "prefs-watchlist-token": "哨幣:",
        "prefs-misc": "雜",
        "prefs-resetpass": "更符節",
-       "prefs-changeemail": "更郵址",
+       "prefs-changeemail": "更或刪郵址",
        "prefs-setemail": "設電郵址",
        "prefs-email": "傳書",
        "prefs-rendering": "觀",
        "prefs-files": "檔",
        "prefs-custom-css": "定之CSS",
        "prefs-custom-js": "定之JavaScript",
-       "prefs-common-config": "共CSS/JavaScript於面版:",
+       "prefs-common-config": "共CSS/JSON/JavaScript於面版:",
        "prefs-reset-intro": "爾用頁重設至預之設。無修之也。",
        "prefs-emailconfirm-label": "確郵:",
        "youremail": "郵:",
        "userrights-lookup-user": "司社",
        "userrights-user-editname": "簿名:",
        "editusergroup": "治社",
-       "editinguser": "正纂簿'''[[User:$1|$1]]''' ([[User talk:$1|{{int:talkpagelinktext}}]]{{int:pipe-separator}}[[Special:Contributions/$1|{{int:contribslink}}]]) 之權",
+       "editinguser": "正纂簿<strong>[[User:$1|$1]]</strong>之權",
        "userrights-editusergroup": "治社",
+       "userrights-viewusergroup": "權界",
        "saveusergroups": "定之",
        "userrights-groupsmember": "有員:",
        "userrights-groupsmember-auto": "固有員:",
        "right-reupload-shared": "於本無視共媒物庫上之品物",
        "right-upload_by_url": "由URL貢品物",
        "right-purge": "無確認頁除網存",
-       "right-autoconfirmed": "çº\82å\8d\8aé\8c®ä¹\8bé \81",
+       "right-autoconfirmed": "ç\84¡å\9fºIPç\8e\87ä¹\8bä¸\8aé\99\90",
        "right-bot": "視自動之程序",
        "right-nominornewtalk": "小改無發新信之示",
        "right-apihighlimits": "於API查頂上",
        "right-ipblock-exempt": "繞IP鎖、自鎖與圍鎖",
        "right-unblockself": "自解鎖",
        "right-protect": "改錮級與纂錮頁",
-       "right-editprotected": "纂錮頁(無連錮)",
+       "right-editprotected": "纂「{{int:protect-level-sysop}}」錮頁",
        "right-editinterface": "纂要",
        "right-editusercss": "纂他簿之CSS檔",
        "right-edituserjs": "纂他簿之JavaScript檔",
        "anoncontribs": "績",
        "contribsub2": "$1勛($2)",
        "nocontribs": "無勛及也。",
-       "uctop": "(至頂)",
+       "uctop": "至頂",
        "month": "且不越",
        "year": "年不越",
        "sp-contributions-newbies": "惟列新進",
        "intentionallyblankpage": "此頁為白也,試速之用",
        "external_image_whitelist": " #同留<pre>\n#下(中之//)乃正表式\n#乃外(連)圖配之\n#配乃成像,非配則成連\n#有 # 之為注\n#無為大小之異也\n\n#入正表式。同留</pre>",
        "tag-filter": "[[Special:Tags|標]] 之濾:",
-       "tag-list-wrapper": "([[Special:Tags|$1簽]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|$1簽]]: $2",
        "tags-title": "標",
        "tags-tag": "標名",
        "tags-source-header": "源",
index 96883a5..71caf85 100644 (file)
@@ -24,7 +24,8 @@
                        "Tulsi Bhagat",
                        "Macofe",
                        "राम प्रसाद जोशी",
-                       "Fitoschido"
+                       "Fitoschido",
+                       "Haribanshi"
                ]
        },
        "tog-underline": "लिङ्कके रेखाङ्कित करी:",
        "botpasswords-label-grants-column": "प्रदान कएल",
        "botpasswords-bad-appid": "बोट नाम \"$1\" मान्य नै अछि।",
        "resetpass_forbidden": "कूटशब्द नै बदलल जा सकैए।",
+       "resetpass_forbidden-reason": "कूटशब्द नै बदलल जा सकैए: $1",
        "resetpass-no-info": "अहाँकेँ ऐ पन्नाकेँ सोझे प्रयोग करबालेल सम्प्रवेशित हुअए पड़त।",
        "resetpass-submit-loggedin": "कूटशब्द बदली",
        "resetpass-submit-cancel": "रद्द करी",
        "passwordreset-emailtext-user": "प्रयोक्ता $1 {{अन्तर्जाल}} पर अहाँक खाता विवरणक {{SITENAME}} लेल फेरसँ ($4) आग्रह केने छथि। ई प्रयोक्ता {{PLURAL:$3|खाता अछि|खाता सभ अछि}} ऐ ई-पत्र संकेतसँ जुड़ल: $2\n{{PLURAL:$3| ई अस्थायी कूटशब्द|ई सभ अस्थायी कूटशब्द}} खतम भऽ जाएत {{PLURAL:$5|एक दिन|$5 दिन}} मे।\nअहाँ सम्प्रवेश करू आ एकटा नव कूटशब्द आब चुनू। जँ कियो दोसर ई आग्रह केने छथि, वा जँ अहाँकेँ अपन मूल कूटशब्द मोन पड़ि गेल अछि, आ अहाँ आब ओइ कूटशब्दकेँ नै बदलऽ चाहै छी, अहाँ ऐ संदेशकेँ बिसरि सकै छी आ अपन पुरान कूटशब्दक प्रयोग जारी राखि सकै छी।",
        "passwordreset-emailelement": "प्रयोक्ता: \n$1\n\nअस्थायी कूटशब्द: \n$2",
        "passwordreset-emailsentemail": "एकटा ई-पत्र मोन पाड़बा लेल पठाओल गेल अछि।",
+       "passwordreset-nocaller": "कॉलर प्रदान करैलजाय",
        "passwordreset-invalidemail": "अवैध इमेल ठेगान",
        "passwordreset-nodata": "प्रयोगकर्ता नाम वा इमेल ठेगान नै देल गेल छल",
        "changeemail": "ई-मेल पता परिवर्तित करी",
        "savechanges": "रक्षण करी",
        "publishpage": "पृष्ठ प्रकाशित करी",
        "publishchanges": "परिवर्तन प्रकाशित करी",
+       "savearticle-start": "पन्नाक रक्षण करू",
+       "savechanges-start": "रक्षण करी",
+       "publishpage-start": "पृष्ठ प्रकाशित करी",
+       "publishchanges-start": "परिवर्तन प्रकाशित करी",
        "preview": "पूर्वावलोकन",
        "showpreview": "पूर्वप्रदर्शन",
        "showdiff": "परिवर्तन देखाबी",
        "revdelete-unsuppress": "पुनर्स्थापित संशोधन लेल प्रतिबन्ध हटाबी",
        "revdelete-log": "कारण:",
        "revdelete-submit": "चयनित {{PLURAL:$1|संसोधन|संसोधनसभ}} पर लागू करी",
-       "revdelete-success": "'''संशोधन दृश्यता सफलतापूर्वक अद्यतन कएल गेल।'''",
+       "revdelete-success": "संशोधन दृश्यता सफलतापूर्वक अद्यतन कएल गेल।",
        "revdelete-failure": "संशोधन दृश्यता अद्यतन नै कएल जा सकल: $1",
-       "logdelete-success": "'''वृत्तलेख दृश्यता सफलतासँ निर्धारित भेल।'''",
+       "logdelete-success": "वृत्तलेख दृश्यता सफलतासँ निर्धारित भेल।",
        "logdelete-failure": "'''वृत्तलेख दृश्यता निर्धारित नै भऽ सकल।'''$1",
        "revdel-restore": "दृष्टिकुशलता बदली",
        "pagehist": "पन्नाक इतिहास",
        "username": "{{GENDER:$1|प्रयोगकर्तानाम}}:",
        "prefs-memberingroups": "निम्नलिखित {{PLURAL:$1|समूह|समूहसभ}}क {{GENDER:$2|सदस्य}}:",
        "prefs-memberingroups-type": "$1",
+       "group-membership-link-with-expiry": "$1 ($2 तक)",
        "prefs-registration": "पञ्जीकरणक समए:",
        "prefs-registration-date-time": "$1",
        "yourrealname": "असली नाम:",
        "prefs-dateformat": "तिथि प्रारूप",
        "prefs-timeoffset": "समए संशोधक",
        "prefs-advancedediting": "विशिष्ट विकल्प सभ",
+       "prefs-developertools": "डेवलपर उपकरण",
        "prefs-editor": "सम्पादक",
        "prefs-preview": "पूर्वावलोकन",
        "prefs-advancedrc": "विशिष्ट विकल्पसभ",
        "prefs-advancedwatchlist": "विशिष्ट विकल्पसभ",
        "prefs-displayrc": "दृश्य विकल्पसभ",
        "prefs-displaywatchlist": "दृश्य विकल्पसभ",
+       "prefs-changesrc": "बदलेलहा देखाल",
        "prefs-tokenwatchlist": "टोकन",
        "prefs-diffs": "अन्तर",
        "prefs-help-prefershttps": "इ प्राथमिकता अहाँके फेर स सम्प्रवेश करलाक बाद प्रभाव पडत।",
        "userrights": "प्रयोक्ता अधिकारक प्रबन्धन",
        "userrights-lookup-user": "प्रयोक्ता समूहसभक प्रबन्ध करी",
        "userrights-user-editname": "एकटा प्रयोक्तानाम लिखी:",
-       "editusergroup": "{{GENDER:$1|सदस्य}} समूहसभक सम्पादन करी",
+       "editusergroup": "प्रयोगकर्ता समूह देखालजाय",
        "editinguser": "सदस्य '''[[User:$1|$1]]''' $2 क अधिकार बदलि\n{{GENDER:$1|सदस्य}}क सदस्य अधिकार बदलल जा रहल अछि <strong>[[User:$1|$1]]</strong> $2",
        "userrights-editusergroup": "प्रयोगकर्ता समूह सम्पादित करी",
        "saveusergroups": "{{GENDER:$1|सदस्य}} समूह सङ्ग्रह करी",
        "group-autoconfirmed": "स्वतःअनुमोदित प्रयोक्ता",
        "group-bot": "स्वचालक",
        "group-sysop": "प्रबन्धक",
+       "group-interface-admin": "इंटरफ़ेस प्रशासक",
        "group-bureaucrat": "अधिकारी",
        "group-suppress": "नुकाबए वाला",
        "group-all": "(सभ)",
        "group-autoconfirmed-member": "{{GENDER:$1|स्वतः स्थापित प्रयोगकर्ता}}",
        "group-bot-member": "{{GENDER:$1|बोट}}",
        "group-sysop-member": "{{GENDER:$1|प्रबन्धक}}",
+       "group-interface-admin-member": "{{GENDER:$1|इंटरफ़ेस प्रशासक}}",
        "group-bureaucrat-member": "{{GENDER:$1|प्रशासक}}",
        "group-suppress-member": "{{GENDER:$1|नुकाए वाला}}",
        "grouppage-user": "{{ns:project}}:प्रयोगकर्तासभ",
        "grouppage-autoconfirmed": "{{ns:project}}:स्वतःअनुमोदित प्रयोक्ता",
        "grouppage-bot": "{{ns:project}}:स्वचालक",
        "grouppage-sysop": "{{ns:project}}:प्रबन्धक",
+       "grouppage-interface-admin": "{{ns:project}}:इंटरफ़ेस प्रशासक",
        "grouppage-bureaucrat": "{{ns:project}}:अधिकारी",
        "grouppage-suppress": "{{ns:project}}:नुकाबी",
        "right-read": "पन्ना सभ पढ़ू",
        "grant-createaccount": "खाता खोलल जाए",
        "grant-createeditmovepage": "निर्माण, सम्पादन, आ स्थानान्तरण करनाए",
        "grant-delete": "लेख, अवतरण आ लग हटेनाए",
-       "grant-editinterface": "मिडियाविकि नामस्थान आ सदस्य सिएसएस/जेएस सम्पादित करनाए",
+       "grant-editinterface": "मिडियाविकि नामस्थान आ सदस्य सिएसएस/जेएस सम्पादित",
        "grant-editmycssjs": "अपन सदस्य सिएसएस/जेएस सम्पादित करी",
        "grant-editmyoptions": "अपन सदस्य पसन्द सम्पादित करी",
        "grant-editmywatchlist": "अपन साकांक्षसूची सम्पादित करी",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|नव पन्नसभक सूची]] सेहो देखी)",
        "recentchanges-submit": "देखाबी",
        "rcfilters-legend-heading": "<strong>सङ्केतक सूची:</strong>",
+       "rcfilters-activefilters-hide": "नुकाबी",
+       "rcfilters-activefilters-show": "देखाबी",
+       "rcfilters-limit-title": "परिणाम देखाबी",
+       "rcfilters-savedqueries-rename": "नाम बदलु",
+       "rcfilters-savedqueries-setdefault": "मूल के रूप मे राखु",
+       "rcfilters-savedqueries-remove": "मेटाबी",
+       "rcfilters-savedqueries-new-name-label": "नाम",
+       "rcfilters-savedqueries-new-name-placeholder": "फ़िल्टर के उद्देश्य बताबु",
+       "rcfilters-savedqueries-apply-label": "फ़िल्टर बनाबु",
+       "rcfilters-savedqueries-cancel-label": "रद्द करु",
+       "rcfilters-clear-all-filters": "फ़िल्टरसभ मिटाबु",
+       "rcfilters-filterlist-title": "चलनीसभ",
+       "rcfilters-highlightmenu-title": "रंग चुनु",
+       "rcfilters-filter-editsbyself-label": "अहाक बदलावसभ",
+       "rcfilters-filter-editsbyself-description": "अहाक अपन योगदान।",
+       "rcfilters-filter-user-experience-level-registered-label": "पंजीकृत:",
+       "rcfilters-filter-user-experience-level-registered-description": "लॉग-इन संपादकसभ।",
+       "rcfilters-filter-user-experience-level-unregistered-label": "अपंजीकृत",
+       "rcfilters-filter-user-experience-level-newcomer-label": "अपरिचित",
+       "rcfilters-filter-user-experience-level-learner-label": "शिक्षार्थिसभ",
+       "rcfilters-filter-user-experience-level-experienced-label": "अनुभवी सदस्यसभ",
+       "rcfilters-filter-bots-label": "स्वचालक",
+       "rcfilters-filter-bots-description": "स्वचालित औजार से करलहा सम्पादनसभ।",
+       "rcfilters-filtergroup-reviewstatus": "पुनरीक्षण स्थिति",
+       "rcfilters-filter-reviewstatus-unpatrolled-label": "अपरीक्षित",
+       "rcfilters-filter-reviewstatus-auto-label": "सवापरिक्षित",
+       "rcfilters-filter-minor-label": "छोट सम्पादन",
+       "rcfilters-filter-watchlist-watched-label": "साकांक्षसूची",
+       "rcfilters-filter-watchlistactivity-seen-label": "परिवर्तन सभ चुनु",
+       "rcfilters-filtergroup-changetype": "बदल क प्रकार:",
+       "rcfilters-filter-pageedits-label": "पन्नाक संपादनसभ",
+       "rcfilters-liveupdates-button": "अखुनका अद्यतन",
        "rcnotefrom": "नीचाँमे '''$2''' सँ भेल परिवर्तन अछि ('''$1''' धरि देखाएल)।",
        "rclistfrom": "$3 $2 सँ शुरू भेल नव परिवर्तन देखी",
        "rcshowhideminor": "$1 अल्प सम्पादन",
        "contribsub2": "{{GENDER:$3|$1}} ($2)क लेल",
        "contributions-userdoesnotexist": "प्रयोक्ता खाता \"$1\" पंजीकृत नै अछि।",
        "nocontribs": "कोनो परिवर्तन ऐ सँ मेल नै खाइए।",
-       "uctop": "(शिखर)",
+       "uctop": "शिखर",
        "month": "माससँ (आ पहिने)",
        "year": "ई साल (आ पहिने)",
        "sp-contributions-newbies": "मात्र नव खाताक योगदान देखाबी",
        "tags": "मान्य परिवर्तन चेन्ह सभ",
        "tag-filter": "[[Special:Tags|ट्याग]] छन्ना:",
        "tag-filter-submit": "चलनी",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|ट्याग|ट्यागसभ}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|ट्याग|ट्यागसभ}}]]: $2",
        "tag-mw-contentmodelchange": "सामग्री परिवर्तन लग",
        "tags-title": "चेन्ह सभ",
        "tags-intro": "ई पन्ना चेन्ह सभकेँ सूचित करैए जे तंत्रांश सम्पादनसँ चिन्हित करए, आ ओकर अर्थ सेहो।",
        "dberr-again": "किछु काल रुकी आ फेरसँ जानकारी भरी।",
        "dberr-info": "(दत्तनिधि वितरकके सम्पर्क नै कऽ सकल: $1)",
        "dberr-info-hidden": "(डाटाबेससँ सम्पर्क नै कएल जा सकल)",
-       "dberr-usegoogle": "ऐ बीचमे अहाँ गूगलसँ खोज कऽ सकै छी।",
-       "dberr-outofdate": "मोन राखू जे हमर सामिग्रीक ओकर सूची पुरान भऽ सकैए।",
-       "dberr-cachederror": "ई आग्रह कएल पन्नाक उपस्मृति संरक्षित द्वितीयक अछि, आ भऽ सकैए जे अद्यतन नै हुअए।",
        "htmlform-invalid-input": "अहाँक किछु निवेशनमे किछु समस्या भऽ सकैए।",
        "htmlform-select-badoption": "जे मान अहाँ देलौं से मान्य विकल्प नै अछि।",
        "htmlform-int-invalid": "जे मान अहाँ देलौं से पूर्णांक नै छी।",
index ec27ef9..0c8dc38 100644 (file)
        "contributions-title": "Kontribusi panganggo kanggo $1",
        "mycontris": "Kontribusi",
        "contribsub2": "Kanggo $1 ($2)",
-       "uctop": "(siki)",
+       "uctop": "siki",
        "month": "Sekang sasi (lan sadurungé):",
        "year": "Sekang taun (lan sadurunge):",
        "sp-contributions-newbies": "Tidokna kontribusine panganggo anyar thok",
index a23b4a4..bd96921 100644 (file)
        "mycontris": "Монь путксне",
        "contribsub2": "$1 ($2)-нди",
        "nocontribs": "Тя вешфксть коряс кодамога полафтомат исть мув.",
-       "uctop": "(прянь)",
+       "uctop": "прянь",
        "month": "Ковста (ди сядынголе):",
        "year": "Кизоста (ди сядынголе):",
        "sp-contributions-newbies": "Няфтемс аньцек од сёрматфтоматнень путкссна",
index f42a099..c937d20 100644 (file)
        "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)",
+       "uctop": "ankehitriny",
        "month": "Tamin'ny volana (sy teo aloha) :",
        "year": "Tamin'ny taona (sy teo aloha) :",
        "sp-contributions-newbies": "Haneho ny fandraisan'anjaran'ireo mpikambana vaovao ihany",
        "tags": "Balizin'ny fanovana mety",
        "tag-filter": "manasongadina [[Special:Tags|balizy]] :",
        "tag-filter-submit": "Manasongadina",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Marika}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Marika}}]]: $2",
        "tag-mw-new-redirect": "Fihodinana vaovao",
        "tags-title": "Balizy",
        "tags-intro": "Ity pejy ity dia manalisitra ny balizy azon'ny rindrankajy ampiasaina mba hanamarika fanovana iray sy ny dikany.",
        "dberr-again": "Miandrasa minitra vitsivitsy ary alefaso fanindroany",
        "dberr-info": "(Tsy afaka mifandray amin'ny banky angona: $1)",
        "dberr-info-hidden": "(Tsy afaka mifandray amin'ny banky angona)",
-       "dberr-usegoogle": "Afaka manandrana mikaroka eo amin'ny Google ianao mandritra izay.",
-       "dberr-outofdate": "Fantaro fa mety efa lany andro ny index-n'ny votoatinay",
-       "dberr-cachederror": "Izy io dia dika nasitriky ny pejy nangatahana ary mety efa tola.",
        "htmlform-invalid-input": "Nisy olana nitranga tamin'ny sanda sasany",
        "htmlform-select-badoption": "Tsy azo ekena ny sanda nambaranao.",
        "htmlform-int-invalid": "Tsy isa manontolo ny sanda nambaranao.",
index 5ae6f09..c0b5156 100644 (file)
        "contributions-title": "$1 пайдаланышын паша",
        "mycontris": "Мыйын паша",
        "contribsub2": "$1 лан ($2)",
-       "uctop": "(пытартыш)",
+       "uctop": "пытартыш",
        "month": "Могай тылзе гыч тӱҥалаш?",
        "year": "Могай ий гыч тӱҥалаш?",
        "sp-contributions-newbies": "У пайдалнышын гына пашам ончыкташ",
index 2af3fe6..85f9d9f 100644 (file)
        "contributions-title": "Jariah pangguno untuak $1",
        "mycontris": "Jariah",
        "contribsub2": "Untuak $1 ($2)",
-       "uctop": "(kini)",
+       "uctop": "kini",
        "month": "Dari bulan (dan sabalunnyo):",
        "year": "Dari taun (dan sabalunnyo):",
        "sp-contributions-newbies": "Tunjuakan jariah pangguno baru sajo",
index f18e19f..99db9e5 100644 (file)
        "passwordtooshort": "Лозинката мора да има најмалку {{PLURAL:$1|1 знак|$1 знаци}}.",
        "passwordtoolong": "Лозинката не треба да има повеќе од {{PLURAL:$1|1 знак|$1 знаци}}.",
        "passwordtoopopular": "Не се допуштаат пречесто застапени лозинки. Изберете потешка лозинка за погодување.",
+       "passwordinlargeblacklist": "Внесената лозинка е меѓу најчесто користените. Изберете поинаква.",
        "password-name-match": "Лозинката мора да се разликува од корисничкото име.",
        "password-login-forbidden": "Употребата на ова корисничко име и лозинка е забранета.",
        "mailmypassword": "Нова лозинка",
        "timezonelegend": "Часовен појас:",
        "localtime": "Месно време:",
        "timezoneuseserverdefault": "Од викито ($1)",
-       "timezoneuseoffset": "Друго (посочете отстапување)",
+       "timezoneuseoffset": "Друго (подолу посочете отстапување)",
+       "timezone-useoffset-placeholder": "Примерни вредности: „-07:00“ или „01:00“",
        "servertime": "Време на опслужувачот:",
        "guesstimezone": "Пополни од прелистувачот",
        "timezoneregion-africa": "Африка",
        "prefs-editor": "Уредник",
        "prefs-preview": "Преглед",
        "prefs-advancedrc": "Напредни нагодувања",
-       "prefs-opt-out": "Отпиши ме од подобрувањата",
        "prefs-advancedrendering": "Напредни нагодувања",
        "prefs-advancedsearchoptions": "Напредни нагодувања",
        "prefs-advancedwatchlist": "Напредни нагодувања",
        "prefs-displayrc": "Нагодувања на приказот",
        "prefs-displaywatchlist": "Нагодувања на приказот",
+       "prefs-changesrc": "Прикажани промени",
+       "prefs-changeswatchlist": "Прикажани промени",
+       "prefs-pageswatchlist": "Набљудувани страници",
        "prefs-tokenwatchlist": "Шифра",
        "prefs-diffs": "Разлики",
        "prefs-help-prefershttps": "Поставката ќе се примени следниот пат кога ќе се најавите.",
        "right-bigdelete": "Бришење на страници со долга историја",
        "right-deletelogentry": "Бришење и враќање на конкретни ставки во дневник",
        "right-deleterevision": "Бришење и враќање на конкретни преработки на страници",
-       "right-deletedhistory": "Ð\9fÑ\80егледÑ\83ваÑ\9aе Ð½Ð° Ð·Ð°Ð¿Ð¸Ñ\81и Ð²Ð¾ Ð¸Ñ\81Ñ\82оÑ\80иÑ\98а Ð½Ð° Ð±Ñ\80иÑ\88еÑ\9aа, без придружниот текст",
+       "right-deletedhistory": "Ð\9fÑ\80егледÑ\83ваÑ\9aе Ð½Ð° Ð¸Ð·Ð±Ñ\80иÑ\88ани Ð·Ð°Ð¿Ð¸Ñ\81и Ð²Ð¾ Ð¸Ñ\81Ñ\82оÑ\80иÑ\98а, без придружниот текст",
        "right-deletedtext": "Прегледување на избришан текст и промени помеѓу избришани преработки",
        "right-browsearchive": "Пребарување на избришани страници",
        "right-undelete": "Обновување избришана страница",
        "right-suppressrevision": "Прегледување, скривање и откривање на поединечни преработки на страници од било кој корисник",
-       "right-viewsuppressed": "Ð\9fÑ\80еглед Ð½Ð° Ð¿Ñ\80аработки скриени од било кој корисник",
+       "right-viewsuppressed": "Ð\9fÑ\80еглед Ð½Ð° Ð¿Ñ\80еработки скриени од било кој корисник",
        "right-suppressionlog": "Гледање на лични дневници",
        "right-block": "Оневозможување на останати корисници да уредуваат",
        "right-blockemail": "Оневозможување корисници да праќаат е-пошта",
        "rcfilters-watchlist-markseen-button": "Означи ги сите промени како видени",
        "rcfilters-watchlist-edit-watchlist-button": "Уреди набљудувани",
        "rcfilters-watchlist-showupdated": "Промени во страниците што ги немате посетено откако се случиле се <strong>задебелени</strong>.",
-       "rcfilters-preference-label": "СкÑ\80иÑ\98 Ñ\98а Ð¿Ð¾Ð´Ð¾Ð±Ñ\80енаÑ\82а Ð²ÐµÑ\80зиÑ\98а Ð²Ð¾ Ð¡ÐºÐ¾Ñ\80еÑ\88ниÑ\82е Ð¿Ñ\80омени",
-       "rcfilters-preference-help": "Ð\93о Ð¾Ñ\82повикÑ\83ва Ð¿Ñ\80еÑ\83Ñ\80едÑ\83ваÑ\9aеÑ\82о Ð½Ð° Ð¾ÐºÐ¾Ð»Ð¸Ð½Ð°Ñ\82а Ð¾Ð´ 2017 Ð³. Ð¸ Ñ\81иÑ\82е Ð°Ð»Ð°Ñ\82ки Ð´Ð¾Ð´Ð°Ð´ÐµÐ½Ð¸ Ð¾Ñ\82Ñ\82огаÑ\88.",
-       "rcfilters-watchlist-preference-label": "СкÑ\80иÑ\98 Ñ\98а Ð¿Ð¾Ð´Ð¾Ð±Ñ\80енаÑ\82а Ð²ÐµÑ\80зиÑ\98а Ð½Ð° Ð½Ð°Ð±Ñ\99Ñ\83дÑ\83ваниÑ\82е",
-       "rcfilters-watchlist-preference-help": "Ð\88а Ð¾Ñ\82повикÑ\83ва Ð¿Ñ\80еÑ\80абоÑ\82каÑ\82а Ð½Ð° Ð¿Ð¾Ñ\81Ñ\80едникоÑ\82 Ð¾Ð´ 2017 Ð³. Ð¸ Ñ\81иÑ\82е Ð°Ð»Ð°Ñ\82ки Ð´Ð¾Ð´Ð°Ð´ÐµÐ½Ð¸ Ñ\81о Ð½ÐµÐ°.",
+       "rcfilters-preference-label": "Ð\9aоÑ\80иÑ\81Ñ\82и Ð¿Ð¾Ñ\81Ñ\80едник Ð±ÐµÐ· JavaScript",
+       "rcfilters-preference-help": "Ð\93и Ð²Ñ\87иÑ\82Ñ\83ва Ñ\81коÑ\80еÑ\88ниÑ\82е Ð¿Ñ\80омени Ð±ÐµÐ· Ñ\84илÑ\82Ñ\80и Ð¸Ð»Ð¸ Ð¼Ð¾Ð¶Ð½Ð¾Ñ\81Ñ\82 Ð·Ð° Ð¸Ñ\81Ñ\82акнÑ\83ваÑ\9aе.",
+       "rcfilters-watchlist-preference-label": "Ð\9aоÑ\80иÑ\81Ñ\82и Ð¿Ð¾Ñ\81Ñ\80едник Ð±ÐµÐ· JavaScript",
+       "rcfilters-watchlist-preference-help": "Ð\93и Ð²Ñ\87иÑ\82Ñ\83ва Ð½Ð°Ð±Ñ\99Ñ\83дÑ\83ваниÑ\82е Ð±ÐµÐ· Ñ\84илÑ\82Ñ\80и Ð¸Ð»Ð¸ Ð¼Ð¾Ð¶Ð½Ð¾Ñ\81Ñ\82 Ð·Ð° Ð¸Ñ\81Ñ\82акнÑ\83ваÑ\9aе.",
        "rcfilters-filter-showlinkedfrom-label": "Прикажи промени во страници кои водат од",
        "rcfilters-filter-showlinkedfrom-option-label": "<strong>Страници кон кои води</strong> избраната страница",
        "rcfilters-filter-showlinkedto-label": "Прикажи промени во страници кои водат кон",
        "contribsub2": "За {{GENDER:$3|$1}} ($2)",
        "contributions-userdoesnotexist": "Корисничката сметка „$1“ не е регистрирана.",
        "nocontribs": "Не се пронајдени промени што одговараат на овој критериум.",
-       "uctop": "(тековно)",
+       "uctop": "тековно",
        "month": "Од месец (и порано):",
        "year": "Од година (и порано):",
        "date": "Од датумот (и порано):",
        "move-watch": "Набљудувај ја страницава",
        "movepagebtn": "Премести страница",
        "pagemovedsub": "Успешно преместување",
+       "cannotmove": "Страницата не може да се премести од {{PLURAL:$1|следнава причина|следниве причини}}:",
        "movepage-moved": "'''„$1“ е преместена под името „$2“'''",
        "movepage-moved-redirect": "Направено е пренасочување.",
        "movepage-moved-noredirect": "Создавањето на пренасочување е оневозможено.",
        "tags": "Важечки ознаки за менување",
        "tag-filter": "[[Special:Tags|Филтер за ознаки]]:",
        "tag-filter-submit": "Филтер",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Ознака|Ознаки}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Ознака|Ознаки}}]]: $2",
        "tag-mw-contentmodelchange": "измена на содржинскиот модел",
        "tag-mw-contentmodelchange-description": "Уредувања што го [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:ChangeContentModel менуваат содржинскиот модел] на една страница",
        "tag-mw-new-redirect": "Ново пренасочување",
        "dberr-again": "Почекајте неколку минути и обидете се повторно.",
        "dberr-info": "(Не можам да пристапам кон базата: $1)",
        "dberr-info-hidden": "(Не можам да пристапам кон базата)",
-       "dberr-usegoogle": "Во меѓувреме можете да се обидете да пребарувате со Google.",
-       "dberr-outofdate": "Да напоменеме дека нивните индекси на нашата содржина можат да бидат застарени.",
-       "dberr-cachederror": "Следнава содржина е меѓускладиран примерок на бараната страница, кој може да е застарен.",
        "htmlform-invalid-input": "Има проблеми со дел од вашиот внос",
        "htmlform-select-badoption": "Укажаната вредност е неважечка како можност.",
        "htmlform-int-invalid": "Вредноста која ја наведовте не е цел број.",
        "logentry-block-reblock": "$1 {{GENDER:$2|го измени}} блокот на {{GENDER:$4|$3}} со истек $5 $6",
        "logentry-partialblock-block": "$1 {{GENDER:$2|го блокираше}} {{GENDER:$4|$3}} од уредување на {{PLURAL:$8||страниците}} $7 со истек од $5 $6",
        "logentry-partialblock-reblock": "$1 {{GENDER:$2|ги измени}} блоковските поставки за {{GENDER:$4|$3}} спречувајќи го уредувањето на {{PLURAL:$8||страниците}} $7 со истек од $5 $6",
-       "logentry-non-editing-block-block": "$1 {{GENDER:$2|го блокираше}} {{GENDER:$4|$3}} од неуредувачки дејства со истек од $5 $6",
-       "logentry-non-editing-block-reblock": "$1 {{GENDER:$2|ги измени}} блоковските поставки за {{GENDER:$4|$3}} за неуредувачки дејства со истек од $5 $6",
+       "logentry-non-editing-block-block": "$1 {{GENDER:$2|го блокираше}} {{GENDER:$4|$3}} од укажани неуредувачки дејства со истек од $5 $6",
+       "logentry-non-editing-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",
        "logentry-import-upload": "$1 {{GENDER:$2|ја увезе}} $3 со податотечно подигање",
        "passwordpolicies-policy-passwordcannotmatchblacklist": "Лозинката не смее да биде од оние на црниот список",
        "passwordpolicies-policy-maximalpasswordlength": "Лозинката не треба да има повеќе од $1 {{PLURAL:$1|знак|знаци}}",
        "passwordpolicies-policy-passwordcannotbepopular": "Лозинката не треба да биде {{PLURAL:$1|најзастапената|од списокот на $1 најзастапени лозинки}}",
+       "passwordpolicies-policy-passwordnotinlargeblacklist": "Лозинката не може да биде меѓу 100.000-те најчести лозинки.",
        "easydeflate-invaliddeflate": "Содржината не е соодветно прочистена",
        "unprotected-js": "JavaScript не може да се вчита од незаштитени страници од безбедносни причини. Создавајте JavaScript само во именскиот простор МедијаВики: или како корисничка потстраница"
 }
index 572c4a5..23d2ba7 100644 (file)
        "prefs-editor": "എഡിറ്റർ",
        "prefs-preview": "എങ്ങനെയുണ്ടെന്ന് കാണൽ",
        "prefs-advancedrc": "വിപുലമായ ഉപാധികൾ",
-       "prefs-opt-out": "പുതുക്കലുകൾ ഒഴിവാക്കുക",
        "prefs-advancedrendering": "വിപുലമായ ഉപാധികൾ",
        "prefs-advancedsearchoptions": "വിപുലമായ ഉപാധികൾ",
        "prefs-advancedwatchlist": "വിപുലമായ ഉപാധികൾ",
        "prefs-displayrc": "പ്രദർശന ഐച്ഛികങ്ങൾ",
        "prefs-displaywatchlist": "പ്രദർശന ഐച്ഛികങ്ങൾ",
+       "prefs-changesrc": "പ്രദർശിപ്പിച്ച മാറ്റങ്ങൾ",
+       "prefs-changeswatchlist": "പ്രദർശിപ്പിച്ച മാറ്റങ്ങൾ",
+       "prefs-pageswatchlist": "ശ്രദ്ധിച്ച താളുകൾ",
        "prefs-tokenwatchlist": "ചീട്ട്",
        "prefs-diffs": "വ്യത്യാസങ്ങൾ",
        "prefs-help-prefershttps": "താങ്കൾ അടുത്ത പ്രാവശ്യം പ്രവേശിക്കുമ്പോൾ ഇവ ഫലത്തിൽ വരുന്നതാണ്.",
        "saveusergroups": "{{GENDER:$1|ഉപയോക്തൃസംഘങ്ങൾ}} സേവ് ചെയ്യുക",
        "userrights-groupsmember": "അംഗത്വമുള്ളത്:",
        "userrights-groupsmember-auto": "അന്തർലീനമായ അംഗത്വം:",
-       "userrights-groups-help": "à´\88 à´\89പയàµ\8bà´\95àµ\8dതാവàµ\8d à´\89ൾപàµ\8dà´ªàµ\86à´\9fàµ\8dà´\9fà´¿à´\9fàµ\8dà´\9fàµ\81à´³àµ\8dà´³ à´¸à´\82à´\98à´\99àµ\8dà´\99ൾ à´¤à´¾à´\99àµ\8dà´\95ൾà´\95àµ\8dà´\95àµ\8d à´®à´¾à´±àµ\8dറാവàµ\81à´¨àµ\8dനതാണàµ\8d:\n* à´\89പയàµ\8bà´\95àµ\8dതാവàµ\8d à´\86 à´¸à´\82à´\98à´¤àµ\8dതിലàµ\81à´£àµ\8dà´\9fàµ\86à´¨àµ\8dà´¨àµ\8d à´¶à´°à´¿à´¯à´¿à´\9fàµ\8dà´\9f à´\9aà´¤àµ\81à´°à´\82 à´\85ർതàµ\8dഥമാà´\95àµ\8dà´\95àµ\81à´¨àµ\8dà´¨àµ\81.\n* à´\89പയàµ\8bà´\95àµ\8dതാവàµ\8d à´\86 à´¸à´\82à´\98à´¤àµ\8dതിലിലàµ\8dà´²àµ\86à´¨àµ\8dà´¨àµ\8d à´¶à´°à´¿à´¯à´¿à´\9fാതàµ\8dà´¤ à´\9aà´¤àµ\81à´°à´\82 à´\85ർതàµ\8dഥമാà´\95àµ\8dà´\95àµ\81à´¨àµ\8dà´¨àµ\81.\n* à´¸à´\82à´\98à´\99àµ\8dà´\99à´³àµ\8bà´\9fàµ\8aà´ªàµ\8dപമàµ\81à´³àµ\8dà´³ *,  à´\92à´°à´¿à´\95àµ\8dà´\95ൽ à´®à´¾à´±àµ\8dà´±à´\82 à´µà´°àµ\81à´¤àµ\8dതിയാൽ à´ªà´¿à´¨àµ\8dà´¨àµ\80à´\9fàµ\8d à´\85തിൽ à´®à´¾à´±àµ\8dà´±à´\82 à´µà´°àµ\81à´¤àµ\8dതാൻ à´¤à´¾à´\99àµ\8dà´\95ൾà´\95àµ\8dà´\95àµ\8d à´\95ഴിയിലàµ\8dà´²àµ\86à´¨àµ\8dà´¨àµ\8d à´\85ർതàµ\8dഥമാà´\95àµ\8dà´\95àµ\81à´¨àµ\8dà´¨àµ\81.\n* à´¸à´\82à´\98à´\99àµ\8dà´\99à´³àµ\8bà´\9fàµ\8aà´ªàµ\8dപമàµ\81à´³àµ\8dà´³ #, à´¸à´\82à´\98à´¾à´\82à´\97à´¤àµ\8dവതàµ\8dതിനàµ\8dà´±àµ\86 à´\95ാലാവാധി à´ªà´¿à´¨àµ\8dà´¨àµ\8bà´\9fàµ\8dà´\9fà´¾à´\95àµ\8dà´\95ാമàµ\86à´¨àµ\8dà´¨àµ\8d à´¸àµ\82à´\9aà´¿à´ªàµ\8dപിà´\95àµ\8dà´\95àµ\81à´¨àµ\8dà´¨àµ\81; à´¤à´¾à´\99àµ\8dà´\95ൾà´\95àµ\8dà´\95à´¤àµ\8d à´®àµ\81à´¨àµ\8dà´¨àµ\8bà´\9fàµ\8dà´\9fà´¾à´\95àµ\8dà´\95ാൻ à´¸à´¾à´§à´¿à´\95àµ\8dà´\95àµ\81à´\95യിലàµ\8dà´².",
+       "userrights-groups-help": "ഈ ഉപയോക്താവ് ഉൾപ്പെട്ടിട്ടുള്ള സംഘങ്ങൾ താങ്കൾക്ക് മാറ്റാവുന്നതാണ്:\n* ഉപയോക്താവ് ആ സംഘത്തിലുണ്ടെന്ന് ശരിയിട്ട ചതുരം അർത്ഥമാക്കുന്നു.\n* ഉപയോക്താവ് ആ സംഘത്തിലില്ലെന്ന് ശരിയിടാത്ത ചതുരം അർത്ഥമാക്കുന്നു.\n* സംഘങ്ങളോടൊപ്പമുള്ള *,  ഒരിക്കൽ മാറ്റം വരുത്തിയാൽ പിന്നീട് അതിൽ മാറ്റം വരുത്താൻ താങ്കൾക്ക് കഴിയില്ലെന്ന് അർത്ഥമാക്കുന്നു.\n* സംഘങ്ങളോടൊപ്പമുള്ള #, സംഘാംഗത്വത്തിന്റെ കാലാവധി പിന്നോട്ടാക്കാമെന്ന് സൂചിപ്പിക്കുന്നു; താങ്കൾക്കത് മുന്നോട്ടാക്കാൻ സാധിക്കുകയില്ല.",
        "userrights-reason": "കാരണം:",
        "userrights-no-interwiki": "മറ്റ് വിക്കികളിലെ ഉപയോക്തൃ അവകാശങ്ങൾ തിരുത്തുവാൻ താങ്കൾക്ക് അനുമതിയില്ല.",
        "userrights-nodatabase": "$1 എന്ന ഡാറ്റാബേസ് നിലവിലില്ല അല്ലെങ്കിൽ പ്രാദേശികമല്ല.",
        "group-autoconfirmed": "യാന്ത്രികമായി സ്ഥിരീകരിക്കപ്പെട്ട ഉപയോക്താക്കൾ",
        "group-bot": "യന്ത്രങ്ങൾ",
        "group-sysop": "കാര്യനിർവാഹകർ",
+       "group-interface-admin": "സമ്പർക്കമുഖ കാര്യനിർവാഹകർ",
        "group-bureaucrat": "ബ്യൂറോക്രാറ്റുകൾ",
        "group-suppress": "അമർച്ചകർ",
        "group-all": "(എല്ലാം)",
        "group-autoconfirmed-member": "{{GENDER:$1|യാന്ത്രികമായി സ്ഥിരീകരിക്കപ്പെട്ട ഉപയോക്താവ്}}",
        "group-bot-member": "{{GENDER:$1|യന്ത്രം}}",
        "group-sysop-member": "{{GENDER:$1|കാര്യനിർവാഹകൻ|കാര്യനിർവാഹക}}",
+       "group-interface-admin-member": "{{GENDER:$1|സമ്പർക്കമുഖ കാര്യനിർവാഹകൻ|സമ്പർക്കമുഖ കാര്യനിർവാഹക}}",
        "group-bureaucrat-member": "{{GENDER:$1|ബ്യൂറോക്രാറ്റ്}}",
        "group-suppress-member": "{{GENDER:$1|അമർച്ചക|അമർച്ചകൻ}}",
        "grouppage-user": "{{ns:project}}:ഉപയോക്താക്കൾ",
        "grouppage-autoconfirmed": "{{ns:project}}:യാന്ത്രികമായി സ്ഥിരീകരിക്കപ്പെട്ട ഉപയോക്താക്കൾ",
        "grouppage-bot": "{{ns:project}}:യന്ത്രങ്ങൾ",
        "grouppage-sysop": "{{ns:project}}:കാര്യനിർവാഹകർ",
+       "grouppage-interface-admin": "{{ns:project}}:സമ്പർക്കമുഖ കാര്യനിർവാഹകർ",
        "grouppage-bureaucrat": "{{ns:project}}:ബ്യൂറോക്രാറ്റ്",
        "grouppage-suppress": "{{ns:project}}:ഒതുക്കൽ",
        "right-read": "\nതാളുകൾ വായിക്കുക",
        "right-editusercss": "മറ്റ് ഉപയോക്താക്കളുടെ CSS പ്രമാണങ്ങൾ തിരുത്തുക",
        "right-edituserjson": "മറ്റ് ഉപയോക്താക്കളുടെ ജെസൺ പ്രമാണങ്ങൾ തിരുത്തുക",
        "right-edituserjs": "മറ്റ് ഉപയോക്താക്കളുടെ JS പ്രമാണങ്ങൾ തിരുത്തുക",
+       "right-editsitecss": "സൈറ്റ്-വ്യാപക സി.എസ്.എസ്. തിരുത്തുക",
+       "right-editsitejson": "സൈറ്റ്-വ്യാപക ജെസൺ തിരുത്തുക",
+       "right-editsitejs": "സൈറ്റ്-വ്യാപക ജാവാസ്ക്രിപ്റ്റ് തിരുത്തുക",
        "right-editmyusercss": "താങ്കളുടെ സ്വന്തം ഉപയോക്തൃ സി.എസ്.എസ്. പ്രമാണങ്ങൾ തിരുത്തുക",
+       "right-editmyuserjson": "താങ്കളുടെ സ്വന്തം ഉപയോക്തൃ ജെസൺ പ്രമാണങ്ങൾ തിരുത്തുക",
        "right-editmyuserjs": "താങ്കളുടെ സ്വന്തം ഉപയോക്തൃ ജാവാസ്ക്രിപ്റ്റ് പ്രമാണങ്ങൾ തിരുത്തുക",
        "right-viewmywatchlist": "താങ്കളുടെ ശ്രദ്ധിക്കുന്നവയുടെ പട്ടിക സ്വയം കാണുക",
        "right-editmywatchlist": "താങ്കൾ ശ്രദ്ധിക്കുന്നവയുടെ പട്ടിക സ്വയം തിരുത്തുക. ഈ അവകാശമില്ലാതെതന്നെ ചില പ്രവൃത്തികൾ താളുകൾ കൂട്ടിച്ചേർക്കുമെന്ന് അറിഞ്ഞിരിക്കുക.",
        "right-managechangetags": "[[Special:Tags|ടാഗുകൾ]] സൃഷ്ടിക്കുക അല്ലെങ്കിൽ പ്രവർത്തനരഹിതമാക്കുക",
        "right-applychangetags": "മാറ്റങ്ങളോടൊപ്പം [[Special:Tags|ടാഗുകളും]] ബാധകമാക്കുക",
        "right-changetags": "ഒറ്റയൊറ്റ നാൾപ്പതിപ്പുകൾക്കും രേഖയിലെ ഉൾപ്പെടുത്തലുകൾക്കും ഐച്ഛിക [[Special:Tags|ടാഗുകൾ]] ചേർക്കുക അല്ലെങ്കിൽ നീക്കംചെയ്യുക",
+       "right-deletechangetags": "ഡേറ്റാബേസിൽ നിന്നും [[Special:Tags|റ്റാഗുകൾ]] മായ്ക്കുക",
        "grant-generic": "\"$1\" അവകാശ സഞ്ചയം",
        "grant-group-page-interaction": "താളുകളുമായി സമ്പർക്കം പുലർത്തുക",
        "grant-group-file-interaction": "മീഡിയയുമായി സമ്പർക്കം പുലർത്തുക",
        "grant-createaccount": "അംഗത്വങ്ങൾ സൃഷ്ടിക്കുക",
        "grant-createeditmovepage": "താളുകൾ സൃഷ്ടിക്കുക, തിരുത്തുക, മാറ്റുക",
        "grant-delete": "താളുകൾ, നാൾപ്പതിപ്പുകൾ, രേഖകളിലെ ഉൾപ്പെടുത്തലുകൾ മായ്ക്കുക",
-       "grant-editinterface": "à´®àµ\80ഡിയവിà´\95àµ\8dà´\95à´¿ à´¨à´¾à´®à´®àµ\87à´\96ലയàµ\81à´\82 à´\89പയàµ\8bà´\95àµ\8dà´¤àµ\83 à´¸à´¿.à´\8eà´¸àµ\8d.à´\8eà´¸àµ\8d./à´\9càµ\86സൺ/à´\9cാവാസàµ\8dà´\95àµ\8dà´°à´¿à´ªàµ\8dà´±àµ\8dà´±ും തിരുത്തുക",
+       "grant-editinterface": "à´®àµ\80ഡിയവിà´\95àµ\8dà´\95à´¿ à´¨à´¾à´®à´®àµ\87à´\96ലയàµ\81à´\82 à´¸àµ\88à´±àµ\8dà´±àµ\8d-à´µàµ\8dയാപà´\95/à´\89പയàµ\8bà´\95àµ\8dà´¤àµ\83 à´\9càµ\86സണും തിരുത്തുക",
        "grant-editmycssjs": "താങ്കളുടെ ഉപയോക്തൃ സി.എസ്.എസ്./ജെസൺ/ജാവാസ്ക്രിപ്റ്റ് തിരുത്തുക",
        "grant-editmyoptions": "താങ്കളുടെ ഉപയോക്തൃ ക്രമീകരണങ്ങൾ തിരുത്തുക",
        "grant-editmywatchlist": "താങ്കൾ ശ്രദ്ധിക്കുന്നവയുടെ പട്ടിക തിരുത്തുക",
+       "grant-editsiteconfig": "സൈറ്റ്-വ്യാപകവും ഉപയോക്താക്കളുടെയും സി.എസ്.എസ്./ജെ.എസ്. തിരുത്തുക",
        "grant-editpage": "നിലവിലുള്ള താളുകൾ തിരുത്തുക",
        "grant-editprotected": "സംരക്ഷിച്ചിട്ടുള്ള താളുകൾ തിരുത്തുക",
        "grant-highvolume": "ഉയർന്ന അളവിലുള്ള തിരുത്തുകൾ",
        "grant-oversight": "ഉപയോക്താക്കളെ മറയ്ക്കുക ഒപ്പം നാൾപ്പതിപ്പുകൾ ഒതുക്കുക",
        "grant-patrol": "താളുകളിലെ മാറ്റങ്ങളിൽ റോന്തുചുറ്റുക",
+       "grant-privateinfo": "സ്വകാര്യ വിവരങ്ങൾ എടുക്കാൻ കഴിയുക",
        "grant-protect": "താളുകൾ സംരക്ഷിക്കുക, സംരക്ഷണം നീക്കുക",
        "grant-rollback": "താളുകളിലെ മാറ്റങ്ങൾ മുൻപ്രാപനം ചെയ്യുക",
        "grant-sendemail": "മറ്റുപയോക്താക്കൾക്ക് ഇമെയിൽ അയയ്ക്കുക",
        "grant-basic": "അടിസ്ഥാന അവകാശങ്ങൾ",
        "grant-viewdeleted": "മായ്ക്കപ്പെട്ട പ്രമാണങ്ങളും താളുകളും കാണുക",
        "grant-viewmywatchlist": "താങ്കൾ ശ്രദ്ധിക്കുന്നവയുടെ പട്ടിക കാണുക",
+       "grant-viewrestrictedlogs": "പരിമിതപ്പെടുത്തിയിട്ടുള്ള രേഖാ ഉൾപ്പെടുത്തലുകൾ കാണുക",
        "newuserlogpage": "ഉപയോക്തൃ സൃഷ്ടിയുടെ രേഖ",
        "newuserlogpagetext": "പുതിയതായി അംഗത്വമെടുത്ത ഉപയോക്താക്കളുടെ പട്ടിക താഴെ കാണാം.",
        "rightslog": "ഉപയോക്തൃ അവകാശ രേഖ",
        "rcfilters-watchlist-markseen-button": "എല്ലാ മാറ്റങ്ങളും കണ്ടതായി അടയാളപ്പെടുത്തുക",
        "rcfilters-watchlist-edit-watchlist-button": "താങ്കൾ ശ്രദ്ധിക്കുന്ന താളുകളുടെ പട്ടിക തിരുത്തുക",
        "rcfilters-watchlist-showupdated": "മാറ്റങ്ങൾ ഉണ്ടായ ശേഷം താങ്കൾ സന്ദർശിക്കാത്ത താളുകളിലെ മാറ്റങ്ങൾ, തളിക അടയാളത്തോടൊപ്പം <strong>കടുപ്പിച്ച്</strong> കാണിച്ചിരിക്കുന്നു.",
-       "rcfilters-preference-label": "സമàµ\80à´ªà´\95ാലമാറàµ\8dà´±à´\99àµ\8dà´\99à´³àµ\81à´\9fàµ\86 à´ªàµ\81à´¤àµ\81à´\95àµ\8dà´\95à´¿à´¯ à´ªà´¤à´¿à´ªàµ\8dà´ªàµ\8d à´ªàµ\8dരദർശിപàµ\8dപിà´\95àµ\8dà´\95àµ\87à´£àµ\8dà´\9f",
-       "rcfilters-preference-help": "സമàµ\8dപർà´\95àµ\8dà´\95à´®àµ\81à´\96à´¤àµ\8dതിൽ 2017-ൽ à´µà´°àµ\81à´¤àµ\8dതിയ à´°àµ\82à´ªà´\95à´²àµ\8dപനാമാറàµ\8dà´±à´\99àµ\8dà´\99à´³àµ\81à´\82, à´\85à´¤àµ\8bà´\9fàµ\8aà´ªàµ\8dപവàµ\81à´\82 à´ªà´¿à´¨àµ\8dà´¨àµ\80à´\9fàµ\81à´\82 à´\9aàµ\87ർതàµ\8dà´¤ à´\8eà´²àµ\8dലാ à´\89à´ªà´\95à´°à´£à´\99àµ\8dà´\99à´³àµ\81à´\82 à´\92ഴിവാà´\95àµ\8dà´\95àµ\81à´\95.",
-       "rcfilters-watchlist-preference-label": "à´¶àµ\8dà´°à´¦àµ\8dധിà´\95àµ\8dà´\95àµ\81à´¨àµ\8dനവയàµ\81à´\9fàµ\86 à´ªà´\9fàµ\8dà´\9fà´¿à´\95à´¯àµ\81à´\9fàµ\86 à´ªàµ\81à´¤àµ\81à´\95àµ\8dà´\95à´¿à´¯ à´ªà´¤à´¿à´ªàµ\8dà´ªàµ\8d à´ªàµ\8dരദർശിപàµ\8dപിà´\95àµ\8dà´\95àµ\87à´£àµ\8dà´\9fതിലàµ\8dà´²",
-       "rcfilters-watchlist-preference-help": "2017-ലെ സമ്പർക്കമുഖ പുനർരൂപകല്പനയും അതോടൊപ്പവും പിന്നീടും ചേർത്ത എല്ലാ ഉപകരണങ്ങളും ഒഴിവാക്കുക",
+       "rcfilters-preference-label": "à´\9cാവാസàµ\8dà´\95àµ\8dà´°à´¿à´ªàµ\8dà´±àµ\8dà´±àµ\8d-രഹിത à´¸à´®àµ\8dപർà´\95àµ\8dà´\95à´®àµ\81à´\96à´\82 à´\89പയàµ\8bà´\97à´¿à´\95àµ\8dà´\95àµ\81à´\95",
+       "rcfilters-preference-help": "à´\85à´°à´¿à´ªàµ\8dà´ªà´\95à´³àµ\81à´\82 à´ªàµ\8dà´°à´®àµ\81à´\96മാà´\95àµ\8dà´\95à´¿à´\95àµ\8dà´\95à´¾à´\9fàµ\8dà´\9fൽ à´¸àµ\97à´\95à´°àµ\8dയവàµ\81à´\82 à´\87à´²àµ\8dലാതàµ\86 à´¸à´®àµ\80à´ªà´\95ാലമാറàµ\8dà´±à´\99àµ\8dà´\99ൾ à´\8eà´\9fàµ\81à´\95àµ\8dà´\95àµ\81à´\95",
+       "rcfilters-watchlist-preference-label": "à´\9cാവാസàµ\8dà´\95àµ\8dà´°à´¿à´ªàµ\8dà´±àµ\8dà´±àµ\8d-രഹിത à´¸à´®àµ\8dപർà´\95àµ\8dà´\95à´®àµ\81à´\96à´\82 à´\89പയàµ\8bà´\97à´¿à´\95àµ\8dà´\95àµ\81à´\95",
+       "rcfilters-watchlist-preference-help": "അരിപ്പകളും പ്രമുഖമാക്കിക്കാട്ടൽ സൗകര്യവും ഇല്ലാതെ ശ്രദ്ധിക്കുന്നവയുടെ പട്ടിക എടുക്കുക.",
        "rcfilters-filter-showlinkedfrom-label": "കണ്ണി ചേർക്കപ്പെട്ട താളുകളിലെ മാറ്റങ്ങൾ കാണിക്കുക",
        "rcfilters-filter-showlinkedfrom-option-label": "തിരഞ്ഞെടുത്ത താളിൽ <strong>കണ്ണി ചേർക്കപ്പെട്ട താളുകൾ</strong>",
        "rcfilters-filter-showlinkedto-label": "കണ്ണി ചേർക്കപ്പെട്ട താളുകളിലെ മാറ്റങ്ങൾ കാണിക്കുക",
        "filehist-comment": "അഭിപ്രായം",
        "imagelinks": "പ്രമാണത്തിന്റെ ഉപയോഗം",
        "linkstoimage": "താഴെ കാണുന്ന {{PLURAL:$1|താളിൽ|$1 താളുകളിൽ}}  ഈ ചിത്രം ഉപയോഗിക്കുന്നു:",
-       "linkstoimage-more": "à´\88 à´ªàµ\8dരമാണതàµ\8dതിലàµ\87à´¯àµ\8dà´\95àµ\8dà´\95àµ\8d {{PLURAL:$1|à´\92à´°àµ\81 à´¤à´¾à´³à´¿à´²à´§à´¿à´\95à´\82 à´\95à´£àµ\8dണി|$1 à´¤à´¾à´³à´¿à´²à´§à´¿à´\95à´\82 à´\95à´£àµ\8dണിà´\95ൾ}} à´\89à´£àµ\8dà´\9fàµ\8d.\nതാഴàµ\86à´\95àµ\8dà´\95àµ\8aà´\9fàµ\81à´¤àµ\8dതിരിà´\95àµ\8dà´\95àµ\81à´¨àµ\8dà´¨ à´ªà´\9fàµ\8dà´\9fà´¿à´\95 à´\88 à´ªàµ\8dരമാണതàµ\8dതിലàµ\87à´¯àµ\8dà´\95àµ\8dà´\95àµ\81 à´®à´¾à´¤àµ\8dà´°à´®àµ\81à´³àµ\8dà´³ {{PLURAL:$1|à´\86à´¦àµ\8dà´¯ à´¤à´¾à´³à´¿à´¨àµ\8dà´±àµ\86 à´\95à´£àµ\8dണി|à´\86à´¦àµ\8dà´¯ $1 à´¤à´¾à´³àµ\81à´\95à´³àµ\81à´\9fàµ\86 à´\95à´£àµ\8dണിà´\95ൾ}} à´\95à´¾à´\9fàµ\8dà´\9fàµ\81à´¨àµ\8dà´¨àµ\81.\n[[Special:WhatLinksHere/$2|മുഴുവൻ പട്ടികയും]] ലഭ്യമാണ്.",
-       "nolinkstoimage": "à´\88 à´\9aà´¿à´¤àµ\8dà´°à´\82/à´ªàµ\8dരമാണà´\82 à´µà´¿à´\95àµ\8dà´\95ിയിലàµ\86 à´¤à´¾à´³àµ\81à´\95ളിലàµ\8aà´¨àµ\8dനിലàµ\81à´\82 à´\89പയàµ\8bà´\97à´¿à´\95àµ\8dà´\95àµ\81à´¨àµ\8dനിലàµ\8dà´².",
+       "linkstoimage-more": "à´\88 à´ªàµ\8dരമാണതàµ\8dതിലàµ\87à´¯àµ\8dà´\95àµ\8dà´\95àµ\8d {{PLURAL:$1|à´\92à´°àµ\81 à´¤à´¾à´³à´¿à´²à´§à´¿à´\95à´\82 à´\95à´£àµ\8dണി|$1 à´¤à´¾à´³à´¿à´²à´§à´¿à´\95à´\82 à´\95à´£àµ\8dണിà´\95ൾ}} à´\89à´£àµ\8dà´\9fàµ\8d.\nതാഴàµ\86à´\95àµ\8dà´\95àµ\8aà´\9fàµ\81à´¤àµ\8dതിരിà´\95àµ\8dà´\95àµ\81à´¨àµ\8dà´¨ à´ªà´\9fàµ\8dà´\9fà´¿à´\95 à´\88 à´ªàµ\8dരമാണà´\82 à´\89പയàµ\8bà´\97à´¿à´\95àµ\8dà´\95àµ\81à´¨àµ\8dà´¨ {{PLURAL:$1|à´\86à´¦àµ\8dà´¯ à´¤à´¾àµ¾|à´\86à´¦àµ\8dà´¯ $1 à´¤à´¾à´³àµ\81à´\95ൾ}} à´®à´¾à´¤àµ\8dരമാണàµ\8d à´\95à´¾à´\9fàµ\8dà´\9fàµ\81à´¨àµ\8dനതàµ\8d.\n[[Special:WhatLinksHere/$2|മുഴുവൻ പട്ടികയും]] ലഭ്യമാണ്.",
+       "nolinkstoimage": "ഈ പ്രമാണം വിക്കിയിലെ താളുകളിലൊന്നിലും ഉപയോഗിക്കുന്നില്ല.",
        "morelinkstoimage": "ഈ പ്രമാണത്തിലേയ്ക്കുള്ള [[Special:WhatLinksHere/$1|കൂടുതൽ കണ്ണികൾ]] കാണുക.",
        "linkstoimage-redirect": "$1 (പ്രമാണ തിരിച്ചുവിടൽ) $2",
        "duplicatesoffile": "ഈ പ്രമാണത്തിന്റെ {{PLURAL:$1|ഒരു പകർപ്പ് പ്രമാണത്തെ|$1 പകർപ്പ് പ്രമാണങ്ങളെ}} താഴെ കൊടുത്തിരിക്കുന്നു ([[Special:FileDuplicateSearch/$2|കൂടുതൽ വിവരങ്ങൾ]]):",
        "prefixindex": "പൂർവ്വപദത്തോടു കൂടിയ എല്ലാ താളുകളും",
        "prefixindex-namespace": "പൂർവ്വപദമുള്ള എല്ലാ താളുകളും (നാമമേഖല $1)",
        "prefixindex-submit": "പ്രദർശിപ്പിക്കുക",
-       "prefixindex-strip": "à´ªà´\9fàµ\8dà´\9fà´¿à´\95യിൽ à´¨à´¿à´¨àµ\8dà´¨àµ\8d à´ªàµ\82ർവàµ\8dവപദà´\82 à´\92ഴിവാക്കുക",
+       "prefixindex-strip": "à´«à´²à´\99àµ\8dà´\99ളിൽ à´¨à´¿à´¨àµ\8dà´¨àµ\8d à´ªàµ\82ർവàµ\8dവപദà´\82 à´®à´±à´¯àµ\8dക്കുക",
        "shortpages": "വിവരം ഏറ്റവും കുറവുള്ള താളുകൾ",
        "longpages": "വലിയ താളുകളുടെ പട്ടിക",
        "deadendpages": "അന്തർ വിക്കി കണ്ണിയാൽ ബന്ധിപ്പിക്കപ്പെടാത്ത താളുകൾ",
        "speciallogtitlelabel": "ലക്ഷ്യം (തലക്കെട്ട് അല്ലെങ്കിൽ ഉപയോക്താവിനെ തിരയാനുള്ള {{ns:user}}:ഉപയോക്തൃനാമം) :",
        "log": "പ്രവർത്തനരേഖകൾ",
        "logeventslist-submit": "പ്രദർശിപ്പിക്കുക",
+       "logeventslist-patrol-log": "റോന്തുചുറ്റൽ പ്രവർത്തനരേഖ",
+       "logeventslist-tag-log": "റ്റാഗ് രേഖ",
        "all-logs-page": "എല്ലാ പൊതുരേഖകളും",
        "alllogstext": "{{SITENAME}} സംരംഭത്തിൽ ലഭ്യമായ വിവിധ പ്രവർത്തന രേഖകൾ ഈ താളിൽ ഒരുമിച്ച് കാണാം. താങ്കൾക്ക് രേഖകളുടെ സ്വഭാവം, ഉപയോക്തൃനാമം (കേസ് സെൻസിറ്റീവ്), ബന്ധപ്പെട്ട താൾ (കേസ് സെൻസിറ്റീവ്) മുതലായവ തിരഞ്ഞെടുത്ത് അന്വേഷണം കൂടുതൽ ക്ഌപ്തപ്പെടുത്താവുന്നതാണ്.",
        "logempty": "പ്രവർത്തനരേഖയിൽ ബന്ധമുള്ളവ ഇല്ല.",
        "cachedspecial-refresh-now": "ഏറ്റവും പുതിയ പതിപ്പ് കാണുക.",
        "categories": "വർഗ്ഗങ്ങൾ",
        "categories-submit": "പ്രദർശിപ്പിക്കുക",
-       "categoriespagetext": "താഴàµ\86 à´\95àµ\8aà´\9fàµ\81à´¤àµ\8dതിരിà´\95àµ\8dà´\95àµ\81à´¨àµ\8dà´¨ {{PLURAL:$1|വർà´\97àµ\8dà´\97à´¤àµ\8dതിൽ|വർà´\97àµ\8dà´\97à´\99àµ\8dà´\99ളിൽ}} à´¤à´¾à´³àµ\81à´\95à´³àµ\81à´\82 à´ªàµ\8dരമാണà´\99àµ\8dà´\99à´³àµ\81à´®àµ\81à´£àµ\8dà´\9fàµ\8d.\n[[Special:UnusedCategories|à´\89പയàµ\8bà´\97à´¿à´\95àµ\8dà´\95à´ªàµ\8dà´ªàµ\86à´\9fാതàµ\8dà´¤ à´µàµ¼à´\97àµ\8dà´\97à´\99àµ\8dà´\99ൾ]] à´\87വിà´\9fàµ\86 à´\95ാണിà´\95àµ\8dà´\95àµ\81à´¨àµ\8dനിലàµ\8dà´².\n[[Special:WantedCategories|അവശ്യവർഗ്ഗങ്ങൾ]] കൂടി കാണുക.",
+       "categoriespagetext": "താഴàµ\86 à´\95àµ\8aà´\9fàµ\81à´¤àµ\8dതിരിà´\95àµ\8dà´\95àµ\81à´¨àµ\8dà´¨ {{PLURAL:$1|വർà´\97àµ\8dà´\97à´\82|വർà´\97àµ\8dà´\97à´\99àµ\8dà´\99ൾ}} à´µà´¿à´\95àµ\8dà´\95ിയിലàµ\81à´£àµ\8dà´\9fàµ\86à´\99àµ\8dà´\95à´¿à´²àµ\81à´\82, à´\89പയàµ\8bà´\97à´¿à´\95àµ\8dà´\95à´ªàµ\8dà´ªàµ\86à´\9fാനàµ\8b à´\89പയàµ\8bà´\97à´¿à´\95àµ\8dà´\95à´ªàµ\8dà´ªàµ\86à´\9fാതിരിà´\95àµ\8dà´\95ാനàµ\8b à´¸à´¾à´¦àµ\8dà´§àµ\8dയതയàµ\81à´£àµ\8dà´\9fàµ\8d.\n[[Special:WantedCategories|അവശ്യവർഗ്ഗങ്ങൾ]] കൂടി കാണുക.",
        "categoriesfrom": "ഇങ്ങനെ തുടങ്ങുന്ന വർഗ്ഗങ്ങൾ കാട്ടുക:",
        "deletedcontributions": "മായ്ക്കപ്പെട്ട ഉപയോക്തൃസംഭാവനകൾ",
        "deletedcontributions-title": "മായ്ക്കപ്പെട്ട ഉപയോക്തൃസംഭാവനകൾ",
        "contribsub2": "ഉപയോക്താവ് {{GENDER:$3|$1}} ($2)",
        "contributions-userdoesnotexist": "\"$1\" എന്ന ഉപയോക്തൃ അം‌ഗത്വം നിലവിലില്ല.",
        "nocontribs": "ഈ മാനദണ്ഡങ്ങളുമായി യോജിക്കുന്ന മാറ്റങ്ങൾ ഒന്നും കണ്ടില്ല.",
-       "uctop": "(നിലവിലുള്ളത്)",
+       "uctop": "നിലവിലുള്ളത്",
        "month": "മാസം:",
        "year": "വർഷം:",
+       "date": "തുടങ്ങേണ്ട തീയതി (അതിന് മുമ്പുള്ളവയും):",
        "sp-contributions-newbies": "പുതിയ അംഗങ്ങൾ നടത്തിയ തിരുത്തുകൾ മാത്രം",
        "sp-contributions-newbies-sub": "പുതിയ ഉപയോക്താക്കൾ ചെയ്തവ",
        "sp-contributions-newbies-title": "പുതിയ അംഗത്വമെടുത്ത ഉപയോക്താക്കളുടെ സേവനങ്ങൾ",
        "ipb-disableusertalk": "തടയപ്പെട്ടിരിക്കുമ്പോൾ സ്വന്തം സംവാദം താൾ തിരുത്തുന്നതിൽ നിന്നും ഈ ഉപയോക്താവിനെ തടയുക",
        "ipb-change-block": "ഈ ക്രമീകരണപ്രകാരം ഉപയോക്താവിനെ വീണ്ടും തടയുക",
        "ipb-confirm": "തടയൽ സ്ഥിരീകരിക്കുക",
+       "ipb-sitewide": "സൈറ്റ്-വ്യാപകം",
+       "ipb-partial": "ഭാഗികം",
+       "ipb-type-label": "തരം",
+       "ipb-pages-label": "താളുകൾ",
        "badipaddress": "അസാധുവായ ഐ.പി. വിലാസം.",
        "blockipsuccesssub": "തടയൽ വിജയിച്ചിരിക്കുന്നു",
        "blockipsuccesstext": "[[Special:Contributions/$1|$1]] എന്ന ഉപയോക്താവിനെ തടഞ്ഞിരിക്കുന്നു.<br />\nതടയൽ പുനഃപരിശോധിക്കാൻ [[Special:BlockList|തടയൽ പട്ടിക]] കാണുക.",
        "createaccountblock": "അംഗത്വം സൃഷ്ടിക്കുന്നതിൽനിന്ന് തടഞ്ഞിരിക്കുന്നു",
        "emailblock": "ഇമെയിൽ ഉപയോഗിക്കുന്നതു തടഞ്ഞിരിക്കുന്നു",
        "blocklist-nousertalk": "സ്വന്തം സം‌വാദ താളിൽ തിരുത്താൻ സാധിക്കില്ല",
+       "blocklist-editing": "തിരുത്ത്",
+       "blocklist-editing-sitewide": "തിരുത്ത് (സൈറ്റ്-വ്യാപകം)",
        "ipblocklist-empty": "തടയൽപ്പട്ടിക ശൂന്യമാണ്‌.",
        "ipblocklist-no-results": "ഈ ഐ.പി. വിലാസമോ ഉപയോക്തൃനാമമോ തടഞ്ഞിട്ടില്ല.",
        "blocklink": "തടയുക",
        "move-watch": "ഈ താളിലെ മാറ്റങ്ങൾ ശ്രദ്ധിക്കുക",
        "movepagebtn": "താൾ മാറ്റുക",
        "pagemovedsub": "തലക്കെട്ടു മാറ്റം വിജയിച്ചിരിക്കുന്നു",
+       "cannotmove": "ഇനി പറയുന്ന {{PLURAL:$1|കാരണത്താൽ|കാരണങ്ങളാൽ}} താൾ മാറ്റാൻ കഴിയില്ല:",
        "movepage-moved": "'''\"$1\" എന്ന ലേഖനം \"$2\" എന്ന തലക്കെട്ടിലേക്ക് മാറ്റിയിരിക്കുന്നു'''",
        "movepage-moved-redirect": "ഒരു തിരിച്ചുവിടൽ സൃഷ്ടിച്ചിരിക്കുന്നു.",
        "movepage-moved-noredirect": "തിരിച്ചുവിടലിന്റെ സൃഷ്ടി ഒതുക്കിയിരിക്കുന്നു.",
        "pageinfo-category-files": "പ്രമാണങ്ങളുടെ എണ്ണം",
        "pageinfo-user-id": "ഉപയോക്തൃ ഐ.ഡി.",
        "pageinfo-file-hash": "ഹാഷ് വില",
+       "pageinfo-view-protect-log": "ഈ താളിന്റെ സംരക്ഷണ രേഖ കാണുക.",
        "markaspatrolleddiff": "റോന്തുചുറ്റിയതായി അടയാളപ്പെടുത്തുക",
        "markaspatrolledtext": "ഈ താളിൽ റോന്തുചുറ്റിയതായി രേഖപ്പെടുത്തുക",
        "markaspatrolledtext-file": "പ്രമാണത്തിന്റെ ഈ പതിപ്പിൽ റോന്തുചുറ്റിയതായി അടയാളപ്പെടുത്തുക",
        "previousdiff": "← മുൻപത്തെ വ്യത്യാസം",
        "nextdiff": "അടുത്ത വ്യത്യാസം →",
        "mediawarning": "'''മുന്നറിയിപ്പ്''': ഈ തരത്തിലുള്ള പ്രമാണത്തിൽ വിനാശകാരിയായ കോഡ് ഉണ്ടായേക്കാം. ഇതു തുറക്കുന്നതു താങ്കളുടെ കമ്പ്യൂട്ടറിനു അപകടമായി തീർന്നേക്കാം.",
-       "imagemaxsize": "à´\9aà´¿à´¤àµ\8dà´°à´¤àµ\8dതിനàµ\8dà´±àµ\86 à´µà´²à´¿à´ªàµ\8dà´ªà´\82:<br />''(à´ªàµ\8dരമാണതàµ\8dതിനàµ\8dà´±àµ\86 à´µà´¿à´µà´°à´£ à´¤à´¾à´³àµ\81à´\95ളിൽ)''",
+       "imagemaxsize": "à´ªàµ\8dരമാണതàµ\8dതിനàµ\8dà´±àµ\86 à´µà´¿à´µà´°à´£ à´¤à´¾à´³àµ\81à´\95ളിൽ à´\9aà´¿à´¤àµ\8dà´°à´¤àµ\8dതിനàµ\8dà´±àµ\86 à´µà´²à´¿à´ªàµ\8dà´ªà´\82:",
        "thumbsize": "ലഘുചിത്രത്തിന്റെ വലിപ്പം:",
        "widthheightpage": "$1 × $2, $3 {{PLURAL:$3|താൾ|താളുകൾ}}",
        "file-info": "പ്രമാണത്തിന്റെ വലിപ്പം: $1, മൈം തരം: $2",
        "confirm-unwatch-top": "ഈ താൾ ഞാൻ ശ്രദ്ധിക്കുന്ന താളുകളുടെ പട്ടികയിൽനിന്നും നീക്കട്ടെ?",
        "confirm-rollback-button": "ശരി",
        "confirm-rollback-top": "ഈ താളിലെ തിരുത്തുകൾ തിരിച്ചാക്കണോ?",
+       "confirm-mcrrestore-title": "ഒരു നാൾപ്പതിപ്പ് പുനഃസ്ഥാപിക്കുക",
+       "confirm-mcrundo-title": "ഒരു മാറ്റം തിരസ്കരിക്കുക",
+       "mcrundofailed": "തിരസ്കരണം പരാജയപ്പെട്ടു",
+       "mcrundo-missingparam": "അഭ്യർത്ഥനയ്ക്ക് ആവശ്യമുള്ള ചരങ്ങൾ നൽകിയിട്ടില്ല.",
        "quotation-marks": "\"$1\"",
        "imgmultipageprev": "← മുൻപത്തെ താൾ",
        "imgmultipagenext": "അടുത്ത താൾ →",
        "tags": "സാധുവായ മാറ്റങ്ങളുടെ അനുബന്ധങ്ങൾ",
        "tag-filter": "[[Special:Tags|അനുബന്ധങ്ങളുടെ]] അരിപ്പ:",
        "tag-filter-submit": "അരിപ്പ",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|റ്റാഗ്|റ്റാഗുകൾ}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|റ്റാഗ്|റ്റാഗുകൾ}}]]: $2",
        "tag-mw-new-redirect": "പുതിയ തിരിച്ചുവിടൽ",
        "tag-mw-new-redirect-description": "പുതിയ തിരിച്ചുവിടൽ സൃഷ്ടിക്കാനുള്ളതോ, ഒരു താളിനെ തിരിച്ചുവിടലാക്കുന്നതിനോ ഉള്ള തിരുത്ത്",
        "tag-mw-removed-redirect": "തിരിച്ചുവിടൽ ഒഴിവാക്കി",
        "dberr-again": "കുറച്ച് മിനിട്ടുകൾ കാത്തിരുന്ന് വീണ്ടും തുറക്കുവാൻ ശ്രമിക്കുക.",
        "dberr-info": "(വിവരശേഖരം എടുക്കാൻ പറ്റിയില്ല: $1)",
        "dberr-info-hidden": "(വിവരശേഖരം എടുക്കാനാവില്ല)",
-       "dberr-usegoogle": "അതേസമയം താങ്കൾക്ക് ഗൂഗിൾ വഴി തിരയുവാൻ ശ്രമിക്കാവുന്നതാണ്.",
-       "dberr-outofdate": "അവരുടെ പക്കലുള്ള നമ്മുടെ ഉള്ളടക്കത്തിന്റെ സൂചികകൾ കാലഹരണപ്പെട്ടതാകാമെന്ന് ഓർക്കുക.",
-       "dberr-cachederror": "ആവശ്യപ്പെട്ട താളിന്റെ കാഷ് ചെയ്യപ്പെട്ട പകർപ്പാണിത്, ഇത് ഇപ്പോഴുള്ളതാകണമെന്നില്ല.",
        "htmlform-invalid-input": "താങ്കൾ നൽകിയ ചില വിവരങ്ങളിൽ അപാകതകളുണ്ട്",
        "htmlform-select-badoption": "താങ്കൾ നൽകിയ വില ഒരു സ്വീകാര്യമായ ഉപാധിയല്ല.",
        "htmlform-int-invalid": "താങ്കൾ നൽകിയ വില ഒരു പൂർണ്ണസംഖ്യയല്ല.",
        "special-characters-title-emdash": "എം ഡാഷ്",
        "special-characters-title-minus": "വ്യവകലന ചിഹ്നം",
        "mw-widgets-abandonedit": "സേവ് ചെയ്യാതെ തന്നെ തിരുത്തുന്നതിൽ നിന്ന് പോകണം എന്ന് താങ്കൾക്കുറപ്പാണോ?",
-       "mw-widgets-abandonedit-discard": "തിരàµ\81à´¤àµ\8dà´¤àµ\81à´\95ൾ à´\85à´µà´\97à´£ിക്കുക",
+       "mw-widgets-abandonedit-discard": "തിരàµ\81à´¤àµ\8dà´¤àµ\81à´\95ൾ à´¨à´¿à´°à´¾à´\95à´°ിക്കുക",
        "mw-widgets-abandonedit-keep": "തിരുത്ത് തുടരുക",
        "mw-widgets-abandonedit-title": "താങ്കൾക്ക് ഉറപ്പാണോ?",
        "mw-widgets-dateinput-no-date": "തീയതി ഒന്നും തിരഞ്ഞെടുത്തിട്ടില്ല",
        "mw-widgets-titleinput-description-redirect": "$1 എന്ന താളിലേക്കുള്ള തിരിച്ചുവിടൽ",
        "mw-widgets-categoryselector-add-category-placeholder": "വർഗ്ഗം ചേർക്കുക...",
        "mw-widgets-usersmultiselect-placeholder": "കൂടുതൽ ചേർക്കുക...",
+       "mw-widgets-titlesmultiselect-placeholder": "കൂടുതൽ ചേർക്കുക...",
        "date-range-from": "ഈ തീയതി മുതൽ:",
        "date-range-to": "ഈ തീയതി വരെ:",
        "sessionmanager-tie": "വ്യത്യസ്ത തരത്തിലുള്ള അനുമതി നൽകൽ തരങ്ങൾ സംയോജിപ്പിക്കാനാവില്ല: $1.",
index f6e25a6..28fbfc6 100644 (file)
        "mycontris": "Оруулсан хувь нэмэр",
        "contribsub2": "Хэрэглэгч: {{GENDER:$3|$1}} ($2)",
        "nocontribs": "Энэ шалгуурт тохирох өөрчилсөн зүйлүүд олдсонгүй.",
-       "uctop": "(одоох)",
+       "uctop": "одоох",
        "month": "Дараах сараас урагш:",
        "year": "Арын он:",
        "sp-contributions-newbies": "Зөвхөн шинэ бүртгэлүүдийн хувь нэмрийг харуулах",
        "dberr-problems": "Уучлаарай! Энэхүү сайтад техникийн саатал учирч байна.",
        "dberr-again": "Хэдэн минут хүлээгээд дахин ачаалж үзнэ үү.",
        "dberr-info": "(өгөгдлийн сангийн серверт хандаж чадсангүй: $1)",
-       "dberr-usegoogle": "Та одоохондоо Google-г ашиглан хайлтаа хийх боломжтой.",
-       "dberr-outofdate": "Энэ сайт дахь агуулгын гадны индекс хуучирсан байж болзошгүйг анхаарна уу.",
-       "dberr-cachederror": "Энэ нь таны хандах гэж буй хуудсын кэшлэгдсэн хувилбар. Иймд агуулга нь хуучирсан байж болзошгүй.",
        "htmlform-invalid-input": "Таны оролтын зарим хэсэгт асуудал байна",
        "htmlform-select-badoption": "Таны өгсөн утга хүчинтэй бус байна.",
        "htmlform-int-invalid": "Таны өгсөн утга бүхэл тоо биш байна.",
index 3c65f32..4096af6 100644 (file)
        "anoncontribs": "ꯈꯣꯝꯒꯠꯂꯛꯂꯤꯕꯁꯤꯡ",
        "contribsub2": "{{GENDER:$3|$1}}$2 ꯒꯤ",
        "nocontribs": "ꯃꯁꯤꯗ ꯆꯪꯂꯤꯕꯁꯤꯒ ꯆꯥꯟꯅꯕ ꯑꯍꯣꯡꯕ ꯂꯩꯇꯦ ꯫",
-       "uctop": "(ꯍꯧꯖꯤꯛ)",
+       "uctop": "ꯍꯧꯖꯤꯛ",
        "month": "ꯃꯗꯨꯒꯤ ꯊꯥꯗꯒꯤ (ꯑꯃꯗꯤ ꯅꯧꯔꯤꯕꯥ)",
        "year": "ꯃꯗꯨꯒꯤ ꯆꯥꯍꯤꯗꯒꯤ (ꯑꯃꯗꯤ ꯅꯧꯔꯤꯕꯥ)",
        "sp-contributions-newbies": "ꯑꯅꯧꯕ ꯑꯦꯀꯥꯎꯟꯅꯥ ꯈꯣꯝꯒꯠꯂꯛꯄꯁꯤꯡꯗꯨ ꯈꯛꯇꯃꯛ ꯎꯨꯠꯂꯨ",
        "redirect-file": "ꯐꯥꯏꯜ ꯃꯃꯤꯡ",
        "specialpages": "ꯑꯈꯟꯅꯕ ꯂꯃꯥꯏꯁꯤꯡ",
        "tag-filter": "[[Special:Tags|ꯊꯦꯡꯕ]] ꯁꯦꯡꯇꯣꯛꯄ:",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|ꯊꯦꯕ|ꯊꯦꯕꯁꯤꯡ}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|ꯊꯦꯕ|ꯊꯦꯕꯁꯤꯡ}}]]: $2",
        "tags-active-yes": "ꯍꯣꯏ",
        "tags-active-no": "ꯅꯠꯇꯦ",
        "tags-hitcount": "$1 {{PLURAL:$1|ꯑꯍꯣꯡꯕ|ꯑꯍꯣꯡꯕꯁꯤꯡ}}",
index 5c6f336..e70eb88 100644 (file)
        "tog-newpageshidepatrolled": "ဗဒန် မုက်လိက်မဒဒှ်မဂေတ်ကၚ် နူ စရၚ် မုက်လိက် တၟိ",
        "tog-hidecategorization": "ပၞုက် အရာမဖျေဟ်ကဏ္ဍ ကုမုက်လိက်",
        "tog-extendwatchlist": "သၠဲ စရၚ်မမၚ်မဲ သ္ဂောံ ထ္ၜး အလုံ မုက်လိၚ်ဂမၠိုၚ်, ဆ မတုဲကၠုၚ်လၟုဟ် ဟွံသေၚ်",
+       "tog-usenewrc": "ပြံင်လှာဲ ဂကောံ နကဵု  မပြံင်လှာဲ ပြဟ်ဟ်ဏအ် ကဵု စရင်မမင်မဲဂမၠိုင်",
+       "tog-numberheadings": "ပြေင်မဂၞန် က္ဍိုပ်လိက်ဂမၠိုင် ဗွဲအလဵုလဵု",
        "tog-editondblclick": "ဒါန်မုက်လိက်ဂမၠိုၚ် ပွမပ္ဍဵုကေတ်ၜါလ္တန်",
+       "tog-editsectiononrightclick": "မရုဲစှ် သွက်ဂွံပလေဝ်ဒါန် နကဵုမဍဵု လပါ်ပုင် ပ္ဍဲက္ဍိုပ်လိက် ကဏ္ဍ",
        "tog-watchcreations": "စုတ်မုက်လိက် မအဲခၞံကၠောန်လဝ် ကေုာံ ဝှာၚ် မအဲပတိုန်လဝ် စရေၚ် စရၚ်မမၚ်မွဲအဲ.",
        "tog-watchdefault": "စုတ်မုက်လိက်ဂမၠိုၚ် ကေုာံ ဝှာၚ်ဂမၠိုၚ်မအဲပလေဝ်ဒါန်လဝ် စရေၚ်စရၚ်အဲမမၚ်မွဲ.",
        "tog-watchmoves": "စုတ်မုက်လိက်ဂမၠိုၚ် ကေုာံ ဝှာၚ်ဂမၠိုၚ် မအဲပဆုဲလဝ် စရေၚ်စရၚ်အဲမမၚ်မွဲ.",
        "tog-watchdeletion": "စုတ်မုက်လိက် ကေုာံ ဝှာၚ် မအဲပလီုလဝ် စရေၚ် စရၚ်အဲမမၚ်မွဲ",
        "tog-watchuploads": "စုတ်ဝှာၚ်တၟိ မအဲပတိုန်လဝ် စရေၚ် စရၚ်အဲမမၚ်မွဲ",
+       "tog-watchrollback": "မုက်လိက် အဲမကလေင်ဂတးပလေဝ်လဝ် ပ္ဍဲစရင်မင်မဲအဲ",
        "tog-minordefault": "ဍာပ်သ္တီ ဒါန်မညိညသီုဖအိုတ် နကဵုဒှ်ဒတန်အလဵုအလဵု",
        "tog-previewontop": "ထ္ၜနာမူနာ ကိုပ်ကၠာနူ ပလေဝ်ဒါန်ကဠာ",
        "tog-previewonfirst": "ထ္ၜးနာမူနာ ပ္ဍဲပလေဝ်ဒါန်မဒှ်ပထမ",
@@ -27,6 +31,7 @@
        "tog-enotifrevealaddr": "ထၟံက်ထ္ၜး ဌာန်ဒတန်အဳမေလ်အဲ ပ္ဍဲအဳမေလ်မကဵုသတိဂမၠိုၚ်",
        "tog-shownumberswatching": "ထ္ၜးလၟိုဟ်ဒဒှ်ညးလွပ်မဗဵုဂမၠိုၚ်",
        "tog-oldsig": "စၟတ်တဲ မၞး မၞုံဒၟံၚ်တုဲတုဲ:",
+       "tog-fancysig": "စၟတ်သမ္တီ စၟတ်တဲ နဒဒှ် လိက်ဝဳကဳ (သက္ကု လေန် ဗွဲအလဵုလဵု)",
        "tog-uselivepreview": "ထ္ၜးမသ္ၚေဝ်မဲ သီုဟွံကလေၚ်ပံက်မုက်လိက်",
        "tog-watchlisthideown": "ဗဒန်ထောံအဲဒါန်လဝ်နူစရၚ်မဗဵုရံၚ်",
        "tog-watchlisthidebots": "ဗဒန်ထောံ ရုပ်စက်မပလေဝ်ဒါန်   နူ စရၚ်မမၚ်မွဲ",
        "anoncontribs": "အရာမကၠောန်လဝ်ဂမၠိုင်",
        "contribsub2": "သွက် {{GENDER:$3|$1}} ($2)",
        "nocontribs": "အရာမပလေဝ်ဒါန် မကိတ်ညဳ ကုတင်ဂၞင်တအ်ဂှ် ဟွံဂွံဆဵုကေတ်၊၊",
-       "uctop": "(လၟုဟ်)",
+       "uctop": "လၟုဟ်",
        "month": "နူ ဂိတု (ကေုာံ ပြဟ်နူ)",
        "year": "နူ သၞာံ (ကေုာံ ပြဟ်နူ):",
        "sp-contributions-newbies": "ထ္ၜး အရာမကၠောန်ခၞံ နူကဵု အကံက်တၟိ ဟေင်",
        "blankpage": "မုက်လိက် ပလး",
        "tag-filter": "[[Special:Tags|Tag]] ဝှာင်ဂမၠိုင်:",
        "tag-filter-submit": "ဖဍိုဟ်",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|အစင်အတောဲ|စင်အတောဲဂမၠိုင်}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|အစင်အတောဲ|စင်အတောဲဂမၠိုင်}}]]: $2",
        "tag-mw-replace": "ကလေၚ်ဖျေံဒၞာဲ",
        "tag-mw-undo": "ဟွံပ",
        "tags-source-header": "တမ်ရိုဟ်",
index 21a1907..0c075c7 100644 (file)
        "contribsub2": "{{GENDER:$3|$1}} ($2) साठी",
        "contributions-userdoesnotexist": "सदस्यखाते \"$1\"  हे नोंदलेले नाही.",
        "nocontribs": "या मानदंडाशी जुळणारे बदल सापडले नाहीत.",
-       "uctop": "(सद्य)",
+       "uctop": "सद्य",
        "month": "या महिन्यापासून (आणि पूर्वीचे):",
        "year": "या वर्षापासून (आणि पूर्वीचे):",
        "date": "दिनांकापासून (अथवा पूर्वीचे):",
        "tags": "मान्य बदल खुणा",
        "tag-filter": "[[Special:Tags|खूणपताका]] गाळक:",
        "tag-filter-submit": "गाळक",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|खूणपताका}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|खूणपताका}}]]: $2",
        "tag-mw-contentmodelchange": "आशय नमून्यात बदल",
        "tag-mw-new-redirect": "नवीन पुनर्निर्देशन",
        "tag-mw-new-redirect-description": "नवीन पुनर्निर्देशन तयार करणारी अथवा पानास पुनर्निर्देशनात बदलविणारी संपादने",
        "dberr-again": "थोडा वेळ थांबून पुन्हा पहा.",
        "dberr-info": "(विदादातापर्यंत पोहोचण्यास असमर्थ: $1)",
        "dberr-info-hidden": "(विदादातापर्यंत पोहोचण्यास असमर्थ)",
-       "dberr-usegoogle": "तोपर्यंत गूगलवर शोधून पहा",
-       "dberr-outofdate": "लक्षात घ्या, आमच्या मजकुराबाबत त्यांची सूची कालबाह्य असू शकते",
-       "dberr-cachederror": "ही मागवलेल्या पानाची सयीतील प्रत आहे, ती अद्ययावत नसण्याची शक्यता आहे.",
        "htmlform-invalid-input": "तुम्ही दिलेल्या माहितीत काहीतरी गडबड आहे",
        "htmlform-select-badoption": "आपण नमूद करत असलेली व्हॅल्यू ग्राह्य पर्याय ठरत नाही",
        "htmlform-int-invalid": "आपण नमूद केलेली व्हॅल्यू पूर्णांक (इंटीजर) नाही.",
index c0ddbe4..1c1fd70 100644 (file)
        "contribsub2": "Untuk {{GENDER:$3|$1}} ($2)",
        "contributions-userdoesnotexist": "Akaun pengguna \"$1\" tidak berdaftar.",
        "nocontribs": "Tiada sebarang perubahan yang sepadan dengan kriteria-kriteria ini.",
-       "uctop": "(terkini)",
+       "uctop": "terkini",
        "month": "Sebelum bulan:",
        "year": "Sejak tahun (dan sebelumnya):",
        "sp-contributions-newbies": "Tunjukkan sumbangan daripada akaun baru sahaja",
        "tags": "Teg-teg perubahan yang sah",
        "tag-filter": "Tapis [[Special:Tags|teg]]:",
        "tag-filter-submit": "Tapis",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Teg|Teg-teg}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Teg|Teg-teg}}]]: $2",
        "tags-title": "Teg",
        "tags-intro": "Yang berikut ialah senarai teg yang digunakan untuk menanda suntingan, berserta maknanya.",
        "tags-tag": "Nama teg",
        "dberr-again": "Cuba tunggu selama beberapa minit dan muat semula.",
        "dberr-info": "(Tidak dapat mengakses pangkalan data: $1)",
        "dberr-info-hidden": "(Tidak dapat mengakses pangkalan data)",
-       "dberr-usegoogle": "Buat masa ini, anda boleh cuba mencari melalui Google.",
-       "dberr-outofdate": "Sila ambil perhatian bahawa indeks mereka bagi kandungan kami mungkin sudah ketinggalan zaman.",
-       "dberr-cachederror": "Yang berikut ialah salinan bagi laman yang diminta yang diambil daripada cache, dan mungkin bukan yang terkini.",
        "htmlform-invalid-input": "Terdapat beberapa masalah dengan input anda",
        "htmlform-select-badoption": "Nilai yang anda tentukan bukan satu pilihan yang sah.",
        "htmlform-int-invalid": "Nilai yang anda tetapkan bukan satu integer.",
index 8f92a72..e463678 100644 (file)
        "contribsub2": "Għal {{GENDER:$3|$1}} ($2)",
        "contributions-userdoesnotexist": "L-utent \"$1\" mhuwiex reġistrat.",
        "nocontribs": "L-Ebda modifiki li jisodisfa l-kriterji tat-tfittxija.",
-       "uctop": "(attwali)",
+       "uctop": "attwali",
        "month": "Mix-xahar (u qabel):",
        "year": "Mis-sena (u qabel):",
        "sp-contributions-newbies": "Uri biss il-kontribuzzjonijiet tal-utenti l-ġodda",
        "tags": "Tikketti ta' modifika validi",
        "tag-filter": "Iffilitra skont it-[[Special:Tags|tikketta]]:",
        "tag-filter-submit": "Filtru",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Tag|Tags}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Tag|Tags}}]]: $2",
        "tags-title": "Tikketti",
        "tags-intro": "Din il-paġna telenka t-tikketti li s-softwer jista' jassoċja ma' modifika u t-tifsira tagħhom.",
        "tags-tag": "Isem tat-tikketta",
        "dberr-problems": "Jiddispjaċina! Dan is-sit għandu diffikultajiet tekniċi.",
        "dberr-again": "Prova stenna ftit minuti u erġa' tella' l-paġna.",
        "dberr-info": "(Impossibbli li jsir kuntratt mas-server tad-databażi: $1)",
-       "dberr-usegoogle": "Fil-frattemp, tista' tipprova tfittex permezz tal-Google.",
-       "dberr-outofdate": "Kun af li l-indiċi tagħhom tal-kontenut tagħna jista' ma jkunx aġġornat.",
-       "dberr-cachederror": "Din hija kopja cache tal-paġna rikjesta, u tista' tkun li mhijiex aġġornata.",
        "htmlform-invalid-input": "Hemm xi problemi f'dak li daħħalt",
        "htmlform-select-badoption": "Il-valur li speċifikajt mhuwiex għażla valida.",
        "htmlform-int-invalid": "Il-valur li speċifikajt mhuwiex sħiħ.",
index 2994c81..755d677 100644 (file)
        "anoncontribs": "Cuntrebuiçones",
        "contribsub2": "Pa {{GENDER:$3|$1}} ($2)",
        "nocontribs": "Nun fúrun ancontradas altaraçones cun este critério.",
-       "uctop": "(rebison atual)",
+       "uctop": "rebison atual",
        "month": "De l més (i atrasados):",
        "year": "De l anho (i atrasados):",
        "sp-contributions-newbies": "Amostrar solo las cuntrebuiçones de cuontas recientes",
        "intentionallyblankpage": "Esta páigina fui antencionalmente deixada an branco",
        "tags": "Eitiquetas de modeficaçon bálidas",
        "tag-filter": "Filtrar las [[Special:Tags|etiquetas]]:",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Eitiqueta|Eitiquetas}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Eitiqueta|Eitiquetas}}]]: $2",
        "tags-title": "Eitiquetas",
        "tags-source-header": "Ourige",
        "tags-active-yes": "Si",
index 5d4268f..55eaaec 100644 (file)
        "title-invalid-interwiki": "တောင်းဆိုထားသော စာမျက်နှာခေါင်းစဉ်တွင် ခေါင်းစဉ်များအဖြစ် အသုံးမပြုနိုင်သော အင်တာဝီကီလင့်ခ်တစ်ခု ပါဝင်နေသည်။",
        "title-invalid-talk-namespace": "တောင်းဆိုထားသော စာမျက်နှာခေါင်းစဉ်သည် မရှိသေးသော ဆွေးနွေးချက်စာမျက်နှာတစ်ခုသို့ ရည်ညွှန်းနေသည်။",
        "title-invalid-characters": "တောင်းဆိုထားသော စာမျက်နှာခေါင်းစဉ်တွင် မရေရာသော စာလုံးများ \"$1\" ပါဝင်နေသည်။",
+       "perfcachedts": "အောက်ပါဒေတာသည် cached ဖြစ်ပြီး $1 အချိန်တွင် နောက်ဆုံးမွမ်းမံထားပါသည်။ {{PLURAL:$4|ရလဒ် ၁ ခု|$4 ရလဒ်များ}}၏ အများဆုံးပမာဏကို cache တွင် ရရှိနိုင်သည်။",
+       "querypage-no-updates": "ဤစာမျက်နှာ၏မွမ်းမံမှုများမှာ လက်ရှိတွင်ပိတ်ထားပါသည်။ ဤနေရာရှိဒေတာများသည် ဆန်းသစ်လိမ့်မည်မဟုတ်ပါ။",
        "viewsource": "ရင်းမြစ်ကို ကြည့်ရန်",
        "viewsource-title": "$1၏ ရင်းမြစ်ကို ကြည့်ရန်",
        "protectedpagetext": "ဤစာမျက်နှာအား တည်းဖြတ်ခြင်းနှင့် အခြားလုပ်ဆောင်မှုများ မလုပ်ဆောင်နိုင်အောင် ကာကွယ်ထားသည်။",
        "resetpass-temp-password": "ယာယီစကားဝှက်:",
        "resetpass-expired": "သင်၏ စကားဝှက် သက်တမ်းကုန်သွားပါသည်။ လော့အင်ဝင်ရန် စကားဝှက်အသစ် သတ်မှတ်ပါ။",
        "passwordreset": "စကားဝှက်အသစ် ပြုလုပ်ရန်",
+       "passwordreset-text-one": "အီးမေးလ်မှတဆင့် ယာယီစကားဝှက် လက်ခံရရှိရန် ဤဖောင်ပုံစံအား ကျေးဇူးပြု၍ ဖြည့်သွင်းပါ။",
+       "passwordreset-text-many": "{{PLURAL:$1|အီးမေးလ်မှတဆင့် ယာယီစကားဝှက် လက်ခံရရှိရန် အောက်ပါကွင်းတစ်ခုခုတွင် ကျေးဇူးပြု၍ ဖြည့်သွင်းပါ။}}",
        "passwordreset-disabled": "စကားဝှက်ပြန်ချိန်ခြင်းကို ဤဝီကီတွင် ပိတ်ထားပါသည်။",
        "passwordreset-emaildisabled": "အီးမေးလ် ကြန်အင်လက္ခဏာများကို ဤဝီကီတွင် ပိတ်ထားခဲ့သည်။",
        "passwordreset-username": "အသုံးပြုသူအမည်:",
        "passwordreset-emailelement": "အသုံးပြုသူအမည်:\n$1\n\nယာယီ စကားဝှက်:\n$2",
        "passwordreset-invalidemail": "တရားမဝင်သော အီးမေးလ်လိပ်စာ",
        "changeemail": "အီးမေးလိပ်စာ ပြင်ဆင် သို့ ဖယ်ရှားရန်",
+       "changeemail-header": "သင်၏အီးမေးလ်လိပ်စာကို ပြောင်းလဲရန် ဤဖောင်အား ပြည့်စုံအောင်ဖြည့်ပါ။ သင်၏အကောင့်မှ ဆက်နွယ်သော မည်သည့်အီးမေးလ်ကိုမဆို ဖယ်ရှားလိုပါက ဖောင်ဖြည့်သွင်းစဉ် အီးမေးလ်လိပ်စာအသစ်နေရာတွင် ဗလာချန်ထားပါ။",
        "changeemail-no-info": "ဤစာမျက်နှာကို တိုက်ရိုက်အသုံးပြုနိုင်ရန်အတွက် Log in ဝင်ထားရပါမည်။",
        "changeemail-oldemail": "လက်ရှိ အီးမေးလ်လိပ်စာ:",
        "changeemail-newemail": "အီးမေးလ်လိပ်စာအသစ်:",
+       "changeemail-newemail-help": "သင်၏အီးမေးလ်လိပ်စာကို ဖယ်ရှားလိုပါက ဤကွင်းကို ဗလာချန်ထားသင့်သည်။ အကယ်၍ အီးမေးလ်လိပ်စာကို ဖယ်ရှားလိုက်ပါက သင်၏မေ့ပျောက်သွားသောအီးမေးလ်ကို ပြန်လည်ချိန်ညှိရန် ရနိုင်တော့မည်မဟုတ်ဘဲ ဤဝီကီမှ အီးမေးလ်များကိုလည်း လက်ခံရရှိတော့မည်မဟုတ်ပါ။",
        "changeemail-none": "(ဗလာ)",
        "changeemail-password": "သင်၏ {{SITENAME}} စကားဝှက်:",
        "changeemail-submit": "အီးမေးလ်ပြောင်းလဲရန်",
        "move": "ရွှေ့ရန်",
        "movethispage": "ဤစာမျက်နှာကို ရွှေ့ပြောင်းရန်",
        "unusedimagestext": "အောက်ပါဖိုင်များသည် မည်သည့်စာမျက်နှာတွင်မှ သုံးစွဲထားခြင်း မရှိပါ။\nအခြားသော ဝက်ဘ်ဆိုဒ်များမှနေ၍ ဖိုင်တစ်ခုခုသို့ တိုက်ရိုက် URL ဖြင့် တိုက်ရိုက်ချိတ်ဆက်ထားခြင်း ရှိနေနိုင်ပြီး သုံးစွဲနေခြင်းမရှိသော်လည်း ဤနေရာတွင် ဖော်ပြထားနိုင်ကြောင်း ကျေးဇူးပြု၍ မှတ်သားပါ။",
+       "notargettitle": "ဦးတည်ချက် မရှိပါ",
+       "notargettext": "ဤလုပ်ဆောင်ချက်ကို ဆောင်ရွက်ရန် သင်သည် ဦးတည်စာမျက်နှာ (သို့) အသုံးပြုသူကို သတ်မှတ်မထားပါ။",
+       "nopagetitle": "ယင်းကဲသို့ ဦးတည်စာမျက်နှာ မရှိပါ",
+       "nopagetext": "သင် သတ်မှတ်လိုက်သော ဦးတည်စာမျက်နှာ မရှိပါ။",
        "pager-newer-n": "{{PLURAL:$1|ပိုသစ်သော တစ်ခု|ပိုသစ်သော $1 ခု}}",
        "pager-older-n": "{{PLURAL:$1|ပိုဟောင်းသော တစ်ခု|ပိုဟောင်းသော $1 ခု}}",
        "apihelp-no-such-module": "မော်ဂျူး \"$1\" မတွေ့ရှိပါ။",
        "allinnamespace": "စာမျက်နှာအားလုံး (အမည်ညွှန်း $1)",
        "allpagessubmit": "သွားပါ",
        "allpages-hide-redirects": "ပြန်ညွှန်းများအား ဝှက်ရန်",
+       "cachedspecial-viewing-cached-ttl": "သင်သည် $1 အချိန်ကြာသွားနိုင်သော ဤစာမျက်နှာ၏ cached ဗားရှင်းကို ကြည့်ရှုနေခြင်း ဖြစ်ပါသည်။",
+       "cachedspecial-viewing-cached-ts": "သင်သည် ဤစာမျက်နှာ၏ အမှန်တကယ်မဟုတ်နိုင်သော cached ဗားရှင်းကို ကြည့်ရှုနေခြင်းဖြစ်သည်။",
        "categories": "ကဏ္ဍများ",
        "categories-submit": "ပြသရန်",
+       "categoriespagetext": "အောက်ပါ {{PLURAL:$1|ကဏ္ဍ|ကဏ္ဍများ}}သည် ဤဝီကီတွင် အသုံးပြု သို့မဟုတ် အသုံးမပြုထားခြင်း ဖြစ်နိုင်သည်။ [[Special:WantedCategories|အလိုရှိသော ကဏ္ဍများ]]ကိုလည်း ကြည့်ပါ။",
        "categoriesfrom": "ဤမှစသော အမျိုးအစားများကို ပြရန် -",
        "deletedcontributions": "ဖျက်လိုက်သော ပံ့ပိုးမှုများ",
        "deletedcontributions-title": "ဖျက်လိုက်သော ပံ့ပိုးမှုများ",
        "contribsub2": "{{GENDER:$3|$1}}အတွက် ($2)",
        "contributions-userdoesnotexist": "အသုံးပြုသူအကောင့် \"$1\" သည် မှတ်ပုံမတင်ထားပါ။",
        "nocontribs": "ဤသတ်မှတ်ချက်များနှင့် ကိုက်ညီသည့် ပြောင်းလဲမှုများ မရှိပါ။",
-       "uctop": "(လက်ရှိ)",
+       "uctop": "လက်ရှိ",
        "month": "အဆိုပါ လမှစ၍ ( အဆိုပါလထက်လည်း စောသော) :",
        "year": "အဆိုပါ နှစ်မှစ၍ (အဆိုပါနှစ်ထက်လည်း စောသော):",
        "date": "အဆိုပါရက်စွဲမှစ၍ (ယင်းထက်လည်း စောသော):",
        "movepagetext-noredirectfixer": "အောက်ပါပုံစံကို အသုံးပြုခြင်းသည် စာမျက်နှာကို အမည်ပြောင်းလဲပေးမည် ဖြစ်ပြီး အမည်သစ်သို့ ယင်း၏ မှတ်တမ်းနှင့်တကွ ရွှေ့ပေးမည် ဖြစ်သည်။\n[[Special:DoubleRedirects|နှစ်ဆင့်ပြန်ညွှန်းများ]] သို့မဟုတ် [[Special:BrokenRedirects|ပြန်ညွှန်း အပျက်များ]] ကို စစ်ဆေးရန် မမေ့ပါနှင့်။\nလင့်ခ်များ ညွှန်းလိုသည့် နေရာသို့ ညွှန်ပြနေရန် သင့်တွင် တာဝန် ရှိသည်။\n\nအကယ်၍ ခေါင်းစဉ်အသစ်တွင် စာမျက်နှာတစ်ခု ရှိနေနှင့်ပြီး ပြန်ညွှန်းတစ်ခု မရှိပါက သို့မဟုတ် ယခင်က ပြုပြင်ထားသော မှတ်တမ်း ရှိနေပါက စာမျက်နှာသည် <strong>ရွေ့မည်မဟုတ်</strong> သည်ကို သတိပြုပါ။ \nဆိုလိုသည်မှာ သင်သည် အမှားတစ်ခု ပြုလုပ်မိပါက စာမျက်နှာကို ယခင်အမည်ကို ပြန်လည် ပြောင်းလဲပေးနိုင်သည်။ ရှိပြီသားစာမျက်နှာတစ်ခုကို စာမျက်နှာ အသစ်နှင့် ပြန်အုပ် overwrite ခြင်း မပြုနိုင်။\n\n<strong>မှတ်ချက်။</strong>\nဤသည်မှာ လူဖတ်များသော စာမျက်နှာတစ်ခုဖြစ်ပါက မမျှော်လင့်ထားသော၊ ကြီးမားသော အပြောင်းအလဲတစ်ခု ဖြစ်ပေါ်လာနိုင်သည်။\nထို့ကြောင့် ဆက်လက် မဆောင်ရွက်မီ သင်သည် နောက်ဆက်တွဲ အကျိုးဆက်များကို နားလည်ကြောင်း ကျေးဇူးပြု၍ သေချာပါစေ။",
        "movepagetalktext": "ဤအကွက်ကို အမှန်ခြစ်လိုက်ခြင်းဖြင့် ဗလာမဟုတ်သော ဆွေးနွေးချက်စာမျက်နှာသည် ရှိနှင့်ပြီး မဟုတ်လျှင် ဆက်နွယ်နေသော ဆွေးနွေးချက် စာမျက်နှာကို ခေါင်းစဉ်အသစ်သို့  အလိုအလျောက် ရွှေ့ပစ်မည် ဖြစ်သည်။\n\nဤကိစ္စရပ်တွင် သင် ဆန္ဒရှိလျှင် စာမျက်နှာကို မိမိကိုယ်တိုင် သွားရောက်ရွှေ့ပြောင်း ပေါင်းစပ်နိုင်သည်။",
        "moveuserpage-warning": "<strong>သတိပေးချက်။</strong> သင်သည် အသုံးပြုသူ စာမျက်နှာအား ရွှေ့ပြောင်းတော့မည် ဖြစ်သည်။ စာမျက်နှာကိုသာ ရွှေ့ပြောင်းခြင်း ဖြစ်ပြီး အသုံးပြုသူ အမည် ပြောင်းလဲသွားလိမ့်မည် <em>မဟုတ်</em>ကြောင်း သတိပြုပါ။",
+       "movecategorypage-warning": "<strong>သတိပေးချက်:</strong> သင်သည် ကဏ္ဍစာမျက်နှာတစ်ခုကို ရွေ့ပြောင်းတော့မည်ဖြစ်သည်။ သိရှိထားရန်မှာ စာမျက်နှာသာလျင် ရွေ့ပြောင်းမည်ဖြစ်ပြီး ကဏ္ဍဟောင်းရှိ မည်သည့်စာမျက်နှာများမဆို ကဏ္ဍသစ်သို့ ရွေ့ပြောင်းမည်မဟုတ်ပါ။",
        "movenologintext": "စာမျက်နှာတစ်ခုကို ရွေ့ပြောင်းရန် သင့်အနေဖြင့် မှတ်ပုံတင်ထားသော အသုံးပြုသူနှင့် [[Special:UserLogin|အကောင့်ထဲဝင်]]ထားရပါမည်။",
        "movenotallowed": "သင့်တွင် စာမျက်နှာများကို ရွေ့ပြောင်းရန် ခွင့်ပြုချက်မရှိပါ။",
        "movenotallowedfile": "သင့်တွင် ဖိုင်များကို ရွေ့ပြောင်းရန် ခွင့်ပြုချက်မရှိပါ။",
        "movenosubpage": "ဤစာမျက်နှာတွင် စာမျက်နှာခွဲများ မရှိပါ။",
        "movereason": "အ​ကြောင်း​ပြ​ချက် -",
        "revertmove": "ပြောင်းရန်",
+       "delete_and_move_text": "ဦးတည်ရာစာမျက်နှာ \"[[:$1]]\" ရှိနှင့်ပြီးသားဖြစ်သည်။\nရွေ့ပြောင်းရန်အတွက် ယင်းအား ဖျက်ပစ်လိုပါသလား။",
        "delete_and_move_confirm": "ဟုတ်ပါသည်။ စာမျက်နှာကို ဖျက်ပါ။",
        "delete_and_move_reason": "\"[[$1]]\" ရွှေ့ပြောင်းရန်အတွက် ဖျက်ပစ်ခြင်း",
+       "selfmove": "ခေါင်းစဉ်မှာ အတူတူပင်ဖြစ်သည်၊\nနဂိုစာမျက်နှာကိုယ်တိုင်အား မရွေ့ပြောင်းနိုင်ပါ။",
        "immobile-source-page": "ဤစာမျက်နှာကို ရွှေ့မရပါ။",
        "move-leave-redirect": "ပြန်ညွှန်းတစ်ခု ချန်ထားရန်",
        "protectedpagemovewarning": "<strong>သတိပေးချက်။</strong> ဤစာမျက်နှာအား စီမံခန့်ခွဲသူအဆင့်ရှိသူများသာ ရွှေ့ပြောင်းနိုင်ရန် ကာကွယ်ထားသည်။\nနောက်ဆုံးမှတ်တမ်းအား ကိုးကားနိုင်ရန် အောက်တွင် ဖော်ပြထားသည်။",
        "pageinfo-category-subcats": "ကဏ္ဍခွဲများ အရေအတွက်",
        "pageinfo-category-files": "ဖိုင်များ အရေအတွက်",
        "pageinfo-user-id": "အသုံးပြုသူ အိုင်ဒီ",
+       "pageinfo-view-protect-log": "ဤစာမျက်နှာ၏ ကာကွယ်မှုမှတ်တမ်းကို ကြည့်ရန်။",
        "markaspatrolleddiff": "စောင့်ကြပ်စစ်ဆေးပြီးကြောင်း မှတ်သားရန်",
        "markaspatrolledtext": "ဤစာမျက်နှာအား စောင့်ကြပ်စစ်ဆေးပြီးကြောင်း မှတ်သားရန်",
        "markaspatrolledtext-file": "ဤဖိုင်ဗားရှင်းအား စောင့်ကြပ်စစ်ဆေးပြီးကြောင်း မှတ်သားရန်",
        "tags": "အသုံးပြုနေသော အပြောင်းအလဲစာတွဲများ",
        "tag-filter": "[[Special:Tags|Tag]] သီးသန့်စစ်ထုတ်ရန် -",
        "tag-filter-submit": "စိစစ်မှု",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|စာတွဲ|စာတွဲများ}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|စာတွဲ|စာတွဲများ}}]]: $2",
        "tag-mw-contentmodelchange": "မာတိကာမော်ဒယ် ပြောင်းလဲမှု",
        "tag-mw-new-redirect": "ပြန်ညွှန်းအသစ်",
        "tag-mw-removed-redirect": "ပြန်ညွှန်းကို ဖယ်ရှားခဲ့သည်",
index 0b6e56e..2fdd407 100644 (file)
        "contributions-title": "Теицянть путовксонзо $1 таркантень",
        "mycontris": "Монь путовкстнэ",
        "contribsub2": "{{GENDER:$3|$1}}-нь кладозо ($2)",
-       "uctop": "(течеме чинь)",
+       "uctop": "течеме чинь",
        "month": "Ковстонть (ды седе икеле):",
        "year": "Иестэнть (ды седе икеле):",
        "sp-contributions-newbies": "Невтемс ансяк од теицятнень путовксост",
index 2b07eb0..a94ce57 100644 (file)
        "mycontris": "مه کایری‌ئون",
        "anoncontribs": "کومِک هاکردن",
        "contribsub2": "$1 ($2) وه‌سه",
-       "uctop": "(سر)",
+       "uctop": "سر",
        "month": "این ماه (و پیش از اون) دله:",
        "year": "این سال (و پیش از اون) دله:",
        "sp-contributions-newbies": "نـه وا بـأیـه ئـه‌کـانـت‌ئون دأچـیـه‌ن‌ئون ره نـه‌شـون هـاده",
        "specialpages": "شا صفحه‌ئون",
        "specialpages-group-maintenance": "چله‌بندی صفحه‌ئون",
        "tag-filter": "[[Special:Tags|برچسبون]] ِفیلتر:",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|برچسب|برچسبون}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|برچسب|برچسبون}}]]: $2",
        "logentry-delete-delete": "$1 صفحهٔ $3 ره {{GENDER:$2|حذف هاکرده}}",
        "logentry-move-move": "کارور $1، $3 ِصفحه ره {{GENDER:$2|دَکشی‌یه}} $4 دله",
        "logentry-move-move_redir-noredirect": "$1 ، $3 ره بدون اینکه مسیر تغییری درس بوه به $4 که مسیر تغییر بیه منتقل هاکرده",
index 127f1a6..377357f 100644 (file)
        "contributions-title": "Tequitiuhqui $1 itlahcuilol",
        "mycontris": "Notlahcuilol",
        "contribsub2": "Ihuicpa {{GENDER:$3|$1}} ($2)",
-       "uctop": "(axcan tlapatlaliztli)",
+       "uctop": "axcan tlapatlaliztli",
        "month": "Metzpan (auh yeppa):",
        "year": "Xiuhpan (auh yeppa):",
        "sp-contributions-newbies": "Tiquimittaz zan yancuic tequitiuhqui intlapatlaliz",
index d80dcdf..e1c7db0 100644 (file)
        "mycontris": "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 ê)",
+       "uctop": "siōng téng ê",
        "month": "Kàu tó 1 kó͘ goe̍h ûi-chí:",
        "year": "Kàu tó 1 nî ûi-chí:",
        "sp-contributions-newbies": "Kan-taⁿ hián-sī sin kháu-chō ê kòng-kiàn",
        "blockip": "Hong-só iōng-chiá",
        "ipaddressorusername": "IP Chū-chí a̍h iōng-chiá miâ:",
        "ipbreason": "Lí-iû:",
+       "ipbreason-dropdown": "*Phó͘-thong ê hong-só lí-iû:\n** Siá ji̍p bô chiâⁿ-si̍t ê chu-sìn\n** Kā ia̍h-bīn lōe-iông hú tiāu\n** Hiòng gōa-kháu chām ê spam liân-kiat\n** Siá bô-iáⁿ/bōe-bêng ê ōe ji̍p ia̍h-bīn\n** Háⁿ--lâng ê hêng-ûi/so-jiáu\n** Lām-iōng chē--ê kháu-chō\n** Bē-thong-kòe ê iōng-chiá hō-miâ",
        "ipbsubmit": "Hong-só chit ūi iōng-chiá",
        "badipaddress": "Bô-hāu ê IP chū-chí",
        "blockipsuccesssub": "Hong-só sêng-kong",
        "ipblocklist": "Siū hong-só ê IP chū-chí kap iōng-chiá miâ-chheng",
        "infiniteblock": "éng-oán",
        "expiringblock": "$1 $2 kàu kî.",
-       "anononlyblock": "Chí bô miâ iōng-chiá",
+       "anononlyblock": "Kaⁿ-taⁿ bô-miâ iōng-chiá",
        "createaccountblock": "kìm-chí khui kháu-chō",
        "blocklist-nousertalk": "bô-hoat-tō͘ siu-kái kā-kī ê thó-lūn-ia̍h",
        "blocklink": "hong-só",
        "autoblocker": "Chū-tōng kìm-chí lí sú-iōng, in-ūi lí kap \"$1\" kong-ke kāng 1 ê IP chū-chí (kìm-chí lí-iû \"$2\").",
        "blocklogentry": "hong-só [[$1]], siat kî-hān chì $2 $3",
        "blocklogtext": "Chit-ê log lia̍t-chhut block/unblock ê tōng-chok. Chū-tōng block ê IP chū-chí bô lia̍t--chhut-lâi ([[Special:BlockList]] ū hiān-chú-sî ū-hāu ê block/ban o·-miâ-toaⁿ).",
+       "block-log-flags-anononly": "Kaⁿ-taⁿ bô-miâ iōng-chiá",
        "block-log-flags-nocreate": "Khui kháu-chō thêng-iōng ah",
        "locknoconfirm": "Lí bô kau \"khak-tēng\" ê keh-á.",
        "move-page": "徙$1",
        "watchlistedit-normal-done": "Í-keng uì lí ê kám-sī-toaⁿ soá {{PLURAL:$1|ia̍h}} cháu:",
        "watchlisttools-edit": "Khoàⁿ koh kái kàm-sī-toaⁿ",
        "watchlisttools-raw": "Kái chhiⁿ ê kàm-sī-toaⁿ",
+       "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|thó-lūn]])",
        "duplicate-defaultsort": "'''Thê-chhíⁿ lí:'''Siat-piān ê pâi-lia̍t hong-sek \"$2\" thè-oāⁿ chìn-chêng ê siat-piān ê pâi-lia̍t hong-sek \"$1\".",
        "version": "Pán-pún",
        "specialpages": "Te̍k-sû-ia̍h",
        "tag-filter": "[[Special:Tags|Piau-chhiam]] chhoē mi̍h:",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|piau-chhiam}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|piau-chhiam}}]]: $2",
        "tag-mw-new-redirect": "Sin choán-ia̍h",
        "tag-mw-removed-redirect": "Choán-ia̍h the̍h-tiāu",
        "tag-mw-changed-redirect-target": "Choán-ia̍h bo̍k-phiau kái-piàn",
+       "logentry-delete-delete": "$1 kā ia̍h-bīn $3 {{GENDER:$2|thâi tiāu}}",
        "logentry-delete-delete_redir": "$1 ēng têng-siá lâi kā choán-ia̍h $3 {{GENDER:$2|thâi-tiāu}}",
        "logentry-move-move": "$1 {{GENDER:$2|sóa}} $3 chit ia̍h khì $4",
        "logentry-move-move_redir": "$1 iōng choán-ia̍h {{GENDER:$2|sóa}} ia̍h-bīn $3 kòe $4",
index c93c6a3..3c05a60 100644 (file)
        "badarticleerror": "Chest'azione nun se può fà int'a sta paggena.",
        "cannotdelete": "Nun è pussibbele scassà 'a paggena o 'a fiura $1 addamannata. Putria éssere stato già scancellato.",
        "cannotdelete-title": "Nun se può scancellà 'a paggena \"$1\"",
+       "delete-scheduled": "'A paggena \"$1\" aspetta 'e essere scancellata. Puorta pazienza.",
        "delete-hook-aborted": "'O scancellamiento è stato annullato 'a 'o «hook».\nNun dette spiegazione nisciuna.",
        "no-null-revision": "Nun se può crià na nnova revisione nulla p' 'a paggena \"$1\"",
        "badtitle": "'O nnomme nun è jùsto",
        "botpasswords-invalid-name": "'O nomme utente nnecato nun cuntenesse nu spartetóre 'e bot password (\"$1\").",
        "botpasswords-not-exist": "L'utente \"$1\" nun téne na password bot chiammata \"$2\".",
        "botpasswords-needs-reset": "'A password pe' 'o bot \"$1\" 'e ll'{{GENDER:$2|utente}} \"$2\" adda esse cangiata.",
+       "botpasswords-locked": "Nun può entrà cu na password 'e bot pecché 'o cunto tujo è fremmato.",
        "resetpass_forbidden": "'E password nun se ponno cagnà",
        "resetpass_forbidden-reason": "'E password nun se ponno cagnà: $1",
        "resetpass-no-info": "Avite 'a trasì ('o login) pe ffà l'acciesso a sta paggena direttamente.",
        "prefs-editor": "Editore",
        "prefs-preview": "Anteprimma",
        "prefs-advancedrc": "Opziune avanzate",
-       "prefs-opt-out": "Stuta miglioramente",
        "prefs-advancedrendering": "Opziune avanzate",
        "prefs-advancedsearchoptions": "Opziune avanzate",
        "prefs-advancedwatchlist": "Opziune avanzate",
        "prefs-displayrc": "Opziune 'e visualizzazione",
        "prefs-displaywatchlist": "Opziune 'e visualizzazione",
+       "prefs-changesrc": "Cagnamienti mustrati",
+       "prefs-changeswatchlist": "Cagnamienti mustrati",
+       "prefs-pageswatchlist": "Paggene cuntrullate",
        "prefs-tokenwatchlist": "Token",
        "prefs-diffs": "Differenze",
        "prefs-help-prefershttps": "Sta preferenza averrà affetto 'a 'o prossimo acciesso vuosto.",
        "rcfilters-filterlist-title": "Filtre",
        "rcfilters-filterlist-whatsthis": "Cumme funzionano?",
        "rcfilters-highlightbutton-title": "Evidenzia risultate",
+       "rcfilters-highlightmenu-title": "Piglia nu culore",
+       "rcfilters-highlightmenu-help": "Piglia nu culore p'evidenzià sta proprietà",
        "rcfilters-filterlist-noresults": "Nisciuno filtro truvato",
+       "rcfilters-noresults-conflict": "Nun s'hanno truvato risultati pecché 'a cerca tene nu cunflitto",
+       "rcfilters-state-message-subset": "Sto filtro nun tene effetti pecché 'e risultati suoi traseno 'int' {{{{PLURAL:$2|'e cerca|cerche}} cchiù gruosse (pruova 'a evidenzià pe verè): $1",
        "rcfilters-filtergroup-authorship": "Autore d' 'o cuntribbuto",
+       "rcfilters-filter-editsbyself-label": "Cagnamiénte d'ê tuoie",
+       "rcfilters-filter-editsbyself-description": "Contribbute d'ê tuoie",
+       "rcfilters-filter-editsbyother-label": "Cagnamiénte 'e ll'ate",
+       "rcfilters-filter-editsbyother-description": "Tutt'ê cagni mancant'ê tuoie",
+       "rcfilters-filtergroup-userExpLevel": "Reggistrazione e sperienza 'e ll'utente",
+       "rcfilters-filter-user-experience-level-registered-label": "Reggistrato:",
+       "rcfilters-filter-user-experience-level-registered-description": "Utenti ca stanno 'a dinto.",
+       "rcfilters-filter-user-experience-level-unregistered-label": "Nun reggistrato.",
+       "rcfilters-filter-user-experience-level-unregistered-description": "Utenti ca nun stanno 'a dinto.",
+       "rcfilters-filter-user-experience-level-newcomer-label": "Utenti novi.",
+       "rcfilters-filter-user-experience-level-newcomer-description": "Utenti reggistrati ca teneneno meno 'e 10 càgni o 4 juorni d'attività.",
+       "rcfilters-filter-user-experience-level-learner-description": "Utenti reggistrati ca stanno nfra ll'utenti novi e ll'utenti sperimentati.",
+       "rcfilters-filter-user-experience-level-experienced-label": "Utenti sperimentati",
+       "rcfilters-filter-user-experience-level-experienced-description": "Utenti reggistrati con chiù 'e 500 cagnamiénti e 30 juorni d'attività.",
+       "rcfilters-filtergroup-automated": "Cagnamiénti automatici.",
+       "rcfilters-filter-bots-label": "Bot",
+       "rcfilters-filter-humans-label": "Uommo (no bot)",
+       "rcfilters-filter-humans-description": "Cagnamiénti fatt'â uommene.",
+       "rcfilters-filtergroup-reviewstatus": "Stato d'â revisione",
+       "rcfilters-filter-minor-label": "Cagnamiénti piccerilli",
+       "rcfilters-filter-minor-description": "Cagnamiénti 'e ll'autore ca sò piccerilli.",
+       "rcfilters-filter-major-label": "Cagnamienti ca nun sò piccerilli",
+       "rcfilters-filter-major-description": "Cagnamiénti ca nun sò piccerilli.",
+       "rcfilters-filtergroup-watchlist": "Paggene cuntrullate",
+       "rcfilters-filter-watchlist-watched-label": "Ncopp''a lista d'ê paggene cuntrullate",
+       "rcfilters-filter-watchlist-watched-description": "Càgne ncopp'ê ppaggene cuntrullate",
+       "rcfilters-filter-watchlist-watchednew-label": "Càgni novi ncopp'ê ppaggene cuntrullate",
+       "rcfilters-filter-watchlist-watchednew-description": "Càgni d'ê ppaggene cuntrullate ca n'hê visto 'a ll'urdimo cagnamiénto.",
+       "rcfilters-filter-watchlist-notwatched-label": "Nun sta ncopp'ê ppaggene cuntrullate",
        "rcfilters-filtergroup-lastRevision": "Ùrdeme verziune",
        "rcfilters-filter-lastrevision-label": "Verzione 'e mmo",
+       "rcfilters-watchlist-markseen-button": "Segna tutt'ê cagni comme visti",
+       "rcfilters-watchlist-edit-watchlist-button": "Càgna 'e lista tuia d'ê paggene cuntrullate",
+       "rcfilters-watchlist-showupdated": "'E càgne 'e ppaggene ca nun hê visto songo signati 'n <strong>niro</strong> e c'ê ppalluccelle chiene.",
+       "rcfilters-target-page-placeholder": "Scrivi 'o nomme 'e na paggene (o na categuria)",
        "rcnotefrom": "Ccà abbascio {{PLURAL:$5|è alencato 'o cagnamiento appurtato|song' alincate 'e cagnamiente appurtate}} 'a <strong>$3, $4</strong> (mmustate nfin'a <strong>$1</strong>).",
        "rclistfrom": "Faje vedé 'e cagnamiénte fatte a partì 'a $3 $2",
        "rcshowhideminor": "$1 'e cagnamiénte piccerille",
        "upload-dialog-disabled": "'A carreca 'e file tramite sta fenesta 'e dialogo è stutata int'a stu wiki.",
        "upload-dialog-title": "Carreca file",
        "upload-dialog-button-cancel": "Scancella",
+       "upload-dialog-button-back": "Areto",
        "upload-dialog-button-done": "Fatto",
        "upload-dialog-button-save": "Sarva",
        "upload-dialog-button-upload": "Carreca",
        "uploadstash-refresh": "Agghiuorna l'elenco d' 'e file",
        "uploadstash-thumbnail": "vide miniatura",
        "uploadstash-exception": "Nun s'è pututo sarvà 'a càrreca dint' 'a stash ($1): \"$2\".",
+       "uploadstash-bad-path-unknown-type": "Tipo \"$1\" scanosciuto",
+       "uploadstash-bad-path-bad-format": "'A chiave \"$1\" nun sta scritta bona.",
+       "uploadstash-file-not-found": "N'aggio truvato 'a chiave \"$1\".",
+       "uploadstash-file-not-found-no-thumb": "Nun pozzo fà 'a fiùrella.",
+       "uploadstash-file-not-found-no-remote-thumb": "N'aggio truvato 'a figurella: $1 URL = $2",
        "invalid-chunk-offset": "Distanza d' 'a parte nun valida",
        "img-auth-accessdenied": "Acciesso negato",
        "img-auth-nopathinfo": "PATH_INFO mancante.\n'O server nun è mpustato pe' passà sta nfurmazione.\nPuò darse ca, essenno basato ncopp'a CGI, nun putesse suppurtà img_auth.\nVide https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization",
        "http-timed-out": "Richieste HTTP fore tiempo.",
        "http-curl-error": "Errore analizzanno l'URL: $1",
        "http-bad-status": "C'è stato nu probblema pe' tramente ca se faceva 'a richiesta HTTP: $1, $2",
+       "http-internal-error": "Errore interno HTTP.",
        "upload-curl-error6": "Nun se riesce 'arrevà a l'URL",
        "upload-curl-error6-text": "A l'URL c'avete scritto nun se può arrevà.\nPe' piacere, cuntrullate ca l'URL è curretta e ca 'o sito è appicciato.",
        "upload-curl-error28": "Fore tiempo p' 'a carreca",
        "listfiles_size": "Dimenzione",
        "listfiles_description": "Descrizzione",
        "listfiles_count": "Verziune",
-       "listfiles-show-all": "Nclude 'e verziune viecchie 'e ll'immaggene",
+       "listfiles-show-all": "Nclude 'e verziune viecchie 'e ffiùre",
        "listfiles-latestversion": "Verzione 'e mo",
        "listfiles-latestversion-yes": "Sì",
        "listfiles-latestversion-no": "No",
        "doubleredirects": "Redirect duppie",
        "doubleredirectstext": "Sta paggena alenca 'e paggene ca se ridirezionano a n'ati paggene.\nOgne riga cuntene nu cullegamente a 'o primmo e a 'o sicondo ridirezionamiento pe' ffà vedé addò arriva 'o sicondo ridirezionamiento, 'o quale è nurmalmente 'a paggena 'e destinaziona \"riale\", addò 'o primmo ridirezionaminento avess'a cullegà.\n'A situazione d' 'e <del>ridireziune scancellate</del> è stat'arricettata.",
        "double-redirect-fixed-move": "[[$1]] è stato spustato.\nÈ stato automaticamente agghiurnato e ora è nu redirect a [[$2]].",
-       "double-redirect-fixed-maintenance": "Curreggenno automaticamente 'o doppio redirect 'a [[$1]] a [[$2]] pe' tramente ca se fà na fatica 'e manutenzione.",
+       "double-redirect-fixed-maintenance": "Curreggenno automaticamente 'o doppio redirect 'a [[$1]] a [[$2]] pe tramente ca se fà na fatica 'e manutenzione.",
        "double-redirect-fixer": "Currettore 'e redirezionamiente",
        "brokenredirects": "Redirezionamiente scassate",
        "brokenredirectstext": "'E redirezionamiente ccà abbascio vanno a paggene ca nun esisteno:",
        "apisandbox-dynamic-error-exists": "Nu parametro denommenato \"$1\" esiste già.",
        "apisandbox-deprecated-parameters": "Parametri obsoleti",
        "apisandbox-fetch-token": "Auto-ghienche 'o token",
+       "apisandbox-add-multi": "Azzecca",
        "apisandbox-submit-invalid-fields-title": "Cocche campo nun è buono",
        "apisandbox-submit-invalid-fields-message": "Pe' piacere curriggite 'e campe nzegnàte e tentate n'ata vota.",
        "apisandbox-results": "Rezurtate",
        "apisandbox-loading-results": "Ricezione d' 'e risultate 'e ll'API 'ncurzo...",
        "apisandbox-results-error": "N'errore cumparette pe' tramente ca se steva carrecanno na risposta 'e query API: $1.",
        "apisandbox-request-url-label": "URL addimannata:",
+       "apisandbox-request-json-label": "Spiata JSON:",
        "apisandbox-request-time": "Tiempo addimannato: {{PLURAL:$1|$1 ms}}",
        "apisandbox-results-fixtoken": "Curregge 'e token e manna n'ata vota",
        "apisandbox-results-fixtoken-fail": "Scassaje a se piglià 'o token \"$1\".",
        "apisandbox-alert-page": "'E campe int'a sta paggene nun so' valide.",
        "apisandbox-alert-field": "'O valore int'a stu campo nun è valido.",
+       "apisandbox-continue": "Annanze",
+       "apisandbox-continue-clear": "Pulezza",
+       "apisandbox-continue-help": "{{int:apisandbox-continue}} [https://www.mediawiki.org/wiki/API:Query#Continuing_queries continuarrà] l'urtima spiata; {{int:apisandbox-continue-clear}} pulezzarrà 'e parametri pe 'i annanzi.",
+       "apisandbox-param-limit": "Scrivi <kbd>max</kbd> p'ausà 'o limmete massimo.",
+       "apisandbox-multivalue-all-namespaces": "$1 (Tutt'ê namespace)",
+       "apisandbox-multivalue-all-values": "$1 (Tutt'ê valuri)",
        "booksources": "Funte libbrarie",
        "booksources-search-legend": "Ascìa 'e fonte ncopp' 'e libbre",
        "booksources-search": "Ascìa",
        "booksources-text": "Ccà abbascio ce sta na lista 'e cullegamiente a l'ati site ca venneno libbre nuove e viecchie, ca putessero pure avé cchiù nfurmaziune ncopp' 'e libbre ca jate ascianno:",
        "booksources-invalid-isbn": "L'ISBN c'avete miso nun pare bbuono; cuntrolla si ce sta cocch'errore quanno stavate cupianno stu nummero d' 'a fonte origginale.",
+       "magiclink-tracking-rfc": "Paggene c'ausano jonte RFC affattorate",
+       "magiclink-tracking-rfc-desc": "Sta paggena ausa jonte RFC affattorate. Vire [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Magic_links mediawiki.org] p' 'a migrazione.",
+       "magiclink-tracking-pmid": "Paggene c'ausano jonte RMID affattorate",
+       "magiclink-tracking-pmid-desc": "Sta paggena ausa jonte PMID affattorate. Vire [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Magic_links mediawiki.org] p' 'a migrazione.",
+       "magiclink-tracking-isbn": "Paggene c'ausano jonte ISBN affattorate",
+       "magiclink-tracking-isbn-desc": "Sta paggena ausa jonte ISBN affattorate. Vire [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Magic_links mediawiki.org] p' 'a migrazione.",
        "specialloguserlabel": "Mplementatore:",
        "speciallogtitlelabel": "Destinazione (titolo o {{ns:user}}:cunto utente pe' ll'utente):",
        "log": "Logs",
        "cachedspecial-refresh-now": "Vide l'urdeme.",
        "categories": "Categurìe",
        "categories-submit": "Faje vedé",
-       "categoriespagetext": "{{PLURAL:$1|'A categurìa 'nnecata 'e seguito cuntiene|'E categurìe 'nnecate 'e seguito cuntengono}} paggene o file multimediale.\n'E [[Special:UnusedCategories|categurìe vuote]] nun song mostrate ccà.\nVere anche 'e [[Special:WantedCategories|categurìe richieste]].",
+       "categoriespagetext": "{{PLURAL:$1|'A categurìa 'nnecata 'e seguito esiste|'E categurìe 'nnecate 'e seguito esistono}} ncopp'a sta wiki, ca s'ausano o no.\nVire purzì 'e [[Special:WantedCategories|categurìe richieste]].",
        "categoriesfrom": "Fà vedè 'e categurìe partenno 'a:",
        "deletedcontributions": "Contribbute utente scancellate",
        "deletedcontributions-title": "Contribbute utente scancellate",
        "activeusers-intro": "Chest'è n'elenco d'utente c'hanno fatto cierti tipe d'attività nfin'a $1 {{PLURAL:$1|juorno|ghiuorne}} fa.",
        "activeusers-count": "$1 {{PLURAL:$1|cagnamiento|cagnamiente}} int'a l'urdeme {{PLURAL:$3|ghiuorne}}",
        "activeusers-from": "Fà vedè l'utente partenno 'a:",
+       "activeusers-groups": "Fa verè l'utenti ca stanno int'ê gruppi:",
+       "activeusers-excludegroups": "Nun fa verè ll'utenti che stanno int'ê gruppi:",
        "activeusers-noresult": "Nisciun'utente truvato.",
        "activeusers-submit": "Mmusta cunte attive",
        "listgrouprights": "Deritte d' 'e gruppe utente",
        "emailccsubject": "Copia d' 'a mmasciata tua 'a $1: $2",
        "emailsent": "Mmasciata e-mail mannata",
        "emailsenttext": "'A mmasciata d' 'a toja s'è mannata.",
-       "emailuserfooter": "Chista mmasciata e-mail è stata {{GENDER:$1|mannata}} 'a $1 a {{GENDER:$2|$2}} p' 'a funziona \"{{int:emailuser}}\" 'e {{SITENAME}}.",
+       "emailuserfooter": "Chista mmasciata e-mail venette {{GENDER:$1|mannata}} 'a $1 a {{GENDER:$2|$2}} p' 'a funziona \"{{int:emailuser}}\" 'e {{SITENAME}}. Si {{GENDER:$2|ttu}} risponni a st'e-mail, l'e-mail {{GENDER:$2|toia}} sarrà mannata a {{GENDER:$1|chi t'ha scritto}}, mustranno 'o 'ndirizzo 'e posta {{GENDER:$2|tuoio}} a {{GENDER:$1|}}.",
        "usermessage-summary": "Lassanno na mmasciata 'e sistema.",
        "usermessage-editor": "Mmasciatore d' 'o sistema",
        "watchlist": "Paggene cuntrullate",
        "enotif_body_intro_moved": "'A paggena $1 'e {{SITENAME}} è stata cagnata 'e posto ncopp'a $PAGEEDITDATE 'a {{gender:$2|$2}}, vedite $3 p' 'a verzione 'e mo.",
        "enotif_body_intro_restored": "'A paggena $1 'e {{SITENAME}} è stata arripigliata ncopp'a $PAGEEDITDATE 'a {{gender:$2|$2}}, vedite $3 p' 'a verzione 'e mo.",
        "enotif_body_intro_changed": "'A paggena $1 'e {{SITENAME}} è stata cagnata ncopp'a $PAGEEDITDATE 'a {{gender:$2|$2}}, vedite $3 p' 'a verzione 'e mo.",
-       "enotif_lastvisited": "Vedite $1 pe' tutt' 'e cagnamiente 'a ll'urdema visita vuosta.",
-       "enotif_lastdiff": "Vedite $1 pe' vedè stu cagnamiento.",
+       "enotif_lastvisited": "Vedite $1 pe' tutt' 'e cagnamiente 'a ll'urdema visita vuosta",
+       "enotif_lastdiff": "Pe vedè stu cagnamiento, vire $1.",
        "enotif_anon_editor": "Utente anonimo $1",
        "enotif_body": "Caro $WATCHINGUSERNAME,\n\n$PAGEINTRO $NEWPAGE\n\nRiepilego 'e cagnamiente: $PAGESUMMARY $PAGEMINOREDIT\n\nCuntattate l'autore:\ne-mail: $PAGEEDITOR_EMAIL\nncopp' 'o sito: $PAGEEDITOR_WIKI\n\nNun se mannarranno ati notifiche si facite cocch'at'attività senza venì a sta paggena.\nPutite pure cagnà 'e mpustaziune 'e notifeca pe' tutt' 'e paggene cuntrullate dint' 'a l'elenco.\n\nStatteve Bbuon, 'o sistema 'e notifiche ncopp' 'a {{SITENAME}} vuosto\n\n--\nPe' cagnà 'e mpustaziune d' 'e notifiche 'e mmasciate elettroniche, jate ccà: {{canonicalurl:{{#special:Preferences}}}}\n\nPe' cagnà 'e mpustaziune 'e l'elenco 'e paggene cuntrullate vuoste jate ccà: {{canonicalurl:{{#special:EditWatchlist}}}}\n\nPe' scancellà l'elenco 'e paggene cuntrullate vedite $UNWATCHURL\n\nSegnalaziune e at'assistenze:\n$HELPPAGE",
+       "enotif_minoredit": "Chisto è nu cagnamiénto piccerillo",
        "changed": "cagnata",
        "deletepage": "Scancella paggena",
        "confirm": "Cunferma",
        "dellogpage": "Scancellazione",
        "dellogpagetext": "Ccà abbascio sta na lista ch' 'e cchiù recente scancellamiente.",
        "deletionlog": "Log d\"e scancellazione",
+       "log-name-create": "Riggistro 'e ll'utenti novi",
+       "log-description-create": "Ccà abbascio sta na lista ch' 'e cchiù recente paggene criate.",
+       "logentry-create-create": "$1 facette 'a paggena $3",
        "reverted": "Turnà a 'a verziona cchiù recente",
        "deletecomment": "Raggióne",
        "deleteotherreason": "Ati/cchiù ragiune:",
        "delete-warning-toobig": "Sta paggena tene na cronologgia troppo longa, ncopp'a $1 {{PLURAL:$1|verzione|verziune}}.\nScancellannole se putesse crià troppo burdello ncopp' 'e operaziune 'e database dint'a {{SITENAME}};\niate cuoncio cuoncio.",
        "deleteprotected": "Nun putite scancellà sta paggena pecché è stata prutetta.",
        "deleting-backlinks-warning": "<strong>Attenzione:</strong>\n[[Special:WhatLinksHere/{{FULLPAGENAME}}|ati paggene]] cunteneno cullegamiente o paggene appennute â n'ata paggena ca state pe' scancellà.",
+       "deleting-subpages-warning": "<strong>Accuorto:</strong> 'A paggena ca staie pe scancellà tene  [[Special:PrefixIndex/{{FULLPAGENAME}}/|{{PLURAL:$1|na sottopaggena|$1 sottopaggene|51=cchiù 'e 50 sottopaggene}}]].",
        "rollback": "Ausa na revizione 'e primma",
        "rollbacklink": "sfàjere",
        "rollbacklinkcount": "sfàje {{PLURAL:$1|nu cagnamiento|$1 cagnamiente}}",
        "editcomment": "'O riepilego d' 'o cagnamiento era: <em>$1</em>.",
        "revertpage": "Cangiaje 'e cagnamiénte 'e [[Special:Contributions/$2|$2]] ([[User talk:$2|discussione]]), cu â verzione 'e pprimma 'e  [[User:$1|$1]]",
        "revertpage-nouser": "Annullate 'e cagnamiente 'e n'utente annascunnuto, è stata ripigliata ll'urdema verzione 'e {{GENDER:$1|[[User:$1|$1]]}}",
-       "rollback-success": "Cagnamiente annullate 'a $1;\ns'è turnat arreto a l'urdema verzione 'e $2.",
+       "rollback-success": "Cagnamiente annullate 'a {{GENDER:$3|$1}};\ns'è turnato arreto a l'urdema verzione 'e {{GENDER:$4|$2}}.",
        "rollback-success-notify": "Cagnamiente annullate 'a $1;\ns'è turnat arreto a l'urdema verzione 'e $2. [$3 Fà vedé 'e cagnamiente]",
        "sessionfailure-title": "Sessione fallita",
        "sessionfailure": "Pare ca stanno probbleme cu 'a sessiona toja;\nst'azione è stata fermata pe' precauzione annanz' 'e cavall' 'e troia;\nPe' piacere turnate arreto, carrecate n'ata vota 'a paggena pe pruvate n'ata vota.",
        "modifiedarticleprotection": "'o livello 'e prutezione è stato cagnato pe' \"[[$1]]\"",
        "unprotectedarticle": "sprutetto 'a \"[[$1]]\"",
        "movedarticleprotection": "'mpustaziune 'e protezzione spustate 'a \"[[$2]]\" a \"[[$1]]\"",
+       "protectedarticle-comment": "{{GENDER:$2|Pruteggette}} \"[[$1]]\"",
+       "modifiedarticleprotection-comment": "{{GENDER:$2|Cagnaje 'a prutezione}} pe \"[[$1]]\"",
+       "unprotectedarticle-comment": "{{GENDER:$2|Levaie 'a protezione}} 'a \"[[$1]]\"",
        "protect-title": "Cagna 'o livello 'e prutezione pe' \"[[$1]]\"",
        "protect-title-notallowed": "Fà vedé 'o livello 'e prutezione pe' \"$1\"",
        "prot_1movedto2": "ha spustato [[$1]] a [[$2]]",
        "contribsub2": "Ppe {{GENDER:$3|$1}} ($2)",
        "contributions-userdoesnotexist": "'O cunto utente \"$1\" nun è riggistrato.",
        "nocontribs": "Nisciunu cagnamiento è stato truvato cu sti criterie.",
-       "uctop": "(attuale)",
+       "uctop": "attuale",
        "month": "D' 'o mese (e pure cchiù primma):",
        "year": "'E ll'anno (e primma):",
+       "date": "'A data (e tanno)",
        "sp-contributions-newbies": "Mosta solo 'e contribbute dde nove utente",
        "sp-contributions-newbies-sub": "Pe' l'utente nuove",
        "sp-contributions-newbies-title": "Contribbute 'a l'utente nuove",
        "sp-contributions-blocklog": "blocche",
        "sp-contributions-suppresslog": "contribbute utente scancellate",
-       "sp-contributions-deleted": "contribbute d'utente scancellate",
+       "sp-contributions-deleted": "contribbute 'e l'{{GENDER:$1|utente}} scancellate",
        "sp-contributions-uploads": "carreche",
        "sp-contributions-logs": "riggistre",
        "sp-contributions-talk": "Chiàcchiera",
        "ipb-disableusertalk": "Nun permettere a st'utente edità 'a paggena 'e chiacchiera d' 'a soja pe' tramente ch'e bloccato",
        "ipb-change-block": "Fremma n'ata vota ll'utente cu ste mpustaziune",
        "ipb-confirm": "Cunferma 'o blocco",
+       "ipb-type-label": "Tipo",
+       "ipb-pages-label": "Paggene",
        "badipaddress": "Indirizzo IP nun valido",
        "blockipsuccesssub": "Blocco aseguito",
        "blockipsuccesstext": "[[Special:Contributions/$1|$1]] è stato bloccato.<br />\nVedite [[Special:BlockList|'a lista 'e l'IP bloccate]] pe' fà vedé n'ata vota 'e blocche.",
        "unblocked-id": "'O blocco $1 è stato luvato.",
        "unblocked-ip": "[[Special:Contributions/$1|$1]] è stato sbluccato.",
        "blocklist": "Utente bloccate",
+       "autoblocklist-submit": "Ascìa",
        "ipblocklist": "Utenti bloccate",
        "ipblocklist-legend": "Ascìa n'utente bloccato",
        "blocklist-userblocks": "Annascunne 'e blocche 'e l'utente riggistrate",
        "pageinfo-length": "Llonghezza d' 'a paggena ('n byte)",
        "pageinfo-article-id": "ID d' 'a paggena",
        "pageinfo-language": "Lengua d' 'a paggena 'e cuntenute",
+       "pageinfo-language-change": "cagna",
        "pageinfo-content-model": "Mudello 'e cuntenute d' 'a paggena",
+       "pageinfo-content-model-change": "cagna",
        "pageinfo-robot-policy": "Indicizzate 'a 'e robbot",
        "pageinfo-robot-index": "Permesso",
        "pageinfo-robot-noindex": "Nun permesso",
        "markedaspatrollederrornotify": "Errore pe' tramente ca se nzegnava comme cuntrullata.",
        "patrol-log-page": "Riggistro 'e cuntrolle",
        "patrol-log-header": "Chest'è nu riggistro ch' 'e verziune cuntrullate.",
+       "confirm-markpatrolled-button": "OK",
        "deletedrevision": "Viecchia verziona scancellata $1",
        "filedeleteerror-short": "Errore pe' tramente ca se scancellava nu file: $1",
        "filedeleteerror-long": "N'errore s'è apprisentato pe' tramente ca se scancellava 'o file:\n\n$1",
        "tags": "Tag 'e cagnamiento valide",
        "tag-filter": "Filtra ppe [[Special:Tags|etichetta]]:",
        "tag-filter-submit": "Filtra",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Tag|Tags}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Tag|Tags}}]]: $2",
        "tags-title": "Etichette",
        "tags-intro": "Sta paggena elenca l'etichette ca 'o software putesse ffà suoccie a nu cagnamiento e 'o significato lloro.",
        "tags-tag": "Nomme 'e ll'etichetta",
        "dberr-again": "Aspettate cocche minuto e po' recarrecate.",
        "dberr-info": "(Nun se può trasì 'o database: $1)",
        "dberr-info-hidden": "(Nun se può trasì 'o database)",
-       "dberr-usegoogle": "Pe' tramente putite pruvà 'ascianno ncoppa Google.",
-       "dberr-outofdate": "Vedite ca ll'indice lloro d'ê cuntenute nuoste ponno essere passate.",
-       "dberr-cachederror": "Chest'è na copia \"cache\" d' 'a paggena c'avite asciato, e putesse nun essere agghiurnata.",
        "htmlform-invalid-input": "Ce sta cocche probblema cu l'input c'avite miso.",
        "htmlform-select-badoption": "'O valore c'avite specificato nun è n'opziona bbuona.",
        "htmlform-int-invalid": "'O valore c'avite specificato nun è nu nummero ntero.",
        "htmlform-cloner-create": "Azzecca 'e cchiù",
        "htmlform-cloner-delete": "Lèva",
        "htmlform-cloner-required": "Servesse al minimo nu valore.",
+       "htmlform-date-placeholder": "AAAA-MM-JJ",
+       "htmlform-time-placeholder": "OO:MM:SS",
+       "htmlform-datetime-placeholder": "AAAA-MM-JJ OO:MM:SS",
+       "htmlform-date-invalid": "'O valore c'hê ausato nun s'ha reconosciuto. Pruva 'ausà nu furmato AAAA-MM-JJ.",
        "htmlform-title-badnamespace": "[[:$1]] nun è dint'a lu namespace \"{{ns:$2}}\".",
        "htmlform-title-not-creatable": "\"$1\" nun è nu titolo criabbele 'e paggena",
        "htmlform-title-not-exists": "$1 nun esiste.",
        "htmlform-user-not-valid": "<strong>$1</strong> nun è nu nomme buono.",
        "logentry-delete-delete": "$1 {{GENDER:$2|scancellaje}} 'a paggena $3",
        "logentry-delete-restore": "$1 {{GENDER:$2|arrepigliaje}} 'a paggena $3 ($4)",
+       "restore-count-files": "{{PLURAL:$1|1 fiùra|$1 fiùre}}",
        "logentry-delete-event": "$1 {{GENDER:$2|cagnaie}} 'a vesibbiletà 'e {{PLURAL:$5|n'azione d' 'o riggistro|$5 aziune d' 'o riggistro}} ncopp' 'a 'a $3: $4",
        "logentry-delete-revision": "$1 {{GENDER:$2|cagnaie}} 'a vesibbiletà 'e {{PLURAL:$5|na verziona|$5 verziune}} ncopp'a $3: $4",
-       "logentry-delete-event-legacy": "$1 {{GENDER:$2|cagnaie}} 'a vesibbiletà 'e l'aziune int' 'o riggistro ncopp'a $3: $4",
+       "logentry-delete-event-legacy": "$1 {{GENDER:$2|cagnaie}} 'a vesibbiletà 'e l'aziune int' 'o riggistro ncopp'a $3",
        "logentry-delete-revision-legacy": "$1 {{GENDER:$2|cagnaie}} 'a vesibbiletà d'ê verziune ncopp'a $3",
        "logentry-suppress-delete": "$1 {{GENDER:$2|luvaje pe' sempe}} 'a paggena $3",
        "logentry-suppress-event": "$1 {{GENDER:$2|annascunnuto cagnaie|annascunnuta cagnaie}} 'a vesibbiletà 'e {{PLURAL:$5|n'azione d' 'o riggistro|$5 aziune d' 'o riggistro}} ncopp' 'a 'a $3: $4",
index 70724dc..f67a07c 100644 (file)
        "passwordtooshort": "Passord må ha minst {{PLURAL:$1|ett tegn|$1 tegn}}.",
        "passwordtoolong": "Passord kan ikke overskride {{PLURAL:$1|1 character|$1 characters}}.",
        "passwordtoopopular": "Hyppig brukte passord kan ikke brukes. Vennligst bruk et mer unikt passord.",
+       "passwordinlargeblacklist": "Passordet du skrev inn er på en liste over veldig vanlige passord. Velg et mer unikt passord.",
        "password-name-match": "Passord og brukernavn kan ikke være det samme.",
        "password-login-forbidden": "Bruken av dette brukernavnet og passordet er forbudt.",
        "mailmypassword": "Tilbakestill passord",
        "timezonelegend": "Tidssone:",
        "localtime": "Lokaltid:",
        "timezoneuseserverdefault": "Bruk wikistandard ($1)",
-       "timezoneuseoffset": "Annet (spesifiser forskjell)",
+       "timezoneuseoffset": "Annet (spesifiser forskjellen nedenfor)",
+       "timezone-useoffset-placeholder": "Eksempler: «-07:00» eller «01:00»",
        "servertime": "Serverens tid er nå:",
        "guesstimezone": "Hent tidssone fra nettleseren",
        "timezoneregion-africa": "Afrika",
        "prefs-editor": "Tekstbehandling",
        "prefs-preview": "Forhåndsvisning",
        "prefs-advancedrc": "Avanserte alternativ",
-       "prefs-opt-out": "Velg å ikke få forbedret utgave",
        "prefs-advancedrendering": "Avanserte alternativer",
        "prefs-advancedsearchoptions": "Avanserte alternativer",
        "prefs-advancedwatchlist": "Avanserte alternativer",
        "prefs-displayrc": "Visningsalternativer",
        "prefs-displaywatchlist": "Visningsalternativer",
+       "prefs-changesrc": "Endringer vist",
+       "prefs-changeswatchlist": "Endringer vist",
+       "prefs-pageswatchlist": "Overvåkede sider",
        "prefs-tokenwatchlist": "Merke",
        "prefs-diffs": "Forskjeller",
        "prefs-help-prefershttps": "Denne preferansen vil virke etter neste innlogging.",
        "rcfilters-view-tags-tooltip": "Filtrer resultater med redigeringstagger",
        "rcfilters-view-return-to-default-tooltip": "Tilbake til hovedmenyen for filtre",
        "rcfilters-view-tags-help-icon-tooltip": "Les mer om taggede redigeringer",
-       "rcfilters-liveupdates-button": "Live-oppdateringer",
+       "rcfilters-liveupdates-button": "Oppdateringer i sanntid",
        "rcfilters-liveupdates-button-title-on": "Slå av live-oppdateringer",
        "rcfilters-liveupdates-button-title-off": "Vis nye endringer når de skjer",
        "rcfilters-watchlist-markseen-button": "Merk alle endringer som sett.",
        "rcfilters-watchlist-edit-watchlist-button": "Rediger listen over sider du overvåker",
        "rcfilters-watchlist-showupdated": "Endringer til sider du ikke har besøkt siden endringene ble gjort vises med <strong>fet</strong> skrift.",
-       "rcfilters-preference-label": "Skjul den forbedrede versjonen av siste endringer",
-       "rcfilters-preference-help": "Fjerner grensesnittendringen fra 2017 og alle verktøyene som ble lagt fra og med da.",
-       "rcfilters-watchlist-preference-label": "Skjul den forbedrede versjonen av overvåkningslisten",
-       "rcfilters-watchlist-preference-help": "Ruller tilbake det omarbeidede grensesnittet fra 2017 og alle verktøy som ble lagt til da og etterpå.",
+       "rcfilters-preference-label": "Bruk grensesnitt uten JavaScript",
+       "rcfilters-preference-help": "Laster siste endringer uten filtre eller markeringsfunksjonalitet.",
+       "rcfilters-watchlist-preference-label": "Bruk grensesnitt uten JavaScript",
+       "rcfilters-watchlist-preference-help": "Laster overvåkningslisten uten filtre eller markeringsfunksjonalitet.",
        "rcfilters-filter-showlinkedfrom-label": "Vis endringer på sider som lenkes fra",
        "rcfilters-filter-showlinkedfrom-option-label": "<strong>Sider som lenkes fra</strong> den valgte siden",
        "rcfilters-filter-showlinkedto-label": "Vis endringer på sider som lenker til",
        "contribsub2": "For {{GENDER:$3|$1}} ($2)",
        "contributions-userdoesnotexist": "Brukerkontoen «$1» er ikke registrert.",
        "nocontribs": "Ingen endringer er funnet som passer disse kriteriene.",
-       "uctop": "(siste)",
+       "uctop": "siste",
        "month": "Fra måned (og tidligere):",
        "year": "Fra år (og tidligere):",
        "date": "Fra dato (og tidligere):",
        "move-watch": "Overvåk kilde- og målsiden",
        "movepagebtn": "Flytt side",
        "pagemovedsub": "Flytting gjennomført",
+       "cannotmove": "Siden kunne ikke flyttes, {{PLURAL:$1|fordi}}:",
        "movepage-moved": "'''«$1» ble flyttet til «$2»'''",
        "movepage-moved-redirect": "En omdirigering har blitt opprettet.",
        "movepage-moved-noredirect": "Det ble ikke opprettet en omdirigering.",
        "tags": "Gyldige endringstagger",
        "tag-filter": "Filter for [[Special:Tags|tagger]]:",
        "tag-filter-submit": "Filtrer",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Tagg|Tagger}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Tagg|Tagger}}]]: $2",
        "tag-mw-contentmodelchange": "innholdsmodellendring",
        "tag-mw-contentmodelchange-description": "Redigeringer som [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:ChangeContentModel endrer innholdsmodellen] til en side",
        "tag-mw-new-redirect": "Ny omdirigering",
        "dberr-again": "Prøv å oppdatere siden om noen minutter.",
        "dberr-info": "(Kan ikke kontakte databasetjeneren: $1)",
        "dberr-info-hidden": "(Får ikke kontakt med databasetjeneren)",
-       "dberr-usegoogle": "Du kan prøve å søke via Google imens.",
-       "dberr-outofdate": "Merk at deres indeks over våre sider kan være utdatert.",
-       "dberr-cachederror": "Følgende er en mellomlagret kopi av den etterspurte siden, og kan være foreldet.",
        "htmlform-invalid-input": "Det er problemer med noen av inndatene dine",
        "htmlform-select-badoption": "Verdien du valgte er ikke et gyldig alternativ.",
        "htmlform-int-invalid": "Verdien du valgte er ikke et heltall.",
        "logentry-block-reblock": "$1 {{GENDER:$2|endret}} blokkeringsinnstillingen av {{GENDER:$4|$3}} med en utløpstid på $5 $6",
        "logentry-partialblock-block": "$1 {{GENDER:$2|blokkerte}} {{GENDER:$4|$3}} fra å redigere {{PLURAL:$8|siden|sidene}} $7 med en utløpstid på $5 $6",
        "logentry-partialblock-reblock": "$1 {{GENDER:$2|endret}} blokkeringsinnstillingene for {{GENDER:$4|$3}} og forhindret redigeringen av {{PLURAL:$8|siden|sidene}} $7 med en utløpstid på $5 $6",
-       "logentry-non-editing-block-block": "$1 {{GENDER:$2|blokkerte}} {{GENDER:$4|$3}} fra handlinger som ikke er redigering med en utløpstid på $5 $6",
-       "logentry-non-editing-block-reblock": "$1 {{GENDER:$2|endret}} blokkeringsinnstillingene for {{GENDER:$4|$3}} for handlinger som ikke er redigering med en utløpstid på $5 $6",
+       "logentry-non-editing-block-block": "$1 {{GENDER:$2|blokkerte}} {{GENDER:$4|$3}} fra visse handlinger som ikke er redigering med en utløpstid på $5 $6",
+       "logentry-non-editing-block-reblock": "$1 {{GENDER:$2|endret}} blokkeringsinnstillingene for {{GENDER:$4|$3}} for visse handlinger som ikke er redigering med en utløpstid på $5 $6",
        "logentry-suppress-block": "$1 {{GENDER:$2|blokkerte}} {{GENDER:$4|$3}} med en utløpstid på $5 $6",
        "logentry-suppress-reblock": "$1 {{GENDER:$2|endret}} blokkeringsinnstillingen for {{GENDER:$4|$3}} med en utløpstid på $5 $6",
        "logentry-import-upload": "$1 {{GENDER:$2|importert}} $3 gjennom filopplastning",
        "passwordpolicies-policy-passwordcannotmatchblacklist": "Passordet kan ikke matche spesifikt svartelistede passord",
        "passwordpolicies-policy-maximalpasswordlength": "Passordet kan maksimalt være på $1 {{PLURAL:$1|tegn}}",
        "passwordpolicies-policy-passwordcannotbepopular": "Passordet kan ikke være {{PLURAL:$1|det populære passordet|i lista over $1 populære passord}}",
+       "passwordpolicies-policy-passwordnotinlargeblacklist": "Passord kan ikke være i listen over de vanligste 100&nbsp;000 passordene.",
        "easydeflate-invaliddeflate": "Det gitte innholdet er ikke riktig komprimert",
        "unprotected-js": "Av sikkerhetsårsaker kan ikke JavaScript lastes fra ubeskyttede sider. Bare skap JavaScript i MediaWiki-navnerommet eller som en brukerunderside"
 }
index 8c995cd..a5ab6d2 100644 (file)
        "anoncontribs": "Bydragen",
        "contribsub2": "Veur {{GENDER:$3|$1}} ($2)",
        "nocontribs": "Gien wiezigingen evunnen die an de estelde criteria voldoon.",
-       "uctop": "(leste wieziging)",
+       "uctop": "leste wieziging",
        "month": "Maond:",
        "year": "Jaor:",
        "sp-contributions-newbies": "Allinnig biedragen van anwas bekieken",
        "tags": "Geldige wiezigingsetiketten",
        "tag-filter": "[[Special:Tags|Etiketfilter]]:",
        "tag-filter-submit": "Filtreren",
-       "tag-list-wrapper": "([[Special:Tags|Etiket{{PLURAL:$1||ten}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|Etiket{{PLURAL:$1||ten}}]]: $2",
        "tag-mw-new-redirect": "Nye döärverwysing",
        "tag-mw-removed-redirect": "Döärverwysing vordedån",
        "tag-mw-changed-redirect-target": "Döärverwysingsdool ewysigd",
        "dberr-again": "Wach n paor minuten en probeer t daornao opniej.",
        "dberr-info": "(Kan gien verbiending maken mit de databankeserver: $1)",
        "dberr-info-hidden": "(Kan gien verbiending maken mit de databankserver)",
-       "dberr-usegoogle": "Misschien ku'j ondertussen zeuken via Google.",
-       "dberr-outofdate": "Let op: indexen die zee hebben van onze ziejen bin misschien niet aktueel.",
-       "dberr-cachederror": "Disse zied is n kopie uut t tussengeheugen en is misschien niet aktueel.",
        "htmlform-invalid-input": "Der bin problemen mit n paor in-egeven weerden",
        "htmlform-select-badoption": "De in-egeven weerde is ongeldig.",
        "htmlform-int-invalid": "De in-egeven weerde is gien geheel getal.",
index 703be26..9e73e34 100644 (file)
        "mycontris": "Mien Arbeid",
        "contribsub2": "För $1 ($2)",
        "nocontribs": "Kene Ännern för disse Kriterien funnen.",
-       "uctop": " (aktuell)",
+       "uctop": " aktuell",
        "month": "bet Maand:",
        "year": "Bet Johr:",
        "sp-contributions-newbies": "Wies blot Bidrääg vun ne’e Brukers",
        "dberr-problems": "Deit uns leed. Disse Websteed hett opstunns en beten technische Problemen.",
        "dberr-again": "Tööv en poor Minuten un versöök dat denn noch wedder.",
        "dberr-info": "(Kunn nich mit’n Datenbank-Server verbinnen: $1)",
-       "dberr-usegoogle": "Du kannst dat solang mit Google versöken.",
-       "dberr-outofdate": "Wees gewohr, dat de Söökindex, de se vun uns Inhold hebbt, oold wesen kann.",
-       "dberr-cachederror": "Dit is en Kopie ut’n Cache vun de opropen Sied un is villicht nich de ne’este Version.",
        "htmlform-invalid-input": "Mit welk vun de angeven Weerten gifft dat Problemen",
        "htmlform-select-badoption": "De angeven Weert is nich güllig.",
        "htmlform-int-invalid": "De angeven Tall is keen ganze Tall.",
index 432e707..c356a49 100644 (file)
@@ -30,7 +30,8 @@
                        "Fitoschido",
                        "Nabin Sapkota",
                        "Tulsi Bhagat",
-                       "ديفيد"
+                       "ديفيد",
+                       "Haribanshi"
                ]
        },
        "tog-underline": "रेखाङ्कित लिङ्क:",
        "badarticleerror": "यो कार्य यस पृष्ठमा गर्न मिल्दैन।",
        "cannotdelete": "\"$1\" पृष्ठ वा फ़ाइल मेट्नसकिएन।\nयो अघिबाट नैं मेटिएको हुनुपर्छ।",
        "cannotdelete-title": "पृष्ठ  \"$1\" लाई मेट्न सकिएन",
+       "delete-scheduled": "$1 पृष्ठ मेटाउनको लागि निर्धारित गरिएकाे छ।\nकृपया धैर्य हुनुहोस्।",
        "delete-hook-aborted": "हुकले सम्पादनकार्य बन्द गरिदियो ।\nकुनै कारण दिइएन ।",
        "no-null-revision": "$1 पृष्ठको लागि खालि पुनरावलोकन सिर्जना गर्न सकिएन",
        "badtitle": "गलत शीर्षक",
        "cascadeprotected": "यो पृष्ठ सम्पादन गर्नबाट सुरक्षित गरिएकोछ किनभनें {{PLURAL:$1|पृष्ठ |पृष्ठहरू}}मा सुरक्षित गर्नुका साथै प्रपात (\"cascading\") विकल्प खुल्ला राखिएको छ:\n$2",
        "namespaceprotected": " '''$1'''  नेमस्पेसमा रहेका पृष्ठहरू सम्पादन गर्ने अनुमति यहाँलाई छैन ।",
        "customcssprotected": "तपाईंलाई यो  पृष्ठ सम्पादन गर्ने अनुमति छैन, किनकी यसमा कुनै अर्को प्रयोगकर्ताको व्यक्तिगत अभिरुचीहरू संग्रहित छन् ।",
+       "customjsonprotected": "तपाईँसँग यस जेसन (JSON) फाइललाई सम्पादन गर्ने अनुमति छैन् किनकि यसमा कुनै अरू व्यक्तिका वैयक्तिक मिलानहरू रहेका छन्।",
        "customjsprotected": "तपाईंलाई यो जाभास्कृप्ट पृष्ठ सम्पादन गर्ने अनुमति छैन, किनकी यसमा कुनै अर्को प्रयोगकर्ताको व्यक्तिगत अभिरुचीहरू संग्रहित छन् ।",
+       "sitecssprotected": "तपाईँसँग यो सिएसएस (CSS) पृष्ठ सम्पादन गर्ने अनुमति छैन् किनकि यसले सबै आगन्तुकहरूलाई असर पार्न सक्दछ।",
+       "sitejsonprotected": "तपाईँसँग यो जेसन (JSON) पृष्ठ सम्पादन गर्ने अनुमति छैन् किनकि यसले सबै आगन्तुकहरूलाई असर पार्न सक्दछ।",
        "mycustomcssprotected": "यो CSSपृष्ठ सम्पादन गर्नको लागि लागि तपाईंलाई अनुमति छैन ।",
        "mycustomjsprotected": "यो जावास्क्रिप्ट पृष्ठ सम्पादन गर्नको लागि तपाईंलाई अनुमति छैन ।",
        "myprivateinfoprotected": "तपाईंसँग तपाईंको निजी जानकारीहरू सम्पादन गर्ने अनुमती छैन",
        "ns-specialprotected": "विशेष पृष्ठहरू सम्पादन गर्न सकिदैन।",
        "titleprotected": "[[User:$1|$1]]द्वारा यो शीर्षक निर्माणहुनबाट जोगाइएको छ।\nकारण <em>$2</em> हो ।",
        "filereadonlyerror": "अक्षम गर्न परिमार्जन फाइल \"$1\" फाइल भण्डार \"$2\" मा पढ्न-मात्र मोड । \n\nप्रणाली प्रशासक बन्द गर्ने यो चढाएको यो व्याख्या: \"$3\".",
+       "invalidtitle": "अमान्य शीर्षक",
        "invalidtitle-knownnamespace": "नेमस्पेस \"$2\" तथा अक्षर \"$3\" सहितको अवैश शिर्षक",
        "invalidtitle-unknownnamespace": "अज्ञात नेमस्पेस अंक $1 तथा अक्षर \"$2\" भएको अवैध शिर्षक",
        "exception-nologin": "प्रवेश (लग ईन) नगरिएको",
        "nosuchusershort": " \"$1\" नामको कुनै पनि प्रयोगकर्ता भेटिएन।\n तपाईंको हिज्जे जाँच्नुहोस् ।",
        "nouserspecified": "तपाँईले प्रयोगकर्ताको नाम जनाउनुपर्छ।",
        "login-userblocked": "यस प्रयोगकर्तालाई रोक लगाइएको छ। प्रवेश गर्ने अनुमति छैन।",
-       "wrongpassword": "पासवरà¥\8dड à¤\97लत à¤¹à¤¾à¤²à¤¿à¤¯à¥\8b।\nà¤\95à¥\83पया à¤«à¥\87रि à¤ªà¥\8dरयास à¤\97रà¥\8dनà¥\81हà¥\8bला।",
+       "wrongpassword": "पà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dता à¤¨à¤¾à¤® à¤µà¤¾ à¤ªà¤¾à¤¸à¤µà¤°à¥\8dड à¤\97लत à¤¹à¤¾à¤²à¥\8dनà¥\81भयाà¥\87।\nà¤\95à¥\83पया à¤«à¥\87रि à¤ªà¥\8dरयास à¤\97रà¥\8dनà¥\81हà¥\8bसà¥\8d।",
        "wrongpasswordempty": "हालिएको पासवर्ड खालि थियो।\nकृपया फेरी प्रयास गर्नुहोला।",
        "passwordtooshort": "पासवर्ड कम्तिमा {{PLURAL:$1|१ अक्षर|$1 अक्षरहरू}}को हुनुपर्छ।",
        "passwordtoolong": "पासवर्ड {{PLURAL:$1|१ अक्षर|$1 अक्षरहरू}} भन्दा लामो हुनु हुदैन ।",
        "botpasswords": "बोट पासवर्ड",
        "botpasswords-disabled": "बोट पासवर्डहरू असक्षम गरिएका छन्।",
        "botpasswords-createnew": "नयाँ बोटको लागि पासवर्ड बनाउने",
+       "botpasswords-editexisting": "उपलब्ध बोट पासवर्ड सम्पादन गर्नुहोस्",
+       "botpasswords-label-needsreset": "(पासवर्ड फेर्न आवश्यक छ)",
        "botpasswords-label-appid": "बोट नाम",
        "botpasswords-label-create": "बनाउनुहोस्",
        "botpasswords-label-update": "अद्यतन गर्ने (अपडेट)",
        "botpasswords-insert-failed": "\"$1\" बोट नाम थप्न असफल भयो। के यो पहिले नै थपिएको थियो?",
        "botpasswords-update-failed": "\"$1\" बोट नाम अद्यावधिक गर्न असफल भयो। के यो हटाइयो हो?",
        "botpasswords-created-title": "बोट पासवर्ड सिर्जना गरियो",
+       "botpasswords-updated-title": "बोट पासवर्ड परिवर्तन गरियो",
+       "botpasswords-deleted-title": "बोट पासवर्ड मेटाइयो",
        "resetpass_forbidden": "पासवर्ड परिवर्तन गर्न मिल्दैन",
+       "resetpass_forbidden-reason": "पासवर्डहरू परिवर्तन गर्न सकिदैन: $1",
        "resetpass-no-info": "यो पृष्ठ सिधै हेर्नको लागि तपाईंले प्रवेश गर्नुपर्छ ।",
        "resetpass-submit-loggedin": "प्रवेसशब्द परिवर्तन गर्ने",
        "resetpass-submit-cancel": "रद्द गर्ने",
        "passwordreset-emailelement": "प्रयोगकर्ताको नाम: \n$1\n\nअस्थाई पासवर्ड: \n$2",
        "passwordreset-emailsentemail": "पासवर्ड परिवर्तनको लागि इमेल पठाइएको छ।",
        "passwordreset-invalidemail": "अमान्य इमेल ठेगाना",
-       "changeemail": "à¤\87मà¥\87ल à¤ à¥\87à¤\97ाना à¤ªà¤°à¤¿à¤µà¤°à¥\8dतन à¤\97रà¥\8dनà¥\81हà¥\8bस",
+       "changeemail": "à¤\87मà¥\87ल à¤ à¥\87à¤\97ाना à¤¹à¤\9fाà¤\89नà¥\81हà¥\8bसà¥\8d à¤µà¤¾ à¤ªà¤°à¤¿à¤µà¤°à¥\8dतन à¤\97रà¥\8dनà¥\81हà¥\8bसà¥\8d",
        "changeemail-header": "खाताको इमेल ठेगाना परिवर्तन गर्नुहोस",
        "changeemail-no-info": "यस पृष्ठमा सिधै जानको लागि प्रवेश गर्नु पर्ने हुन्छ ।",
        "changeemail-oldemail": "हालको इमेल-ठेगाना:",
        "savechanges": "परिवर्तन सङ्ग्रह गर्नुहोस्",
        "publishpage": "पृष्ठ प्रकाशित गर्ने",
        "publishchanges": "परिवर्तनहरू प्रकाशित गर्ने",
+       "savearticle-start": "पृष्ठ सङ्ग्रह गर्नुहोस्…",
+       "savechanges-start": "परिवर्तनहरू सङ्ग्रह गर्नुहोस्",
+       "publishpage-start": "पृष्ठ प्रकाशित...",
+       "publishchanges-start": "परिवर्तनहरू प्रकाशित...",
        "preview": "पूर्वावलोकन",
        "showpreview": "पूर्वालोकन देखाउनुहोस्",
        "showdiff": "परिवर्तन देखाउनुहोस्",
        "postedit-confirmation-created": "पृष्ठ सिर्जना गरियो ।",
        "postedit-confirmation-restored": "पृष्ठ पूर्वरूपमा फर्कायो ।",
        "postedit-confirmation-saved": "तपाईंको सम्पादन संग्रह गरिएको छ ।",
+       "postedit-confirmation-published": "तपाईँको सम्पादन प्रकाशित गरियो।",
        "edit-already-exists": "नयाँ पृष्ठ बनाउन सकिएन ।\nयो पहिले देखि नै रहेको छ।",
        "defaultmessagetext": "डिफल्ट सन्देश पाठ",
        "content-failed-to-parse": "$1 को लागि $2 सामग्रीलाई पार्स गर्न विफल, त्रुटि: $3",
        "revdelete-submit": "{{PLURAL:$1|छानिएको संशोधन|छानिएका संशोधनहरु}}मा प्रयोग गर्ने",
        "revdelete-success": "संशोधन दृश्यता अद्यतन भयो।",
        "revdelete-failure": "'''संशोधन दृश्यता अद्यतन गर्न सकिएन:'''\n$1",
-       "logdelete-success": "'''लग दृष्टि सफलतापूर्वक मिलाइयो ।'''",
+       "logdelete-success": "लग दृश्यता सफलतापूर्वक मिलाइयो।",
        "logdelete-failure": "'''लग दृष्टि मिलाउन सकिएन :'''\n$1",
        "revdel-restore": "दृष्टि परिवर्तन गर्ने",
        "pagehist": "पृष्ठको इतिहास",
        "mergehistory-empty": "कुनै पनि पुनरावलोकनहरू जोड्न मिल्दैन ।",
        "mergehistory-done": "$3 {{PLURAL:$3|संस्करण|संस्करणहरू}}  $1बाट सफलतापूर्वक [[:$2]]मा थपियो ।",
        "mergehistory-fail": "इतिहास जोड्न सकिएन कृपया पृष्ठको नाम र समयमान जाँच गर्नुहोस्।",
+       "mergehistory-fail-invalid-source": "स्रोत पृष्ठ अमान्य छ।",
+       "mergehistory-fail-invalid-dest": "लक्ष्य पृष्ठ अमान्य छ।",
        "mergehistory-fail-toobig": "इतिहास समाहित गर्न सम्भव छैन किनभने अवतरण सिमा $1 भन्दा बढी {{PLURAL:$1|अवतरण|अवतरणहरू}} लाई स्थानान्तरित गर्नु पर्छ।",
        "mergehistory-no-source": "स्रोत पृष्ठ $1 अस्तित्वमा छैन ।",
        "mergehistory-no-destination": "गन्तव्य पृष्ठ $1 अस्तित्वमा छैन ।",
        "diff-multi-manyusers": "($2 {{PLURAL:$2|भन्दा अधिक प्रयोगकर्ता|भन्दा अधिक प्रयोगकर्ताहरू}}द्वारा {{PLURAL:$1|एउटा मध्यवर्ती संशोधन|$1 मध्यवर्ती संशोधनहरू}} नदेखाइएको)",
        "difference-missing-revision": "यस अन्तर {{PLURAL:$2|को एक अवतरण|को $2 अवतरण}} ($1)  {{PLURAL:$2|भेटिएन|खोज्न सकिएन}}।\n\nयो सामान्य रूपमा एउटा हताइएको पृष्ठको अवतरणहरूमा अन्तर खोज्दा हुन्छ । अधिक जानकारी [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} हटाइएको लग]मा हेर्न सकिन्छ।",
        "searchresults": "खोज नतिजाहरू",
+       "search-filter-title-prefix-reset": "सबै पृष्ठहरू खोजी गर्नुहोस्",
        "searchresults-title": " \"$1\"को लागि खोज नतिजाहरू",
        "titlematches": "पृष्ठ शिर्षक मिल्छ",
        "textmatches": "पृष्ठ पाठ मिल्छ",
        "search-category": "(श्रेणी $1)",
        "search-file-match": "(भेटिएका फाइल सामाग्री)",
        "search-suggest": "कतै तपाईंको खोजाई : $1 त होइन ?",
-       "search-interwiki-caption": "भà¤\97िनà¥\80 à¤\86यà¥\8bà¤\9cना",
+       "search-interwiki-caption": "भà¥\8dरातà¥\83 à¤ªà¤°à¤¿à¤¯à¥\8bà¤\9cनाहरà¥\82बाà¤\9f à¤ªà¤°à¤¿à¤£à¤¾à¤®à¤¹à¤°à¥\82",
        "search-interwiki-default": "$1देखिका नतिजाहरू:",
        "search-interwiki-more": "(अझै)",
        "search-interwiki-more-results": "धेरै परिणामहरू",
        "prefs-watchlist-edits": "निगरानी सूचीमा देखाउनको लागि उच्चतम परिवर्तन संख्या:",
        "prefs-watchlist-edits-max": "उच्चतम संख्या : १०००",
        "prefs-watchlist-token": "अवलोकन सूची टोकन:",
+       "prefs-watchlist-managetokens": "टोकनहरू व्यवस्थापन",
        "prefs-misc": "साधारण",
        "prefs-resetpass": "प्रवेश शब्द परिवर्तन",
        "prefs-changeemail": "इमेल परिवर्तन गर्ने",
        "userrights-user-editname": "प्रयोगकर्ता नाम दिनुहोस् :",
        "editusergroup": "प्रयोगकर्ता समूह सम्पादन गर्नुहोस्",
        "editinguser": "प्रयोगकर्ता '''[[User:$1|$1]]''' $2 को अधिकार परिवर्तन गर्ने\n{{GENDER:$1|प्रयोगकर्ता}}को प्रयोगकर्ता अधिकार परिवर्तन हुँदैछ <strong>[[User:$1|$1]]</strong> $2",
-       "userrights-editusergroup": "प्रयोगकर्ता समूह सम्पादन गर्नुहोस्",
+       "userrights-editusergroup": "{{GENDER:$1|प्रयोगकर्ता}} समूहहरू सम्पादन गर्नुहोस्",
        "userrights-viewusergroup": "{{GENDER:$1|प्रयोगकर्ता}} समूहहरू हेर्नुहोस्।",
-       "saveusergroups": "प्रयोगकर्ता समूहरू संग्रह गर्नुहोस्",
+       "saveusergroups": "{{GENDER:$1|प्रयोगकर्ता}} समूहहरू सङ्ग्रह गर्नुहोस्",
        "userrights-groupsmember": "को सदस्य:",
        "userrights-groupsmember-auto": "अंतर्निहित सदस्य:",
        "userrights-groups-help": "यो प्रयोगकर्ता भएको समूहलाई अदलबदल गर्न सक्नुहुन्छ:\n* बाकस चेक्ड(checked) हुनु्को अर्थ प्रयोगकर्ता त्यस समूहमा छ।\n* बाकस अनचेक्ड (unchecked) हुनु्को अर्थ प्रयोगकर्ता त्यस समूहमा छैन।\n*  *ले संकेत दिन्छ तपाईं त्यस समूहलाई हटाउन सक्नुहुन्न जब तपाईंले यसलाई जोड़िसक्नु भएकोछ अथवा अदला बदलि गर्नुभएकोछ।",
        "grant-group-file-interaction": "मिडियासँग अन्तरक्रिया गर्नुहोस्",
        "grant-group-watchlist-interaction": "तपाईंको दृष्टिसूचीसँग अन्तरक्रिया गर्नुहोस्",
        "grant-group-email": "इ-मेल पठाउनुहोस्",
+       "grant-createaccount": "खाताहरू खोल्नुहोस्",
        "grant-createeditmovepage": "पृष्ठहरूमा परिवर्तन गर्नुहोस्",
-       "grant-editmycssjs": "तपाईंको प्रयोगकर्ता CSS/JavaScript सम्पादन गर्नुहोस्",
+       "grant-editmycssjs": "तपाईंको प्रयोगकर्ता सीएसएस/जेसन/जावास्क्रिप्ट (CSS/JSON/JavaScript) सम्पादन गर्नुहोस्",
        "grant-editmyoptions": "तपाईंको प्रयोगकर्ता अभिरूचीहरूलाई सम्पादन गर्नुहोस्",
+       "grant-editmywatchlist": "तपाईँको अवलोकनसूची सम्पादन गर्नुहोस्",
        "grant-sendemail": "अन्य प्रयोगकर्ताहरूलाई इमेल पठाउने",
        "grant-viewdeleted": "मेटाइएका फाइल तथा पृष्ठहरू हेर्ने",
        "newuserlogpage": "प्रयोगकर्ता श्रृजना लग",
        "action-read": "यो पृष्ठ पढ्ने",
        "action-edit": "यो पृष्ठ सम्पादन गर्ने",
        "action-createpage": "यो पृष्ठ सृजना गर्ने",
-       "action-createtalk": "à¤\9bलफल à¤ªà¥\83षà¥\8dठ à¤¸à¥\83à¤\9cना à¤\97रà¥\8dनà¥\87",
+       "action-createtalk": "याà¥\87 à¤\9bलफल à¤ªà¥\83षà¥\8dठ à¤¸à¥\83à¤\9cना à¤\97रà¥\8dनà¥\81हà¥\8bसà¥\8d",
        "action-createaccount": "यो प्रयोगकर्ताखाता बनाउने",
        "action-history": "यस पृष्ठको इतिहास हेर्ने",
        "action-minoredit": "यस सम्पादनलाई साधारणको रुपमा चिनो लगाउने",
        "rcfilters-days-show-days": "$1 {{PLURAL:$1|दिन|दिनहरू}}",
        "rcfilters-days-show-hours": "$1 {{PLURAL:$1|घण्टा|घण्टाहरू}}",
        "rcfilters-savedqueries-setdefault": "पूर्वनिर्धारितको रुपमा सेट गर्नुहोस्",
-       "rcfilters-savedqueries-remove": "हà¤\9fाà¤\89नुहोस्",
+       "rcfilters-savedqueries-remove": "मà¥\87à¤\9fà¥\8dनुहोस्",
        "rcfilters-savedqueries-new-name-label": "नाम",
        "rcfilters-savedqueries-cancel-label": "रद्द गर्नुहोस्",
        "rcfilters-show-new-changes": "नवीनतम परिवर्तनहरू हेर्नुहोस्",
        "rcfilters-filterlist-title": "फिल्टरहरू",
+       "rcfilters-highlightmenu-title": "रङ्ग छान्नुहाेस्",
+       "rcfilters-filter-user-experience-level-registered-label": "दर्ता गरिएकाे",
+       "rcfilters-filter-user-experience-level-unregistered-label": "दर्ता नभएकाे",
        "rcfilters-filter-bots-label": "बोट",
        "rcfilters-filter-minor-label": "सामान्य सम्पादनहरू",
        "rcfilters-filter-watchlistactivity-unseen-label": "नहेरिएका परिवर्तनहरू",
        "rcfilters-filter-watchlistactivity-seen-label": "हेरिएका परिवर्तनहरू",
+       "rcfilters-filter-pageedits-label": "पृष्ठ सम्पादनहरू",
        "rcfilters-filter-lastrevision-label": "हालको संस्करण",
        "rcnotefrom": "तल <strong>$2</strong> देखि (<strong>$1</strong> सम्म) {{PLURAL:$5|भएका परिवर्तनहरू देखाइएको छ|भएका परिवर्तनहरू देखाइन्छ}}।",
        "rclistfrom": "$3 $2 देखिका नयाँ परिवर्तनहरू देखाउनु",
        "apisandbox-reset": "हटाउने",
        "apisandbox-retry": "पुनः प्रयास गर्नुहोस्",
        "apisandbox-examples": "उदाहरण",
-       "apisandbox-results": "परिणाम",
+       "apisandbox-results": "नतिà¤\9cाहरà¥\82",
        "apisandbox-request-url-label": "अनुरोध युआरयल:",
-       "apisandbox-request-time": "अनुरोधको समयावधी: $1",
+       "apisandbox-request-time": "अनुरोध समयावधी: {{PLURAL:$1|$1 मिसे}}",
        "apisandbox-continue-clear": "खाली गर्नुहोस्",
        "booksources": "किताबका श्रोतहरु",
        "booksources-search-legend": "किताबका श्रोतहरु खोज्ने",
        "contribsub2": " {{GENDER:$3|$1}} ($2)को लागि",
        "contributions-userdoesnotexist": "प्रयोगकर्ता \"$1\" दर्ता गरिएको छैन् ।",
        "nocontribs": "यस मापदण्ड अनुसार परिवर्त पाइएन।",
-       "uctop": "(वर्तमान)",
+       "uctop": "वर्तमान",
        "month": "महिना देखि (र पहिले):",
        "year": "वर्ष देखि( र पहिले):",
        "sp-contributions-newbies": "नयाँ खाताको योगदानहरू मात्र देखाउने",
        "tags": "मान्य ट्याग परिवर्तनहरू",
        "tag-filter": "[[Special:Tags|पुच्छर]] फिल्टर:",
        "tag-filter-submit": "फिल्टर",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|ट्याग|ट्यागहरू}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|ट्याग|ट्यागहरू}}]]: $2",
        "tag-mw-undo": "अन्डू गर्नुहोस्",
        "tags-title": "ट्यागहरु",
        "tags-intro": "यो पृष्ठले ट्यागहरू सूचीकृत गर्छ जससँग यो सफ्टवेयरले चिनो लगाउन र सम्पादन गर्न सक्छ र तिनका अर्थहरू ।",
        "dberr-again": "केही समय पर्खिएर पुन: लोड हुन दिनुहोस् ।",
        "dberr-info": "(डेटाबेस सर्भर: $1 सँग सम्पर्क स्थापित गर्न सकिएन)",
        "dberr-info-hidden": "(डेटाबेसमा सम्पर्क स्थापना गर्न सकिएन)",
-       "dberr-usegoogle": "तपाईं अहिले गुगलबाट खोज गर्न प्रयास गर्न सक्नुहुन्छ।",
-       "dberr-outofdate": "कृपया स्मरणमा राख्नुहोस् हाम्रा लेखहरूको सूची जुन उनीहरूले राखेका छन् त्यो अद्यावधिक नहुन सक्छ ।",
-       "dberr-cachederror": "यो अनुरोध गरिएको पृष्ठको क्याशमा रहेका प्रतिलिपी हो , र अद्यावधिक नहुन सक्छ ।",
        "htmlform-invalid-input": "तपाईंको कुनै प्रविष्ठिहरू सही छैनन्",
        "htmlform-select-badoption": "तपाईंले खुलाउनु भएको मान मान्य विकल्प हैन ।",
        "htmlform-int-invalid": "तपाईंले खुलाउनु भएको मान कुनै इन्टिजर हैन ।",
index db558b3..126fa4e 100644 (file)
        "version-license-info": "MediaWiki is vrije software; je kunt MediaWiki verspreiden en/of aanpassen onder de voorwaarden van de GNU General Public License zoals gepubliceerd door de Free Software Foundation; ofwel versie 2 van de Licentie, of - zo je wilt - enige latere versie.\n\nMediaWiki wordt verspreid in de hoop dat het nuttig is, maar ZONDER ENIGE GARANTIE; zonder zelfs de implicitiete garantie van VERKOOPBAARHEID of GESCHIKHEID VOOR ENIG DOEL IN HET BIJZONDER. Zie de GNU General Public License voor meer informatie.\n\nSamen met dit programma hoor je een [{{SERVER}}{{SCRIPTPATH}}/COPYING kopie van de GNU General Public License] te hebben ontvangen; zo niet, schrijf dan naar de Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA of [//www.gnu.org/licenses/old-licenses/gpl-2.0.html lees de licentie online].",
        "compare-title-not-exists": "De titel die je hebt opgegeven bestaat niet.",
        "compare-revision-not-exists": "De versie die je hebt opgegeven bestaat niet.",
-       "dberr-usegoogle": "Wellicht kun je in de tussentijd zoeken via Google.",
        "htmlform-float-invalid": "De waarde die je hebt opgegeven is geen getal.",
        "feedback-bugornote": "Als je zover bent om een technisch probleem in detail te beschrijven, [$1 rapporteer dan een bug].\nAnders kan je ook het eenvoudige formulier hieronder gebruiken.\nJe reactie wordt dan toegevoegd aan de pagina \"[$3 $2]\", samen met je gebruikersnaam en de browser die je gebruikt.",
        "feedback-thanks": "Bedankt! Je terugkoppeling is op de pagina \"[$2 $1]\" geplaatst."
index 459c913..f865446 100644 (file)
        "passwordtooshort": "Wachtwoorden moeten uit minstens {{PLURAL:$1|$1 teken|$1 tekens}} bestaan.",
        "passwordtoolong": "Wachtwoorden kunnen niet langer zijn dan {{PLURAL:$1|één teken|$1 tekens}}.",
        "passwordtoopopular": "Veel gekozen wachtwoorden kunnen niet worden gebruikt. Kies een wachtwoord dat lastiger kan worden geraden.",
+       "passwordinlargeblacklist": "Het ingevoerde wachtwoord bevind zich in een lijst met veelvoorkomende wachtwoorden. Kies een wachtwoord dat unieker is.",
        "password-name-match": "Uw wachtwoord en uw gebruikersnaam mogen niet overeenkomen.",
        "password-login-forbidden": "Het gebruik van deze gebruikersnaam met dit wachtwoord is niet toegestaan.",
        "mailmypassword": "Nieuw wachtwoord e-mailen",
        "timezonelegend": "Tijdzone:",
        "localtime": "Plaatselijke tijd:",
        "timezoneuseserverdefault": "Wikistandaard gebruiken ($1)",
-       "timezoneuseoffset": "Anders (tijdverschil opgeven)",
+       "timezoneuseoffset": "Anders (vul tijdverschil hier beneden in)",
+       "timezone-useoffset-placeholder": "Voorbeeldinvoer: \"-07:00\" of \"01:00\"",
        "servertime": "Servertijd:",
        "guesstimezone": "Vanuit de browser toevoegen",
        "timezoneregion-africa": "Afrika",
        "prefs-editor": "Tekstverwerker",
        "prefs-preview": "Voorvertoning",
        "prefs-advancedrc": "Gevorderde instellingen",
-       "prefs-opt-out": "Niet deelnemen aan verbeteringen",
        "prefs-advancedrendering": "Gevorderde instellingen",
        "prefs-advancedsearchoptions": "Gevorderde instellingen",
        "prefs-advancedwatchlist": "Gevorderde instellingen",
        "prefs-displayrc": "Weergaveopties",
        "prefs-displaywatchlist": "Weergaveopties",
+       "prefs-changesrc": "Te tonen wijzigingen",
+       "prefs-changeswatchlist": "Te tonen wijzigingen",
+       "prefs-pageswatchlist": "Te volgen pagina's",
        "prefs-tokenwatchlist": "Token",
        "prefs-diffs": "Verschillen",
        "prefs-help-prefershttps": "Deze voorkeur wordt toegepast bij de volgende keer aanmelden.",
        "rcfilters-savedqueries-apply-label": "Filter aanmaken",
        "rcfilters-savedqueries-apply-and-setdefault-label": "Standaard filter aanmaken",
        "rcfilters-savedqueries-cancel-label": "Annuleren",
-       "rcfilters-savedqueries-add-new-title": "Huidige filter instellingen opslaan",
+       "rcfilters-savedqueries-add-new-title": "Huidige filterinstellingen opslaan",
        "rcfilters-savedqueries-already-saved": "Deze filters zijn al opgeslagen. Wijzig uw instellingen om een nieuw Filter op te slaan.",
        "rcfilters-restore-default-filters": "Standaard filters terugzetten",
        "rcfilters-clear-all-filters": "Alle filters verwijderen",
        "rcfilters-watchlist-markseen-button": "Alle wijzigingen markeren als bezocht",
        "rcfilters-watchlist-edit-watchlist-button": "Bewerk uw volglijst",
        "rcfilters-watchlist-showupdated": "Wijzigingen aan pagina's die u niet hebt bezocht sinds de wijzigingen zijn aangebracht, worden <strong>vet</strong> en met gevulde opsommingstekens weergeven.",
-       "rcfilters-preference-label": "De verbeterde versie van Recente wijzigingen verbergen",
-       "rcfilters-preference-help": "Zet het oude uiterlijk van de recente wijzigingen-pagina terug, inclusief alle hulpmiddelen die sindsdien zijn toegevoegd.",
-       "rcfilters-watchlist-preference-label": "Verberg de verbeterde versie van de volglijst",
+       "rcfilters-preference-label": "Gebruik de niet-JavaScript interface",
+       "rcfilters-preference-help": "Laad Recente Wijzigingen zonder filters of markeerfunctionaliteit.",
+       "rcfilters-watchlist-preference-label": "Gebruik de niet-JavaScript interface",
+       "rcfilters-watchlist-preference-help": "Laad de volglijst zonder filters of markeerfunctionaliteit.",
        "rcfilters-filter-showlinkedfrom-label": "Toon wijzigingen op pagina's gekoppeld aan",
        "rcfilters-filter-showlinkedfrom-option-label": "<strong>Paginas gekoppeld aan</strong> de geselecteerde pagina",
        "rcfilters-filter-showlinkedto-label": "Toon wijzigingen op pagina's gekoppeld naar",
        "contribsub2": "Voor {{GENDER:$3|$1}} ($2)",
        "contributions-userdoesnotexist": "Gebruikersaccount \"$1\" bestaat niet.",
        "nocontribs": "Geen wijzigingen gevonden die aan de gestelde criteria voldoen.",
-       "uctop": "(laatste wijziging)",
+       "uctop": "laatste wijziging",
        "month": "Van maand (en eerder):",
        "year": "Van jaar (en eerder):",
        "date": "Vanaf (en eerder):",
        "move-watch": "Bronpagina en doelpagina volgen",
        "movepagebtn": "Pagina hernoemen",
        "pagemovedsub": "De pagina is hernoemd",
+       "cannotmove": "De pagina kan niet worden hernoemd, vanwege de volgende {{PLURAL:$1|reden|redenen}}:",
        "movepage-moved": "'''\"$1\" is hernoemd naar \"$2\"'''",
        "movepage-moved-redirect": "Er is een doorverwijzing aangemaakt.",
        "movepage-moved-noredirect": "Er is geen doorverwijzing aangemaakt.",
        "tags": "Geldige wijzigingslabels",
        "tag-filter": "[[Special:Tags|Labelfilter]]:",
        "tag-filter-submit": "Filteren",
-       "tag-list-wrapper": "([[Special:Tags|Label{{PLURAL:$1||s}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|Label{{PLURAL:$1||s}}]]: $2",
        "tag-mw-contentmodelchange": "inhoudsmodel wijzigen",
        "tag-mw-contentmodelchange-description": "Bewerkingen die [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:ChangeContentModel het  inhoudsmodel van een pagina wijzigen]",
        "tag-mw-new-redirect": "Nieuwe doorverwijzing",
        "dberr-again": "Wacht een aantal minuten en probeer het daarna opnieuw.",
        "dberr-info": "(Kan geen toegang krijgen tot de database: $1)",
        "dberr-info-hidden": "(Kan geen toegang krijgen tot de database)",
-       "dberr-usegoogle": "Wellicht kunt u in de tussentijd zoeken via Google.",
-       "dberr-outofdate": "Let op: hun indexen van onze pagina's zijn wellicht niet recent.",
-       "dberr-cachederror": "Deze pagina is een kopie uit de cache en is wellicht niet de meest recente versie.",
        "htmlform-invalid-input": "Er zijn problemen met enkele opgegeven waarden",
        "htmlform-select-badoption": "De opgegeven waarde is ongeldig.",
        "htmlform-int-invalid": "De opgegeven waarde is geen geheel getal.",
        "logentry-block-unblock": "$1 {{GENDER:$2|heeft}} {{GENDER:$4|$3}} gedeblokkeerd",
        "logentry-block-reblock": "$1 {{GENDER:$2|heeft}} de blokkade voor {{GENDER:$4|$3}} aangepast. Deze vervalt nu op $5 $6",
        "logentry-partialblock-block": "$1 heeft {{GENDER:$4|$3}} {{GENDER:$2|geblokkeerd}} voor het bewerken van de {{PLURAL:$8|pagina|pagina's}} $7 met als vervaltijd $5 $6",
-       "logentry-partialblock-reblock": "$1 heeft de blokkade van {{GENDER:$4|$3}} voor het voorkomen van bewerkingen van de {{PLURAL:$8|pagina|pagina's}} $7 {{GENDER:$2|gewijzigd}} met als vervaltijd $5 $6",
-       "logentry-non-editing-block-block": "$1 heeft {{GENDER:$4|$3}} {{GENDER:$2|geblokkeerd}} van het uitvoeren van niet-bewerking gerelateerde handelingen met als vervaltijd $5 $6",
-       "logentry-non-editing-block-reblock": "$1 heeft de blokkade van {{GENDER:$4|$3}} voor het voorkomen van het uitvoeren van niet-bewerking gerelateerde handelingen {{GENDER:$2|gewijzigd}} met als vervaltijd $5 $6",
+       "logentry-partialblock-reblock": "$1 heeft de blokkade van {{GENDER:$4|$3}} {{GENDER:$2|gewijzigd}} zodat het bewerken van de {{PLURAL:$8|pagina|pagina's}} $7 wordt tegengehouden met als vervaltijd $5 $6",
+       "logentry-non-editing-block-block": "$1 heeft {{GENDER:$4|$3}} {{GENDER:$2|geblokkeerd}} voor het uitvoeren van handelingen anders dan bewerking met als vervaltijd $5 $6",
+       "logentry-non-editing-block-reblock": "$1 heeft de blokkade van {{GENDER:$4|$3}} voor het uitvoeren van handelingen anders dan bewerking {{GENDER:$2|gewijzigd}} met als vervaltijd $5 $6",
        "logentry-suppress-block": "$1 {{GENDER:$2|heeft}} {{GENDER:$4|$3}} geblokkeerd voor de duur van $5 $6",
        "logentry-suppress-reblock": "$1 {{GENDER:$2|heeft}} de blokkade voor {{GENDER:$4|$3}} aangepast. Deze vervalt nu op $5 $6",
        "logentry-import-upload": "$1 {{GENDER:$2|heeft}} $3 geïmporteerd via een bestandsupload",
        "special-characters-title-endash": "liggend streepje",
        "special-characters-title-emdash": "gedachtenstreepje",
        "special-characters-title-minus": "minteken",
-       "mw-widgets-abandonedit": "Weet u zeker dat u wilt bewerkingsmodus wilt verlaten zonder eerst op te slaan?",
+       "mw-widgets-abandonedit": "Weet u zeker dat u de bewerkingsmodus wilt verlaten zonder eerst op te slaan?",
        "mw-widgets-abandonedit-discard": "Wijzigingen niet opslaan",
        "mw-widgets-abandonedit-keep": "Doorgaan met bewerken",
        "mw-widgets-abandonedit-title": "Weet u het zeker?",
        "passwordpolicies-policy-passwordcannotmatchblacklist": "Wachtwoord mag niet overeenkomen met wachtwoorden op de zwarte lijst",
        "passwordpolicies-policy-maximalpasswordlength": "Wachtwoord moet minder dan $1 {{PLURAL:$1|teken|tekens}} bevatten",
        "passwordpolicies-policy-passwordcannotbepopular": "Watchwoord mag niet {{PLURAL:$1|overeenkomen met het bekende wachtwoord|voorkomen in de lijst met $1 bekende wachtwoorden}}",
+       "passwordpolicies-policy-passwordnotinlargeblacklist": "Wachtwoorden mogen niet voorkomen in de lijst met 100.000 veelvoorkomende wachtwoorden.",
        "unprotected-js": "Vanwege veiligheidsredenen kan er geen JavaScript geladen worden vanaf onbeveiligde pagina's. Gelieve alleen JavaScript pagina's aan te maken in de MediaWiki: naamruimte of als een subpagina van een gebruikerspagina."
 }
index bee4f84..ee10a52 100644 (file)
        "protect_change": "endre",
        "unprotect": "Endra vern",
        "newpage": "Ny side",
-       "talkpagelinktext": "Diskusjon",
+       "talkpagelinktext": "diskusjon",
        "specialpage": "Spesialside",
        "personaltools": "Personlege verktøy",
        "talk": "Diskusjon",
        "summary-preview": "Førehandsvising av endringssamandraget:",
        "subject-preview": "Førehandsvising av emne/overskrift:",
        "blockedtitle": "Brukaren er blokkert",
-       "blockedtext": "'''Brukarnamnet ditt eller IP-adressa di er blokkert'''\n\nBlokkeringa vart gjord av $1.\nDenne grunnen vart gjeven: ''$2''.\n\n* Blokkeringa byrja: $8\n* Blokkeringa endar: $6\n* Blokkeringa var meint for: $7\n\nDu kan kontakte $1 eller ein annan [[{{MediaWiki:Grouppage-sysop}}|administrator]] for å diskutere blokkeringa.\nVer merksam på at du ikkje kan bruke «send e-post til brukar»-funksjonen så lenge du ikkje har ei gyldig e-postadresse registrert i [[Special:Preferences|innstillingane dine]]. Du kan heller ikkje bruke funksjonen dersom du er blokkert frå å sende e-post.\nIP-adressa di er $3, og blokkeringsnummeret er $5.\nTak med alle opplysningane over ved eventuelle førespurnader.",
-       "autoblockedtext": "IP-adressa di er automatisk blokkert fordi ho vart brukt av ein annan brukar som vart blokkert av $1. Grunne til dette vart gjeve som: ''$2''.\n\n* Blokkeringa byrja: $8\n* Blokkeringa går ut: $6\n* Blokkeringa er meint for: $7\n\nDu kan kontakte $1 eller ein annan [[{{MediaWiki:Grouppage-sysop}}|administrator]] for å diskutere blokkeringa. Ver merksam på at du ikkje kan bruke «send e-post til brukar»-funksjonen så lenge du ikkje har ei gyldig e-postadresse registrert i [[Special:Preferences|innstillingane dine]].\n\nIP-adressa di er $3, og blokkeringnummeret ditt er #$5.\nVer venleg og opplyse dette ved eventuelle førespurnader.",
+       "blocked-email-user": "<strong>Brukarnamnet ditt er blokkert frå å senda e-post. Du kan framleis endra andre sider på denne wikien.</strong> Du kan sjå alle detaljane om blokkeringa i [[Special:MyContributions|bidragslista]].\n\nBlokkeringa vart gjord av $1.\n\nDen oppgjevne årsaka er <em>$2</em>.\n\n* Blokkeringa byrja: $8\n* Blokkeringa endar: $6\n* Blokkeringa gjeld brukar: $7\n* Blokkerings-ID #$5",
+       "blockedtext-partial": "<strong>Brukarnamnet ditt er blokkert frå å endra denne sida. Du kan framleis endra andre sider på denne wikien.</strong> Du kan sjå alle detaljane om blokkeringa i [[Special:MyContributions|bidragslista]].\n\nBlokkeringa vart gjord av $1.\n\nDen oppgjevne årsaka er <em>$2</em>.\n\n* Blokkeringa byrja: $8\n* Blokkeringa endar: $6\n* Blokkeringa gjeld brukar: $7\n* Blokkerings-ID #$5",
+       "blockedtext": "<strong>Brukarnamnet ditt eller IP-adressa di er blokkert.</strong>\n\nBlokkeringa vart gjord av $1.\nDen oppgjevne årsaka er <em>$2</em>.\n\n* Blokkeringa byrja: $8\n* Blokkeringa endar: $6\n* Blokkeringa gjeld brukar: $7\n\nDu kan kontakte $1 eller ein annan [[{{MediaWiki:Grouppage-sysop}}|administrator]] for å diskutere blokkeringa.\nVer merksam på at du ikkje kan bruke «{{int:emailuser}}»-funksjonen minder du har ei gyldig e-postadresse registrert i [[Special:Preferences|innstillingane dine]] og ikkje er blokkert frå å bruke denne funksjonen.\nDen gjeldande IP-adressa di er $3, og blokkerings-ID-en er #$5.\nTa med alle opplysingane over ved eventuelle førespurnader.",
+       "autoblockedtext": "IP-adressa di vart blokkert automatisk fordi ho vart brukt av ein annan brukar som var blokkert av $1.\nDen oppgjevne årsaka er:\n\n:<em>$2</em>\n\n* Blokkeringa byrja: $8\n* Blokkeringa endar: $6\n* Blokkeringa gjeld brukar: $7\n\nDu kan kontakte $1 eller ein annan [[{{MediaWiki:Grouppage-sysop}}|administrator]] for å diskutere blokkeringa.\n\nVer merksam på at du ikkje kan bruke «{{int:emailuser}}»-funksjonen minder du har ei gyldig e-postadresse registrert i [[Special:Preferences|innstillingane dine]] og ikkje er blokkert frå å bruke denne funksjonen.\n\nDen gjeldande IP-adressa di er $3, og blokkerings-ID-en er #$5.\nTa med alle opplysingane over ved eventuelle førespurnader.",
+       "systemblockedtext": "Brukarnamnet ditt eller IP-adressa di vart blokkert automatisk av MediaWiki.\nDen oppgjevne årsaka er:\n\n:<em>$2</em>\n\n* Blokkeringa byrja: $8\n* Blokkeringa endar: $6\n* Blokkeringa gjeld brukar: $7\n\nDen gjeldande IP-adressa di er $3.\nTa med alle opplysingane over ved eventuelle førespurnader.",
        "blockednoreason": "inga grunngjeving",
        "whitelistedittext": "Du lyt $1 for å endre sider.",
        "confirmedittext": "Du må stadfeste e-postadressa di før du kan endre sidene. Ver venleg og legg inn og stadfest e-postadressa di i [[Special:Preferences|innstillingane dine]].",
        "protect-expiry-options": "1 time:1 hour,1 dag:1 day,1 veke:1 week,2 veker:2 weeks,1 månad:1 month,3 månader:3 months,6 månader:6 months,1 år:1 year,endelaus:infinite",
        "restriction-type": "Tilgang:",
        "restriction-level": "Avgrensingsnivå:",
-       "minimum-size": "Minimumstorleik",
-       "maximum-size": "Maksimumstorleik:",
+       "minimum-size": "Minstestorleik",
+       "maximum-size": "Størstestorleik:",
        "pagesize": "(byte)",
        "restriction-edit": "Endring",
        "restriction-move": "Flytting",
        "contribsub2": "For {{GENDER:$3|$1}} ($2)",
        "contributions-userdoesnotexist": "Brukarkontoen «$1» er ikkje oppretta.",
        "nocontribs": "Det vart ikkje funne nokon endringar gjorde av denne brukaren.",
-       "uctop": "(gjeldande)",
+       "uctop": "gjeldande",
        "month": "Månad:",
        "year": "År:",
        "date": "Frå dato (og tidlegare):",
        "autoblockid": "Autoblokker #$1",
        "block": "Blokker brukar",
        "unblock": "Opphev blokkering av brukar",
-       "blockip": "Blokker brukar",
+       "blockip": "Blokker {{GENDER:$1|brukar}}",
        "blockiptext": "Bruk skjemaet nedanfor for å blokkere skrivetilgangen frå ei spesifikk IP-adresse eller brukarnamn. Dette bør berre gjerast for å hindre hærverk, og i samsvar med [[{{MediaWiki:Policy-url}}|retningslinene]].",
        "ipaddressorusername": "IP-adresse eller brukarnamn",
        "ipbexpiry": "Opphøyrstid:",
        "tags": "Gyldige endringsmerke",
        "tag-filter": "[[Special:Tags|Merke]]filter:",
        "tag-filter-submit": "Filtrer",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Merke}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Merke}}]]: $2",
        "tag-mw-contentmodelchange": "endring av innhaldsmodell",
        "tag-mw-contentmodelchange-description": "Endringar som [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:ChangeContentModel byter innhaldsmodellen] til ei side",
        "tag-mw-new-redirect": "Ny omdirigering",
        "tags-create-reason": "Årsak:",
        "tags-create-submit": "Opprett",
        "tags-create-no-name": "Du må oppgje eit merkenamn.",
+       "tags-update-blocked": "Du kan ikkje leggja til eller fjerna merke medan {{GENDER:$1|du}} er blokkert.",
        "tags-edit-title": "Endra merke",
        "tags-edit-existing-tags-none": "«Ingen»",
        "tags-edit-chosen-placeholder": "Vel nokre merke",
        "dberr-again": "Venta nokre minutt og last sida inn på nytt.",
        "dberr-info": "(Kan ikkje kontakta databasetenaren: $1)",
        "dberr-info-hidden": "(får ikkje kontakt med databasetenaren)",
-       "dberr-usegoogle": "Du kan søkja gjennom Google i mellomtida.",
-       "dberr-outofdate": "Merk at versjonane deira av innhaldet vårt kan vera forelda.",
-       "dberr-cachederror": "Dette er ein mellomlagra kopi av den etterspurde sida og er mogelegvis ikkje den gjeldande versjonen av henne.",
        "htmlform-invalid-input": "Det er problem med nokre av inndataa dine.",
        "htmlform-select-badoption": "Verdien du valde er ikkje eit gyldig alternativ.",
        "htmlform-int-invalid": "Verdien du valde er ikkje eit heiltal.",
        "revdelete-unrestricted": "fjerna avgrensingar for administratorar",
        "logentry-block-block": "$1 {{GENDER:$2|blokkerte}} {{GENDER:$4|$3}} for $5 $6",
        "logentry-block-unblock": "$1 {{GENDER:$2|oppheva}} blokkeringa av {{GENDER:$4|$3}}",
+       "logentry-block-reblock": "$1 {{GENDER:$2|endra}} innstillingar for blokkeringa av {{GENDER:$4|$3}} som endar $5 $6",
+       "logentry-partialblock-reblock": "$1 {{GENDER:$2|endra}} innstillingar for blokkeringa av {{GENDER:$4|$3}} som hindrar endring av {{PLURAL:$8|sida|sidene}} $7 og som endar $5 $6",
+       "logentry-non-editing-block-reblock": "$1 {{GENDER:$2|endra}} innstillingar for blokkeringa av {{GENDER:$4|$3}} for visse handlingar som ikkje er endringar og som endar $5 $6",
        "logentry-suppress-reblock": "$1 {{GENDER:$2|endra}} blokkeringsinnstillingar for {{GENDER:$4|$3}} med opphøyrstid $5 $6",
        "logentry-merge-merge": "$1 {{GENDER:$2|fletta}} $3 inn i $4 (versjonar til og med $5)",
        "logentry-move-move": "$1 {{GENDER:$2|flytte}} sida $3 til $4",
        "date-range-from": "Frå dato:",
        "date-range-to": "Til dato:",
        "randomrootpage": "Tilfeldig rotside",
+       "log-action-filter-block": "Blokkeringstype:",
        "log-action-filter-newusers": "Type kontooppretting:",
        "log-action-filter-rights": "Type endring av rettar:",
        "log-action-filter-all": "Alle",
+       "log-action-filter-block-block": "Blokkering",
        "log-action-filter-delete-delete_redir": "Overskriving av omdirigering",
        "log-action-filter-delete-restore": "Attoppretting av side",
        "log-action-filter-delete-revision": "Versjonssletting",
        "log-action-filter-newusers-autocreate": "Automatisk oppretting",
        "log-action-filter-newusers-byemail": "Oppretting med passord sendt på e-post",
        "log-action-filter-suppress-revision": "Versjonsundertrykking",
+       "log-action-filter-suppress-block": "Fjerning av brukar ved blokkering",
        "authmanager-userdoesnotexist": "Brukarkontoen «$1» er ikkje oppretta.",
        "authmanager-provider-temporarypassword": "Mellombels passord",
        "userjsispublic": "Merk: JavaScript-undersider bør ikkje innehalda konfidensielle data sidan dei er synlege for andre brukarar.",
index 751a098..3994a02 100644 (file)
        "contributions-title": "Diabe tša mošumiši go $1",
        "mycontris": "Diabe",
        "contribsub2": "Ya $1 ($2)",
-       "uctop": "(bjale)",
+       "uctop": "bjale",
        "month": "Go tloga kgweding (le peleng):",
        "year": "Go tloga ngwageng (le peleng):",
        "sp-contributions-newbies": "Laetša diabe tša bašumiši ba bafsa fela",
index e3dffcf..df1d267 100644 (file)
        "anoncontribs": "Nguny katitiny",
        "contribsub2": "Natj {{GENDER:$3|$1}} ($2)",
        "nocontribs": "uart wallak quadgabe mokininy nidja katitjiny",
-       "uctop": "(yeye)",
+       "uctop": "yeye",
        "month": "Month-ang (wer gwytch-ang-at)",
        "year": "Year-ang (wer gwytch-ang-at)",
        "sp-contributions-newbies": "Yong-a wallak il ngolango gaduk",
        "redirect-file": "File kwel-le",
        "specialpages": "birdarra bibol",
        "tag-filter": "[[Special:Tags|Tag]] Uart nidj kia nidj:",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Tag|Tags}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Tag|Tags}}]]: $2",
        "tags-active-yes": "Kaya",
        "tags-active-no": "Uart",
        "tags-hitcount": "$1 {{PLURAL:$1|wallak}}",
index a2ce88d..2b6a657 100644 (file)
        "prefs-editor": "Editor",
        "prefs-preview": "Apercebut",
        "prefs-advancedrc": "Opcions avançadas",
-       "prefs-opt-out": "Refusar los melhoraments",
        "prefs-advancedrendering": "Opcions avançadas",
        "prefs-advancedsearchoptions": "Opcions avançadas",
        "prefs-advancedwatchlist": "Opcions avançadas",
        "contribsub2": "Per {{GENDER:$3|$1}} ($2)",
        "contributions-userdoesnotexist": "Lo compte d'utilizaire « $1 » es pas enregistrat.",
        "nocontribs": "Cap de modificacion correspondenta a aquestes critèris es pas estada trobada.",
-       "uctop": "(actual)",
+       "uctop": "actual",
        "month": "A partir del mes (e precedents) :",
        "year": "A partir de l’annada (e precedentas) :",
        "sp-contributions-newbies": "Far veire sonque las contribucions dels utilizaires novèls",
        "tags": "Balisas de las modificacions validas",
        "tag-filter": "Filtrar las [[Special:Tags|balisas]] :",
        "tag-filter-submit": "Filtrar",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Balisa|Balisas}}]] : $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Balisa|Balisas}}]] : $2",
        "tags-title": "Balisas",
        "tags-intro": "Aquesta pagina lista las balisas que lo logicial pòt utilizar per marcar una modificacion, e lor significacion.",
        "tags-tag": "Nom de la balisa",
        "dberr-again": "Ensajatz d'esperar qualques minutas e tornatz cargar.",
        "dberr-info": "(Accès a la basa de donadas impossible : $1)",
        "dberr-info-hidden": "(Accès a la basa de donadas impossible)",
-       "dberr-usegoogle": "Podètz ensajar de cercar amb Google pendent aqueste temps.",
-       "dberr-outofdate": "Notatz que lors indèxes de nòstre contengut pòdon èsser depassats.",
-       "dberr-cachederror": "Aquò es una còpia amagada de la pagina demandada e pòt èsser depassada.",
        "htmlform-invalid-input": "De problèmas son arribats amb d'unas valors",
        "htmlform-select-badoption": "La valor qu'avètz especificada es pas una opcion valida.",
        "htmlform-int-invalid": "La valor qu'avètz especificada es pas un nombre entièr.",
index ae7690e..164fd76 100644 (file)
        "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|pagize]])",
        "specialpages": "Erikozet sivut",
        "tag-filter": "[[Special:Tags|Tag]] filtru:",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Merki|Merkii}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Merki|Merkii}}]]: $2",
        "tags-edit-existing-tags-none": "\"Nimidä\"",
        "compare-page1": "Sivu 1",
        "compare-page2": "Sivu 2",
index a1417bd..81f3f35 100644 (file)
        "contribsub2": "{{GENDER:$3|$1}} ପାଇଁ  ($2)",
        "contributions-userdoesnotexist": "ଇଉଜର ନାମ \"$1\" ତିଆରି କରାଯାଇ ନାହିଁ ।",
        "nocontribs": "ଏହି ନିର୍ଣ୍ଣାୟକବଳୀ ନିମନ୍ତେ କିଛି ବି ବଦଳ ମେଳ ଖାଇଲା ନାହିଁ ।",
-       "uctop": "(ଏବେକାର)",
+       "uctop": "ଏବେକାର",
        "month": "ମାସରୁ (ଓ ତା ଆଗରୁ)",
        "year": "ବର୍ଷରୁ (ଆଉ ତା ଆଗରୁ)",
        "sp-contributions-newbies": "କେବଳ ନୂଆ ସଭ୍ୟମାନଙ୍କର ଅବଦାନ ଦେଖାଇବେ",
        "tags": "ବୈଧ ସମ୍ପାଦନା ଚିହ୍ନ",
        "tag-filter": "[[Special:Tags|ଟାଗ]] ଛଣା:",
        "tag-filter-submit": "ଛାଣିବା",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|ଟ୍ୟାଗ|ଟ୍ୟାଗସବୁ}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|ଟ୍ୟାଗ|ଟ୍ୟାଗସବୁ}}]]: $2",
        "tags-title": "ସୂଚକ",
        "tags-intro": "ଏହି ପୃଷ୍ଠା ସଫ୍ଟୱାର ଏକ ବଦଳ ଭାବେ ଚିହ୍ନିତ କରୁଥିବା ଚିହ୍ନସବୁର ମାନେ ସହ ତାଲିକା ତିଆରି କରିଥାଏ ।",
        "tags-tag": "ଚିହ୍ନ ନାମ",
        "dberr-again": "କିଛି ମିନିଟ ଅପେକ୍ଷା କରିବା ସହ ଆଉ ଥରେ ଲୋଡ କରନ୍ତୁ ।",
        "dberr-info": "(ଡାଟାବେସ ସର୍ଭର ସହ ଯୋଗାଯୋଗ କରିପାରିଲୁ ନାହିଁ: $1)",
        "dberr-info-hidden": "(ଡାଟାବେସ ସର୍ଭର ସହ ଯୋଗାଯୋଗ କରିପାରିଲୁ ନାହିଁ)",
-       "dberr-usegoogle": "ଏହି ସମୟ ଭିତରେ ଆପଣ ଗୁଗଲରେ ଖୋଜି ପାରିବେ ।",
-       "dberr-outofdate": "ଜାଣିରଖନ୍ତୁ ଯେ ଆମ ବିଷୟବସ୍ତୁକୁ ନେଇ ସେମାନେ ତିଆରିଥିବା ସୂଚି ବହୁପୁରାତନ ହୋଇପାରେ ।",
-       "dberr-cachederror": "ଏହା ଅନୁରୋଧ କରାଯାଇଥିବା ପୃଷ୍ଠାର ଏକ ଆଗରୁ ସାଇତାଥିବା ନକଲ ଓ ସତେଜ ହୋଇ ନଥାଇପାରେ ।",
        "htmlform-invalid-input": "ଆପଣଙ୍କର କେତେକ ନିବେଶରେ ଅସୁବିଧାମାନ ରହିଅଛି",
        "htmlform-select-badoption": "ଆପଣ ଦେଇଥିବା ମୂଲ୍ୟଟି ଏକ ବୈଧ ବିକଳ୍ପ ନୁହେଁ ।",
        "htmlform-int-invalid": "ଆପଣ ଦେଇଥିବା",
index 3c37cb4..83e53d1 100644 (file)
        "mycontris": "Бавæрд",
        "contribsub2": "Архайæг: $1 ($2)",
        "contributions-userdoesnotexist": "Архайæджы аккаунт «$1» регистрацигонд нæу.",
-       "uctop": "(нырыккон)",
+       "uctop": "нырыккон",
        "month": "Ацы мæйы (æмæ раздæр):",
        "year": "Ацы азы (æмæ раздæр):",
        "sp-contributions-newbies": "Æвдисын æрмæст нæуæг архайджыты бавæрд",
index 2672229..f1c0a63 100644 (file)
        "anoncontribs": "ਯੋਗਦਾਨ",
        "contribsub2": "{{GENDER:$3|$1}} ($2) ਲਈ",
        "nocontribs": "ਇਹਨਾਂ ਮਾਪਦੰਡਾਂ 'ਤੇ ਕੋਈ ਬਦਲਾਅ ਨਹੀਂ ਲੱਭੇ।",
-       "uctop": "(ਮੌਜੂਦਾ)",
+       "uctop": "ਮੌਜੂਦਾ",
        "month": "ਇਸ (ਅਤੇ ਪਿਛਲੇ) ਮਹੀਨੇ ਤੋਂ :",
        "year": "ਇਸ (ਅਤੇ ਪਿਛਲੇ) ਸਾਲ ਤੋਂ :",
        "sp-contributions-newbies": "ਸਿਰਫ਼ ਨਵੇਂ ਵਰਤੋਂਕਾਰਾਂ ਦੇ ਯੋਗਦਾਨ ਵਖਾਓ",
        "external_image_whitelist": " #ਇਸ ਲਾਈਨ ਨੂੰ ਇੰਝ ਹੀ ਰਹਿਣ ਦਿਓ <pre>\n#ਹੇਠਾਂ ਓਹੀ ਐਕਸਪ੍ਰੈਸ਼ਨ ਪਾਓ (ਜਿਹੜਾ ਹਿੱਸਾ // ਦੇ ਵਿਚਾਲੇ ਹੈ)\n#ਇਹ ਬਾਹਰੀ ਤਸਵੀਰਾਂ ਦੇ URLs (ਹੌਟਲਿੰਕਡ) ਨਾਲ ਮਿਲਣਗੀਆਂ\n#ਜਿਹੜੀਆਂ ਮਿਲਣਗੀਆਂ ਓਹ ਬਤੌਰ ਤਸਵੀਰਾਂ ਦਿੱਸਣਗੀਆਂ ਨਹੀਂ ਤਾਂ ਤਸਵੀਰ ਦਾ ਸਿਰਫ਼ ਲਿੰਕ ਨਜ਼ਰ ਆਵੇਗਾ\n#'#' ਨਾਲ਼ ਸ਼ੁਰੂ ਹੋਣ ਵਾਲ਼ੀਆਂ ਲਾਈਨਾਂ ਟਿੱਪਣੀਆਂ ਵਾਂਗ ਲਈਆਂ ਜਾਂਦੀਆਂ ਹਨ\n#ਇਹ ਕੇਸ-ਇਨਸੈਂਸਟਿਵ ਹੈ\n\n#ਸਾਰੇ ਰੈਜੈਕਸ ਫ਼ਰੈਗਮੈਂਟ ਇਸ ਲਾਈਨ ਤੋਂ ਉੱਪਰ ਪਾਓ। ਇਸ ਲਾਈਨ ਨੂੰ ਇੰਝ ਹੀ ਰਹਿਣ ਦਿਓ </pre>",
        "tag-filter": "[[Special:Tags|ਨਿਸ਼ਾਨ]] ਪੌਣੀ:",
        "tag-filter-submit": "ਛਾਨਣੀ",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|ਟੈਗ}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|ਟੈਗ}}]]: $2",
        "tags-title": "ਟੈਗ",
        "tags-tag": "ਟੈਗ ਦਾ ਨਾਮ",
        "tags-description-header": "ਅਰਥ ਦਾ ਪੂਰਾ ਬਿਓਰਾ",
        "compare-revision-not-exists": "ਦਿੱਤੀ ਗਈ ਰਿਵੀਜਨ ਮੌਜੂਦ ਨਹੀਂ ਹੈ।",
        "dberr-problems": "ਅਫ਼ਸੋਸ! ਇਸ ਸਾਈਟ 'ਤੇ ਕੁਝ ਤਕਨੀਕੀ ਔਕੜਾਂ ਆ ਰਹੀਆਂ ਹਨ।",
        "dberr-again": "ਕੁਝ ਮਿੰਟਾਂ ਲਈ ਉਡੀਕ ਕਰਨ ਅਤੇ ਮੁੜ ਲੋਡ ਕਰਨ ਦੀ ਕੋਸ਼ਿਸ਼ ਕਰੋ",
-       "dberr-usegoogle": "ਉਨੀ ਦੇਰ ਤੱਕ ਤੁਸੀਂ ਗੂਗਲ ਰਾਹੀਂ ਲੱਭਣ ਦੀ ਕੋਸ਼ਿਸ਼ ਕਰ ਸਕਦੇ ਹੋ।",
        "htmlform-invalid-input": "ਤੁਹਾਡੀ ਕੁਝ ਇਨਪੁਟ ਵਿਚ ਔਕੜਾਂ ਹਨ।",
        "htmlform-select-badoption": "ਤੁਹਾਡੇ ਵੱਲੋਂ ਦਿੱਤਾ ਮੁੱਲ ਇੱਕ ਸਹੀ ਚੋਣ ਨਹੀਂ ਹੈ।",
        "htmlform-float-invalid": "ਤੁਹਾਡੇ ਵੱਲੋਂ ਦਿੱਤਾ ਮੁੱਲ ਇੱਕ ਅੰਕ ਨਹੀਂ ਹੈ।",
index 449c63d..b2d1df6 100644 (file)
        "anoncontribs": "Deng ambag",
        "contribsub2": "Para $1 ($2)",
        "nocontribs": "Alang pamagbayung pareu/tutud kareng kundisiung deti.",
-       "uctop": "(babo)",
+       "uctop": "babo",
        "month": "Manibat king bulan a (at minuna pa):",
        "year": "Manibat banuang (at minuna pa):",
        "sp-contributions-newbies": "Den mung ambag da reng bayung account ing palto",
index e6f3335..3d08c1d 100644 (file)
        "contributions-title": "Contérbuchons dechl uzeu à pérpos éd $1",
        "mycontris": "Mes contérbuchons",
        "contribsub2": "Pou $1 ($2)",
-       "uctop": "(darin)",
+       "uctop": "darin",
        "month": "Dpuis ch'moés (pi édvant)",
        "year": "Del innée (pi avint)",
        "sp-contributions-newbies": "Montrer chés contérbuchons éd chés nouvieus conptes seulemint",
index 97b1427..ab7b1e9 100644 (file)
        "contributions-title": "Ardickele vun „$1“",
        "mycontris": "Mei Ardickele",
        "contribsub2": "Fer {{GENDER:$3|$1}} ($2)",
-       "uctop": "(ewwerscht)",
+       "uctop": "ewwerscht",
        "month": "unn Munet:",
        "year": "bis Yaahr:",
        "sp-contributions-talk": "Dischbedutt",
index b4c416d..4cdcd8f 100644 (file)
        "contributions-title": "Middawaidabaidräsch vun $1",
        "mycontris": "Baidräsch",
        "contribsub2": "Fa {{GENDER:$3|$1}} ($2)",
-       "uctop": "(geschewedisch)",
+       "uctop": "geschewedisch",
        "month": "än Monad (un frieja):",
        "year": "Abm Johr (un frieja):",
        "sp-contributions-newbies": "Zaisch nua Baidräsch vun naije Konde",
        "specialpages-group-wiki": "Daade un Wergzaisch",
        "external_image_whitelist": " #Loss die Zail wiese isch.<pre>\n#Geb unne Deel vunde regulere Ausdrigg (de Deel zwischede //) oi.\n#Die werren midde URLs vun aissare Bilda vaglische.\n#Die wu passen werren gzaischd un schunschd sieschdn n'Ling'g.\n#Zaile, wu midd # ofongen sinnen Kommenda.\n#Glä- odda Großschraiwung isch do egal.\n\n#Deel vun regulere Ausdrigg nochde Zeil oidrache. Loss die Zail do uuvaännad.</pre>",
        "tag-filter": "[[Special:Tags|Bschildarungs]]-Filda:",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Tag}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Tag}}]]: $2",
        "tags-active-yes": "Ja",
        "tags-active-no": "Nä",
        "tags-edit": "bearwaide",
index 4f77237..32ee769 100644 (file)
@@ -99,7 +99,8 @@
                        "Acamicamacaraca",
                        "DeRudySoulStorm",
                        "Railfail536",
-                       "Vlad5250"
+                       "Vlad5250",
+                       "CiaPan"
                ]
        },
        "tog-underline": "Podkreślenie linków:",
        "passwordtooshort": "Hasło musi mieć co najmniej $1 {{PLURAL:$1|znak|znaki|znaków}}.",
        "passwordtoolong": "Hasło nie może być dłuższe niż  {{PLURAL:$1|1 znak|$1 znaków}}.",
        "passwordtoopopular": "Często wybierane hasła nie mogą być stosowane. Proszę wybrać hasło bardziej unikalne.",
+       "passwordinlargeblacklist": "Wprowadzone hasło jest na liście najczęściej używanych haseł. Prosimy wybrać mniej popularne hasło.",
        "password-name-match": "Hasło musi być inne niż nazwa użytkownika.",
        "password-login-forbidden": "Wykorzystanie tej nazwy użytkownika lub hasła zostało zabronione.",
        "mailmypassword": "Zresetuj hasło",
        "localtime": "Czas lokalny:",
        "timezoneuseserverdefault": "Użyj domyślnej dla tej wiki ($1)",
        "timezoneuseoffset": "Inna (określ różnicę czasu)",
+       "timezone-useoffset-placeholder": "Przykładowe wartości: \"-07:00\" lub \"01:00\"",
        "servertime": "Czas serwera:",
        "guesstimezone": "Pobierz z przeglądarki",
        "timezoneregion-africa": "Afryka",
        "prefs-editor": "Edytor",
        "prefs-preview": "Podgląd",
        "prefs-advancedrc": "Zaawansowane",
-       "prefs-opt-out": "Rezygnacja z ulepszeń",
        "prefs-advancedrendering": "Zaawansowane",
        "prefs-advancedsearchoptions": "Zaawansowane",
        "prefs-advancedwatchlist": "Zaawansowane",
        "prefs-displayrc": "Opcje wyświetlania",
        "prefs-displaywatchlist": "Opcje wyświetlania",
+       "prefs-changesrc": "Pokazywane zmiany",
+       "prefs-changeswatchlist": "Pokazywane zmiany",
+       "prefs-pageswatchlist": "Obserwowane strony",
        "prefs-tokenwatchlist": "Token",
        "prefs-diffs": "Zmiany",
        "prefs-help-prefershttps": "Ta opcja zacznie działać przy twoim następnym zalogowaniu.",
        "rcfilters-watchlist-markseen-button": "Oznacz wszystkie zmiany jako obejrzane",
        "rcfilters-watchlist-edit-watchlist-button": "Edytuj swoją listę obserwowanych stron",
        "rcfilters-watchlist-showupdated": "<strong>Wytłuszczono</strong> strony, których nie odwiedził{{GENDER:|e|a|e}}ś od czasu zapisania ostatnich zmian.",
-       "rcfilters-preference-label": "Wyłącz ulepszenia strony Ostatnich zmian",
-       "rcfilters-preference-help": "Wycofuje wszystkie zmiany interfejsu z 2017 i narzędzia dodane od tamtej pory.",
-       "rcfilters-watchlist-preference-label": "Ukryj ulepszoną wersję listy obserwowanych",
-       "rcfilters-watchlist-preference-help": "Wycofaj zmiany wyglądu interfejsu z 2017 i wszystkie narzędzia dodane wtedy i od tego czasu.",
+       "rcfilters-preference-label": "Używaj interfejsu bez użycia JavaScriptu",
+       "rcfilters-preference-help": "Ładuje Ostatnie zmiany bez filtrów lub opcji podświetlania.",
+       "rcfilters-watchlist-preference-label": "Używaj interfejsu bez użycia JavaScriptu",
+       "rcfilters-watchlist-preference-help": "Ładuje listę obserwowanych bez filtrów lub opcji podświetlania.",
        "rcfilters-filter-showlinkedfrom-label": "Pokaż zmiany na stronach linkowanych z",
        "rcfilters-filter-showlinkedfrom-option-label": "<strong>Strony linkowane z</strong> zaznaczonej strony",
        "rcfilters-filter-showlinkedto-label": "Pokaż zmiany na stronach linkujących do",
        "contribsub2": "Dla {{GENDER:$3|użytkownika|użytkowniczki}} $1 ($2)",
        "contributions-userdoesnotexist": "Konto użytkownika „$1” nie jest zarejestrowane.",
        "nocontribs": "Brak zmian odpowiadających tym kryteriom.",
-       "uctop": "(ostatnia)",
+       "uctop": "ostatnia",
        "month": "Do miesiąca (włącznie):",
        "year": "Do roku (włącznie):",
        "date": "Od daty (i wcześniej):",
        "createaccountblock": "blokada tworzenia kont",
        "emailblock": "zablokowany e‐mail",
        "blocklist-nousertalk": "nie mogą edytować własnych stron dyskusji",
+       "blocklist-editing": "edytowanie",
+       "blocklist-editing-sitewide": "edytowanie całej strony",
        "ipblocklist-empty": "Lista blokad jest pusta.",
        "ipblocklist-no-results": "Podany adres IP lub użytkownik nie jest zablokowany.",
        "blocklink": "zablokuj",
        "move-watch": "Obserwuj",
        "movepagebtn": "Przenieś stronę",
        "pagemovedsub": "Przeniesienie powiodło się",
+       "cannotmove": "Nie można przenieść strony z {{PLURAL:$1|następującego powodu|następujących powodów}}:",
        "movepage-moved": "'''„$1” została przeniesiona do „$2”'''",
        "movepage-moved-redirect": "Zostało utworzone przekierowanie.",
        "movepage-moved-noredirect": "Nie zostało utworzone przekierowanie.",
        "tooltip-t-emailuser": "Wyślij e‐mail do {{GENDER:$1|tego użytkownika|tej użytkowniczki}}",
        "tooltip-t-info": "Więcej informacji na temat tej strony",
        "tooltip-t-upload": "Prześlij pliki",
-       "tooltip-t-specialpages": "Lista wszystkich specjalnych stron",
+       "tooltip-t-specialpages": "Lista wszystkich stron specjalnych",
        "tooltip-t-print": "Wersja do wydruku",
        "tooltip-t-permalink": "Stały link do tej wersji strony",
        "tooltip-ca-nstab-main": "Zobacz stronę treści",
        "show-big-image-preview": "Rozmiar podglądu – $1.",
        "show-big-image-preview-differ": "Wielkość pliku podglądu $3 dla pliku $2: $1",
        "show-big-image-other": "{{PLURAL:$2|Inna rozdzielczość|Inne rozdzielczości}}: $1.",
-       "show-big-image-size": "$1 x $2 pikseli",
+       "show-big-image-size": "$1 × $2 pikseli",
        "file-info-gif-looped": "zapętlony",
        "file-info-gif-frames": "$1 {{PLURAL:$1|klatka|klatki|klatek}}",
        "file-info-png-looped": "zapętlony",
        "redirect-file": "Nazwa pliku",
        "redirect-logid": "ID rejestru",
        "redirect-not-exists": "Nie znaleziono wartości",
+       "redirect-not-numeric": "Wartość nie jest liczbą",
        "fileduplicatesearch": "Wyszukiwanie duplikatów pliku",
        "fileduplicatesearch-summary": "Wyszukiwanie duplikatów pliku na podstawie wartości funkcji skrótu.",
        "fileduplicatesearch-filename": "Nazwa pliku:",
        "tags": "Znaczniki zmian",
        "tag-filter": "Filtr [[Special:Tags|znaczników]]:",
        "tag-filter-submit": "Filtr",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Znacznik|Znaczniki}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Znacznik|Znaczniki}}]]: $2",
        "tag-mw-contentmodelchange": "zmiana modelu zawartości",
        "tag-mw-contentmodelchange-description": "Edycje, które [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:ChangeContentModel zmieniają model zawartości] strony",
        "tag-mw-new-redirect": "Nowe przekierowanie",
        "dberr-again": "Spróbuj przeładować stronę za kilka minut.",
        "dberr-info": "(Błąd łączności z bazą danych: $1)",
        "dberr-info-hidden": "(Błąd łączności z bazą danych)",
-       "dberr-usegoogle": "Możesz spróbować wyszukać w międzyczasie za pomocą Google.",
-       "dberr-outofdate": "Uwaga – indeksy zawartości serwisu mogą być nieaktualne.",
-       "dberr-cachederror": "Strona została pobrana z pamięci podręcznej i może być nieaktualna.",
        "htmlform-invalid-input": "Wystąpił problem z wprowadzonymi danymi",
        "htmlform-select-badoption": "Podano nieprawidłową wartość.",
        "htmlform-int-invalid": "Podano wartość, która nie jest liczbą całkowitą.",
        "logentry-block-reblock": "$1 {{GENDER:$2|zmienił|zmieniła}} ustawienia blokady dla {{GENDER:$4|$3}}, czas blokady: $5 $6",
        "logentry-partialblock-block": "$1 {{GENDER:$2|wyłączył|wyłączyła}} {{GENDER:$4|$3}} z edytowania {{PLURAL:$8|strony|stron}} $7, czas blokady: $5 $6",
        "logentry-partialblock-reblock": "$1 {{GENDER:$2|zmienił|zmieniła}} ustawienia wyłączenia {{GENDER:$4|$3}} z edytowania {{PLURAL:$8|strony|stron}} $7, czas blokady: $5 $6",
-       "logentry-non-editing-block-block": "$1 {{GENDER:$2|zablokował|zablokowała}} {{GENDER:$4|$3}} wykonywanie operacji nieedycyjnych, czas blokady: $5 $6",
-       "logentry-non-editing-block-reblock": "$1 {{PLURAL:$2|zmienił|zmieniła}} ustawienia blokady wykonywania operacji nieedycyjnych {{GENDER:$4|$3}}, czas blokady: $5 $6",
+       "logentry-non-editing-block-block": "$1 {{GENDER:$2|zablokował|zablokowała}} {{GENDER:$4|$3}} wykonywanie określonych operacji nieedycyjnych, czas blokady: $5 $6",
+       "logentry-non-editing-block-reblock": "$1 {{PLURAL:$2|zmienił|zmieniła}} ustawienia blokady wykonywania określonych operacji nieedycyjnych {{GENDER:$4|$3}}, czas blokady: $5 $6",
        "logentry-suppress-block": "$1 {{GENDER:$2|zablokował|zablokowała}} {{GENDER:$4|$3}}, czas blokady: $5 $6",
        "logentry-suppress-reblock": "$1 {{GENDER:$2|zmienił|zmieniła}} ustawienia blokady dla {{GENDER:$4|$3}}, czas blokady: $5 $6",
        "logentry-import-upload": "$1 {{GENDER:$2|zaimportował|zaimportowała}} $3 poprzez przesłanie pliku",
        "special-characters-title-emdash": "pauza",
        "special-characters-title-minus": "minus",
        "mw-widgets-abandonedit": "Czy na pewno chcesz zrezygnować z edycji bez zapisania zmian?",
-       "mw-widgets-abandonedit-discard": "Odrzuć zmiany",
+       "mw-widgets-abandonedit-discard": "Porzuć zmiany",
        "mw-widgets-abandonedit-keep": "Kontynuuj edycję",
        "mw-widgets-abandonedit-title": "Na pewno?",
        "mw-widgets-dateinput-no-date": "Nie wybrano daty",
        "authmanager-authn-not-in-progress": "Tworzenie konta nie jest wykonywane lub dane sesji zostały utracone. Zacznij od początku.",
        "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-no-local-user-link": "Podane poświadczenia są prawidłowe, ale nie odpowiadają żadnemu użytkownikowi na tej wiki. Zaloguj się w inny sposób lub utwórz nowe konto, aby móc połączyć poprzednie poświadczenie z tym kontem.",
        "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.",
        "passwordpolicies-policy-minimalpasswordlength": "Hasło musi mieć co najmniej $1 {{PLURAL:$1|znak|znaki|znaków}}",
        "passwordpolicies-policy-minimumpasswordlengthtologin": "Aby się zalogować, hasło musi mieć co najmniej $1 {{PLURAL:$1|znak|znaki|znaków}}",
        "passwordpolicies-policy-passwordcannotmatchusername": "Hasło nie może być takie samo jak nazwa użytkownika",
+       "passwordpolicies-policy-passwordcannotmatchblacklist": "Hasło nie może być zgodne z konkretnymi hasłami na czarnej liście",
        "passwordpolicies-policy-maximalpasswordlength": "Hasło musi mieć mniej niż $1 {{PLURAL:$1|znak|znaki|znaków}}",
        "passwordpolicies-policy-passwordcannotbepopular": "Hasło nie może być {{PLURAL:$1|popularne|na liście $1 popularnych haseł}}",
+       "passwordpolicies-policy-passwordnotinlargeblacklist": "Hasło nie może znajdować się na liście 100 000 najczęściej używanych haseł.",
+       "easydeflate-invaliddeflate": "Dostarczona zawartość nie jest poprawnie skompresowana",
        "unprotected-js": "Ze względów bezpieczeństwa kod JavaScript nie może zostać załadowany z niezabezpieczonych stron. Prosimy dodawać JavaScript w przestrzeni MediaWiki lub jako podstronę strony użytkownika."
 }
index 26ca440..7781faf 100644 (file)
        "contribsub2": "Për {{GENDER:$3|$1}} ($2)",
        "contributions-userdoesnotexist": "Ël cont utent «$1» a l'é pa argistrà.",
        "nocontribs": "A l'é pa trovasse gnun-a modìfica che a fussa conforma a costi criteri-sì",
-       "uctop": "(corenta)",
+       "uctop": "corenta",
        "month": "Mèis:",
        "year": "Ann:",
        "sp-contributions-newbies": "Smon-e mach ël travaj dij cont neuv",
        "tags": "Tichëtte ëd le modìfiche vàlide",
        "tag-filter": "Filtror ëd le [[Special:Tags|tichëtte]]:",
        "tag-filter-submit": "Filtror",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Tichëtta|Tichëtte}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Tichëtta|Tichëtte}}]]: $2",
        "tags-title": "Tichëtte",
        "tags-intro": "Costa pàgina a lista le tichëtte che ël programa a peul dovré për marché na modìfica, e sò significà.",
        "tags-tag": "Nòm ëd la tichëtta",
        "dberr-again": "Ch'a speta chèiche minute e ch'a preuva torna a carié.",
        "dberr-info": "(Acess a la base ëd dàit impossìbil: $1)",
        "dberr-info-hidden": "(Acess a la base ëd dàit impossìbil)",
-       "dberr-usegoogle": "Antratant a peul prové a sërché con Google.",
-       "dberr-outofdate": "Ch'a ten-a da ment che soe indesassion dij nòstri contnù a podrìo esse nen agiornà.",
-       "dberr-cachederror": "Costa-sì a l'é na còpia an memòria local ëd la pàgina ciamà, e a peul esse nen agiornà.",
        "htmlform-invalid-input": "A-i son dij problema con cheidun dij valor ch'a l'ha butà",
        "htmlform-select-badoption": "Ël valor che a l'ha spessificà a l'é pa n'opsion vàlida.",
        "htmlform-int-invalid": "Ël valor ch'a l'ha spessificà a l'é pa n'antregh.",
index 249b0d1..5b1d887 100644 (file)
        "customjsprotected": "تسی اے JavaScript  صفحے نوں تبدیل نئیں کر سکدے کیونجے ایدے کسے دوجے ورتن آلے دیاں من پسند تانگاں نیں۔",
        "ns-specialprotected": "خاص صفے تبدیل نئیں کیتے جاسکدے۔",
        "titleprotected": "اس ناں نوں [[User:$1|$1]] نئیں بناسکدا۔\nاس دی وجہ اے دسی گئی اے: <em>$2</em>۔",
+       "exception-nologin": "لاگ ان نئیں ہوئے او",
        "virus-badscanner": "غلط تریقہ کار: انجان وائرس کھوجی: ''$1''",
        "virus-scanfailed": "کھوج نا ہوسکی (کوڈ $1)",
        "virus-unknownscanner": "اندیکھا اینٹیوائرس:",
        "yourname": "ورتن والہ:",
        "userlogin-yourname": "ورتن ناں",
        "userlogin-yourname-ph": "اپنا ورتن ناں لکھو",
+       "createacct-another-username-ph": "ورتن ناں پاؤ",
        "yourpassword": "کنجی:",
        "userlogin-yourpassword": "کنجی",
        "userlogin-yourpassword-ph": "کنجی پاؤ",
        "anoncontribs": "حصےداری",
        "contribsub2": "$1 آستے ($2)",
        "nocontribs": "ایناں ناپاں نال رلدیاں کوئی تبدیلیاں نئیں لبیاں۔",
-       "uctop": "(اتے)",
+       "uctop": "اتے",
        "month": "مہینے توں (تے پہلاں):",
        "year": "سال توں (تے پہلاں):",
        "sp-contributions-newbies": "صرف نویں ورتن والیاں دے کم وکھاؤ",
        "tags": "منے ہوۓ تبدیلی دے ٹیگ",
        "tag-filter": "[[Special:Tags|Tag]] نتارا:",
        "tag-filter-submit": "فلٹر",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|ٹیگ|ٹیگز}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|ٹیگ|ٹیگز}}]]: $2",
        "tag-mw-new-redirect": "نواں مڑجوڑ",
        "tags-title": "ٹیگز",
        "tags-intro": "ایس صفے تے ٹیگ دی لسٹ اے جینوں سوفٹوئیر تبدیلی دا نشان لا سکدا اے۔",
        "dberr-problems": "معاف کرنا ! ایس صفے تے تکنیکی مسلے آرۓ نیں۔",
        "dberr-again": "تھو ڑے منٹ انتظار کرو تے دوبارہ لوڈ کرو۔",
        "dberr-info": "(ڈیٹابیس سرور نال میل نئیں ہوسکیا:$1)",
-       "dberr-usegoogle": "تسیں گوکل راہیں کھوج کر سکدے او۔",
-       "dberr-outofdate": "اے نوٹ کرو جے اوناں دے انڈیکس ساڈے مواد چوں پرانے ناں ہون۔",
-       "dberr-cachederror": "اے کاشے کاپی اے منگے ہوۓ صفے دی تے ہوسکدا اے پرانی ہووے۔",
        "htmlform-invalid-input": "تھواڈے دتے گۓ مواد چ مسلے نیں۔",
        "htmlform-select-badoption": "جیہڑا نمبر دتا اے اوہ منی ہوئی چنوتی نئیں۔",
        "htmlform-int-invalid": "جیہڑا نمبر تساں دسیا اے اوہ انٹیجر نغیں۔",
index b9dd3e7..a86fbd1 100644 (file)
        "contributions-title": "Δουλείας ντ' εποίκε ο χρήστες $1",
        "mycontris": "Δουλείας ντ' εποίκα",
        "contribsub2": "Για τον/την $1 ($2)",
-       "uctop": "(υστερνά)",
+       "uctop": "υστερνά",
        "month": "Ασόν μήναν (και πριχού):",
        "year": "Ασή χρονίαν (και πριχού):",
        "sp-contributions-newbies": "Τέρεμαν γραψιματίων τη καινούρεων λογαρίων μαναχόν",
index 14e9e04..c1e875f 100644 (file)
        "mycontris": "Majā endīja",
        "contribsub2": "Per tērpautajan $1 ($2)",
        "nocontribs": "Ni aupallā di wersiōnins izpilnintans šins kritērijans.",
-       "uctop": "(panzdauma kitawīdinsna)",
+       "uctop": "panzdauma kitawīdinsna",
        "month": "Pirzdau mīnsin (be ānkstais):",
        "year": "Pirzdau mettan (be ānkstais):",
        "sp-contributions-newbies": "Waidinnais tēr endījan stēisan nāunan tērpautajan",
        "diff-form": "'''fōrmularan'''",
        "dberr-again": "Bandais etkūmps kraūtun šin pāusan pa delli minūtins.",
        "dberr-info": "(Ni mazīngi sēitun si sen dātanbazis sērwerin: $1)",
-       "dberr-usegoogle": "En šissei kērdan tu mazzi laukītun sen Google.",
-       "dberr-outofdate": "Waīdais, kāi tenēi mazzi turītun niaktuālins nūsas ēnturas indicins.",
-       "dberr-cachederror": "Šin pāusan ast kitse pāusas kōpija iz rānkas minīsnan be mazzi būtwei niaktuālin.",
        "htmlform-invalid-input": "Ast prōblamai sen wērtibins enwestans prō tin",
        "htmlform-select-badoption": "Enwesta wērtibi ni ast tikrōmiskan.",
        "htmlform-int-invalid": "Enwesta wērtibi ni ast kaīls gīrbis.",
index c532058..9527fb8 100644 (file)
        "prefs-editor": "سمونگر",
        "prefs-preview": "مخليدنه",
        "prefs-advancedrc": "پرمختللې خوښنې",
-       "prefs-opt-out": "د پرمختګونو څخه لرې کول",
        "prefs-advancedrendering": "پرمختللې خوښنې",
        "prefs-advancedsearchoptions": "پرمختللې خوښنې",
        "prefs-advancedwatchlist": "پرمختللې خوښنې",
        "contribsub2": "د {{GENDER:$3|$1}} لپاره ($2)",
        "contributions-userdoesnotexist": "کارن گڼون \"$1\" نه دی ثبت شوی.",
        "nocontribs": "دې شرطونو سره سم بدلونونه و نه موندل شول.",
-       "uctop": "(اوسنی)",
+       "uctop": "اوسنی",
        "month": "له مياشتې د (او پخواني):",
        "year": "له کال د (او پخواني):",
        "sp-contributions-newbies": "د نوو گڼونونو ونډې ښکاره کول",
        "tags": "د کره بدلون نښلنونه",
        "tag-filter": "[[Special:Tags|نښلن]] چاڼگر:",
        "tag-filter-submit": "چاڼگر",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|نښلن|نښلنونه}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|نښلن|نښلنونه}}]]: $2",
        "tag-mw-blank": "بسته بندي",
        "tag-mw-replace": "ځايناستول",
        "tag-mw-rollback": "په شابېول",
        "permanentlink-revid": "د بیاکتنې پيژندګلوي",
        "permanentlink-submit": "بیاکتنې ته ولاړ شي",
        "dberr-problems": "اوبخښۍ! دم مهال دا وېبپاڼه د تخنيکي ستونزو سره مخامخ شوې.",
-       "dberr-usegoogle": "تاسې کولای شی چې هم مهاله د گووگل له لخوا هم د پلټنې هڅه وکړۍ.",
        "htmlform-invalid-input": "ستاسې ځينې ورکړېينې ستونزې لري",
        "htmlform-select-badoption": "څه چې تاسې ځانگړي کړل هغه د منلو وړ خوښنه نه ده.",
        "htmlform-int-invalid": "کوم څه چې تاسو ځانگړي کړي هغه يوه سمه شمېره نه ده.",
        "special-characters-title-endash": "د کرښې فاصله",
        "special-characters-title-emdash": "ډډ شوی کرښه",
        "special-characters-title-minus": "منفي نښه",
+       "mw-widgets-abandonedit": "ایا تاسو باوري یې چې د سمونونو د خوندي کولو پرته دغه مخ پريږدئ؟",
        "mw-widgets-abandonedit-discard": "سمونونه غورځول",
        "mw-widgets-abandonedit-keep": "سمون پرمخ بېول",
        "mw-widgets-abandonedit-title": "آيا تاسې ډاډه ياست؟",
index ce4e0ff..2835539 100644 (file)
        "tog-newpageshidepatrolled": "Ocultar páginas patrulhadas da lista de páginas novas",
        "tog-hidecategorization": "Ocultar a categorização das páginas",
        "tog-extendwatchlist": "Expandir a lista de páginas vigiadas para mostrar todas as mudanças, não apenas as mais recentes",
-       "tog-usenewrc": "Agrupar alterações por páginas nas mudanças recentes e nas páginas vigiadas",
+       "tog-usenewrc": "Agrupar alterações por páginas nas mudanças recentes e na lista de páginas vigiadas",
        "tog-numberheadings": "Auto-numerar cabeçalhos",
        "tog-editondblclick": "Editar páginas no clique duplo",
-       "tog-editsectiononrightclick": "Habilitar edição de seção por clique com o botão direito no título da seção (requer JavaScript)",
-       "tog-watchcreations": "Adicionar as páginas e arquivos que \neu criar à minha lista de páginas vigiadas",
-       "tog-watchdefault": "Adicionar as páginas e arquivos que eu editar à minha lista de páginas vigiadas",
-       "tog-watchmoves": "Adicionar as páginas e arquivos que eu mover à minha lista de páginas vigiadas",
-       "tog-watchdeletion": "Adicionar as páginas e arquivos que eu eliminar à minha lista de páginas vigiadas",
-       "tog-watchuploads": "Adicionar arquivos que envio para minha lista de vigiados",
-       "tog-watchrollback": "Adicionar páginas onde fiz uma reversão às minhas páginas vigiadas",
+       "tog-editsectiononrightclick": "Habilitar edição de seção por clique com o botão direito no título da seção",
+       "tog-watchcreations": "Adicionar páginas e arquivos que eu criar à minha lista de páginas vigiadas",
+       "tog-watchdefault": "Adicionar páginas e arquivos que eu editar à minha lista de páginas vigiadas",
+       "tog-watchmoves": "Adicionar páginas e arquivos que eu mover à minha lista de páginas vigiadas",
+       "tog-watchdeletion": "Adicionar páginas e arquivos que eu eliminar à minha lista de páginas vigiadas",
+       "tog-watchuploads": "Adicionar arquivos que eu carregar à minha lista de páginas vigiadas",
+       "tog-watchrollback": "Adicionar páginas onde fiz uma reversão à minha lista de páginas vigiadas",
        "tog-minordefault": "Marcar todas as edições como menores por padrão",
        "tog-previewontop": "Mostrar previsão antes da caixa de edição",
        "tog-previewonfirst": "Mostrar previsão na primeira edição",
        "tog-enotifwatchlistpages": "Notificar-me por e-mail quando uma página ou um arquivo vigiado for alterado",
-       "tog-enotifusertalkpages": "Receber email quando minha página de discussão for editada",
+       "tog-enotifusertalkpages": "Receber e-mail quando minha página de discussão for editada",
        "tog-enotifminoredits": "Notificar-me por e-mail também sobre edições menores de páginas ou arquivos",
-       "tog-enotifrevealaddr": "Revelar meu endereço de email nas mensagens de notificação",
+       "tog-enotifrevealaddr": "Revelar meu endereço de e-mail nas mensagens de notificação",
        "tog-shownumberswatching": "Mostrar o número de usuários que estão vigiando",
        "tog-oldsig": "Assinatura atual:",
        "tog-fancysig": "Tratar assinatura como wikitexto (sem ligação automática)",
        "tog-uselivepreview": "Mostrar visualizações sem recarregar a página",
        "tog-forceeditsummary": "Avisar-me ao introduzir um sumário de edição vazio",
-       "tog-watchlisthideown": "Ocultar as minhas edições da lista de páginas vigiadas",
-       "tog-watchlisthidebots": "Ocultar edições de bots da lista de páginas vigiadas",
+       "tog-watchlisthideown": "Ocultar minhas edições da lista de páginas vigiadas",
+       "tog-watchlisthidebots": "Ocultar edições de robôs da lista de páginas vigiadas",
        "tog-watchlisthideminor": "Ocultar edições menores da lista de páginas vigiadas",
        "tog-watchlisthideliu": "Ocultar edições de usuários autenticados da lista de páginas vigiadas",
        "tog-watchlistreloadautomatically": "Recarregar a lista de páginas vigiadas automaticamente sempre que um filtro for alterado (requer JavaScript)",
        "tog-ccmeonemails": "Receber cópias de e-mails que eu enviar a outros usuários",
        "tog-diffonly": "Não mostrar o conteúdo da página ao comparar duas edições",
        "tog-showhiddencats": "Exibir categorias ocultas",
-       "tog-norollbackdiff": "Omitir diferenças após desfazer edições em bloco",
+       "tog-norollbackdiff": "Omitir diferenças após fazer uma reversão",
        "tog-useeditwarning": "Avisar-me quando eu deixar uma janela de edição sem ter salvo as alterações",
        "tog-prefershttps": "Usar sempre uma conexão segura enquanto estiver conectado",
        "underline-always": "Sempre",
        "period-am": "AM",
        "period-pm": "PM",
        "pagecategories": "{{PLURAL:$1|Categoria|Categorias}}",
-       "category_header": "Páginas na categoria \"$1\"",
+       "category_header": "Páginas na categoria “$1”",
        "subcategories": "Subcategorias",
-       "category-media-header": "Multimídia na categoria \"$1\"",
+       "category-media-header": "Multimídia na categoria “$1”",
        "category-empty": "<em>No momento, esta categoria não possui nenhuma página ou arquivo multimídia.</em>",
        "hidden-categories": "{{PLURAL:$1|Categoria oculta|Categorias ocultas}}",
        "hidden-category-category": "Categorias ocultas",
-       "category-subcat-count": "{{PLURAL:$2|Esta categoria possui apenas a seguinte subcategoria.|Esta categoria possui as seguintes $1 subcategorias, de um total de $2.}}",
-       "category-subcat-count-limited": "Esta categoria possui {{PLURAL:$1|a seguinte sub-categoria|as $1 sub-categorias a seguir}}.",
-       "category-article-count": "{{PLURAL:$2|Esta categoria contém apenas a seguinte página.|As seguintes $1 páginas pertencem a esta categoria, de um total de $2.}}",
+       "category-subcat-count": "{{PLURAL:$2|Esta categoria possui apenas a seguinte subcategoria.|Esta categoria possui {{PLURAL:$1|a seguinte subcategoria|as seguintes $1 subcategorias}}, de um total de $2.}}",
+       "category-subcat-count-limited": "Esta categoria possui {{PLURAL:$1|a seguinte subcategoria|as $1 subcategorias a seguir}}.",
+       "category-article-count": "{{PLURAL:$2|Esta categoria contém apenas a seguinte página.|{{PLURA:$1|A seguinte página pertence|As seguintes $1 páginas pertencem}} a esta categoria, de um total de $2.}}",
        "category-article-count-limited": "Esta categoria possui {{PLURAL:$1|a seguinte página|as $1 páginas a seguir}}.",
        "category-file-count": "{{PLURAL:$2|Esta categoria possui apenas o seguinte arquivo.|Esta categoria possui {{PLURAL:$1|o seguinte arquivo|os $1 arquivos a seguir}}, de um total de $2.}}",
        "category-file-count-limited": "Esta categoria possui {{PLURAL:$1|um arquivo|$1 arquivos}}.",
        "listingcontinuesabbrev": "cont.",
        "index-category": "Páginas indexadas",
        "noindex-category": "Páginas não indexadas",
-       "broken-file-category": "Páginas com links inválidos para arquivos",
+       "broken-file-category": "Páginas com ligações inválidas para arquivos",
        "categoryviewer-pagedlinks": "($1) ($2)",
        "category-header-numerals": "$1–$2",
        "about": "Sobre",
        "article": "Página de conteúdo",
        "newwindow": "(abre numa nova janela)",
        "cancel": "Cancelar",
-       "moredotdotdot": "Mais...",
-       "morenotlisted": "Esta lista está incompleta.",
+       "moredotdotdot": "Mais",
+       "morenotlisted": "Esta lista pode estar incompleta.",
        "mypage": "Página",
        "mytalk": "Discussão",
        "anontalk": "Discussão",
        "and": "&#32;e",
        "faq": "Perguntas frequentes",
        "actions": "Ações",
-       "namespaces": "Domínios",
+       "namespaces": "Espaços nominais",
        "variants": "Variantes",
        "navigation-heading": "Menu de navegação",
        "errorpagetitle": "Erro",
        "tagline": "De {{SITENAME}}",
        "help": "Ajuda",
        "search": "Pesquisa",
-       "search-ignored-headings": " #<!-- deixe esta linha exatamente como está --> <pre>\n# Subtítulos que serão ignorados pela busca.\n# Mudanças feitas aqui têm efeito quando a página com o subtítulo é indexada.\n# Você pode forçar a reindexação realizando uma edição nula.\n# A sintaxe é a seguinte:\n#   * Tudo a partir do caractere \"#\" até o final da linha é um comentário\n#   * Cada linha não vazia é o título exato a ser ignorado, inclusive no uso de maiúsculas\nReferências\nLigações externas\nVer também\n #</pre> <!-- deixe esta linha exatamente como está -->",
+       "search-ignored-headings": " #<!-- deixe esta linha exatamente como está --> <pre>\n# Cabeçalhos que serão ignorados pela busca.\n# Mudanças feitas aqui têm efeito quando a página com o cabeçalho é indexada.\n# Você pode forçar a reindexação realizando uma edição nula.\n# A sintaxe é a seguinte:\n#   * Tudo a partir do caractere \"#\" até o final da linha é um comentário.\n#   * Cada linha não vazia é o título exato a ser ignorado, inclusive no uso de maiúsculas.\nReferências\nLigações externas\nVer também\n #</pre> <!-- deixe esta linha exatamente como está -->",
        "searchbutton": "Pesquisar",
        "go": "Ir",
        "searcharticle": "Ir",
        "history": "Histórico da página",
        "history_short": "Histórico",
-       "history_small": "Histórico",
+       "history_small": "histórico",
        "updatedmarker": "atualizado desde a minha última visita",
        "printableversion": "Versão para impressão",
        "permalink": "Ligação permanente",
        "print": "Imprimir",
-       "view": "Ver",
+       "view": "Visualizar",
        "view-foreign": "Ver em $1",
        "edit": "Editar",
        "edit-local": "Editar descrição local",
        "create-local": "Adicionar descrição local",
        "delete": "Eliminar",
        "undelete_short": "Restaurar {{PLURAL:$1|uma edição|$1 edições}}",
-       "viewdeleted_short": "Ver {{PLURAL:$1|uma edição eliminada|$1 edições eliminadas}}",
+       "viewdeleted_short": "Ver {{PLURAL:$1|a edição eliminada|as $1 edições eliminadas}}",
        "protect": "Proteger",
        "protect_change": "alterar",
        "unprotect": "Alterar a proteção",
        "redirectedfrom": "(Redirecionado de $1)",
        "redirectpagesub": "Página de redirecionamento",
        "redirectto": "Redirecionar para:",
-       "lastmodifiedat": "Esta página foi modificada pela última vez em $1, às $2",
+       "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:",
        "pool-timeout": "Tempo limite de espera para o bloqueio excedido",
        "pool-queuefull": "A fila de processos está cheia",
        "pool-errorunknown": "Erro desconhecido",
-       "pool-servererror": "O servidor de contador do pool não está disponível ($1).",
+       "pool-servererror": "O servidor de contador de processos não está disponível ($1).",
        "poolcounter-usage-error": "Erro de uso: $1",
        "aboutsite": "Sobre {{SITENAME}}",
        "aboutpage": "Project:Sobre",
        "copyright": "Conteúdo disponível sob $1, salvo indicação em contrário.",
-       "copyrightpage": "{{ns:project}}:Direitos_de_autor",
+       "copyrightpage": "{{ns:project}}:Direitos de autor",
        "currentevents": "Eventos atuais",
        "currentevents-url": "Project:Eventos atuais",
        "disclaimers": "Termo de responsabilidade",
        "privacy": "Política de privacidade",
        "privacypage": "Project:Política de privacidade",
        "badaccess": "Erro de permissão",
-       "badaccess-group0": "Você não está autorizado a executar a ação requisitada.",
+       "badaccess-group0": "Você não tem autorização para executar a ação requisitada.",
        "badaccess-groups": "A ação que você tentou executar está limitada a usuários {{PLURAL:$2|do grupo|de um dos seguintes grupos}}: $1.",
        "versionrequired": "É necessária a versão $1 do MediaWiki",
        "versionrequiredtext": "Esta página requer a versão $1 do MediaWiki para ser utilizada.\nVeja a [[Special:Version|página sobre a versão do sistema]].",
        "pagetitle": "$1 - {{SITENAME}}",
        "pagetitle-view-mainpage": "{{SITENAME}}",
        "backlinksubtitle": "← $1",
-       "retrievedfrom": "Disponível em \"$1\"",
+       "retrievedfrom": "Disponível em “$1”",
        "youhavenewmessages": "{{PLURAL:$3|Você tem}} $1 ($2).",
        "youhavenewmessagesfromusers": "{{PLURAL:$4|Você tem}} $1 de {{PLURAL:$3|outro usuário|$3 usuários}} ($2).",
        "youhavenewmessagesmanyusers": "Você tem $1 de muitos usuários ($2).",
        "hidetoc": "ocultar",
        "collapsible-collapse": "Ocultar",
        "collapsible-expand": "Expandir",
-       "confirmable-confirm": "{{GENDER:$1|Tem}} certeza?",
+       "confirmable-confirm": "{{GENDER:$1|Tem}} certeza?",
        "confirmable-yes": "Sim",
        "confirmable-no": "Não",
        "thisisdeleted": "Ver ou restaurar $1?",
        "viewdeleted": "Ver $1?",
        "restorelink": "{{PLURAL:$1|uma edição eliminada|$1 edições eliminadas}}",
-       "feedlinks": "Feed:",
-       "feed-invalid": "Tipo inválido de inscrição de feeds.",
+       "feedlinks": "''Feed'':",
+       "feed-invalid": "Tipo inválido de inscrição de ''feed''.",
        "feed-unavailable": "Os \"feeds\" não se encontram disponíveis",
        "site-rss-feed": "Feed RSS $1",
        "site-atom-feed": "Feed Atom $1",
        "databaseerror-function": "Função: $1",
        "databaseerror-error": "Erro: $1",
        "transaction-duration-limit-exceeded": "Para evitar a criação de lag replicação alta, esta operação foi abortada porque a duração de gravação ($1) excedeu o limite de $2 {{PLURAL:$2|segundo|segundos}}. Se você está mudando muitos itens de uma vez, tente fazer várias operações menores em vez disso.",
-       "laggedslavemode": "Aviso: a página poderá não conter atualizações recentes.",
-       "readonly": "Banco de dados disponível no modo \"somente leitura\"",
+       "laggedslavemode": "<strong>Aviso:</strong> a página poderá não conter atualizações recentes.",
+       "readonly": "Banco de dados trancado",
        "enterlockreason": "Entre com um motivo para trancá-lo, incluindo uma estimativa de quando poderá novamente ser destrancado",
        "readonlytext": "O banco de dados está atualmente bloqueado para novos artigos e outras modificações, provavelmente por uma manutenção de rotina de banco de dados, após o que estará de volta ao normal.\n\nO administrador do sistema que fez o bloqueio oferece a seguinte explicação: $1",
        "missing-article": "O banco de dados não encontrou o texto de uma página que deveria ter encontrado, com o nome \"$1\" $2.\n\nIsso normalmente é causado ao acessar um link de diferença (dif) desatualizado ou para o histórico de uma página que foi apagada.\n\nSe este não for o caso, você pode ter encontrado um defeito (bug) no software.\nAnote a URL e reporte o ocorrido a um [[Special:ListUsers/sysop|administrador]].",
        "nonwrite-api-promise-error": "O cabeçalho HTTP \"Promise-Non-Write-API-Action\" foi enviado, mas a requisição era para um módulo de escrita de API.",
        "internalerror": "Erro interno",
        "internalerror_info": "Erro interno: $1",
-       "internalerror-fatal-exception": "Excepção fatal do tipo \"$1\"",
-       "filecopyerror": "Não foi possível copiar o arquivo \"$1\" para \"$2\".",
-       "filerenameerror": "Não foi possível renomear o arquivo \"$1\" para \"$2\".",
-       "filedeleteerror": "Não foi possível eliminar o arquivo \"$1\".",
-       "directorycreateerror": "Não foi possível criar o diretório \"$1\".",
-       "directoryreadonlyerror": "Diretorio \"$1\" é somente leitura.",
-       "directorynotreadableerror": "O diretório \"$1\" não é legível.",
-       "filenotfound": "Não foi possível encontrar o arquivo \"$1\".",
-       "unexpected": "Valor não esperado: \"$1\"=\"$2\".",
-       "formerror": "Erro: Não foi possível enviar o formulário",
+       "internalerror-fatal-exception": "Exceção fatal do tipo “$1”",
+       "filecopyerror": "Não foi possível copiar o arquivo “$1” para “$2”.",
+       "filerenameerror": "Não foi possível renomear o arquivo “$1” para “$2”.",
+       "filedeleteerror": "Não foi possível eliminar o arquivo “$1”.",
+       "directorycreateerror": "Não foi possível criar o diretório “$1”.",
+       "directoryreadonlyerror": "O diretorio “$1” é somente leitura.",
+       "directorynotreadableerror": "O diretório “$1”\" não é legível.",
+       "filenotfound": "Não foi possível encontrar o arquivo “$1”.",
+       "unexpected": "Valor não esperado: “$1”=“$2”.",
+       "formerror": "Erro: Não foi possível enviar o formulário.",
        "badarticleerror": "Esta ação não pode ser realizada nesta página.",
-       "cannotdelete": "Não foi possível eliminar a página ou arquivo $1.\nÉ possível que ele já tenha sido eliminado por outra pessoa.",
-       "cannotdelete-title": "Não é possível eliminar a página \"$1\"",
-       "delete-scheduled": "A página \"$1\" está agendada para eliminação.\nAguarde a mesma, por favor.",
-       "delete-hook-aborted": "A eliminação foi cancelada por um \"hook\".\nNão foi dada nenhuma explicação.",
-       "no-null-revision": "Não foi possível criar nova revisão nula para a página \"$1\"",
+       "cannotdelete": "Não foi possível eliminar a página ou arquivo “$1”.\nÉ possível que ele já tenha sido eliminado por outra pessoa.",
+       "cannotdelete-title": "Não é possível eliminar a página “$1”",
+       "delete-scheduled": "A página “$1” está agendada para eliminação.\nAguarde a mesma, por favor.",
+       "delete-hook-aborted": "A eliminação foi cancelada por um ''hook''.\nNão foi dada nenhuma explicação.",
+       "no-null-revision": "Não foi possível criar nova revisão nula para a página “$1”",
        "badtitle": "Título inválido",
        "badtitletext": "O título de página solicitado era inválido, vazio, ou um link interlínguas ou interwikis incorreto.\nTalvez contenha um ou mais caracteres que não podem ser usados em títulos.",
        "title-invalid-empty": "O título da página solicitada está vazio ou contém somente o nome do espaço de nomes.",
        "passwordtooshort": "As senhas devem ter no mínimo {{PLURAL:$1|1 caractere|$1 caracteres}}.",
        "passwordtoolong": "Senhas não podem ser maiores do que {{PLURAL:$1|1 caractere|$1 caracteres}}.",
        "passwordtoopopular": "Não podem ser usadas senha vulgares. Escolha uma palavra-passe mais difícil de adivinhar, por favor.",
+       "passwordinlargeblacklist": "A senha digitada está na lista de senhas comumente usadas. Por favor, escolha uma senha mais exclusiva.",
        "password-name-match": "A sua senha deve ser diferente do seu nome de usuário.",
        "password-login-forbidden": "O uso deste nome de usuário e senha foi desautorizado.",
        "mailmypassword": "Redefinir senha",
        "shown-title": "Mostrar $1 {{PLURAL:$1|resultado|resultados}} por página",
        "viewprevnext": "Ver ($1 {{int:pipe-separator}} $2) ($3)",
        "searchmenu-exists": "<strong>Há uma página com o nome \"[[:$1]]\" nesta wiki.</strong> {{PLURAL:$2|0=|Veja também os outros resultados da pesquisa encontrados.}}",
-       "searchmenu-new": "<strong>Criar a página \"[[:$1]]\" nesta wiki!</strong> {{PLURAL:$2|0=|Veja também a página encontrada com sua pesquisa.|Veja também os resultados da pesquisa encontrados.}}",
+       "searchmenu-new": "<strong>Crie a página “[[:$1]]” nesta wiki!</strong> {{PLURAL:$2|0=|Veja também a página encontrada com sua pesquisa.|Veja também os resultados da pesquisa encontrados.}}",
        "searchprofile-articles": "Páginas de conteúdo",
        "searchprofile-images": "Multimídia",
        "searchprofile-everything": "Tudo",
        "timezonelegend": "Fuso horário:",
        "localtime": "Horário local:",
        "timezoneuseserverdefault": "Utilizar padrão da wiki ($1)",
-       "timezoneuseoffset": "Outro (especificar desvio horário)",
+       "timezoneuseoffset": "Outro (especificar desvio horário abaixo)",
+       "timezone-useoffset-placeholder": "Exemplo de valores: \"-07:00\" ou \"01:00\"",
        "servertime": "Horário do servidor:",
        "guesstimezone": "Preencher a partir do navegador",
        "timezoneregion-africa": "África",
        "prefs-editor": "Editor",
        "prefs-preview": "Pré-visualizar",
        "prefs-advancedrc": "Opções avançadas",
-       "prefs-opt-out": "Excluir melhorias",
        "prefs-advancedrendering": "Opções avançadas",
        "prefs-advancedsearchoptions": "Opções avançadas",
        "prefs-advancedwatchlist": "Opções avançadas",
        "prefs-displayrc": "Opções de exibição",
        "prefs-displaywatchlist": "Opções de exibição",
+       "prefs-changesrc": "Mudanças mostradas",
+       "prefs-changeswatchlist": "Mudanças mostradas",
+       "prefs-pageswatchlist": "Páginas vigiadas",
        "prefs-tokenwatchlist": "Senha",
        "prefs-diffs": "Diferenças",
        "prefs-help-prefershttps": "Esta preferência terá efeito no seu próximo início de sessão.",
        "rcfilters-watchlist-markseen-button": "Marcar todas as mudanças como vistas",
        "rcfilters-watchlist-edit-watchlist-button": "Editar lista de páginas vigiadas",
        "rcfilters-watchlist-showupdated": "As alterações nas páginas que você não visitou desde as mudanças ocorridas estão em <strong>negrito</strong>, com marcadores sólidos.",
-       "rcfilters-preference-label": "Ocultar a versão melhorada das Mudanças Recentes",
-       "rcfilters-preference-help": "Reverte o redesenho da interface de 2017 e todas as ferramentas adicionadas na altura e desde então.",
-       "rcfilters-watchlist-preference-label": "Ocultar a versão melhorada das páginas vigiadas",
-       "rcfilters-watchlist-preference-help": "Reverte o redesenho da interface em 2017 e todas as ferramentas adicionadas nessa altura e desde então.",
+       "rcfilters-preference-label": "Use a interface não JavaScript",
+       "rcfilters-preference-help": "Carrega RecentChanges sem filtros ou realce de funcionalidade.",
+       "rcfilters-watchlist-preference-label": "Use a interface não JavaScript",
+       "rcfilters-watchlist-preference-help": "Carrega Páginas vigiadas sem filtros ou funcionalidade de destaque.",
        "rcfilters-filter-showlinkedfrom-label": "Mostrar alterações nas páginas ligadas de",
        "rcfilters-filter-showlinkedfrom-option-label": "<strong>Páginas ligadas da</strong> página selecionada",
        "rcfilters-filter-showlinkedto-label": "Mostrar alterações nas páginas que ligam para",
        "contribsub2": "Para {{GENDER:$3|$1}} ($2)",
        "contributions-userdoesnotexist": "A conta de usuário \"$1\" não está registrada.",
        "nocontribs": "Não foram encontradas mudanças com este critério.",
-       "uctop": "(atual)",
+       "uctop": "atual",
        "month": "Mês (inclusive anteriores):",
        "year": "Ano (inclusive anteriores):",
        "date": "A partir da data (e anterior):",
        "move-watch": "Vigiar esta página",
        "movepagebtn": "Mover página",
        "pagemovedsub": "Página movida com sucesso",
+       "cannotmove": "Não foi possível mover a página {{PLURAL:$1|pela seguinte razão|pelas seguintes razões}}:",
        "movepage-moved": "'''\"$1\" foi movida para \"$2\"'''",
        "movepage-moved-redirect": "Um redirecionamento foi criado.",
        "movepage-moved-noredirect": "A criação de um redirecionamento foi suprimida.",
        "svg-long-error": "Arquivo SVG inválido: $1",
        "show-big-image": "Arquivo original",
        "show-big-image-preview": "Tamanho desta previsualização: $1.",
-       "show-big-image-preview-differ": "Tamanho desta visualização de $3 deste arquivo de $2: $1.",
+       "show-big-image-preview-differ": "Tamanho desta visualização em $3 deste arquivo em $2: $1.",
        "show-big-image-other": "{{PLURAL:$2|Outra resolução|Outras resoluções}}: $1.",
        "show-big-image-size": "$1 × $2 pixels",
        "file-info-gif-looped": "cíclico",
        "sunday-at": "Domingo às $1",
        "yesterday-at": "Ontem às $1",
        "bad_image_list": "O formato é o seguinte:\n\nSó são reconhecidos elementos na forma de lista (linhas começadas por *).\nO primeiro link em cada linha deve direcionar para o arquivo que se pretende bloquear.\nQuaisquer outros links nessa mesma linha são considerados exceções (ou seja, páginas onde o arquivo pode estar presente).",
+       "variantname-zh-hans": "hans",
+       "variantname-zh-hant": "hant",
+       "variantname-zh-cn": "cn",
+       "variantname-zh-tw": "tw",
+       "variantname-zh-hk": "hk",
+       "variantname-zh-mo": "mo",
+       "variantname-zh-sg": "sg",
+       "variantname-zh-my": "my",
+       "variantname-zh": "zh",
+       "variantname-gan-hans": "hans",
+       "variantname-gan-hant": "hant",
+       "variantname-gan": "gan",
+       "variantname-sr-ec": "sr-ec",
+       "variantname-sr-el": "sr-el",
+       "variantname-sr": "sr",
+       "variantname-kk-kz": "kk-kz",
+       "variantname-kk-tr": "kk-tr",
+       "variantname-kk-cn": "kk-cn",
+       "variantname-kk-cyrl": "kk-cyrl",
+       "variantname-kk-latn": "kk-latn",
+       "variantname-kk-arab": "kk-arab",
+       "variantname-kk": "kk",
+       "variantname-ku-arab": "ku-Arab",
+       "variantname-ku-latn": "ku-Latn",
+       "variantname-ku": "ku",
+       "variantname-tg-cyrl": "tg-Cyrl",
+       "variantname-tg-latn": "tg-Latn",
+       "variantname-tg": "tg",
+       "variantname-ike-cans": "ike-Cans",
+       "variantname-ike-latn": "ike-Latn",
+       "variantname-iu": "iu",
+       "variantname-shi-tfng": "shi-Tfng",
+       "variantname-shi-latn": "shi-Latn",
+       "variantname-shi": "shi",
+       "variantname-uz": "uz",
        "metadata": "Metadados",
        "metadata-help": "Este arquivo contém dados adicionais, provavelmente adicionados pela câmera digital ou scanner utilizado para criar ou digitalizá-lo.\nCaso o arquivo tenha sofrido alterações, alguns detalhes poderão ser diferentes do que o arquivo atual é.",
        "metadata-expand": "Mostrar detalhes adicionais",
        "tags": "Etiquetas de modificação válidas",
        "tag-filter": "Filtrar [[Special:Tags|etiquetas]]:",
        "tag-filter-submit": "Filtrar",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Etiqueta|Etiquetas}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Etiqueta|Etiquetas}}]]: $2",
        "tag-mw-contentmodelchange": "Mudança de modelo de conteúdo",
        "tag-mw-contentmodelchange-description": "Edições que [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:ChangeContentModel alteram o modelo de conteúdo] de uma página",
        "tag-mw-new-redirect": "Novo redirecionamento",
        "tag-mw-blank-description": "Edita em branco uma página",
        "tag-mw-replace": "Substituído",
        "tag-mw-replace-description": "Edições que removem mais de 90% do conteúdo de uma página",
-       "tag-mw-rollback": "Reverter",
+       "tag-mw-rollback": "Reversão",
        "tag-mw-rollback-description": "Edições que revertem edições anteriores usando o link de reversão",
        "tag-mw-undo": "Desfazer",
        "tag-mw-undo-description": "Edições que desfazem edições anteriores usando o link de desfazer",
        "dberr-again": "Experimente esperar alguns minutos e atualizar.",
        "dberr-info": "(Não pode acessar a base de dados: $1)",
        "dberr-info-hidden": "(Não foi possível acessar o banco de dados)",
-       "dberr-usegoogle": "Você pode tentar pesquisar no Google entretanto.",
-       "dberr-outofdate": "Note que os seus índices relativos ao nosso conteúdo podem estar desatualizados.",
-       "dberr-cachederror": "A seguinte página é uma cópia em cache da página pedida e pode não ser atual.",
        "htmlform-invalid-input": "Existem problemas com alguns dos dados introduzidos",
        "htmlform-select-badoption": "O valor que você especificou não é uma opção válida.",
        "htmlform-int-invalid": "O valor que você especificou não é um número inteiro.",
        "logentry-block-reblock": "$1 {{GENDER:$2|modificou}} configurações de bloqueio para {{GENDER:$4|$3}} com um tempo de expiração de $5 $6",
        "logentry-partialblock-block": "$1 {{GENDER:$2|aplicou a}} {{GENDER:$4|$3}} um bloqueio que impede a edição {{PLURAL:$8|da página|das páginas}} $7 com um prazo de expiração de $5 $6",
        "logentry-partialblock-reblock": "$1 {{GENDER:$2|alterou}} as definições do bloqueio de {{GENDER:$4|$3}} para impedir a edição {{PLURAL:$8|da página|das páginas}} $7 com um prazo de expiração de $5 $6",
-       "logentry-non-editing-block-block": "$1 {{GENDER:$2|aplicou a}} {{GENDER:$4|$3}} um bloqueio que impede as operações que não sejam edições, com um prazo de expiração de $5 $6",
-       "logentry-non-editing-block-reblock": "$1 {{GENDER:$2|alterou}} as definições do bloqueio de {{GENDER:$4|$3}} para impedir as operações que não sejam edições, com um prazo de expiração de $5 $6",
+       "logentry-non-editing-block-block": "$1 {{GENDER:$2|aplicou a}} {{GENDER:$4|$3}} um bloqueio que impede as operações que não sejam edições especificada , com um prazo de expiração de $5 $6",
+       "logentry-non-editing-block-reblock": "$1 {{GENDER:$2|alterou}} as definições do bloqueio de {{GENDER:$4|$3}} para impedir as operações que não sejam edições especificada, com um prazo de expiração de $5 $6",
        "logentry-suppress-block": "$1 {{GENDER:$2|bloqueou}} {{GENDER:$4|$3}} com um tempo de expiração de $5 $6",
        "logentry-suppress-reblock": "$1 {{GENDER:$2|modificou}} configurações de bloqueio de {{GENDER:$4|$3}} com um tempo de expiração de $5 $6",
        "logentry-import-upload": "$1 {{GENDER:$2|importado}} $3 por envio de arquivo",
        "mw-widgets-mediasearch-input-placeholder": "Procurar por mídia",
        "mw-widgets-mediasearch-noresults": "Nenhum resultado encontrado.",
        "mw-widgets-titleinput-description-new-page": "a página ainda não existe",
-       "mw-widgets-titleinput-description-redirect": "redirecionar para $1",
+       "mw-widgets-titleinput-description-redirect": "redireciona para $1",
        "mw-widgets-categoryselector-add-category-placeholder": "Adicionar uma categoria...",
        "mw-widgets-usersmultiselect-placeholder": "Adicionar mais…",
        "mw-widgets-titlesmultiselect-placeholder": "Adicionar mais…",
        "passwordpolicies-policy-passwordcannotmatchblacklist": "A senha não pode corresponder senhas especificamente na lista negra",
        "passwordpolicies-policy-maximalpasswordlength": "A senha deve ser menor que $1 {{PLURAL:$1|caráter|caracteres}}",
        "passwordpolicies-policy-passwordcannotbepopular": "A senha não pode {{PLURAL:$1|ser a mais popular|estar na lista das $1 palavras-passe mais populares}}",
+       "passwordpolicies-policy-passwordnotinlargeblacklist": "A senha não pode estar na lista de 100.000 senhas mais usadas.",
        "easydeflate-invaliddeflate": "O conteúdo fornecido não está devidamente comprimido",
        "unprotected-js": "Por razões de segurança o JavaScript não pode ser carregado de páginas desprotegidas. Por favor, crie apenas javascript no MediaWiki: namespace ou como uma subpágina do usuário"
 }
index 3b593d4..84c33e2 100644 (file)
        "navigation-heading": "Menu de navegação",
        "errorpagetitle": "Erro",
        "returnto": "Voltar para $1.",
-       "tagline": "Da wiki {{SITENAME}}",
+       "tagline": "Fonte: {{SITENAME}}",
        "help": "Ajuda",
        "search": "Pesquisa",
        "search-ignored-headings": " #<!-- deixe esta linha exatamente como ela está --> <pre>\n# Títulos de página que serão ignorados pela pesquisa.\n# Mudanças a esta lista terão efeito quando a página com o título referido for indexada.\n# Pode forçar a indexação de uma página realizando uma edição nula nessa página.\n# A sintaxe é a seguinte:\n#  * Tudo desde um símbolo de cardinal (#) até ao fim da linha é um comentário\n#  * Cada linha não vazia é o título exato a ignorar, respeitando o uso de maiúsculas\nReferências\nHiperligações externas\nVer também\n #</pre> <!-- deixe esta linha exatamente como ela está -->",
        "passwordtooshort": "A palavra-passe deve ter no mínimo $1 {{PLURAL:$1|carácter|caracteres}}.",
        "passwordtoolong": "A palavra-passe não pode exceder $1 {{PLURAL:$1|carácter|caracteres}}.",
        "passwordtoopopular": "Não podem ser usadas palavras-passe vulgares. Escolha uma palavra-passe mais difícil de adivinhar, por favor.",
+       "passwordinlargeblacklist": "A palavra-passe que introduziu consta numa lista de palavras-passe usadas com muita frequência. Escolha uma palavra-passe menos vulgar, por favor.",
        "password-name-match": "A sua palavra-passe tem de ser diferente do seu nome de utilizador.",
        "password-login-forbidden": "Foi proibido o uso deste nome de utilizador e palavra-passe.",
        "mailmypassword": "Reiniciar a palavra-passe",
        "prefs-editor": "Editor",
        "prefs-preview": "Antevisão",
        "prefs-advancedrc": "Opções avançadas",
-       "prefs-opt-out": "Excluir de melhoramentos",
        "prefs-advancedrendering": "Opções avançadas",
        "prefs-advancedsearchoptions": "Opções avançadas",
        "prefs-advancedwatchlist": "Opções avançadas",
        "prefs-displayrc": "Opções de apresentação",
        "prefs-displaywatchlist": "Opções de apresentação",
+       "prefs-changesrc": "Mudanças mostradas",
+       "prefs-changeswatchlist": "Mudanças mostradas",
+       "prefs-pageswatchlist": "Páginas vigiadas",
        "prefs-tokenwatchlist": "Chave",
        "prefs-diffs": "Diferenças",
        "prefs-help-prefershttps": "Esta preferência terá efeito no seu próximo início de sessão.",
        "rcfilters-watchlist-markseen-button": "Marcar todas as mudanças como já vistas",
        "rcfilters-watchlist-edit-watchlist-button": "Editar a sua lista de páginas vigiadas",
        "rcfilters-watchlist-showupdated": "As mudanças das páginas que ainda não visitou após terem sido alteradas aparecem a <strong>negrito</strong>, com marcadores sólidos.",
-       "rcfilters-preference-label": "Ocultar a versão melhorada das mudanças recentes",
-       "rcfilters-preference-help": "Reverte o redesenho da interface de 2017 e todas as ferramentas adicionadas na altura e desde então.",
-       "rcfilters-watchlist-preference-label": "Ocultar a versão melhorada das páginas vigiadas",
-       "rcfilters-watchlist-preference-help": "Reverte o redesenho da interface em 2017 e todas as ferramentas adicionadas nessa altura e desde então.",
+       "rcfilters-preference-label": "Usar interface que não é em JavaScript",
+       "rcfilters-preference-help": "Carrega as mudanças recentes sem filtros nem funcionalidade de realce.",
+       "rcfilters-watchlist-preference-label": "Usar interface que não é em JavaScript",
+       "rcfilters-watchlist-preference-help": "Carrega a lista de páginas vigiadas sem filtros nem funcionalidade de realce.",
        "rcfilters-filter-showlinkedfrom-label": "Mostrar mudanças de páginas para as quais esta página contém hiperligações",
        "rcfilters-filter-showlinkedfrom-option-label": "<strong>Páginas para as quais</strong> a página selecionada contém hiperligações",
        "rcfilters-filter-showlinkedto-label": "Mostrar mudanças nas páginas que contêm hiperligações para",
        "categories-submit": "Mostrar",
        "categoriespagetext": "{{PLURAL:$1|A seguinte categoria existe na wiki e pode, ou não, ser usada|As seguintes categorias existem na wiki e podem, ou não, ser usadas}}.\nVeja também as [[Special:WantedCategories|categorias desejadas]].",
        "categoriesfrom": "Mostrar categorias que comecem por:",
-       "deletedcontributions": "Edições eliminadas",
+       "deletedcontributions": "Contribuições eliminadas",
        "deletedcontributions-title": "Edições eliminadas",
        "sp-deletedcontributions-contribs": "contribuições",
        "linksearch": "Pesquisa de hiperligações externas",
        "contribsub2": "Para {{GENDER:$3|$1}} ($2)",
        "contributions-userdoesnotexist": "A conta de utilizador \"$1\" não está registada.",
        "nocontribs": "Não foram encontradas alterações com este critério.",
-       "uctop": "(atual)",
+       "uctop": "atual",
        "month": "Até o mês:",
        "year": "Até o ano:",
        "date": "Na data (e anteriores):",
        "move-watch": "Vigiar a página original e a nova",
        "movepagebtn": "Mover página",
        "pagemovedsub": "Página movida",
+       "cannotmove": "Não foi possível mover a página {{PLURAL:$1|pela seguinte razão|pelas seguintes razões}}:",
        "movepage-moved": "<strong>\"$1\" foi movida para \"$2\"</strong>",
        "movepage-moved-redirect": "Foi criado um redirecionamento.",
        "movepage-moved-noredirect": "A criação de um redirecionamento foi suprimida.",
        "exif-gpsprocessingmethod": "Nome do método de processamento do GPS",
        "exif-gpsareainformation": "Nome da área do GPS",
        "exif-gpsdatestamp": "Data do GPS",
-       "exif-gpsdifferential": "Correcção do diferencial do GPS",
+       "exif-gpsdifferential": "Correção do diferencial do GPS",
        "exif-jpegfilecomment": "Comentário de ficheiro JPEG",
        "exif-keywords": "Termos-chave",
        "exif-worldregioncreated": "Região do mundo onde a fotografia foi tirada",
        "exif-scenecapturetype-0": "Padrão",
        "exif-scenecapturetype-1": "Paisagem",
        "exif-scenecapturetype-2": "Retrato",
-       "exif-scenecapturetype-3": "Cena nocturna",
+       "exif-scenecapturetype-3": "Cena noturna",
        "exif-gaincontrol-0": "Nenhum",
        "exif-gaincontrol-1": "Ganho positivo baixo",
        "exif-gaincontrol-2": "Ganho positivo alto",
        "tags": "Etiquetas de modificação válidas",
        "tag-filter": "Filtro de [[Special:Tags|etiquetas]]:",
        "tag-filter-submit": "Filtrar",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Etiqueta|Etiquetas}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Etiqueta|Etiquetas}}]]: $2",
        "tag-mw-contentmodelchange": "alteração do modelo de conteúdo",
        "tag-mw-contentmodelchange-description": "Edições que [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:ChangeContentModel alteram o modelo de conteúdo] de uma página",
        "tag-mw-new-redirect": "Novo redirecionamento",
        "dberr-again": "Experimente esperar alguns minutos e atualizar.",
        "dberr-info": "(Não foi possível aceder ao servidor da base de dados: $1)",
        "dberr-info-hidden": "(Não foi possível aceder ao servidor da base de dados)",
-       "dberr-usegoogle": "Pode tentar pesquisar no Google entretanto.",
-       "dberr-outofdate": "Note que os seus índices relativos ao nosso conteúdo podem estar desatualizados.",
-       "dberr-cachederror": "A seguinte página é uma cópia em cache da página pedida e pode não estar atualizada.",
        "htmlform-invalid-input": "Existem problemas com alguns dos dados introduzidos.",
        "htmlform-select-badoption": "O valor que especificou não é uma opção válida.",
        "htmlform-int-invalid": "O valor que especificou não é um inteiro.",
        "logentry-block-reblock": "$1 {{GENDER:$2|modificou}} parâmetros de bloqueio de {{GENDER:$4|$3}} com expiração a $5 $6",
        "logentry-partialblock-block": "$1 {{GENDER:$2|aplicou a}} {{GENDER:$4|$3}} um bloqueio que impede a edição {{PLURAL:$8|da página|das páginas}} $7 com um prazo de expiração de $5 $6",
        "logentry-partialblock-reblock": "$1 {{GENDER:$2|alterou}} as definições do bloqueio de {{GENDER:$4|$3}} para impedir a edição {{PLURAL:$8|da página|das páginas}} $7 com um prazo de expiração de $5 $6",
-       "logentry-non-editing-block-block": "$1 {{GENDER:$2|aplicou a}} {{GENDER:$4|$3}} um bloqueio que impede as operações que não sejam edições, com um prazo de expiração de $5 $6",
-       "logentry-non-editing-block-reblock": "$1 {{GENDER:$2|alterou}} as definições do bloqueio de {{GENDER:$4|$3}} para impedir as operações que não sejam edições, com um prazo de expiração de $5 $6",
+       "logentry-non-editing-block-block": "$1 {{GENDER:$2|aplicou a}} {{GENDER:$4|$3}} um bloqueio que impede as operações especificadas que não são edições, com um prazo de expiração de $5 $6",
+       "logentry-non-editing-block-reblock": "$1 {{GENDER:$2|alterou}} as definições do bloqueio de {{GENDER:$4|$3}} para impedir as operações especificadas que não são edições, com um prazo de expiração de $5 $6",
        "logentry-suppress-block": "$1 {{GENDER:$2|bloqueou}} {{GENDER:$4|$3}} com expiração a $5 $6",
        "logentry-suppress-reblock": "$1 {{GENDER:$2|modificou}} parâmetros de bloqueio de {{GENDER:$4|$3}} com expiração a $5 $6",
        "logentry-import-upload": "$1 {{GENDER:$2|importou}} $3 através de carregamento de ficheiro",
        "special-characters-title-emdash": "travessão",
        "special-characters-title-minus": "sinal de subtração",
        "mw-widgets-abandonedit": "Tem a certeza de que deseja sair do modo de edição sem antes gravar as alterações?",
-       "mw-widgets-abandonedit-discard": "Ignorar alterações",
+       "mw-widgets-abandonedit-discard": "Descartar edições",
        "mw-widgets-abandonedit-keep": "Continuar a editar",
        "mw-widgets-abandonedit-title": "Tem a certeza?",
        "mw-widgets-dateinput-no-date": "Não foi selecionada nenhuma data",
        "mw-widgets-mediasearch-input-placeholder": "Procurar ficheiros multimédia",
        "mw-widgets-mediasearch-noresults": "Não foram encontrados resultados.",
        "mw-widgets-titleinput-description-new-page": "a página ainda não existe.",
-       "mw-widgets-titleinput-description-redirect": "redirecionar para $1",
+       "mw-widgets-titleinput-description-redirect": "redireciona para $1",
        "mw-widgets-categoryselector-add-category-placeholder": "Adicionar uma categoria...",
        "mw-widgets-usersmultiselect-placeholder": "Adicionar mais...",
        "mw-widgets-titlesmultiselect-placeholder": "Adicionar mais...",
        "passwordpolicies-policy-passwordcannotmatchblacklist": "A palavra-passe não pode corresponder às especificamente bloqueadas pela lista negra",
        "passwordpolicies-policy-maximalpasswordlength": "A palavra-passe tem de ter menos de $1 {{PLURAL:$1|carácter|caracteres}}",
        "passwordpolicies-policy-passwordcannotbepopular": "A palavra-passe não pode {{PLURAL:$1|ser a mais popular|estar na lista das $1 palavras-passe mais populares}}",
+       "passwordpolicies-policy-passwordnotinlargeblacklist": "A palavra-passe não pode constar na lista das 100 000 palavras-passe usadas com mais frequência.",
        "easydeflate-invaliddeflate": "O conteúdo fornecido não está devidamente comprimido",
        "unprotected-js": "Por motivos de segurança o JavaScript de páginas desprotegidas não pode ser carregado. Crie javascript só no espaço nominal/domínio MediaWiki: ou numa subpágina do utilizador"
 }
index 3227da4..4cbe2e5 100644 (file)
                        "ديفيد",
                        "Daimona Eaytoy",
                        "A2093064",
-                       "BadDog"
+                       "BadDog",
+                       "The Discoverer"
                ]
        },
        "sidebar": "{{notranslate}}",
        "passwordtooshort": "This message is shown in [[Special:Preferences]] and [[Special:CreateAccount]].\n\nParameters:\n* $1 - the minimum number of characters in the password",
        "passwordtoolong": "This message is shown in [[Special:Preferences]], [[Special:CreateAccount]], and [[Special:Userlogin]].\n\nParameters:\n* $1 - the maximum number of characters in the password",
        "passwordtoopopular": "Shown if the user chooses a really popular password.",
+       "passwordinlargeblacklist": "Shown if the user chooses a very common password.",
        "password-name-match": "Used as error message when password validity check failed.",
        "password-login-forbidden": "Error message shown when the user has tried to log in using one of the special username/password combinations used for MediaWiki testing. (See [[mwr:75589]], [[mwr:75605]].)",
        "mailmypassword": "Used as label for Submit button in [[Special:PasswordReset]].\n{{Identical|Reset password}}",
        "previewerrortext": "When a user has the editing preference LivePreview enabled, clicked the Preview or Show Changes button in the edit page and the action did not succeed.",
        "blockedtitle": "Used as title displayed for blocked users. The corresponding message body is one of the following messages:\n* {{msg-mw|Blockedtext|notext=1}}\n* {{msg-mw|Autoblockedtext|notext=1}}\n* {{msg-mw|Systemblockedtext}}",
        "blocked-email-user": "Text displayed to partially blocked users that are blocked from sending email.\n\n\"email this user\" should be consistent with {{msg-mw|Emailuser}}.\n\nParameters:\n* $1 - the blocking sysop (with a link to his/her userpage)\n* $2 - the reason for the block\n* $3 - the current IP address of the blocked user\n* $4 - (Unused) the blocking sysop's username (plain text, without the link)\n* $5 - the unique numeric identifier of the applied autoblock\n* $6 - the expiry of the block\n* $7 - the intended target of the block (what the blocking user specified in the blocking form)\n* $8 - the timestamp when the block started\nSee also:\n* {{msg-mw|Grouppage-sysop}}\n* {{msg-mw|Autoblockedtext}}\n* {{msg-mw|Systemblockedtext}}",
-       "blockedtext-partial": "Text displayed to partially blocked users.\n\n\"email this user\" should be consistent with {{msg-mw|Emailuser}}.\n\nParameters:\n* $1 - the blocking sysop (with a link to his/her userpage)\n* $2 - the reason for the block\n* $3 - the current IP address of the blocked user\n* $4 - (Unused) the blocking sysop's username (plain text, without the link)\n* $5 - the unique numeric identifier of the applied autoblock\n* $6 - the expiry of the block\n* $7 - the intended target of the block (what the blocking user specified in the blocking form)\n* $8 - the timestamp when the block started\nSee also:\n* {{msg-mw|Grouppage-sysop}}\n* {{msg-mw|Autoblockedtext}}\n* {{msg-mw|Systemblockedtext}}",
-       "blockedtext": "Text displayed to blocked users.\n\n\"email this user\" should be consistent with {{msg-mw|Emailuser}}.\n\nParameters:\n* $1 - the blocking sysop (with a link to his/her userpage)\n* $2 - the reason for the block\n* $3 - the current IP address of the blocked user\n* $4 - (Unused) the blocking sysop's username (plain text, without the link)\n* $5 - the unique numeric identifier of the applied autoblock\n* $6 - the expiry of the block\n* $7 - the intended target of the block (what the blocking user specified in the blocking form)\n* $8 - the timestamp when the block started\nSee also:\n* {{msg-mw|Grouppage-sysop}}\n* {{msg-mw|Autoblockedtext}}\n* {{msg-mw|Systemblockedtext}}",
-       "autoblockedtext": "Text displayed to automatically blocked users.\n\n\"email this user\" should be consistent with {{msg-mw|Emailuser}}.\n\nParameters:\n* $1 - the blocking sysop (with a link to his/her userpage)\n* $2 - the reason for the block (in case of autoblocks: {{msg-mw|autoblocker}})\n* $3 - the current IP address of the blocked user\n* $4 - (Unused) the blocking sysop's username (plain text, without the link). Use it for GENDER.\n* $5 - the unique numeric identifier of the applied autoblock\n* $6 - the expiry of the block\n* $7 - the intended target of the block (what the blocking user specified in the blocking form)\n* $8 - the timestamp when the block started\nSee also:\n* {{msg-mw|Grouppage-sysop}}\n* {{msg-mw|Blockedtext}}\n* {{msg-mw|Systemblockedtext}}",
-       "systemblockedtext": "Text displayed to requests blocked by MediaWiki configuration.\n\n\"email this user\" should be consistent with {{msg-mw|Emailuser}}.\n\nParameters:\n* $1 - (Unused) A dummy user attributed as the blocker, possibly as a link to a user page.\n* $2 - the reason for the block\n* $3 - the current IP address of the blocked user\n* $4 - (Unused) the dummy blocking user's username (plain text, without the link).\n* $5 - A short string indicating the type of system block.\n* $6 - the expiry of the block\n* $7 - the intended target of the block\n* $8 - the timestamp when the block started\nSee also:\n* {{msg-mw|Grouppage-sysop}}\n* {{msg-mw|Blockedtext}}\n* {{msg-mw|Autoblockedtext}}",
+       "blockedtext-partial": "Text displayed to partially blocked users.\n\n\"email this user\" should be consistent with {{msg-mw|Emailuser}}.\n\nParameters:\n* $1 - the blocking sysop (with a link to his/her userpage)\n* $2 - the reason for the block\n* $3 - the current IP address of the blocked user\n* $4 - (Unused) the blocking sysop's username (plain text, without the link)\n* $5 - the unique numeric identifier of the applied autoblock\n* $6 - the expiry of the block\n* $7 - the intended target of the block (what the blocking user specified in the blocking form)\n* $8 - the timestamp when the block started\n\nSee also:\n* {{msg-mw|Grouppage-sysop}}\n* {{msg-mw|Autoblockedtext|notext=1}}\n* {{msg-mw|Systemblockedtext|notext=1}}",
+       "blockedtext": "Text displayed to blocked users.\n\n\"email this user\" should be consistent with {{msg-mw|Emailuser}}.\n\nParameters:\n* $1 - the blocking sysop (with a link to his/her userpage)\n* $2 - the reason for the block\n* $3 - the current IP address of the blocked user\n* $4 - (Unused) the blocking sysop's username (plain text, without the link)\n* $5 - the unique numeric identifier of the applied autoblock\n* $6 - the expiry of the block\n* $7 - the intended target of the block (what the blocking user specified in the blocking form)\n* $8 - the timestamp when the block started\nSee also:\n* {{msg-mw|Grouppage-sysop}}\n* {{msg-mw|Autoblockedtext|notext=1}}\n* {{msg-mw|Systemblockedtext|notext=1}}",
+       "autoblockedtext": "Text displayed to automatically blocked users.\n\n\"email this user\" should be consistent with {{msg-mw|Emailuser}}.\n\nParameters:\n* $1 - the blocking sysop (with a link to his/her userpage)\n* $2 - the reason for the block (in case of autoblocks: {{msg-mw|autoblocker}})\n* $3 - the current IP address of the blocked user\n* $4 - (Unused) the blocking sysop's username (plain text, without the link). Use it for GENDER.\n* $5 - the unique numeric identifier of the applied autoblock\n* $6 - the expiry of the block\n* $7 - the intended target of the block (what the blocking user specified in the blocking form)\n* $8 - the timestamp when the block started\nSee also:\n* {{msg-mw|Grouppage-sysop}}\n* {{msg-mw|Blockedtext|notext=1}}\n* {{msg-mw|Systemblockedtext|notext=1}}",
+       "systemblockedtext": "Text displayed to requests blocked by MediaWiki configuration.\n\n\"email this user\" should be consistent with {{msg-mw|Emailuser}}.\n\nParameters:\n* $1 - (Unused) A dummy user attributed as the blocker, possibly as a link to a user page.\n* $2 - the reason for the block\n* $3 - the current IP address of the blocked user\n* $4 - (Unused) the dummy blocking user's username (plain text, without the link).\n* $5 - A short string indicating the type of system block.\n* $6 - the expiry of the block\n* $7 - the intended target of the block\n* $8 - the timestamp when the block started\nSee also:\n* {{msg-mw|Grouppage-sysop}}\n* {{msg-mw|Blockedtext|notext=1}}\n* {{msg-mw|Autoblockedtext|notext=1}}",
        "blockednoreason": "Substituted with <code>$2</code> in the following message if the reason is not given:\n* {{msg-mw|cantcreateaccount-text}}.\n{{Identical|No reason given}}",
        "whitelistedittext": "Used as error message. Parameters:\n* $1 - a link to [[Special:UserLogin]] with {{msg-mw|loginreqlink}} as link description\nSee also:\n* {{msg-mw|Nocreatetext}}\n* {{msg-mw|Uploadnologintext}}\n* {{msg-mw|Loginreqpagetext}}",
        "confirmedittext": "Used as error message.",
        "edit-gone-missing": "Used as error message.\n\nSee also:\n* {{msg-mw|edit-hook-aborted}}\n* {{msg-mw|edit-conflict}}\n* {{msg-mw|edit-no-change}}\n* {{msg-mw|edit-already-exists}}",
        "edit-conflict": "An 'Edit conflict' happens when more than one edit is being made to a page at the same time. This would usually be caused by separate individuals working on the same page. However, if the system is slow, several edits from one individual could back up and attempt to apply simultaneously - causing the conflict.\n\nSee also:\n* {{msg-mw|edit-hook-aborted}}\n* {{msg-mw|edit-gone-missing}}\n* {{msg-mw|edit-no-change}}\n* {{msg-mw|edit-already-exists}}",
        "edit-no-change": "Used as error message.\n\nSee also:\n* {{msg-mw|edit-hook-aborted}}\n* {{msg-mw|edit-gone-missing}}\n* {{msg-mw|edit-conflict}}\n* {{msg-mw|edit-already-exists}}",
+       "edit-slots-cannot-add": "An error message shown when trying to save an edit, if the edit tries to add a {{Identical|slot}} that is not allowed on the page.\n* $1 - the number of slots\n* $2 - the slots that were attempted to be added but are not allowed",
+       "edit-slots-cannot-remove": "An error message shown when trying to save an edit, if the edit tries to remove a {{Identical|slot}} that is required on the page.\n* $1 - the number of slots\n* $2 - the slots that were attempted to be removed but are required",
+       "edit-slots-missing": "An error message shown when trying to save an edit, if the edit is missing some required {{Identical|slot}}, which could not be inherited from a parent revision.\n* $1 - the number of slots\n* $2 - the slots that are required but missing from the new revision",
        "postedit-confirmation-created": "{{gender}}\nShown after a user creates a new page. Parameters:\n* $1 - the current user, for GENDER support",
        "postedit-confirmation-restored": "{{gender}}\nShown after a user restores a page to a previous revision. Parameters:\n* $1 - the current user, for GENDER support",
        "postedit-confirmation-saved": "{{gender}}\nShown after a user saves a page. Parameters:\n* $1 - the current user, for GENDER support",
        "defaultmessagetext": "Caption above the default message text shown on the left-hand side of a diff displayed after clicking \"Show changes\" when creating a new page in the MediaWiki: namespace",
        "content-failed-to-parse": "Error message indicating that the page's content can not be saved because it is syntactically invalid. This may occurr for content types using serialization or a strict markup syntax.\n\nParameters:\n* $1 – content model, any one of the following messages:\n** {{msg-mw|Content-model-wikitext}}\n** {{msg-mw|Content-model-javascript}}\n** {{msg-mw|Content-model-css}}\n** {{msg-mw|Content-model-json}}\n** {{msg-mw|Content-model-text}}\n* $2 – content format as MIME type (e.g. <code>text/css</code>)\n* $3 – specific error message",
        "invalid-content-data": "Error message indicating that the page's content can not be saved because it is invalid. This may occurr for content types with internal consistency constraints.",
-       "content-not-allowed-here": "Error message indicating that the desired content model is not supported in given localtion.\n* $1 - the human readable name of the content model: {{msg-mw|Content-model-wikitext}}, {{msg-mw|Content-model-javascript}}, {{msg-mw|Content-model-json}}, {{msg-mw|Content-model-css}} or {{msg-mw|Content-model-text}}\n* $2 - the title of the page in question",
+       "content-not-allowed-here": "Error message indicating that the desired content model is not supported in given localtion.\n* $1 - the human readable name of the content model: {{msg-mw|Content-model-wikitext}}, {{msg-mw|Content-model-javascript}}, {{msg-mw|Content-model-json}}, {{msg-mw|Content-model-css}} or {{msg-mw|Content-model-text}}\n* $2 - the title of the page in question\n* $3 - the role name of the slot the content is not allowed in",
        "editwarning-warning": "Uses {{msg-mw|Prefs-editing}}",
        "editpage-invalidcontentmodel-title": "Title of error page shown when using an unrecognized content model on EditPage",
        "editpage-invalidcontentmodel-text": "Error message shown when using an unrecognized content model on EditPage. $1 is the user's invalid input",
        "localtime": "Used as label in [[Special:Preferences#mw-prefsection-datetime|preferences]].",
        "timezoneuseserverdefault": "[[Special:Preferences]] > Date and time > Time zone\n\nThis option lets your time zone setting use the one that is used on the wiki (often UTC).\n\nParameters:\n* $1 - timezone name, or timezone offset (in \"%+03d:%02d\" format)",
        "timezoneuseoffset": "Used in \"Time zone\" listbox in [[Special:Preferences#mw-prefsection-datetime|preferences]], \"date and time\" tab.",
+       "timezone-useoffset-placeholder": "Used in \"Time zone\" text input field as placeholder in [[Special:Preferences#mw-prefsection-datetime|preferences]]",
        "servertime": "Used as label in [[Special:Preferences#mw-prefsection-datetime|preferences]].",
        "guesstimezone": "Option to fill in the timezone from the browser setting",
        "timezoneregion-africa": "Used in \"Time zone\" listbox in [[Special:Preferences#mw-prefsection-datetime|preferences]], \"date and time\" tab.\n{{Related|Timezoneregion}}",
        "prefs-editor": "Used in [[Special:Preferences]], tab \"Editing\" ({{int:prefs-editing}}).\n\n{{Identical|Editor}}",
        "prefs-preview": "Used in [[Special:Preferences]], tab \"Editing\".\n{{Identical|Preview}}",
        "prefs-advancedrc": "Used in [[Special:Preferences]], tab \"Recent changes\".\n{{Identical|Advanced options}}",
-       "prefs-opt-out": "Used in [[Special:Preferences]], tabs \"Recent changes\" and \"Watchlist\".",
        "prefs-advancedrendering": "Used in [[Special:Preferences]], tab \"Appearence\".\n{{Identical|Advanced options}}",
        "prefs-advancedsearchoptions": "Used in [[Special:Preferences]], tab \"Search options\".\n{{Identical|Advanced options}}",
        "prefs-advancedwatchlist": "Used in [[Special:Preferences]], tab \"Watchlist\".\n{{Identical|Advanced options}}",
        "prefs-displayrc": "\"Display\" is a noun that specifies the kind of \"options\". So translate as \"options about display\", not as \"display the options\".\n\nUsed in [[Special:Preferences]], tab \"Recent changes\". The display options refer to:\n* {{msg-mw|Recentchangesdays}}\n* {{msg-mw|Recentchangescount}}",
        "prefs-displaywatchlist": "\"Display\" is a noun that specifies the kind of \"options\". So translate as \"options about display\", not as \"display the options\".\n\nUsed in [[Special:Preferences]], tab \"Watchlist\". The display options refer to:\n* {{msg-mw|Prefs-watchlist-days}}\n* {{msg-mw|Prefs-watchlist-edits}}",
+       "prefs-changesrc": "Section heading in [[Special:Preferences]], tab \"Recent changes\". Describes the types of changes/edits that will be shown on Special:RecentChanges (the heading is followed by a list of checkboxes).",
+       "prefs-changeswatchlist": "Section heading in [[Special:Preferences]], tab \"Watchlist\". Describes the types of changes/edits that will be shown on Special:Watchlist (the heading is followed by a list of checkboxes).",
+       "prefs-pageswatchlist": "Section heading in [[Special:Preferences]], tab \"Watchlist\". Describes the types of pages that will be automatically added to the watchlist (the heading is followed by a list of checkboxes).",
        "prefs-tokenwatchlist": "Section heading.\nUsed in [[Special:Preferences]], tab \"Watchlist\".\n{{Identical|Token}}",
        "prefs-diffs": "Used in [[Special:Preferences]], tab \"Misc\".\n{{Identical|Diff}}",
        "prefs-help-prefershttps": "Used as help text for the checkbox in [[Special:Preferences]].\n\nThe checkbox has the label {{msg-mw|Tog-prefershttps}}.\n\nSee example: [[mw:Special:Preferences]].",
        "move-watch": "The text of the checkbox to watch the pages you are moving from and to. If checked, both the destination page and the original page will be added to the watchlist, even if you decide not to leave a redirect behind.\n\nSee also:\n* {{msg-mw|Move-page-legend|legend for the form}}\n* {{msg-mw|newtitle|label for new title}}\n* {{msg-mw|Movereason|label for textarea}}\n* {{msg-mw|Movetalk|label for checkbox}}\n* {{msg-mw|Move-leave-redirect|label for checkbox}}\n* {{msg-mw|Fix-double-redirects|label for checkbox}}\n* {{msg-mw|Move-subpages|label for checkbox}}\n* {{msg-mw|Move-talk-subpages|label for checkbox}}",
        "movepagebtn": "Button label on the special 'Move page'.\n\n{{Identical|Move page}}",
        "pagemovedsub": "Message displayed as aheader of the body, after successfully moving a page from source to target name.",
+       "cannotmove": "Error message for a generic failure while moving a page, to be used together with a specific error message.\n\nParameters:\n* $1 - the number of reasons that were found why the action cannot be performed.",
        "movepage-moved": "Message displayed after successfully moving a page from source to target name.\n\nParameters:\n* $1 - the source page as a link with display name\n* $2 - the target page as a link with display name\n* $3 - (optional) the source page name without a link\n* $4 - (optional) the target page name without a link\nSee also:\n* {{msg-mw|Movepage-moved-redirect}}\n* {{msg-mw|Movepage-moved-noredirect}}",
        "movepage-moved-redirect": "See also:\n* {{msg-mw|Movepage-moved}}\n* {{msg-mw|Movepage-moved-noredirect}}",
        "movepage-moved-noredirect": "The message is shown after pagemove if checkbox \"{{int:move-leave-redirect}}\" was unselected before moving.\n\nSee also:\n* {{msg-mw|Movepage-moved}}\n* {{msg-mw|Movepage-moved-redirect}}",
        "tags-summary": "{{doc-specialpagesummary|tags}}",
        "tag-filter": "Caption of a filter shown on lists of changes (e.g. [[Special:Log]], [[Special:Contributions]], [[Special:Newpages]], [[Special:Recentchanges]], [[Special:Recentchangeslinked]], page histories)",
        "tag-filter-submit": "Caption of the submit button displayed next to the tag filter on lists of changes (e.g. [[Special:Log]], [[Special:Contributions]], [[Special:Newpages]], [[Special:Recentchanges]], [[Special:Recentchangeslinked]], page histories)\n\n{{Identical|Filter}}",
-       "tag-list-wrapper": "Wrapper for the list of tags shown on recent changes, watchlists, history pages and diffs.\n\nParameters:\n* $1 - number of distinct tags for given edit\n* $2 - comma-separated list of tags for given edit",
+       "tag-list-wrapper": "Wrapper for the list of tags shown on recent changes, watchlists, history pages and diffs. The message will be wrapped in {{msg-mw|parentheses-start}} and {{msg-mw|parentheses-end}} if set. \n\nParameters:\n* $1 - number of distinct tags for given edit\n* $2 - comma-separated list of tags for given edit",
        "tag-mw-contentmodelchange": "Change tag for edits that change the content model of a page",
        "tag-mw-contentmodelchange-description": "Description for \"content model change\" change tag",
        "tag-mw-new-redirect": "Change tag for edits that make the page a redirect (either redirect creation or editing an existing page)",
        "dberr-again": "This message does not allow any wiki nor html markup.",
        "dberr-info": "This message does not allow any wiki nor html markup. Parameters:\n* $1 - database server name\nSee also:\n* {{msg-mw|Dberr-info-hidden}} - hides database server name",
        "dberr-info-hidden": "This message does not allow any wiki nor html markup.\n\nSee also:\n* {{msg-mw|Dberr-info}} - shows database server name",
-       "dberr-usegoogle": "This message does not allow any wiki nor html markup.",
-       "dberr-outofdate": "{{doc-singularthey}}\nIn this sentence, '''their''' indexes refers to '''Google's''' indexes. This message does not allow any wiki nor html markup.",
-       "dberr-cachederror": "Used as error message at the bottom of the page.",
        "htmlform-invalid-input": "Used as error message in HTML forms.\n\n* {{msg-mw|Htmlform-required}}\n* {{msg-mw|Htmlform-float-invalid}}\n* {{msg-mw|Htmlform-int-invalid}}\n* {{msg-mw|Htmlform-int-toolow}}\n* {{msg-mw|Htmlform-int-toohigh}}\n* {{msg-mw|Htmlform-select-badoption}}",
        "htmlform-select-badoption": "Used as error message in HTML forms.\n\n* {{msg-mw|Htmlform-invalid-input}}\n* {{msg-mw|Htmlform-required}}\n* {{msg-mw|Htmlform-float-invalid}}\n* {{msg-mw|Htmlform-int-invalid}}\n* {{msg-mw|Htmlform-int-toolow}}\n* {{msg-mw|Htmlform-int-toohigh}}",
        "htmlform-int-invalid": "Used as error message in HTML forms.\n\n* {{msg-mw|Htmlform-invalid-input}}\n* {{msg-mw|Htmlform-required}}\n* {{msg-mw|Htmlform-float-invalid}}\n* {{msg-mw|Htmlform-int-toolow}}\n* {{msg-mw|Htmlform-int-toohigh}}\n* {{msg-mw|Htmlform-select-badoption}}",
        "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",
-       "mw-widgets-abandonedit": "Text shown when the user tries to leave the editor without saving their changes.\n\nFollowed by the following buttons:\n* {{msg-mw|visualeditor-viewpage-savewarning-discard}}\n* {{msg-mw|visualeditor-viewpage-savewarning-keep}}",
-       "mw-widgets-abandonedit-discard": "Text shown on the button which closes an editor and discards changes when the user confirms that they want to leave the editor.\n\nPreceded by the prompt {{msg-mw|visualeditor-viewpage-savewarning}}.\n\nFollowed by the button {{msg-mw|visualeditor-viewpage-savewarning-keep}}.",
-       "mw-widgets-abandonedit-keep": "Text shown on the button which does not do anything when the user decides that they do not want to leave the editor.\n\nPreceded by the button {{msg-mw|visualeditor-viewpage-savewarning-discard}}.",
+       "mw-widgets-abandonedit": "Text shown when the user tries to leave the editor without saving their changes.\n\nFollowed by the following buttons:\n* {{msg-mw|mw-widgets-abandonedit-discard}}\n* {{msg-mw|mw-widgets-abandonedit-keep}}",
+       "mw-widgets-abandonedit-discard": "Text shown on the button which closes an editor and discards changes when the user confirms that they want to leave the editor.\n\nPreceded by the prompt {{msg-mw|mw-widgets-abandonedit}}.\n\nFollowed by the button {{msg-mw|mw-widgets-abandonedit-keep}}.",
+       "mw-widgets-abandonedit-keep": "Text shown on the button which does not do anything when the user decides that they do not want to leave the editor.\n\nPreceded by the button {{msg-mw|mw-widgets-abandonedit-discard}}.",
        "mw-widgets-abandonedit-title": "Title of the dialog shown when the user tries to leave the editor without saving their changes.\n\nFollowed by the following buttons:\n* {{msg-mw|mw-widgets-abandonedit-discard}}\n* {{msg-mw|mw-widgets-abandonedit-keep}}\n{{Identical|Are you sure?}}",
        "mw-widgets-dateinput-no-date": "Label of a date input field when no date has been selected.",
        "mw-widgets-dateinput-placeholder-day": "[[File:DateInputWidget active, empty.png|frame|Screenshot]]\nPlaceholder displayed in a date input field when it's empty, representing a date format with 4 digits for year, 2 digits for month, and 2 digits for day, separated with hyphens. This should be uppercase, if possible, and must not include any additional explanations. If there is no good way to translate it, make this message blank.",
        "passwordpolicies-policy-passwordcannotmatchblacklist": "Password policy that enforces that passwords are not on a list of blacklisted passwords (often previously used during MediaWiki automated testing)",
        "passwordpolicies-policy-maximalpasswordlength": "Password policy that enforces a maximum number of characters a password must be. $1 - maximum number of characters that a password can be",
        "passwordpolicies-policy-passwordcannotbepopular": "Password policy that enforces that a password is not in a list of $1 number of \"popular\" passwords. $1 - number of popular passwords the password will be checked against",
+       "passwordpolicies-policy-passwordnotinlargeblacklist": "Password policy that enforces that a password is not in a list of 100,000 number of \"popular\" passwords.",
        "easydeflate-invaliddeflate": "Error message if the content passed to easydeflate was not deflated (compressed) properly",
        "unprotected-js": "Error message shown when trying to load javascript via action=raw that is not protected"
 }
index 7a435ff..eb2f4bd 100644 (file)
        "contribsub2": "{{GENDER:$3|$1}}paq ($2)",
        "contributions-userdoesnotexist": "\"$1\" sutiyuq rakiqunaqa manam hallch'asqachu.",
        "nocontribs": "Manam kay hina hukchasqakuna kanchu.",
-       "uctop": "(qhipaq hukchasqa)",
+       "uctop": "qhipaq hukchasqa",
        "month": "Kay killamanta (ñawpaqmantapas):",
        "year": "Kay watamanta (ñawpaqmantapas):",
        "sp-contributions-newbies": "Musuq ruraqkunallap llamk'apusqankunata rikuchiy",
        "tags": "Waliq unancha hukchay",
        "tag-filter": "[[Special:Tags|Unancha]] ch'illchina:",
        "tag-filter-submit": "Ch'illchina",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Unanchacha|Unanchachakuna}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Unanchacha|Unanchachakuna}}]]: $2",
        "tags-title": "Unanchakuna",
        "tags-intro": "Kay p'anqapiqa hukchaykunata llamp'u kaqpa sananchananpaq unanchakunatam rikunki, sut'inkunatapas.",
        "tags-tag": "Unanchachap sutin",
        "dberr-problems": "Achachaw! Kay tiyayqa allwiya sasachakuykunayuqmi kachkan.",
        "dberr-again": "Ratullata suyaspa musuqmanta chaqnaspa huk kutita ruraykachay.",
        "dberr-info": "(Manam atinichu willañiqintin sirwiqwan willanakuyta: $1)",
-       "dberr-usegoogle": "Hinaptinqa Google nisqawan maskayta atinkiman.",
-       "dberr-outofdate": "Musyariy, ñuqaykup samiqniykumanta yuyarisqankunaqa mawk'ayasqañachá.",
-       "dberr-cachederror": "Kay qatiqpiqa mañakusqa p'anqamanta hallch'asqa iskaychasqam, mawk'ayasqañachá.",
        "htmlform-invalid-input": "Yaykuchisqaykiwanqa sasachakuykunam kachkan",
        "htmlform-select-badoption": "Sapaqchasqayki chaniqa manam allin akllanachu.",
        "htmlform-int-invalid": "Sapaqchasqayki chaniqa manam hunt'a yupaychu.",
index b176743..6f5c284 100644 (file)
        "contributions-title": "$1 shutiyuq rurakpa killkaykuna",
        "mycontris": "Nukapak killkaykuna",
        "contribsub2": "$1 ($2)",
-       "uctop": " (kipak killkay)",
+       "uctop": " kipak killkay",
        "month": "Kay killamanta (ñawpakmantapash):",
        "year": "Kay watamanta (ñawpakmantapash) :",
        "sp-contributions-newbies": "Mushuk rurakkunapallami killkaykunata rikuchiy",
index 85e0cb0..03c43db 100644 (file)
        "mycontris": "ⵜⵓⵎⵓⵜⵉⵏ",
        "anoncontribs": "ⵜⵓⵎⵓⵜⵉⵏ",
        "contribsub2": "ⵉ {{GENDER:$3|$1}} ($2)",
-       "uctop": "(ⵜⴰⵎⵉⵔⴰⵏⵜ)",
+       "uctop": "ⵜⴰⵎⵉⵔⴰⵏⵜ",
        "month": "Zg wayur (d zik):",
        "year": "Zg usggwas (d zik):",
        "sp-contributions-newbies": "Ẓar Tabdart n tiggawin n useqdac a deg umiḍan amaynu waha",
index 631ca50..5bbb1df 100644 (file)
        "anoncontribs": "Contribuziuns",
        "contribsub2": "Per {{GENDER:$3|$1}} ($2)",
        "nocontribs": "Chattà naginas modificaziuns che correspundan a quests criteris.",
-       "uctop": "(actual)",
+       "uctop": "actual",
        "month": "dal mais (e pli baud):",
        "year": "da l'onn (e pli baud):",
        "sp-contributions-newbies": "Be mussar contribuziuns da contos novs",
        "tags": "Signalisaziuns per midadas",
        "tag-filter": "Filtrar las [[Special:Tags|Signalisaziuns]]:",
        "tag-filter-submit": "Filtrar",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|signalisaziun|signalisaziuns}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|signalisaziun|signalisaziuns}}]]: $2",
        "tags-title": "Signalisaziuns",
        "tags-intro": "Questa pagina mussa tut las singalisaziuns che la software po duvrar per marcar modificaziuns e declera tge ch'ellas muntan.",
        "tags-tag": "Num da la signalisaziun",
        "dberr-problems": "Stgisa! Questa pagina ha actualmain difficultads tecnicas.",
        "dberr-again": "Spetga in per minutas ed emprova alura da chargiar danovamain.",
        "dberr-info": "(Betg pussaivel da contactar il server da la banca da datas: $1)",
-       "dberr-usegoogle": "Ti pos empruvar da tschertgar cun Google en il fratemp.",
-       "dberr-outofdate": "Resguarda che lur index da noss cuntegn po esser antiquà.",
-       "dberr-cachederror": "Quai è ina copia or dal cache da questa pagina ed è eventualmain betg actuala.",
        "htmlform-invalid-input": "I ha dà problems cun intginas da tias endataziuns",
        "htmlform-select-badoption": "La valur inditgada n'è betg ina opziun valida.",
        "htmlform-int-invalid": "La valur inditgada n'è betg ina cifra entira (integer).",
index fcdf8d8..0053dcc 100644 (file)
        "badarticleerror": "Această acțiune nu poate fi efectuată pe această pagină.",
        "cannotdelete": "Pagina sau fișierul „$1” nu a putut fi șters.\nS-ar putea ca acesta să fi fost deja șters de altcineva.",
        "cannotdelete-title": "Imposibil de șters pagina „$1”",
+       "delete-scheduled": "Pagina \"$1\" este programată să fie ștearsă.\nVă rugăm să aveți răbdare.",
        "delete-hook-aborted": "Ștergerea a fost abandonată din cauza unui hook.\nNicio explicație furnizată.",
        "no-null-revision": "Nu s-a putut crea o nouă versiune nulă pentru pagina „$1”",
        "badtitle": "Titlu incorect",
        "botpasswords-invalid-name": "Numele de utilizator specificat nu conține separatorul de parole pentru bot (\"$1\").",
        "botpasswords-not-exist": "Utilizatorul \"$1\" nu are un bot de parole numit \"$2\".",
        "botpasswords-needs-reset": "Parola de robot pentru robotul \"$1\" al {{GENDER:$2|utilizatorului|utilizatoarei}} \"$2\" trebuie resetată.",
+       "botpasswords-locked": "Nu vă puteți autentifica cu o parolă de robot deoarece contul dumneavoastră este blocat.",
        "resetpass_forbidden": "Parolele nu pot fi schimbate.",
        "resetpass_forbidden-reason": "Parolele nu pot fi schimbate: $1",
        "resetpass-no-info": "Trebuie să fiți autentificat pentru a accesa această pagină direct.",
        "subject-preview": "Previzualizare subiect/titlu:",
        "previewerrortext": "A survenit o eroare ca urmare a tentativei de previzualizare a modificărilor dumneavoastră.",
        "blockedtitle": "Utilizatorul este blocat",
+       "blocked-email-user": "<strong>Contul dumneavoastră a fost blocat de la a trimite email. Puteți edita în continuare alte pagini de pe acest wiki.</strong> Puteți vedea detaliile blocării în [[Special:MyContributions|lista contribuțiilor]].\n\nBlocarea a fost făcută de $1.\n\nMotivul oferit este <em>$2</em>.\n\n* Începutul blocării: $8\n* Expirarea blocării: $6\n* Persoana țintită de blocare: $7\n* ID blocare #$5",
+       "blockedtext-partial": "<strong>Contul dumneavoastră a fost blocat de la a modifica această pagină. Puteți edita în continuare alte pagini de pe acest wiki.</strong> Puteți vedea detaliile blocării în [[Special:MyContributions|lista contribuțiilor]].\n\nBlocarea a fost făcută de $1.\n\nMotivul oferit este <em>$2</em>.\n\n* Începutul blocării: $8\n* Expirarea blocării: $6\n* Persoana țintită de blocare: $7\n* ID blocare #$5",
        "blockedtext": "* Începutul blocării: $8\n* Sfârșitul blocării: $6\n* Utilizatorul vizat: $7\n\nÎl puteți contacta pe $1 sau pe alt [[{{MediaWiki:Grouppage-sysop}}|administrator]] pentru a discuta blocarea.\nNu puteți folosi opțiunea 'trimite un e-mai utilizatorului' decât dacă o adresă de e-mail validă este specificată în [[Special:Preferences|preferințele contului]] și nu sunteți blocat la folosirea ei.\nAdresa dumneavoastră IP curentă este $3, iar ID-ul blocării este #$5. Vă rugăm să includeți toate detaliile de mai sus în orice mesaj.",
        "autoblockedtext": "Această adresă IP a fost blocată automat deoarece a fost folosită de către un alt utilizator, care a fost blocat de $1.\nMotivul blocării este:\n\n:<em>$2</em>\n\n* Începutul blocării: $8\n* Sfârșitul blocării: $6\n* Intervalul blocării: $7\n\nPuteți contacta pe $1 sau pe unul dintre ceilalți [[{{MediaWiki:Grouppage-sysop}}|administratori]] pentru a discuta blocarea.\n\nNu veți putea folosi opțiunea de \"{{int:emailuser}}\" decât dacă aveți înregistrată o adresă de e-mail validă la [[Special:Preferences|preferințe]] și nu sunteți blocat la folosirea ei.\n\nAveți adresa IP $3, iar identificatorul dumneavoastră de blocare este #$5.\nVă rugăm să includeți detaliile de mai sus în orice mesaje pe care le trimiteți.",
        "systemblockedtext": "Numele de utilizator sau adresa IP a fost blocat automat de MediaWiki.\nMotivul indicat este:\n\n:<em>$2</em>\n\n\n* Începutul blocării: $8\n* Expirarea blocării: $6\n* Utilizatorul vizat: $7\n\nAdresa IP curentă a dumneavoastră este $3.\nVă rugăm să includeți toate detaliile de mai sus în orice interogare pe care o veți faceți.",
        "previewconflict": "Această pre-vizualizare reflectă textul din caseta de sus, respectiv felul în care va arăta articolul dacă alegeți să-l salvați acum.",
        "session_fail_preview": "Ne pare rău! Nu am putut procesa modificarea dumneavoastră din cauza pierderii datelor sesiunii.\n\nEste posibil să vă fi deconectat. <strong>Vă rugăm să verificați dacă sunteți încă conectat și să încercați din nou</strong>.\nDacă tot nu funcționează, încercați să [[Special:UserLogout|închideți sesiunea]] și să vă autentificați din nou. Verificați și dacă navigatorul dumneavoastră permite module cookie de la acest site.",
        "session_fail_preview_html": "Ne pare rău! Modificările dvs. nu au putut fi procesate din cauza pierderii datelor sesiunii.\n\n<em>Deoarece {{SITENAME}} are activat HTML brut, previzualizarea este ascunsă ca măsură de precauție împotriva atacurilor JavaScript.</em>\n\n<strong>Dacă această încercare de modificare este legitimă, vă rugăm să încercați din nou. Dacă nu funcționează nici în acest fel, [[Special:UserLogout|închideți sesiunea]] și încercați să vă autentificați din nou. Verificați și dacă navigatorul dumneavoastră permite module cookie de la acest site</strong>.",
-       "token_suffix_mismatch": "'''Modificarea ta a fost refuzată pentru că clientul tău a deformat caracterele de punctuatie în modificarea semnului.\nModificarea a fost respinsă pentru a preveni deformarea textului paginii.\nAcest fapt se poate întâmpla atunci când folosești un serviciu proxy anonim.'''",
+       "token_suffix_mismatch": "'''Modificarea ta a fost refuzată pentru că clientul tău a deformat caracterele de punctuație în tokenul de editare.\nModificarea a fost respinsă pentru a preveni deformarea textului paginii.\nAcest fapt se poate întâmpla atunci când folosești un serviciu proxy anonim.'''",
        "edit_form_incomplete": "'''Unele părți ale formularului de modificare nu au ajuns la server; verificați dacă modificările dumneavoastră sunt intacte și reîncercați.'''",
        "editing": "Modificare „$1”",
        "creating": "Crearea paginii „$1”",
        "prefs-watchlist-edits": "Numărul de modificări care apar în lista de pagini urmărite:",
        "prefs-watchlist-edits-max": "Număr maxim: 1000",
        "prefs-watchlist-token": "Jeton pentru lista de pagini urmărite:",
+       "prefs-watchlist-managetokens": "Administrează tokenuri",
        "prefs-misc": "Parametri diverși",
        "prefs-resetpass": "Modifică parola",
        "prefs-changeemail": "Modifică sau șterge adresa de e-mail",
        "prefs-editor": "Editor",
        "prefs-preview": "Previzualizare",
        "prefs-advancedrc": "Opțiuni avansate",
-       "prefs-opt-out": "Dezactivați îmbunătățirile",
        "prefs-advancedrendering": "Opțiuni avansate",
        "prefs-advancedsearchoptions": "Opțiuni avansate",
        "prefs-advancedwatchlist": "Opțiuni avansate",
        "prefixindex": "Toate paginile cu prefix",
        "prefixindex-namespace": "Toate paginile cu prefix (spațiul de nume $1)",
        "prefixindex-submit": "Afișează",
-       "prefixindex-strip": "Înlătură prefixul din cadrul listei",
+       "prefixindex-strip": "Înlătură prefixul din lista de rezultate",
        "shortpages": "Pagini scurte",
        "longpages": "Pagini lungi",
        "deadendpages": "Pagini fără legături",
        "contribsub2": "Pentru {{GENDER:$3|$1}} ($2)",
        "contributions-userdoesnotexist": "Contul de utilizator „$1” nu este înregistrat.",
        "nocontribs": "Nu a fost găsită nici o modificare care să satisfacă acest criteriu.",
-       "uctop": "(actuală)",
+       "uctop": "actuală",
        "month": "Din luna (și dinainte):",
        "year": "Din anul (și dinainte):",
        "date": "Din data (și dinainte):",
        "ipb-disableusertalk": "Se interzice acestui utilizator modificarea propriei pagini de discuții în timpul blocării",
        "ipb-change-block": "Reblochează utilizatorul cu acești parametri",
        "ipb-confirm": "Confirmare blocare",
+       "ipb-sitewide": "Pe site",
+       "ipb-partial": "Parțial",
+       "ipb-type-label": "Tip",
+       "ipb-pages-label": "Pagini",
        "badipaddress": "Adresa IP este invalidă.",
        "blockipsuccesssub": "Utilizatorul a fost blocat",
        "blockipsuccesstext": "[[Special:Contributions/$1|$1]] a fost blocat{{GENDER:$1||ă|}}.<br />\nVedeți [[Special:BlockList|lista blocărilor]] pentru a revizui adresele blocate.",
        "createaccountblock": "crearea de conturi blocată",
        "emailblock": "e-mail blocat",
        "blocklist-nousertalk": "fără drept de modificare a propriei pagini de discuții",
+       "blocklist-editing": "modificare",
+       "blocklist-editing-sitewide": "modificare (tot site-ul)",
        "ipblocklist-empty": "Lista blocărilor este goală.",
        "ipblocklist-no-results": "Nu există blocare pentru adresa IP sau numele de utilizator.",
        "blocklink": "blochează",
        "ipb_blocked_as_range": "Eroare: Adresa IP $1 nu este blocată direct deci nu poate fi deblocată.\nFace parte din area de blocare $2, care nu poate fi deblocată.",
        "ip_range_invalid": "Serie IP invalidă.",
        "ip_range_toolarge": "Blocările mai mari de /$1 nu sunt permise.",
+       "ip_range_exceeded": "Numărul de IP-uri este prea mare. Subrețea permisă: /$1.",
        "ip_range_toolow": "Gamele de IP-uri nu sunt permise.",
        "proxyblocker": "Blocaj de proxy",
        "proxyblockreason": "Adresa dumneavoastră IP a fost blocată pentru că este un proxy deschis.\nVă rugăm să vă contactați furnizorul de servicii Internet sau tehnicienii IT și să-i informați asupra acestei probleme serioase de securitate.",
        "pageinfo-category-files": "Număr de fișiere",
        "pageinfo-user-id": "ID utilizator",
        "pageinfo-file-hash": "Suma de control",
+       "pageinfo-view-protect-log": "Vezi jurnalul de protecții pentru această pagină.",
        "markaspatrolleddiff": "Marchează pagina ca verificată",
        "markaspatrolledtext": "Marchează această pagină ca verificată",
        "markaspatrolledtext-file": "Marchează această versiune a fișierului ca verificată",
        "previousdiff": "← Diferența anterioară",
        "nextdiff": "Diferența următoare →",
        "mediawarning": "'''Atenție''': Acest tip de fișier poate conține cod periculos.\nExecutându-l, sistemul dvs. poate fi compromis.",
-       "imagemaxsize": "Limita mărimii imaginilor:<br />''(pentru paginile de descriere)''",
+       "imagemaxsize": "Limita mărimii imaginilor pentru paginile de descriere:",
        "thumbsize": "Dimensiunea miniaturii:",
        "widthheight": "$1x$2",
        "widthheightpage": "$1 × $2, $3 {{PLURAL:$3|pagină|pagini|de pagini}}",
        "confirm-unwatch-top": "Eliminați această pagină din lista de pagini urmărite?",
        "confirm-rollback-button": "OK",
        "confirm-rollback-top": "Anulați editările asupra acestei pagini?",
+       "confirm-mcrrestore-title": "Restaurează o versiune",
        "confirm-mcrundo-title": "Anulează o modificare",
        "mcrundofailed": "Anularea nu a reușit",
        "mcrundo-missingparam": "Lipsește un parametru necesar în cerere.",
        "mcrundo-changed": "Această pagină a fost schimbată de când ați văzut diferența. Vă rugăm să revizuiți noua schimbare.",
+       "mcrundo-parse-failed": "Nu am putut evalua noua versiune: $1",
        "quotation-marks": "„$1”",
        "imgmultipageprev": "← pagina anterioară",
        "imgmultipagenext": "pagina următoare →",
        "redirect-file": "Nume de fișier",
        "redirect-logid": "ID jurnal",
        "redirect-not-exists": "Valoarea nu a fot găsită",
+       "redirect-not-numeric": "Valoarea nu este numerică",
        "fileduplicatesearch": "Căutare fișiere duplicate",
        "fileduplicatesearch-summary": "Căutarea fișierelor duplicate bazată pe valorile hash.",
        "fileduplicatesearch-filename": "Nume fișier:",
        "tags": "Etichete valabile pentru marcarea modificărilor",
        "tag-filter": "Filtru pentru [[Special:Tags|etichete]]:",
        "tag-filter-submit": "Filtru",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Etichetă|Etichete}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Etichetă|Etichete}}]]: $2",
        "tag-mw-contentmodelchange": "schimbare a modelului de conținut",
        "tag-mw-contentmodelchange-description": "Editări ce  [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:ChangeContentModel schimbă modelul de conținut] al unei pagini",
        "tag-mw-new-redirect": "Redirecționare nouă",
        "dberr-again": "Așteptați câteva minute și încercați din nou.",
        "dberr-info": "(Nu se poate accesa baza de date: $1)",
        "dberr-info-hidden": "(Nu se poate accesa baza de date)",
-       "dberr-usegoogle": "Între timp puteți efectua căutarea folosind Google.",
-       "dberr-outofdate": "De reținut că indexarea conținutului nostru de către ei poate să nu fie actualizată.",
-       "dberr-cachederror": "Următoarea pagină este o copie în cache a paginii cerute, care s-ar putea să nu fie actualizată.",
        "htmlform-invalid-input": "Există probleme la valorile introduse",
        "htmlform-select-badoption": "Valoarea specificată nu este o opțiune validă.",
        "htmlform-int-invalid": "Valoarea specificată nu este un întreg.",
        "mw-widgets-titleinput-description-redirect": "redirecționare către $1",
        "mw-widgets-categoryselector-add-category-placeholder": "Adăugați o categorie...",
        "mw-widgets-usersmultiselect-placeholder": "Adăugați mai multe...",
+       "mw-widgets-titlesmultiselect-placeholder": "Adăugați mai multe...",
        "date-range-from": "De la data:",
        "date-range-to": "Până la data:",
        "sessionmanager-tie": "Nu se pot combina multiple tipuri de cereri de autentificare: $1.",
        "log-action-filter-block-reblock": "Modificare a unei blocări",
        "log-action-filter-block-unblock": "Deblocare",
        "log-action-filter-delete-delete": "Ștergere a paginii",
+       "log-action-filter-delete-delete_redir": "Suprascriere redirecționare",
        "log-action-filter-delete-restore": "Recuperare a paginii",
        "log-action-filter-delete-event": "Ștergere a logului",
        "log-action-filter-delete-revision": "Ștergere a reviziei",
        "log-action-filter-managetags-delete": "Ștergere tag",
        "log-action-filter-managetags-activate": "Activare tag",
        "log-action-filter-managetags-deactivate": "Dezactivare tag",
+       "log-action-filter-move-move": "Redenumește fără a suprascrie redirecționările",
+       "log-action-filter-move-move_redir": "Redenumește suprascriind redirecționările",
        "log-action-filter-newusers-create": "Creare de utilizator anonim",
        "log-action-filter-newusers-create2": "Creare de un utilizator înregistrat",
        "log-action-filter-newusers-autocreate": "Creare automată",
+       "log-action-filter-newusers-byemail": "Creare cu parola trimisă prin e-mail",
        "log-action-filter-patrol-patrol": "Patrulă manuală",
        "log-action-filter-patrol-autopatrol": "Patrulă automată",
        "log-action-filter-protect-protect": "Protecție",
        "authprovider-confirmlink-ok-help": "Continuă după afișarea mesajelor de eroare.",
        "authprovider-resetpass-skip-label": "Omite",
        "authprovider-resetpass-skip-help": "Sari peste resetarea parolei.",
+       "authform-newtoken": "Token lipsă. $1",
+       "authform-notoken": "Token lipsă",
+       "authform-wrongtoken": "Token greșit",
        "specialpage-securitylevel-not-allowed-title": "Nepermis",
        "specialpage-securitylevel-not-allowed": "Ne pare rău, nu aveți dreptul de a folosi această pagină deoarece identitatea dvs. nu a putut fi verificată.",
        "cannotauth-not-allowed-title": "Permisiune refuzată.",
index 9129a1c..dabce01 100644 (file)
        "passwordtooshort": "Le password onne a essere almene {{PLURAL:$1|1 carattere|$1 carattere}}.",
        "passwordtoolong": "Le password non ge ponne essere cchiù longhe de {{PLURAL:$1|1 carattere}}.",
        "passwordtoopopular": "Password comuni non ge ponne essere ausate. Scacchie 'na password cchiù difficile da 'nduvenà.",
+       "passwordinlargeblacklist": "'A passuord mise ste jndr'à l'elenghe de le passuord ausate de cchiù. Pe piacere scacchie 'na passuord cchiù secure.",
        "password-name-match": "'A password toje adda essere diverse da 'u nome utende tue.",
        "password-login-forbidden": "L'ause de stu nome utende e passuord onne state vietate.",
        "mailmypassword": "Azzere 'a passuord",
        "changepassword-throttled": "Tu è pruvate 'nu sacche de vote a trasè.\nPe piacere aspitte $1 apprime de pruvà arrete.",
        "botpasswords": "Password d'u bot",
        "botpasswords-disabled": "Le passuord bot so disabbilitate.",
+       "botpasswords-no-central-id": "Pe ausà 'na passuor bot, a trasè a 'nu utende cendralizzate.",
        "botpasswords-existing": "Passuord de le bot esistende",
        "botpasswords-createnew": "Ccreje 'na passuord nove pu bot",
        "botpasswords-editexisting": "Cange 'na passuord d'u bot ca esiste ggià",
        "botpasswords-no-provider": "BotPasswordsSessionProvider non g'è disponibbile.",
        "botpasswords-restriction-failed": "Le restrizziuyne de passuord bot non ge fanne trasè.",
        "botpasswords-invalid-name": "'U nome de l'utende mise non ge tène 'u separatore pe passuord bot (\"$1\").",
+       "botpasswords-not-exist": "Utende \"$1\" non ge tène 'na password bot chiamate \"$2\".",
+       "botpasswords-needs-reset": "'A passuord pu bot de nome \"$2\" de l'{{GENDER:$2|utende}} \"$1\" ha state azzerate.",
        "resetpass_forbidden": "Le Password non ge ponne cangià",
        "resetpass_forbidden-reason": "Le passuord non ge ponne essere cangiate: $1",
        "resetpass-no-info": "Tu a essere colleghete pe accedere a sta pàgene direttamende.",
        "prefs-editor": "Cangiatore",
        "prefs-preview": "Andeprime",
        "prefs-advancedrc": "Opzione avanzate",
-       "prefs-opt-out": "Disattivazzione de le miglioraminde",
        "prefs-advancedrendering": "Opzione avanzate",
        "prefs-advancedsearchoptions": "Opzione avanzate",
        "prefs-advancedwatchlist": "Opzione avanzate",
        "prefs-displayrc": "Fà vedè l'opzione",
        "prefs-displaywatchlist": "Fà vedè l'opzione",
+       "prefs-changesrc": "Cangiaminde fatte 'ndrucà",
+       "prefs-changeswatchlist": "Cangiaminde fatte 'ndrucà",
+       "prefs-pageswatchlist": "Pàggene ca ste condrolle",
        "prefs-tokenwatchlist": "Gettone",
        "prefs-diffs": "Diff",
        "prefs-help-prefershttps": "Sta preferenze pigghie effette sulamende quanne tràse arrete.",
        "group-autoconfirmed": "Utinde auto confermatarije",
        "group-bot": "Bot",
        "group-sysop": "Sysop",
+       "group-interface-admin": "Amministrature de l'inderfacce",
        "group-bureaucrat": "Burocrate",
        "group-suppress": "Suppressore",
        "group-all": "(tutte)",
        "group-autoconfirmed-member": "{{GENDER:$1|utende autoconfermate}}",
        "group-bot-member": "{{GENDER:$1|bot}}",
        "group-sysop-member": "{{GENDER:$1|amministratore}}",
+       "group-interface-admin-member": "{{GENDER:$1|amministratore de l'inderfacce}}",
        "group-bureaucrat-member": "{{GENDER:$1|burocrate}}",
        "group-suppress-member": "{{GENDER:$1|soppressore}}",
        "grouppage-user": "{{ns:project}}:Utinde",
        "grouppage-autoconfirmed": "{{ns:project}}:Utinde Autoconfermete",
        "grouppage-bot": "{{ns:project}}:Bot",
        "grouppage-sysop": "{{ns:project}}:Amministratore",
+       "grouppage-interface-admin": "{{ns:project}}:Amministrature de l'inderfacce",
        "grouppage-bureaucrat": "{{ns:project}}:Burocrate",
        "grouppage-suppress": "{{ns:project}}:Soppresse",
        "right-read": "Ligge le pàggene",
        "uploadstash-bad-path-unknown-type": "Tipe scanusciute \"$1\".",
        "uploadstash-bad-path-unrecognized-thumb-name": "Nome d'a miniature non acchiate.",
        "uploadstash-bad-path-bad-format": "'A chiave \"$1\" non ge ste jndr'à 'nu formate appropriate.",
+       "uploadstash-no-extension": "L'estenzione jè vacande.",
+       "uploadstash-zero-length": "'U file tène lunghezze zero.",
        "invalid-chunk-offset": "distanze d'u chunk invalide",
        "img-auth-accessdenied": "Accesse negate",
        "img-auth-nopathinfo": "No se iacchie 'u percorse d'a 'mbormnazione.\n'U server tune adda essere 'mbostate pe passà sta 'le variabbile REQUEST_URI e/o PATH_INFO.\nCe jè accussì, pruève a abbilità $wgUsePathInfo.\n'Ndruche https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization.",
        "http-timed-out": "Richieste HTTP fore timbe.",
        "http-curl-error": "Errore analizzanne l'URL: $1",
        "http-bad-status": "Ha state 'nu probbleme duranne 'a richieste HTTP: $1, $2",
+       "http-internal-error": "Errore 'nderne HTTP.",
        "upload-curl-error6": "Non ge riesche a raggiungere l'URL",
        "upload-curl-error6-text": "'A URL ca è scritte non ge se pò raggiungere.\nPe piacere, condrolle ca 'a URL jè corrette e ca 'u site funzione.",
        "upload-curl-error28": "Carecamende in timeout",
        "booksources-search": "Cirche",
        "booksources-text": "Sotte stè 'na liste de collegaminde a otre site ca vennene libbre nuève e ausete e puà pure acchià cchiù 'mbormaziune sus a le libbre ca tu ste cirche:",
        "booksources-invalid-isbn": "L'ISBN ca è mise non ge pare ca ète corrette; verifiche ce è commesse quacche errore quanne ste cupiave quidde origginale.",
+       "magiclink-tracking-rfc": "Pàggene ca ausane le collegaminde maggece RFC",
+       "magiclink-tracking-pmid": "Pàggene ca ausane le collegaminde maggece PMID",
+       "magiclink-tracking-isbn": "Pàggene ca ausane le collegaminde maggece ISBN",
        "specialloguserlabel": "'Mblemendatore:",
        "speciallogtitlelabel": "Destinazione (titole o {{ns:user}}:nome de l'utende pe l'utende):",
        "log": "Archivije",
        "contribsub2": "Pe {{GENDER:$3|$1}} ($2)",
        "contributions-userdoesnotexist": "'U cunde utende \"$1\" non g'è reggistrate.",
        "nocontribs": "Nisciune cangiamende ha state acchiate cu ste criterie.",
-       "uctop": "(de mò)",
+       "uctop": "de mò",
        "month": "Da 'u mese (e cchiù recende):",
        "year": "Da l'anne (e cchiù recende):",
        "date": "Da 'a date (e cchiù recende):",
        "confirmrecreate-noreason": "L'utende [[User:$1|$1]] ([[User talk:$1|'ngazzaminde]]) ave {{GENDER:$1|scangellate}} sta pàgene apprisse ca tu l'è cangiate. Pe piacere conferme ca tu vuè avveramende reccrejà sta pàgene.",
        "recreate": "Ccreje n'otra vote",
        "unit-pixel": "px",
+       "confirm-purge-title": "Sdevache sta pàgene",
        "confirm_purge_button": "OK",
        "confirm-purge-top": "Pulizze 'a cache de sta pàgene?",
        "confirm-purge-bottom": "Pulezzanne 'a cache d'a pàgene se pò vedè 'a versiona cchiù aggiornate d'a pàgene.",
        "confirm-unwatch-button": "OK",
        "confirm-unwatch-top": "Vuè ccu live sta pàgene da chidde condrollate?",
        "confirm-rollback-button": "OK",
+       "confirm-mcrrestore-title": "Repristine 'a revisione",
        "confirm-mcrundo-title": "Annulle 'u cangiamende",
        "mcrundofailed": "Annullamende fallite",
        "semicolon-separator": ";&#32;",
        "tags": "Cangiaminde de le tag valide",
        "tag-filter": "Filtre de le [[Special:Tags|tag]]:",
        "tag-filter-submit": "Filtre",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Tag}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Tag}}]]: $2",
        "tag-mw-contentmodelchange": "cangiamende d'u modelle de condenute",
        "tag-mw-contentmodelchange-description": "Cangiaminde ca [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:ChangeContentModel cangiane 'u modelle de le condenute] de 'na pàgene",
        "tag-mw-new-redirect": "Reindirizzamende nuève",
        "tag-mw-replace": "Sostituite",
+       "tag-mw-rollback": "Annulle",
        "tag-mw-undo": "Annulle",
        "tags-title": "Tag",
        "tags-intro": "Sta pàgene elenghe le tag ca 'u software pò marcà cu 'nu cangiamende e 'u lore significate.",
        "dberr-again": "Aspitte quacche minute e pò recareche.",
        "dberr-info": "(Non ge riuscime a trasè sus a'u server d'u database: $1)",
        "dberr-info-hidden": "(Non ge pozze trasè sus a'u server d'u database)",
-       "dberr-usegoogle": "Pu mumende tu puè pruvà a cercà cu Google.",
-       "dberr-outofdate": "Vide ca le indice lore de le condenute nuèstre ponne essere non aggiornate.",
-       "dberr-cachederror": "Queste jè 'na copie ''cache'' d'a pàgene ca è cercate e allore non g'à puè cangià.",
        "htmlform-invalid-input": "Stonne probbleme cu certe input ca tu è mise",
        "htmlform-select-badoption": "'U valore ca è specificate non g'è 'n'opziona valide.",
        "htmlform-int-invalid": "'U valore ca è specificate non g'è 'n'indere.",
        "log-action-filter-newusers-create": "Ccrejazzione da 'utende senza nome",
        "log-action-filter-newusers-create2": "Ccrejazzione da 'utende reggistrate",
        "log-action-filter-newusers-autocreate": "Ccrejazione automateche",
+       "log-action-filter-protect-protect": "Protezzione",
+       "log-action-filter-protect-modify": "Cangiamende d'a protezzione",
+       "log-action-filter-protect-unprotect": "Sprotette",
+       "log-action-filter-protect-move_prot": "Protezzione spustate",
        "log-action-filter-rights-rights": "Cangiamende a màne",
        "log-action-filter-rights-autopromote": "Cangiamende automateche",
        "log-action-filter-suppress-event": "Soppressione de l'archivije",
index 78456dd..73e36c1 100644 (file)
        "passwordtooshort": "Пароль должен состоять не менее, чем из $1 {{PLURAL:$1|символа|символов}}.",
        "passwordtoolong": "Пароль не может содержать более {{PLURAL:$1|1=$1 символа|$1 символов}}.",
        "passwordtoopopular": "Часто выбираемые пароли не могут быть использованы. Пожалуйста, выберите пароль, который сложнее угадать.",
+       "passwordinlargeblacklist": "Введённый пароль является одним из часто используемых. Пожалуйста, выберите другой.",
        "password-name-match": "Введённый пароль должен отличаться от имени участника.",
        "password-login-forbidden": "Использование этого имени участника и пароля запрещено.",
        "mailmypassword": "Сбросить пароль",
        "timezonelegend": "Часовой пояс:",
        "localtime": "Местное время:",
        "timezoneuseserverdefault": "Использовать настройки сервера ($1)",
-       "timezoneuseoffset": "Иное (укажите смещение)",
+       "timezoneuseoffset": "Иное (ниже укажите смещение)",
+       "timezone-useoffset-placeholder": "Например: «-07:00» или «01:00»",
        "servertime": "Время сервера:",
        "guesstimezone": "Заполнить из браузера",
        "timezoneregion-africa": "Африка",
        "prefs-editor": "Редактор",
        "prefs-preview": "Предварительный просмотр",
        "prefs-advancedrc": "Расширенные настройки",
-       "prefs-opt-out": "Отказ от улучшений",
        "prefs-advancedrendering": "Расширенные настройки",
        "prefs-advancedsearchoptions": "Расширенные настройки",
        "prefs-advancedwatchlist": "Расширенные настройки",
        "prefs-displayrc": "Настройки отображения",
        "prefs-displaywatchlist": "Настройки отображения",
+       "prefs-changesrc": "Показанные изменения",
+       "prefs-changeswatchlist": "Показанные изменения",
+       "prefs-pageswatchlist": "Наблюдаемые страницы",
        "prefs-tokenwatchlist": "Токен",
        "prefs-diffs": "Разница версий",
        "prefs-help-prefershttps": "Этот параметр будет применён только после повторного входа на сайт.",
        "right-bigdelete": "Удаление страниц с длинными историями изменений",
        "right-deletelogentry": "Удаление и восстановление конкретных записей журнала",
        "right-deleterevision": "Удаление и восстановление конкретных версий страниц",
-       "right-deletedhistory": "Просмотр истории удалённых страниц без доступа к удалённому тексту",
+       "right-deletedhistory": "Просмотр истории удалённых страниц, без доступа к удалённому тексту",
        "right-deletedtext": "Просмотр удалённого текста и изменений между удалёнными версиями страниц",
        "right-browsearchive": "Поиск удалённых страниц",
        "right-undelete": "Восстановление страниц",
        "right-block": "Блокировка редактирования другими участниками",
        "right-blockemail": "Блокировка на отправку электронной почты",
        "right-hideuser": "Запрет имени участника и его сокрытие",
-       "right-ipblock-exempt": "обход блокировок по IP, автоблокировок и блокировок диапазонов",
+       "right-ipblock-exempt": "Ð\9eбход блокировок по IP, автоблокировок и блокировок диапазонов",
        "right-unblockself": "Разблокирование себя самого",
        "right-protect": "Изменение уровня защиты страниц и правка каскадно защищённых страниц",
        "right-editprotected": "Правка страниц, защищённых как «{{int:protect-level-sysop}}»",
        "recentchanges-network": "Из-за технической ошибки результаты не могут быть загружены. Попробуйте обновить страницу.",
        "recentchanges-notargetpage": "Введите название страницы выше, чтобы увидеть правки, связанные с этой страницей.",
        "recentchanges-feed-description": "Отслеживание последних изменений в вики.",
-       "recentchanges-label-newpage": "ЭÑ\82ой Ð¿Ñ\80авкой Ð±Ñ\8bла Ñ\81оздана Ð½Ð¾Ð²Ð°Ñ\8f Ñ\81Ñ\82Ñ\80аниÑ\86а",
+       "recentchanges-label-newpage": "новая страница",
        "recentchanges-label-minor": "Это незначительное изменение",
        "recentchanges-label-bot": "Эта правка сделана ботом",
        "recentchanges-label-unpatrolled": "Эта правка ещё никем не патрулировалась",
        "rcfilters-watchlist-markseen-button": "Отметить все изменения как просмотренные",
        "rcfilters-watchlist-edit-watchlist-button": "Редактировать ваш список наблюдения",
        "rcfilters-watchlist-showupdated": "Изменения страниц, которые вы не посещали с того момента, как они изменились, выделены <strong>жирным</strong> и отмечены полным маркером.",
-       "rcfilters-preference-label": "СкÑ\80Ñ\8bÑ\82Ñ\8c Ñ\83лÑ\83Ñ\87Ñ\88еннÑ\83Ñ\8e Ð²ÐµÑ\80Ñ\81иÑ\8e Â«Ð¡Ð²ÐµÐ¶Ð¸Ñ\85 Ð¿Ñ\80авок»",
-       "rcfilters-preference-help": "Ð\9eÑ\82каÑ\82Ñ\8bваеÑ\82 Ñ\80едизайн Ð¸Ð½Ñ\82еÑ\80Ñ\84ейÑ\81а 2017 Ð³Ð¾Ð´Ð° Ð¸ Ð²Ñ\81е Ð¸Ð½Ñ\81Ñ\82Ñ\80Ñ\83менÑ\82Ñ\8b, Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð½Ñ\8bе Ñ\81 Ñ\82еÑ\85 Ð¿Ð¾Ñ\80.",
-       "rcfilters-watchlist-preference-label": "СкÑ\80Ñ\8bÑ\82Ñ\8c Ñ\83лÑ\83Ñ\87Ñ\88еннÑ\83Ñ\8e Ð²ÐµÑ\80Ñ\81иÑ\8e cпиÑ\81ка Ð½Ð°Ð±Ð»Ñ\8eдениÑ\8f",
-       "rcfilters-watchlist-preference-help": "Ð\9eÑ\82менÑ\8fеÑ\82 Ñ\80едизайн Ð¸Ð½Ñ\82еÑ\80Ñ\84ейÑ\81а 2017 Ð³Ð¾Ð´Ð° Ð¸ Ð²Ñ\81е Ð¸Ð½Ñ\81Ñ\82Ñ\80Ñ\83менÑ\82Ñ\8b, Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð½Ñ\8bе Ñ\82огда Ð¸ Ð¿Ð¾Ð·Ð´Ð½ÐµÐµ.",
+       "rcfilters-preference-label": "Ð\98Ñ\81полÑ\8cзоваÑ\82Ñ\8c Ð½Ðµ JavaScript Ð¸Ð½Ñ\82еÑ\80Ñ\84ейÑ\81",
+       "rcfilters-preference-help": "Ð\97агÑ\80Ñ\83жаеÑ\82 Ñ\81вежие Ð¿Ñ\80авки Ð±ÐµÐ· Ñ\84илÑ\8cÑ\82Ñ\80ов Ð¸Ð»Ð¸ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾Ñ\81Ñ\82и Ð¿Ð¾Ð´Ñ\87Ñ\91Ñ\80киваниÑ\8f.",
+       "rcfilters-watchlist-preference-label": "Ð\98Ñ\81полÑ\8cзоваÑ\82Ñ\8c Ð¸Ð½Ñ\82еÑ\80Ñ\84ейÑ\81 Ð±ÐµÐ· JavaScript",
+       "rcfilters-watchlist-preference-help": "Ð\97агÑ\80Ñ\83жаеÑ\82 Ð½Ð°Ð±Ð»Ñ\8eдаемÑ\8bе Ð±ÐµÐ· Ñ\84илÑ\8cÑ\82Ñ\80ов Ð¸Ð»Ð¸ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾Ñ\81Ñ\82и Ð¿Ð¾Ð´Ñ\87Ñ\91Ñ\80киваниÑ\8f.",
        "rcfilters-filter-showlinkedfrom-label": "Показать правки на ссылаемых страницах",
        "rcfilters-filter-showlinkedfrom-option-label": "<strong>Страницы, на которые ссылается</strong> выбранная",
        "rcfilters-filter-showlinkedto-label": "Показать правки на ссылающихся страницах",
        "showhideselectedlogentries": "Показать/скрыть выбранные записи журнала",
        "log-edit-tags": "Редактировать теги из выбранной записи журнала",
        "checkbox-select": "Выбор: $1",
-       "checkbox-all": "Все",
+       "checkbox-all": "Всё",
        "checkbox-none": "Ничего",
        "checkbox-invert": "Инвертировать",
        "allpages": "Все страницы",
        "listgrouprights-members": "(список участников)",
        "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": "добавление в {{PLURAL:$2|1=группу|группы}}: $1",
-       "listgrouprights-removegroup": "исключение из {{PLURAL:$2|1=группы|групп}}: $1",
-       "listgrouprights-addgroup-all": "добавление во все группы",
-       "listgrouprights-removegroup-all": "исключение из всех групп",
+       "listgrouprights-addgroup": "Ð\94обавление в {{PLURAL:$2|1=группу|группы}}: $1",
+       "listgrouprights-removegroup": "Ð\98сключение из {{PLURAL:$2|1=группы|групп}}: $1",
+       "listgrouprights-addgroup-all": "Ð\94обавление во все группы",
+       "listgrouprights-removegroup-all": "Ð\98сключение из всех групп",
        "listgrouprights-addgroup-self": "добавление своей учётной записи в {{PLURAL:$2|1=группу|группы}}: $1",
-       "listgrouprights-removegroup-self": "исключение своей учётной записи из {{PLURAL:$2|1=группы|групп}}: $1",
+       "listgrouprights-removegroup-self": "Ð\98сключение своей учётной записи из {{PLURAL:$2|1=группы|групп}}: $1",
        "listgrouprights-addgroup-self-all": "Может добавлять все группы к своей учётной записи",
        "listgrouprights-removegroup-self-all": "может удалять все группы со своей учётной записи",
        "listgrouprights-namespaceprotection-header": "Ограничения пространства имён",
        "tooltip-whatlinkshere-invert": "Установите этот флажок, чтобы Скрыть ссылки от страниц в выбранном пространстве имен.",
        "namespace_association": "Связанное пространство",
        "tooltip-namespace_association": "Установите эту отметку, чтобы также включить пространство имён обсуждения (или предметное), связанное с выбранным пространством имён",
-       "blanknamespace": "(основное)",
+       "blanknamespace": "(Ð\9eсновное)",
        "contributions": "Вклад {{GENDER:$1|участника|участницы}}",
        "contributions-title": "Вклад {{GENDER:$1|участника|участницы}} $1",
        "mycontris": "Вклад",
        "contribsub2": "Вклад {{GENDER:$3|$1}} ($2)",
        "contributions-userdoesnotexist": "Не зарегистрировано учётной записи «$1».",
        "nocontribs": "Изменений, соответствующих заданным условиям, не найдено.",
-       "uctop": "(текущая)",
+       "uctop": "текущая",
        "month": "С месяца (и ранее):",
        "year": "С года (и ранее):",
        "date": "С даты (и ранее):",
        "move-watch": "Добавить в список наблюдения исходную и целевую страницы",
        "movepagebtn": "Переименовать страницу",
        "pagemovedsub": "Страница переименована",
+       "cannotmove": "Страница не может быть переименована по {{PLURAL:$1|1=следующей причине|следующим причинам}}:",
        "movepage-moved": "'''Страница «$1» переименована в «$2»'''",
        "movepage-moved-redirect": "Было создано перенаправление.",
        "movepage-moved-noredirect": "Создание перенаправления было подавлено.",
        "tooltip-ca-talk": "Обсуждение основной страницы",
        "tooltip-ca-edit": "Редактировать данную страницу",
        "tooltip-ca-addsection": "Создать новый раздел",
-       "tooltip-ca-viewsource": "Эта страница защищена от изменений. Вы можете посмотреть  её исходный текст.",
+       "tooltip-ca-viewsource": "Эта страница защищена от изменений.\nВы можете посмотреть её исходный текст.",
        "tooltip-ca-history": "Журнал изменений страницы",
        "tooltip-ca-protect": "Защитить страницу от изменений",
        "tooltip-ca-unprotect": "Изменить защиту этой страницы",
        "tooltip-minoredit": "Отметить это изменение как незначительное",
        "tooltip-save": "Сохранить ваши изменения",
        "tooltip-publish": "Опубликовать ваши изменения",
-       "tooltip-preview": "Предварительный просмотр страницы. Пожалуйста, используйте его перед сохранением.",
+       "tooltip-preview": "Предварительный просмотр ваших изменений. Пожалуйста, используйте его перед сохранением.",
        "tooltip-diff": "Показать изменения, сделанные по отношению к исходному тексту.",
        "tooltip-compareselectedversions": "Посмотреть разницу между двумя выбранными версиями этой страницы.",
        "tooltip-watch": "Добавить эту страницу в свой список наблюдения",
        "mcrundo-missingparam": "Отсутствуют обязательные параметры по запросу.",
        "mcrundo-changed": "Эта страница была изменена с тех пор, как вы просмотрели различия. Пожалуйста, проверьте новое изменение.",
        "mcrundo-parse-failed": "Не получилось распознать новую версию: $1",
-       "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»",
        "version-license-not-found": "Для этого расширения нет подробных сведений о лицензии.",
        "version-credits-title": "Список авторов для $1",
        "version-credits-not-found": "Для этого расширения нет подробных сведений об авторах.",
-       "version-poweredby-credits": "Эта вики работает на движке <strong>[https://www.mediawiki.org/ MediaWiki]<strong>, copyright © 2001-$1 $2.",
+       "version-poweredby-credits": "Эта вики работает на движке '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
        "version-poweredby-others": "другие",
        "version-poweredby-translators": "переводчики translatewiki.net",
        "version-credits-summary": "Хотим поблагодарить следующих участников за их вклад в развитие [[Special:Version|MediaWiki]].",
        "fileduplicatesearch-result-1": "Файл «$1» не имеет идентичных дубликатов.",
        "fileduplicatesearch-result-n": "Файл «$1» имеет $2 {{PLURAL:$2|идентичный дубликат|идентичных дубликата|идентичных дубликатов}}.",
        "fileduplicatesearch-noresults": "Не найден файл с именем «$1».",
-       "specialpages": "СпеÑ\86страницы",
+       "specialpages": "СлÑ\83жебнÑ\8bе страницы",
        "specialpages-note-top": "Легенда",
        "specialpages-note-restricted": "* Обычные служебные страницы.\n* <span class=\"mw-specialpagerestricted\">Служебные страницы с ограниченным доступом.</span>",
        "specialpages-group-maintenance": "Отчёты технического обслуживания",
        "tags": "Действующие метки изменений",
        "tag-filter": "Фильтр [[Special:Tags|меток]]:",
        "tag-filter-submit": "Отфильтровать",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|1=Метка|Метки}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|1=Метка|Метки}}]]: $2",
        "tag-mw-contentmodelchange": "изменение модели содержимого",
        "tag-mw-contentmodelchange-description": "Правки, которые [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:ChangeContentModel изменяют модель содержимого] страницы",
        "tag-mw-new-redirect": "новое перенаправление",
        "dberr-again": "Попробуйте обновить страницу через несколько минут.",
        "dberr-info": "(Нет доступа к базе данных: $1)",
        "dberr-info-hidden": "(Нет доступа к базе данных)",
-       "dberr-usegoogle": "Пока вы можете попробовать поискать с помощью Google.",
-       "dberr-outofdate": "Но имейте в виду, что его индекс может оказаться устаревшим.",
-       "dberr-cachederror": "Ниже представлена закэшированная версия запрашиваемой страницы, возможно, она не отражает последних изменений.",
        "htmlform-invalid-input": "Часть введённых вами данных вызвала проблемы",
        "htmlform-select-badoption": "Указано недопустимое значение.",
        "htmlform-int-invalid": "Указанное вами значение — не целое число.",
        "logentry-block-reblock": "$1 {{GENDER:$2|изменил|изменила}} срок блокировки {{GENDER:$4|$3}} на период $5 $6",
        "logentry-partialblock-block": "$1 {{GENDER:$2|заблокировал|заблокировала}} {{GENDER:$4|$3}} на редактирование {{PLURAL:$8|страницу|страницы}} $7 на период $5 $6",
        "logentry-partialblock-reblock": "$1 {{GENDER:$2|изменил|изменила}} настройки блокировки {{GENDER:$4|$3}}, предотвращающий правки {{PLURAL:$8|страницы|страниц}} $7 на период $5 $6",
-       "logentry-non-editing-block-block": "$1 {{GENDER:$2|заблокировал|заблокировала}} {{GENDER:$4|$3}} от действий, не связанных с редактированием, на период $5 $6",
-       "logentry-non-editing-block-reblock": "$1 {{GENDER:$2|изменил|изменила}} настройки блокировки {{GENDER:$4|$3}} для действий, не связанных с редактированием, на период $5 $6",
+       "logentry-non-editing-block-block": "$1 {{GENDER:$2|заблокиÑ\80овал|заблокиÑ\80овала}} {{GENDER:$4|$3}} Ð¾Ñ\82 Ð¾Ð¿Ñ\80еделÑ\91ннÑ\8bÑ\85 Ð´ÐµÐ¹Ñ\81Ñ\82вий, Ð½Ðµ Ñ\81вÑ\8fзаннÑ\8bÑ\85 Ñ\81 Ñ\80едакÑ\82иÑ\80ованием, Ð½Ð° Ð¿ÐµÑ\80иод $5 $6",
+       "logentry-non-editing-block-reblock": "$1 {{GENDER:$2|изменил|изменила}} Ð½Ð°Ñ\81Ñ\82Ñ\80ойки Ð±Ð»Ð¾ÐºÐ¸Ñ\80овки {{GENDER:$4|$3}} Ð´Ð»Ñ\8f Ð¾Ð¿Ñ\80еделÑ\91ннÑ\8bÑ\85 Ð´ÐµÐ¹Ñ\81Ñ\82вий, Ð½Ðµ Ñ\81вÑ\8fзаннÑ\8bÑ\85 Ñ\81 Ñ\80едакÑ\82иÑ\80ованием, Ð½Ð° Ð¿ÐµÑ\80иод $5 $6",
        "logentry-suppress-block": "$1 {{GENDER:$2|заблокировал}} {{GENDER:$4|$3}} сроком на $5 $6",
        "logentry-suppress-reblock": "$1 {{GENDER:$2|изменил|изменила}} срок блокировки {{GENDER:$4|$3}} на период $5 $6",
        "logentry-import-upload": "$1 импортировал{{GENDER:$2||а}} $3 путём файловой загрузки",
        "passwordpolicies-policy-passwordcannotmatchblacklist": "Пароль не может совпадать ни с одним паролем, внесённым в чёрный список",
        "passwordpolicies-policy-maximalpasswordlength": "Пароль должен быть короче $1 {{PLURAL:$1|символа|символов}}",
        "passwordpolicies-policy-passwordcannotbepopular": "Пароль не может соответствовать {{PLURAL:$1|самому часто используемому паролю|какому-либо из $1 самых часто используемых паролей}}",
+       "passwordpolicies-policy-passwordnotinlargeblacklist": "Пароль не может соответствовать какому-либо из 100 000 самых часто используемых паролей.",
        "easydeflate-invaliddeflate": "Предоставленное содержимое не спущено надлежащим образом",
        "unprotected-js": "По соображениям безопасности JavaScript нельзя загружать с незащищенных страниц. Пожалуйста, создавайте скрипты только в пространстве имён MediaWiki: или как подстраницы участника."
 }
index eb7b144..815951d 100644 (file)
        "mycontris": "Приспівкы",
        "contribsub2": "{{GENDER:$3|хоснователї|хоснователькы}} $1 ($2)",
        "nocontribs": "Ненайджены жадны зміны за тыма крітеріями.",
-       "uctop": "(остатня)",
+       "uctop": "остатня",
        "month": "Од місяця (і скоре):",
        "year": "Од року (і скоре):",
        "sp-contributions-newbies": "Вказати приспівкы лем новых конт",
        "tags": "Платны значкы про зміны",
        "tag-filter": "Філтер [[Special:Tags|значок]]:",
        "tag-filter-submit": "Філтровати",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Значка|Значкы}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Значка|Значкы}}]]: $2",
        "tags-title": "Значкы",
        "tags-intro": "Тота сторінка обсягує список значок, котрыма може софтвер означовати єднотливы едітованя і їх значіня.",
        "tags-tag": "Назва значкы",
        "dberr-again": "Спробуйте обновити сторінку за пару мінут.",
        "dberr-info": "(не годен навязати споїня з датабазовым сервером: $1)",
        "dberr-info-hidden": "(Не годен навязати споїня з датабазовым сервером)",
-       "dberr-usegoogle": "Можете спробовати поглядати за допомогов Google.",
-       "dberr-outofdate": "Майте на увазї, же ёго індексы можуть быти застарілыма.",
-       "dberr-cachederror": "Наслїдуюча сторінка є копія з кеш і не мусить быти актуалне.",
        "htmlform-invalid-input": "Дакотры дата заданы вами суть хыбны",
        "htmlform-select-badoption": "Вами зазначена величіна не є доступна можность.",
        "htmlform-int-invalid": "Зазначена величіна не є ціле чісло.",
index d88826b..e417bb8 100644 (file)
        "tags": "तर्कसिद्धानि परिवर्तनाङ्कनानि",
        "tag-filter": "[[Special:Tags|अङ्कनम्]] शोधनी :",
        "tag-filter-submit": "शोधनी",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|अङ्कनम्|अङ्कनानि}}]] : $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|अङ्कनम्|अङ्कनानि}}]] : $2",
        "tags-title": "अङ्कनानि",
        "tags-intro": "एतत्पुटं सार्थसूत्राणि दर्शयति यस्य कोऽपि तन्त्रांशः यत्किमपि सम्पादनम् अङ्कयितुं प्रयोजयति ।",
        "tags-tag": "अङ्कननाम",
        "dberr-again": "किञ्चित् कालं प्रतीक्ष्य पुनः उपारोप्यताम् ।",
        "dberr-info": "(दत्तांशस्य उपयोगः नैव शक्यते : $1)",
        "dberr-info-hidden": "(दत्तांशस्य उपयोगः नैव शक्यते)",
-       "dberr-usegoogle": "अत्रान्तरे भवान् गूगल् इति शोधनयन्त्रे अन्वेषणं कर्तुं शक्नोति ।",
-       "dberr-outofdate": "अस्माकम् आधेयस्य तेषाम् अनुक्रमणिका कालातिक्रान्ता इति जानातु ।",
-       "dberr-cachederror": "एषा सङ्ग्रहितप्रतिः अभ्यर्थितपुटस्य , एषा उन्नतीकृता अपि न स्यात् ।",
        "htmlform-invalid-input": "भवता आरोपितेषु अंशेषु काचन समस्या विद्यते ।",
        "htmlform-select-badoption": "भवता निर्दिष्टं मौल्यं युक्तविकल्पः न ।",
        "htmlform-int-invalid": "भवता निर्दिष्टं मौल्यं पूर्णाङ्कः न ।",
index 27f057d..790adba 100644 (file)
        "prefs-editor": "Эрэдээктэр",
        "prefs-preview": "Инники көрүү",
        "prefs-advancedrc": "Дириҥэтиллибит туруоруулар",
-       "prefs-opt-out": "Тупсарыыттан батыныы",
        "prefs-advancedrendering": "Дириҥэтиллибит туруоруулар",
        "prefs-advancedsearchoptions": "Дириҥэтиллибит туруоруулар",
        "prefs-advancedwatchlist": "Дириҥэтиллибит туруоруулар",
        "contribsub2": "$1 ($2) суруйуута",
        "contributions-userdoesnotexist": "Маннык \"$1\" кыттааччы аата бэлиэтэниллибэтэх.",
        "nocontribs": "Эппит критерийгэр эппиэттиир уларытыылар көстүбэтилэр.",
-       "uctop": "(билиҥҥи)",
+       "uctop": "билиҥҥи",
        "month": "Ыйтан бэттэх:",
        "year": "Сылтан бэттэх:",
        "sp-contributions-newbies": "Саҥа эрэ ааттан оҥоһуллубут уларытыылары көрдөр",
        "tags": "Билигин туттуллар уларытыы бэлиэлэрэ",
        "tag-filter": "[[Special:Tags|Бэлиэлэр]] фильтрдара:",
        "tag-filter-submit": "Фильтр",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Тиэк|Тиэктэр}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Тиэк|Тиэктэр}}]]: $2",
        "tag-mw-contentmodelchange": "Иһинээҕи киэбин уларытыы сурунаала",
        "tag-mw-contentmodelchange-description": "Сирэй [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:ChangeContentModel ис тутулун уларытар] көннөрүүлэр",
        "tag-mw-new-redirect": "Саҥа утаарыы",
        "dberr-again": "Аҕыйах мүнүүтэннэн саҥардан көрөөр.",
        "dberr-info": "(Билэ тиһигин кытта ситим быстыбыт: $1)",
        "dberr-info-hidden": "(Билэ тиһигин кытта ситим суох)",
-       "dberr-usegoogle": "Онуоха-маныаха дылы Google көмөтүнэн көрдүөххүн сөп.",
-       "dberr-outofdate": "Индэксэ эргэрбит буолуон сөбүн умнума.",
-       "dberr-cachederror": "Сирэй кээштэммит барыла көстөр, баҕар эргэрбит буолуон сөп.",
        "htmlform-invalid-input": "Киллэрбит сибидиэнньэҥ сорҕото алҕаһы таһаарда",
        "htmlform-select-badoption": "Ыйбыт туруоруугун манна ыйар сатаммат.",
        "htmlform-int-invalid": "Эппит чыыһылаҥ төгүрүк буолбатах.",
index 525f31d..fb31bec 100644 (file)
        "anoncontribs": "ᱮᱱᱮᱢᱠᱩ",
        "contribsub2": "{{GENDER:$3|$1}} ($2) ᱞᱟᱹᱜᱤᱫ ᱛᱮ",
        "nocontribs": "ᱱᱚᱶᱟ ᱮᱢᱟᱜ ᱥᱟᱶ ᱡᱚᱲᱟᱣᱟᱱ ᱵᱚᱫᱚᱞᱠᱚ ᱵᱟᱭ ᱧᱟᱢᱞᱮᱱᱟ |",
-       "uctop": "(ᱱᱤᱛᱚᱜ)",
+       "uctop": "ᱱᱤᱛᱚᱜ",
        "month": "ᱪᱟᱸᱫᱚ ᱠᱷᱚᱱ (ᱟᱨ ᱞᱟᱦᱟᱨᱮᱭᱟᱜ)",
        "year": "ᱱᱚᱣᱟ ᱥᱮᱨᱢᱟ ᱠᱷᱚᱡ (ᱟᱨ ᱞᱟᱦᱟᱨᱮᱭᱟᱜ):",
        "sp-contributions-newbies": "ᱱᱟᱣᱟ ᱦᱤᱥᱟᱵ ᱨᱮᱱᱟᱜ ᱮᱱᱮᱢᱠᱚ ᱩᱫᱩᱜᱽ ᱢᱮ",
        "specialpages": "ᱵᱤᱥᱮᱥ ᱥᱟᱦᱴᱟᱠᱚ",
        "external_image_whitelist": "#ᱱᱚᱣᱟ ᱥᱟᱦᱴᱟ ᱫᱚ ᱪᱮᱛ ᱞᱮᱠᱟ ᱢᱮᱱᱟᱜ-ᱟ ᱚᱝᱠᱟᱜᱮ ᱫᱚᱦᱚᱭᱢᱮ\n#ᱡᱚᱛᱚ ᱚᱠᱛᱚ ᱨᱮ ᱡᱟᱹᱦᱤᱨᱮᱱ ᱠᱩᱴᱨᱟᱹ ᱞᱟᱛᱟᱨ ᱨᱮ (ᱠᱷᱟᱹᱞᱤ ᱦᱟᱹᱴᱤᱧ //ᱛᱟᱞᱟᱨᱮ) ᱵᱟᱹᱭᱥᱟᱹᱣᱢᱮ\n#ᱱᱚᱣᱟ ᱠᱚ ᱫᱚ ᱵᱟᱨᱦᱮ ᱨᱮᱭᱟᱜ (hotlinked) ᱪᱤᱛᱟᱹᱨ ᱨᱮᱭᱟᱜ URL ᱥᱟᱶᱛᱮ ᱢᱤᱞᱟᱹᱣ ᱦᱩᱭᱩᱜ-ᱟ\n#ᱚᱠᱟᱠᱩ ᱢᱤᱞᱟᱹᱜ-ᱟ, ᱚᱱᱟᱠᱩ ᱫᱚ ᱪᱤᱛᱟᱹᱨ ᱞᱮᱠᱟᱛᱮ ᱩᱫᱩᱜᱚᱜ-ᱟ, ᱵᱟᱝᱠᱷᱟᱱ ᱫᱚ ᱠᱷᱟᱹᱞᱤ ᱪᱤᱛᱟᱨ ᱡᱚᱱᱚᱲ ᱩᱫᱩᱜᱚᱜ-ᱟ\n#ᱱᱚᱣᱟ ᱞᱟᱭᱤᱱ ᱨᱮᱭᱟᱜ ᱮᱛᱦᱚᱵᱨᱮ # ᱢᱮᱱᱟᱜ-ᱟ ᱚᱱᱟ ᱞᱟᱭᱤᱱᱠᱚ ᱢᱮᱱᱠᱚ ᱦᱤᱥᱟᱹᱵᱛᱮ ᱵᱮᱵᱦᱟᱨ ᱦᱩᱭᱩᱜ-ᱟ\n#ᱱᱚᱣᱟ ᱫᱚ ᱨᱤᱢᱡᱷᱟᱹᱣᱜᱮ\n#ᱱᱚᱣᱟ ᱫᱟᱜᱽ ᱪᱮᱛᱟᱱᱨᱮ regex ᱠᱩᱴᱨᱟᱹ ᱵᱟᱹᱭᱥᱟᱹᱣᱢᱮ᱾ ᱱᱚᱣᱟ ᱞᱟᱭᱤᱱ ᱪᱮᱫᱞᱮᱠᱟ ᱢᱮᱱᱟᱜ-ᱟ ᱚᱝᱠᱟᱜᱮ ᱫᱚᱦᱚᱭᱢᱮ</pre>",
        "tag-filter": "[[Special:Tags|ᱜᱚᱛᱟᱣ]] ᱪᱷᱟᱹᱱᱤ:",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|ᱜᱚᱛᱟᱣ|ᱜᱚᱛᱟᱣᱠᱚ}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|ᱜᱚᱛᱟᱣ|ᱜᱚᱛᱟᱣᱠᱚ}}]]: $2",
        "tags-active-yes": "ᱦᱮᱸ",
        "tags-active-no": "ᱵᱟᱝ",
        "tags-hitcount": "$1 {{PLURAL:$1|ᱟᱹᱨᱩ|ᱟᱹᱨᱩᱠᱚ}}",
index 2601aa3..1959590 100644 (file)
        "anoncontribs": "Contributziones",
        "contribsub2": "Pro {{GENDER:$3|$1}} ($2)",
        "nocontribs": "Nessuna modifica trovata conformemente a questi criteri.",
-       "uctop": "(atuale)",
+       "uctop": "atuale",
        "month": "Dae su mese (e in segus):",
        "year": "Dae s'annu (e in segus):",
        "sp-contributions-newbies": "Ammustra feti is contributziones de is contos noos",
index 329e1cc..2cee917 100644 (file)
        "contribsub2": "Di {{GENDER:$3|$1}} ($2)",
        "contributions-userdoesnotexist": "Lu cuntu utenti \"$1\" nun è riggistratu.",
        "nocontribs": "Nuddu canciamentu fu attruvatu chi currispunni a sti criterî.",
-       "uctop": "(attuali)",
+       "uctop": "attuali",
        "month": "A pàrtiri dû misi (e pricidenti):",
        "year": "A pàrtiri di l'annu (e pricidenti):",
        "sp-contributions-newbies": "Ammustra sulu li cuntribbuti di l'utenti novi",
        "tags": "Etichetti dî canciamenti vàlidi",
        "tag-filter": "Filtra pi [[Special:Tags|etichetta]]",
        "tag-filter-submit": "Filtra",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Etichetta|Etichetti}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Etichetta|Etichetti}}]]: $2",
        "tags-title": "Etichetti",
        "tags-intro": "Sta pàggina elenca l'etichetti cu li quali lu software pò marcari nu canciamentu, e lu significatu ca hannu.",
        "tags-tag": "Nomu di l'etichetta",
        "dberr-again": "Prova a aspittari na para di minuti e ricaricari.",
        "dberr-info": "(Mpussìbbili accèdiri â basi di dati: $1)",
        "dberr-info-hidden": "(Mpussìbbili accèdiri â basi di dati)",
-       "dberr-usegoogle": "Poi pruvari a circari supra Google ammentri.",
-       "dberr-outofdate": "Nota ca la sò nnicizzazioni dû nostru cuntinutu pò nun èssiri aggiurnata.",
-       "dberr-cachederror": "Chista ca segui è na copia cache da pàggina richiesta, e putissi essiri nun aggiurnata.",
        "htmlform-invalid-input": "Ci su prublema cu l'input nseritu",
        "htmlform-select-badoption": "Lu valori spicificatu nun è n'opzioni valida.",
        "htmlform-int-invalid": "Lu valiri spicificatu nun è n'interu.",
index 7ff4520..949fdc1 100644 (file)
        "contribsub2": "Fer {{GENDER:$3|$1}} ($2)",
        "contributions-userdoesnotexist": "Uiser accoont \"$1\" is no registerit.",
        "nocontribs": "Nae chynges wis funnd matchin thir criteria.",
-       "uctop": "(current)",
+       "uctop": "current",
        "month": "Fae month (n afore):",
        "year": "Fae year (n afore):",
        "sp-contributions-newbies": "Shaw contreebutions o freish accoonts ainlie",
        "tags": "Valit chynge tags",
        "tag-filter": "[[Special:Tags|Tag]] filter:",
        "tag-filter-submit": "Filter",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Tag|Tags}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Tag|Tags}}]]: $2",
        "tags-title": "Tags",
        "tags-intro": "This page leets the tags that the saffware can maurk aen eedit wi, n thair meanin.",
        "tags-tag": "Tag name",
        "dberr-again": "Gie it ae few minutes n than relaid.",
        "dberr-info": "(Canna contact the database server: $1)",
        "dberr-info-hidden": "(Canna contact the database server)",
-       "dberr-usegoogle": "Ye can dae ae rake bi wa o Google in the meanwhile.",
-       "dberr-outofdate": "Mynd that thair indexes o oor content micht be oot o date.",
-       "dberr-cachederror": "This is ae cached copie o the requested page, n micht na be up til date.",
        "htmlform-invalid-input": "Thau ar proablems wi some o yer input.",
        "htmlform-select-badoption": "The value that ye speceefied isna ae valit optie.",
        "htmlform-int-invalid": "The value that ye speceefied isna aen integer.",
index 7941de3..ea3b575 100644 (file)
        "contribsub2": "{{GENDER:$3|$1}} ($2) لاءِ",
        "contributions-userdoesnotexist": "واپرائيندڙ کاتو \"$1\" درج ٿيل نہ آهي.",
        "nocontribs": "هن معيار تي ڪي به ترميمون نه لڌيون.",
-       "uctop": "(هاڻوڪو)",
+       "uctop": "هاڻوڪو",
        "month": "مھيني کان (۽ اڳوڻيون):",
        "year": "سال کان (۽ اڳوڻيون):",
        "sp-contributions-newbies": "صرف نون کاتن جون ڀاڱيداريون ڏيکاريو",
        "intentionallyblankpage": "هيءُ صفحو ڄاڻي خالي ڇڏيو ويو آهي.",
        "tag-filter": "[[Special:Tags|ٽيگ]] ڇاڻي:",
        "tag-filter-submit": "ڇاڻي",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|ٽيگ|ٽيگز}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|ٽيگ|ٽيگز}}]]: $2",
        "tag-mw-new-redirect": "نئون چوريل",
        "tag-mw-blank": "خالي",
        "tag-mw-rollback-description": "واپس-ورايو ڳنڍڻي کي استعمال ڪندي پوين ترميمن کي واپس ورائيندڙ ترميمون",
index 7688f2a..9550fbf 100644 (file)
        "mycontris": "Li me' cuntributi",
        "contribsub2": "Par {{GENDER:$3|$1}} ($2)",
        "nocontribs": "Nò so isthaddi acciappaddi mudifigghi cunfoimmi a li criteri sciubaraddi.",
-       "uctop": "(currenti)",
+       "uctop": "currenti",
        "month": "A parthì da lu mesi (e prizzidenti):",
        "year": "A parthì da l'anni (e prizzidenti):",
        "sp-contributions-newbies": "Musthra soru li cuntributi di li nobi utenti",
index d952dd4..89d2254 100644 (file)
        "contributions-title": "بەشداریەگان ئەوکاربەر $1",
        "mycontris": "بەشداریەیل",
        "contribsub2": "ئڕاێ {{GENDER:$3|$1}} ($2)",
-       "uctop": "(ئێرەنگە)",
+       "uctop": "ئێرەنگە",
        "month": "لە مانگ (و پێشتر لەوە):",
        "year": "لە ساڵ (و پێشتر لەوە):",
        "sp-contributions-newbies": "تەنیا بەشداریەگان ئەوکاربەرە تازەگان نیشان بدە",
        "specialpages": "پەڕە تایوەتەگان",
        "external_image_whitelist": " #ئەی ھێڵە ھەر وە ئەی جوورە ک ھەس، وەر بدەین<pre>\n#رستە وەنەزمەگان (regular expression) (تەنیا ئەو بەشە کە لە نێوان // جێ گرێد) لە خوارەو بنەین\n#ئیانە وەرد نیشانی ئینترنتی وێنەیل دەرەکی بەسیار دریای (hotlinked) چەترگیەن (تەتبیق دریەن).\n#ئەوانە ک چەترگیانە، چۊ وێنە نیشان دریەن؛ وەگەرنە تەنیا بەسیارێگ وە وێنە نیشان دەریەێد.\n#ئەو ھێڵەیلە وە # دەس پێ کەن، جوور شرۆڤە (comments) گیریەنە وەر چەو\n#ئەی ھێڵەیلە وە گەورە و بۊچگی پیتەگان ھەستیارە (case-insensitive)\n\n#گشت رستە وەنەزمەگان (regex) لە ژۊەر ئەی ھێڵە بنەین. ئەی ھێڵ ھەر وە ئەی جوورە کە ھەس، وەر بدەین</pre>",
        "tag-filter": "پاڵووین [[Special:Tags|تاگ]]:",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|تاگ|تاگەیل}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|تاگ|تاگەیل}}]]: $2",
        "tags-active-yes": "بەڵێ",
        "tags-active-no": "نە",
        "tags-edit": "وێراشتە",
index 088cf35..4f01eae 100644 (file)
        "contributions-title": "Geavaheaddji $1 rievdadusat",
        "mycontris": "Rievdadusat",
        "anoncontribs": "Rievdadusat",
-       "uctop": "(ođđaseamos)",
+       "uctop": "ođđaseamos",
        "month": "Mánotbadji",
        "year": "Jahki",
        "sp-contributions-newbies": "Čájet ođđa geavaheddjiid rievdadusaid",
index 3b834eb..4a80c3d 100644 (file)
        "invert": "Hualtepacua",
        "contributions": "Contribuciónde caitom",
        "mycontris": "Hecontribución",
-       "uctop": "(quániit)",
+       "uctop": "quániit",
        "sp-contributions-talk": "Czaxö",
        "sp-contributions-search": "Yahöx contribución mii",
        "sp-contributions-username": "Addressade IP jöx caitom ID:",
index 6474f00..b3b479d 100644 (file)
        "contribsub2": "{{GENDER:$3|$1}} ($2) se",
        "contributions-userdoesnotexist": "Goykaw kontu \"$1\" maaɲoo mana hantumandi.",
        "nocontribs": "Barmay kulyaŋ mana duwandi kaŋ ga tenji nda tammaasawey wey.",
-       "uctop": "(sohõda)",
+       "uctop": "sohõda",
        "month": "Za handu (wal'a se jine):",
        "year": "Za jiiri (wal'a se jine):",
        "sp-contributions-newbies": "Kanbuzaamawey cebe kontu taagey hinne se",
        "tags": "Barmay kanji henney",
        "tag-filter": "[[Special:Tags|Kanji]] gaŋa:",
        "tag-filter-submit": "Gaŋa",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Kanji|Kanjey}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Kanji|Kanjey}}]]: $2",
        "tags-title": "Kanjey",
        "tags-intro": "Moɲoo woo ka kanjey cebe kaŋ goyjinaa k'i ka barmay šilbay, nda ngi maanaa. \\",
        "tags-tag": "Kanji maa",
        "dberr-again": "Soobay ka batu minitiyaŋ ka zumandi taaga.",
        "dberr-info": "(Ši hin ka bayhayahugu feršikaa cee: $1)",
        "dberr-info-hidden": "(Ši hin ka bayhayahugu feršikaa cee)",
-       "dberr-usegoogle": "Saadin war ga hin ka soobay ka ceeci nda Google.",
-       "dberr-outofdate": "Laasaabu kaŋ gundekuna šilbawey ga hin ka tee ižeenayaŋ.",
-       "dberr-cachederror": "Woo ti bereyan tugante moo wirantaa se nd'a ga ka tee ižeena.",
        "htmlform-invalid-input": "Šendayyaŋ ga bara nda war damhayaa jeroo.",
        "htmlform-select-badoption": "Hinnaa kaŋ war n'a tabatandi manti suubari henna.",
        "htmlform-int-invalid": "Hinna kaŋ war n'a tabatandi manti hinna timmante.",
index dee485f..658f566 100644 (file)
        "anoncontribs": "Kūriejē",
        "contribsub2": "Nauduotuojė $1 ($2)",
        "nocontribs": "Vagol esamus nūstatīmus nieka nerast.",
-       "uctop": " (vielībs)",
+       "uctop": " vielībs",
        "month": "Nug mienėsė (ėr onkstiau):",
        "year": "Nug metu (ėr onkstiau):",
        "sp-contributions-newbies": "Ruodītė tėktās naujū prieteliu duovius",
        "external_image_whitelist": " #Palikėt ta eilotė, tuokė kāp īr <pre>\n#Īrašīkat standartėniu ėšraišku fragmentus (tėktās dali terp //)\n#Anūs bus miegėnama sotapatintė so ėšuorėniu abruozdieliu adresās\n#Tė, katrėi sotaps, bus ruodomė kāp abruozdielē, a kėtė bus ruodomė tėktās kāp nūoruodas\n#Raidiu dėdoms nier svarbos\n#Eilotės, katuos prasided # īr kuomentarā \n\n#Īterpkat vėsus standartiėniu ėšraišku fragmentus prīš šėta eilote. Palikat šėta eilote, tuokė kāp ana īr </pre>",
        "tag-filter": "[[Special:Tags|Žīmiū]] kuošeklis:",
        "tag-filter-submit": "Kuošeklis",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Žīms|Žīmā|Žīmū}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Žīms|Žīmā|Žīmū}}]]: $2",
        "tags-active-yes": "Tēp",
        "tags-active-no": "Ne",
        "tags-edit": "taisītė",
index 72bcb07..bec7fea 100644 (file)
@@ -19,7 +19,8 @@
                        "Fitoschido",
                        "BadDog",
                        "ديفيد",
-                       "Zoranzoki21"
+                       "Zoranzoki21",
+                       "Vlad5250"
                ]
        },
        "tog-underline": "Podvuci linkove:",
        "perfcached": "Sledeći podaci su keširani i mogu biti zastareli. Keš sadrži najviše {{PLURAL:$1|jedan rezultat|$1 rezultata|$1 rezultata}}.",
        "perfcachedts": "Sledeći podaci su keširani, a poslednji put su ažurirani $2 u $3. Keš sadrži najviše {{PLURAL:$4|jedan rezultat|$4 rezultata|$4 rezultata}}.",
        "querypage-no-updates": "Ažuriranje ove stranice je isključeno.\nPodaci koji se ovdje nalaze neće biti biti ažurirani.",
-       "viewsource": "Pogledaj kod",
+       "viewsource": "Izvor/Извор",
        "viewsource-title": "Prikaz izvora stranice $1",
        "actionthrottled": "Akcija je usporena",
        "actionthrottledtext": "U cilju borbe protiv zloupotrebe, ograničeno vam je da u kratkom vremenskom periodu previše puta vršite ovu radnju, a upravo ste prešli to ograničenje.\nPokušajte ponovo za nekoliko minuta.",
        "right-editcontentmodel": "Uređivanje modela sadržaja stranice",
        "right-editinterface": "Uređivanje korisničkog interfejsa",
        "right-editusercss": "Uređivanje CSS datoteka drugih korisnika",
-       "right-edituserjs": "Uređivanje Javascript datoteka drugih korisnika",
+       "right-edituserjson": "Uređivanje JSON datoteka drugih korisnika",
+       "right-edituserjs": "Uređivanje JavaScript datoteka drugih korisnika",
        "right-editmyusercss": "Uredite svoje vlastite CSS datoteke",
        "right-editmyuserjs": "Uredite vlastite korisničke JavaScript datoteke",
        "right-viewmywatchlist": "Pregled vlastitog popisa praćenih stranica",
        "undeletepagetext": "{{PLURAL:$1|Slijedeća $1 stranica je obrisana|Slijedeće $1 stranice su obrisane|Slijedećih $1 je obrisano}} ali su još uvijek u arhivi i mogu biti vraćene.\nArhiva moše biti periodično čišćena.",
        "undelete-fieldset-title": "Vraćanje revizija",
        "undeleteextrahelp": "Da vratite cijelu historiju članka, ostavite sve kutijice neoznačene i kliknite '''''{{int:undeletebtn}}'''''.\nDa bi izvršili selektivno vraćanje, odaberite kutijice koje odgovaraju revizijama koje želite vratiti, i kliknite '''''{{int:undeletebtn}}'''''.",
-       "undeleterevisions": "{{PLURAL:$1|izmjena}} {{PLURAL|izbrisana|izbrisane|izbrisano}}",
+       "undeleterevisions": "izmjena {{PLURAL:$1|izbrisana|izbrisane|izbrisano}}",
        "undeletehistory": "Ako vratite stranicu, sve revizije će biti vraćene njenoj historiji.\nAko je nova stranica istog imena napravljena od brisanja, vraćene revizije će se pojaviti u njenoj ranijoj historiji.",
        "undeleterevdel": "Vraćanje obrisanog se neće izvršiti ako bi rezultiralo da zaglavlje stranice ili revizija datoteke bude djelimično obrisano.\nU takvim slučajevima, morate ukloniti označene ili otkriti sakrivene najskorije obrisane revizije.",
        "undeletehistorynoadmin": "Ova stranica je izbrisana.  \nRazlog za brisanje se nalazi ispod u sažetku, zajedno sa detaljima korisnika koji su uređivali ovu stranicu prije brisanja.  \nTekst izbrisane stranice je vidljiv samo administratorima.",
        "contribsub2": "Za {{GENDER:$3|$1}} ($2)",
        "contributions-userdoesnotexist": "Korisnički račun \"$1\" nije registrovan.",
        "nocontribs": "Nisu nađene promjene koje zadovoljavaju ove uslove.",
-       "uctop": "(trenutno)",
+       "uctop": "trenutno",
        "month": "Od mjeseca (i ranije):",
        "year": "Od godine (i ranije):",
        "sp-contributions-newbies": "Pokaži doprinose samo novih korisnika",
        "tags": "Oznake valjane izmjene",
        "tag-filter": "Filter [[Special:Tags|oznaka]]:",
        "tag-filter-submit": "Filter",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|tag|tagova}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|tag|tagova}}]]: $2",
        "tags-title": "Oznake",
        "tags-intro": "Ova stranica prikazuje spisak oznaka (tagova) koje softver može staviti na svaku izmjenu i njihovo značenje.",
        "tags-tag": "Naziv oznake",
        "dberr-problems": "Žao nam je! Ova stranica ima tehničke poteškoće.",
        "dberr-again": "Pokušajte pričekati nekoliko minuta i ponovno učitati.",
        "dberr-info": "(Ne može se spojiti server baze podataka: $1)",
-       "dberr-usegoogle": "U međuvremenu pokušajte pretraživati preko Googlea.",
-       "dberr-outofdate": "Uzmite u obzir da njihovi indeksi našeg sadržaja ne moraju uvijek biti ažurni.",
-       "dberr-cachederror": "Sljedeći tekst je keširana kopija tražene stranice i možda nije potpuno ažurirana.",
        "htmlform-invalid-input": "Postoje određeni problemi sa Vašim unosom",
        "htmlform-select-badoption": "Vrijednost koju ste unijeli nije valjana opcija.",
        "htmlform-int-invalid": "Vrijednost koju ste unijeli nije cijeli broj.",
index 3a290b5..8e1dada 100644 (file)
        "mycontris": "ⵜⵓⵎⵓⵜⵉⵏ",
        "anoncontribs": "ⵜⵓⵎⵓⵜⵉⵏ",
        "contribsub2": "ⵉ {{GENDER:$3|$1}} ($2)",
-       "uctop": "(ⵜⴰⵎⵉⵔⴰⵏⵜ)",
+       "uctop": "ⵜⴰⵎⵉⵔⴰⵏⵜ",
        "month": "ⵣⵖ ⵡⴰⵢⵢⵓⵔ (ⴷ ⵣⵉⴽⴽ ⵏⵏⵙ):",
        "year": "ⵣⵖ ⵓⵙⴳⴳⵯⴰⵙ (ⴷ ⵣⵉⴽⴽ ⵏⵏⵙ):",
        "sp-contributions-newbies": "ⵎⵍ ⵖⴰⵔ ⵜⵓⵎⵓⵜⵉⵏ ⵏ ⵉⵎⵉⴹⴰⵏⴻⵏ ⵉⵎⴰⵢⵏⵓⵜⵏ",
index 1960002..dcbd6f7 100644 (file)
@@ -83,8 +83,8 @@
        "july": "ၵျူႇလၢႆႇ",
        "august": "ဢေႃးၵၢသ်ႉ",
        "september": "သႅပ်ႇ​ထႅမ်ႇပႃႇ",
-       "october": "ဢွၵ်ႇ​ထူဝ်ႇ​ပႃႇ",
-       "november": "ၼူဝ်ႇ​ဝႅမ်ႇ​ပႃႇ",
+       "october": "ဢွၵ်ႇထူဝ်ႇပႃႇ",
+       "november": "ၼူဝ်ႇဝႅမ်ႇပႃႇ",
        "december": "တီႇသႅမ်ႇပႃႇ",
        "january-gen": "ၸၼ်ႇဝႃႇရီႇ",
        "february-gen": "ၾႅပ်ႇဝႃႇရီႇ",
@@ -95,8 +95,8 @@
        "july-gen": "ၵျူႇလၢႆႇ",
        "august-gen": "ဢေႃးၵၢသ်ႉ",
        "september-gen": "သႅပ်ႇ​ထႅမ်ႇပႃႇ",
-       "october-gen": "ဢွၵ်ႇ​ထူဝ်ႇ​ပႃႇ",
-       "november-gen": "ၼူဝ်ႇ​ဝႅမ်ႇ​ပႃႇ",
+       "october-gen": "ဢွၵ်ႇထူဝ်ႇပႃႇ",
+       "november-gen": "ၼူဝ်ႇဝႅမ်ႇပႃႇ",
        "december-gen": "တီႇသႅမ်ႇပႃႇ",
        "jan": "ၸၼ်ႇ",
        "feb": "ၾႅပ်ႇ",
        "december-date": "လိူၼ်တီႇသႅမ်ႇပႃႇ $1",
        "period-am": "AM ပွတ်းၸဝ်ႉ",
        "period-pm": "PM ပွတ်းလႃႈ",
-       "pagecategories": "{{PLURAL:$1|á\80\9cá\80­á\80°á\80\84á\80ºá\82\88\80\9cá\80­á\80°á\80\84á\80ºá\82\88á\80\90á\80\84á\80ºá\80¸á\80\9cá\81¢á\82\86}}",
-       "category_header": "á\81¼á\82\83á\82\88á\80\9cá\80­á\81µá\80ºá\82\88á\81¼á\82\82á\80ºá\80¸á\80\9cá\80­á\80°á\80\84်ႈ \"$1\"",
-       "subcategories": "á\81µá\80­á\80\84á\80ºá\82\87á\81½á\82\84á\80\9cá\80­á\80°á\80\84á\80ºá\82\88",
-       "category-media-header": "á\80\9eá\80­á\80¯á\80\9dá\80ºá\82\87á\81¼á\82\82á\80ºá\80¸á\80\9cá\80­á\80°á\80\84်ႈ \"$1\"",
+       "pagecategories": "{{PLURAL:$1|á\80\95á\80­á\80°á\80\84á\80ºá\80\91á\81¢á\81¼á\80ºá\82\88\81¸á\80­á\80°á\80\9dá\80ºá\80¸á\80\95á\80­á\80°á\80\84á\80ºá\80\91á\81¢á\81¼á\80ºá\82\88}}",
+       "category_header": "á\81¼á\82\83á\82\88á\80\9cá\80­á\81µá\80ºá\82\88á\81¼á\82\82á\80ºá\80¸á\80\95á\80­á\80°á\80\84á\80ºá\80\91á\81¢á\81¼်ႈ \"$1\"",
+       "subcategories": "á\80\95á\80­á\80°á\80\84á\80ºá\80\91á\81¢á\81¼á\80ºá\82\88á\81½á\82\84",
+       "category-media-header": "á\80\9eá\80­á\80¯á\80\9dá\80ºá\82\87á\81¶á\81¢á\80\9dá\80ºá\82\87á\81¼á\82\82á\80ºá\80¸á\80\95á\80­á\80°á\80\84á\80ºá\80\91á\81¢á\81¼်ႈ \"$1\"",
        "category-empty": "<em> ပိူင်ထၢၼ်ႈဢၼ်ၼႆႉ ယၢမ်းလဵဝ် ဢမ်ႇပႆႇမီး ၼႃႈလိၵ်ႈ ဢမ်ႇၼၼ် သိုဝ်ႇသင်ဝႆႉ</em>",
-       "hidden-categories": "{{PLURAL:$1|á\80\9cá\80­á\80°á\80\84á\80ºá\82\88á\80¢á\81¼á\80ºá\80\9cá\80\95á\80ºá\82\89á\80\9dá\82\86á\82\89 |á\80\9cá\80­á\80°á\80\84်ႈၸိူဝ်း ဢၼ်လပ်ႉဝႆႉ}}",
+       "hidden-categories": "{{PLURAL:$1|á\80\95á\80­á\80°á\80\84á\80ºá\80\91á\81¢á\81¼á\80ºá\82\88 á\80¢á\81¼á\80ºá\80\9cá\80\95á\80ºá\82\89á\80\9dá\82\86á\82\89 |á\80\95á\80­á\80°á\80\84á\80ºá\80\91á\81¢á\81¼်ႈၸိူဝ်း ဢၼ်လပ်ႉဝႆႉ}}",
        "hidden-category-category": "ပိူင်ထၢၼ်ႈ ဢၼ်လပ်ႉသိူင်ႇဝႆႉ",
-       "category-subcat-count": "{{PLURAL:$2|á\81¼á\82\82á\80ºá\80¸á\80\9cá\80­á\80°á\80\84á\80ºá\82\88á\80¢á\81¼á\80ºá\81¼á\82\86á\82\89 á\80\99á\80®á\80¸á\81µá\80­á\80\84á\80ºá\82\87á\81½á\82\84á\80\9cá\80­á\80°á\80\84á\80ºá\82\88á\81¼á\82\86á\82\89 á\81¸á\80­á\80°á\80\84á\80ºá\82\89á\81¼á\82\86á\81µá\80½á\81ºá\80ºá\80¸|á\81¼á\82\82á\80ºá\80¸á\80\9cá\80­á\80°á\80\84á\80ºá\82\88á\81¼á\82\86á\82\89 á\80\99á\80®á\80¸ This category has the following {{PLURAL:$1|á\81µá\80­á\80\84á\80ºá\82\87á\81½á\82\84á\80\9cá\80­á\80°á\80\84á\80ºá\82\88|$1 á\81µá\80­á\80\84á\80ºá\82\87á\81½á\82\84á\80\9cá\80­á\80°á\80\84á\80ºá\82\88á\80\90á\80\84á\80ºá\82\87á\80\9cá\81¢á\82\86á\80¸}}, á\81¼á\82\82á\80ºá\80¸á\81µá\82\83á\82\8a $2 á\80\90á\80\84á\80ºá\80¸á\80\9eá\80µá\80\84á\80ºá\82\88á\80\90á\80\84á\80ºá\80¸á\80\99á\80°á\80\90á\80ºá\80¸}}",
-       "category-subcat-count-limited": "á\81¼á\82\82á\80ºá\80¸á\80\9cá\80­á\80°á\80\84á\80ºá\82\88á\81¼á\82\86á\82\89 á\80\99á\80®á\80¸á\80\9dá\82\86á\82\89á\80\9cá\80­á\80°á\80\84á\80ºá\82\88á\81¼á\80\84á\80ºá\82\87á\81¼á\82\86 {{PLURAL:$1| á\81µá\80­á\80\84á\80ºá\82\87á\81½á\82\84á\80\9cá\80­á\80°á\80\84á\80ºá\82\88 |$1 á\81µá\80­á\80\84á\80ºá\82\87á\81½á\82\84á\80\9cá\80­á\80°á\80\84á\80ºá\82\88á\80\90á\80\84á\80ºá\80¸á\80\9cá\81¢á\82\86}}",
+       "category-subcat-count": "{{PLURAL:$2|á\80\90á\80®á\82\88á\81¼á\82\82á\80ºá\80¸á\80\95á\80­á\80°á\80\84á\80ºá\80\91á\81¢á\81¼á\80ºá\82\88á\80¢á\81¼á\80ºá\81¼á\82\86á\82\89 á\81µá\80°á\81ºá\80ºá\80¸á\80\99á\80®á\80¸ á\80\95á\80­á\80°á\80\84á\80ºá\80\91á\81¢á\81¼á\80ºá\82\88á\81½á\82\84 á\81¼á\80\84á\80ºá\82\87á\81½á\81¢á\82\86á\82\87á\80\90á\82\82á\80ºá\82\88á\81¼á\82\86á\82\89á\81µá\80°á\81ºá\80ºá\80¸.| á\80\90á\80®á\82\88á\81¼á\82\82á\80ºá\80¸á\80\95á\80­á\80°á\80\84á\80ºá\80\91á\81¢á\81¼á\80ºá\82\88á\81¼á\82\86á\82\89 á\80\99á\80®á\80¸á\81¸á\80­á\80°á\80\9dá\80ºá\80¸á\80\95á\80µá\81¼á\80º {{PLURAL:$1|á\80\95á\80­á\80°á\80\84á\80ºá\80\91á\81¢á\81¼á\80ºá\82\88á\81½á\82\84\81¸á\80­á\80°á\80\9dá\80ºá\80¸á\80\95á\80­á\80°á\80\84á\80ºá\80\91á\81¢á\81¼á\80ºá\82\88á\81½á\82\84 $1 }}, á\80\90á\80\84á\80ºá\80¸á\80\9eá\80µá\80\84á\80ºá\82\88 $2 á\81µá\80°á\81ºá\80ºá\80¸.}}",
+       "category-subcat-count-limited": "á\81¼á\82\82á\80ºá\80¸á\80\95á\80­á\80°á\80\84á\80ºá\80\91á\81¢á\81¼á\80ºá\82\88á\80¢á\81¼á\82\86á\82\89 á\81¶á\80\9dá\80ºá\82\88á\80\95á\82\83á\80¸á\80\9dá\82\86á\82\89 {{PLURAL:$1| á\80\95á\80­á\80°á\80\84á\80ºá\80\91á\81¢á\81¼á\80ºá\82\88á\81½á\82\84 |á\81¸á\80­á\80°á\80\9dá\80ºá\80¸á\80\95á\80­á\80°á\80\84á\80ºá\80\91á\81¢á\81¼á\80ºá\82\88á\81½á\82\84 $1 }}",
        "category-article-count": "{{PLURAL:$2| ပိူင်ထၢၼ်ႈဢၼ်ၼႆႉ ပႃးဝႆႉၼႃႈလိၵ်ႈၼင်ႇပႃႈတႂ်ႈၼႆႉၵွၺ်း |ၼႂ်းပိူင်ထၢၼ်ႈဢၼ်ၼႆႉ {{PLURAL:$1| ၼႃႈလိၵ်ႈ }} တင်းသဵင်ႈတင်းမူတ်း မီးဝႆႉ $2 ႁူဝ်}}။",
-       "category-article-count-limited": "á\80\90á\81¢á\80\84á\80ºá\80¸á\80\95á\82\83á\82\88á\80\90á\82\82á\80ºá\82\88á\81¼á\82\86á\82\89  {{PLURAL:$1| á\81¼á\82\83á\82\88á\80\9cá\80­á\81µá\80ºá\82\88 }} á\80\99á\80®á\80¸á\81¼á\82\82á\80ºá\80¸á\80\9cá\80­á\80°á\80\84á\80ºá\82\88 á\80\90á\80±á\82\83á\82\88á\80\9cá\80µá\80\9dá\80ºá\81¼á\82\86ႉ",
+       "category-article-count-limited": "á\80\90á\80®á\82\88 {{PLURAL:$1| á\81¼á\82\83á\82\88á\80\9cá\80­á\81µá\80ºá\82\88 }}á\81½á\81¢á\82\86á\82\87á\80\90á\82\82á\80ºá\82\88á\81¼á\82\86á\82\89 á\80\99á\80®á\80¸á\80\9dá\82\86á\82\89á\80\90á\80®á\82\88á\81¼á\82\82á\80ºá\80¸ á\80\95á\80­á\80°á\80\84á\80ºá\80\91á\81¢á\81¼á\80ºá\82\88á\80\9aá\81¢á\80\99á\80ºá\80¸á\80\9cá\80µá\80\9dá\80ºá\81¼á\82\86á\82\89á\80\9aá\80\9dá\80ºႉ",
        "category-file-count": "{{PLURAL:$2| ပိူင်ထၢၼ်ႈဢၼ်ၼႆႉ ပႃးဝႆႉၼႃႈလိၵ်ႈၼင်ႇပႃႈတႂ်ႈၼႆႉၵွၺ်း |တၢင်းပႃႈတႂ်ႈၼႆႉ{{PLURAL:$1| ၾႆႇၼႆႉပဵၼ်|$1 ၾၢႆႇၸိူဝ်းၼႆႉပဵၼ် }} မီးၼႂ်းပိူင်ထၢၼ်ႈၼႆႉ ၵႃႈၼႂ်း $2 တင်းသဵင်ႈတင်းမူတ်း}}",
        "category-file-count-limited": "ဢၼ်ပဵၼ် {{PLURAL:$1|ၾၢႆႇၼႆႉ|$1 ၾၢႆႇၸိူဝ်းၼႆႉ}} မီးဝႆႉတီႈၼႂ်း တွၼ်ႈၵၼ်ၼႆ့။",
        "listingcontinuesabbrev": "သိုပ်ႇ",
        "loginreqpagetext": "တႃႇတေတူၺ်းၼႃႈလိၵ်ႈၼႆ ၶႅၼ်းတေႃႈ $1",
        "accmailtitle": "ၶေႃႈလပ်ႉ သူင်ႇၵႂႃႇယဝ်ႉယဝ်ႈ။",
        "newarticle": "(ဢၼ်မႂ်ႇ)",
-       "newarticletext": "ၸဝ်ႈၵဝ်ႇလႆႈၸွမ်းလင်ဝႆႉ ႁဵင်းၵွင်ႉ ၼႃႈလိၵ်ႈ ဢၼ်ဢမ်ႇမီးဝႆႉၼၼ်ႉ။\nတႃႇတေၵေႃႇသၢင်ႈ ၼႃႈလိၵ်ႈ၊ တႄႇပေႃႉသႂ်ႇၵႃႈတီႈ လွၵ်ႈပႃႈတႂ်ႈ \n (တွၼ်ႈတႃႇ လွၼ်ႉၶၢဝ်ႇ တၢင်ႇၸိူဝ်း တူၺ်းၵႃႈတီႈ [$1 help page] ).\nသင်ၸိူဝ်ႉဝႃႈ ၸဝ်ႈၵဝ်ႇ ၽိတ်းတၢင်းသေ ၽႅဝ်မႃးတီႈၼႆႈၼႆ၊ ၼဵၵ်း ပၼ်တူဝ် <strong>ၼဵၼ်ႁူၼ်လင်</strong> ၶွင် တူဝ်ပိုတ်ႇဝႅပ်ႉ ၸဝ်ႈၵဝ်ႇလႄႈ။",
+       "newarticletext": "ၸဝ်ႈၵဝ်ႇလႆႈၸွမ်းလင်ဝႆႉ ႁဵင်းၵွင်ႉ ၼႃႈလိၵ်ႈ ဢၼ်ဢမ်ႇမီးဝႆႉၼၼ်ႉ။\nတႃႇတေၵေႃႇသၢင်ႈ ၼႃႈလိၵ်ႈ၊ တႄႇပေႃႉသႂ်ႇၵႃႈတီႈ လွၵ်ႈပႃႈတႂ်ႈ (တွၼ်ႈတႃႇ လွၼ်ႉၶၢဝ်ႇ တၢင်ႇၸိူဝ်း တူၺ်းၵႃႈတီႈ [$1 help page])။\nသင်ၸိူဝ်ႉဝႃႈ ၸဝ်ႈၵဝ်ႇ ၽိတ်းတၢင်းသေ ၽႅဝ်မႃးတီႈၼႆႈၼႆ၊ ၼဵၵ်း ပၼ်တူဝ် <strong>ၼဵၼ်ႁူၼ်လင်</strong> ၶွင် တူဝ်ပိုတ်ႇဝႅပ်ႉ ၸဝ်ႈၵဝ်ႇလႄႈ။",
        "anontalkpagetext": "----\n<em>ဢၼ်ၼႆႉၼႆႉ မၼ်းပဵၼ်ၼႃႈလိၵ်ႈဢုပ်ႇဢူဝ်း တွၼ်ႈတႃႇ ၽူႈဢၼ်ဢမ်ႇႁဵတ်း ဢၶွင်ႉ ဢမ်ႇၼၼ် ၽူႈဢၼ်ဢမ်ႇမီးဢၶွင်ႉ ဢၼ်ၸိူဝ်းပဵၼ် ၽူႈဢမ်ႇမီး/ဢမ်ႇႁူႉ ၸိုဝ်ႈသဵင်ၶဝ် ၸႂ်ႉၼႆယဝ်ႉ။</em>\nယွၼ်ႉပိူဝ်ႈၼၼ်လႄႈ ႁဝ်းၶႃႈၸင်ႇလႆႈၸႂ်ႉ ႁဵင်းလိၵ်ႈ ဢၢႆႇၽီႇ တွၼ်ႈတႃႇၸႅၵ်ႇလႆႈဝႃႈ ပဵၼ် မၼ်း ႁိုဝ် မၼ်းၼၢင်း ဢၼ်ဝႃႈၼၼ်ႉဢေႃႈ။\nဢၼ်ပဵၼ် ႁဵင်းလိၵ်ႈဢၢႆႇၽီႇၸိူင်ႉၼၼ်ၵေႃႈ ၽူႈၸႂ်ႉတိုဝ်းတင်းၼမ် ၸၢင်ႈထုၵ်ႇၽႄၸႂ်ႉဝႆႉယူႇ။\nသင်ၸိူဝ်ႉဝႃႈ ၸဝ်ႈၵဝ်ႇ ပဵၼ် ၽူႈဢၼ်ဢမ်ႇမီးၸိုဝ်ႈသေ သမ်ႉလႆႈယိၼ်းဝႃႈ လွင်ႈဢုပ်ႇဢူဝ်း ၸိူဝ်းဢၼ်ဢမ်ႇၵပ်းၵၢႆႇၸဝ်ႈၵဝ်ႇၼၼ်ႉ မီးလွင်ႈတုမ်ႉတေႃႇတင်းၸဝ်ႈၵဝ်ႇၼႆ ၸိုင် [[Special:CreateAccount|ၵေႃႇသၢင်ႈဢၶွင်ႉ ဢၼ်ၼိုင်ႈ]] ဢမ်ႇၼၼ်  [[Special:UserLogin|ၶဝ်ႈလွၵ်ႉဢိၼ်ႇ]]သေၵေႃႈ ၸဝ်ႈၵဝ်ႇၸၢင်ႈယူႇႁၢင်ႁၢင်ႇၵၼ်တင်း ၽူႈဢမ်ႇမီးၸိုဝ်ႈ တၢင်ႇၸိူဝ်းၼၼ်ႉလႆႈယူႇၶႃႈ။",
        "noarticletext": "ၼႂ်းၼႃႈၼႆႉယင်းဢမ်ႇမီးလိၵ်ႈသင်တေႃႈလဵဝ်။\nသူၸၢင်ႈ [[Special:Search/{{PAGENAME}}|ႁႃ ႁူဝ်ၶေႃႈၼႃႈလိၵ်ႈၼႆႉ]] ၼႂ်းတၢင်ႇၼႃႈ၊\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ၶူၼ်ႉႁႃ logs ဢၼ်ၵွင်ႉၵၢႆႇၵၼ်],\nဢမ်ႇၼၼ် [{{fullurl:{{FULLPAGENAME}}|action=edit}} သၢင်ႈၼႃႈၼႆႉ]</span>။",
        "noarticletext-nopermission": "ၼႂ်းၼႃႈၼႆႉယင်းဢမ်ႇမီးလိၵ်ႈသင်တေႃႈလဵဝ်။\nသူၸၢင်ႈ [[Special:Search/{{PAGENAME}}|ႁႃ ႁူဝ်ၶေႃႈၼႆႉ]] ၼႂ်းတၢင်ႇၼႃႈ၊\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ၶူၼ်ႉႁႃ logs ဢၼ်ၵဵဝ်ႇၵွင်ႉၵၼ်],\nဢမ်ႇၼၼ် [{{fullurl:{{FULLPAGENAME}}|action=edit}} မူၼ်ႉမႄးၼႃႈၼႆႉ]</span>။",
        "search-result-category-size": "{{PLURAL:$1|1 ၽူႈၶဝ်ႈၸုမ်း|$1 ၽူႈၶဝ်ႈၸုမ်း}} ({{PLURAL:$2|1 ၵၼ်ၽႄ|$2 ၵၼ်ၽႄ}}, {{PLURAL:$3|1 ၾၢႆႇ|$3 ၾၢႆႇ}})",
        "search-redirect": "(ပိၼ်ႇဝၢႆႇမႃးတီႈ $1)",
        "search-section": "(တွၼ်ႈၵၼ် $1)",
-       "search-category": "(á\80\90á\80½á\81¼á\80ºá\82\88á\81µá\81¼á\80º $1)",
+       "search-category": "(á\80\95á\80­á\80°á\80\84á\80ºá\80\91á\81¢á\81¼á\80ºá\82\88 $1)",
        "search-file-match": "(လမ်းၼႂ်းၾၢႆႇဢၼ်မႅၼ်ႈၵၼ်)",
        "search-suggest": "ၶႂ်ႈဝႃႈ $1 - ၼႆႁႃႉ",
        "search-interwiki-caption": "ၽွၼ်းလႆႈ ၵႃႈတီႈ ၼႃႈၵၢၼ် ပီႈၼွင်ႉၵၼ်",
        "group-autoconfirmed": "ၽူႈၸႂ်ႉတိုဝ်း ၸိူဝ်းၼႄႉၼွၼ်းတူဝ်ႁင်းၵူၺ်း",
        "group-bot": "ပွတ်ႉ",
        "group-sysop": "ၽူႈၵုမ်းၵၢၼ်ၶဝ်",
+       "group-interface-admin": "ၽူႈၵုမ်းၵမ်ၽၢင်ႁၢင်ႈ",
        "group-bureaucrat": "ၸဝ်ႈၼႃႈတီႈၶဝ်",
        "group-suppress": "ၽူႈတဵၵ်းတဵင်ၶဝ်",
        "group-all": "(တင်းမူတ်း)",
        "grouppage-autoconfirmed": "{{ns:project}}:ၽူႈၸႂ်ႉတိုဝ်း ၸိူဝ်းၼႄႉၼွၼ်းတူဝ်ႁင်းၵူၺ်း",
        "grouppage-bot": "{{ns:project}}:ပွတ်ႉၶဝ်",
        "grouppage-sysop": "{{ns:project}}:ၽူႈၵုမ်းၵၢၼ်ၶဝ်",
+       "grouppage-interface-admin": "{{ns:project}}:ၽူႈၵုမ်းၵမ်ၽၢင်ႁၢင်ႈ",
        "grouppage-bureaucrat": "{{ns:project}}:ၸဝ်ႈၼႃႈတီႈၶဝ်",
        "grouppage-suppress": "{{ns:project}}:တဵၵ်းတဵင်",
        "right-read": "လူ ၼႃႈလိၵ်ႈ",
        "right-move": "ၶၢႆႉ ၼႃႈလိၵ်ႈ",
        "right-move-subpages": "ၶၢႆ့ၼႃႈလိၵ်ႈ ဢိၵ်ႇ ၼႃႈလိၵ်ႈၽႄၶဝ်",
        "right-move-rootuserpages": "ၶၢႆ့ၼႃႈလိၵ်ႉ ၽူႈၸႂ်ႉတိုဝ်း ငဝ်ႈႁၢၵ်ႈ",
-       "right-move-categorypages": "á\81¶á\81¢á\82\86á\80·á\81¼á\82\83á\82\88á\80\9cá\80­á\81µá\80ºá\82\88 á\80\90á\80½á\81¼á\80ºá\82\88á\81µá\81¼á\80º",
+       "right-move-categorypages": "á\81¶á\81¢á\82\86á\80·á\81¼á\82\83á\82\88á\80\9cá\80­á\81µá\80ºá\82\88 á\80\95á\80­á\80°á\80\84á\80ºá\80\91á\81¢á\81¼á\80ºá\82\88",
        "right-movefile": "ၶၢႆ့ၾၢႆႇ",
        "right-suppressredirect": "ၽွင်းတိုၵ်ႉၶၢႆ့ၼႃႈလိၵ်ႈယူႇၼၼ်ႉ ​တေဢမ်ႇသၢင်ႈ တူဝ်ပိၼ်ႇၸီႉ ၵႃႈတီႈ ၼႃႈလိၵ်ႈ ငဝ်ႈငႃႇ",
        "right-upload": "လူတ်ႇၶိုၼ်ႈ ၾၢႆႇ",
        "grant-uploadfile": "လူတ်ႇၶိုၼ်ႈ ၾၢႆႇဢၼ်မႂ်ႇ",
        "grant-basic": "သုၼ်ႇပိုၼ်ႉထၢၼ်",
        "grant-viewdeleted": "တူၺ်း ၾၢႆႇလႄႈ ၼႃႈလိၵ်ႈ ၸိူဝ်းမွတ်ႇပႅတ်ႈယဝ်ႉ။",
-       "grant-viewmywatchlist": "တူၺ်း သဵၼ်ႈမၢႆပႂ်ႉတူၺ်း ႁင်းၶွင်ၵဝ်ႇ",
+       "grant-viewmywatchlist": "á\80\90á\80°á\81ºá\80ºá\80¸ á\80\9eá\80µá\81¼á\80ºá\82\88á\80\99á\81¢á\82\86á\80\95á\82\82á\80ºá\82\89á\80\90á\80°á\81ºá\80ºá\80¸ á\82\81á\80\84á\80ºá\80¸á\81¶á\80½á\80\84á\80ºá\81¸á\80\9dá\80ºá\82\88á\81µá\80\9dá\80ºá\82\87",
        "newuserlogpage": "သၢႆမၢႆလွင်ႈၵေႃႇသၢင်ႈ ၽူႈၸႂ်ႉတိုဝ်း",
        "newuserlogpagetext": "ဢၼ်ၼႆႉပဵၼ် သဵၼ်ႈမၢႆ လွင်ႈၵေႃႇသၢင်ႈ ၽူႈၸႂ်ႉတိုဝ်း။",
        "rightslog": "သဵၼ်ႈမၢႆ သုၼ်ႇလႆႈ ၽူႈၸႂ်ႉတိုဝ်း",
        "action-move": "ၶၢႆႉဢွင်ႈ ၼႃႈလိၵ်ႈၼႆႉ",
        "action-move-subpages": "ၶၢႆႉဢွင်ႈ ၼႃႈလိၵ်ႈၼႆႉ လႄႈ ဢိၵ်ႇတင်း ၼႃႈလိၵ်ႈၽႄမၼ်း",
        "action-move-rootuserpages": "ၶၢႆ့ၼႃႈလိၵ်ႉ ၽူႈၸႂ်ႉတိုဝ်း ငဝ်ႈႁၢၵ်ႈ",
-       "action-move-categorypages": "á\81¶á\81¢á\82\86á\80·á\81¼á\82\83á\82\88á\80\9cá\80­á\81µá\80ºá\82\88 á\80\90á\80½á\81¼á\80ºá\82\88á\81µá\81¼á\80º",
+       "action-move-categorypages": "á\81¶á\81¢á\82\86á\80·á\81¼á\82\83á\82\88á\80\9cá\80­á\81µá\80ºá\82\88 á\80\95á\80­á\80°á\80\84á\80ºá\80\91á\81¢á\81¼á\80ºá\82\88",
        "action-movefile": "ၶၢႆႉဢွင်ႈ ၾၢႆႇဢၼ်ၼႆႉ",
        "action-upload": "လူတ်ႇၶိုၼ်ႈ ၾၢႆႇဢၼ်ၼႆႉ",
        "action-reupload": "သႂ်ႇတဵင်ၵႂႃႇ ၼိူဝ် ၾၢႆႇဢၼ်မီးဝႆႉၼၼ်ႉ",
        "rcfilters-filter-major-description": "မႄးထတ်း ဢၼ်ဢမ်ႇမၢႆၸပ်းဝႆႉၼင်ႇ တွၼ်ႈဢွၼ်ႇ။",
        "rcfilters-filtergroup-changetype": "မဵဝ်းလွင်ႈလႅၵ်ႈလၢႆႈ",
        "rcfilters-filter-pageedits-label": "မႄးထတ်းၼႃႈလိၵ်ႈ",
-       "rcfilters-filter-pageedits-description": "မႄးထတ်းၸူး လမ်းၼႂ်းဝီႇၶီႇ၊ လွင်ႈဢုပ်ႇဢူဝ်း၊ ၶေႃႈသပ်းလႅင်း တွၼ်ႈၵၼ်...",
+       "rcfilters-filter-pageedits-description": "မႄးထတ်း လမ်းၼႂ်းဝီႇၶီႇ၊ ဢုပ်ႇဢူဝ်း၊ ၶေႃႈသပ်းလႅင်း ပိူင်ထၢၼ်ႈ...",
        "rcfilters-filter-newpages-label": "လွင်ႈၵေႃႇသၢင်ႈ ၼႃႈလိၵ်ႈ",
        "rcfilters-filter-newpages-description": "မႄးထတ်း ဢၼ်ႁဵတ်းပဵၼ် ၼႃႈလိၵ်ႈဢၼ်မႂ်ႇ",
-       "rcfilters-filter-categorization-label": "á\80\9cá\82\85á\81µá\80ºá\82\88á\80\9cá\81¢á\82\86á\82\88 á\80\90á\80½á\81¼á\80ºá\82\88á\81µá\81¼á\80º",
+       "rcfilters-filter-categorization-label": "á\80\9cá\82\85á\81µá\80ºá\82\88á\80\9cá\81¢á\82\86á\82\88 á\80\95á\80­á\80°á\80\84á\80ºá\80\91á\81¢á\81¼á\80ºá\82\88",
        "rcfilters-filtergroup-lastRevision": "ၵၢၼ်ၶူၼ်ႉၶႆႈ ၵမ်းလိုၼ်းသုတ်း",
        "rcfilters-filter-lastrevision-label": "ၵၢၼ်ၶူၼ်ႉၶႆႈ ၵမ်းလိုၼ်းသုတ်း",
        "rcfilters-filter-lastrevision-description": "ၸိူဝ်းဢၼ်မီးလွင်ႈလႅၵ်ႈလၢႆႈၸူး ၼႃႈလိၵ်ႈ ဢၼ်ပႆႇႁိုင်ၼၼ်ႉၵူၺ်း",
        "rcfilters-filter-previousrevision-label": "ဢမ်ႇၸႂ်ႈၵၢၼ်ၶူၼ်ႉၶႆႈ ၵမ်းလိုၼ်းသုတ်း",
        "rcfilters-filter-previousrevision-description": "ၸိူဝ်းလႅၵ်ႈလၢႆႈတင်းသဵင်ႈ ဢၼ်ဢမ်ႇၸႂ်ႈ \"လွင်ႈၶူၼ်ႉၶႆႈၵမ်းလိုၼ်းသုတ်း\"။",
+       "rcfilters-target-page-placeholder": "ထႅမ်သႂ်ႇ ၸိုဝ်ႈၼႃႈလိၵ်ႈ (ဢမ်ႇၼၼ် ပိူင်ထၢၼ်ႈ)",
        "rcnotefrom": "ၽၢႆႇတႂ်ႈ {{PLURAL:$5|ၼႆႉ ပဵၼ်လွင်ႈလႅၵ်ႈလၢႆႈ|ၸိူဝ်းၼႆႉ ပဵၼ်လွင်ႈလႅၵ်ႈလၢႆႈ}} ဝႆႉ ၸဵမ်မိူဝ်ႈ <strong>$3, $4</strong> (တေႃႇထိုင် <strong>$1</strong> ဢၼ်ၼႄဝႆႉ).",
        "rclistfrom": "ၼႄ လွင်ႈ​လႅၵ်ႈလၢႆႈဢၼ်မႂ်ႇ တႄႇတီႈ $2, $3",
        "rcshowhideminor": "$1 လွင်ႈမူၼ်ႉမႄး ဢိတ်းဢီႈ",
        "recentchangeslinked-feed": "တၢင်း​လႅၵ်ႈ​လၢႆႈ ဢၼ်​ၵဵဝ်ႇ​ၵွင်ႉ",
        "recentchangeslinked-toolbox": "တၢင်း​လႅၵ်ႈ​လၢႆႈ ဢၼ်​ၵဵဝ်ႇ​ၵွင်ႉ",
        "recentchangeslinked-title": "ၵၢၼ်လႅၵ်ႈလၢႆႈ ဢၼ်ၵပ်းၵၢႆႇလူၺ်ႈ  \"$1\"",
-       "recentchangeslinked-summary": "á\80¢á\81¼á\80ºá\81¼á\82\86á\82\89á\81¼á\82\86á\82\89á\80\95á\80µá\81¼á\80º á\80\9eá\80µá\81¼á\80ºá\82\88á\80\99á\81¢á\82\86 á\80\9cá\80½á\80\84á\80ºá\82\88á\80\9cá\82\85á\81µá\80ºá\82\88á\80\9cá\81¢á\82\86á\82\88 á\81¸á\80­á\80°á\80\9dá\80ºá\80¸á\80¢á\81¼á\80ºá\80\90á\80­á\80¯á\81µá\80ºá\82\89á\82\81á\82\83 á\80\9cá\82\85á\81µá\80ºá\82\88á\80\9cá\81¢á\82\86á\82\88á\80\99á\82\83á\80¸á\81¸á\80°á\80¸ á\81¼á\82\83á\82\88á\80\9cá\80­á\81µá\80ºá\82\88 á\80¢á\81¼á\80ºá\80\99á\81µá\80ºá\80¸á\80\99á\81¼á\80ºá\82\88á\80\9dá\82\86á\82\89á\81¼á\82\86á\82\89 (á\80¢á\80\99á\80ºá\82\87á\81¼á\81¼á\80º á\81¸á\80°á\80¸ á\81½á\80°á\82\88á\81¶á\80\9dá\80ºá\82\88á\81¸á\80¯á\80\99á\80ºá\80¸ á\80¢á\81¼á\80ºá\80\99á\80®á\80¸á\81¼á\82\82á\80ºá\80¸ á\81µá\81¼á\80º á\80¢á\81¼á\80ºá\80\9cá\82\86á\82\88á\80\99á\81µá\80ºá\80¸á\80\99á\81¼á\80ºá\82\88á\80\9dá\82\86á\82\89).\ná\81¼á\82\83á\80¸á\80\9cá\80­á\81µá\80ºá\82\88 á\81¸á\80­á\80°á\80\9dá\80ºá\80¸á\80\99á\80®á\80¸á\81¼á\80­á\80°á\80\9dá\80º [[Special:Watchlist|your watchlist]] á\81¼á\82\86á\82\89 <strong>á\80\90á\80±á\80\9cá\80\99á\80ºá\81¼á\82\83á\82\88</strong>á\80\9dá\82\86á\80·။",
+       "recentchangeslinked-summary": "á\80\90á\80½á\81¼á\80ºá\82\88á\80\90á\82\83á\82\87á\82\81á\81¼á\80ºá\80\9cá\82\86á\82\88 á\80\9cá\80½á\80\84á\80ºá\82\88á\80\9cá\82\85á\81µá\80ºá\82\88á\80\9cá\81¢á\82\86á\82\88 á\80\90á\80®á\82\88á\81¼á\80­á\80°á\80\9dá\80ºá\81¼á\82\83á\82\88á\80\9cá\80­á\81µá\80ºá\82\88 á\81¸á\80­á\80°á\80\9dá\80ºá\80¸á\80¢á\81¼á\80ºá\81µá\80½á\80\84á\80ºá\82\89á\80\9dá\82\86á\82\89á\80\90á\80®á\82\88á\81¼á\82\83á\82\88á\80\9cá\80­á\81µá\80ºá\82\88á\81¼á\81¼á\80ºá\82\89á\81¼á\82\86 á\80\91á\82\85á\80\99á\80ºá\80\9eá\82\82á\80ºá\82\87á\81¸á\80­á\80¯á\80\9dá\80ºá\82\88á\81¼á\82\83á\82\88á\80\9cá\80­á\81µá\80ºá\82\88á\81¼á\81¼á\80ºá\82\89á\80\9cá\82\84á\82\88á\81\8b (á\80\90á\80½á\81¼á\80ºá\82\88á\80\90á\82\83á\82\87á\82\81á\81¼á\80ºá\80\9cá\82\86á\82\88 á\81¸á\80¯á\80\99á\80ºá\80¸á\81½á\80¯á\80\84á\80ºá\80\95á\80­á\80°á\80\84á\80ºá\80\91á\81¢á\81¼á\80ºá\82\88á\81\8a á\80\95á\80±á\82\83á\82\89á\80\9eá\82\82á\80ºá\82\87{{ns:category}}:á\81¸á\80­á\80¯á\80\9dá\80ºá\82\88á\80\95á\80­á\80°á\80\84á\80ºá\80\91á\81¢á\81¼á\80ºá\82\88\81\8b á\80\9cá\80½á\80\84á\80ºá\82\88á\80\9cá\82\85á\81µá\80ºá\82\88á\80\9cá\81¢á\82\86á\82\88á\81¸á\80°á\80¸ á\81¼á\82\83á\82\88á\80\9cá\80­á\81µá\80ºá\82\88 á\80\90á\80®á\82\88  [[Special:Watchlist|á\80\9eá\80µá\81¼á\80ºá\82\88á\80\99á\81¢á\82\86á\80\90á\80°á\81ºá\80ºá\80¸á\81¸á\80\9dá\80ºá\82\88á\81µá\80\9dá\80ºá\82\87]] á\81¼á\81¼á\80ºá\82\89 á\80\95á\80µá\81¼á\80ºá\80\9dá\82\86á\82\89 á\80\90á\80°á\80\9dá\80ºá\80\9cá\80­á\81µá\80ºá\82\88 <strong>á\81¼á\82\83</strong>á\80\9aá\80\9dá\80ºá\82\89။",
        "recentchangeslinked-page": "ၸိုဝ်ႈၼႃႈလိၵ်ႈ",
        "recentchangeslinked-to": "ၼႄပၼ် လွၵ်ႈလႅၵ်ႈလၢႆႈ ၸူး ၼႃႈလိၵ်ႈ ဢၼ်ၵွင်ႉသိုပ်ႇ",
-       "recentchanges-page-added-to-category": "[[:$1]] á\80\9eá\82\82á\80ºá\82\87á\81¼á\82\82á\80ºá\80¸ á\80\95á\81¢á\82\86á\80¸ယဝ်ႉ",
+       "recentchanges-page-added-to-category": "[[:$1]] á\80\9eá\82\82á\80ºá\82\87á\81¸á\80°á\80¸ á\80\95á\80­á\80°á\80\84á\80ºá\80\91á\81¢á\81¼á\80ºá\82\88ယဝ်ႉ",
        "recentchanges-page-added-to-category-bundled": "[[:$1]] ထႅမ်သႂ်ႇဝႆႉယဝ်ႉ တီႈၼႂ်းတွၼ်ႈၵၼ်, [[Special:WhatLinksHere/$1|ၼႃႈလိၵ်ႈၼႆႉ မၼ်းၶဝ်ႈပႃးဝႆႉ ၵႃႈတီႈၼႂ်း ၼႃႈလိၵ်ႈ တၢင်ႇၸိူဝ်း]]",
-       "recentchanges-page-removed-from-category": "[[:$1]] á\80¢á\80\9dá\80ºá\80¢á\80½á\81µá\80ºá\82\87á\80\90á\80\99á\80ºá\82\88á\80\90á\80®á\82\88 á\80\95á\81¢á\82\86á\80¸",
+       "recentchanges-page-removed-from-category": "[[:$1]] á\80\91á\80½á\81¼á\80ºá\80¢á\80½á\81µá\80ºá\82\87á\80\95á\82\85á\80\90á\80ºá\82\88 á\81µá\82\83á\82\88á\80\90á\80®á\82\88 á\80\95á\80­á\80°á\80\84á\80ºá\80\91á\81¢á\81¼á\80ºá\82\88",
        "recentchanges-page-removed-from-category-bundled": "[[:$1]]ထွၼ်ပႅတ်ႈယဝ်ႉ ၵႃႈတီႈ တွၼ်ႈၵၼ်, [[Special:WhatLinksHere/$1|ၼႃႈလိၵ်ႈၼႆႉ မၼ်းၶဝ်ႈပႃးဝႆႉ ၵႃႈတီႈၼႂ်း ၼႃႈလိၵ်ႈ တၢင်ႇၸိူဝ်း]]",
        "autochange-username": "သိုဝ်ႇၶၢဝ်ႇဝီႇၶီႇ လႅၵ်ႈလၢႆႈ ႁင်းတူဝ်",
        "upload": "လူတ်ႇၶိုၼ်ႈၾၢႆႇ",
        "randompage-nopages": "တၢင်းၽၢႆႇတႂ်ႈၼၼ်ႉ ဢမ်ႇမီးဝႆႉ ၼႃႈလိၵ်ႈသင်\n{{PLURAL:$2|လွၵ်းၸိုဝ်ႈ}}: $1 ။",
        "randomincategory": "ၼႃႈလိၵ်ႈၵမ်ႉသၢင်ႇတေႃႇ ၵႃႈတီႈၼႂ်း ပိူင်ထၢၼ်ႈ",
        "randomincategory-invalidcategory": "\"$1\" ၼႆႉ ပဵၼ်ၸိုဝ်ႈလိူင်ႈ ဢၼ်ဢမ်ႇပဵၼ်လႆႈ။",
-       "randomincategory-nopages": "မၼ်းဢမ်ႇမီးဝႆ ၼႃႈလိၵ်ႈသင် ၵႃႈတီႈၼႂ်း [[:Category:$1|$1]] ပိူင်ထၢၼ်ႈ။",
+       "randomincategory-nopages": "မၼ်းဢမ်ႇမီးဝႆ ၼႃႈလိၵ်ႈသင် ၵႃႈတီႈၼႂ်း [[:Category:$1|$1]] ပိူင်ထၢၼ်ႈ။",
        "randomincategory-category": "ပိူင်ထၢၼ်ႈ",
        "randomincategory-legend": "ၼႃႈလိၵ်ႈၵမ်ႉသၢင်ႇတေႃႇ ၵႃႈတီႈၼႂ်း ပိူင်ထၢၼ်ႈ",
        "randomincategory-submit": "သိုပ်ႇၵႂႃႇ",
        "withoutinterwiki-submit": "ၼႄ",
        "fewestrevisions": "ၼႃႈလိၵ်ႈၸိူဝ်းမီး ၶေႃႈၶူၼ်ႉၶႆႈ ဢၼ်ဢေႇသေပိူၼ်ႈ",
        "nbytes": "$1 {{PLURAL:$1|ၿႆႉ|ၿႆႉ}}",
-       "ncategories": "{{PLURAL:$1|á\80\9cá\80­á\80°á\80\84á\80ºá\82\88\80\9cá\80­á\80°á\80\84á\80ºá\82\88á\80\90á\80\84á\80ºá\80¸á\80\9cá\81¢á\82\86}}",
+       "ncategories": "{{PLURAL:$1|á\80\95á\80­á\80°á\80\84á\80ºá\80\91á\81¢á\81¼á\80ºá\82\88\81¸á\80­á\80°á\80\9dá\80ºá\80¸á\80\95á\80­á\80°á\80\84á\80ºá\80\91á\81¢á\81¼á\80ºá\82\88}}",
        "ninterwikis": "$1 {{PLURAL:$1|ဝီႇၶီႇၽၢႆႇၼႂ်း|ဝီႇၶီႇၸိူဝ်းၽၢႆႇၼႂ်း}}",
        "nlinks": "$1 {{PLURAL:$1|ႁဵင်းၵွင်ႉ|ႁဵင်းၵွင်ႉၼမ်}}",
        "nmembers": "$1 {{PLURAL:$1|member|ၽူႈၶဝ်ႈၸုမ်း}}",
        "allpagesprefix": "ၼႃးလိၵ်ႈဢၼ်ၼႄ ဢိၵ်ႇတင်း ၶေႃႈလူင်ႈၼႃႈ",
        "allpages-hide-redirects": "သိူင်ႇ ၸိူဝ်းတူဝ်ပိၼ်ႇၸီႉ",
        "categories": "ပိူင်ထၢၼ်ႈ",
+       "categoriespagetext": "{{PLURAL:$1|ပိူင်ထၢၼ်ႈ မီးဝႆႉ|ပိူင်ထၢၼ်ႈၸိူဝ်းမီးဝႆႉ}}တီႈၼိူဝ်ဝီႇၶီႇၼင်ႇ ၽၢႆႇတႂ်ႈၼႆႉ လႅပ်ႈတေၸႂ်ႉဝႆႉ ဢမ်ႇၼၼ် ဢမ်ႇၸႂ်ႉဝႆႉ\nတူၺ်းပႃးတီႈ [[Special:WantedCategories|ပိူင်ထၢၼ်ႈ ၸိူဝ်းလူဝ်ႇ]]ၼၼ်ႉလႄႈ။",
        "sp-deletedcontributions-contribs": "လွင်ႈၶဝ်ႈႁူမ်ႈ",
        "linksearch": "သွၵ်ႈႁႃ ႁဵင်းၵွင်ႉၽၢႆႇၼွၵ်ႈ",
        "linksearch-pat": "လၢႆးသွၵ်ႈႁႃႈ :",
        "listgrants-grant": "ပၼ်သုၼ်ႇ",
        "listgrants-rights": "သုၼ်ႇ",
        "trackingcategories": "တွၼ်ႈၵၼ် ၸွမ်းႁွႆး",
-       "trackingcategories-msg": "á\80\90á\80½á\81¼á\80ºá\82\88á\81µá\81¼á\80º ၸွမ်းႁွႆး",
+       "trackingcategories-msg": "á\80\95á\80­á\80°á\80\84á\80ºá\80\91á\81¢á\81¼á\80ºá\82\88 ၸွမ်းႁွႆး",
        "trackingcategories-name": "ၸိုဝ်ႈ လိၵ်ႈပွင်ႇၶၢဝ်ႇ",
+       "trackingcategories-desc": "ပိူင်ထၢၼ်ႈ ဢၼ်ၶဝ်ႈပႃးဝႆႉ တူဝ်ထတ်း",
        "restricted-displaytitle-ignored": "ၼႃႈလိၵ်ႈ ၸိူဝ်းၶၢမ်ႈဝႆႉ တႃႇၼႄႁူဝ်ၶေႃႈ",
        "restricted-displaytitle-ignored-desc": "ၼႃႈလိၵ်ႈ ဢၼ်ၶၢမ်ႈဝႆႉ  <code><nowiki>{{DISPLAYTITLE}}</nowiki></code> ယွၼ်ႉပိူဝ်ႈဝႃႈ မၼ်းဢမ်ႇမီး လွင်ႈငမ်ႇမႅၼ်ႈၵၼ်တင်း ႁူဝ်ၶေႃႈတႄႉတႄႉ ၶွင်ၼႃႈလိၵ်ႈ။",
+       "hidden-category-category-desc": "တီးၼႂ်းလမ်းၼႂ်း ၼႃႈလိၵ်ႈမၼ်းၼၼ်ႉ ပိူင်ထၢၼ်ႈ ၶဝ်ႈပႃးဝႆႉ <code><nowiki>__HIDDENCAT__</nowiki></code> , ဢၼ်ၵႅတ်ႇမၼ်းဝႆႉ ၵႃႈတီႈ တႃႇၼႄ တီႈၼႂ်း တိူၵ်ႈႁဵင်းၵွင်ႉ ပိူင်ထၢၼ်ႈ တီႈၼႃႈလိၵ်ႈ ၼင်ႇပိူင်ၵႅဝ်ႈမၼ်းၼၼ်ႉ။",
        "trackingcategories-nodesc": "​ၶေႃႈသပ်းလႅင်း ဢမ်ႇၶဝ်ႈပႃးဝႆႉ။",
-       "trackingcategories-disabled": "á\80\90á\80½á\81¼á\80ºá\82\88á\81µá\81¼á\80ºá\81¼á\82\86á\80· ဢိုတ်းၸႂ်ႉဝႆႉ",
+       "trackingcategories-disabled": "á\80\95á\80­á\80°á\80\84á\80ºá\80\91á\81¢á\81¼á\80ºá\82\88 á\80\91á\80¯á\81µá\80ºá\82\87ဢိုတ်းၸႂ်ႉဝႆႉ",
        "mailnologin": "ဢမ်ႇသူင်ႇ ႁဵင်းလိၵ်ႈ",
        "mailnologintext": "ၸဝ်ႈၵဝ်ႇ တေလႆႈ [[Special:UserLogin|လွၵ်ႉဢိၼ်ႇ]]ဝႆႉ သေ တီႈၼႂ်း [[Special:Preferences|preferences]]ၼၼ်ႉ တေလႆႈမီး ႁဵင်းလိၵ်ႈ ဢီးမေးလ် ၸဝ်ႈၵဝ်ႇ ဢၼ်ၸႂ်ႉလႆႈ တွၼ်ႈတႃႇသူင်ႇ ဢီးမေးလ်ၸူး ၽူႈၸႂ်ႉတိုဝ်းတၢင်ႇၵေႃႉ။",
        "emailuser": "သူင်ႇဢီးမေးလ်ၸူး ၽူႈၸႂ်ႉတိုဝ်းၵေႃႉၼႆႉ",
        "emailsenttext": "ဢီးမေးလ်ၸဝ်ႈၵဝ်ႇ ထုၵ်ႇသူင်ႇပၼ်ၵႂႃႇယဝ်ႉ။",
        "emailuserfooter": "ဢီးမေးလ်ၼႆႉ  \"{{int:emailuser}}\" ၵၢၼ်တီႈ  {{SITENAME}} ၵေႃႉ {{GENDER:$1|သူင်ႇ}} $1 ၸူး  {{GENDER:$2|$2}}။ သင်ၸိူဝ်ႉဝႃႈ  {{GENDER:$2|ၸဝ်ႈၵဝ်ႇ}} ၶႂ်ႈတွပ်ႇပၼ်ၶိုၼ်း ဢီးမေးလ်ဢၼ်ၼႆႉၼႆ ဢီးမေးလ် {{GENDER:$2|ၸဝ်ႈၵဝ်ႇ}} တေထုၵ်ႇ သူင်ႇပၼ်ၵႂႃႇၸူး {{GENDER:$1|ၽူႈသူင်ႇ ၵေႃႉငဝ်ႈတိုၼ်း}}၊ ႁဵင်းလိၵ်ႈဢီးမေးလ် {{GENDER:$2|ၸဝ်ႈၵဝ်ႇ}} တေၵႂႃႇ ဢွၵ်ႇၼႄတီႈ  {{GENDER:$1|ၶဝ်}}ယဝ်ႈ။",
        "usermessage-editor": "တူဝ်သူင်ႇၶေႃႈၶၢဝ်ႇ ပိူင်သၢင်ႈ",
-       "watchlist": "သဵၼ်ႈမၢႆပႂ်ႉတူၺ်း",
+       "watchlist": "သဵၼ်ႈမၢႆပႂ်ႉတူၺ်း",
        "mywatchlist": "သဵၼ်ႈမၢႆပႂ်ႉတူၺ်း",
        "watchlistfor2": "တွၼ်ႈတႃႇ $1 $2",
        "nowatchlist": "တီႈၼႂ်း သဵၼ်ႈမၢႆပႂ်ႉတူၺ်းၸဝ်ႈၵဝ်ႇၼၼ်ႉ ဢမ်ႇမီးဝႆႉသင်။",
        "namespace_association": "ဢွင်ႈတီႈၸိုဝ်ႈ ဢၼ်ၵွင်ႉၵၢႆႇဝႆႉ",
        "tooltip-namespace_association": "လိူၵ်ႈပၼ် လွၵ်းၼႆႉ တႃႇတေႁႂ်ႈပႃး ၶေႃႈဢုပ်ႇဢူဝ်း ဢမ်ႇၼၼ် ၸိုဝ်ႈႁူဝ်ၶေႃႈ ဢၼ်ၵပ်းၵၢႆႇလူၺ်ႈ ႁူဝ်ၶေႃႈ ဢၼ်လိူၵ်ႈဝႆႉၼၼ်ႉ။",
        "blanknamespace": "ႁူဝ်ႁႅၵ်ႇ",
-       "contributions": "{{GENDER:$1|User}} ၶဝ်ႈႁူမ်ႈပႃး",
+       "contributions": "{{GENDER:$1|ၽူႈၸႂ်ႉတိုဝ်း}} ၸိူဝ်းၶဝ်ႈႁူမ်ႈပႃး",
        "contributions-title": "လွင်ႈၶဝ်ႈႁူမ်ႈၽူႈၸႂ်ႉတိုဝ်း တွၼ်ႈတႃႇ $1",
        "mycontris": "လွင်ႈၶဝ်ႈႁူမ်ႈ",
        "anoncontribs": "လွင်ႈၶဝ်ႈႁူမ်ႈ",
        "contribsub2": "တွၼ်ႈတႃႇ {{GENDER:$3|$1}} ($2)",
        "nocontribs": "ဢမ်ႇမီးလွင်ႈလႅၵ်ႈလၢႆး ၸိူဝ်းဢၼ်ငမ်ႇမႅၼ်ႈၵၼ်တင်း ၶေႃႈမၵ်းမၢႆၸိူဝ်းၼႆႉ။",
-       "uctop": "(ယၢမ်းလဵဝ်)",
+       "uctop": "ယၢမ်းလဵဝ်",
        "month": "တႄႇဢဝ်လိူၼ် (လႄႈ ဢၼ်ပူၼ်ႉမႃး):",
        "year": "တႄႇဢဝ်ပီ (လႄႈ ဢၼ်ပူၼ်ႉမႃး):",
        "date": "ၸႄႇဢဝ်ဝၼ်းထီႉ (လႄႈ ၸဝ်ႉသေၼၼ်ႉ):",
        "unblocklink": "ဢမ်ႇႁႄႉႁၢမ်ႈ",
        "change-blocklink": "လႅၵ်ႈလၢႆႈလွင်ႈႁႄႉတတ်း�",
        "contribslink": "ၶဝ်ႈႁူမ်ႈ",
-       "emaillink": "သူင်ႇ ဢီးမေးလ်",
+       "emaillink": "သူင်ႇ ဢီးမေးလ်",
        "autoblocker": "ယွၼ်ႉပိူဝ်ႈဝႃႈ ႁဵင်းလိၵ်ႈဢၢႆႇၽီႇၸဝ်ႈၵဝ်ႇၼႆႉ ထုၵ်ႇၸႂ်ႉဝႆႉ ၼင်ႇ \"[[User:$1|$1]]\" လႄႈ ထုၵ်ႉႁႄးတတ်းၵႂႃႇ ႁင်းမၼ်း။\nလွင်ႈတၢင်း ဢၼ်ပၼ်ဝႆႉ တွၼ်ႈတႃႇ ႁႄႉတတ်း  $1 ၼႆႉတႄႉ ပဵၼ် \"$2\"�",
        "blocklogpage": "�မၢႆတမ်းၵၢၼ်ႁႄႉတတ်း",
        "blocklog-showlog": "ၽူႈၸႂ်ႉတိုဝ်းၵေႃႉၼႆႉ မိူဝ်ႈပူၼ်ႉမႃး ယၢမ်ႈထုၵ်ႇႁႄႉတတ်းဝႆႉယဝ်ႉ။\nမၢႆတမ်းၵၢၼ်ႁႄႉတတ်း တွၼ်ႈတႃႇဢိင်ပိုင်ႈၼၼ်ႉ ၵမ်ႉထႅမ်ဝႆႉပၼ် ၽၢႆႇတႂ်ႈၼႆႉယူႇ :�",
        "lockedbyandtime": "( {{GENDER:$1|$1}} ၵေႃႉ မိူဝ်ႈ $2 ၶၢဝ်းယၢမ်း $3)",
        "move-page": "ၶၢႆႉ $1",
        "move-page-legend": "ၶၢႆႉၼႃႈလိၵ်ႈ",
+       "movecategorypage-warning": "<strong>ၶေႃႈၽၢင်ႉ:</strong>ၸဝ်ႈၵဝ်ႇ ၼႆႉ တေၶၢႆႉ ၼႃႈလိၵ်ႈပိူင်ထၢၼ်ႈ။ ၶႅၼ်းတေႃႈတွင်းဝႆႉ ၼႃႈလိၵ်ႈၵူၺ်း တေထုၵ်ႇၶၢႆႉၵႂႃႇသေ ၼႃႈလိၵ်ႈ ၸိူဝ်းမီးဝႆႉတီႈၼႂ်း ပိူင်ထၢၼ်ႈၵဝ်ႇၼၼ်ႉ တေ<em>ဢမ်ႇ</em>ထုၵ်ႇ တမ်းပဵၼ်ပိူင်ထၢၼ်ႈ တီႈၼႂ်း ဢၼ်မႂ်ႇၼၼ်ႉ။",
        "movenologintext": "တွၼ်ႈတႃႇၶၢႆႉၼႃႈလိၵ်ႈၼႆႉ ၸဝ်ႈၵဝ်ႇ တေလႆႈပဵၼ် ၽူႈၸႂ်ႉတိုဝ်း ဢၼ်တၢင်ႇ မၢႆၽၢင်ယဝ်ႉလႄႈ တေလႆႈ  [[Special:UserLogin|ၶဝ်ႈလွၵ်ႉဢိၼ်ႇဝႆႉ]]။",
        "movenotallowed": "ၸဝ်ႈၵဝ်ႇ ဢမ်ႇမီးသုၼ်ႇ တွၼ်ႈတႃႇၶၢႆႉ ၼႃႈလိၵ်ႈ။",
        "movenotallowedfile": "ၸဝ်ႈၵဝ်ႇ ဢမ်ႇမီးသုၼ်ႇ တွၼ်ႈတႃႇ ၶၢႆႉၾၢႆႇ။",
        "cant-move-user-page": "ၸဝ်ႈၵဝ်ႇ ဢမ်ႇမီးသုၼ်ႇ တွၼ်ႈတႃႇၶၢႆႉ ၼႃႈလိၵ်ႈ ၽူႈၸႂ်ႉတိုဝ်း (ယၢၼ်ဢဝ်တီႈ ၼႃႈလိၵ်ႈၽႄ)။",
        "cant-move-to-user-page": "ၸဝ်ႈၵဝ်ႇ ဢမ်ႇမီးသုၼ်ႇ တွၼ်ႈတႃႇၶၢႆႉ ၼႃႈလိၵ်ႈၸူး ၼႃႈလိၵ်ႈ ၽူႈၸႂ်ႉတိုဝ်း (လိူဝ်သေ ၸူး ၼႃႈလိၵ်ႈၽႄ ၽူႈၸႂ်ႉတိုဝ်း)။",
-       "cant-move-category-page": "á\81¸á\80\9dá\80ºá\82\88á\81µá\80\9dá\80ºá\82\87á\80¢á\80\99á\80ºá\82\87á\80\99á\80®á\80¸á\80\9eá\80¯á\81¼á\80ºá\82\87 á\80\90á\80½á\81¼á\80ºá\82\88á\80\90á\82\83á\82\87á\81¶á\81¢á\82\86á\82\89 á\81¼á\82\83á\82\88á\80\9cá\80­á\81µá\80ºá\82\88á\80\9cá\80­á\80°á\80\84်ႈ။",
-       "cant-move-to-category-page": "á\81¸á\80\9dá\80ºá\82\88á\81µá\80\9dá\80ºá\82\87 á\80¢á\80\99á\80ºá\82\87á\80\99á\80®á\80¸á\80\9eá\80¯á\81¼á\80ºá\82\87 á\80\90á\80½á\81¼á\80ºá\82\88á\80\90á\82\83á\82\87á\81¶á\81¢á\82\86á\82\89 á\81¼á\82\83á\82\88á\80\9cá\80­á\81µá\80ºá\82\88á\81¸á\80°á\80¸ á\81¼á\82\83á\82\88á\80\9cá\80­á\81µá\80ºá\82\88á\80\9cá\80­á\80°á\80\84်ႈ။",
+       "cant-move-category-page": "á\81¸á\80\9dá\80ºá\82\88á\81µá\80\9dá\80ºá\82\87á\80¢á\80\99á\80ºá\82\87á\80\99á\80®á\80¸á\80\9eá\80¯á\81¼á\80ºá\82\87 á\80\90á\80½á\81¼á\80ºá\82\88á\80\90á\82\83á\82\87á\81¶á\81¢á\82\86á\82\89 á\81¼á\82\83á\82\88á\80\9cá\80­á\81µá\80ºá\82\88á\80\95á\80­á\80°á\80\84á\80ºá\80\91á\81¢á\81¼်ႈ။",
+       "cant-move-to-category-page": "á\81¸á\80\9dá\80ºá\82\88á\81µá\80\9dá\80ºá\82\87 á\80¢á\80\99á\80ºá\82\87á\80\99á\80®á\80¸á\80\9eá\80¯á\81¼á\80ºá\82\87 á\80\90á\80½á\81¼á\80ºá\82\88á\80\90á\82\83á\82\87á\81¶á\81¢á\82\86á\82\89 á\81¼á\82\83á\82\88á\80\9cá\80­á\81µá\80ºá\82\88á\81¸á\80°á\80¸ á\81¼á\82\83á\82\88á\80\9cá\80­á\81µá\80ºá\82\88á\80\95á\80­á\80°á\80\84á\80ºá\80\91á\81¢á\81¼်ႈ။",
        "cant-move-subpages": "ၸဝ်ႈၵဝ်ႇ ဢမ်ႇမီးသုၼ်ႇ တႃႇၶၢႆႉ ၼႃႈလိၵ်ႈၽႄ။",
        "namespace-nosubpages": "ဢွင်ႈၸိုဝ်ႈ \"$1\" ဢမ်ႇၶႂၢင်းပၼ် ၼႃႈလိၵ်ႈၽႄ။",
        "newtitle": "ႁူဝ်ၶေႃႈ ဢၼ်မႂ်ႇ :",
        "export": "သူင်ႇၼႃႈလိၵ်ႈဢွၵ်ႇ",
        "exportall": "သူင်ႇဢွၵ်ႇ ၼႃႈလိၵ်ႈတင်းမူတ်း",
        "export-submit": "သူင်ႇဢွၵ်ႇ",
-       "export-addcattext": "á\80\91á\82\85á\80\99á\80ºá\80\9eá\82\82á\80ºá\82\87 á\81¼á\82\83á\82\88á\80\9cá\80­á\81µá\80ºá\82\88 á\81µá\82\83á\82\88á\80\90á\80®á\82\88 á\80\90á\80½á\81¼á\80ºá\82\88á\81µá\81¼á\80º:",
+       "export-addcattext": "á\80\91á\82\85á\80\99á\80ºá\80\9eá\82\82á\80ºá\82\87 á\81¼á\82\83á\82\88á\80\9cá\80­á\81µá\80ºá\82\88 á\81µá\82\83á\82\88á\80\90á\80®á\82\88 á\80\95á\80­á\80°á\80\84á\80ºá\80\91á\81¢á\81¼á\80ºá\82\88:",
        "export-addcat": "ထႅမ်သႂ်ႇ",
        "export-addnstext": "ထႅမ်သႂ်ႇ ၼႃႈလိၵ်ႈ ၵႃႈတီႈ ဢွင်ႈၸိုဝ်ႈ:",
        "export-addns": "ထႅမ်သႂ်ႇ",
        "tooltip-ca-nstab-mediawiki": "တူၺ်း ၶေႃႈၶၢဝ်ႇ ပိူင်သၢင်ႈ",
        "tooltip-ca-nstab-template": "တူၺ်း ပိူင်တမ်း",
        "tooltip-ca-nstab-help": "တူၺ်းၼႃႈလိၵ်ႈ ၸွႆႈထႅမ်",
-       "tooltip-ca-nstab-category": "တူၺ်းလိူင်ႈမၼ်း",
+       "tooltip-ca-nstab-category": "တူၺ်း ၼႃႈလိၵ်ႈပိူင်ထၢၼ်ႈ",
        "tooltip-minoredit": "မၢႆဢၼ်ၼႆႉၼင်ႇ လွင်ႈမႄးထတ်း ဢိတ်းဢီႈ",
        "tooltip-save": "ၵဵပ်းသိမ်း လွင်ႈလႅၵ်ႈလၢႆႈ",
        "tooltip-publish": "ပိုတ်ႇဢွၵ်ႇ လွင်ႈလႅၵ်ႈလၢႆႈၸဝ်ႈၵဝ်ႇ",
        "pageinfo-recent-edits": "တၢင်းၼမ်လွင်ႈမႄးထတ်း ၸိူဝ်းပႆႇပေႃးႁိုင် (တီႈၼႂ်း ၶၢဝ်းပူၼ်ႉမႃး $1)",
        "pageinfo-recent-authors": "တၢင်းၼမ် ၽူႈတႅမ်ႈလိၵ်ႈ ပႅၵ်ႇပိူင်ႈ ၸိူဝ်းဢၼ်ပႆႇပေႃးႁိုင်",
        "pageinfo-magic-words": " {{PLURAL:$1|ၶေႃႈၵႂၢမ်း|ၶေႃႈၵႂၢမ်းၸိူဝ်း}} ($1) မေႃၽၢမ်း",
-       "pageinfo-hidden-categories": "á\80\9eá\80­á\80°á\80\84á\80ºá\82\87á\80\9dá\82\86á\82\89 {{PLURAL:$1|á\80\9cá\80­á\80°á\80\84á\80ºá\82\88\80\9cá\80­á\80°á\80\84á\80ºá\82\88\81¼á\80\99á\80º)}} ($1)",
+       "pageinfo-hidden-categories": "á\80\9eá\80­á\80°á\80\84á\80ºá\82\87á\80\9dá\82\86á\82\89 {{PLURAL:$1|á\80\95á\80­á\80°á\80\84á\80ºá\80\91á\81¢á\81¼á\80ºá\82\88\81¸á\80­á\80°á\80\9dá\80ºá\80¸á\80\95á\80­á\80°á\80\84á\80ºá\80\91á\81¢á\81¼á\80ºá\82\88}} ($1)",
        "pageinfo-templates": "{{PLURAL:$1|ပိူင်တမ်း|ၸိူဝ်းပိူင်တမ်း}} ($1) ဢၼ်ႁဵတ်းဝႆႉ Transclude",
        "pageinfo-toolboxlink": "လွၼ်ႉၶၢဝ်ႇၼႃႈလိၵ်ႈ",
        "pageinfo-redirectsto": "ဝိၼ်ႇၵႂႃႇၸူး",
        "pageinfo-protect-cascading": "လွင်ႈႁႄႉၵင်ႈၼႆႉ လႆႈလူင်းယူႇတီႈၼႆ",
        "pageinfo-protect-cascading-yes": "ၸႂ်ႈယဝ်ႉ",
        "pageinfo-protect-cascading-from": "လွင်ႈႁႄႉၵင်ႈၼႆႉ လႆလူင်းယူႇတီႈၼႆႈ",
-       "pageinfo-category-info": "á\80\9cá\80½á\81¼á\80ºá\82\89á\81¶á\81¢á\80\9dá\80ºá\82\87 á\80\91á\81¢á\81¼á\80ºá\82\88á\81µá\81¼á\80º",
+       "pageinfo-category-info": "á\80\9cá\80½á\81¼á\80ºá\82\89á\81¶á\81¢á\80\9dá\80ºá\82\87 á\80\95á\80­á\80°á\80\84á\80ºá\80\91á\81¢á\81¼á\80ºá\82\88",
        "pageinfo-category-total": "တၢင်းၼမ် ၽူႈၶဝ်ႈၸုမ်း",
        "pageinfo-category-pages": "တၢင်းၼမ်ၼႃႈလိၵ်ႈ",
        "pageinfo-category-subcats": "တၢင်းၼမ် ထၢၼ်ႈၵၼ်ၽႄ",
        "exif-colorspace": "ဢွင်ႈတီႈသီ",
        "exif-datetimeoriginal": "ဝၼ်းလႄႈၶၢဝ်းယၢမ်း တမ်ႈတီႈ ၶေႃႈမုၼ်းမႂ်ႇ",
        "exif-datetimedigitized": "ဝၼ်းထီႉလႄႈ ၶၢဝ်းယၢမ်းတႃႇ digitizing",
+       "exif-iimcategory": "ပိူင်ထၢၼ်ႈ",
        "exif-orientation-1": "သႃမၺ်း",
        "exif-exposureprogram-1": "မိုဝ်းႁဵတ်း",
        "exif-dc-contributor": "ၽူႈၶဝ်ႈႁူမ်ႈ",
        "specialpages": "ၼႃႈလိၵ်ႈ ၶိုၵ်ႉတွၼ်း",
        "tag-filter": "ၶတ်းလိူၵ်ႈဢဝ်[[Special:Tags|Tag]]:",
        "tag-filter-submit": "တူဝ်ထွင်",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Tag|Tags}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Tag|Tags}}]]: $2",
        "tags-active-yes": "ၸႂ်ႈယဝ်ႉ",
        "tags-active-no": "ဢမ်ႇ",
        "tags-hitcount": "$1 {{PLURAL:$1|လႅၵ်ႈလၢႆႈ|ၸိူဝ်းလႅၵ်ႈလၢႆႈ}}",
        "searchsuggest-search": "ၶူၼ်ႉႁႃ {{SITENAME}}",
        "duration-days": "$1 {{PLURAL:$1|ဝၼ်း|ဝၼ်း။}}",
        "mw-widgets-dateinput-no-date": "ပႆႇလိူၵ်ႈဝၼ်းယၢမ်း",
+       "mw-widgets-categoryselector-add-category-placeholder": "ထႅမ်သႂ်ႇ ပိူင်ထၢၼ်ႈ...",
        "randomrootpage": "ၼႃႈလိၵ်ႈငဝ်ႈႁၢၵ်ႈ ၵမ်ႉသၢင်ႇတေႃႇ",
        "revid": "ၶူၼ်ႉၶႆႈ $1",
        "pageid": "မၢႆၽၢင် ၽိုၼ်လိၵ်ႈ $1"
index 9eba3b6..5440739 100644 (file)
        "anoncontribs": "Ittekkiyen",
        "contribsub2": "I {{GENDER:$3|$1}} ($2)",
        "nocontribs": "Ur yufi ara abddel i tebɣiḍ.",
-       "uctop": "(amiran)",
+       "uctop": "amiran",
        "month": "Seg uggur (d wid uqbel):",
        "year": "Seg useggwas (d wid uqbel):",
        "sp-contributions-newbies": "Ssken tikkin n yimseqdacen imaynuten kan",
        "fileduplicatesearch-submit": "Iruzzi",
        "specialpages": "Asebter uslig",
        "tag-filter": "Astay n [[Special:Tags|ticraḍ]]:",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Ticṛeṭ|Ticraḍ}}]] : $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Ticṛeṭ|Ticraḍ}}]] : $2",
        "tags-source-header": "Aɣbalu",
        "tags-active-yes": "Ih",
        "tags-active-no": "Uhu",
index 3af2a71..2339eb9 100644 (file)
        "contribsub2": "{{GENDER:$3|$1}} සඳහා ($2)",
        "contributions-userdoesnotexist": "\"$1\" පරිශීලක ගිණුම ලියාපදිංචි කර නොමැත.",
        "nocontribs": "මෙම උපමානයන් හා ගැලපෙන වෙනස්වීම් හමුනොවිණි.",
-       "uctop": "(වත්මන්)",
+       "uctop": "වත්මන්",
        "month": "මෙම මස (හා ඉන් පෙර) සිට:",
        "year": "මෙම වසර (හා ඉන් පෙරාතුව) සිට:",
        "sp-contributions-newbies": "නව ගිණුම් වලට පමණක් අදාල දායකත්ව පෙන්වන්න",
        "tags": "නීතික ලෙසින් වෙනස් කල හැකි ටැගයන්",
        "tag-filter": "[[Special:Tags|ටැග]] පෙරහන:",
        "tag-filter-submit": "පෙරහන",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|ටැගය|ටැග}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|ටැගය|ටැග}}]]: $2",
        "tags-title": "ටැගයන්",
        "tags-intro": "මෘදුකාංගය විසින් සංස්කරණයක් සිදුකල හැකි ටැගයන් මෙම පිටුවෙහි ලැයිස්තුගත කොට ඒවායේ තේරුම් දක්වා ඇත.",
        "tags-tag": " ටැග් නම",
        "dberr-again": "විනාඩි කිහිපයක් කල්ගතකර යළි-බාගැනුම උත්සාහ කරන්න.",
        "dberr-info": "(දත්තගබඩාවට ඇතුළු වීම‍ට නොහැකිය: $1)",
        "dberr-info-hidden": "(දත්තගබඩාවට ඇතුළු වීම‍ට නොහැකිය)",
-       "dberr-usegoogle": "මේ අතරතුර ගූගල් ඔස්සේ ගවේෂණය කිරීමට ඔබ විසින් යත්න දැරිය හැක.",
-       "dberr-outofdate": "අපගේ අන්තර්ගතයෙහි සූචියන් යල් පැන ගොස් තිබිය හැකි බව සටහන් කර ගන්න.",
-       "dberr-cachederror": "මෙය ඉල්ලා ඇති පිටුවෙහි පූර්වාපේක්ෂිත සංචිත පිටුවක් වන අතර එය යාවත්කාලින නොවිය හැකි බව සලකන්න.",
        "htmlform-invalid-input": "ඔබගේ සමහරක් ප්‍රදානයන් විෂයයෙහි ගැ‍ටළු ඇත",
        "htmlform-select-badoption": "ඔබ විසින් හුවාදක්වා ඇති අගය නීතික විකල්පයක් නොවේ.",
        "htmlform-int-invalid": "ඔබ විසින් හුවාදක්වා ඇති අගය පූර්ණාංකයක් නොවේ.",
index 6e40e5e..cf33426 100644 (file)
        "prefs-editor": "Používateľ",
        "prefs-preview": "Náhľad",
        "prefs-advancedrc": "Rozšírené možnosti",
-       "prefs-opt-out": "Nepoužívať vylepšenia",
        "prefs-advancedrendering": "Rozšírené možnosti",
        "prefs-advancedsearchoptions": "Rozšírené možnosti",
        "prefs-advancedwatchlist": "Rozšírené možnosti",
        "contribsub2": "Príspevky {{GENDER:$3|$1}} ($2)",
        "contributions-userdoesnotexist": "Používateľské konto „$1“ nie je zaregistrované.",
        "nocontribs": "Neboli nájdené úpravy, ktoré by zodpovedali týmto kritériám.",
-       "uctop": "(aktuálne)",
+       "uctop": "aktuálne",
        "month": "Mesiac:",
        "year": "Rok:",
        "sp-contributions-newbies": "Zobraziť len príspevky nových účtov",
        "tags": "Platné značky úprav",
        "tag-filter": "Filter [[Special:Tags|značiek]]:",
        "tag-filter-submit": "Filter",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Značka|Značky}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Značka|Značky}}]]: $2",
        "tag-mw-contentmodelchange": "zmena modelu obsahu",
        "tag-mw-contentmodelchange-description": "Úpravy, ktoré [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:ChangeContentModel menia model obsahu] stránky",
        "tag-mw-new-redirect": "Nové presmerovanie",
        "dberr-again": "Skúste niekoľko minút počkať a potom opäť načítať stránku.",
        "dberr-info": "(Spojenie s databázovým serverom neúspešné: $1)",
        "dberr-info-hidden": "(Nie je možné kontaktovať databázový server)",
-       "dberr-usegoogle": "Zatiaľ môžete skúsiť hľadať pomocou Google.",
-       "dberr-outofdate": "Pamätajte, že ich indexy nemusia byť aktuálne.",
-       "dberr-cachederror": "Toto je kópia požadovanej stránky z vyrovnávacej pamäte a nemusí byť aktuálna.",
        "htmlform-invalid-input": "Niekotrý z údajov, ktoré ste zadali je problematický",
        "htmlform-select-badoption": "Hodnota, ktorú ste uviedli nie je platná.",
        "htmlform-int-invalid": "Hodnota, ktorú ste uviedli nie je celé číslo.",
index f77ecb9..28ed059 100644 (file)
        "anoncontribs": "شراکتاں",
        "contribsub2": "{{GENDER:$3|$1}} ($2)",
        "nocontribs": "ایں معیار دے مطابق کوئی تبدیلی نی لبھی۔",
-       "uctop": "(موجودہ)",
+       "uctop": "موجودہ",
        "month": "مہینے توں (تے پہلاں):",
        "year": "سال توں (تے پہلاں):",
        "sp-contributions-newbies": "صرف نویں ورتݨ آلیاں دے کم ݙکھاؤ",
        "sp-contributions-uploads": "اپلوڈ کردہ",
        "sp-contributions-logs": "لاگز",
        "sp-contributions-talk": "ڳالھ مہاڑ",
-       "sp-contributions-search": "حصے پاؤݨ آلیاں دی تلاش",
+       "sp-contributions-search": "حصے پاوݨ آلیاں دی ڳول",
        "sp-contributions-username": "آئی پی پتہ یا ورتݨ آلا ناں:",
        "sp-contributions-toponly": "صرف اوہ تبدیلیاں ݙکھاؤ جیہڑیاں ہُݨے ہُݨے تھیاں ہن۔",
        "sp-contributions-newonly": "صرف نویں ورقیاں بݨݨ آلیاں لکھتاں ݙیکھاؤ",
        "redirect-file": "فائل دا ناں",
        "specialpages": "خاص ورقے",
        "tag-filter": "[[Special:Tags|Tag]] چھاݨاں:",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|ٹیگ|ٹیگز}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|ٹیگ|ٹیگز}}]]: $2",
        "tag-mw-undo": "واپس",
        "tags-active-yes": "ڄیا",
        "tags-active-no": "کو",
index ac049fe..aa8f6ee 100644 (file)
        "passwordtooshort": "Geslo mora imeti najmanj $1 {{PLURAL:$1|znak|znaka|znake|znakov|znakov}}.",
        "passwordtoolong": "Gesla ne morejo biti daljša od {{PLURAL:$1|1 znaka|$1 znakov}}.",
        "passwordtoopopular": "Pogosto izbranih gesel ne morete uporabiti. Prosimo, izberite geslo, ki ga je težje uganiti.",
+       "passwordinlargeblacklist": "Vneseno geslo je na seznamu pogosto uporabljenih gesel. Prosimo, izberite izvirnejše geslo.",
        "password-name-match": "Vaše geslo se mora razlikovati od vašega uporabniškega imena.",
        "password-login-forbidden": "Uporaba tega uporabniškega imena in gesla je prepovedana.",
        "mailmypassword": "Ponastavitev gesla",
        "timezonelegend": "Časovni pas",
        "localtime": "Krajevni čas:",
        "timezoneuseserverdefault": "Uporabi privzeti wiki čas ($1)",
-       "timezoneuseoffset": "Drugo (navedite izravnavo)",
+       "timezoneuseoffset": "Drugo (spodaj navedite odmik)",
+       "timezone-useoffset-placeholder": "Primera vrednosti: »-07:00« ali »01:00«",
        "servertime": "Strežniški čas:",
        "guesstimezone": "Izpolni iz brskalnika",
        "timezoneregion-africa": "Afrika",
        "prefs-editor": "Urejevalnik",
        "prefs-preview": "Predogled",
        "prefs-advancedrc": "Napredne možnosti",
-       "prefs-opt-out": "Izključite se iz izboljšav",
        "prefs-advancedrendering": "Napredne možnosti",
        "prefs-advancedsearchoptions": "Napredne možnosti",
        "prefs-advancedwatchlist": "Napredne možnosti",
        "prefs-displayrc": "Možnosti prikaza",
        "prefs-displaywatchlist": "Možnosti prikaza",
+       "prefs-changesrc": "Prikazane spremembe",
+       "prefs-changeswatchlist": "Prikazane spremembe",
+       "prefs-pageswatchlist": "Nadzorovane strani",
        "prefs-tokenwatchlist": "Žeton",
        "prefs-diffs": "Primerjave",
        "prefs-help-prefershttps": "Nastavitev bo začela veljati ob vaši naslednji prijavi.",
        "rcfilters-watchlist-markseen-button": "Označi vse spremembe kot pregledane",
        "rcfilters-watchlist-edit-watchlist-button": "Uredi svoj seznam nadzorovanih strani",
        "rcfilters-watchlist-showupdated": "Spremembe strani, ki jih niste obiskali od zadnje spremembe, so prikazane <strong>krepko</strong>, z močnimi oznakami.",
-       "rcfilters-preference-label": "Skrij izboljšano različico Zadnjih sprememb",
-       "rcfilters-preference-help": "Povrne preoblikovanje vmesnika leta 2017 in vsa takrat in od takrat dodana orodja.",
-       "rcfilters-watchlist-preference-label": "Skrij izboljšano različico spiska nadzorov",
-       "rcfilters-watchlist-preference-help": "Razveljavi preoblikovanje vmesnika leta 2017 in vsa orodja, dodana takrat in od takrat.",
+       "rcfilters-preference-label": "Uporabi vmesnik brez JavaScripta",
+       "rcfilters-preference-help": "Naloži Zadnje spremembe brez filtrov in možnosti obarvanja.",
+       "rcfilters-watchlist-preference-label": "Uporabi vmesnik brez JavaScripta",
+       "rcfilters-watchlist-preference-help": "Naloži Spisek nadzorov brez filtrov in možnosti obarvanja.",
        "rcfilters-filter-showlinkedfrom-label": "Pokaži spremembe na straneh, na katere se povezuje",
        "rcfilters-filter-showlinkedfrom-option-label": "<strong>Strani, na katere kaže</strong> izbrana stran",
        "rcfilters-filter-showlinkedto-label": "Pokaži spremembe na straneh, ki kažejo na",
        "contribsub2": "Za {{GENDER:$3|$1}} ($2)",
        "contributions-userdoesnotexist": "Uporabniški račun »$1« ni registriran.",
        "nocontribs": "Ne najdem nobene merilom ustrezajoče spremembe.",
-       "uctop": "(trenutno)",
+       "uctop": "trenutno",
        "month": "Od meseca (in prej):",
        "year": "Od leta (in prej):",
        "date": "Od datuma (in prej):",
        "move-watch": "Opazuj to stran",
        "movepagebtn": "Prestavi stran",
        "pagemovedsub": "Uspešno prestavljeno",
+       "cannotmove": "Strani nismo mogli prestaviti zaradi {{PLURAL:$1|naslednjega razloga|naslednjih razlogov}}:",
        "movepage-moved": "Stran '''»$1«''' je prestavljena na naslov '''»$2«'''.",
        "movepage-moved-redirect": "Preusmeritev je bila ustvarjena.",
        "movepage-moved-noredirect": "Izdelava preusmeritve je bila zatrta.",
        "tags": "Veljavne etikete sprememb",
        "tag-filter": "Filter [[Special:Tags|oznak]]:",
        "tag-filter-submit": "Filtriraj",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Oznaka|Oznaki|Oznake}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Oznaka|Oznaki|Oznake}}]]: $2",
        "tag-mw-contentmodelchange": "sprememba modela vsebine",
        "tag-mw-contentmodelchange-description": "Urejanja, ki [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:ChangeContentModel spremenijo model vsebine] strani",
        "tag-mw-new-redirect": "Nova preusmeritev",
        "dberr-again": "Poskusite počakati nekaj minut in ponovno naložite stran.",
        "dberr-info": "(Ne morem dostopati do zbirke podatkov: $1)",
        "dberr-info-hidden": "(Ne morem dostopati do zbirke podatkov)",
-       "dberr-usegoogle": "V vmesnem času lahko poskusite z iskanjem preko Googla",
-       "dberr-outofdate": "Pomnite, da so njegovi imeniki naših vsebin lahko zastareli.",
-       "dberr-cachederror": "To je shranjena kopija zahtevane strani, ki morda ni najnovejša.",
        "htmlform-invalid-input": "Z delom vašega vnosa so težave",
        "htmlform-select-badoption": "Vrednost, ki ste jo vnesli, ni veljavna.",
        "htmlform-int-invalid": "Vrednost, ki ste jo vnesli, ni celo število.",
        "logentry-block-reblock": "$1 je {{GENDER:$2|spremenil|spremenila|spremenil(-a)}} nastavitve blokade za {{GENDER:$4|$3}} s časomspremenil poteka $5 $6",
        "logentry-partialblock-block": "$1 je {{GENDER:$2|blokiral|blokirala|blokiral(-a)}} {{GENDER:$4|$3}} pred urejanjem {{PLURAL:$8||strani}} $7 s časom poteka $5 $6",
        "logentry-partialblock-reblock": "$1 je {{GENDER:$2|spremenil|spremenil|spremenil(-a)}} nastavitve blokade {{GENDER:$4|$3}} za preprečitev urejanj {{PLURAL:$8||strani}} $7 s časom poteka $5 $6",
-       "logentry-non-editing-block-block": "$1 je {{GENDER:$2|blokiral|blokirala|blokiral(-a)}} {{GENDER:$4|$3}} pred neurejevalnimi dejanji s časom poteka $5 $6",
-       "logentry-non-editing-block-reblock": "$1 je {{GENDER:$2|spremenil|spremenil|spremenil(-a)}} nastavitve blokade {{GENDER:$4|$3}} za neurejevalna dejanja s časom poteka $5 $6",
+       "logentry-non-editing-block-block": "$1 je {{GENDER:$2|blokiral|blokirala|blokiral(-a)}} {{GENDER:$4|$3}} pred določenimi neurejevalnimi dejanji s časom poteka $5 $6",
+       "logentry-non-editing-block-reblock": "$1 je {{GENDER:$2|spremenil|spremenil|spremenil(-a)}} nastavitve blokade {{GENDER:$4|$3}} za določena neurejevalna dejanja s časom poteka $5 $6",
        "logentry-suppress-block": "$1 je {{GENDER:$2|blokiral|blokirala|blokiral(-a)}} {{GENDER:$4|$3}} s časom poteka $5 $6",
        "logentry-suppress-reblock": "$1 je {{GENDER:$2|spremenil|spremenila|spremenil(-a)}} nastavitve blokade za {{GENDER:$4|$3}} s časom poteka $5 $6",
        "logentry-import-upload": "$1 je {{GENDER:$2|uvozil|uvozila|uvozil(-a)}} $3 z nalaganjem datoteke",
        "passwordpolicies-policy-passwordcannotmatchblacklist": "Geslo se ne sme ujemati s posebej prepovedanimi gesli",
        "passwordpolicies-policy-maximalpasswordlength": "Geslo ne sme biti daljše od $1 {{PLURAL:$1|znak|znaka|znake|znakov}}",
        "passwordpolicies-policy-passwordcannotbepopular": "Geslo ne sme biti {{PLURAL:$1|1=popularno geslo|na seznamu $1 popularnih gesel}}",
+       "passwordpolicies-policy-passwordnotinlargeblacklist": "Geslo ne more biti na seznamu 100.000 najpogosteje uporabljenih gesel.",
        "easydeflate-invaliddeflate": "Dana vsebina ni pravilno stisnjena",
        "unprotected-js": "Iz varnostnih razlogov JavaScripta ni možno naložiti z nezaščitenih strani. Prosimo, da JavaScript ustvarite samo v imenskem prostoru MediaWiki ali kot uporabniško podstran."
 }
index caa94b9..f640546 100644 (file)
        "mycontris": "Vu mer verändart",
        "contribsub2": "Fier $1 ($2)",
        "nocontribs": "Is wurden kenne Nutzerbeiträge miet diesen Kriterien gefunda.",
-       "uctop": "(aktuell)",
+       "uctop": "aktuell",
        "month": "on Moonat:",
        "year": "bis Joahr:",
        "sp-contributions-newbies": "Zeige oack Beiträge neuer Benutzer",
index 1ac0131..84a55d5 100644 (file)
        "contributions-title": "Waxa oo ku darsaday isticmaalaha $1",
        "mycontris": "Wax qoraalkeyga",
        "contribsub2": "Ku socoto $1 ($2)",
-       "uctop": "(kor)",
+       "uctop": "kor",
        "month": "Bilaawga bisha (iyo wixii ka danbeeyay):",
        "year": "Bilaawga sanadka  (iyo wixii ka danbeeyay):",
        "sp-contributions-newbies": "Itus akoonada cusub kaliya oo wax ku darsaday",
        "blankpage": "Bog masaxan",
        "tag-filter": "[[Special:Tags|Filtaraha]] tag:",
        "tags-display-header": "Muuqaalka liiska bedelka",
-       "dberr-usegoogle": "Waxaa baroobeen kartaa in aad ka raadiso google",
        "htmlform-reset": "Ka noqo wax bedelka",
        "htmlform-selectorother-other": "kuwa kale",
        "rightsnone": "(waxna)",
index d038e67..98fe111 100644 (file)
        "contribsub2": "Për {{GENDER:$3|$1}} ($2)",
        "contributions-userdoesnotexist": "Llogaria e përdoruesit \"$1\" nuk është e regjistruar.",
        "nocontribs": "Nuk ka asnjë ndryshim që përputhet me këto kritere.",
-       "uctop": "(aktual)",
+       "uctop": "aktual",
        "month": "Nga muaji (dhe më herët):",
        "year": "Nga viti (dhe më herët):",
        "sp-contributions-newbies": "Trego vetëm redaktimet e llogarive të reja",
        "tags": "Etiketat e ndryshimeve të pavlefshme",
        "tag-filter": "[[Special:Tags|Etiketa]] filter:",
        "tag-filter-submit": "Filtër",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Etiketa|Etiketat}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Etiketa|Etiketat}}]]: $2",
        "tag-mw-contentmodelchange": "ndryshimi i modelit të përmbajtjes",
        "tag-mw-new-redirect": "Ridrejtim i ri",
        "tag-mw-new-redirect-description": "Ndryshimet që krijojnë një ridrejtim të ri ose ndryshojnë faqen në ridrejtim",
        "dberr-again": "Pritni disa minuta dhe provoni të ringarkoni faqen.",
        "dberr-info": "(Nuk mund të qaset në bazën e të dhënave: $1)",
        "dberr-info-hidden": "(Nuk mund të qaset në bazën e të dhënave)",
-       "dberr-usegoogle": "Ju mund të provoni të kërkoni përmes Googles në ndërkohë.",
-       "dberr-outofdate": "Vini re se indekset e tyre të përmbajtjes tona mund të jetë e vjetëruar.",
-       "dberr-cachederror": "Kjo është një kopje e faqes së kërkuar dhe mund të jetë e vjetëruar.",
        "htmlform-invalid-input": "Ka probleme me disa nga kontributet e tua",
        "htmlform-select-badoption": "Vlera që ju e specifikuat nuk është një alternativë e vlefshme.",
        "htmlform-int-invalid": "Vlera që ju e specifikuat nuk është numër i plotë.",
index 1ed31e6..5826514 100644 (file)
@@ -45,7 +45,7 @@
        "tog-underline": "Подвлачење веза:",
        "tog-hideminor": "Сакриј мање измене са списка скорашњих измена",
        "tog-hidepatrolled": "Сакриј патролиране измене са списка скорашњих измена",
-       "tog-newpageshidepatrolled": "Сакриј патролиране странице са листе нових страница",
+       "tog-newpageshidepatrolled": "Сакриј патролиране странице са списка нових страница",
        "tog-hidecategorization": "Сакриј категоризацију страница",
        "tog-extendwatchlist": "Прошири списак надгледања за приказ свих промена, не само недавних",
        "tog-usenewrc": "Групиши промене по страници у скорашњим изменама и списку надгледања",
        "newwindow": "(отвара се у новом прозору)",
        "cancel": "Откажи",
        "moredotdotdot": "Више…",
-       "morenotlisted": "Ова листа можда није потпуна.",
+       "morenotlisted": "Овај списак можда није потпун.",
        "mypage": "Страница",
        "mytalk": "Разговор",
        "anontalk": "Разговор",
        "updatedmarker": "ажурирано од моје последње посете",
        "printableversion": "Верзија за штампање",
        "permalink": "Трајна веза",
-       "print": "ШÑ\82ампаÑ\98",
+       "print": "ШÑ\82ампаÑ\9aе",
        "view": "Прикажи",
        "view-foreign": "Прикажи на пројекту $1",
        "edit": "Уреди",
        "lastmodifiedat": "Ова страница је последњи пут уређена на датум $1 у $2 ч.",
        "viewcount": "Овој страници је приступљено {{PLURAL:$1|једанпут|$1 пута}}.",
        "protectedpage": "Заштићена страница",
-       "jumpto": "Ð\98ди на:",
+       "jumpto": "Ð\9fÑ\80еÑ\92и на:",
        "jumptonavigation": "навигацију",
        "jumptosearch": "претрагу",
        "view-pool-error": "Сервери су тренутно преоптерећени.\nПревише корисника покушава да види ову страницу.\nСачекајте неко време пре него што поново покушате да јој приступите.\n\n$1",
        "pool-errorunknown": "Непозната грешка",
        "pool-servererror": "Услуга бројача редова није доступна ($1).",
        "poolcounter-usage-error": "Грешка при употреби: $1",
-       "aboutsite": "О пројекту {{SITENAME}}",
-       "aboutpage": "Project:О_пројекту_{{SITENAME}}",
+       "aboutsite": "О {{GRAMMAR:датив|{{SITENAME}}}}",
+       "aboutpage": "Project:О_{{GRAMMAR:датив|{{SITENAME}}}}",
        "copyright": "Садржај је доступан под лиценцом $1 осим ако је другачије наведено.",
        "copyrightpage": "{{ns:project}}:Ауторска права",
        "currentevents": "Актуелности",
        "createacct-yourpasswordagain": "Потврдите лозинку",
        "createacct-yourpasswordagain-ph": "Поново унесите лозинку",
        "userlogin-remembermypassword": "Остави ме пријављеног/у",
-       "userlogin-signwithsecure": "Користите сигурну конекцију",
+       "userlogin-signwithsecure": "Користите безбедну везу",
        "cannotlogin-title": "Пријава није могућа",
        "cannotlogin-text": "Пријава није могућа",
        "cannotloginnow-title": "Пријава тренутно није могућа",
        "password-change-forbidden": "Не можете да промените лозинку на овом викију.",
        "externaldberror": "Дошло је до грешке при потврди идентитета базе података или вам није дозвољено да ажурирате свој спољни налог.",
        "login": "Пријава",
-       "login-security": "Ð\9fоÑ\82вÑ\80да Ð²Ð°Ñ\88ег индентитета",
+       "login-security": "Ð\92еÑ\80иÑ\84икаÑ\86иÑ\98а индентитета",
        "nav-login-createaccount": "Пријавите се / отворите налог",
        "logout": "Одјава",
        "userlogout": "Одјава",
        "notloggedin": "Нисте пријављени",
        "userlogin-noaccount": "Немате налог?",
-       "userlogin-joinproject": "Придружите се пројекту {{SITENAME}}",
+       "userlogin-joinproject": "Придружите се {{GRAMMAR:датив|{{SITENAME}}}}",
        "createaccount": "Отварање налога",
        "userlogin-resetpassword-link": "Заборавили сте лозинку?",
        "userlogin-helplink2": "Помоћ при пријављивању",
        "userlogin-loggedin": "Већ сте пријављени као {{GENDER:$1|$1}}.\nКористите доњи образац да бисте се пријавили као други корисник.",
-       "userlogin-reauth": "Ð\9cоÑ\80аÑ\82е Ð´Ð° Ñ\81е Ð¿Ð¾Ð½Ð¾Ð²Ð¾ Ð¿Ñ\80иÑ\98авиÑ\82е Ð´Ð° Ð±Ð¸Ñ\81Ñ\82е Ð¿Ð¾Ñ\82вÑ\80дили да сте {{GENDER:$1|$1}}.",
+       "userlogin-reauth": "Ð\9cоÑ\80аÑ\82е Ð´Ð° Ñ\81е Ð¿Ð¾Ð½Ð¾Ð²Ð¾ Ð¿Ñ\80иÑ\98авиÑ\82е Ð´Ð° Ð±Ð¸Ñ\81Ñ\82е Ð²ÐµÑ\80иÑ\84иковали да сте {{GENDER:$1|$1}}.",
        "userlogin-createanother": "Отвори још један налог",
        "createacct-emailrequired": "Имејл-адреса",
        "createacct-emailoptional": "Имејл-адреса (опционално)",
        "passwordtooshort": "Лозинка мора имати најмање {{PLURAL:$1|један знак|$1 знака|$1 знакова}}.",
        "passwordtoolong": "Лозинке не могу бити дуже од {{PLURAL:$1|$1 знака|$1 знакова}}.",
        "passwordtoopopular": "Није могуће користити често одабране лозинке. Одаберите лозинку коју је теже погодити.",
+       "passwordinlargeblacklist": "Унесена лозинка је на листи веома често коришћених лозинки. Одаберите јединственију лозинку.",
        "password-name-match": "Лозинка се мора разликовати од корисничког имена.",
        "password-login-forbidden": "Коришћење овог корисничког имена и лозинке је забрањено.",
        "mailmypassword": "Ресетуј лозинку",
        "loginlanguagelabel": "Језик: $1",
        "suspicious-userlogout": "Ваш захтев за одјаву је одбијен јер изгледа да га је послао покварени прегледач или кеширани прокси.",
        "createacct-another-realname-tip": "Право име је опционално.\nАко одаберете да га наведете, биће коришћено за приписивање вашег рада.",
-       "pt-login": "Ð\9fÑ\80иÑ\98авиÑ\82е Ñ\81е",
+       "pt-login": "Ð\9fÑ\80иÑ\98ава",
        "pt-login-button": "Пријави ме",
        "pt-login-continue-button": "Настави пријављивање",
-       "pt-createaccount": "Ð\9eÑ\82воÑ\80иÑ\82е Ð½Ð°Ð»Ð¾Ð³",
+       "pt-createaccount": "Ð\9eÑ\82ваÑ\80аÑ\9aе Ð½Ð°Ð»Ð¾Ð³Ð°",
        "pt-userlogout": "Одјави ме",
        "php-mail-error-unknown": "Непозната грешка у функцији PHP mail().",
        "user-mail-no-addy": "Покушали сте да пошаљете имејл без имејл-адресе.",
        "headline_sample": "Текст наслова",
        "headline_tip": "Поднаслов (ниво 2)",
        "nowiki_sample": "Овде уметните необликован текст",
-       "nowiki_tip": "Занемари вики форматирање",
+       "nowiki_tip": "Занемари вики-обликовање",
        "image_sample": "Пример.jpg",
        "image_tip": "Уграђивање датотеке",
        "media_sample": "Пример.ogg",
        "blockedtitle": "Корисник је блокиран",
        "blocked-email-user": "<strong>Вашем корисничком имену је блокирано слање имејлова. Још увек можете да уређујете друге странице на овом викију.</strong> Можете да видите потпуне детаље блокаде на [[Special:MyContributions|доприносима налога]].\n\nБлокаду је извршио/ла $1.\n\nНаведен је следећи разлог: <em>$2</em>.\n\n* Почетак блокаде: $8\n* Истек блокаде: $6\n* Намењена кориснику/ци или IP адреси: $7\n* ID блокаде #$5",
        "blockedtext-partial": "<strong>Вашем корисничком имену или IP адреси је блокирано прављење промена на овој страници. Још увек можете да уређујете друге странице на овом викију.</strong> Можете да видите потпуне детаље блокаде на [[Special:MyContributions|доприносима налога]].\n\nБлокаду је извршио/ла $1.\n\nНаведен је следећи разлог: <em>$2</em>.\n\n* Почетак блокаде: $8\n* Истек блокаде: $6\n* Намењена кориснику/ци или IP адреси: $7\n* ID блокаде #$5",
-       "blockedtext": "<strong>Ð\92аÑ\88е ÐºÐ¾Ñ\80иÑ\81ниÑ\87ко Ð¸Ð¼Ðµ Ð¸Ð»Ð¸ IP Ð°Ð´Ñ\80еÑ\81а Ñ\98е Ð±Ð»Ð¾ÐºÐ¸Ñ\80ана.</strong>\n\nÐ\91локадÑ\83 Ñ\98е {{GENDER:$4|извÑ\80Ñ\88ио|извÑ\80Ñ\88ила}} $1.\nРазлог Ñ\98е <em>$2</em>.\n\n* Ð\9fоÑ\87еÑ\82ак Ð±Ð»Ð¾ÐºÐ°Ð´Ðµ: $8\n* Ð\98Ñ\81Ñ\82ек Ð±Ð»Ð¾ÐºÐ°Ð´Ðµ: $6\n* Ð\91локиÑ\80ани: $7\n\nÐ\9cожеÑ\82е Ð´Ð° ÐºÐ¾Ð½Ñ\82акÑ\82иÑ\80аÑ\82е {{GENDER:$4|коÑ\80иÑ\81ника|коÑ\80иÑ\81ниÑ\86Ñ\83}} $1 Ð¸Ð»Ð¸ Ð´Ñ\80Ñ\83гог [[{{MediaWiki:Grouppage-sysop}}|админиÑ\81Ñ\82Ñ\80аÑ\82оÑ\80а]] Ð´Ð° Ð±Ð¸Ñ\81Ñ\82е Ð´Ð¸Ñ\81кÑ\83Ñ\82овали Ð¾ Ð±Ð»Ð¾ÐºÐ°Ð´Ð¸.\nÐ\9dе Ð¼Ð¾Ð¶ÐµÑ\82е Ð´Ð° ÐºÐ¾Ñ\80иÑ\81Ñ\82иÑ\82е Ñ\84Ñ\83нкÑ\86иÑ\98Ñ\83 â\80\9e{{int:emailuser}}â\80\9d Ð¾Ñ\81им Ð°ÐºÐ¾ Ñ\81Ñ\82е Ð½Ð°Ð²ÐµÐ»Ð¸ Ð²Ð°Ð»Ð¸Ð´Ð½Ñ\83 Ð¸Ð¼ÐµÑ\98л-адÑ\80еÑ\81Ñ\83 Ñ\83 Ñ\81воÑ\98им [[Special:Preferences|подеÑ\88аваÑ\9aима Ð½Ð°Ð»Ð¾Ð³Ð°]] Ð¸ Ð½Ð¸Ñ\81Ñ\82е Ð±Ð»Ð¾ÐºÐ¸Ñ\80ани Ð¾Ð´ ÐºÐ¾Ñ\80иÑ\88Ñ\9bеÑ\9aа Ð¸Ñ\81Ñ\82е.\nÐ\92аÑ\88а Ñ\82Ñ\80енÑ\83Ñ\82на IP Ð°Ð´Ñ\80еÑ\81а Ñ\98е $3, Ð° ID Ð±Ð»Ð¾ÐºÐ°Ð´Ðµ #$5.\nÐ\9dаведиÑ\82е Ñ\81ве Ð³Ð¾Ñ\80Ñ\9aе Ð´ÐµÑ\82аÑ\99е Ð¿Ñ\80и Ð¿Ñ\80авÑ\99ењу било каквих упита.",
+       "blockedtext": "<strong>Ð\92аÑ\88е ÐºÐ¾Ñ\80иÑ\81ниÑ\87ко Ð¸Ð¼Ðµ Ð¸Ð»Ð¸ IP Ð°Ð´Ñ\80еÑ\81а Ñ\98е Ð±Ð»Ð¾ÐºÐ¸Ñ\80ана.</strong>\n\nÐ\91локиÑ\80аÑ\9aе Ñ\98е {{GENDER:$4|извÑ\80Ñ\88ио|извÑ\80Ñ\88ила}} $1.\nРазлог Ñ\98е <em>$2</em>.\n\n* Ð\9fоÑ\87еÑ\82ак Ð±Ð»Ð¾ÐºÐ¸Ñ\80аÑ\9aа: $8\n* Ð\98Ñ\81Ñ\82ек Ð±Ð»Ð¾ÐºÐ¸Ñ\80аÑ\9aа: $6\n* Ð\91локиÑ\80ани: $7\n\nÐ\9cожеÑ\82е Ð´Ð° Ñ\81е Ð¾Ð±Ñ\80аÑ\82иÑ\82е {{GENDER:$4|коÑ\80иÑ\81никÑ\83|коÑ\80иÑ\81ниÑ\86и}} $1 Ð¸Ð»Ð¸ [[{{MediaWiki:Grouppage-sysop}}|админиÑ\81Ñ\82Ñ\80аÑ\82оÑ\80Ñ\83]] Ñ\80ади Ð´Ð¸Ñ\81кÑ\83Ñ\81иÑ\98е Ð¾ Ð±Ð»Ð¾ÐºÐ¸Ñ\80аÑ\9aÑ\83.\nÐ\9dе Ð¼Ð¾Ð¶ÐµÑ\82е Ð´Ð° ÐºÐ¾Ñ\80иÑ\81Ñ\82иÑ\82е Ð¼Ð¾Ð³Ñ\83Ñ\9bноÑ\81Ñ\82 â\80\9e{{int:emailuser}}â\80\9d Ð¾Ñ\81им Ð°ÐºÐ¾ Ñ\81Ñ\82е Ñ\83нели Ð²Ð°Ð»Ð¸Ð´Ð½Ñ\83 Ð¸Ð¼ÐµÑ\98л Ð°Ð´Ñ\80еÑ\81Ñ\83 Ñ\83 Ñ\81воÑ\98им [[Special:Preferences|подеÑ\88аваÑ\9aима]] Ð½Ð°Ð»Ð¾Ð³Ð° Ð¸ Ð½Ð¸Ñ\81Ñ\82е Ð±Ð»Ð¾ÐºÐ¸Ñ\80ани Ð¾Ð´ ÐºÐ¾Ñ\80иÑ\88Ñ\9bеÑ\9aа Ð¸Ñ\81Ñ\82е.\nÐ\92аÑ\88а Ñ\82Ñ\80енÑ\83Ñ\82на IP Ð°Ð´Ñ\80еÑ\81а Ñ\98е $3, Ð° ID Ð±Ð»Ð¾ÐºÐ¸Ñ\80аÑ\9aа #$5.\nÐ\9dаведиÑ\82е Ñ\81ве Ð¸Ð½Ñ\84оÑ\80маÑ\86иÑ\98е Ð¾Ð´Ð¾Ð·Ð³Ð¾ Ð¿Ñ\80и Ñ\81Ñ\82ваÑ\80ању било каквих упита.",
        "autoblockedtext": "Ваша IP адреса је аутоматски блокирана јер ју је користио други корисник, кога је {{GENDER:$4|блокирао|блокирала}} $1.\nРазлог:\n\n:<em>$2</em>\n\n* Почетак блокаде: $8\n* Крај блокаде: $6\n* Име корисника: $7\n\nМожете да контактирате {{GENDER:$4|корисника|корисницу}} $1 или другог [[{{MediaWiki:Grouppage-sysop}}|администратора]] да бисте расправљали о блокади.\n\nЗапамтите да не можете да користите функцију „{{int:emailuser}}“ осим ако сте навели важећу имејл-адресу у својим [[Special:Preferences|подешавањима]].\n\nВаша тренутна IP адреса је $3, а ID блокаде $5.\nУкључите све горње детаље при прављењу било каквих упита.",
        "blockednoreason": "разлог није наведен",
        "whitelistedittext": "$1 да бисте уређивали странице.",
        "updated": "(ажурирано)",
        "note": "<strong>Напомена:</strong>",
        "previewnote": "<strong>Не заборавите да је ово само претпреглед.</strong>\nВаше промене још нису сачуване!",
-       "continue-editing": "Ð\98ди Ð½Ð° Ñ\83Ñ\80еÑ\92иваÑ\87ки Ð¾ÐºÐ²Ð¸Ñ\80",
+       "continue-editing": "Ð\9fÑ\80еÑ\92и Ð½Ð° Ð¾Ð±Ð°Ñ\81Ñ\82 Ñ\83Ñ\80еÑ\92иваÑ\9aа",
        "previewconflict": "Овај преглед осликава како ће изгледати текст у текстуалном оквиру.",
        "session_fail_preview": "Извињавамо се! Нисмо могли да обрадимо вашу измену због губитка података сесије.\n\nМожда сте одјављени. <strong>Проверите да ли сте пријављени и покушајте поново</strong>.\nАко и даље не ради, покушајте да се [[Special:UserLogout|одјавите]] и поново пријавите, те проверите да ли су на вашем претраживачу дозвољени колачићи са овог сајта.",
        "session_fail_preview_html": "Нисмо могли да обрадимо вашу измену због губитка података сесије.\n\n<em>Будући да је на овом викију омогућен унос HTML ознака, преглед је сакривен као мера предострожности против напада преко јаваскрипта.</em>\n\n<strong>Ако сте покушали да направите праву измену, покушајте поново.<strong>\nАко и даље не ради, покушајте да се [[Special:UserLogout|одјавите]] и поново пријавите и проверите да ли ваш прегледач дозвољава колачиће са овог сајта.",
        "editpage-notsupportedcontentformat-text": "Формат садржаја $1 није подржан за модел садржаја $2.",
        "content-model-wikitext": "викитекст",
        "content-model-text": "чист текст",
-       "content-model-javascript": "јаваскрипт",
+       "content-model-javascript": "JavaScript",
        "content-model-css": "CSS",
        "content-model-json": "JSON",
        "content-json-empty-object": "Празан објекат",
        "undo-summary-username-hidden": "Поништи измену $1 скривеног корисника",
        "cantcreateaccount-text": "Отварање налога с ове IP адресе (<strong>$1</strong>) је блокирао/ла [[User:$3|$3]].\n\nРазлог који је навео/ла $3 је <em>$2</em>",
        "cantcreateaccount-range-text": "Отварање налога са IP адреса у распону <strong>$1</strong>, који укључује и вашу IP адресу (<strong>$4</strong>) је блокирао/ла [[User:$3|$3]].\n\nРазлог који је навео/ла $3 је <em>$2</em>",
-       "viewpagelogs": "Ð\9fÑ\80икажи Ð´Ð½ÐµÐ²Ð½Ð¸ÐºÐµ ове странице",
+       "viewpagelogs": "Ð\94невниÑ\86и ове странице",
        "nohistory": "Не постоји историја измена ове странице.",
        "currentrev": "Најновија измена",
        "currentrev-asof": "Најновија измена на датум $2 у $3",
        "revdelete-offender": "Аутор измене:",
        "suppressionlog": "Дневник сакривања",
        "suppressionlogtext": "Испод се налази списак брисања и блокирања који укључује садржај сакривен од администратора. Погледајте [[Special:BlockList|списак блокирања]] за списак тренутних операција забрана и блокирања.",
-       "mergehistory": "СпаÑ\98ање историја странице",
-       "mergehistory-header": "Ð\9eва Ñ\81Ñ\82Ñ\80аниÑ\86а Ð²Ð°Ð¼ Ð¾Ð¼Ð¾Ð³Ñ\83Ñ\9bава Ð´Ð° Ñ\81поÑ\98иÑ\82е Ð¸Ð·Ð¼ÐµÐ½Ðµ Ð½ÐµÐºÐµ Ð¸Ð·Ð²Ð¾Ñ\80не Ñ\81Ñ\82Ñ\80аниÑ\86е Ñ\83 Ð½Ð¾Ð²Ñ\83 Ñ\81Ñ\82Ñ\80аниÑ\86Ñ\83.\nÐ\97апамÑ\82иÑ\82е да ће ова промена оставити непромењен садржај историје странице.",
-       "mergehistory-box": "СпоÑ\98и Ð¸Ð·Ð¼ÐµÐ½Ðµ Ð´Ð²Ðµ Ñ\81Ñ\82Ñ\80аниÑ\86е:",
+       "mergehistory": "Ð\9eбÑ\98едиÑ\9aавање историја странице",
+       "mergehistory-header": "Ð\9eва Ñ\81Ñ\82Ñ\80аниÑ\86а Ð²Ð°Ð¼ Ð´Ð¾Ð¿Ñ\83Ñ\88Ñ\82а Ð´Ð° Ð¾Ð±Ñ\98единиÑ\82е Ð¸Ñ\81Ñ\82оÑ\80иÑ\98Ñ\83 Ð¸Ð·Ð¼ÐµÐ½Ð° Ð½ÐµÐºÐµ Ð¸Ð·Ð²Ð¾Ñ\80не Ñ\81Ñ\82Ñ\80аниÑ\86е Ñ\83 Ð½Ð¾Ð²Ð¸Ñ\98Ñ\83 Ñ\81Ñ\82Ñ\80аниÑ\86Ñ\83.\nУвеÑ\80иÑ\82е Ñ\81е да ће ова промена оставити непромењен садржај историје странице.",
+       "mergehistory-box": "Ð\9eбÑ\98едини Ð¸Ð·Ð¼ÐµÐ½Ðµ Ð´Ð²ÐµÑ\98Ñ\83 Ñ\81Ñ\82Ñ\80аниÑ\86а:",
        "mergehistory-from": "Изворна страница:",
        "mergehistory-into": "Одредишна страница:",
-       "mergehistory-list": "СпоÑ\98ива историја измена",
-       "mergehistory-merge": "Следеће измене странице [[:$1]] могу се спојити са [[:$2]].\nКористите дугмиће у колони да бисте спојили измене које су направљене пре наведеног времена.\nКоришћење навигационих веза ће поништити ову колону.",
-       "mergehistory-go": "Ð\9fÑ\80икажи Ð¸Ð·Ð¼ÐµÐ½Ðµ ÐºÐ¾Ñ\98е Ñ\81е Ð¼Ð¾Ð³Ñ\83 Ñ\81поÑ\98иÑ\82и",
-       "mergehistory-submit": "СпоÑ\98и измене",
-       "mergehistory-empty": "Нема измена за спајање.",
-       "mergehistory-done": "$3 {{PLURAL:$3|измена странице $1 је спојена|измене странице $1 су спојене|измена странице $1 је спојено}} у [[:$2]].",
+       "mergehistory-list": "Ð\9eбÑ\98едиÑ\9aива историја измена",
+       "mergehistory-merge": "Следеће измене странице [[:$1]] могу да се обједне у [[:$2]].\nКористите дугмиће у колони да бисте објединили само измене направљене пре наведеног времена.\nЗапамтите да ће коришћење веза за навигацију ресетовати ову колону.",
+       "mergehistory-go": "Ð\9fÑ\80икажи Ð¾Ð±Ñ\98едиÑ\9aиве Ð¸Ð·Ð¼ÐµÐ½Ðµ",
+       "mergehistory-submit": "Ð\9eбÑ\98едини измене",
+       "mergehistory-empty": "Нема измена за обједињавање.",
+       "mergehistory-done": "$3 {{PLURAL:$3|измена странице $1 је обједињена|измене странице $1 су обједињене|измена странице $1 је обједињено}} у [[:$2]].",
        "mergehistory-fail": "Није могуће извршити спајање историје. Проверите страницу и временске параметре.",
        "mergehistory-fail-bad-timestamp": "Временска ознака је неважећа.",
        "mergehistory-fail-invalid-source": "Изворна страница није важећа.",
        "mergehistory-fail-invalid-dest": "Одредишна страница је неважећа.",
-       "mergehistory-fail-no-change": "СпаÑ\98аÑ\9aе Ð¸Ñ\81Ñ\82оÑ\80иÑ\98е Ð½Ð¸Ñ\98е Ñ\81поÑ\98ило Ð½Ð¸Ñ\98еднÑ\83 Ð¸Ð·Ð¼ÐµÐ½Ñ\83. Ð\9fроверите параметре странице и времена.",
-       "mergehistory-fail-permission": "Ð\9dемаÑ\82е Ð¾Ð²Ð»Ð°Ñ\88Ñ\9bеÑ\9aе Ð·Ð° Ñ\81паÑ\98ање историје.",
+       "mergehistory-fail-no-change": "Ð\9eбÑ\98едиÑ\9aаваÑ\9aе Ð¸Ñ\81Ñ\82оÑ\80иÑ\98е Ð½Ð¸Ñ\98е Ð¾Ð±Ñ\98единило Ð½Ð¸Ñ\98еднÑ\83 Ð¸Ð·Ð¼ÐµÐ½Ñ\83. Ð\9fоново Ð¿роверите параметре странице и времена.",
+       "mergehistory-fail-permission": "Ð\9dедовоÑ\99но Ð´Ð¾Ð·Ð²Ð¾Ð»Ð° Ð·Ð° Ð¾Ð±Ñ\98едиÑ\9aавање историје.",
        "mergehistory-fail-self-merge": "Изворна и одредишна страница су исте.",
        "mergehistory-fail-timestamps-overlap": "Изворне измене се преклапају или долазе након одредишних измена.",
-       "mergehistory-fail-toobig": "Није могуће извршити спајање историје јер ће више од $1 {{PLURAL:$1|измене бити премештене|измена бити премештено}}.",
+       "mergehistory-fail-toobig": "Није могуће извршити обједињавање историје јер ће више од $1 {{PLURAL:$1|измене бити премештене|измена бити премештено}}.",
        "mergehistory-no-source": "Изворна страница $1 не постоји.",
        "mergehistory-no-destination": "Одредишна страница $1 не постоји.",
        "mergehistory-invalid-source": "Изворна страница мора имати валидан наслов.",
        "mergehistory-invalid-destination": "Одредишна страница мора да има важећи наслов.",
-       "mergehistory-autocomment": "Страница [[:$1]] је спојена у [[:$2]]",
+       "mergehistory-autocomment": "Страница [[:$1]] је обједињена у [[:$2]]",
        "mergehistory-comment": "Страница [[:$1]] је спојена у [[:$2]]: $3",
        "mergehistory-same-destination": "Изворна и одредишна страница не могу бити исте",
        "mergehistory-reason": "Разлог:",
        "mergehistory-revisionrow": "$1 ($2) $3 . . $4 $5 $6",
-       "mergelog": "Дневник спајања",
+       "mergelog": "Дневник обједињавања",
        "revertmerge": "растави",
-       "mergelogpagetext": "Испод је списак најскоријих спајања историја двеју страница.",
+       "mergelogpagetext": "Испод је списак најновијих обједињавања историја једне странице у другу.",
        "history-title": "Историја измена странице „$1”",
        "difference-title": "Разлика између измена на страници „$1”",
        "difference-title-multipage": "Разлика између страница „$1“ и „$2“",
        "prevn-title": "$1 {{PLURAL:$1|претходни  резултат|претходна резултата|претходних резултата}}",
        "nextn-title": "$1 {{PLURAL:$1|следећи резултат|следећа резултата|следећих резултата}}",
        "shown-title": "Прикажи $1 {{PLURAL:$1|резултат|резултата}} по страници",
-       "viewprevnext": "Ð\9fÑ\80иказ ($1 {{int:pipe-separator}} $2) ($3).",
+       "viewprevnext": "Ð\9fÑ\80икажи ($1 {{int:pipe-separator}} $2) ($3).",
        "searchmenu-exists": "<strong>Постоји страница под називом „[[:$1]]”!</strong> {{PLURAL:$2|0=|Такође погледајте друге пронађене резултате претраге.}}",
        "searchmenu-new": "<strong>Направите страницу „[[:$1]]” на овом викију!</strong> {{PLURAL:$2|0=|Такође погледајте резултат претраге.|Такође погледајте резултате претраге.}}",
        "searchprofile-articles": "Странице са садржајем",
        "prefs-watchlist": "Списак надгледања",
        "prefs-editwatchlist": "Уређивање списка надгледања",
        "prefs-editwatchlist-label": "Уреди уносе на списку надгледања:",
-       "prefs-editwatchlist-edit": "пÑ\80икажи Ð¸ Ñ\83клони Ð½Ð°Ñ\81лове са списка надгледања",
-       "prefs-editwatchlist-raw": "уреди необрађени списак надгледања",
-       "prefs-editwatchlist-clear": "оÑ\87иÑ\81Ñ\82и Ñ\81пиÑ\81ак надгледања",
+       "prefs-editwatchlist-edit": "Ð\9fÑ\80иказ Ð¸ Ñ\83клаÑ\9aаÑ\9aе Ð½Ð°Ñ\81лова са списка надгледања",
+       "prefs-editwatchlist-raw": "Уређивање необрађеног списка надгледања",
+       "prefs-editwatchlist-clear": "ЧиÑ\88Ñ\9bеÑ\9aе Ñ\81пиÑ\81ка надгледања",
        "prefs-watchlist-days": "Број дана у списку надгледања:",
        "prefs-watchlist-days-max": "Највише $1 {{PLURAL:$1|дан|дана|дана}}",
        "prefs-watchlist-edits": "Највећи број промена приказаних на списку надгледања:",
        "prefs-watchlist-edits-max": "Највећи број: 1000",
        "prefs-watchlist-token": "Токен списка надгледања:",
-       "prefs-watchlist-managetokens": "УпÑ\80авÑ\99аÑ\98 токенима",
+       "prefs-watchlist-managetokens": "УпÑ\80авÑ\99аÑ\9aе токенима",
        "prefs-misc": "Разно",
-       "prefs-resetpass": "пÑ\80омени Ð»Ð¾Ð·Ð¸Ð½ÐºÑ\83",
-       "prefs-changeemail": "Ð\9fÑ\80омени Ð¸Ð»Ð¸ Ñ\83клони Ð¸Ð¼ÐµÑ\98л-адÑ\80еÑ\81Ñ\83",
-       "prefs-setemail": "Постави имејл-адресу",
+       "prefs-resetpass": "Ð\9fÑ\80омена Ð»Ð¾Ð·Ð¸Ð½ÐºÐµ",
+       "prefs-changeemail": "Ð\9fÑ\80омена Ð¸Ð»Ð¸ Ñ\83клаÑ\9aаÑ\9aе Ð¸Ð¼ÐµÑ\98л-адÑ\80еÑ\81е",
+       "prefs-setemail": "Постављање имејл-адресе",
        "prefs-email": "Опције имејла",
        "prefs-rendering": "Изглед",
        "saveprefs": "Сачувај",
        "searchresultshead": "Претрага",
        "stub-threshold": "Праг за форматирање веза као клице ($1):",
        "stub-threshold-sample-link": "пример",
-       "stub-threshold-disabled": "онемогућено",
+       "stub-threshold-disabled": "Ð\9eнемогућено",
        "recentchangesdays": "Број дана у скорашњим изменама:",
        "recentchangesdays-max": "Највише $1 {{PLURAL:$1|дан|дана}}",
        "recentchangescount": "Подразумевани број измена за приказ у скорашњим изменама, историјама страница и дневницима:",
        "savedrights": "Корисничке групе {{GENDER:$1|корисника|кориснице}} $1 су сачуване.",
        "timezonelegend": "Временска зона:",
        "localtime": "Локално време:",
-       "timezoneuseserverdefault": "подразумеване вредности ($1)",
-       "timezoneuseoffset": "друго (унесите одступање)",
+       "timezoneuseserverdefault": "Користи подразумеване вредности викија ($1)",
+       "timezoneuseoffset": "Друго (наведите одступање испод)",
+       "timezone-useoffset-placeholder": "Примери вредности: „-07:00” или „01:00”",
        "servertime": "Време на серверу:",
-       "guesstimezone": "попуни из прегледача",
+       "guesstimezone": "Ð\9fопуни из прегледача",
        "timezoneregion-africa": "Африка",
        "timezoneregion-america": "Америка",
        "timezoneregion-antarctica": "Антарктик",
        "email-blacklist-label": "Забрани примање имејлова од следећих корисника:",
        "prefs-searchoptions": "Претрага",
        "prefs-namespaces": "Именски простори",
-       "default": "подÑ\80азÑ\83мевана",
+       "default": "подÑ\80азÑ\83мевано",
        "prefs-files": "Датотеке",
        "prefs-custom-css": "прилагођени CSS",
        "prefs-custom-json": "Прилагођени JSON",
        "prefs-custom-js": "прилагођени JavaScript",
-       "prefs-common-config": "Дељени CSS/JSON/јаваскрипт за све теме:",
+       "prefs-common-config": "Дељени CSS/JSON/JavaScript за све теме:",
        "prefs-reset-intro": "Можете користити ову страницу да поново поставите своја подешавања на подразумеване вредности сајта.\nОво се не може опозвати.",
        "prefs-emailconfirm-label": "Потврда имејла:",
        "youremail": "Имејл:",
        "prefs-help-realname": "Право име је опционално.\nАко је наведено, биће коришћено за приписивање вашег рада.",
        "prefs-help-email": "Имејл адреса је опционална, али је потребна за ресетовање лозинке, ако је заборавите.",
        "prefs-help-email-others": "Такође можете изабрати да допустите другима да вас контактирају преко имејла путем везе на вашој корисничкој страници или страници за разговор.\nВаша имејл адреса неће бити приказана другим корисницима који вас контактирају.",
-       "prefs-help-email-required": "Ð\98меÑ\98л-адÑ\80еÑ\81а Ñ\98е Ð½ÐµÐ¾Ð¿Ñ\85одна.",
+       "prefs-help-email-required": "Ð\9fоÑ\82Ñ\80ебна Ñ\98е Ð¸Ð¼ÐµÑ\98л-адÑ\80еÑ\81а.",
        "prefs-info": "Основне информације",
        "prefs-i18n": "Интернационализација",
        "prefs-signature": "Потпис",
        "prefs-editor": "Уређивач",
        "prefs-preview": "Претпреглед",
        "prefs-advancedrc": "Напредне опције",
-       "prefs-opt-out": "Онемогућавање побољшања",
        "prefs-advancedrendering": "Напредне опције",
        "prefs-advancedsearchoptions": "Напредне опције",
        "prefs-advancedwatchlist": "Напредне опције",
        "prefs-displayrc": "Подешавања приказа",
        "prefs-displaywatchlist": "Опције приказа",
+       "prefs-changesrc": "Приказане промене",
+       "prefs-changeswatchlist": "Приказане промене",
+       "prefs-pageswatchlist": "Надгледане странице",
        "prefs-tokenwatchlist": "Токен",
        "prefs-diffs": "Разлике",
        "prefs-help-prefershttps": "Ова подешавања ће ступити на снагу при следећој пријави.",
        "right-autopatrol": "аутоматско означавање измена патролираним",
        "right-patrolmarks": "прегледање ознака за патролирање унутар скорашњих измена",
        "right-unwatchedpages": "прегледање списка ненадгледаних страница",
-       "right-mergehistory": "спајање историја страница",
+       "right-mergehistory": "обједињавање историја страница",
        "right-userrights": "уређивање свих корисничких права",
        "right-userrights-interwiki": "уређивање корисничких права на другим викијима",
        "right-siteadmin": "закључавање и откључавање базе података",
        "grant-editmywatchlist": "Уређивање вашег списка надгледања",
        "grant-editpage": "Уређивање постојећих страница",
        "grant-editprotected": "Уређивање заштићених страница",
-       "grant-highvolume": "Ð\9cаÑ\81овно Ñ\83Ñ\80еÑ\92иваÑ\9aе",
+       "grant-highvolume": "Ð\9cеÑ\9aаÑ\9aе Ð²ÐµÐ»Ð¸ÐºÐ¾Ð³ Ð¾Ð±Ð¸Ð¼Ð°",
        "grant-oversight": "Скривање корисника и измена",
        "grant-patrol": "Патролирање промена на страницама",
        "grant-privateinfo": "Приступи приватним информацијама",
        "action-patrol": "означите туђе измене као патролиране",
        "action-autopatrol": "означите сопствене измене као патролиране",
        "action-unwatchedpages": "прегледате списак ненадгледаних страница",
-       "action-mergehistory": "спајате историју ове странице",
+       "action-mergehistory": "обједините историју ове странице",
        "action-userrights": "уређујете сва корисничка права",
        "action-userrights-interwiki": "уређујете корисничка права корисника на другим викијима",
        "action-siteadmin": "закључавате или откључавате базу података",
        "rcfilters-watchlist-markseen-button": "Означи све промене као виђене",
        "rcfilters-watchlist-edit-watchlist-button": "Уреди списак надгледаних страница",
        "rcfilters-watchlist-showupdated": "Промене на страницама које нисте посетили од када је измена извршена су <strong>подебљане</strong>, с испуњеним ознакама.",
-       "rcfilters-preference-label": "СакÑ\80иÑ\98 Ð¿Ð¾Ð±Ð¾Ñ\99Ñ\88анÑ\83 Ð²ÐµÑ\80зиÑ\98Ñ\83 Ñ\81коÑ\80аÑ\88Ñ\9aиÑ\85 Ð¸Ð·Ð¼ÐµÐ½а",
-       "rcfilters-preference-help": "Ð\9fониÑ\88Ñ\82ава Ñ\80едизаÑ\98н Ð¸Ð½Ñ\82еÑ\80Ñ\84еÑ\98Ñ\81а Ð¸Ð· 2017. Ð¸ Ñ\81ве Ð°Ð»Ð°Ñ\82ке Ð´Ð¾Ð´Ð°Ñ\82е Ñ\82ада Ð¸ Ð¿Ð¾Ñ\81ле.",
-       "rcfilters-watchlist-preference-label": "СакÑ\80иÑ\98 Ð¿Ð¾Ð±Ð¾Ñ\99Ñ\88анÑ\83 Ð²ÐµÑ\80зиÑ\98Ñ\83 Ñ\81пиÑ\81ка Ð½Ð°Ð´Ð³Ð»ÐµÐ´Ð°Ñ\9aа",
-       "rcfilters-watchlist-preference-help": "Уклања редизајн интерфејса из 2017. године и све алатке додате тада и од тада.",
+       "rcfilters-preference-label": "Ð\9aоÑ\80иÑ\81Ñ\82и Ð¸Ð½Ñ\82еÑ\80Ñ\84еÑ\98Ñ\81 Ð±ÐµÐ· JavaScript-а",
+       "rcfilters-preference-help": "УÑ\87иÑ\82ава Ñ\81коÑ\80аÑ\88Ñ\9aе Ð¸Ð·Ð¼ÐµÐ½Ðµ Ð±ÐµÐ· Ñ\84илÑ\82еÑ\80а Ð¸Ð»Ð¸ Ñ\84Ñ\83нкÑ\86ионалноÑ\81Ñ\82и Ð¸Ñ\81Ñ\82иÑ\86аÑ\9aа.",
+       "rcfilters-watchlist-preference-label": "Ð\9aоÑ\80иÑ\81Ñ\82и Ð¸Ð½Ñ\82еÑ\80Ñ\84еÑ\98Ñ\81 Ð±ÐµÐ· JavaScript-а",
+       "rcfilters-watchlist-preference-help": "Учитава списак надгледања без филтера или функционалности истицања.",
        "rcfilters-filter-showlinkedfrom-label": "Прикажи промене на страницама са којих долазе везе",
        "rcfilters-filter-showlinkedfrom-option-label": "<strong>Странице са којих долазе везе до</strong> изабране странице",
        "rcfilters-filter-showlinkedto-label": "Прикажи промене на страницама ка којима воде везе",
        "php-uploaddisabledtext": "Отпремање датотека је онемогућено у PHP-у.\nПроверите подешавања file_uploads.",
        "uploadscripted": "Датотека садржи HTML или скриптни код који може бити погрешно протумачен од стране прегледача.",
        "upload-scripted-pi-callback": "Датотека која садржи инструкције за обраду XML стилског облика се не може отпремити.",
-       "upload-scripted-dtd": "Ð\9dиÑ\98е Ð¼Ð¾Ð³Ñ\83Ñ\9bе Ð¾Ñ\82пÑ\80емиÑ\82и SVG Ð´Ð°Ñ\82оÑ\82еке које садрже нестандардну DTD декларацију.",
+       "upload-scripted-dtd": "Ð\9dиÑ\98е Ð¼Ð¾Ð³Ñ\83Ñ\9bе Ð¾Ñ\82пÑ\80емаÑ\9aе SVG Ð´Ð°Ñ\82оÑ\82ека које садрже нестандардну DTD декларацију.",
        "uploaded-script-svg": "Пронађен скриптни елеменат „$1“ у постављеној SVG датотеци.",
        "uploaded-hostile-svg": "Пронађен небезбедан CSS у стилском елементу постављене SVG датотеке.",
        "uploaded-event-handler-on-svg": "Није дозвољено постављање атрибута који контролишу догађаје <code>$1=\"$2\"</code> у SVG датотекама.",
        "upload-http-error": "Дошло је до HTTP грешке: $1",
        "upload-copy-upload-invalid-domain": "Примерци отпремања нису доступни на овом домену.",
        "upload-dialog-disabled": "Постављање датотека помоћу овог дијалога је онемогућено на овом викију.",
-       "upload-dialog-title": "Ð\9eÑ\82пÑ\80еми Ð´Ð°Ñ\82оÑ\82екÑ\83",
+       "upload-dialog-title": "Ð\9eÑ\82пÑ\80емаÑ\9aе Ð´Ð°Ñ\82оÑ\82еке",
        "upload-dialog-button-cancel": "Откажи",
        "upload-dialog-button-back": "Назад",
        "upload-dialog-button-done": "Готово",
        "mimetype": "MIME тип:",
        "download": "преузми",
        "unwatchedpages": "Ненадгледане странице",
-       "listredirects": "СпиÑ\81ак Ð¿Ñ\80еÑ\83Ñ\81меÑ\80ења",
+       "listredirects": "СпиÑ\81ак Ð¿Ñ\80еÑ\83Ñ\81меÑ\80авања",
        "listduplicatedfiles": "Списак датотека са дупликатима",
        "listduplicatedfiles-summary": "Ово је списак датотека које су дупликат неких других датотека. Само локалне датотеке су приказане.",
        "listduplicatedfiles-entry": "[[:File:$1|$1]] има [[$3|{{PLURAL:$2|један дупликат|$2 дупликата}}]].",
        "pageswithprop-submit": "Иди",
        "pageswithprop-prophidden-long": "сакривено дуго текстуално својство ($1)",
        "pageswithprop-prophidden-binary": "сакривено дуго бинарно својство ($1)",
-       "doubleredirects": "Ð\94воÑ\81Ñ\82Ñ\80Ñ\83ка Ð¿Ñ\80еÑ\83Ñ\81меÑ\80ења",
+       "doubleredirects": "Ð\94воÑ\81Ñ\82Ñ\80Ñ\83ка Ð¿Ñ\80еÑ\83Ñ\81меÑ\80авања",
        "doubleredirectstext": "Ова страница наводи странице које преусмеравају на друга преусмеравања.\nСваки ред садржи везе према првом и другом преусмеравању, као и одредишну страницу другог преусмерења која је обично „прави” чланак на кога прво преусмеравање треба да упућује.\n<del>Прецртани</del> уноси су већ решени.",
        "double-redirect-fixed-move": "[[$1]] је премештен.\nАутоматски је ажурирано и сада преусмерава на [[$2]].",
        "double-redirect-fixed-maintenance": "Аутоматски исправља двострука преусмерења из [[$1]] у [[$2]] као део одржавања",
        "protect-locked-dblock": "Нивои заштите се не могу мењати јер је активна база података закључана.\nОво су тренутна подешавања странице <strong>$1</strong>:",
        "protect-locked-access": "Ваш налог нема дозволу да мења нивое заштите странице.\nОво су тренутна подешавања странице <strong>$1</strong>:",
        "protect-cascadeon": "Ова страница је тренутно заштићена јер је укључена у {{PLURAL:$1|следећу страницу која има|следеће странице које имају}} укључену преносиву заштиту.\nПромене нивоа заштите ове странице неће да утичу на преносиву заштиту.",
-       "protect-default": "Ð\94опÑ\83Ñ\88Ñ\82ено свим корисницима",
+       "protect-default": "Ð\94озвоÑ\99ено свим корисницима",
        "protect-fallback": "Дозвољено само корисницима са дозволом „$1“",
-       "protect-level-autoconfirmed": "Ð\94опÑ\83Ñ\88Ñ\82ено само аутоматски потврђеним корисницима",
-       "protect-level-sysop": "Ð\94опÑ\83Ñ\88Ñ\82ено само администраторима",
+       "protect-level-autoconfirmed": "Ð\94озвоÑ\99ено само аутоматски потврђеним корисницима",
+       "protect-level-sysop": "Ð\94озвоÑ\99ено само администраторима",
        "protect-summary-desc": "[$1=$2] ($3)",
        "protect-summary-cascade": "преносива заштита",
        "protect-expiring": "истиче $1 (UTC)",
        "contribsub2": "За {{GENDER:$3|$1}} ($2)",
        "contributions-userdoesnotexist": "Кориснички налог „$1“ није отворен.",
        "nocontribs": "Нису пронађене промене које одговарају овим критеријумима.",
-       "uctop": "(тренутна)",
+       "uctop": "тренутна",
        "month": "од месеца (и раније):",
        "year": "од године (и раније):",
        "date": "Од датума (и раније):",
        "move-page-legend": "Премештање странице",
        "movepagetext": "Коришћење обрасца испод преименоваће страницу, премештајући целу њену историју на ново име.\nСтари наслов постаће преусмеравање на нови.\nАутоматски можете ажурирати преусмеравања која воде на оригинални наслов.\nАко се одлучите да не желите, обавезно проверите да ли постоје [[Special:DoubleRedirects|двострука]] или [[Special:BrokenRedirects|покварена]] преусмеравања.\nОдговорни сте да осигурате да везе наставе да воде тамо где треба.\n\nЗапамтите да страница <strong>неће</strong> бити премештена ако већ постоји страница на новом наслову, осим ако је ова друга преусмеравање и нема ранију историју измена.\nТо значи да можете да преименујете страницу натраг одакле је преименована ако направите грешку, али не можете преписати постојећу страницу.\n\n<strong>Напомена:</strong>\nОво може представљати драстичну и неочекивану промену за популарну страницу;\nбудите сигурни да разумете последице овога пре него што наставите.",
        "movepagetext-noredirectfixer": "Коришћење обрасца испод преименоваће страницу, премештајући целу њену историју на ново име.\nСтари наслов постаће преусмеравање на нови.\nОбавезно проверите да ли постоје [[Special:DoubleRedirects|двострука]] или [[Special:BrokenRedirects|покварена]] преусмеравања.\nОдговорни сте да осигурате да везе наставе да воде тамо где треба.\n\nЗапамтите да страница <strong>неће</strong> бити премештена ако већ постоји страница на новом наслову, осим ако је она преусмеравање и нема ранију историју измена.\nТо значи да можете да преименујете страницу натраг одакле је преименована ако направите грешку, али не можете преписати постојећу страницу.\n\n<strong>Напомена:</strong>\nОво може представљати драстичну и неочекивану промену за популарну страницу;\nбудите сигурни да разумете последице овога пре него што наставите.",
-       "movepagetalktext": "Ако сте означили овај квадратић, одговарајућа страница за разговор биће аутоматски премештена на нови наслов, осим ако већ постоји страница за разговор са истим насловом.\n\nУ том случају, мораћете ручно да је преместите или спојите, ако има потребе за тим.",
+       "movepagetalktext": "Ако потврдите избор у овом пољу за потврду, повезана страница за разговор биће аутоматски премештена на нови наслов, осим ако овде већ постоји страница за разговор са истим насловом која није празна.\n\nУ том случају, мораћете ручно да је преместите или обједините, ако има потребе за тим.",
        "moveuserpage-warning": "'''Упозорење:''' на путу сте да преместите корисничку страницу. Имајте у виду да ће само страница бити премештена, а сам корисник ''неће'' бити преименован.",
        "movecategorypage-warning": "<strong>Упозорење:</strong> премештате страницу категорије. Имајте на уму да ће само страница бити премештена и да све странице у старој категорији <em>неће</em> бити рекатегорисане у нову категорију.",
        "movenologintext": "Морате да будете регистровани и [[Special:UserLogin|пријављени]] да бисте премештали странице.",
        "tooltip-n-mainpage": "Посетите главну страну",
        "tooltip-n-mainpage-description": "Посетите главну страну",
        "tooltip-n-portal": "О пројекту, шта можете да радите и где да пронађете ствари",
-       "tooltip-n-currentevents": "Ð\9fÑ\80онаÑ\92иÑ\82е Ð´Ð¾Ð´Ð°Ñ\82не Ð¸Ð½Ñ\84оÑ\80маÑ\86иÑ\98е Ð¾ Ð°ÐºÑ\82Ñ\83елноÑ\81Ñ\82има",
+       "tooltip-n-currentevents": "Пронађите информације о актуелностима",
        "tooltip-n-recentchanges": "Списак недавних промена на викију",
        "tooltip-n-randompage": "Учитајте случајну страницу",
-       "tooltip-n-help": "Ð\9cеÑ\81Ñ\82о Ð³Ð´Ðµ Ð¼Ð¾Ð¶ÐµÑ\82е Ð½ÐµÑ\88Ñ\82о Ð´Ð° Ð½Ð°Ñ\83Ñ\87ите",
+       "tooltip-n-help": "Ð\9cеÑ\81Ñ\82о Ð³Ð´Ðµ Ð¼Ð¾Ð¶ÐµÑ\82е Ð´Ð° Ñ\81е Ð¸Ð½Ñ\84оÑ\80миÑ\88ете",
        "tooltip-t-whatlinkshere": "Списак свих вики страница које воде овде",
-       "tooltip-t-recentchangeslinked": "Недавне промене на страницама које су повезане с овом страницом",
+       "tooltip-t-recentchangeslinked": "Недавне промене на страницама које воде на ову страницу",
        "tooltip-feed-rss": "RSS фид за ову страницу",
        "tooltip-feed-atom": "Atom фид за ову страницу",
        "tooltip-t-contributions": "Списак доприноса {{GENDER:$1|овог корисника|ове кориснице|овог корисника}}",
        "creditspage": "Аутори странице",
        "nocredits": "Не постоје подаци о аутору ове странице.",
        "spamprotectiontitle": "Филтер за заштиту од непожељних порука",
-       "spamprotectiontext": "Филтера против нежељених порука је блокирао чување ове странице.\nОво је вероватно изазвано везом до спољашњег сајта који се налази на црној листи.",
+       "spamprotectiontext": "Филтер непожељног садржаја блокирао је текст који сте желели да сачувате.\nОво је вероватно изазвано везом до спољашњег сајта који се налази на црном списку.",
        "spamprotectionmatch": "Следећи текст је активирао наш филтер за нежељене поруке: $1",
        "spambot_username": "Чишћење непожељних порука у Медијавикији",
        "spam_reverting": "Враћам на последњу измену која не садржи везе до $1",
        "spam_blanking": "Све измене садрже везе до $1. Празним",
        "spam_deleting": "Све измене садрже везе до $1. Бришем",
        "simpleantispam-label": "Провера против нежељеног садржаја. \n<strong>Не</strong> попуњавајте ово!",
-       "pageinfo-title": "Ð\98нÑ\84оÑ\80маÑ\86иÑ\98е Ð·Ð° „$1“",
+       "pageinfo-title": "Ð\98нÑ\84оÑ\80маÑ\86иÑ\98е Ð¾ Ñ\81Ñ\82Ñ\80аниÑ\86и „$1“",
        "pageinfo-not-current": "Није могуће навести ове инфомације за старије измене.",
        "pageinfo-header-basic": "Основне информације",
        "pageinfo-header-edits": "Историја измена",
        "pageinfo-visiting-watchers": "Број надгледача странице који су посетили скорашње измене",
        "pageinfo-few-watchers": "Мање од $1 {{PLURAL:$1|надгледача}}",
        "pageinfo-few-visiting-watchers": "Могуће је да постоји корисник који прати и посећује недавне промене",
-       "pageinfo-redirects-name": "Ð\91Ñ\80оÑ\98 Ð¿Ñ\80еÑ\83Ñ\81меÑ\80ења на ову страницу",
+       "pageinfo-redirects-name": "Ð\91Ñ\80оÑ\98 Ð¿Ñ\80еÑ\83Ñ\81меÑ\80авања на ову страницу",
        "pageinfo-redirects-value": "$1",
        "pageinfo-subpages-name": "Број подстраница ове странице",
        "pageinfo-subpages-value": "$1 ($2 {{PLURAL:$2|преусмерење|преусмерења|преусмерења}}; $3 {{PLURAL:$3|непреусмерење|непреусмерења|непреусмерења}})",
-       "pageinfo-firstuser": "Ð\90Ñ\83Ñ\82оÑ\80 странице",
-       "pageinfo-firsttime": "Датум стварања странице",
-       "pageinfo-lastuser": "Ð\9fоÑ\81ледÑ\9aи уредник",
-       "pageinfo-lasttime": "Ð\94аÑ\82Ñ\83м Ð¿Ð¾Ñ\81ледÑ\9aе измене",
-       "pageinfo-edits": "Ð\91рој измена",
+       "pageinfo-firstuser": "ТвоÑ\80аÑ\86 странице",
+       "pageinfo-firsttime": "Датум прављења странице",
+       "pageinfo-lastuser": "Ð\9dаÑ\98новиÑ\98и уредник",
+       "pageinfo-lasttime": "Ð\94аÑ\82Ñ\83м Ð½Ð°Ñ\98новиÑ\98е измене",
+       "pageinfo-edits": "УкÑ\83пан Ð±рој измена",
        "pageinfo-authors": "Број засебних аутора",
-       "pageinfo-recent-edits": "Ð\91Ñ\80оÑ\98 Ð½ÐµÐ´Ð°Ð²Ð½Ð¸Ñ\85 Ð¿Ñ\80омена (у последњих $1)",
-       "pageinfo-recent-authors": "Број скорашњих засебних аутора",
+       "pageinfo-recent-edits": "Ð\91Ñ\80оÑ\98 Ð½ÐµÐ´Ð°Ð²Ð½Ð¸Ñ\85 Ð¸Ð·мена (у последњих $1)",
+       "pageinfo-recent-authors": "Број недавних засебних аутора",
        "pageinfo-magic-words": "{{PLURAL:$1|Магична реч|Магичне речи}} ($1)",
        "pageinfo-hidden-categories": "{{PLURAL:$1|Сакривена категорија|Сакривене категорије}} ($1)",
        "pageinfo-templates": "{{PLURAL:$1|Укључени шаблон|Укључени шаблони}} ($1)",
        "imgmultipageprev": "← претходна страница",
        "imgmultipagenext": "следећа страница →",
        "imgmultigo": "Иди!",
-       "imgmultigoto": "Ð\98ди на страницу $1",
+       "imgmultigoto": "Ð\9fÑ\80еÑ\92и на страницу $1",
        "img-lang-opt": "$2 ($1)",
        "img-lang-default": "(подразумевани језик)",
        "img-lang-info": "Рендеруј ову слику у $1. $2",
        "tags": "Важеће ознаке промена",
        "tag-filter": "Филтер [[Special:Tags|ознака]]:",
        "tag-filter-submit": "Филтрирај",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|ознака|ознаке}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|ознака|ознаке}}]]: $2",
        "tag-mw-contentmodelchange": "промена модела садржаја",
        "tag-mw-contentmodelchange-description": "Измене које [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:ChangeContentModel мењају модел садржаја] странице",
        "tag-mw-new-redirect": "ново преусмеравање",
        "diff-form-submit": "Прикажи разлике",
        "permanentlink": "Трајна веза",
        "permanentlink-revid": "ID измене",
-       "permanentlink-submit": "Ð\98ди на измену",
+       "permanentlink-submit": "Ð\9fÑ\80еÑ\92и на измену",
        "dberr-problems": "Дошло је до техничких проблема.",
        "dberr-again": "Сачекајте неколико минута и поново учитајте страницу.",
        "dberr-info": "(Не могу приступити бази података: $1)",
        "dberr-info-hidden": "(Не могу приступити бази података)",
-       "dberr-usegoogle": "У међувремену, покушајте да претражите помоћу Гугла.",
-       "dberr-outofdate": "Имајте на уму да њихови примерци нашег садржаја могу бити застарели.",
-       "dberr-cachederror": "Ово је привремено меморисан примерак стране који можда није ажуран.",
        "htmlform-invalid-input": "Постоје проблеми са неким од ваших уноса.",
        "htmlform-select-badoption": "Вредност коју сте навели није валидна опција.",
        "htmlform-int-invalid": "Наведена вредност није цели број.",
        "logentry-block-unblock": "$1 је {{GENDER:$2|деблокирао|деблокирала}} {{GENDER:$4|$3}}",
        "logentry-block-reblock": "$1 је {{GENDER:$2|променио|променила}} подешавања за блокирање {{GENDER:$4|корисника|кориснице}} {{GENDER:$4|$3}} у трајању од $5 $6",
        "logentry-partialblock-block": "$1 је {{GENDER:$2|блокирао|блокирала}} уређивање {{PLURAL:$8|странице|страница}} $7 {{GENDER:$4|кориснику|корисници|кориснику/ци}} $3 са временом истека од $5 $6",
-       "logentry-non-editing-block-block": "$1 је {{GENDER:$2|блокирао|блокирала}} неуређивачке радње {{GENDER:$4|кориснику|корисници|кориснику/ци}} $3 са временом истека од $5 $6",
-       "logentry-non-editing-block-reblock": "$1 је {{GENDER:$2|променио|променила}} подешавања блокаде неуређивачких радњи {{GENDER:$4|кориснику|корисници|кориснику/ци}} $3 са временом истека од $5 $6",
+       "logentry-non-editing-block-block": "$1 Ñ\98е {{GENDER:$2|блокиÑ\80ао|блокиÑ\80ала}} Ð¾Ð´Ñ\80еÑ\92ене Ð½ÐµÑ\83Ñ\80еÑ\92иваÑ\87ке Ñ\80адÑ\9aе {{GENDER:$4|коÑ\80иÑ\81никÑ\83|коÑ\80иÑ\81ниÑ\86и|коÑ\80иÑ\81никÑ\83\86и}} $3 Ñ\81а Ð²Ñ\80еменом Ð¸Ñ\81Ñ\82ека Ð¾Ð´ $5 $6",
+       "logentry-non-editing-block-reblock": "$1 Ñ\98е {{GENDER:$2|пÑ\80оменио|пÑ\80оменила}} Ð¿Ð¾Ð´ÐµÑ\88аваÑ\9aа Ð±Ð»Ð¾ÐºÐ°Ð´Ðµ Ð¾Ð´Ñ\80еÑ\92ениÑ\85 Ð½ÐµÑ\83Ñ\80еÑ\92иваÑ\87киÑ\85 Ñ\80адÑ\9aи {{GENDER:$4|коÑ\80иÑ\81никÑ\83|коÑ\80иÑ\81ниÑ\86и|коÑ\80иÑ\81никÑ\83\86и}} $3 Ñ\81а Ð²Ñ\80еменом Ð¸Ñ\81Ñ\82ека Ð¾Ð´ $5 $6",
        "logentry-suppress-block": "$1 је {{GENDER:$2|блокирао|блокирала}} {{GENDER:$4|$3}} у трајању од $5 $6",
        "logentry-suppress-reblock": "$1 је {{GENDER:$2|променио|променила}} подешавања за блокирање {{GENDER:$4|корисника|кориснице}} {{GENDER:$4|$3}} у трајању од $5 $6",
        "logentry-import-upload": "$1 је {{GENDER:$2|увезао|увезла}} $3 отпремањем датотеке",
        "logentry-import-upload-details": "$1 је {{GENDER:$2|увезао|увезла}} $3 отпремањем датотеке ($4 {{PLURAL:$4|измена|измене|измена}})",
        "logentry-import-interwiki": "$1 је {{GENDER:$2|увезао|увезла}} $3 с другог викија",
        "logentry-import-interwiki-details": "$1 је {{GENDER:$2|увезао|увезла}} $3 из $5 ($4 {{PLURAL:$4|измена|измене|измена}})",
-       "logentry-merge-merge": "$1 је {{GENDER:$2|спојио|спојила}} $3 у $4 (све до измене $5)",
+       "logentry-merge-merge": "$1 је {{GENDER:$2|објединио|објединила}} $3 у $4 (све до измене $5)",
        "logentry-move-move": "$1 је {{GENDER:$2|преместио|преместила}} страницу $3 на $4",
        "logentry-move-move-noredirect": "$1 је {{GENDER:$2|преместио|преместила}} страницу $3 на $4 без остављања преусмерења",
        "logentry-move-move_redir": "$1 је {{GENDER:$2|преместио|преместила}} страницу $3 на $4 преко преусмерења",
        "pagedata-bad-title": "Невалидан наслов: $1.",
        "unregistered-user-config": "Из безбедоносних разлога JavaScript, CSS и JSON корисничке подстранице не могу бити учитане за нерегистроване кориснике.",
        "passwordpolicies": "Правила за лозинке",
-       "passwordpolicies-summary": "Ово је листа ефикасних смерница за лозинке за корисничке групе дефинисане на овом викију.",
+       "passwordpolicies-summary": "Ово је списак ефикасних смерница за лозинке за корисничке групе дефинисане на овом викију.",
        "passwordpolicies-group": "Група",
        "passwordpolicies-policies": "Правила",
        "passwordpolicies-policy-display": "<span class=\"passwordpolicies-policy\">$1 <code>($2)</code></span>",
        "passwordpolicies-policy-minimalpasswordlength": "Лозинка мора да има најмање {{PLURAL:$1|један знак|$1 знака|$1 знакова}}",
        "passwordpolicies-policy-minimumpasswordlengthtologin": "Лозинка мора садржати најмање $1 {{PLURAL:$1|карактер|карактера}} да би сте могли да се пријавите.",
        "passwordpolicies-policy-passwordcannotmatchusername": "Лозинка не може да буде иста као корисничко име",
-       "passwordpolicies-policy-passwordcannotmatchblacklist": "Лозинка се не може подударати са лозинкама на црној листи",
+       "passwordpolicies-policy-passwordcannotmatchblacklist": "Лозинка се не може подударати са лозинкама на црном списку",
        "passwordpolicies-policy-maximalpasswordlength": "Лозинка мора да буде краћа од $1 {{PLURAL:$1|знака|знакова}}",
        "passwordpolicies-policy-passwordcannotbepopular": "Лозинка не може да буде {{PLURAL:$1|популарна лозинка|на списку $1 популарних лозинки}}",
+       "passwordpolicies-policy-passwordnotinlargeblacklist": "Лозинка не може да буде на листи 100.000 најчешће коришћених лозинки.",
        "unprotected-js": "Из безбедносних разлога, JavaScript не може да се учита са незаштићене странице. Само направите JavaScript у именском простору „Медијавики:” или као корисничку подстраницу"
 }
index a5a27ee..51c385c 100644 (file)
        "viewtalkpage": "Prikaži diskusiju",
        "otherlanguages": "Na drugim jezicima",
        "redirectedfrom": "(preusmereno sa $1)",
-       "redirectpagesub": "Preusmerenje",
+       "redirectpagesub": "Preusmeravanje",
        "redirectto": "Preusmerava na:",
        "lastmodifiedat": "Ova stranica je poslednji put uređena na datum $1 u $2 č.",
        "viewcount": "Ovoj stranici je pristupljeno {{PLURAL:$1|jedanput|$1 puta}}.",
        "nocookiesforlogin": "{{int:nocookieslogin}}",
        "createacct-loginerror": "Nalog je uspešno napravljen, ali se ne možete automatski prijaviti. Pređite na [[Special:UserLogin|ručno prijavljivanje]].",
        "noname": "Niste naveli važeće korisničko ime.",
-       "loginsuccesstitle": "Uspešno prijavljivanje",
+       "loginsuccesstitle": "Prijavljen",
        "loginsuccess": "<strong>Prijavljeni ste na {{SITENAME}} kao „$1”.</strong>",
        "nosuchuser": "Ne postoji korisnik s imenom „$1“.\nKorisnička imena su osetljiva na mala i velika slova.\nProverite da li ste ga dobro uneli ili [[Special:CreateAccount|otvorite novi nalog]].",
        "nosuchusershort": "Korisnik s imenom „$1“ ne postoji.\nProverite da li ste pravilno napisali.",
        "loginlanguagelabel": "Jezik: $1",
        "suspicious-userlogout": "Vaš zahtev za odjavu je odbijen jer izgleda da ga je poslao pokvareni pregledač ili keširani proksi.",
        "createacct-another-realname-tip": "Pravo ime je opcionalno.\nAko odaberete da ga navedete, biće korišćeno za pripisivanje vašeg rada.",
-       "pt-login": "Prijavite se",
+       "pt-login": "Prijava",
        "pt-login-button": "Prijavi me",
        "pt-login-continue-button": "Nastavi prijavljivanje",
-       "pt-createaccount": "Otvorite nalog",
+       "pt-createaccount": "Otvaranje naloga",
        "pt-userlogout": "Odjavi me",
        "php-mail-error-unknown": "Nepoznata greška u funkciji PHP mail().",
        "user-mail-no-addy": "Pokušali ste da pošaljete imejl bez imejl-adrese.",
        "headline_sample": "Tekst naslova",
        "headline_tip": "Podnaslov (nivo 2)",
        "nowiki_sample": "Ovde umetnite neoblikovan tekst",
-       "nowiki_tip": "Zanemari viki oblikovanje",
+       "nowiki_tip": "Zanemari viki formatiranje",
        "image_sample": "Primer.jpg",
        "image_tip": "Ugrađivanje datoteke",
        "media_sample": "Primer.ogg",
        "prevn-title": "$1 {{PLURAL:$1|prethodni  rezultat|prethodna rezultata|prethodnih rezultata}}",
        "nextn-title": "$1 {{PLURAL:$1|sledeći rezultat|sledeća rezultata|sledećih rezultata}}",
        "shown-title": "Prikaži $1 {{PLURAL:$1|rezultat|rezultata}} po stranici",
-       "viewprevnext": "Pogledajte ($1 {{int:pipe-separator}} $2) ($3).",
+       "viewprevnext": "Prikaži ($1 {{int:pipe-separator}} $2) ($3).",
        "searchmenu-exists": "<strong>Postoji stranica pod nazivom „[[:$1]]”!</strong> {{PLURAL:$2|0=|Takođe pogledajte druge pronađene rezultate pretrage.}}",
        "searchmenu-new": "<strong>Napravite stranicu „[[:$1]]” na ovom vikiju!</strong> {{PLURAL:$2|0=|Takođe pogledajte rezultat pretrage.|Takođe pogledajte rezultate pretrage.}}",
        "searchprofile-articles": "Stranice sa sadržajem",
        "searchprofile-advanced-tooltip": "Pretražite prilagođene imenske prostore",
        "search-result-size": "$1 ({{PLURAL:$2|1 reč|$2 reči}})",
        "search-result-category-size": "{{PLURAL:$1|1 član|$1 člana|$1 članova}}, ({{PLURAL:$2|1 potkategorija|$2 potkategorije|$2 potkategorija}}, {{PLURAL:$3|1 datoteka|$3 datoteke|$3 datoteka}})",
-       "search-redirect": "(preusmerenje sa $1)",
+       "search-redirect": "(preusmeravanje sa $1)",
        "search-section": "(odeljak $1)",
        "search-category": "(kategorija $1)",
        "search-file-match": "(podudara se sadržaj datoteke)",
        "prefs-editor": "Uređivač",
        "prefs-preview": "Pretpregled",
        "prefs-advancedrc": "Napredne opcije",
-       "prefs-opt-out": "Onemogućavanje poboljšanja",
        "prefs-advancedrendering": "Napredne opcije",
        "prefs-advancedsearchoptions": "Napredne opcije",
        "prefs-advancedwatchlist": "Napredne opcije",
        "linkstoimage-more": "Više od $1 {{PLURAL:$1|stranica koristi|stranice koriste|stranica koristi}} ovu datoteku.\nSledeći spisak prikazuje {{PLURAL:$1|prvu stranicu koja koristi|prve $1 stranice koje koriste|prvih $1 stranica koje koriste}} samo ovu datoteku.\nDostupan je i [[Special:WhatLinksHere/$2|potpuni spisak]].",
        "nolinkstoimage": "Nema stranica koje koriste ovu datoteku.",
        "morelinkstoimage": "Pogledajte [[Special:WhatLinksHere/$1|više veza]] do ove datoteke.",
-       "linkstoimage-redirect": "$1 (preusmerenje datoteke) $2",
+       "linkstoimage-redirect": "$1 (preusmeravanje datoteke) $2",
        "duplicatesoffile": "{{PLURAL:$1|Sledeća datoteka je duplikat|Sledeće $1 datoteke su duplikati|Sledećih $1 datoteka su duplikati}} ove datoteke ([[Special:FileDuplicateSearch/$2|detaljnije]]):",
        "sharedupload": "Ova datoteka se nalazi na $1 i može se koristiti i na drugim projektima.",
        "sharedupload-desc-there": "Ova datoteka se nalazi na $1 i može se koristiti i na drugim projektima.\nPogledajte [$2 stranicu za opis datoteke] za više detalja o njoj.",
        "protect-locked-dblock": "Nivoi zaštite se ne mogu menjati jer je aktivna baza podataka zaključana.\nOvo su trenutna podešavanja stranice <strong>$1</strong>:",
        "protect-locked-access": "Vaš nalog nema dozvolu da menja nivoe zaštite stranice.\nOvo su trenutna podešavanja stranice <strong>$1</strong>:",
        "protect-cascadeon": "Ova stranica je trenutno zaštićena jer je uključena u {{PLURAL:$1|sledeću stranicu koja ima|sledeće stranice koje imaju}} uključenu prenosivu zaštitu.\nPromene nivoa zaštite ove stranice neće da utiču na prenosivu zaštitu.",
-       "protect-default": "Dopušteno svim korisnicima",
+       "protect-default": "Dozvoljeno svim korisnicima",
        "protect-fallback": "Dozvoljeno samo korisnicima sa dozvolom „$1“",
        "protect-level-autoconfirmed": "Dopušteno samo automatski potvrđenim korisnicima",
        "protect-level-sysop": "Dopušteno samo administratorima",
        "contribsub2": "Za {{GENDER:$3|$1}} ($2)",
        "contributions-userdoesnotexist": "Korisnički nalog „$1“ nije otvoren.",
        "nocontribs": "Nisu pronađene promene koje odgovaraju ovim kriterijumima.",
-       "uctop": "(trenutna)",
+       "uctop": "trenutna",
        "month": "od meseca (i ranije):",
        "year": "od godine (i ranije):",
        "date": "Od datuma (i ranije):",
        "linkshere": "Sledeće stranice vode na stranicu <strong>$2</strong>:",
        "nolinkshere": "Nijedna stranica nije povezana sa: <strong>$2</strong>.",
        "nolinkshere-ns": "Nijedna stranica ne vodi na stranicu <strong>$2</strong> u izabranom imenskom prostoru.",
-       "isredirect": "preusmerenje",
+       "isredirect": "preusmeravanje",
        "istemplate": "uključivanje",
        "isimage": "veza do datoteke",
        "whatlinkshere-prev": "{{PLURAL:$1|prethodni|prethodna $1|prethodnih $1}}",
        "tooltip-ca-delete": "Izbrišite ovu stranicu",
        "tooltip-ca-undelete": "Vrati izmene koje su načinjene na ovoj stranici pre brisanja stranice",
        "tooltip-ca-move": "Premestite ovu stranicu",
-       "tooltip-ca-watch": "Dodajte ovu stranicu na svoj spisak nadgledanja",
+       "tooltip-ca-watch": "Dodajte ovu stranicu na spisak nadgledanja",
        "tooltip-ca-unwatch": "Uklonite ovu stranicu sa spiska nadgledanja",
        "tooltip-search": "Pretražite projekat {{SITENAME}}",
        "tooltip-search-go": "Idite na stranicu sa tačno ovim imenom ako postoji",
        "tooltip-n-mainpage": "Posetite glavnu stranu",
        "tooltip-n-mainpage-description": "Posetite glavnu stranu",
        "tooltip-n-portal": "O projektu, šta možete da radite i gde da pronađete stvari",
-       "tooltip-n-currentevents": "Pronađite dodatne informacije o aktuelnostima",
+       "tooltip-n-currentevents": "Pronađite informacije o aktuelnostima",
        "tooltip-n-recentchanges": "Spisak nedavnih promena na vikiju",
        "tooltip-n-randompage": "Učitajte slučajnu stranicu",
-       "tooltip-n-help": "Mesto gde možete nešto da naučite",
+       "tooltip-n-help": "Mesto gde možete da se informišete",
        "tooltip-t-whatlinkshere": "Spisak svih viki stranica koje vode ovde",
-       "tooltip-t-recentchangeslinked": "Nedavne promene na stranicama koje su povezane s ovom stranicom",
+       "tooltip-t-recentchangeslinked": "Nedavne promene na stranicama koje vode na ovu stranicu",
        "tooltip-feed-rss": "RSS fid za ovu stranicu",
        "tooltip-feed-atom": "Atom fid za ovu stranicu",
        "tooltip-t-contributions": "Spisak doprinosa {{GENDER:$1|ovog korisnika|ove korisnice|ovog korisnika}}",
        "tooltip-minoredit": "Označite ovu izmenu kao manju",
        "tooltip-save": "Sačuvajte svoje promene",
        "tooltip-publish": "Objavite svoje izmene",
-       "tooltip-preview": "Pregledajte svoje promene. Koristite ovo dugme pre čuvanja.",
+       "tooltip-preview": "Pregledajte promene. Koristite ovo dugme pre čuvanja.",
        "tooltip-diff": "Pogledajte koje promene ste napravili na tekstu",
        "tooltip-compareselectedversions": "Pogledajte razlike između dve izabrane izmene ove stranice",
        "tooltip-watch": "Dodajte ovu stranicu na svoj spisak nadgledanja",
        "spam_blanking": "Sve izmene sadrže veze do $1. Praznim",
        "spam_deleting": "Sve izmene sadrže veze do $1. Brišem",
        "simpleantispam-label": "Provera protiv neželjenog sadržaja. \n<strong>Ne</strong> popunjavajte ovo!",
-       "pageinfo-title": "Informacije za „$1“",
+       "pageinfo-title": "Informacije o stranici „$1“",
        "pageinfo-not-current": "Nije moguće navesti ove infomacije za starije izmene.",
        "pageinfo-header-basic": "Osnovne informacije",
        "pageinfo-header-edits": "Istorija izmena",
        "pageinfo-visiting-watchers": "Broj nadgledača stranice koji su posetili skorašnje izmene",
        "pageinfo-few-watchers": "Manje od $1 {{PLURAL:$1|nadgledača}}",
        "pageinfo-few-visiting-watchers": "Moguće je da postoji korisnik koji prati i posećuje nedavne promene",
-       "pageinfo-redirects-name": "Broj preusmerenja na ovu stranicu",
+       "pageinfo-redirects-name": "Broj preusmeravanja na ovu stranicu",
        "pageinfo-redirects-value": "$1",
        "pageinfo-subpages-name": "Broj podstranica ove stranice",
        "pageinfo-subpages-value": "$1 ($2 {{PLURAL:$2|preusmerenje|preusmerenja|preusmerenja}}; $3 {{PLURAL:$3|nepreusmerenje|nepreusmerenja|nepreusmerenja}})",
-       "pageinfo-firstuser": "Autor stranice",
-       "pageinfo-firsttime": "Datum stvaranja stranice",
-       "pageinfo-lastuser": "Poslednji urednik",
-       "pageinfo-lasttime": "Datum poslednje izmene",
-       "pageinfo-edits": "Broj izmena",
+       "pageinfo-firstuser": "Tvorac stranice",
+       "pageinfo-firsttime": "Datum pravljenja stranice",
+       "pageinfo-lastuser": "Najnoviji urednik",
+       "pageinfo-lasttime": "Datum najnovije izmene",
+       "pageinfo-edits": "Ukupan broj izmena",
        "pageinfo-authors": "Broj zasebnih autora",
-       "pageinfo-recent-edits": "Broj nedavnih promena (u poslednjih $1)",
-       "pageinfo-recent-authors": "Broj skorašnjih zasebnih autora",
+       "pageinfo-recent-edits": "Broj nedavnih izmena (u poslednjih $1)",
+       "pageinfo-recent-authors": "Broj nedavnih zasebnih autora",
        "pageinfo-magic-words": "{{PLURAL:$1|Magična reč|Magične reči}} ($1)",
        "pageinfo-hidden-categories": "{{PLURAL:$1|Sakrivena kategorija|Sakrivene kategorije}} ($1)",
        "pageinfo-templates": "{{PLURAL:$1|Uključeni šablon|Uključeni šabloni}} ($1)",
        "version-libraries-license": "Licenca",
        "version-libraries-description": "Opis",
        "version-libraries-authors": "Autori",
-       "redirect": "Preusmerenje na datoteku, korisnika, stranicu, izmenu ili dnevnik (ID)",
+       "redirect": "Preusmeravanje na datoteku, korisnika, stranicu, izmenu ili dnevnik (ID)",
        "redirect-summary": "Ova posebna stranica preusmerava do datoteke (s datim imenom datoteke), stranice (s datim ID-om izmene ili ID-om stranice), korisničke stranice (s datim numeričkim korisničkim ID-om), ili unosa u dnevniku (s datim dnevničkim ID-om). Upotreba: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], [[{{#Special:Redirect}}/user/101]], or [[{{#Special:Redirect}}/logid/186]].",
        "redirect-submit": "Idi",
        "redirect-lookup": "Tip vrednosti:",
        "tags": "Važeće oznake promena",
        "tag-filter": "Filter [[Special:Tags|oznaka]]:",
        "tag-filter-submit": "Filtriraj",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|oznaka|oznake}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|oznaka|oznake}}]]: $2",
        "tag-mw-contentmodelchange": "promena modela sadržaja",
        "tag-mw-contentmodelchange-description": "Izmene koje [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:ChangeContentModel menjaju model sadržaja] stranice",
        "tag-mw-new-redirect": "novo preusmerenje",
        "dberr-again": "Sačekajte nekoliko minuta i ponovo učitajte stranicu.",
        "dberr-info": "(Ne mogu pristupiti bazi podataka: $1)",
        "dberr-info-hidden": "(Ne mogu pristupiti bazi podataka)",
-       "dberr-usegoogle": "U međuvremenu, pokušajte da pretražite pomoću Gugla.",
-       "dberr-outofdate": "Imajte na umu da njihovi primerci našeg sadržaja mogu biti zastareli.",
-       "dberr-cachederror": "Ovo je privremeno memorisan primerak strane koji možda nije ažuran.",
        "htmlform-invalid-input": "Postoje problemi sa nekim od vaših unosa.",
        "htmlform-select-badoption": "Vrednost koju ste naveli nije validna opcija.",
        "htmlform-int-invalid": "Navedena vrednost nije celi broj.",
index 05343e9..5fb6400 100644 (file)
        "contributions": "Sani di a kebroikiman du",
        "mycontris": "Sani di mi du",
        "contribsub2": "Fu $1 ($2)",
-       "uctop": "(a moro nyun kenki)",
+       "uctop": "a moro nyun kenki",
        "month": "Fu a mun (nanga moro owru):",
        "year": "Fu a yari (nanga moro owru):",
        "sp-contributions-newbies-sub": "Gi nyun account",
index e8a5ed0..5aecc73 100644 (file)
        "mycontris": "Oaine Biedraage",
        "contribsub2": "Foar $1 ($2)",
        "nocontribs": "Deer wuuden neen Annerengen foar disse Kriterien fuunen.",
-       "uctop": "(aktuäl)",
+       "uctop": "aktuäl",
        "month": "un Mound:",
        "year": "bit Jier:",
        "sp-contributions-newbies": "Wies bloot Biedraage fon näie Benutsere",
        "dberr-problems": "Äntskeeldenge. Disse Siede häd apstuuns techniske Meelasje.",
        "dberr-again": "Fersäik n poor Minuten tou täiwen un dan näi tou leeden.",
        "dberr-info": "(Kon neen Ferbiendenge tou dän Doatenboank-Server moakje: $1)",
-       "dberr-usegoogle": "Du kuust in ju Twisketied mäd Google säike.",
-       "dberr-outofdate": "Beoachtje, dät die Säikindex fon uus Inhoolde ferallerd weese kon.",
-       "dberr-cachederror": "Dät Foulgjende is ne Kopie fon dän Cache fon ju anfoarderde Siede un kon ferallerd weese.",
        "htmlform-invalid-input": "Mäd eenige Iengoawen rakt dät Probleme",
        "htmlform-select-badoption": "Die anroate Wäid is neen gultige Option.",
        "htmlform-int-invalid": "Die anroate Wäid is neen Gans-Taal.",
index 22c903c..40d2939 100644 (file)
        "anoncontribs": "Кергескән эшләр",
        "contribsub2": "{{GENDER:$3|$1}}-ның ҡылған эше ($2)",
        "nocontribs": "Күргәселгән шартларға туры килгән пашҡартыулар табылматы.",
-       "uctop": "(ҡәсерге)",
+       "uctop": "ҡәсерге",
        "month": "Айтан пашлап (анан алттараҡ та):",
        "year": "Йылтан пашлап (анан алттараҡ та):",
        "sp-contributions-newbies": "Йаңа исәп йасмалартан ҡылынҡан эшне генә күргәскәле",
        "redirect-file": "Файлның исеме",
        "specialpages": "Атайы питләр",
        "tag-filter": "[[Special:Tags|Пилгеләр]] фильтры:",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Тамғалар}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Тамғалар}}]]: $2",
        "tags-active-yes": "Әйә",
        "tags-active-no": "Йуҡ",
        "tags-hitcount": "$1 {{PLURAL:$1|1=пашҡартыу|пашҡартыулар|пашҡартыуларны}}",
index f175311..adeede7 100644 (file)
        "prefs-editor": "Éditor",
        "prefs-preview": "Pratayang",
        "prefs-advancedrc": "Pilihan lengkep",
-       "prefs-opt-out": "Nyisihkeun ropéaan",
        "prefs-advancedrendering": "Pilihan lengkep",
        "prefs-advancedsearchoptions": "Pilihan lengkep",
        "prefs-advancedwatchlist": "Pilihan lengkep",
        "filehist-filesize": "Ukuran berkas",
        "filehist-comment": "Kamandang",
        "imagelinks": "Pamakéan berkas",
-       "linkstoimage": "Kaca ieu  {{PLURAL:$1|numbu|$1 numbu}} ka gambar ieu :",
-       "linkstoimage-more": "Leuwih ti $1 {{PLURAL:$1|kaca nutumbu|kaca nutumbu}} ka ieu berkas.\nBéréndélan di handap némbongkeun {{PLURAL:$1|tutumbu kaca kahiji|$1 tutumbu kaca kahiji}} ka ieu berkas hungkul.\n[[Special:WhatLinksHere/$2|Béréndélan lengkepna]] ogé aya.",
-       "nolinkstoimage": "Teu aya kaca anu nutumbu ka ieu berkas.",
+       "linkstoimage": "Ieu berkas dipaké ku {{PLURAL:$1|kaca|$1 kaca}} di handap:",
+       "linkstoimage-more": "Leuwih ti $1 {{PLURAL:$1|kaca|kaca}} nu maké ieu berkas.\nBéréndélan di handap némbongkeun {{PLURAL:$1|kaca kahiji|$1 kaca mimiti}} nu maké ieu berkas hungkul.\n[[Special:WhatLinksHere/$2|Béréndélan lengkepna]] ogé aya.",
+       "nolinkstoimage": "Euweuh kaca anu maké ieu berkas.",
        "morelinkstoimage": "Témbong [[Special:WhatLinksHere/$1|tutumbu lianna]] ka ieu berkas.",
        "linkstoimage-redirect": "$1 (pangalihan berkas) $2",
        "sharedupload": "Ieu berkas téh ti $1 jeung meureun dipaké ku proyék-proyék séjén.",
        "contribsub2": "Pikeun {{GENDER:$3|$1}} ($2)",
        "contributions-userdoesnotexist": "Akun pamaké \"$1\" teu aya dina daptar.",
        "nocontribs": "Taya robahan nu kapanggih cocog jeung patokan ieu.",
-       "uctop": "(ayeuna)",
+       "uctop": "ayeuna",
        "month": "Ti bulan (jeung saméméhna):",
        "year": "Ti taun (jeung saméméhna):",
        "sp-contributions-newbies": "Témbongkeun kontribusi ti akun anyar wungkul",
        "tags": "Tag parobahan valid",
        "tag-filter": "Saringan [[Special:Tags|tag]]:",
        "tag-filter-submit": "Saring",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Tag}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Tag}}]]: $2",
        "tag-mw-contentmodelchange": "parobahan modél kontén",
        "tags-title": "Tag",
        "tags-intro": "Ieu kaca ngandung daptar tag nu bisa ditandaan ku pakakas lemes kana hiji éditan di handap hartina.",
        "dberr-again": "Cobi antos sababaraha menit, lajeng dimuat ulang.",
        "dberr-info": "(Teu bisa ngaksés basis data: $1)",
        "dberr-info-hidden": "(Teu bisa ngaksés basis data)",
-       "dberr-usegoogle": "Kanggo samentawis, tiasa dicobi milari di Google.",
-       "dberr-outofdate": "Wayahnad diperhatikeun yén indéks maranéhna kana kontén kamu bisa waé geus kadaluwarsa.",
-       "dberr-cachederror": "Di handap mangrupa téplakan kaca kasimpen nu dipundut, jeung deuih meureun lain nu panganyarna.",
        "htmlform-invalid-input": "Aya kasalahan dina sawatara input anjeun.",
        "htmlform-select-badoption": "Niléy anu diasupkeun teu bener.",
        "htmlform-int-invalid": "Niléy nu ku anjeun diasupkeun lain integer.",
index 95f1cfb..e4ed687 100644 (file)
        "passwordtooshort": "Lösenord måste innehålla minst {{PLURAL:$1|$1 tecken}}.",
        "passwordtoolong": "Lösenord kan inte vara längre än {{PLURAL:$1|1 tecken|$1 tecken}}.",
        "passwordtoopopular": "Vanliga lösenord kan inte användas. Välj ett lösenord som är svårare att gissa.",
+       "passwordinlargeblacklist": "Det angivna lösenordet är med i en lista över mycket vanliga lösenord. Välj ett unikare lösenord.",
        "password-name-match": "Ditt lösenord måste vara olikt ditt användarnamn.",
        "password-login-forbidden": "Användningen av dessa användarnamn och lösenord har förbjudits.",
        "mailmypassword": "Återställ lösenord",
        "timezonelegend": "Tidszon:",
        "localtime": "Lokal tid:",
        "timezoneuseserverdefault": "Använd wikins standard ($1)",
-       "timezoneuseoffset": "Annan (specificera skillnad)",
+       "timezoneuseoffset": "Annan (specificera skillnad nedan)",
+       "timezone-useoffset-placeholder": "Exempelvärden: \"-07:00\" eller \"01:00\"",
        "servertime": "Serverns tid:",
        "guesstimezone": "Fyll i från webbläsare",
        "timezoneregion-africa": "Afrika",
        "prefs-editor": "Redigerare",
        "prefs-preview": "Förhandsvisa",
        "prefs-advancedrc": "Avancerade alternativ",
-       "prefs-opt-out": "Välj bort förbättringar",
        "prefs-advancedrendering": "Avancerade alternativ",
        "prefs-advancedsearchoptions": "Avancerade alternativ",
        "prefs-advancedwatchlist": "Avancerade alternativ",
        "prefs-displayrc": "Visningsalternativ",
        "prefs-displaywatchlist": "Visningalternativ",
+       "prefs-changesrc": "Ändringar som visas",
+       "prefs-changeswatchlist": "Ändringar som visas",
+       "prefs-pageswatchlist": "Bevakade sidor",
        "prefs-tokenwatchlist": "Nyckel",
        "prefs-diffs": "Versiondifferenser",
        "prefs-help-prefershttps": "Ändringar av denna inställning börjar gälla nästa gång du loggar in",
        "rcfilters-watchlist-markseen-button": "Markera alla ändringar som sedda",
        "rcfilters-watchlist-edit-watchlist-button": "Redigera din lista över bevakade sidor",
        "rcfilters-watchlist-showupdated": "Sidor som har ändrats sedan ditt senaste besök visas i <strong>fetstil</strong> med färgmarkering.",
-       "rcfilters-preference-label": "Dölj den förbättrade versionen av Senaste ändringar",
-       "rcfilters-preference-help": "Stänger det nydesignade gränssnittet från 2017 och alla verktyg som lades till från och med då.",
-       "rcfilters-watchlist-preference-label": "Dölj det förbättrade versionen av bevakningslistan",
-       "rcfilters-watchlist-preference-help": "Rullar tillbaka det omdesignade gränssnittet från 2017 och alla verktyg som lades till då och efteråt.",
+       "rcfilters-preference-label": "Använd gränssnitt som inte använder JavaScript",
+       "rcfilters-preference-help": "Läser in senaste ändringarna utan filter eller markeringsfunktionalitet.",
+       "rcfilters-watchlist-preference-label": "Använd gränssnitt som inte använder JavaScript",
+       "rcfilters-watchlist-preference-help": "Läser in bevakningslistan utan filter eller markeringsfunktionalitet.",
        "rcfilters-filter-showlinkedfrom-label": "Visa ändringar på sidor som länkas från",
        "rcfilters-filter-showlinkedfrom-option-label": "<strong>Sidor som länkas från</strong> den valda sidan",
        "rcfilters-filter-showlinkedto-label": "Visa ändringar på sidor som länkar till",
        "contribsub2": "För {{GENDER:$3|$1}} ($2)",
        "contributions-userdoesnotexist": "Användarkontot \"$1\" är inte registrerat.",
        "nocontribs": "Inga ändringar som motsvarar dessa kriterier hittades.",
-       "uctop": "(senaste)",
+       "uctop": "senaste",
        "month": "Från månad (och tidigare):",
        "year": "Från år (och tidigare):",
        "date": "Från datum (och tidigare):",
        "move-watch": "Bevaka denna sida",
        "movepagebtn": "Flytta sidan",
        "pagemovedsub": "Flyttningen lyckades",
+       "cannotmove": "Sidan kunde inte flyttas av följande {{PLURAL:$1|anledning|anledningar}}:",
        "movepage-moved": "'''\"$1\" har flyttats till \"$2\"'''",
        "movepage-moved-redirect": "En omdirigering har skapats.",
        "movepage-moved-noredirect": "Skapandet av en omdirigering avbröts.",
        "tags": "Giltiga ändringsmärken",
        "tag-filter": "Filter för [[Special:Tags|märken]]:",
        "tag-filter-submit": "Filter",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Märke|Märken}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Märke|Märken}}]]: $2",
        "tag-mw-contentmodelchange": "ändring av innehållsmodell",
        "tag-mw-contentmodelchange-description": "Redigeringar som [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:ChangeContentModel ändrar innehållsmodellen] för en sida",
        "tag-mw-new-redirect": "Ny omdirigering",
        "dberr-again": "Pröva med att vänta några minuter och ladda om.",
        "dberr-info": "(Kan inte komma åt databasen: $1)",
        "dberr-info-hidden": "(Kan inte komma åt databasen)",
-       "dberr-usegoogle": "Du kan pröva att söka med Google under tiden.",
-       "dberr-outofdate": "Observera att deras index av vårt innehåll kan vara föråldrat.",
-       "dberr-cachederror": "Följande är en cachad kopia av den efterfrågade sidan, och kan vara föråldrad.",
        "htmlform-invalid-input": "Det finns problem med din inmatning",
        "htmlform-select-badoption": "Värdet du valde är inte ett giltigt alternativ.",
        "htmlform-int-invalid": "Värdet du valde är inte ett heltal.",
        "logentry-block-reblock": "$1 {{GENDER:$2|ändrade}} blockeringsinställningar för {{GENDER:$4|$3}} med en varaktighet på $5 $6",
        "logentry-partialblock-block": "$1 {{GENDER:$2|blockerade}} {{GENDER:$4|$3}} från att redigera {{PLURAL:$8||sidorna}} $7 med en varaktighet på $5 $6",
        "logentry-partialblock-reblock": "$1 {{GENDER:$2|ändrade}} blockeringsinställningarna för {{GENDER:$4|$3}} som förhindrar redigeringar på {{PLURAL:$8||sidorna}} $7 med en varaktighet på $5 $6",
-       "logentry-non-editing-block-block": "$1 {{GENDER:$2|blockerade}} {{GENDER:$4|$3}} från icke-redigerande handlingar med en varaktighet på $5 $6",
-       "logentry-non-editing-block-reblock": "$1 {{GENDER:$2|ändrade}} blockeringsinställningarna för {{GENDER:$4|$3}} för icke-redigerande handlingar med en varaktighet på $5 $6",
+       "logentry-non-editing-block-block": "$1 {{GENDER:$2|blockerade}} {{GENDER:$4|$3}} från specificerade icke-redigerande handlingar med en varaktighet på $5 $6",
+       "logentry-non-editing-block-reblock": "$1 {{GENDER:$2|ändrade}} blockeringsinställningarna för {{GENDER:$4|$3}} för specificerade icke-redigerande handlingar med en varaktighet på $5 $6",
        "logentry-suppress-block": "$1 {{GENDER:$2|blockerade}} {{GENDER:$4|$3}} med en varaktighet på $5 $6",
        "logentry-suppress-reblock": "$1 {{GENDER:$2|ändrade}} blockeringsinställningar för {{GENDER:$4|$3}} med en varaktighet på $5 $6",
        "logentry-import-upload": "$1 {{GENDER:$2|importerade}} $3 genom filuppladdning",
        "special-characters-title-emdash": "långt tankstreck",
        "special-characters-title-minus": "minustecken",
        "mw-widgets-abandonedit": "Är du säker på att du vill lämna redigeringsläget utan att spara först?",
-       "mw-widgets-abandonedit-discard": "Ignorera ändringar",
+       "mw-widgets-abandonedit-discard": "Släng redigeringar",
        "mw-widgets-abandonedit-keep": "Fortsätt redigera",
        "mw-widgets-abandonedit-title": "Är du säker?",
        "mw-widgets-dateinput-no-date": "Inget valt datum",
        "passwordpolicies-policy-passwordcannotmatchblacklist": "Lösenordet kan inte matcha specifikt svartlistade lösenord",
        "passwordpolicies-policy-maximalpasswordlength": "Lösenordet måste vara högst $1 {{PLURAL:$1|tecken}} långt",
        "passwordpolicies-policy-passwordcannotbepopular": "Lösenordet kan inte vara {{PLURAL:$1|det populäraste lösenordet|i listan över de $1 populäraste lösenorden}}",
+       "passwordpolicies-policy-passwordnotinlargeblacklist": "Lösenordet kan inte vara med i listan över de 100 000 vanligaste lösenorden.",
        "easydeflate-invaliddeflate": "Innehåll som tillhandahålls är inte helt komprimerat",
        "unprotected-js": "Av säkerhetsskäl kan inte JavaScript läsas in från oskyddade sidor. Skapa endast JavaScript i namnrymden MediaWiki: eller som en användarundersida."
 }
index 18de234..80650f4 100644 (file)
        "prefs-advancedwatchlist": "Hitiari za hali ya juu",
        "prefs-displayrc": "Hitiari za kutandaza",
        "prefs-displaywatchlist": "Mapendekezo ya kuzinza",
+       "prefs-changesrc": "Mabadiliko yaliyoonyeshwa",
+       "prefs-pageswatchlist": "Kurasa zilizotazamwa",
        "prefs-tokenwatchlist": "Ishara",
        "prefs-diffs": "Tofauti",
        "prefs-help-prefershttps": "Upendeleo huu utachukua athari kwenye kuingia kwako kujayo.",
        "mycontris": "Michango",
        "contribsub2": "Kwa {{GENDER:$3|$1}} ($2)",
        "nocontribs": "Mabadiliko yanayolingana na vigezo vilivyoulizwa hayakupatikana.",
-       "uctop": "(ya kisasa)",
+       "uctop": "ya kisasa",
        "month": "Kutoka mwezi (na zamani zaidi):",
        "year": "Kutoka mwakani (na zamani zaidi):",
        "sp-contributions-newbies": "Onyesha michango ya akaunti mpya tu",
        "dberr-problems": "Kumradhi! Tovuti hii inapata matatatizo wakati huu.",
        "dberr-again": "Jaribu tena baada ya kusubiri dakika chache.",
        "dberr-info": "(Hamna mawasiliano na seva ya hifadhidata: $1)",
-       "dberr-usegoogle": "Unaposubiri unaweza kujaribu kutafuta kwa kutumia Google.",
-       "dberr-outofdate": "Elewa kwamba fahirisi yao ya yaliyomo katika tovuti hii inaweza kuwa imepitwa na wakati.",
-       "dberr-cachederror": "Ifuatayo ni nakala ya kache ya ukurasa uliyoombwa, na huenda isiwe ya sasa.",
        "htmlform-invalid-input": "Kuna matatizo na baadhi ya maingizo yako",
        "htmlform-select-badoption": "Thamani ulioiandika si chaguo halali.",
        "htmlform-int-invalid": "Kitu ulichokiandika si namba kamili.",
index 11b8cbc..9a0606b 100644 (file)
        "mycontris": "Edycyje",
        "contribsub2": "Lo {{GENDER:$3|używocza|używoczki}} $1 ($2)",
        "nocontribs": "Brak pomjyńań uodpowjadajůncych tym kryterjům.",
-       "uctop": "(teroźńo)",
+       "uctop": "teroźńo",
        "month": "Do miesiōnca:",
        "year": "Do roku:",
        "sp-contributions-newbies": "Pokoż ajnzac ino uod nowych użytkowńikůw",
        "intentionallyblankpage": "Ta zajta nauůmyślńy uostoua śe pusto",
        "external_image_whitelist": "#Leave this line exactly as it is<pre>\n#Wstow půńiżyj tajle wyrażyń regularnych (jyno to, co znojduje śe mjyndzy //)\n#Wyrażyńa te uostanům przipasowane ku URL-ům zewnyntrznym (bezpostrzredńo linkowanych) grafik\n#Dopasowane URL-e zostanům wyśwjetlůne kej grafiki, w przećiwnym raźe bydźe pokozany yno link ku grafice\n#Lińje kere s anfanga majům # sům traktowane kej kůmyntorze\n\n#Put all regex fragments above this line. Leave this line exactly as it is</pre>",
        "tag-filter": "Filter [[Special:Tags|tagůw]]",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Uoznaczyńe|Uoznaczyńo}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Uoznaczyńe|Uoznaczyńo}}]]: $2",
        "diff-form": "'''formulař'''",
        "logentry-delete-delete": "$1 {{GENDER:$2|wyćepoł|wyćepała}} zajta $3",
        "revdelete-restricted": "naštaluj uograničyńo do administratorůw",
index f45c9cf..f04a9d9 100644 (file)
        "contribsub2": "{{GENDER:$3|$1}} இற்காக ($2)",
        "contributions-userdoesnotexist": "பயனர் கணக்கு \"$1\" ஆனது பதியப்படவில்லை.",
        "nocontribs": "இந்த நிபந்தனையுடன் ஒத்துப்போகும் வகையில் மாற்றங்களெதுவும் காணப்படவில்லை.",
-       "uctop": "(தற்போதைய)",
+       "uctop": "தற்போதைய",
        "month": "மாதம் உட்பட முந்திய:",
        "year": "ஆண்டு உட்பட முந்திய:",
        "sp-contributions-newbies": "புதிய கணக்குகளின் பங்களிப்புகளை மட்டும் காட்டு",
        "tags": "செல்லத்தக்க மாற்று குறிச்சொற்கள்",
        "tag-filter": "[[Special:Tags|குறிச்சொல்]] வடிப்பான்:",
        "tag-filter-submit": "வடிகட்டி",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|அடையாளம்|அடையாளங்கள்}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|அடையாளம்|அடையாளங்கள்}}]]: $2",
        "tag-mw-contentmodelchange": "உள்ளடக்க மாதிரி மாற்றம்",
        "tag-mw-contentmodelchange-description": "திருத்து\n[https://www.mediawiki.org/wiki/Special:MyLanguage/Help:ChangeContentModel change the content model]",
        "tags-title": "குறிச்சொற்கள்",
        "dberr-again": "சில நிமிடங்கள் காத்திரு மற்றும் மறுபடியும் முயற்சிக்கவும்",
        "dberr-info": "(தரவுதளத்தை தொடர்பு கொள்ள முடியாது: $1 )",
        "dberr-info-hidden": "(தரவுதளத்தை அணுக முடியாது)",
-       "dberr-usegoogle": "இதே நேரத்தில் நீங்கள் கூகிள் வழியாக தேட முயற்சிக்கலாம்.",
-       "dberr-outofdate": "கவனிக்கவும் எங்கள் உள்ளடக்கத்திற்க்கானஅவர்களின் குறியீடுகள் காலாவதியாகி இருக்கலாம் .",
-       "dberr-cachederror": "இது கோரிய பக்கத்தின் தற்காலிக நகல் , மற்றும் தற்போதைய  தேதி வரை இருக்காது.",
        "htmlform-invalid-input": "உங்கள் உள்ளீடுகளில்  சில சிக்கல்கள் உள்ளன",
        "htmlform-select-badoption": "நீங்கள் குறிப்பிட்ட மதிப்பு செல்லத்தக்க விருப்பத்தேர்வு அல்ல.",
        "htmlform-int-invalid": "நீங்கள் குறிப்பிட்ட மதிப்பு முழு எண் அல்ல.",
index cf78c36..b3983b4 100644 (file)
        "anoncontribs": "Snli’ sa binrwan",
        "contribsub2": "{{GENDER:$3|$1}} bniq sa pincyuwagan na pptzyuwaw ($2)",
        "nocontribs": "Ini’ ’luwiy quw pinsbah ka mtntnaq sa musa’ thuzyay.",
-       "uctop": "(misuw qaniy ga)",
+       "uctop": "misuw qaniy ga",
        "month": "Pcingan na sniyan naha’ ryax na byacing:",
        "year": "Pcingan na sniyan naha’ ryax na kawas",
        "sp-contributions-newbies": "Nanak yaquw mniq pincyuwagan nagiqas na canghaw quw spkita’",
        "tags": "Kya rngu’ na sinbah sa qnlah lalu’",
        "tag-filter": "[[Special:Tags|qinlah lalu’]]hhkangi’:",
        "tag-filter-submit": "Hhkangi’",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|qinlah lalu’}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|qinlah lalu’}}]]: $2",
        "tag-mw-contentmodelchange": "sbah quw pinsulung sa inrkyasan bniru’ niya’ sa qsahuy",
        "tags-title": "Qinlah lalu’",
        "tags-tag": "Lalu’ na qinlah biru’",
index 4aaf3a0..f22f0f5 100644 (file)
@@ -11,7 +11,8 @@
                        "రహ్మానుద్దీన్",
                        "BHARATHESHA ALASANDEMAJALU",
                        "Lokesha kunchadka",
-                       "Kiranpoojary"
+                       "Kiranpoojary",
+                       "Ravi Mundkur"
                ]
        },
        "tog-underline": "ಕೊಂಡಿಲೆಗ್ ಅಡಿಗೀಟ್ ಪಾಡುನು:",
        "wrongpasswordempty": "ಖಾಲಿ ಪ್ರವೇಶ ಪದ ಕೊರ್ತರ್. ನನ ಒರ ಪ್ರಯತ್ನ ಮಲ್ಪುಲೆ.",
        "passwordtooshort": "ಪ್ರವೇಶ ಪದಟ್ ಕನಿಷ್ಟ {{PLURAL:$1|೧ ಅಕ್ಷರ|$1 ಅಕ್ಷರರೊಳೆನ್}} ಉಪ್ಪೊಡ್",
        "passwordtoolong": "ಪ್ರವೇಸೊ ಪದೊಟು ಕನಿಸ್ಟೊ {{PLURAL:$1|೧ ಅಕ್ಷರ|$1 ಅಕ್ಷರರೊಲು}} ಉಪ್ಪೊಡ್",
+       "passwordinlargeblacklist": "ಸೇರಾಯಿನ ಪ್ರವೇಶಪದ ಅತಿ ಸಾಮಾನ್ಯವಾದ್ ಬಳಕೆ ಮಲ್ಪುನ ಪ್ರವೇಶಪದೊಕುಲೆನ ಒಂಜಿ ಪಟ್ಟಿಡ್ ಉಂಡು.ದಯಮಲ್ತ್ ಬೇತೆ ಅನನ್ಯ ಪ್ರವೇಶಪದೊನು ಆಯ್ಕೆ ಮಲ್ಪುಲೆ.",
        "password-name-match": "ಇರೆನ್ ಪ್ರವೇಶಪದ ಬಳಕೆದಾರೆನ ಪುದರ್‘ಡ್‘ದ್ ಬೇತೆ ಉಪ್ಪೊಡು",
        "password-login-forbidden": "ಈ ಪ್ರವೇಶಪದ ಬೊಕ್ಕ ಬಳಕೆದಾರೆರೆನ ಪುದರ್‘ನ್ ನಿಷಿದ್ಧ ಮಲ್ತ್‘ದ್ಂಡ್",
        "mailmypassword": "ಪ್ರವೇಸೊ ಪದೊನ್ ಪಿರ ಸ್ತಾಪನೆ ಮಲ್ಪುಲೆ",
        "prefs-advancedwatchlist": "ಪರಿಣತ ಇಚ್ಛೆಲು",
        "prefs-displayrc": "ಪ್ರದರ್ಸನೊ ಆಯ್ಕೆಲು",
        "prefs-displaywatchlist": "ಪ್ರದರ್ಸನೊ ಆಯ್ಕೆಲು",
+       "prefs-changesrc": "ತೋಜಾಯಿನ ಬದಲಾವಣೆಲು",
+       "prefs-changeswatchlist": "ತೋಜಾಯಿನ ಬದಲಾವಣೆಲು",
+       "prefs-pageswatchlist": "ವೀಕ್ಷಿತ (ತೂಯಿನ) ಪುಟೊಲು",
        "prefs-tokenwatchlist": "ಟೊಕನ್",
        "userrights": "ಸದಸ್ಯೆರೆ ಹಕ್ಕುಲು",
        "userrights-lookup-user": "ಬಳಕೆದಾರೆರೆ ಗುಂಪುಲೆನ್ ನಿರ್ವಹಿಸಲ",
        "anoncontribs": "ಕಾನಿಕೆಲು",
        "contribsub2": "{{GENDER:$3|$1}} ($2)",
        "nocontribs": "ಈ ಮಾನದಂಡೊಲೆಗ್ ಸರಿ ಒಂಬುನ ಬದಲಾವಣೆಲು ತಿಕ್ಕಿಜಿ.",
-       "uctop": "(ಇತ್ತೆದ)",
+       "uctop": "ಇತ್ತೆದ",
        "month": "ಈ ತಿಂಗೊಲುಡ್ದು (ಬೊಕ್ಕ ದುಂಬುದ):",
        "year": "ಈ ಒರ್ಸೊಡ್ದು(ಬೊಕ್ಕ ದುಂಬುದ):",
        "sp-contributions-newbies": "ಪೊಸ ಖಾತೆಲೆನ ಕಾಣಿಕೆಲೆನ್ ಮಾತ್ರ ತೊಜ್ಪಾವು",
        "unblocklogentry": "$1 ಖಾತೆನ್ ಅನ್-ಬ್ಲಾಕ್ ಮಲ್ತ್’ನ್ಡ್",
        "block-log-flags-nocreate": "ಖಾತೆ ಉಂಡುಮಲ್ಪುನೇನ್ ತಡೆಪತ್ತ್'ದ್ಂಡ್",
        "proxyblocker": "ಪ್ರಾಕ್ಸಿ ತಡೆಪತ್ತುನಾರ್",
+       "cannotmove": "ಈ ದುಂಬುದ ಕಾರಣೊಗಾದ್ ಪುಟೊನು ಕೊಣರೆ ಆಪುಜಿ\n{{PLURAL:$1|reason|reasons}}:",
        "movelogpage": "ಸ್ತಲಾಂತರೊದ ದಾಕಲೆ",
        "movereason": "ಕಾರಣೊ:",
        "revertmove": "ದುಂಬುದ ಲೆಕೆ ಮಲ್ಪುಲೆ",
        "blankpage": "ಖಾಲಿ ಪುಟ",
        "tag-filter": "[[Special:Tags|ಟ್ಯಾಗ್]]ಅರಿಪೆ:",
        "tag-filter-submit": "ಅರಿಪೆ",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|ಟ್ಯಾಗ್|ಟ್ಯಾಗುಲು}}]]:$2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|ಟ್ಯಾಗ್|ಟ್ಯಾಗುಲು}}]]:$2",
        "tags-title": "ತೂಗು ಪಟ್ಟಿಲು",
        "tags-source-header": "ಮೂಲೊ",
        "tags-active-header": "ಸಕ್ರಿಯ?",
        "mw-widgets-usersmultiselect-placeholder": "ನನಾತ್ ಸೇರಲೇ...",
        "date-range-from": "ತಾರಿಕ್‌ಡ್ದ್:",
        "date-range-to": "ತಾರಿಕ್ ಮುಟ:",
-       "randomrootpage": "ಒವ್ವಾಂಡಲ ಮೂಲಪುಟೊ"
+       "randomrootpage": "ಒವ್ವಾಂಡಲ ಮೂಲಪುಟೊ",
+       "passwordpolicies-policy-passwordnotinlargeblacklist": "ಪ್ರವೇಶಪದ ಅತಿ ಸಾಮಾನ್ಯವಾದ್ ಬಳಕೆ ಮಲ್ಪುನ ೧೦೦,೦೦೦ ಪದೊಕುಲೆನ ಪಟ್ಟಿಡ್ ಉಪ್ಪರೆ ಬಲ್ಲಿ."
 }
index ef21d2e..0d8a411 100644 (file)
        "prefs-editor": "రచయిత",
        "prefs-preview": "మునుజూపు",
        "prefs-advancedrc": "ఉన్నత ఎంపికలు",
-       "prefs-opt-out": "మెరుగుదలల నుండి తప్పుకోండి",
        "prefs-advancedrendering": "ఉన్నత ఎంపికలు",
        "prefs-advancedsearchoptions": "ఉన్నత ఎంపికలు",
        "prefs-advancedwatchlist": "ఉన్నత ఎంపికలు",
        "contribsub2": "{{GENDER:$3|$1}} ($2) కొరకు",
        "contributions-userdoesnotexist": "వాడుకరి ఖాతా \"$1\" నమోదుకాలేదు.",
        "nocontribs": "ఈ విధమైన మార్పులేమీ దొరకలేదు.",
-       "uctop": "(ప్రస్తుత)",
+       "uctop": "ప్రస్తుత",
        "month": "ఈ నెల నుండి (అంతకు ముందువి):",
        "year": "ఈ సంవత్సరం నుండి (అంతకు ముందువి):",
        "date": "ఈ తేదీవి (అంతకు ముందువీ):",
        "tags": "సరైన మార్పు ట్యాగులు",
        "tag-filter": "[[Special:Tags|ట్యాగుల]] వడపోత:",
        "tag-filter-submit": "వడపోయి",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|ట్యాగు|ట్యాగులు}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|ట్యాగు|ట్యాగులు}}]]: $2",
        "tag-mw-contentmodelchange-description": "పేజీ [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:ChangeContentModel కంటెంటు మోడలును మార్చేసే] దిద్దుబాట్లు",
        "tag-mw-new-redirect": "కొత్త దారిమార్పు",
        "tag-mw-new-redirect-description": "కొత్త దారిమార్పును సృష్టించే లేదా ఓ పేజీని దారిమార్పుగా మార్చేసే దిద్దుబాట్లు",
        "dberr-again": "కొన్ని నిమిషాలాగి మళ్ళీ ప్రయత్నించండి.",
        "dberr-info": "(డేటాబేసును చేరలేకున్నాం: $1)",
        "dberr-info-hidden": "(డేటాబేసును చేరలేకున్నాం)",
-       "dberr-usegoogle": "ఈలోపు మీరు గూగుల్ ద్వారా వెతకడానికి ప్రయత్నించండి.",
-       "dberr-outofdate": "మా విషయం యొక్క వారి సూచీలు అంత తాజావి కావపోవచ్చని గమనించండి.",
-       "dberr-cachederror": "అభ్యర్థించిన పేజీ యొక్క కోశం లోని కాపీ ఇది, అంత తాజాది కాకపోవచ్చు.",
        "htmlform-invalid-input": "మీరు ఇచ్చినవాటితో కొన్ని సమస్యలున్నాయి",
        "htmlform-select-badoption": "మీరిచ్చిన విలువ సరైన వికల్పం కాదు.",
        "htmlform-int-invalid": "మీరు ఇచ్చిన విలువ పూర్ణసంఖ్య కాదు.",
index 0f6d694..f0ade99 100644 (file)
        "contributions-title": "Kontribuisaun \"$1\" nian",
        "mycontris": "Kontribuisaun",
        "contribsub2": "Ba $1 ($2)",
-       "uctop": "(versaun atuál)",
+       "uctop": "versaun atuál",
        "month": "Fulan (ho molok):",
        "year": "Tinan (ho molok):",
        "sp-contributions-newbies": "Hatudu de'it kontribuisaun uza-na'in foun sira-nia",
index 574a587..44013cd 100644 (file)
        "anoncontribs": "Саҳмгузориҳо",
        "contribsub2": "Барои {{GENDER:$3|$1}} ($2)",
        "nocontribs": "Ҳеҷ тағйире бо ин мушаххасот пайдо нашуд.",
-       "uctop": "(кунунӣ)",
+       "uctop": "кунунӣ",
        "month": "Дар ин моҳ (ва қабл аз он):",
        "year": "Дар ин сол (ва қабл аз он):",
        "sp-contributions-newbies": "Фақат ҳиссагузориҳои ҳисобҳои ҷадидро нишон деҳ",
        "tags-active-yes": "Бале",
        "tags-edit": "вироиш",
        "dberr-info": "(Имкони барқарори иртибот бо пойгоҳи дода вуҷуд надорад: $1)",
-       "dberr-usegoogle": "Дар ин муддат метавонед бо истифода аз Гугл ҷустуҷӯ кунед.",
-       "dberr-outofdate": "Таваҷҷӯҳ кунед, ки намояҳои онҳо аз мӯҳтавои мо мумкин аст барӯз набошад.",
-       "dberr-cachederror": "Ин як нусхаи саҳифаи дархостшуда аст, ки дар кэш қарор дорад ва шояд барӯз нест.",
        "htmlform-invalid-input": "Бахши аз вуруди шумо мушкили дорад",
        "htmlform-select-badoption": "Миқдори воридшуда як гузинаи қобили қабул нест.",
        "htmlform-int-invalid": "Миқдоре, ки ворид кардаед як адади саҳеҳ нест.",
index 989f4fd..f1e97a4 100644 (file)
        "mycontris": "Xissaguzoriji man",
        "contribsub2": "Baroi $1 ($2)",
        "nocontribs": "Heç taƣjire bo in muşaxxasot pajdo naşud.",
-       "uctop": "(bolo)",
+       "uctop": "bolo",
        "month": "Dar in moh (va qabl az on):",
        "year": "Dar in sol (va qabl az on):",
        "sp-contributions-newbies": "Faqat hissaguzorihoi hisobhoi çadidro nişon deh",
        "blankpage": "Sahifai xolī",
        "tags-edit": "viroiş",
        "dberr-info": "(Imkoni barqarori irtibot bo pojgohi doda vuçud nadorad: $1)",
-       "dberr-usegoogle": "Dar in muddat metavoned bo istifoda az Gugl çustuçū kuned.",
-       "dberr-outofdate": "Tavaççūh kuned, ki namojahoi onho az mūhtavoi mo mumkin ast barūz naboşad.",
-       "dberr-cachederror": "In jak nusxai sahifai darxostşuda ast, ki dar keş qaror dorad va şojad barūz nest.",
        "htmlform-invalid-input": "Baxşi az vurudi şumo muşkili dorad",
        "htmlform-select-badoption": "Miqdori voridşuda jak guzinai qobili qabul nest.",
        "htmlform-int-invalid": "Miqdore, ki vorid kardaed jak adadi saheh nest.",
index 33e4b0f..6856062 100644 (file)
@@ -28,7 +28,8 @@
                        "B20180",
                        "Pon44695",
                        "Aefgh39622",
-                       "Fitoschido"
+                       "Fitoschido",
+                       "TrisT7"
                ]
        },
        "tog-underline": "การขีดเส้นใต้ลิงก์:",
        "prefs-editor": "ตัวแก้ไข",
        "prefs-preview": "การแสดงตัวอย่าง",
        "prefs-advancedrc": "ตัวเลือกขั้นสูง",
-       "prefs-opt-out": "เลือกไม่ปรับปรุง",
        "prefs-advancedrendering": "ตัวเลือกขั้นสูง",
        "prefs-advancedsearchoptions": "ตัวเลือกขั้นสูง",
        "prefs-advancedwatchlist": "ตัวเลือกขั้นสูง",
        "contribsub2": "สำหรับ {{GENDER:$3|$1}} ($2)",
        "contributions-userdoesnotexist": "บัญชีผู้ใช้ \"$1\" ยังไม่ได้ลงทะเบียน",
        "nocontribs": "ไม่พบการเปลี่ยนแปลงตรงกับเงื่อนไขเหล่านี้",
-       "uctop": "(ปัจจุบัน)",
+       "uctop": "ปัจจุบัน",
        "month": "ตั้งแต่เดือน (และก่อนหน้า):",
        "year": "ตั้งแต่ปี (และก่อนหน้า):",
        "date": "ตั้งแต่วันที่ (และก่อนหน้า):",
        "pageinfo-magic-words": "{{PLURAL:$1|คำสั่งพิเศษ}} ($1)",
        "pageinfo-hidden-categories": "หมวดหมู่ที่ซ่อนอยู่ ($1)",
        "pageinfo-templates": "แม่แบบที่ใช้ ($1)",
-       "pageinfo-toolboxlink": "à¸\82à¹\89อมูลหà¸\99à¹\89า",
+       "pageinfo-toolboxlink": "หà¸\99à¹\89าสารสà¸\99à¹\80à¸\97ศ",
        "pageinfo-redirectsto": "เปลี่ยนทางไป",
        "pageinfo-redirectsto-info": "สนเทศ",
        "pageinfo-contentpage": "นับเป็นหน้าเนื้อหา",
        "tags": "ป้ายระบุการเปลี่ยนแปลงที่สมเหตุสมผล",
        "tag-filter": "ตัวกรอง[[Special:Tags|ป้ายระบุ]]:",
        "tag-filter-submit": "กรอง",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|ป้ายระบุ}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Tag|ป้ายระบุ}}]]: $2",
        "tag-mw-new-redirect": "เปลี่ยนทางใหม่",
        "tag-mw-new-redirect-description": "การแก้ไขที่สร้างหน้าเปลี่ยนทางใหม่หรือเปลี่ยนแปลงหน้าเป็นหน้าเปลี่ยนทาง",
        "tag-mw-removed-redirect": "ลบหน้าเปล่ี่ยนทาง",
        "dberr-again": "กรุณารอสักครู่แล้วจึงโหลดใหม่",
        "dberr-info": "(ไม่สามารถเข้าถึงฐานข้อมูล: $1)",
        "dberr-info-hidden": "(ไม่สามารถเข้าถึงฐานข้อมูล)",
-       "dberr-usegoogle": "คุณสามารถลองสืบค้นผ่านกูเกิลในระหว่างนี้",
-       "dberr-outofdate": "โปรดทราบว่าดัชนีเนื้อหาของเราในกูเกิลอาจล้าสมัยแล้ว",
-       "dberr-cachederror": "นี่คือข้อมูลคัดลอกชั่วคราวของหน้าที่ร้องขอ และอาจไม่เป็นปัจจุบัน",
        "htmlform-invalid-input": "เกิดปัญหาในค่าบางค่าที่คุณใส่เข้ามา",
        "htmlform-select-badoption": "ค่าที่คุณใส่ไม่ใช่การตั้งค่าที่ถูกต้อง",
        "htmlform-int-invalid": "ค่าที่คุณกำหนดไม่ใช่ตัวเลขจำนวนเต็ม",
index 7173a02..15a8ccc 100644 (file)
        "mycontris": "Goşantlar",
        "contribsub2": "{{GENDER:$3|$1}} üçin ($2)",
        "nocontribs": "Bu kriteriýlere gabat gelýän üýtgeşme ýok.",
-       "uctop": "(häzirki)",
+       "uctop": "häzirki",
        "month": "Aý:",
        "year": "Ýyl:",
        "sp-contributions-newbies": "Diňe täze hasap açan ulanyjylaryň goşantlaryny görkez",
        "dberr-problems": "Bagyşlaň! Bu saýtda tehniki kynçylyklar ýüze çykdy.",
        "dberr-again": "Birnäçe minut garaşyň we gaýtadan ýükläp görüň.",
        "dberr-info": "(Maglumat bazasynyň serwerine birigip bolanok: $1)",
-       "dberr-usegoogle": "Ýogsa-da, oňa çenli Google bilen gözleg geçirip bilersiňiz.",
-       "dberr-outofdate": "Olaryň biziň sahypalarymyz baradaky indeksi köne bolmagy mümkin.",
-       "dberr-cachederror": "Bu talap edilen sahypanyň keşirlenen nusgasy bolup, soňky üýtgeşmeleri görkezmezligi mümkin.",
        "htmlform-invalid-input": "Girizen maglumatyňyzyň bir böleginde problema bar",
        "htmlform-select-badoption": "Görkezen bahaňyz dogry opsiýa däl.",
        "htmlform-int-invalid": "Görkezen bahaňyz bitin san däl.",
index 2095f3c..f04dd5b 100644 (file)
        "anoncontribs": "Mga inambag",
        "contribsub2": "Para kay {{GENDER:$3|$1}} ($2)",
        "nocontribs": "Walang pagbabagong nakita sa binigay na kondisyon.",
-       "uctop": "(kasalukuyan)",
+       "uctop": "kasalukuyan",
        "month": "Mula sa buwan (at nauna):",
        "year": "Mula sa taon (at nauna):",
        "sp-contributions-newbies": "Ipakita ang mga ambag ng mga bagong account lamang",
        "tags": "Tanggap na mga tatak ng pagbabago",
        "tag-filter": "Pansala ng [[Special:Tags|etiketa]]:",
        "tag-filter-submit": "Pansala",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Tatak|Mga tatak}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Tatak|Mga tatak}}]]: $2",
        "tags-title": "Mga tatak",
        "tags-intro": "Itinatala ng pahinang ito ang mga tatak na maaaring ipantatak ng sopwer sa isang pagbabago, at ang kanilang kahulugan.",
        "tags-tag": "Tatakan ang pangalan",
        "dberr-problems": "Paumanhin! Dumaranas ng mga kahirapang teknikal ang sityong ito.",
        "dberr-again": "Subuking maghintay ng ilang mga minuto at muling magkarga.",
        "dberr-info": "(Hindi makaugnay sa tagapaghain ng kalipunan ng dato: $1)",
-       "dberr-usegoogle": "Pansamantalang maaaring subukin mong maghanap muna sa pamamagitan ng Google.",
-       "dberr-outofdate": "Pakiunawang maaaring wala na sa panahon ang kanilang mga talatuntunan ng aming mga nilalaman.",
-       "dberr-cachederror": "Ang sumusunod ay isang nakatagong sipi ng hiniling na pahina, at maaaring wala na sa panahon.",
        "htmlform-invalid-input": "May mga suliran ang ilan sa mga ipinasok mo",
        "htmlform-select-badoption": "Ang halagang tinukoy mo ay hindi isang tanggap na pagpili.",
        "htmlform-int-invalid": "Ang tinukoy mong halaga ay hindi isang buumbilang.",
index 5831241..0be566c 100644 (file)
        "contributions-title": "Иштирокәкә гәнҹ $1",
        "mycontris": "Гәнҹ",
        "contribsub2": "Гәнҹ $1 ($2)",
-       "uctop": "(есәтнә)",
+       "uctop": "есәтнә",
        "month": "Че мангику (һәнијән рә):",
        "year": "Че сорику (һәнијән рә):",
        "sp-contributions-newbies": "Әнҹәх нујә иштирокәкон гәнҹи нишо дој",
        "specialpages": "Хысусијә сәһифон",
        "external_image_whitelist": " #Ым сәтри огәтәнән чокнәј әв һесте<pre>\n#Рә рә истифадә быә фрагментон ијо быдәнән (ә һиссә, че // мијонәдә бедә )\n#Әвон ды харичи шикили URL и дуз бәбен.\n#Дуз омә гылә бәнә шикили нишо бәбе, амандәни бәнә шикили линк нишо бәбе.\n#Сәтрон де # комментариј һисоб бедән.\n#Сәтрон бә регистри һәссос нин.\n\n#Рә рә око доә быә фрагментон че сәтри пентоно ијо быдәнән. Ым сәтри огәтәнән чокнәј һесте.</pre>",
        "tag-filter": "[[Special:Tags|нышонон]] филтр:",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Nişon|Nişonon}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Nişon|Nişonon}}]]: $2",
        "tags-title": "Нышонон",
        "logentry-newusers-create": "$1 istifadəmon hesob okarde be",
        "searchsuggest-search": "Nəve"
index 422b905..fa4a270 100644 (file)
        "blanknamespace": "(Kupu)",
        "contributions": "Ngaahi foaki ʻo e ʻetitá",
        "mycontris": "Foaki ʻaʻaku",
-       "uctop": " (ʻi ʻolunga)",
+       "uctop": " ʻi ʻolunga",
        "sp-contributions-deleted": "Ngaahi foaki ʻo ha ʻetita kuo tāmateʻi",
        "sp-contributions-talk": "Alea",
        "whatlinkshere": "Ngaahi fehokotaki ki heni",
index 67c1c06..7b329b9 100644 (file)
        "localtime": "Yerel saat:",
        "timezoneuseserverdefault": "Viki varsayılanını kullanın ($1)",
        "timezoneuseoffset": "Diğer (ofset belirtin)",
+       "timezone-useoffset-placeholder": "Örnek değerler: \"-07:00\" veya \"01:00\"",
        "servertime": "Sunucu saati:",
        "guesstimezone": "Tarayıcınız sizin yerinize doldursun",
        "timezoneregion-africa": "Afrika",
        "prefs-editor": "Editör",
        "prefs-preview": "Önizleme",
        "prefs-advancedrc": "Gelişmiş seçenekler",
-       "prefs-opt-out": "İyileştirmeleri devre dışı bırak",
        "prefs-advancedrendering": "Gelişmiş seçenekler",
        "prefs-advancedsearchoptions": "Gelişmiş seçenekler",
        "prefs-advancedwatchlist": "Gelişmiş seçenekler",
        "prefs-displayrc": "Görüntüleme seçenekleri",
        "prefs-displaywatchlist": "Görüntüleme seçenekleri",
+       "prefs-pageswatchlist": "İzlenen sayfalar",
        "prefs-tokenwatchlist": "Anahtar",
        "prefs-diffs": "Farklar",
        "prefs-help-prefershttps": "Bu tercih bir sonraki girişinizde etkili olacaktır.",
        "grant-group-file-interaction": "Medya ile etkileşim kur",
        "grant-group-watchlist-interaction": "İzleme listenle etkileşim kur",
        "grant-group-email": "E-posta gönder",
+       "grant-group-high-volume": "Yüksek hacimli etkinlik gerçekleştir",
        "grant-group-customization": "Özelleştirme ve tercihler",
        "grant-group-private-information": "Sizinle ilgili özel verilere erişme",
        "grant-group-other": "Çeşitli aktivite",
        "rcfilters-filter-watchlistactivity-unseen-label": "Görülmemiş değişiklikler",
        "rcfilters-filter-watchlistactivity-unseen-description": "Değişiklikler gerçekleştiğinden beri ziyaret etmediğiniz sayfalardaki değişiklikler.",
        "rcfilters-filter-watchlistactivity-seen-label": "Görülmüş değişiklikler",
+       "rcfilters-filter-watchlistactivity-seen-description": "Değişiklikler gerçekleştiğinden beri ziyaret ettiğiniz sayfalardaki değişiklikler",
        "rcfilters-filtergroup-changetype": "Değişiklik türü",
        "rcfilters-filter-pageedits-label": "Sayfa düzenlemeleri",
        "rcfilters-filter-pageedits-description": "Viki içeriği, tartışmalar, kategori açıklamalarındaki düzenlemeler...",
        "uploadstash-badtoken": "İşlemin gerçekleştirilmesi başarısız oldu, muhtemelen düzenleme yetkileriniz zaman aşımına uğradı. Lütfen yeniden deneyin.",
        "uploadstash-errclear": "Dosyaların silinmesi başarısız oldu.",
        "uploadstash-refresh": "Dosya listelerini yenile",
+       "uploadstash-thumbnail": "küçük resmi görüntüle",
        "uploadstash-bad-path-unknown-type": "Bilinmeyen tür \"$1\".",
        "uploadstash-bad-path-unrecognized-thumb-name": "Tanınmayan başparmak adı.",
        "invalid-chunk-offset": "Geçersiz öbek ofset",
        "prefixindex": "Önek ile tüm sayfalar",
        "prefixindex-namespace": "Önek ile tüm sayfalar ($1 ad alanında)",
        "prefixindex-submit": "Göster",
-       "prefixindex-strip": "Listede öneki kırp",
+       "prefixindex-strip": "Sonuçlardaki öneki gizle",
        "shortpages": "Kısa sayfalar",
        "longpages": "Uzun sayfalar",
        "deadendpages": "Başka sayfalara bağlantısı olmayan sayfalar",
        "contribsub2": "{{GENDER:$3|$1}} ($2) tarafından",
        "contributions-userdoesnotexist": "\"$1\" kullanıcı hesabı kayıtlı değil.",
        "nocontribs": "Bu kriterlere uyan değişiklik bulunamadı",
-       "uctop": "(son)",
+       "uctop": "son",
        "month": "Bu aya kadar (ve önceki aylar):",
        "year": "Bu yıla kadar (ve önceki yıllar):",
        "date": "Şu tarihe kadar:",
        "ipb-disableusertalk": "Bu kullanıcının engelliyken kendi mesaj sayfasında değişiklik yapmasını önle",
        "ipb-change-block": "Bu ayarlarla kullanıcıyı yeniden engelle",
        "ipb-confirm": "Engeli onayla",
+       "ipb-pages-label": "Sayfalar",
        "badipaddress": "Geçersiz IP adresi",
        "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.",
        "createaccountblock": "hesap oluşturma devre dışı bırakıldı",
        "emailblock": "e-posta engellendi",
        "blocklist-nousertalk": "kendi mesaj sayfasını değiştiremez",
+       "blocklist-editing-sitewide": "düzenleme (site geneli)",
        "ipblocklist-empty": "Engelleme listesi boş.",
        "ipblocklist-no-results": "İstenen IP adresi ya da kullanıcı adı engellenmedi.",
        "blocklink": "engelle",
        "tags": "Geçerli değişiklik etiketleri",
        "tag-filter": "[[Special:Tags|Etiket]] süzgeci:",
        "tag-filter-submit": "Süzgeç",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Etiket|Etiketler}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Etiket|Etiketler}}]]: $2",
        "tag-mw-new-redirect": "Yeni yönlendirme",
        "tag-mw-removed-redirect": "Yönlendirme kaldırıldı",
        "tag-mw-changed-redirect-target": "Yönlendirme hedefi değiştirildi",
        "dberr-again": "Bir kaç dakika bekleyip tekrar yüklemeyi deneyin.",
        "dberr-info": "(Veritabanı sunucusuyla irtibat kurulamıyor: $1)",
        "dberr-info-hidden": "(Veritabanı sunucusuyla bağlantı kurulamıyor)",
-       "dberr-usegoogle": "Bu zaman zarfında Google ile aramayı deneyebilirsiniz.",
-       "dberr-outofdate": "İçeriğimizin onların dizinlerinde güncel olmayabileceğini dikkate alın.",
-       "dberr-cachederror": "Aşağıdaki istenen sayfanın önbellekteki bir kopyasıdır, ve güncel olmayabilir.",
        "htmlform-invalid-input": "Girdinizin bir kısmıyla ilgili sorunlar var",
        "htmlform-select-badoption": "Belirttiğiniz değer geçerli bir seçenek değil.",
        "htmlform-int-invalid": "Belirttiğiniz değer bir tamsayı değil.",
index 2251da3..cdfc245 100644 (file)
        "contributions-title": "Maṫwoṭo d$1",
        "mycontris": "aMaṫwoṭayḍi",
        "contribsub2": "d$1 ($2)",
-       "uctop": "(ḥaroyo)",
+       "uctop": "ḥaroyo",
        "month": "muYarḥo",
        "year": "hul iŞato:",
        "sp-contributions-newbies": "Bes maḥway Maṫwoṭo dHadome ḥaṭe",
index 10ce72f..0d1816b 100644 (file)
        "mycontris": "Minyikelo ya mina",
        "contribsub2": "For $1 ($2)",
        "nocontribs": "Ku hava ku cinca loku kumiweke eka xiyenge lexi.",
-       "uctop": "(Henhla)",
+       "uctop": "Henhla",
        "month": "Kusukela e ka nhweti ya (kuya endhzaku):",
        "year": "Ku sukela e ka lembe ra (kuya endhzaku):",
        "sp-contributions-newbies": "Komba minyikela ya ti akhawunti tintswa ntsena",
index 00c945e..015d275 100644 (file)
        "prefs-editor": "Мөхәррир",
        "prefs-preview": "Алдан карау",
        "prefs-advancedrc": "Киңәйтелгән көйләүләр",
-       "prefs-opt-out": "Яхшыртулардан баш тарту",
        "prefs-advancedrendering": "Киңәйтелгән көйләүләр",
        "prefs-advancedsearchoptions": "Киңәйтелгән көйләүләр",
        "prefs-advancedwatchlist": "Киңәйтелгән көйләүләр",
        "anoncontribs": "Кертем",
        "contribsub2": "Кертем {{GENDER:$3|$1}} ($2)",
        "nocontribs": "Күрсштелгән шартларга җавап биргән үзгәрешләр таҗылмады.",
-       "uctop": "(хәзерге)",
+       "uctop": "хәзерге",
        "month": "Айдан башлап (һәм элегрәк):",
        "year": "Елдан башлап (һәм элегрәк):",
        "sp-contributions-newbies": "Яңа хисап язмаларыннан ясалган кертемне генә карау",
        "tags": "Гамәлдә булучы үзгәртүләр билгеләре",
        "tag-filter": "[[Special:Tags|Билгеләр]] фильтры:",
        "tag-filter-submit": "Фильтрлау",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|1=Билге|Билгеләр}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|1=Билге|Билгеләр}}]]: $2",
        "tags-title": "Теглар",
        "tags-intro": "Әлеге сәхифәдә төзәтүләрне билгеләгән, программа тәэмин итә торган теглар исемлеге һәм шул тегларның аңламнары китерелгән.",
        "tags-tag": "Тег исеме",
index c7e349c..2247935 100644 (file)
        "contributions-title": "$1 isemle qullanuçınıñ kerteme",
        "mycontris": "Kertem",
        "contribsub2": "$1 ($2) öçen",
-       "uctop": "(axırğı)",
+       "uctop": "axırğı",
        "month": "Aydan başlap (häm elegräk):",
        "year": "Yıldan başlap (häm elegräk):",
        "sp-contributions-newbies": "Yaña xisap yazmalarınnan yasalğan kertemne genä qaraw",
        "intentionallyblankpage": "Bu bit maxsus buş qaldırılğan",
        "tag-filter": "[[Special:Tags|Teglar]] filtrı:",
        "tag-filter-submit": "Filtrlaw",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Teg|Teglar}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Teg|Teglar}}]]: $2",
        "tags-title": "Teglar",
        "tags-tag": "Teg iseme",
        "tags-source-header": "Çığanağı",
index ea6157c..8f3914f 100644 (file)
        "contributions-title": "«$1» деп ажыглакчының салыышкыннары",
        "mycontris": "Дадывыр",
        "contribsub2": "$1 ($2)",
-       "uctop": "(амгы)",
+       "uctop": "амгы",
        "month": "Айдан:",
        "year": "Чылдан:",
        "sp-contributions-newbies": "Чүгле чаа кежигүннерниң салыышкыннарын көргүзери",
index dc4821d..3882b02 100644 (file)
        "blanknamespace": "(ⴰⵎⵣⵡⴰⵔⵓ)",
        "mycontris": "ⴰⵎⴰⵡⴰⵙⵏ",
        "contribsub2": "ⵉ $1 ($2)",
-       "uctop": "(ⴰⴼⵍⵍⴰ)",
+       "uctop": "ⴰⴼⵍⵍⴰ",
        "sp-contributions-newbies-sub": "ⵉ ⵉⵙⴷⴰⵡⵏ ⵉⵎⴰⵢⵏⵓⵜⵏ",
        "sp-contributions-talk": "ⴰⵎⵢⴰⵏⵏⴰⵏ",
        "sp-contributions-submit": "ⴰⵔⵣⵣⵓ",
index 46a2d42..a90ee0f 100644 (file)
        "anoncontribs": "Гожтэмъёс",
        "contribsub2": "{{GENDER:$3|$1}} гожтэмъёсы ($2)",
        "nocontribs": "Та критериослы кельшись воштонъёс шедьтэмын ӧвӧл.",
-       "uctop": "(бызьыны)",
+       "uctop": "бызьыны",
        "month": "Толэзьысен (вазен но):",
        "year": "Арысен (вазен но):",
        "sp-contributions-newbies": "Юрттэт чотын гинэ вылез возьма",
        "specialpages-group-login": "Системае пырон / регистрация",
        "specialpages-group-users": "Викиавторъёс но правооссы",
        "tag-filter": "[[Special:Tags|Тэгъёсыз]] фильтр:",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|1=Метка|Меткаос}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|1=Метка|Меткаос}}]]: $2",
        "tags-title": "Меткаос",
        "tags-active-yes": "Бен",
        "tags-active-no": "Ӧвӧл",
index 2107474..65bd141 100644 (file)
        "anoncontribs": "تۆھپە",
        "contribsub2": "{{GENDER:$3|$1}} ($2) ئۈچۈن",
        "nocontribs": "بۇ ئۆلچەمگە ماس كېلىدىغان ئۆزگەرتىش تېپىلمىدى.",
-       "uctop": "(نۆۋەتتىكى)",
+       "uctop": "نۆۋەتتىكى",
        "month": "ئايدىن بۇيان (ياكى ئىلگىرى):",
        "year": "يىلدىن بۇيان (ياكى ئىلگىرى):",
        "sp-contributions-newbies": "يېڭى قۇرۇلغان ئىشلەتكۈچى تۆھپىسىنىلا كۆرسەت",
        "dberr-again": "بىر قانچە مىنۇت كۈتۈپ ئاندىن قايتا يۈكلەڭ.",
        "dberr-info": "(ساندان مۇلازىمىتىرىغا ئۇلىنالمىدى:  $1)",
        "dberr-info-hidden": "(ساندان مۇلازىمېتىرىغا ئۇلىنالمىدى)",
-       "dberr-usegoogle": "بۇ ۋاقىتتا Google ئىزدىگۈچتىن ئىزدەشنى سىناپ بېقىڭ.",
-       "dberr-outofdate": "دىققەت ئۇلار ئىندىكېسلىغان مەزمۇن ئەڭ يېڭى بولماسلىقى مۇمكىن.",
-       "dberr-cachederror": "بۇ ئىلتىماس قىلغان بەتنىڭ غەملەنگەن كۆپەيتىلمىسى، ئەڭ يېڭىسى بولماسلىقى مۇمكىن.",
        "htmlform-invalid-input": "كىرگۈزگەن مەزمۇنىڭىزدا مەسىلە بار",
        "htmlform-select-badoption": "سىز بەلگىلىگەن قىممەت ئىناۋەتلىك تاللانما ئەمەس.",
        "htmlform-int-invalid": "سىز بەلگىلىگەن قىممەت پۈتۈن سان ئەمەس.",
index 8ba2ba3..406b1b9 100644 (file)
        "timezonelegend": "Часовий пояс:",
        "localtime": "Місцевий час:",
        "timezoneuseserverdefault": "Використовувати стандартне налаштування вікі ($1)",
-       "timezoneuseoffset": "Інше (зазначте зміщення)",
+       "timezoneuseoffset": "Інше (нижче зазначте зміщення)",
+       "timezone-useoffset-placeholder": "Наприклад: «-07:00» або «01:00»",
        "servertime": "Час сервера:",
        "guesstimezone": "Заповнити з браузера",
        "timezoneregion-africa": "Африка",
        "prefs-editor": "Редактор",
        "prefs-preview": "Попередній перегляд",
        "prefs-advancedrc": "Розширені налаштування",
-       "prefs-opt-out": "Відмовитись від покращень",
        "prefs-advancedrendering": "Розширені налаштування",
        "prefs-advancedsearchoptions": "Розширені налаштування",
        "prefs-advancedwatchlist": "Розширені налаштування",
        "prefs-displayrc": "Налаштування показу",
        "prefs-displaywatchlist": "Налаштування показу",
+       "prefs-changesrc": "Показані зміни",
+       "prefs-changeswatchlist": "Показані зміни",
        "prefs-tokenwatchlist": "Токен",
        "prefs-diffs": "Різниці версій",
        "prefs-help-prefershttps": "Цей параметр набуде чинності при вашому наступному вході у систему.",
        "ignorewarning": "Ігнорувати попередження і зберегти файл",
        "ignorewarnings": "Ігнорувати всі попередження",
        "minlength1": "Назва файлу повинна містити щонайменше одну літеру.",
-       "illegalfilename": "Ім'я файлу \"$1\" містить букви, що недозволені в заголовках сторінок. Будь ласка перейменуйте файл і спробуйте завантажити його знову.",
+       "illegalfilename": "Ім'я файлу «$1» містить символи, що не дозволені в заголовках сторінок. Будь ласка, перейменуйте файл і спробуйте завантажити його знову.",
        "filename-toolong": "Назви файлів не можуть бути довші, ніж 240 байтів.",
        "badfilename": "Назву файлу було змінено на $1.",
        "filetype-mime-mismatch": "Розширення \".$1\" файлу не відповідає виявленому MIME типу файлу ($2).",
        "contribsub2": "Для {{GENDER:$3|$1}} ($2)",
        "contributions-userdoesnotexist": "Обліковий запис користувача  «$1» не зареєстровано.",
        "nocontribs": "Редагувань, що відповідають заданим умовам, не знайдено.",
-       "uctop": "(поточна)",
+       "uctop": "поточна",
        "month": "До місяця (включно):",
        "year": "До року (включно):",
        "date": "З дати (і раніше):",
        "move-watch": "Спостерігати за цією сторінкою",
        "movepagebtn": "Перейменувати сторінку",
        "pagemovedsub": "Перейменування виконано",
+       "cannotmove": "Сторінка не може бути перейменована з {{PLURAL:$1|1=такої причини|таких причин}}:",
        "movepage-moved": "'''Сторінка «$1» перейменована на «$2»'''",
        "movepage-moved-redirect": "Створено перенаправлення.",
        "movepage-moved-noredirect": "Створення перенаправлення було заборонене.",
        "tags": "Чинні мітки змін",
        "tag-filter": "Фільтр&nbsp;[[Special:Tags|міток]]:",
        "tag-filter-submit": "Відфільтрувати",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Мітка|Мітки}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Мітка|Мітки}}]]: $2",
        "tag-mw-contentmodelchange": "зміна моделі вмісту",
        "tag-mw-contentmodelchange-description": "Редагування, які змінюють [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:ChangeContentModel модель вмісту] сторінки",
        "tag-mw-new-redirect": "Нове перенаправлення",
        "dberr-again": "Спробуйте оновити сторінку за кілька хвилин.",
        "dberr-info": "(неможливо з'єднатися з сервером баз даних: $1)",
        "dberr-info-hidden": "(Не вдається зв'язатися з сервером бази даних)",
-       "dberr-usegoogle": "Можете спробувати пошукати за допомогою Google.",
-       "dberr-outofdate": "Майте на увазі, що його індекси можуть бути застарілими.",
-       "dberr-cachederror": "Нижче наведена закешована версія запитаної сторінки, можливо, вона не показує останні зміни.",
        "htmlform-invalid-input": "Частина введених вами даних викликала проблеми",
        "htmlform-select-badoption": "Зазначене вами значення є недопустимим.",
        "htmlform-int-invalid": "Зазначене вами значення не є цілим числом.",
index 194a759..df7817d 100644 (file)
        "userlogin-createanother": "دوسرا کھاتہ تخلیق کریں",
        "createacct-emailrequired": "ای میل پتہ",
        "createacct-emailoptional": "برقی ڈاک پتا (اختیاری)",
-       "createacct-email-ph": "اپنا برقی پتہ لکھیں",
+       "createacct-email-ph": "اپنا برقی ڈاک پتا لکھیں",
        "createacct-another-email-ph": "برقی ڈاک پتا لکھیں",
        "createaccountmail": "عارضی پاسورڈ استعمال کریں اور اسے متعینہ برقی ڈاک پتہ پر ارسال کریں",
        "createaccountmail-help": "پاس ورڈ معلوم کیے بغیر کسی دوسرے شخص کا کھاتہ بنانے کے لیے اسے استعمال کیا جا سکتا ہے۔",
        "mailmypassword": "پاسورڈ تبدیل کریں",
        "passwordremindertitle": "نیا عارضی کلمۂ شناخت برائے {{SITENAME}}",
        "passwordremindertext": "(IP پتہ $1 سے) کسی (یا شاید آپ) نے {{SITENAME}} ($4)\nکے لیے نئے پاس ورڈ کی درخواست کی ہے۔ لہذا صارف \"$2\" کے لیے ایک عارضی پاس ورڈ \"$3\" بنا دیا گیا ہے۔\nاگر یہ اقدام بالارادہ تھا تو اب آپ لاگ ان ہونے کے بعد نیا پاس ورڈ رکھیں۔\nآپ کا درج بالا عارضی پاس ورڈ {{PLURAL:$5|ایک دِن|$5 دِنوں}} کے بعد ناکارہ ہوجائے گا۔\n\nاگر کسی اَور نے یہ درخواست کی ہے، یا آپ کو اپنا پاس ورڈ یاد آگیا ہے اور آپ اسے تبدیل نہیں کرنا چاہتے تو آپ یہ پیغام نظر انداز کرکے اپنے پرانے پاس ورڈ کا استعمال جاری رکھ سکتے ہیں۔",
-       "noemail": "صارف \"$1\" کیلئے کوئی برقی پتہ درج نہیں کیا گیا.",
-       "noemailcreate": "صحیح برقی پتہ مہیّا کریں",
+       "noemail": "صارف \"$1\" کا کوئی برقی ڈاک پتا درج نہیں کیا گیا۔",
+       "noemailcreate": "صحیح برقی ڈاک پتا فراہم کریں۔",
        "passwordsent": "ایک نیا کلمۂ شناخت \"$1\" کے نام سے بننے والی برقی ڈاک کے پتے کیلیے بھیج دیا گیا ہے۔\nجب وہ موصول ہو جاۓ تو براہ کرم اسکے ذریعے دوبارہ داخل ہوں۔",
        "blocked-mailpassword": "آپ کے آئی پی پتے کی ترمیم کاری پر پابندی لگا دی گئی ہے۔ غلط استعمال سے بچنے کے لیے اس آئی پی پتے سے پاس ورڈ کی بازیابی کی اجازت منسوخ کر دی گئی ہے۔",
-       "eauthentsent": "ایک تصدیقی برقی خط نامزد کیے گئے برقی پتہ پر ارسال کردیا گیا ہے۔\nآپ کو موصول ہوئے برقی خط میں ہدایات پر عمل کرکے اس بات کی توثیق کرلیں کہ مذکورہ برقی پتہ آپ کا ہی ہے۔",
+       "eauthentsent": "ایک تصدیقی برقی خط درج کردہ برقی ڈاک پتے پر ارسال کردیا گیا ہے۔\nآپ کو موصول شدہ برقی خط میں موجود ہدایات پر عمل کرکے اس بات کی توثیق کرلیں کہ مذکورہ برقی ڈاک پتا آپ کا ہی ہے۔",
        "throttled-mailpassword": "گزشتہ {{PLURAL:$1|گھنٹے|$1 گھنٹوں}} کے دوران پہلے سے ہی پاسورڈ کی تبدیلی کے لیے برقی خط بھیجا گيا ہے۔\nناجائز استعمال کے سدّباب کے لیے، {{PLURAL:$1|گھنٹہ|$1 گھنٹوں}} کے دوران صرف ایک برقی خط بھیجا جا سکتا ہے۔",
        "mailerror": "مسلہ دوران ترسیل خط:$1",
        "acct_creation_throttle_hit": "آپکی آئی پی کے ذریعے اِس ویکی پر آنے والے صارفین نے پچھلے $2 میں {{PLURAL:$1|1 کھاتہ بنایا ہے|$1 کھاتے بنائے ہیں}} جو اس مدت کے لیے کافی ہیں۔\nلہٰذا آپ کی آئی پی استعمال کرنے والے صارفین اِس وقت مزید کھاتے نہیں بنا سکتے۔",
        "emailauthenticated": "آپ کے برقی ڈاک پتہ کی تصدیق مورخہ $2 بوقت $3 بجے ہوئی۔",
-       "emailnotauthenticated": "آپ کے برقی پتہ کی ابھی تصدیق نہیں ہوئی ہے۔\nدرج ذیل میں سے کسی بھی چیز کیلئے آپ کے برقی پتہ پر برقی ڈاک ارسال نہیں کی جائے گی۔",
+       "emailnotauthenticated": "آپ کے برقی ڈاک پتے کی ابھی تصدیق نہیں ہوئی ہے۔\nدرج ذیل میں سے کسی بھی چیز کے لیے آپ کے برقی ڈاک پتے پر برقی ڈاک ارسال نہیں کی جائے گی۔",
        "noemailprefs": "اِن خصائص کو کام میں لانے کیلئے اپنے ترجیحات میں برقی ڈاک کا پتہ متعین کیجئے.",
-       "emailconfirmlink": "اپنے برقی پتہ کی تصدیق کیجئے",
-       "invalidemailaddress": "برقی پتہ قبول نہیں کیا جاسکتا کیونکہ یہ غلط شکل میں ہے.\nبراہِ کرم! ایک برقی پتہ صحیح شکل میں درج کیجئے یا جگہ کو خالی چھوڑ دیجئے.",
-       "cannotchangeemail": "کھاتے کا برقی پتہ اس ویکی سے پر رہتے ہوئے نہیں تبدیل کیا جا سکتا۔",
+       "emailconfirmlink": "اپنے برقی ڈاک پتے کی تصدیق کریں",
+       "invalidemailaddress": "برقی ڈاک پتا قبول نہیں کیا جاسکتا کیونکہ یہ غلط شکل میں ہے۔\nبراہِ کرم اپنا برقی ڈاک پتا صحیح شکل میں درج کریں یا اس جگہ کو خالی چھوڑ دیں۔",
+       "cannotchangeemail": "اس ویکی پر کھاتے کا برقی ڈاک پتا تبدیل کیا جا سکتا۔",
        "emaildisabled": "اس سائٹ سے برقی خط نہیں بھیجے جاسکتے",
        "accountcreated": "تخلیقِ کھاتہ",
        "accountcreatedtext": "[[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|تبادلۂ خیال]]) کا صارف کھاتہ بن چکا ہے۔",
        "createaccount-title": "کھاتہ سازی برائے {{SITENAME}}",
-       "createaccount-text": "کسی نے {{SITENAME}} ($4) پر «$2» کے نام سے اور \"$3\" پاسورڈ کے ساتھ آپ کا برقی پتہ استعمال کرتے ہوئے کھاتہ بنایا ہے۔\nآپ کو چاہیے کہ ابھی لاگ ان ہو کر اپنا پاسورڈ تبدیل کر دیں۔\n\nاگر یہ کھاتہ غلطی سے بنا ہے، تو آپ یہ پیغام نظر انداز کر دیں۔",
+       "createaccount-text": "کسی نے {{SITENAME}} ($4) پر «$2» کے نام سے اور \"$3\" پاس ورڈ کے ساتھ آپ کا برقی ڈاک پتا استعمال کرتے ہوئے کھاتہ بنایا ہے۔\nچنانچہ آپ ابھی لاگ ان ہو کر اپنا پاس ورڈ تبدیل کر دیں۔\n\nاگر یہ کھاتہ غلطی سے بنا ہے، تو آپ اس پیغام کو نظر انداز کر سکتے ہیں۔",
        "login-throttled": "آپ نے حال ہی میں متعدد مرتبہ لاگ ان ہونے کی کوشش کی ہے۔\nدوبارہ کوشش کرنے سے پہلے $1 انتظار فرمائیے۔",
        "login-abort-generic": "لاگ ان ناکام - منسوخ شد",
        "login-migrated-generic": "آپ کا کھاتہ منتقل کر دیا گیا، اب اس ویکی پر آپ کا صارف نام موجود نہیں۔",
        "subject-preview": "عنوان/شہ سرخی کی نمائش:",
        "previewerrortext": "آپ کی تبدیلیوں کی نمائش دکھانے کے دوران میں کوئی نقص واقع ہو گیا ہے۔",
        "blockedtitle": "صارف مسدود ہے",
-       "blockedtext": "<strong>آپ کے صارف نام یا آئی پی پتہ پر پابندی لگائی جا چکی ہے۔</strong>\n\n$1 نے پابندی عائد کی اور یہ وجہ درج کی: <em>$2</em>\n\n* پابندی کی ابتدا : $8\n* پابندی کا اختتام : $6\n* ممنوع صارف: $7\n\nآپ $1 یا کسی دوسرے [[{{MediaWiki:Grouppage-sysop}}|منتظم]] سے رابطہ کر کے اس پابندی پر گفت و شنید کر سکتے ہیں۔\nواضح رہے کہ آپ «{{int:emailuser}}» کی سہولت اُس وقت تک استعمال نہیں کر سکتے جب تک آپ اپنے [[Special:Preferences|کھاتہ کی ترجیحات]] میں درست برقی پتا درج نہ کریں اور آپ کو اِسے استعمال کرنے سے روک نہ دیا گیا ہو۔\nآپ کا موجودہ آئی پی پتہ $3 ہے اور پابندی کا شناختی نمبر #$5 ہے۔\nاگر آپ پابندی سے متعلق کہیں استفسار کریں تو براہِ مہربانی اس میں درج بالا تمام تفصیلات شامل کریں۔",
-       "autoblockedtext": "آپ کے آئی پی پتے پر خودکار طور پر پابندی لگا دی گئی ہے کیونکہ اسے ایک ایسے صارف نے استعمال کیا تھا جس پر $1 نے پابندی لگا رکھی ہے۔\nپابندی کی وجہ یہ درج کی گئی:\n\n:<em>$2</em>\n\n*پابندی کی ابتدا: $8\n*پابندی کا اختتام: $6\n*ممنوع صارف: $7\n\nآپ $1 سے یا دوسرے [[{{MediaWiki:Grouppage-sysop}}|منتظمین]] سے رابطہ کر کے اس پابندی پر گفت و شنید کر سکتے ہیں۔\n\nیاد رکھیں کہ «{{int:emailuser}}» کی خاصیت اُس وقت تک استعمال نہیں کرسکتے جب تک آپ اپنے [[Special:Preferences|کھاتے کی ترجیحات]] میں صحیح برقی پتہ درج نہ کریں اور آپ کو اِسے استعمال کرنے سے روک نہ دیا گیا ہو۔\n\nآپ کا موجودہ آئی پی پتہ $3 ہے، اور پابندی کی شناخت #$5 ہے۔\nبراہِ مہربانی کسی بھی قسم کے استفسار میں درج بالا تمام تفصیلات شامل کریں۔",
+       "blockedtext": "<strong>آپ کے صارف نام یا آئی پی پتہ پر پابندی لگائی جا چکی ہے۔</strong>\n\n$1 نے پابندی عائد کی اور یہ وجہ درج کی: <em>$2</em>\n\n* پابندی کی ابتدا : $8\n* پابندی کا اختتام : $6\n* ممنوع صارف: $7\n\nآپ $1 یا کسی دوسرے [[{{MediaWiki:Grouppage-sysop}}|منتظم]] سے رابطہ کر کے اس پابندی پر گفت و شنید کر سکتے ہیں۔\nواضح رہے کہ آپ «{{int:emailuser}}» کی سہولت اُس وقت تک استعمال نہیں کر سکتے جب تک آپ اپنے [[Special:Preferences|کھاتہ کی ترجیحات]] میں درست برقی ڈاک پتا درج نہ کریں اور آپ کو اِسے استعمال کرنے سے روک نہ دیا گیا ہو۔\nآپ کا موجودہ آئی پی پتہ $3 ہے اور پابندی کا شناختی نمبر #$5 ہے۔\nاگر آپ پابندی سے متعلق کہیں استفسار کریں تو براہِ مہربانی اس میں درج بالا تمام تفصیلات شامل کریں۔",
+       "autoblockedtext": "آپ کے آئی پی پتے پر خودکار طور پر پابندی لگا دی گئی ہے کیونکہ اسے ایک ایسے صارف نے استعمال کیا تھا جس پر $1 نے پابندی لگا رکھی ہے۔\nپابندی کی وجہ یہ درج کی گئی:\n\n:<em>$2</em>\n\n*پابندی کی ابتدا: $8\n*پابندی کا اختتام: $6\n*ممنوع صارف: $7\n\nآپ $1 سے یا دیگر [[{{MediaWiki:Grouppage-sysop}}|منتظمین]] سے رابطہ کر کے اس پابندی پر گفت و شنید کر سکتے ہیں۔\n\nیاد رکھیں کہ آپ «{{int:emailuser}}» کی خاصیت اُس وقت تک استعمال نہیں کرسکتے جب تک آپ اپنے [[Special:Preferences|کھاتے کی ترجیحات]] میں صحیح برقی ڈاک پتا درج نہ کریں اور آپ کو اِسے استعمال کرنے سے روک نہ دیا گیا ہو۔\n\nآپ کا موجودہ آئی پی پتہ $3 ہے اور پابندی کا شناختی نمبر #$5 ہے۔\nبراہِ مہربانی کسی بھی قسم کے استفسار میں درج بالا تمام تفصیلات ضرور شامل کریں۔",
        "systemblockedtext": "آپ کے صارف نام یا آئی پی پتے پر میڈیاویکی کی جانب سے خودکار طریقے سے پابندی لگا دی گئی ہے۔\nاور وجہ یہ درج کی گئی ہے کہ:\n<em>$2</em>\n\n*پابندی کی ابتدا: $8\n*پابندی کا اختتام: $6\n*ممنوع صارف: $7\n\nآپ کا موجودہ آئی پی پتہ $3 ہے۔\nبراہِ مہربانی کسی بھی قسم کے استفسار میں درج بالا تمام تفصیلات شامل کریں۔",
        "blockednoreason": "کوئی وجہ نہیں دی گئی",
        "whitelistedittext": "ترمیم کیلئے $1 ضروری ہے.",
-       "confirmedittext": "صفحات میں ترمیم کرنے سے پہلے آپ اپنے برقی پتہ کی تصدیق کریں.\nبرائے مہربانی! اپنی [[Special:Preferences|ترجیحات]] کے ذریعے اپنا برقی پتہ کا تعیّن اور تصدیق کیجئے.",
+       "confirmedittext": "صفحات میں ترمیم کرنے سے پہلے آپ اپنے برقی ڈاک پتے کی تصدیق کریں۔\nبراہ مہربانی کھاتے کی [[Special:Preferences|ترجیحات]] میں اپنا برقی ڈاک پتا درج اور اس کی تصدیق کریں۔",
        "nosuchsectiontitle": "قطعہ نہیں ملا",
        "nosuchsectiontext": "آپ نے ایسے قطعہ میں ترمیم کی کوشش کی ہے جو کہ موجود نہیں.\nہوسکتا ہے کہ جب آپ صفحہ ملاحظہ فرمارہے تھے اُسی اثناء مذکورہ قطعہ کو منتقل یا حذف کردیا گیا ہو.",
        "loginreqtitle": "داخلہ / اندراج لازم",
        "cantcreateaccount-text": "[[User:$3|$3]] نے اس آئی پی پتہ (<strong>$1</strong>) کی کھاتہ سازی پر پابندی لگا رکھی ہے۔\n\n$3 نے «<em>$2</em>» وجہ بیان کی ہے",
        "cantcreateaccount-range-text": "[[User:$3|$3]] نے <strong>$1</strong> رینج کے آئی پی پتوں پر جس میں آپ کا آئی پی پتہ (<strong>$4</strong>) بھی موجود ہے پر پابندی لگا دی ہے۔\n\n$3 نے «<em>$2</em>» وجہ بیان کی ہے",
        "viewpagelogs": "اس صفحہ کے نوشتے دیکھیں",
-       "nohistory": "اِس صفحہ کیلئے کوئی تدوینی تاریخچہ موجود نہیں ہے.",
+       "nohistory": "اس صفحہ کا ترمیمی تاریخچہ موجود نہیں ہے۔",
        "currentrev": "تازہ ترین نسخہ",
        "currentrev-asof": "حالیہ نسخہ بمطابق $1",
        "revisionasof": "نسخہ بمطابق $1",
        "history-feed-title": "تاریخچہ ترمیم",
        "history-feed-description": "ویکی پر اِس صفحہ کا تاریخچۂ نظرثانی",
        "history-feed-item-nocomment": "بہ $2 $1",
-       "history-feed-empty": "درخواست شدہ صفحہ موجود نہیں.\nیا تو یہ ویکی سے حذف کیا گیا ہے اور یا اِس کا نام تبدیل کردیا گیا ہے.\nآپ متعلقہ نئے صفحات کیلئے [[Special:Search|ویکی پر تلاش]] کرسکتے ہیں.",
+       "history-feed-empty": "درخواست کردہ صفحہ موجود نہیں۔\nممکن ہے کہ اسے ویکی سے حذف کر دیا گیا ہو یا اِس کا نام تبدیل کردیا گیا ہو۔\nآپ متعلقہ نئے صفحات کو [[Special:Search|ویکی پر تلاش]] کرسکتے ہیں۔",
        "history-edit-tags": "منتخب نظرثانیوں کے ٹیگوں میں ترمیم کریں",
        "rev-deleted-comment": "(تبصرہ حذف کی گيا ہے)",
        "rev-deleted-user": "(صارف نام حذف کیا گيا ہے)",
        "prefs-watchlist-edits": "زیر نظر فہرست میں نظر آنے والی تبدیلیوں کی زیادہ سے زیادہ تعداد:",
        "prefs-watchlist-edits-max": "زیادہ سے زیادہ تعداد: 1000",
        "prefs-watchlist-token": "زیر نظر فہرست کی کلید:",
+       "prefs-watchlist-managetokens": "انتظام ٹوکن",
        "prefs-misc": "دیگر",
        "prefs-resetpass": "پاس ورڈ تبدیل کریں",
        "prefs-changeemail": "برقی ڈاک پتا تبدیل یا حذف کریں",
-       "prefs-setemail": "برقی پتہ دیں",
+       "prefs-setemail": "برقی ڈاک پتا درج کریں",
        "prefs-email": "برقی خط کے اختیارات",
        "prefs-rendering": "ظاہریت",
        "saveprefs": "محفوظ",
        "recentchangescount": "حالیہ تبدیلیوں، تاریخچوں اور نوشتوں میں دکھائی جانے والی ترامیم کی تعداد:",
        "prefs-help-recentchangescount": "زیادہ سے زیادہ تعداد: 1000",
        "prefs-help-watchlist-token2": "یہ آپ کی زیر نظر فہرست کے ویب فیڈ کی خفیہ کلید ہے۔\nاسے خفیہ رکھیں، تاکہ کوئی دوسرا شخص آپ کی زیر نظر فہرست نہ دیکھ سکے۔\nاگر آپ کو کلید تبدیل کرنی ہو تو [[Special:ResetTokens|یہاں کلک کریں]]۔",
+       "prefs-help-tokenmanagement": "آپ کی زیر نظر فہرست کی ویب فیڈ تک رسائی کے لیے اپنے کھاتے کی خفیہ کلید آپ یہاں دیکھ اور بدل سکتے ہیں۔ جس کے پاس یہ کلید ہوگی وہ آپ کی زیر نظر فہرست کو دیکھ سکتا ہے، لہذا اس کلید کو خفیہ رکھیں۔",
        "savedprefs": "آپ کی ترجیحات محفوظ ہوگئیں۔",
        "savedrights": "{{GENDER:$1|$1}} کے اختیارات محفوظ ہو گئے۔",
        "timezonelegend": "منطقۂ وقت:",
        "prefs-editor": "خانہ ترمیم",
        "prefs-preview": "نمائش",
        "prefs-advancedrc": "اضافی اختیارات",
-       "prefs-opt-out": "اصلاحات سے گریز",
        "prefs-advancedrendering": "اضافی اختیارات",
        "prefs-advancedsearchoptions": "اعلی اختیارات",
        "prefs-advancedwatchlist": "اضافی اختیارات",
        "prefs-displayrc": "نمائش کے اختیارات",
        "prefs-displaywatchlist": "نمائش کے اختیارات",
+       "prefs-changesrc": "دکھائی جانے والی تبدیلیاں",
+       "prefs-changeswatchlist": "دکھائی جانے والی تبدیلیاں",
+       "prefs-pageswatchlist": "زیر نظر صفحات",
        "prefs-tokenwatchlist": "ٹوکن",
        "prefs-diffs": "فرق",
        "prefs-help-prefershttps": "یہ ترجیح آپ کے اگلے لاگ ان پر اثر انداز ہوگی۔",
        "emailuser-title-notarget": "ای میل صارف",
        "emailpagetext": "درج ذیل فارم کے ذریعہ آپ اس {{GENDER:$1|صارف}} کو برقی پیغام بھیج سکتے ہیں۔ جو برقی ڈاک پتا آپ نے [[Special:Preferences|اپنی ترجیحات]] میں دیا ہے وہ یہاں \"از\" کے طور پر نظر آئے گا، تاکہ وصول کنندہ براہ راست آپ کو جواب دے سکے۔",
        "defemailsubject": "{{SITENAME}} سے برقی خط",
-       "usermaildisabled": "صارف برقی پتہ غیر فعال ہے",
+       "usermaildisabled": "صارف کا برقی ڈاک پتا غیر فعال ہے",
        "usermaildisabledtext": "آپ اس ویکی پر رہتے ہوئے دوسرے صارف کو برقی خط ارسال نہيں کر سکتے",
-       "noemailtitle": "کوئی برقی پتہ نہیں ہے",
+       "noemailtitle": "کوئی برقی ڈاک پتا نہیں ہے",
        "noemailtext": "اس صارف نے کوئی درست برقی ڈاک پتا نہیں دیا ہے۔",
        "nowikiemailtext": "اس صارف نے دیگر صارفین سے برقی خط وصول نہ کرنے کا فیصلہ کیا ہے۔",
        "emailnotarget": "وصول کنندہ موجود نہیں یا صارف نام نادرست ہے۔",
        "contribsub2": "{{GENDER:$3|$1}} ($2)",
        "contributions-userdoesnotexist": "«$1» کے نام سے صارف کھاتہ مندرج نہیں ہے۔",
        "nocontribs": "اس معیار کے مطابق کوئی ترمیم دستیاب نہیں ہوئی۔",
-       "uctop": "(موجودہ نسخہ)",
+       "uctop": "موجودہ نسخہ",
        "month": "مہینہ (اور اُس سے قبل):",
        "year": "سال (اور اُس سے قبل):",
        "date": "تاریخ سے (اور اس سے قبل)",
        "exif-urgency-other": "صارف کی وضاحت کردہ ترجیح ($1)",
        "namespacesall": "تمام",
        "monthsall": "تمام",
-       "confirmemail": "اپنے برقی پتہ کی تصدیق کریں",
+       "confirmemail": "اپنے برقی ڈاک پتے کی تصدیق کریں",
        "confirmemail_noemail": "آپ نے [[Special:Preferences|اپنی ترجیحات]] میں درست برقی ڈاک پتا نہیں دیا ہے۔",
        "confirmemail_text": "{{SITENAME}} میں موجود برقی خط کی سہولتوں کو استعمال کرنے کے لیے آپ کے برقی ڈاک پتے کی تصدیق ضروری ہے۔\nاپنے پتے پر تصدیقی ڈاک روانہ کرنے کے لیے ذیل میں موجود بٹن پر کلک کریں۔\nموصولہ برقی خط میں آپ کو کوڈ پر مشتمل ایک ربط نظر آئے گا۔\nچنانچہ اپنے بڑقی ڈاک پتے کی تصدیق کے لیے اس ربط کو اپنے براؤزر میں کھولیں۔",
        "confirmemail_pending": "آپ کو تصدیقی کوڈ پہلے ہی روانہ کیا جا چکا ہے۔\nاگر آپ نے ابھی اپنا کھاتہ بنایا ہے تو نئے کوڈ کی درخواست دینے سے قبل اس کے موصول ہونے کا کچھ دیر انتظار کر لیں۔",
        "tags": "درست تبدیلی کے ٹیگ",
        "tag-filter": "مقطار [[Special:Tags|ٹیگ]]:",
        "tag-filter-submit": "مقطار",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|ٹیگ}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|ٹیگ}}]]: $2",
        "tag-mw-contentmodelchange": "مواد کے ماڈل میں تبدیلی",
        "tag-mw-contentmodelchange-description": "ترامیم جو صفحہ کے [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:ChangeContentModel مواد کے ماڈل کو تبدیل کرتی ہیں]",
        "tag-mw-new-redirect": "نیا رجوع مکرر",
        "dberr-again": "چند منٹ انتظار کے بعد دوبارہ کوشش کریں۔",
        "dberr-info": "(ڈیٹا بیس تک رسائی نہیں مل سکی: $1)",
        "dberr-info-hidden": "(ڈیٹا بیس تک رسائی نہیں مل سکی)",
-       "dberr-usegoogle": "اسی درمیان میں آپ گوگل کے ذریعہ تلاش کرنے کی کوشش کر سکتے ہیں۔",
-       "dberr-outofdate": "واضح رہے کہ ہمارے مواد کے متعلق ان کے اشاریے ممکن ہے پرانے ہو چکے ہوں۔",
-       "dberr-cachederror": "یہ درخواست شدہ صفحہ کا کیش (cache) شدہ نسخہ ہے اور ممکن ہے تازہ نہ ہو۔",
        "htmlform-invalid-input": "آپ کے اندراج میں کچھ مسائل ہیں۔",
        "htmlform-select-badoption": "آپ کی درج کردہ قدر درست اختیار نہیں ہے۔",
        "htmlform-int-invalid": "آپ کی درج کردہ قدر عدد صحیح نہیں ہے۔",
        "special-characters-title-endash": "علامت خط",
        "special-characters-title-emdash": "خط فاصل کشیدہ",
        "special-characters-title-minus": "علامت وضع",
+       "mw-widgets-abandonedit": "کیا آپ واقعی میں محفوظ کیے بغیر ترمیمی موڈ چھوڑنا چاہتے ہیں؟",
        "mw-widgets-abandonedit-discard": "ترامیم رد کریں",
        "mw-widgets-abandonedit-keep": "ترمیم جاری رکھیں",
        "mw-widgets-abandonedit-title": "واقعی؟",
index c0c7c34..6cc95fc 100644 (file)
@@ -15,7 +15,8 @@
                        "Ximik1991",
                        "Bmansurov",
                        "Fitoschido",
-                       "ديفيد"
+                       "ديفيد",
+                       "Malikxan"
                ]
        },
        "tog-underline": "Havolaning tagiga chizish:",
        "view": "Koʻrish",
        "view-foreign": "$1da koʻrish",
        "edit": "Tahrirlash",
+       "edit-local": "Mahalliy izohni tahrirlash",
        "create": "Yaratish",
        "create-local": "Mahalliy tavsifini qoʻshish",
        "delete": "O‘chirish",
        "disclaimers": "Masʼuliyatdan voz kechish",
        "disclaimerpage": "Project:Masʼuliyatdan voz kechish",
        "edithelp": "Tahrirlash yordami",
+       "helppage-top-gethelp": "Yordam",
        "mainpage": "Bosh sahifa",
        "mainpage-description": "Bosh sahifa",
        "policy-url": "Project:Qoida",
        "myprivateinfoprotected": "Sizda shaxsiy maʻlumotlaringizni tahrirlashga ruxsat mavjud emas.",
        "mypreferencesprotected": "Sizda afzalliklarni tahrirlashga ruxsat mavjud emas.",
        "ns-specialprotected": "\"{{ns:special}}\" nomfazosi sahifalari tahrirlanishi mumkin emas.",
+       "invalidtitle": "Yaroqsiz sarlavha",
        "exception-nologin": "Siz tizimda o'zingizni tanishtirmadingiz",
        "exception-nologin-text": "Bu sahifani koʻrish yoki soʻralgan amalni bajarish uchun tizimga kirishingiz lozim.",
        "virus-badscanner": "Moslamada xato. Noma'lum virus aniqlovchi: ''$1''",
        "anoncontribs": "Qoʻshilgan hissa",
        "contribsub2": "$1 uchun ($2)",
        "nocontribs": "Belgilangan shartlarga muvofiq oʻzgarishlar topilmadi.",
-       "uctop": "(joriy)",
+       "uctop": "joriy",
        "month": "Oydan (va avvalroq)",
        "year": "Yildan (va avvalroq)",
        "sp-contributions-newbies": "Faqatgina yangi foydalanuvchilarning hissalarini koʻrsat",
        "version-specialpages": "Maxsus sahifalar",
        "specialpages": "Maxsus sahifalar",
        "tag-filter": "[[Special:Tags|Nishonlar]] filtri:",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Teg|Teglar}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Teg|Teglar}}]]: $2",
        "compare-submit": "Solishtirish",
        "htmlform-reset": "Oʻzgarishlarni bekor qilish",
        "htmlform-selectorother-other": "Boshqa",
index 7e2c19c..b69c616 100644 (file)
        "anoncontribs": "Contributi",
        "contribsub2": "Par {{GENDER:$3|$1}} ($2)",
        "nocontribs": "No xe stà catà nissuna modifica che vaga ben par sti critèri.",
-       "uctop": "(de dèsso)",
+       "uctop": "de dèsso",
        "month": "Dal mese (e quei prima):",
        "year": "Da l'ano (e quei prima):",
        "sp-contributions-newbies": "Fame védar solo i contributi de i utenti novi",
        "tags": "Tag de le modifiche valide",
        "tag-filter": "[[Special:Tags|Tag]] filtro:",
        "tag-filter-submit": "Filtro",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Eticheta|Etichete}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Eticheta|Etichete}}]]: $2",
        "tags-title": "Tag",
        "tags-intro": "Sta pàxena la elenca i tag che el software el podarìa marcar come na modifica e el so significato.",
        "tags-tag": "Nome del tag",
        "dberr-problems": "Sto sito al momento el gà qualche problema tènico.",
        "dberr-again": "Próa a spetar un par de minuti e ricargar la pàxena.",
        "dberr-info": "(No se riesse a métarse in contato col server del database: $1)",
-       "dberr-usegoogle": "Fin che te speti, te podi proar a sercar su Google.",
-       "dberr-outofdate": "Tien presente che la so indicixassion dei nostri contenuti la podarìa no èssar ajornà.",
-       "dberr-cachederror": "Quela che segue la xe na copia cache de la pàxena richiesta, e la podarìa no èssar mia ajornà.",
        "htmlform-invalid-input": "Ghe xe problemi con l'input che te ghè inserìo",
        "htmlform-select-badoption": "El valor che te ghè indicà no'l xe mia valido.",
        "htmlform-int-invalid": "El valor che te ghè indicà no'l xe un nùmaro intero.",
index f6682e1..fa2f410 100644 (file)
        "contributions-title": "$1-kävutajan tond",
        "mycontris": "Minun tond",
        "contribsub2": "{{GENDER:$3|$1}}-kävutajan ($2) tond",
-       "uctop": "(nügüdläine)",
+       "uctop": "nügüdläine",
        "month": "Ku:",
        "year": "Voz’:",
        "sp-contributions-newbies": "Ozutada vaiše uziden kävutajiden tondad",
        "tags": "Aktualižed toižetusiden vestatesed",
        "tag-filter": "[[Special:Tags|Vestatesiden]] fil'tr:",
        "tag-filter-submit": "Fil'tr",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Virg|Virgad}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Virg|Virgad}}]]: $2",
        "tags-title": "Virgad",
        "tags-intro": "Necil lehtpolel om virgoiden nimikirj i neniden virgoiden znamoičendad. Programmad znamoitas virgoil toižetusid.",
        "tags-tag": "Tegan (virgan) nimi",
        "dberr-problems": "Pakičem armahtust! Necil saital om tehnižid problemoid.",
        "dberr-again": "Varastagat pordon aigad da udištagat lehtpol'.",
        "dberr-info": "(Ei voi säta sidod admusiden baziden serveranke: $1)",
-       "dberr-usegoogle": "Täl aigal tö voit ectä Google'an abul.",
-       "dberr-outofdate": "Google'an indeks voib olda vanhtunuden.",
-       "dberr-cachederror": "Naku om ectud lehtpolen keširuidud versii. Voib olda, siš ei ole tantoižid toižetusid.",
        "htmlform-invalid-input": "Erasil teil anttud andmusil om problem",
        "htmlform-select-badoption": "Teil anttud znamoičend ei ole lasktud.",
        "htmlform-int-invalid": "Teil anttud znamoičend ei ole kogonaine lugu.",
index c8ee439..301980c 100644 (file)
        "prefs-editor": "Trình soạn",
        "prefs-preview": "Xem trước",
        "prefs-advancedrc": "Tùy chọn nâng cao",
-       "prefs-opt-out": "Quyết định không sử dụng các cải thiện",
        "prefs-advancedrendering": "Tùy chọn nâng cao",
        "prefs-advancedsearchoptions": "Tùy chọn nâng cao",
        "prefs-advancedwatchlist": "Tùy chọn nâng cao",
        "contribsub2": "Của {{GENDER:$3}}$1 ($2)",
        "contributions-userdoesnotexist": "Chưa có tài khoản với tên “$1”.",
        "nocontribs": "Không tìm thấy thay đổi nào khớp với yêu cầu.",
-       "uctop": "(hiện tại)",
+       "uctop": "hiện tại",
        "month": "Từ tháng (trở về trước):",
        "year": "Từ năm (trở về trước):",
        "date": "Từ ngày (trở về trước):",
        "tags": "Thẻ đánh dấu thay đổi hợp lệ",
        "tag-filter": "Bộ lọc [[Special:Tags|thẻ]]:",
        "tag-filter-submit": "Bộ lọc",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1}}Thẻ]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1}}Thẻ]]: $2",
        "tag-mw-contentmodelchange": "thay đổi kiểu nội dung",
        "tag-mw-contentmodelchange-description": "Sửa đổi [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:ChangeContentModel thay đổi kiểu nội dung] của trang",
        "tag-mw-new-redirect": "Trang đổi hướng mới",
        "dberr-again": "Xin thử đợi vài phút rồi tải lại trang.",
        "dberr-info": "(Không thể liên lạc với máy chủ cơ sở dữ liệu: $1)",
        "dberr-info-hidden": "(Không thể liên lạc với cơ sở dữ liệu)",
-       "dberr-usegoogle": "Bạn có thể thử tìm trên Google trong khi chờ đợi.",
-       "dberr-outofdate": "Chú ý rằng các chỉ mục của Google có thể đã lỗi thời.",
-       "dberr-cachederror": "Sau đây là bản sao được lưu bộ đệm của trang bạn muốn xem, và có thể đã lỗi thời.",
        "htmlform-invalid-input": "Có vấn đề trong dữ liệu bạn vừa đưa vào",
        "htmlform-select-badoption": "Giá trị đưa vào không hợp lệ.",
        "htmlform-int-invalid": "Giá trị đưa vào không phải số nguyên.",
        "mw-widgets-abandonedit": "Bạn có chắc chắn muốn rời chế độ sửa đổi mà không lưu giữ trước tiên?",
        "mw-widgets-abandonedit-discard": "Từ bỏ các sửa đổi",
        "mw-widgets-abandonedit-keep": "Sửa tiếp",
-       "mw-widgets-abandonedit-title": "Bạn có chắc chắn?",
+       "mw-widgets-abandonedit-title": "Bạn có chắc không?",
        "mw-widgets-dateinput-no-date": "Không chọn ngày tháng",
        "mw-widgets-dateinput-placeholder-day": "YYYY-MM-DD (năm-tháng-ngày)",
        "mw-widgets-dateinput-placeholder-month": "YYYY-MM (năm-tháng)",
index de0422e..be5da45 100644 (file)
        "contributions-title": "Bajdrääch fo „$1“",
        "mycontris": "Bajdreech",
        "contribsub2": "Von {{GENDER:$3|$1}} ($2)",
-       "uctop": "(agduell)",
+       "uctop": "agduell",
        "month": "bis moonad:",
        "year": "bis dsum jôôr:",
        "sp-contributions-newbies": "Bloos bajdrääch fo naj Ôôgmeldâ dsajchn",
index 4df9726..6ef59be 100644 (file)
        "anoncontribs": "Keblünots",
        "contribsub2": "{{GENDER:$3|Hiela|Jiela|Ela}} $1 ($2)",
        "nocontribs": "Votükams nonik petuvons me paramets at.",
-       "uctop": "(anuik)",
+       "uctop": "anuik",
        "month": "De mul (e büiks):",
        "year": "De yel (e büiks):",
        "sp-contributions-newbies": "Jonolöd te keblünotis kalas nulik",
        "dberr-problems": "Säkusadolös! Bevüresodatopäd at nu labon säkädis kaenik.",
        "dberr-again": "Steifülolös dönu pos stebedüp minutas anik.",
        "dberr-info": "(No eplöpos ad kosikön ko dünanünöm nünodema: $1)",
-       "dberr-usegoogle": "Kanol sukön me el Google vütimo.",
        "htmlform-submit": "Sedön",
        "htmlform-reset": "Sädunön votükamis",
        "htmlform-selectorother-other": "Votik",
index 18ea783..dbf6e69 100644 (file)
        "contributions-title": "Cäüttijää $1 avittamizõd",
        "mycontris": "Minu avittamizõd",
        "contribsub2": "Cäüttijää $1 ($2) avittamizõd",
-       "uctop": "(ülez)",
+       "uctop": "ülez",
        "month": "Kuu",
        "year": "Voosi:",
        "sp-contributions-newbies": "Näüt uusijõõ cäüttijee muutuhsõd",
index 8d48b01..1f34338 100644 (file)
        "anoncontribs": "Hindä kirotusõq",
        "contribsub2": "Pruukja {{GENDER:$3|$1}} ($2) toimõndusõq",
        "nocontribs": "Sääntsit muutmiisi es lövväq.",
-       "uctop": "(parhillanõ)",
+       "uctop": "parhillanõ",
        "month": "Alostõn kuust (ja varrampa):",
        "year": "Alostõn aastagast (ja varrampa):",
        "sp-contributions-newbies": "Näütäq õnnõ vahtsidõ pruukjidõ toimõnduisi",
        "specialpages-group-redirects": "Ümbrenäütämistallitusleheq",
        "external_image_whitelist": "  #Jätäq seo rida muutmalda kujo pääle<pre>\n#Panõq regulaaravaldusõ osaq (õnnõ //-märke vaihõl ollõv jago) allapoolõ\n#Naaq pandasõq vastama vikivälitside pilte internetiaadrõssidõga\n#Nuuq, miä vastasõq, näüdätäseq ku pildiq, muido näüdätäs õnnõ pildi link\n#Märgiga # päälenakkajaq riaq ommaq kommõntaariq\n#Seo tii-i vaiht suuril ja väikeisil tähil\n\n#Panõq kõik regulaaravaldusq osaq seo joonõ kotsilõ. Jätäq seo rida muutmalda</pre>",
        "tag-filter": "[[Special:Tags|Märkmisfiltri]]:",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Märgüs|Märgüseq}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Märgüs|Märgüseq}}]]: $2",
        "tags-active-yes": "Jah",
        "tags-active-no": "Ei",
        "tags-hitcount": "$1 {{PLURAL:$1|muutminõ|muutmiisi}}",
index 657031e..1961355 100644 (file)
        "anoncontribs": "Mi ovraedje",
        "contribsub2": "Po {{GENDER:$3|$1}} ($2)",
        "nocontribs": "Nou candjmint di trové ki corespondreut a ç' critere la.",
-       "uctop": "(dierinne)",
+       "uctop": "dierinne",
        "month": "dispu l' moes (et pus timpe)",
        "year": "Dispu l' anêye (et pus timpe):",
        "sp-contributions-newbies": "Mostrer seulmint les contribouwaedjes des noveas contes",
        "intentionallyblankpage": "Cisse pådje ci est vude en esprès.",
        "tag-filter": "Passete po ls [[Special:Tags|etiketes]]:",
        "tag-filter-submit": "Passete",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Etikete|Etiketes}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Etikete|Etiketes}}]]: $2",
        "tag-mw-removed-redirect": "Redjiblaedje disfacé",
        "tags-active-yes": "Oyi",
        "tags-active-no": "Neni",
index d9cd1f1..cd2a82a 100644 (file)
        "mycontris": "Mga ámot nakon",
        "anoncontribs": "Mga amot",
        "contribsub2": "Para {{HENERO:$3|$1}} ($2)",
-       "uctop": "(pagkayana)",
+       "uctop": "pagkayana",
        "month": "Tikang ha bulan (ngan uruunhan):",
        "year": "Tikang ha tuig (ngan uruunhan):",
        "sp-contributions-newbies": "Igpakita an mga amot hin mga bag-o nga akawnt la",
        "external_image_whitelist": "#Pabay-i ini nga linea nga sugad gud la <pre>\n#Igbutang in mga regular nga expresyon nga mga fragment (iton bahin nga ada ha butnga han //) ha ubos\n#Ini igpapadis han mga URL han mga ha gawas (gin-hotlink) nga mga hulagway\n#An mga nasakto igpapakita nga mga hulagway, kon diri, sumpay la ngadto han hulagway an igpapakita\n#Mga linea nga natikang hin  # ginta-tratar nga mga komento\n# Case-insensitive ini\n\n#Igbutang an mga regex nga fragment ha igbaw hini nga linea. Pabay-i ini nga linea nga sugad gud la</pre>",
        "tag-filter": "[[Special:Tags|Tag]] panara:",
        "tag-filter-submit": "Panara",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|ka tag|ka mga tag}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|ka tag|ka mga tag}}]]: $2",
        "tags-title": "Mga tag",
        "tags-tag": "Ngaran han tag",
        "tags-source-header": "Tinikangan",
index 159e614..62278fe 100644 (file)
        "anoncontribs": "Cëru",
        "contribsub2": "Ngir $1 ($2)",
        "nocontribs": "Amul benn coppite bu melokaanoo nii bu ñu gis.",
-       "uctop": "(bi mujj)",
+       "uctop": "bi mujj",
        "month": "Tambali ci weeru (ak yi jiitu) :",
        "year": "Tambali ci atum (ak yi jiitu) :",
        "sp-contributions-newbies": "Wone cëru yu jëfandikukat yu yees yi rekk",
        "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|waxtaan]])",
        "specialpages": "Xëti jagleel",
        "tag-filter": "Seggee ak [[Special:Tags|Tafaan]]:",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Tafaan}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Tafaan}}]]: $2",
        "logentry-delete-delete": "$1 {{GENDER:$2|moo far}} xët wi $3",
        "revdelete-restricted": "doxalub digal ngir yorkat yi",
        "revdelete-unrestricted": "digal ngir yorkat yi deñ na",
index b5875e5..e312a62 100644 (file)
        "anoncontribs": "贡献",
        "contribsub2": "{{GENDER:$3|$1}}个贡献($2)",
        "nocontribs": "朆寻着符合伊点条件个改动。",
-       "uctop": "(此垡)",
+       "uctop": "此垡",
        "month": "从箇月往前:",
        "year": "从箇年往前:",
        "sp-contributions-newbies": "只显示新用户个贡献",
        "redirect-file": "文件名",
        "specialpages": "特别页面",
        "tag-filter": "[[Special:Tags|标签]]过滤器:",
-       "tag-list-wrapper": "([[Special:Tags|$1个标签]]:$2)",
+       "tag-list-wrapper": "[[Special:Tags|$1个标签]]:$2",
        "tags-active-yes": "好",
        "tags-active-no": "弗",
        "tags-hitcount": "$1趟改动",
index fa49d4f..afb72b1 100644 (file)
        "contributions-title": "$1 демнчна тус",
        "mycontris": "Тәвц",
        "contribsub2": "{{GENDER:$3|$1}} тәвц ($2)",
-       "uctop": "(отхн)",
+       "uctop": "отхн",
        "month": "Эн сарас (болн эртәр):",
        "year": "Эн җиләс (болн эртәр):",
        "sp-contributions-newbies": "Шин бичгдлһтә кесн демнлһн һанцхн үзүлх",
        "blankpage": "Хоосн халх",
        "intentionallyblankpage": "Тер  халх хоосн күслтә бәәнә.",
        "tag-filter": "[[Special:Tags|Царадын]] шүр:",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Царан|Царад}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Царан|Царад}}]]: $2",
        "htmlform-reset": "Сольлһиг уга кех",
        "htmlform-selectorother-other": "Талдан",
        "logentry-newusers-create": "$1 демнәчин бичгдлһн бүтәгдв",
index c891977..04a5cb5 100644 (file)
        "mycontris": "ჩქიმ მიშნაღელ თია",
        "anoncontribs": "მიშნაღელი თიეფი",
        "contribsub2": "$1 ($2) შენი",
-       "uctop": "(დუდ)",
+       "uctop": "დუდ",
        "month": "ათე თუთაშე (დო უადრაშე):",
        "year": "ათე წანაშე (დო უადრაშე):",
        "sp-contributions-newbies": "ქოძირით ხვალე ახალ მახვარებუეფიშ მიშაღალირ თიეფ",
        "tags": "ცვლილებათა მოქმედი მონიშვნები",
        "tag-filter": "[[Special:Tags|ხინტკეფიშ]] ტკიბირი:",
        "tag-filter-submit": "ტკიბირეფი",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|იარლიყი|იარლიყები}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|იარლიყი|იარლიყები}}]]: $2",
        "tags-title": "მონიშვნები",
        "tags-intro": "ამ გვერდზე წარმოდგენილია მონიშვნათა სია, რომლითაც პროგრამული უზრუნველყოფა მონიშნავს შესწორებებს, ასევე ამ მონიშვნათა მნიშვნელობა.",
        "tags-tag": "ტეგის სახელი",
        "dberr-again": "ეცადეთ რამდენიმე წუთით დაცდა და ამ გვერდის გადატვირთვა.",
        "dberr-info": "(მონაცემთა ბაზებთან კავშირი არ არის: $1)",
        "dberr-info-hidden": "(მონაცემთა ბაზებთან კავშირი არ არის)",
-       "dberr-usegoogle": "ამ დროს კი შეგიძლიათ Google-ით ძიება.",
-       "dberr-outofdate": "გაითვალისწინეთ, რომ თქვენი კონტენტის ინდექსები შეიძლება შეუსაბამო იყოს.",
-       "dberr-cachederror": "ეს არის მოთხოვნილი გვერდის კეშირებული ვერსია, და შესაძლება მოძველდა.",
        "htmlform-invalid-input": "თქვენ მიერ შეყვანილი ინფორმაციის ნაწილმა გამოიწვია პრობლემები.",
        "htmlform-select-badoption": "თქვენ მიერ მითითებული მნიშვნელობა მიუღებელია.",
        "htmlform-int-invalid": "თქვენ მიერ მითითებული მნიშვნელობა არ არის მთელი რიცხვი.",
index f4d1e47..9e9ac4a 100644 (file)
        "recentchanges-legend": "ברירות פאר לעצטע ענדערונגען",
        "recentchanges-summary": "גיי נאך די לעצטע ענדערונגען צו דער וויקי אויף דעם בלאט.",
        "recentchanges-noresult": "קיין ענדערונגען ווערנט דער דאזיקער תקופה זענען צוגעפאסט צו די קריטעריע.",
+       "recentchanges-network": "צוליב א טעכנישן פֿעלער האט מען נישט געקאנט לאדן קיין ארויסקומען. זייט אזוי גוט און פרובירט דערפֿרישן דעם בלאט.",
        "recentchanges-feed-description": "גייט נאך די לעצטע ענדערונגען צו דער וויקי אין דעם בלאט.",
        "recentchanges-label-newpage": "די רעדאַקטירונג האט באשאפֿן א נײַעם בלאַט",
        "recentchanges-label-minor": "דאָס איז אַ מינערדיקע רעדאַקטירונג",
        "prefixindex": "פּרעפֿיקס אינדעקס",
        "prefixindex-namespace": "אלע בלעטער מיט פרעפֿיקס ($1 נאמענטייל)",
        "prefixindex-submit": "ווייזן",
-       "prefixindex-strip": "×\90פשנ×\99×\99×\93×\9f ×¤×¨×¢×¤×\99קס ×\90×\99×\9f ×\9c×\99ס×\98×¢",
+       "prefixindex-strip": "×\91×\90×\94×\90×\9c×\98×\9f ×¤×¨×¢×¤Ö¿×\99קס ×\90×\99×\9f ×\90ר×\95×\99סק×\95×\9e×¢×\9f",
        "shortpages": "קורצע בלעטער",
        "longpages": "לאנגע בלעטער",
        "deadendpages": "בלינדע בלעטער",
        "contribsub2": "פֿאַר {{GENDER:$3|$1}} ($2)",
        "contributions-userdoesnotexist": "באניצער קאנטע \"$1\" איז נישט איינגעשריבן.",
        "nocontribs": "נישט געטראפן קיין ענדערונגען צוזאמעגעפאסט מיט די קריטעריעס.",
-       "uctop": "(לויפֿיק)",
+       "uctop": "לויפֿיק",
        "month": "ביז חודש:",
        "year": "ביז יאר:",
        "sp-contributions-newbies": "ווײַזן בײַשטײַערונגען נאר פֿון נײַע באַניצערס",
        "tags": "גילטיקע ענדערונג טאַגן",
        "tag-filter": "[[Special:Tags|מאַרקירונג]] פֿילטער:",
        "tag-filter-submit": "פֿילטער",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|טאַג|טאַגן}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|טאַג|טאַגן}}]]: $2",
        "tag-mw-new-redirect": "נייע ווייטערפֿירונג",
        "tag-mw-changed-redirect-target": "ווייטערפֿירונג־ציל געענדערט",
        "tag-mw-replace": "געטוישט",
        "dberr-problems": "אנטשולדיגט! דער דאזיקער סייט האט טעכנישע פראבלעמען.",
        "dberr-again": "וואַרט א פאָר מינוט און לאָדנט אָן ווידער.",
        "dberr-info": "(קען נישט צוקומען צו דער דאַטנבאַזע: $1)",
-       "dberr-usegoogle": "אינצווישנצײַט קענט איר פרובירן זוכן דורך גוגל.",
-       "dberr-outofdate": "גיט אַכט אַז זײַערע אינדעקסן פֿון אונזער אינהאַלט איז מעגלעך פֿאַרעלטערט.",
-       "dberr-cachederror": "דאָס איז אַן אײַנגעשפייכלערט קאפיע פֿון  דעם געפֿאדערטן בלאַט, און קען זײַן פֿאַרעלטערט.",
        "htmlform-invalid-input": "עס זענען פֿאַראַן פּראָבלעמען מיט א טייל פון ​​אייער אַרייַנוואַרג",
        "htmlform-select-badoption": "דער ווערט וואַס איר האט ספּעציפֿיצירט איז נישט קיין גילטיקע אָפּציע.",
        "htmlform-int-invalid": "דער ווערט וואָס איר האט ספעציפֿירט איז נישט קיין גאַנצצאָל.",
index cda22a2..2f7c6ee 100644 (file)
        "contribsub2": "Fún {{GENDER:$3|$1}} ($2)",
        "contributions-userdoesnotexist": "Oníṣẹ́ yìí \"$1\" kò forúkọ sílẹ̀",
        "nocontribs": "Kò sí àtúnṣe tuntun tó bá àwárí mu.",
-       "uctop": "(lówọ́)",
+       "uctop": "lówọ́",
        "month": "Láti osù (àti sẹ́yìn):",
        "year": "Láti ọdún (àti sẹ́yìn):",
        "sp-contributions-newbies": "Àfihàn àwọn àfikún àwọn àpamọ́ tuntun nìkan",
        "tags": "Àwọn àlẹ̀mọ́ tuntun gidi",
        "tag-filter": "Ajọ̀ [[Special:Tags|àlẹ́mọ́]]:",
        "tag-filter-submit": "Ajọ̀",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Àlẹ̀mọ́|Àwọn àlẹ̀mọ́}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Àlẹ̀mọ́|Àwọn àlẹ̀mọ́}}]]: $2",
        "tags-title": "Àwọn àlẹ̀mọ́",
        "tags-intro": "Ojúewé yìí ṣe àtòjọ àwọn àlẹ̀mọ́ tí atọ́nà kọ̀mpútà le ṣe àmì àtúnṣe pẹ̀lú, àti ìtumọ̀ wọn.",
        "tags-tag": "Orúkọ àlẹ́mọ́",
        "dberr-problems": "Àforìjì! Ibiìtakùn yìí únkojú ìsòro ìṣìṣẹ́ẹ̀rọ.",
        "dberr-again": "Ẹ mú sùúrù fún ìṣẹ́jú díẹ̀ kí ẹ tó tún ṣe ìrùsókè.",
        "dberr-info": "(Kò le farakan ẹ̀rọ-ìpèsè ibùdó dátà: $1)",
-       "dberr-usegoogle": "Ẹ le ṣàwárí lórí Google báyìí ná.",
-       "dberr-outofdate": "Ẹ mọ̀ pé atọ́ka wọn fún àkóónú wa le mọ́ jẹ́ tuntun.",
-       "dberr-cachederror": "Àwòkọ ojúewé tí ẹ tọrọ nìyí láti cache, ó le mọ́ jẹ́ tuntun.",
        "htmlform-invalid-input": "Díẹ̀ nínú ìtẹ̀kọsínú yín ní ìsòro",
        "htmlform-select-badoption": "Iye tí ẹ tọ́kasí kì í ṣe àṣàyàn tótọ́.",
        "htmlform-int-invalid": "Iye tí ẹ tọ́kasí kì í ṣe nọ́mbà odidi.",
index 0e16196..75be32d 100644 (file)
@@ -39,7 +39,7 @@
                ]
        },
        "tog-underline": "連結加底線:",
-       "tog-hideminor": "最新更改唔顯示細修改",
+       "tog-hideminor": "最近修改收埋細修改",
        "tog-hidepatrolled": "響最近修改度隱藏巡查過嘅編輯",
        "tog-newpageshidepatrolled": "響新頁清單度隱藏巡查過嘅版",
        "tog-hidecategorization": "隱藏頁面分類",
        "mainpage": "頭版",
        "mainpage-description": "頭版",
        "policy-url": "Project:政策",
-       "portal": "社區大堂",
-       "portal-url": "Project:社區大堂",
+       "portal": "城市論壇",
+       "portal-url": "Project:城市論壇",
        "privacy": "私隱政策",
        "privacypage": "Project:私隱政策",
        "badaccess": "權限錯誤",
        "badarticleerror": "喺呢頁唔可以做呢個動作。",
        "cannotdelete": "頁或檔案 \"$1\" 唔刪得。\n可能已經畀另一位刪咗。",
        "cannotdelete-title": "刪唔到 \"$1\"",
+       "delete-scheduled": "呢版「$1」排咗期拎去刪。請稍候。",
        "delete-hook-aborted": "編輯由鈎取消咗。\n佢無畀到解釋。",
        "no-null-revision": "唔可以對 \"$1\" 開個新嘅空白修改",
        "badtitle": "錯嘅標題",
        "moveddeleted-notice-recent": "唔好意思,呢版啱啱刪走咗(最近24個鐘內)。\n呢版嘅刪版、搬版同保護紀錄喺下低做參考。",
        "log-fulllog": "睇成個日誌",
        "edit-hook-aborted": "編輯由鈎取消咗。\n佢無畀到解釋。",
-       "edit-gone-missing": "唔能夠更新頁。\n佢可能啱啱刪除咗。",
+       "edit-gone-missing": "更新唔到呢版。\n睇來係啱啱剷咗。",
        "edit-conflict": "編輯衝突。",
        "edit-no-change": "你嘅編輯已經略過,因為文字無改過。",
        "postedit-confirmation-created": "呢版經已開咗。",
        "diff-multi-otherusers": "(無顯示{{PLURAL:$2|另一個用戶|另外$2個用戶}}中途改嘅 $1 個版本)",
        "diff-multi-manyusers": "(由$2位更多用戶所做嘅$1個中途修訂冇顯示到)",
        "searchresults": "搵嘢結果",
+       "search-filter-title-prefix": "只喺標題係「$1」開頭嘅版度搜索",
        "search-filter-title-prefix-reset": "搵嘥所有版",
        "searchresults-title": "對\"$1\"嘅搵嘢結果",
        "titlematches": "頁面標題符合",
        "timezoneregion-indian": "印度洋",
        "timezoneregion-pacific": "太平洋",
        "allowemail": "允許其它用戶發電子郵件俾我",
+       "email-allow-new-users-label": "接收新簇簇用戶發嘅電郵",
+       "email-blacklist-label": "禁止呢啲用戶發電郵畀我:",
        "prefs-searchoptions": "搵嘢",
        "prefs-namespaces": "空間名",
        "default": "預設",
        "recentchanges-legend": "最近更改選項",
        "recentchanges-summary": "追蹤對哩一個 wiki 嘅最後更改。",
        "recentchanges-noresult": "喺指定時段無符合呢啲條件嘅改動。",
+       "recentchanges-timeout": "呢勻搜索超時。你不妨試下唔同嘅搜索參數。",
+       "recentchanges-network": "因為技術出錯,冇結果載入到。請試下刷新呢版。",
        "recentchanges-feed-description": "追蹤對哩一個 wiki 度呢個集合嘅最後更改。",
        "recentchanges-label-newpage": "呢次編輯開咗一個新版",
        "recentchanges-label-minor": "呢個係一個細編輯",
        "recentchangeslinked-to": "顯示連到所畀到嘅版",
        "recentchanges-page-added-to-category": "[[:$1]] 加咗落分類",
        "recentchanges-page-added-to-category-bundled": "[[:$1]] 同另外 [[Special:WhatLinksHere/$1|一版比其他版包含咗]]",
-       "recentchanges-page-removed-from-category": "[[:$1]] 拎走咗分類",
+       "recentchanges-page-removed-from-category": "[[:$1]] 移出呢類",
        "recentchanges-page-removed-from-category-bundled": "$1[[:$1]] 同另外 [[Special:WhatLinksHere/$1|伊一版比其他版包含咗]] 響分類到拎走左",
        "autochange-username": "MediaWiki 自動改動",
        "upload": "上載檔案",
        "unusedtemplates": "未用嘅模",
        "unusedtemplatestext": "呢一頁列示喺{{ns:template}}空間名未包括喺其它頁面嘅全部頁面。請記得喺刪除佢哋之前檢查其它連結到呢個模嘅頁面。",
        "unusedtemplateswlh": "其它連結",
-       "randompage": "隨便一版",
+       "randompage": "是但一版",
        "randompage-nopages": "響下面嘅{{PLURAL:$2|空間名}}度搵唔到一版: $1",
        "randomincategory": "類入面是但一版",
        "randomincategory-invalidcategory": "「$1」唔係有效嘅類名。",
        "booksources-text": "以下嘅連結清單列出其它一啲賣新書同二手書嘅網站,可能可以提供到有關你想搵嘅書嘅更多資料:",
        "booksources-invalid-isbn": "個ISBN無效;請檢查原來源複製落來嘅錯。",
        "specialloguserlabel": "執行人:",
-       "speciallogtitlelabel": "目標(é¡\8cç\9b®æ\88\96è\80\85ç\94¨æ\88¶ {{ns:user}}:ç\94¨æ\88¶å\90\8d ï¼\89ï¼\9a",
+       "speciallogtitlelabel": "目標(å\85¥æ¨\99é¡\8cæ\88\96è\80\85ç\94¨æ\88¶ã\80\8c{{ns:user}}:ç\94¨æ\88¶å\90\8dã\80\8d ï¼\89ï¼\9a",
        "log": "日誌",
        "logeventslist-submit": "顯示",
        "logeventslist-patrol-log": "巡查日誌",
        "delete-toobig": "呢一版有一個好大量嘅編輯歷史,過咗$1次修訂。刪除呢類版嘅動作已經限制咗,以防止響{{SITENAME}}嘅意外擾亂。",
        "delete-warning-toobig": "呢一版有一個好大量嘅編輯歷史,過咗$1次修訂。刪除佢可能會擾亂{{SITENAME}}嘅資料庫操作;響繼續嗰陣請小心。",
        "deleteprotected": "你唔可以刪呢版,因為佢畀人保護咗。",
-       "deleting-backlinks-warning": "'''警告:'''你所鏈到或轉到嘅[[Special:WhatLinksHere/{{FULLPAGENAME}}|其它頁面]]已經俾人話刪。",
+       "deleting-backlinks-warning": "<strong>警告:</strong>你準備刪嘅呢版有[[Special:WhatLinksHere/{{FULLPAGENAME}}|其他版面]]鏈入或者係包含著。",
        "rollback": "反轉修改",
        "rollbacklink": "反轉",
        "rollbacklinkcount": "反轉 $1 次修改",
        "contribsub2": "{{GENDER:$3|$1}}嘅貢獻 ($2)",
        "contributions-userdoesnotexist": "用戶「$1」未有註冊。",
        "nocontribs": "搵唔到符合呢啲條件嘅修改。",
-       "uctop": "(最新)",
+       "uctop": "最新",
        "month": "由呢個月 (同更早):",
        "year": "由呢一年 (同更早):",
        "date": "開始日期(同更早之前):",
        "version-libraries-library": "圖書館",
        "version-libraries-version": "版本",
        "version-libraries-license": "牌照",
-       "version-libraries-description": "æ\95\98述",
+       "version-libraries-description": "æ\8f\8f述",
        "version-libraries-authors": "作者",
        "redirect": "跟檔案、用戶、版面、修訂或者日誌 ID 去跳轉",
        "redirect-summary": "呢個特別版可以跳轉到一個檔案(指定檔名稱)、一個版面(指定修訂 ID 或版 ID)、一個用戶版(指定用戶 ID)或者一個日誌項目(指定日誌 ID)。用法:[[{{#Special:Redirect}}/file/Example.jpg]]、[[{{#Special:Redirect}}/page/64308]]、[[{{#Special:Redirect}}/revision/328429]]、[[{{#Special:Redirect}}/user/101]] 或者 [[{{#Special:Redirect}}/logid/186]]。",
        "tags": "有效更改過嘅標籤",
        "tag-filter": "[[Special:Tags|標籤]]過濾器:",
        "tag-filter-submit": "過濾器",
-       "tag-list-wrapper": "([[Special:Tags|$1個標籤]]:$2)",
+       "tag-list-wrapper": "[[Special:Tags|$1個標籤]]:$2",
        "tag-mw-new-redirect": "新跳轉",
        "tag-mw-removed-redirect": "剷走跳轉",
        "tag-mw-blank": "清空",
        "tags-source-none": "唔再用",
        "tags-edit": "編輯",
        "tags-delete": "刪除",
-       "tags-activate": "激活",
+       "tags-activate": "啟動",
        "tags-deactivate": "停用",
        "tags-hitcount": "$1次更改",
        "tags-create-reason": "原因:",
        "dberr-problems": "對唔住!呢一版出現咗一啲技術性問題。",
        "dberr-again": "試吓等多幾分種然後開試。",
        "dberr-info": "(唔能夠連繫個資料庫:$1)",
-       "dberr-usegoogle": "響現階段你可以用 Google 去搵嘢。",
-       "dberr-outofdate": "留意佢哋索引嘅內容可能會過時。",
-       "dberr-cachederror": "呢個係所要求版嘅快取複本,可能會過時。",
        "htmlform-invalid-input": "響你嘅輸入度有一啲問題",
        "htmlform-select-badoption": "你所指定嘅值唔係一個有效嘅選項。",
        "htmlform-int-invalid": "你所指定嘅值唔係一個整數。",
        "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 (<strong>唔可以用</strong>)",
        "mediastatistics": "媒體統計",
        "mediastatistics-table-mimetype": "MIME類型",
-       "mediastatistics-table-extensions": "可能嘅格式",
+       "mediastatistics-table-extensions": "可以用嘅副檔名",
        "mediastatistics-table-count": "檔案數",
-       "mediastatistics-table-totalbytes": "結合嘥士",
+       "mediastatistics-table-totalbytes": "夾埋嘅大細",
        "mediastatistics-header-unknown": "唔知",
        "mediastatistics-header-bitmap": "點陣圖",
        "mediastatistics-header-drawing": "向量圖",
        "json-error-syntax": "語法錯咗",
        "json-error-utf8": "字符引導失敗,因為有非法UTF-8代碼。",
        "headline-anchor-title": "連結到呢一節",
-       "special-characters-group-latin": "拉丁",
-       "special-characters-group-latinextended": "Latin擴展左",
+       "special-characters-group-latin": "拉丁字母擴展",
+       "special-characters-group-latinextended": "拉丁字母擴展",
        "special-characters-group-ipa": "IPA",
        "special-characters-group-symbols": "符號",
        "special-characters-group-greek": "希臘文",
        "mw-widgets-abandonedit-discard": "放棄修改",
        "mw-widgets-abandonedit-keep": "繼續改",
        "mw-widgets-abandonedit-title": "你肯定?",
-       "mw-widgets-titleinput-description-new-page": "å\86\87å\91¢é \81",
+       "mw-widgets-titleinput-description-new-page": "å\91¢ç\89\88æ\9cªé\96\8b",
        "mw-widgets-titleinput-description-redirect": "跳轉到$1",
        "mw-widgets-usersmultiselect-placeholder": "加多啲...",
        "date-range-from": "開始日子:",
index 3ee0aa8..0a18cd8 100644 (file)
        "contributions-title": "Biedraen van $1",
        "mycontris": "Biedraegen",
        "contribsub2": "Vò $1 ($2)",
-       "uctop": "(laetste wiezigieng)",
+       "uctop": "laetste wiezigieng",
        "month": "Von maend (en eêder):",
        "year": "Von jaer (en eêder):",
        "sp-contributions-newbies": "Alleên de biedraen von nuwe hebrukers bekiek'n",
index 403ebbc..ed24a8b 100644 (file)
        "anoncontribs": "ⵜⵓⵎⵓⵜⵉⵏ",
        "contribsub2": "ⵉ {{GENDER:$3|$1}} ($2)",
        "nocontribs": "ⴰⵡⴷ ⵢⴰⵏ ⵓⵙⵏⴼⵍ ⵉⵎⵙⴰⵙⴰⵏ ⴷ ⵉⵙⴼⵔⴰⵏⴻⵏ ⴰⴷ ⵓⵔ ⵉⵜⵜⵢⴰⴼⴰ.",
-       "uctop": "(ⴰⵎⵉⵔⴰⵏ)",
+       "uctop": "ⴰⵎⵉⵔⴰⵏ",
        "month": "ⵙⴳ ⵡⴰⵢⵢⵓⵔ (and earlier):",
        "year": "ⵙⴳ ⵓⵙⴳⴳⵯⴰⵙ (and earlier):",
        "sp-contributions-newbies": "ⵙⴽⵏ ⵜⵓⵎⵓⵜⵉⵏ ⵏ ⵉⵎⵉⴹⴰⵏ ⵉⵎⴰⵢⵏⵓⵜⵏ ⴽⴰⵏ",
        "specialpages": "ⵜⴰⵙⵏⵉⵡⵉⵏ ⵥⵍⵉⵏⵉⵏ",
        "specialpages-group-pagetools": "ⵉⵎⴰⵙⵙⵏ ⵏ ⵜⴰⵙⵏⴰ",
        "tag-filter": "ⵙⵜⵉ [[Special:Tags|ⵉⵔⵛⵓⵎⵏ]]:",
-       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|ⴰⵔⵛⵓⵎ|ⵉⵔⵛⵓⵎⵏ}}]]: $2)",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|ⴰⵔⵛⵓⵎ|ⵉⵔⵛⵓⵎⵏ}}]]: $2",
        "tags-active-yes": "ⵢⴰⵀ",
        "tags-active-no": "ⵓⵀⵓ",
        "tags-edit": "ⵙⵏⴼⵍ",
index a6f0e96..fd9c061 100644 (file)
                        "Dcljr",
                        "Phenolla",
                        "Hello903hello",
-                       "A Chinese Wikipedian"
+                       "A Chinese Wikipedian",
+                       "Angrydog001"
                ]
        },
        "tog-underline": "链接下划线:",
        "subject-preview": "主题的预览:",
        "previewerrortext": "尝试预览您的更改时发生错误。",
        "blockedtitle": "用户被封禁",
+       "blocked-email-user": "<strong>您的用户名或IP地址已被禁止更改此页面,但您仍可在此wiki上编辑其它页面。</strong>您可以在[[Special:MyContributions|帐号贡献]]查看完整的封禁详情。\n\n封禁是由$1所执行。\n\n原因出自<em>$2</em>。\n\n*封禁开始时间:$8\n*封禁结束时间:$6\n*防止行为:$7\n*封禁 ID #$5",
+       "blockedtext-partial": "<strong>您的用户名或IP地址已被禁止更改此页面,但您仍可在此wiki上编辑其它页面。</strong>您可以在[[Special:MyContributions|帐号贡献]]查看完整的封禁详情。\n\n封禁是由$1所执行。\n\n原因出自<em>$2</em>。\n\n*封禁开始时间:$8\n*封禁结束时间:$6\n*防止行为:$7\n*封禁 ID #$5",
        "blockedtext": "<strong>您的用户名或IP地址已被封禁。</strong>\n\n执行封禁的管理员是$1。封禁原因是<em>$2</em>。\n\n* 开始时间:$8\n* 到期时间:$6\n* 目标用户:$7\n\n您可以联络$1或其他[[{{MediaWiki:Grouppage-sysop}}|管理员]]讨论该封禁。只有当您在[[Special:Preferences|系统设置]]确认了电子邮件地址且未被禁止使用“{{int:emailuser}}”功能时,才可以使用它。您当前的IP地址是$3,该封禁ID是#$5。请在您做出的任何查询中包含所有上述详情。",
        "autoblockedtext": "您的IP地址因曾被一位被$1封禁的用户使用而被自动封禁。封禁原因:\n\n:<em>$2</em>\n\n* 开始时间:$8\n* 到期时间:$6\n* 目标用户:$7\n\n您可以联系$1或其他[[{{MediaWiki:Grouppage-sysop}}|管理员]]申诉该封禁。\n\n请注意,只有当您已在[[Special:Preferences|系统设置]]确认了电子邮件地址且未被禁止使用“{{int:emailuser}}”功能时,才能发送电子邮件联系管理员。\n\n您当前的IP地址为$3,该封禁ID为#$5。请在您做出的任何查询中包含所有上述详情。",
        "systemblockedtext": "您的用户名或IP地址已被MediaWiki自动封禁。封禁原因:\n\n:<em>$2</em>\n\n* 开始时间:$8\n* 到期时间:$6\n* 目标用户:$7\n\n您当前的IP地址是$3。请在您做出的任何查询中包含所有上述详情。",
        "timezonelegend": "时区:",
        "localtime": "当地时间:",
        "timezoneuseserverdefault": "使用wiki默认值($1)",
-       "timezoneuseoffset": "其(指定时差)",
+       "timezoneuseoffset": "其(指定时差)",
        "servertime": "服务器时间:",
        "guesstimezone": "使用浏览器设置",
        "timezoneregion-africa": "非洲",
        "prefs-editor": "编辑",
        "prefs-preview": "预览",
        "prefs-advancedrc": "高级选项",
-       "prefs-opt-out": "关闭改进功能",
        "prefs-advancedrendering": "高级选项",
        "prefs-advancedsearchoptions": "高级选项",
        "prefs-advancedwatchlist": "高级选项",
        "prefs-displayrc": "显示",
        "prefs-displaywatchlist": "显示",
+       "prefs-changesrc": "显示差异",
+       "prefs-changeswatchlist": "显示差异",
+       "prefs-pageswatchlist": "监视列表中的页面",
        "prefs-tokenwatchlist": "令牌",
        "prefs-diffs": "差异对比",
        "prefs-help-prefershttps": "该设置将在下次登录时生效。",
        "contribsub2": "{{GENDER:$3|$1}}的贡献($2)",
        "contributions-userdoesnotexist": "用户“$1”尚未注册。",
        "nocontribs": "没有找到匹配这些规则的更改。",
-       "uctop": "(当前)",
+       "uctop": "当前",
        "month": "截止月份:",
        "year": "截止年份:",
        "date": "起始日期(及更早):",
        "move-page": "移动$1",
        "move-page-legend": "移动页面",
        "movepagetext": "您可以使用下面的表单来重命名一个页面,同时将其所有版本历史移动到新页面。旧标题将会被重定向到新标题。您可以自动更新链接至原标题的重定向。如果您不选择这样做的话,请检查[[Special:DoubleRedirects|双重]]或[[Special:BrokenRedirects|损坏重定向]]链接。您有责任确保链接会被正确指向他们应该被指向的地方。\n\n注意:如果已存在使用新标题的页面,此页面将<strong>不会</strong>被移动,除非新页面是重定向,并且没有过去的编辑历史。这意味着您可在误操作后将页面移回原处,同时,您无法覆盖现有页面。\n\n<strong>注意:</strong>对这样一个经常被访问的页面而言这可能是一个重大且唐突的更改;请在行动前先了解您的修改可能带来的一切后果。",
-       "movepagetext-noredirectfixer": "ç\94¨ä¸\8bé\9d¢ç\9a\84表å\8d\95æ\9d¥é\87\8då\91½å\90\8dä¸\80个页é\9d¢ï¼\8c并å°\86å\85¶ç\89\88æ\9c¬å\8e\86å\8f²å\90\8cæ\97¶ç§»å\8a¨å\88°æ\96°é¡µé\9d¢ã\80\82è\80\81ç\9a\84页é\9d¢å°\86æ\88\90为æ\96°é¡µé\9d¢ç\9a\84é\87\8då®\9aå\90\91页ã\80\82请æ£\80æ\9f¥[[Special:DoubleRedirects|å\8f\8cé\87\8dé\87\8då®\9aå\90\91]]æ\88\96[[Special:BrokenRedirects|æ\8d\9få\9d\8fé\87\8då®\9aå\90\91]]é\93¾æ\8e¥ã\80\82æ\82¨åº\94å½\93è´\9f责确å®\9aæ\89\80æ\9c\89é\93¾æ\8e¥ä¾\9dç\84¶ä¼\9aé\93¾å\88°æ\8c\87å®\9aç\9a\84页é\9d¢ã\80\82\n\n注æ\84\8få¦\82æ\9e\9cæ\96°é¡µé\9d¢å·²ç»\8fæ\9c\89å\86\85容ç\9a\84è¯\9dï¼\8c页é\9d¢å°\86<strong>ä¸\8dä¼\9a</strong>被移å\8a¨ï¼\8cé\99¤é\9d\9eæ\96°é¡µé\9d¢æ\97 å\86\85容æ\88\96æ\98¯é\87\8då®\9aå\90\91页ï¼\8cè\80\8cä¸\94没æ\9c\89ç\89\88æ\9c¬å\8e\86å\8f²ã\80\82è¿\99æ\84\8få\91³ç\9d\80æ\82¨å\86\8då¿\85è¦\81æ\97¶å\8f¯ä»¥å\9c¨ç§»å\8a¨å\88°æ\96°é¡µé\9d¢å\90\8eå\86\8d移å\9b\9eè\80\81ç\9a\84页é\9d¢ï¼\8cå\90\8cæ\97¶æ\82¨ä¹\9fæ\97 æ³\95è¦\86ç\9b\96ç\8e°æ\9c\89页é\9d¢ã\80\82\n\n<strong>注æ\84\8fï¼\9a</strong>对ä¸\80个ç»\8f常被访é\97®ç\9a\84页é\9d¢è\80\8cè¨\80è¿\99å\8f¯è\83½æ\98¯ä¸\80个é\87\8d大ä¸\8e唐突的更改;请在行动前先确定您了解其所可能带来的后果。",
+       "movepagetext-noredirectfixer": "ç\94¨ä¸\8bé\9d¢ç\9a\84表å\8d\95æ\9d¥é\87\8då\91½å\90\8dä¸\80个页é\9d¢ï¼\8c并å°\86å\85¶ç\89\88æ\9c¬å\8e\86å\8f²å\90\8cæ\97¶ç§»å\8a¨å\88°æ\96°é¡µé\9d¢ã\80\82è\80\81ç\9a\84页é\9d¢å°\86æ\88\90为æ\96°é¡µé\9d¢ç\9a\84é\87\8då®\9aå\90\91页ã\80\82请æ£\80æ\9f¥[[Special:DoubleRedirects|å\8f\8cé\87\8dé\87\8då®\9aå\90\91]]æ\88\96[[Special:BrokenRedirects|æ\8d\9få\9d\8fé\87\8då®\9aå\90\91]]é\93¾æ\8e¥ã\80\82æ\82¨åº\94å½\93è´\9f责确å®\9aæ\89\80æ\9c\89é\93¾æ\8e¥ä¾\9dç\84¶ä¼\9aé\93¾å\88°æ\8c\87å®\9aç\9a\84页é\9d¢ã\80\82\n\n注æ\84\8få¦\82æ\9e\9cæ\96°é¡µé\9d¢å·²ç»\8fæ\9c\89å\86\85容ç\9a\84è¯\9dï¼\8c页é\9d¢å°\86<strong>ä¸\8dä¼\9a</strong>被移å\8a¨ï¼\8cé\99¤é\9d\9eæ\96°é¡µé\9d¢æ\97 å\86\85容æ\88\96æ\98¯é\87\8då®\9aå\90\91页ï¼\8cè\80\8cä¸\94没æ\9c\89ç\89\88æ\9c¬å\8e\86å\8f²ã\80\82è¿\99æ\84\8få\91³ç\9d\80æ\82¨å\8f¯å\9c¨è¯¯æ\93\8dä½\9cå\90\8eå°\86页é\9d¢ç§»å\9b\9eå\8e\9få¤\84ï¼\8cå\90\8cæ\97¶ï¼\8cæ\82¨æ\97 æ³\95è¦\86ç\9b\96ç\8e°æ\9c\89页é\9d¢ã\80\82\n\n<strong>注æ\84\8fï¼\9a</strong>对ä¸\80个ç»\8f常被访é\97®ç\9a\84页é\9d¢è\80\8cè¨\80è¿\99å\8f¯è\83½æ\98¯ä¸\80个é\87\8d大ä¸\94唐突的更改;请在行动前先确定您了解其所可能带来的后果。",
        "movepagetalktext": "如果您勾选此框,相关联的讨论页将被自动移动到新的标题,除非这里已经有了一个非空讨论页。\n\n在这种情况下,如有需要,您将不得不手动移动或合并页面。",
        "moveuserpage-warning": "'''警告:'''你将移动一个用户页面。请注意,只有该页面会被移动,该用户''不''会被更名。",
        "movecategorypage-warning": "<strong>警告:</strong>您将移动分类页面。请注意只有此页面将会移动,旧有分类的任何页面将<em>不会</em>同步移动。",
        "word-separator": "",
        "ellipsis": "…",
        "parentheses": "($1)",
+       "parentheses-start": "(",
+       "parentheses-end": ")",
        "quotation-marks": "“$1”",
        "imgmultipageprev": "← 上一页",
        "imgmultipagenext": "下一页 →",
        "tags": "有效的更改标签",
        "tag-filter": "[[Special:Tags|标签]]过滤器:",
        "tag-filter-submit": "过滤器",
-       "tag-list-wrapper": "([[Special:Tags|$1个标签]]:$2)",
+       "tag-list-wrapper": "[[Special:Tags|$1个标签]]:$2",
        "tag-mw-contentmodelchange": "内容模型更改",
        "tag-mw-contentmodelchange-description": "更改页面[https://www.mediawiki.org/wiki/Special:MyLanguage/Help:ChangeContentModel 内容模型]的编辑",
        "tag-mw-new-redirect": "新重定向",
        "dberr-again": "请等待几分钟后重试。",
        "dberr-info": "(无法访问数据库:$1)",
        "dberr-info-hidden": "(无法访问数据库)",
-       "dberr-usegoogle": "在此期间您可以尝试用 Google 来搜索。",
-       "dberr-outofdate": "须注意其索引出来的内容可能不是最新的。",
-       "dberr-cachederror": "这是所请求页面的缓存副本,可能不是最新的。",
        "htmlform-invalid-input": "您输入的内容存在问题",
        "htmlform-select-badoption": "您指定的值不是有效选项。",
        "htmlform-int-invalid": "您指定的值不是整数。",
        "mw-widgets-abandonedit": "您确定要在不保存的情况下离开编辑模式么?",
        "mw-widgets-abandonedit-discard": "撤销编辑",
        "mw-widgets-abandonedit-keep": "继续编辑",
-       "mw-widgets-abandonedit-title": "您确定?",
+       "mw-widgets-abandonedit-title": "您确定?",
        "mw-widgets-dateinput-no-date": "没有选定日期",
        "mw-widgets-mediasearch-input-placeholder": "搜索媒体",
        "mw-widgets-mediasearch-noresults": "找不到结果。",
        "mw-widgets-titleinput-description-redirect": "重定向至$1",
        "mw-widgets-categoryselector-add-category-placeholder": "添加分类...",
        "mw-widgets-usersmultiselect-placeholder": "添加更多...",
+       "mw-widgets-titlesmultiselect-placeholder": "添加更多...",
        "date-range-from": "起始日:",
        "date-range-to": "截止日:",
        "sessionmanager-tie": "不能结合多个请求的身份验证类型:$1。",
index 2a157e3..98dd283 100644 (file)
        "permalink": "靜態連結",
        "print": "列印",
        "view": "檢視",
-       "view-foreign": "在 $1 檢視",
+       "view-foreign": "在$1檢視",
        "edit": "編輯",
        "edit-local": "編輯本地描述",
        "create": "建立",
        "passwordtooshort": "您的密碼至少需要 $1 個字元。",
        "passwordtoolong": "密碼不能超過 {{PLURAL:$1|1 個字元|$1 個字元}}。",
        "passwordtoopopular": "不能使用普遍選擇的密碼。請選擇更難猜出的密碼",
+       "passwordinlargeblacklist": "所輸入密碼被列在常用密碼的清單裡,請改用較獨特的密碼。",
        "password-name-match": "您的密碼不可以跟使用者名稱相同。",
        "password-login-forbidden": "此使用者名稱和密碼已被禁止使用。",
        "mailmypassword": "重設密碼",
        "botpasswords-updated-body": "給{{GENDER:$2|使用者}}「$2」的機器人「$1」的機器人密碼已更新。",
        "botpasswords-deleted-title": "已刪除機器人密碼",
        "botpasswords-deleted-body": "給{{GENDER:$2|使用者}}「$2」的機器人「$1」的機器人密碼已刪除。",
-       "botpasswords-newpassword": "用來登入 <strong>$1</strong> 的新密碼為 <strong>$2</strong>。 <em>請記錄此密碼以供未來參考使用。</em> <br> (較舊的機器人的登入名稱需與最終使用者名稱相同,您也可使用 <strong>$3</strong> 做為使用者名稱 <strong>$4</strong> 做為密碼。)",
+       "botpasswords-newpassword": "用來登入<strong>$1</strong>的新密碼為<strong>$2</strong>。<em>請記錄此密碼以供未來參考使用。</em><br>(較舊的機器人的登入名稱需與最終使用者名稱相同,您也可使用<strong>$3</strong>做為使用者名稱,<strong>$4</strong>做為密碼。)",
        "botpasswords-no-provider": "BotPasswordsSessionProvider 無法使用。",
        "botpasswords-restriction-failed": "機器人密碼限制已拒絕此次登入。",
        "botpasswords-invalid-name": "指定的使用者名稱未包含機器人密碼分隔字元 (\"$1\")。",
        "explainconflict": "在您開始編輯之後已有其他人儲存了此頁面。\n上方的文字框內顯示了目前頁面中的文字內容,\n您所變更的文字內容顯示在下方文字框中。\n您須要將您所變更的文字內容合併到已儲存的文字內容當中。\n若您直接點選 \"$1\" <strong>只有</strong> 上方文字框中的內容會被儲存。",
        "yourtext": "您的文字",
        "storedversion": "已儲存修訂",
-       "editingold": "<strong>警告:您目前正編輯頁面的舊修訂版本。</strong>\n若您儲存,在此修訂之後變更的任何內容將會遺失。",
+       "editingold": "<strong>警告:您目前正編輯頁面的舊修訂版本。</strong>若您儲存,在此修訂之後變更的任何內容將會遺失。",
        "unicode-support-fail": "看起來您的瀏覽器不支援Unicode。需要Unicode才能編輯頁面,所以您的編輯無法儲存。",
        "yourdiff": "差異",
        "copyrightwarning": "請注意,所有於 {{SITENAME}} 所做的貢獻會依據 $2 授權條款發佈 (詳情請見 $1)。\n若您不希望您的著作被任意修改與散佈,請勿在此發表文章。<br />\n您同時向我們保証在此的著作內容是您自行撰寫,或是取自不受版權保護的公開領域或自由資源。\n<strong>請勿在未經授權的情況下發表文章!</strong>",
        "last": "前筆",
        "page_first": "第一頁",
        "page_last": "最後頁",
-       "histlegend": "比對選擇的版本差異:選擇要比對修訂版本的單選方塊並點選底部的按鈕進行比對。<br />\n符號說明:<strong>({{int:cur}})</strong> = 與最新的修訂版本比對,<strong>({{int:last}})</strong> = 與前一筆修訂版本比對,<strong>{{int:minoreditletter}}</strong> = 次要修訂。",
+       "histlegend": "比對選擇的版本差異:選擇要比對修訂版本的單選方塊並點選底部的按鈕進行比對。<br />\n符號說明:<strong>({{int:cur}})</strong> = 與最新的修訂版本比對,<strong>({{int:last}})</strong> = 與前一筆修訂版本比對,<strong>{{int:minoreditletter}}</strong> = 次要修訂。",
        "history-fieldset-title": "搜尋修訂",
        "history-show-deleted": "只顯示已刪除的修訂",
        "histfirst": "最舊",
        "timezonelegend": "時區:",
        "localtime": "當地時間:",
        "timezoneuseserverdefault": "使用 Wiki 預設值 ($1)",
-       "timezoneuseoffset": "其他 (指定時差)",
+       "timezoneuseoffset": "其它(以下指定時差)",
+       "timezone-useoffset-placeholder": "範例:\"-07:00\" 或 \"01:00\"",
        "servertime": "伺服器時間:",
        "guesstimezone": "使用瀏覽器設定值",
        "timezoneregion-africa": "非洲",
        "prefs-editor": "編輯器",
        "prefs-preview": "預覽",
        "prefs-advancedrc": "進階選項",
-       "prefs-opt-out": "關閉改進功能",
        "prefs-advancedrendering": "進階選項",
        "prefs-advancedsearchoptions": "進階選項",
        "prefs-advancedwatchlist": "進階選項",
        "prefs-displayrc": "顯示選項",
        "prefs-displaywatchlist": "顯示選項",
+       "prefs-changesrc": "顯示變更",
+       "prefs-changeswatchlist": "顯示變更",
+       "prefs-pageswatchlist": "監視頁面",
        "prefs-tokenwatchlist": "金鑰",
        "prefs-diffs": "差異",
        "prefs-help-prefershttps": "此偏好設定將於您下次登入時生效。",
        "group-interface-admin": "介面管理員",
        "group-bureaucrat": "行政員",
        "group-suppress": "監督員",
-       "group-all": "(全部)",
+       "group-all": "(全部)",
        "group-user-member": "{{GENDER:$1|使用者}}",
        "group-autoconfirmed-member": "自動確認使用者",
        "group-bot-member": "機器人",
        "recentchanges-label-unpatrolled": "該編輯尚未巡查",
        "recentchanges-label-plusminus": "該頁面變更的大小 (位元組)",
        "recentchanges-legend-heading": "<strong>圖例:</strong>",
-       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (請參考[[Special:NewPages|新頁面]])",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}}(請參考[[Special:NewPages|新頁面]])",
        "recentchanges-legend-plusminus": "(<em>±123</em>)",
        "recentchanges-submit": "顯示",
        "rcfilters-tag-remove": "移除「$1」",
        "rcfilters-watchlist-markseen-button": "標記所有變更為已看過",
        "rcfilters-watchlist-edit-watchlist-button": "編輯您的監視頁面列表",
        "rcfilters-watchlist-showupdated": "自更改發生以來,對您尚未訪問的頁面做出的更改以<strong>粗體</strong>顯示,並帶有實心圓形標記。",
-       "rcfilters-preference-label": "隱藏改善的最近變更版本",
-       "rcfilters-preference-help": "è¿\94å\9b\9eå\88° 2017 å¹´ç\9a\84é\87\8dæ\96°è¨­è¨\88ä»\8bé\9d¢ï¼\8c並添å\8a æ­¤å¾\8cç\9a\84æ\89\80æ\9c\89å·¥å\85·。",
-       "rcfilters-watchlist-preference-label": "隱藏監視清單的改善版本",
-       "rcfilters-watchlist-preference-help": "è¿\94å\9b\9eå\88° 2017 å¹´ç\9a\84é\87\8dæ\96°è¨­è¨\88ä»\8bé\9d¢ï¼\8c並添å\8a æ­¤å¾\8cç\9a\84æ\89\80æ\9c\89å·¥å\85·。",
+       "rcfilters-preference-label": "使用非 JavaScript 介面",
+       "rcfilters-preference-help": "è¼\89å\85¥ä¸\8d帶篩é\81¸æ\88\96æ\98\8e顯æ¨\99示å\8a\9fè\83½ç\9a\84ç\9b£è¦\96æ¸\85å\96®。",
+       "rcfilters-watchlist-preference-label": "使用非 JavaScript 介面",
+       "rcfilters-watchlist-preference-help": "è¼\89å\85¥ä¸\8d帶篩é\81¸æ\88\96æ\98\8e顯æ¨\99示å\8a\9fè\83½ç\9a\84ç\9b£è¦\96æ¸\85å\96®。",
        "rcfilters-filter-showlinkedfrom-label": "顯示連結自此頁面的頁面上的變更",
        "rcfilters-filter-showlinkedfrom-option-label": "<strong>連結自</strong>指定頁面的頁面",
        "rcfilters-filter-showlinkedto-label": "顯示連結到該頁面的頁面上的更改",
        "morelinkstoimage": "檢視連結到這個檔案的[[Special:WhatLinksHere/$1|更多連結]]。",
        "linkstoimage-redirect": "$1 (檔案重新導向) $2",
        "duplicatesoffile": "以下 $1 個檔案與此檔案重複 ([[Special:FileDuplicateSearch/$2|瞭解詳細資料]]):",
-       "sharedupload": "此檔案來自 $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 檔案描述頁面]。",
+       "sharedupload": "此檔案來自$1且可能被其他專案所使用。",
+       "sharedupload-desc-there": "此檔案來自$1且可能被其他專案所使用。請參考[$2 檔案描述頁面]瞭解進一步資訊。",
+       "sharedupload-desc-here": "此檔案來自$1且可能被其他專案所使用。下方顯示此檔案於[$2 檔案描述頁面]的描述內容。",
+       "sharedupload-desc-edit": "此檔案來自$1且可能被其他專案所使用。您可在該檔案的[$2 檔案描述頁面]上編輯內容描述。",
+       "sharedupload-desc-create": "此檔案來自$1且可能被其他專案所使用。若您想要編輯內容描述可至[$2 檔案描述頁面]。",
        "filepage-nofile": "不存在此名稱的檔案。",
        "filepage-nofile-link": "不存在此名稱的檔案,您可以 [$1 上傳]。",
        "uploadnewversion-linktext": "上傳此檔案的新版本",
-       "shared-repo-from": "來自 $1",
+       "shared-repo-from": "來自$1",
        "shared-repo": "共用檔案庫",
        "shared-repo-name-wikimediacommons": "維基共享資源",
        "upload-disallowed-here": "無法覆蓋此檔案。",
        "watchnologin": "尚未登入",
        "addwatch": "新增至監視清單",
        "addedwatchtext": "「[[:$1]]」及其討論頁已加入至您的[[Special:Watchlist|監視列表]]中。",
-       "addedwatchtext-talk": "\"[[:$1]]\" 及相關的頁面已加入至您的 [[Special:Watchlist|監視清單]]。",
+       "addedwatchtext-talk": "「[[:$1]]」及相關的頁面已加入至您的[[Special:Watchlist|監視清單]]。",
        "addedwatchtext-short": "已於您的監視清單新增頁面 \"$1\"。",
        "removewatch": "從監視清單中移除",
-       "removedwatchtext": "已於[[Special:Watchlist|您的監視清單]]移除頁面 \"[[:$1]]\" 及其討論頁面。",
-       "removedwatchtext-talk": "已自您的 [[Special:Watchlist|監視清單]] 移除 \"[[:$1]]\" 及相關的頁面。",
+       "removedwatchtext": "已於[[Special:Watchlist|您的監視清單]]移除頁面「[[:$1]]」及其討論頁面。",
+       "removedwatchtext-talk": "已自您的[[Special:Watchlist|監視清單]]移除「[[:$1]]」及相關的頁面。",
        "removedwatchtext-short": "已於您的監視清單移除頁面 \"$1\"。",
        "watch": "監視",
        "watchthispage": "監視此頁面",
        "cantrollback": "無法還原編輯;\n此頁面的最後貢獻者是唯一的作者。",
        "alreadyrolled": "無法還原由 [[User:$2|$2]] ([[User talk:$2|對話]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]] 所作的最後一次編輯 [[:$1]],已有其他人編輯或還原了該頁面。\n\n最後一次編輯該頁面的使用者是 [[User:$3|$3]] ([[User talk:$3|對話]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]])。",
        "editcomment": "編輯摘要為:<em>$1</em>。",
-       "revertpage": "已還原 [[Special:Contributions/$2|$2]] ([[User talk:$2|對話]]) 的編輯為最後由 [[User:$1|$1]] 所修訂的版本",
+       "revertpage": "已還原[[Special:Contributions/$2|$2]]([[User talk:$2|對話]])的編輯為最後由[[User:$1|$1]]所修訂的版本",
        "revertpage-nouser": "已還原隱藏使用者的編輯為最後 {{GENDER:$1|[[User:$1|$1]]}} 修訂的版本",
        "rollback-success": "已還原 {{GENDER:$3|$1}} 所做的編輯;\n變更回由 {{GENDER:$4|$2}} 修訂的最後一個版本。",
        "rollback-success-notify": "已還原 $1 所做的編輯;\n變更回由 $2 修訂的最後一個版本。[$3 顯示變更]",
        "tooltip-namespace_association": "勾選此核選方塊以包含與選擇命名空間相關的對話或主題命名空間",
        "blanknamespace": "(主要)",
        "contributions": "{{GENDER:$1|使用者}}貢獻",
-       "contributions-title": "$1 的使用者貢獻",
+       "contributions-title": "$1的使用者貢獻",
        "mycontris": "貢獻",
        "anoncontribs": "貢獻",
-       "contribsub2": "{{GENDER:$3|$1}} 的貢獻 ($2)",
+       "contribsub2": "{{GENDER:$3|$1}}的貢獻($2)",
        "contributions-userdoesnotexist": "使用者帳號 \"$1\" 尚未註冊。",
        "nocontribs": "沒有找到符合條件的變更。",
-       "uctop": "(目前)",
+       "uctop": "目前",
        "month": "截止月份:",
        "year": "截止年份:",
        "date": "開始日期(更早之前):",
        "whatlinkshere-next": "{{PLURAL:$1|下筆|後 $1 筆}}",
        "whatlinkshere-links": "← 連結",
        "whatlinkshere-hideredirs": "$1重新導向",
-       "whatlinkshere-hidetrans": "$1 引用",
-       "whatlinkshere-hidelinks": "$1 連結",
+       "whatlinkshere-hidetrans": "$1引用",
+       "whatlinkshere-hidelinks": "$1連結",
        "whatlinkshere-hideimages": "$1 檔案連結",
        "whatlinkshere-filters": "篩選",
        "whatlinkshere-submit": "前往",
        "move-watch": "監視來源以及目標頁面",
        "movepagebtn": "移動頁面",
        "pagemovedsub": "已成功移動",
+       "cannotmove": "無法移除頁面,出於以下{{PLURAL:$1|原因|原因}}:",
        "movepage-moved": "<strong>已移動 \"$1\" 至 \"$2\"</strong>",
        "movepage-moved-redirect": "已建立重新導向頁面。",
        "movepage-moved-noredirect": "已取消建立重新導向頁面。",
        "word-separator": "",
        "ellipsis": "…",
        "parentheses": "($1)",
+       "parentheses-start": "(",
+       "parentheses-end": ")",
        "quotation-marks": "\"$1\"",
        "imgmultipageprev": "← 上一頁",
        "imgmultipagenext": "下一頁 →",
        "lag-warn-high": "由於資料庫回應延遲,此清單可能不會顯示最近 $1 {{PLURAL:$1|秒}}內的變更。",
        "watchlistedit-normal-title": "編輯監視清單",
        "watchlistedit-normal-legend": "從監視清單中移除標題",
-       "watchlistedit-normal-explain": "下方顯示在您監視清單中的標題。\n要移除標題,請勾選該標題旁的核選方塊並點選 \"{{int:Watchlistedit-normal-submit}}\"。\n您也可 [[Special:EditWatchlist/raw|編輯原始監視清單]]。",
+       "watchlistedit-normal-explain": "下方顯示在您監視清單中的標題。要移除標題,請勾選該標題旁的核選方塊並點選「{{int:Watchlistedit-normal-submit}}」。您也可[[Special:EditWatchlist/raw|編輯原始監視清單]]。",
        "watchlistedit-normal-submit": "移除標題",
        "watchlistedit-normal-done": "已於您的監視清單中移除 {{PLURAL:$1|$1}} 個標題:",
        "watchlistedit-raw-title": "編輯原始監視清單",
        "watchlistedit-raw-legend": "編輯原始監視清單",
-       "watchlistedit-raw-explain": "下方顯示在您監視清單中的標題,您可透過編輯來新增與移除清單項目,一個標題一行。\n完成編輯後,請點選 \"{{int:Watchlistedit-raw-submit}}\"。\n您也可 [[Special:EditWatchlist|使用標準編輯器]]。",
+       "watchlistedit-raw-explain": "下方顯示在您監視清單中的標題,您可透過編輯來新增與移除清單項目,一個標題一行。完成編輯後,請點選「{{int:Watchlistedit-raw-submit}}」。您也可[[Special:EditWatchlist|使用標準編輯器]]。",
        "watchlistedit-raw-titles": "標題:",
        "watchlistedit-raw-submit": "更新監視清單",
        "watchlistedit-raw-done": "已更新您的監視清單。",
        "watchlistedit-clear-legend": "清空監視清單",
        "watchlistedit-clear-explain": "將會移除您的監視清單中所有的標題",
        "watchlistedit-clear-titles": "標題:",
-       "watchlistedit-clear-submit": "清空監視清單 (無法還原)",
+       "watchlistedit-clear-submit": "清空監視清單(無法還原)",
        "watchlistedit-clear-done": "已清空您的監視清單。",
        "watchlistedit-clear-jobqueue": "您的監視列表正在清空。這需要花一些時間!",
        "watchlistedit-clear-removed": "已移除 $1 個標題:",
        "tags": "有效變更標籤",
        "tag-filter": "[[Special:Tags|標籤]]搜尋:",
        "tag-filter-submit": "篩選器",
-       "tag-list-wrapper": "([[Special:Tags|$1 個標籤]]:$2)",
+       "tag-list-wrapper": "[[Special:Tags|$1 個標籤]]:$2",
        "tag-mw-contentmodelchange": "內容模型變更",
        "tag-mw-contentmodelchange-description": "[https://www.mediawiki.org/wiki/Special:MyLanguage/Help:ChangeContentModel 更改頁面的內容模型]的編輯。",
        "tag-mw-new-redirect": "新重新導向",
        "dberr-again": "請稍後數分鐘後再試。",
        "dberr-info": "(無法存取資料庫:$1)",
        "dberr-info-hidden": "(無法存取資料庫)",
-       "dberr-usegoogle": "您可以嘗試在此期間使用 Google 搜尋。",
-       "dberr-outofdate": "注意,它們用來建立索引的內容可能不是最新的。",
-       "dberr-cachederror": "這是請求面頁面的快取複本,可能不是最新的。",
        "htmlform-invalid-input": "您的輸入的內容有問題。",
        "htmlform-select-badoption": "您所指定的值不是有效的選項。",
        "htmlform-int-invalid": "您所指定的值不是一個整數。",
        "logentry-block-reblock": "$1{{GENDER:$2|已變更}}{{GENDER:$4|$3}}的封鎖設定期限為$5$6",
        "logentry-partialblock-block": "$1{{GENDER:$2|已封鎖}}{{GENDER:$4|$3}}對於{{PLURAL:$8||頁面}}$7的編輯至期限$5 $6",
        "logentry-partialblock-reblock": "$1{{GENDER:$2|已變更}}{{GENDER:$4|$3}}禁止編輯{{PLURAL:$8||頁面}}$7的封鎖設定為期限時間至$5 $6",
-       "logentry-non-editing-block-block": "$1{{GENDER:$2|已封鎖}}{{GENDER:$4|$3}}的編輯操作至其期限$5 $6",
-       "logentry-non-editing-block-reblock": "$1{{GENDER:$2|å·²è®\8aæ\9b´}}{{GENDER:$4|$3}}ç¦\81止編輯æ\93\8dä½\9cç\9a\84封鎖設定為期限至$5 $6",
+       "logentry-non-editing-block-block": "$1{{GENDER:$2|已封鎖}}{{GENDER:$4|$3}}的指定編輯操作至期限$5 $6",
+       "logentry-non-editing-block-reblock": "$1{{GENDER:$2|å·²è®\8aæ\9b´}}{{GENDER:$4|$3}}ç\9a\84æ\8c\87å®\9aç¦\81止編輯æ\93\8dä½\9cä¹\8b封鎖設定為期限至$5 $6",
        "logentry-suppress-block": "$1 {{GENDER:$2|已封鎖}} {{GENDER:$4|$3}} 期限為 $5 $6",
        "logentry-suppress-reblock": "$1 {{GENDER:$2|已變更}} {{GENDER:$4|$3}} 的封鎖設定期限為 $5 $6",
        "logentry-import-upload": "$1 已由檔案上傳{{GENDER:$2|匯入}} $3",
        "passwordpolicies-policy-passwordcannotmatchblacklist": "密碼不可以同於被列入黑名單的特定密碼",
        "passwordpolicies-policy-maximalpasswordlength": "密碼必須小於 $1 個{{PLURAL:$1|字元|字元}}長度",
        "passwordpolicies-policy-passwordcannotbepopular": "密碼不可以是{{PLURAL:$1|常用密碼內容|在清單中的編號 $1 常用密碼}}",
+       "passwordpolicies-policy-passwordnotinlargeblacklist": "不能採用列在 100000 個最常用到密碼清單當中的密碼。",
        "easydeflate-invaliddeflate": "提供的內容未被正常的壓縮",
        "unprotected-js": "基於安全因素,JavaScript 不能從未保護的頁面來載入。建立 JavaScript 請僅在 MediaWiki 的:命名空間或使用者子頁面"
 }
index 6a2e41d..6646122 100644 (file)
@@ -113,7 +113,6 @@ $specialPageAliases = [
        'Myuploads'                 => [ 'Moje_soubory', 'Mé_soubory' ],
        'Newimages'                 => [ 'Nové_obrázky', 'Galerie_nových_obrázků', 'Nove_obrazky' ],
        'Newpages'                  => [ 'Nové_stránky', 'Nove_stranky', 'Nejnovější_stránky', 'Nejnovejsi_stranky' ],
-       'PasswordReset'             => [ 'Reset_hesla', 'Resetovat_heslo' ],
        'PagesWithProp'             => [ 'Stránky_s_vlastností', 'Stránky_s_vlastnostmi' ],
        'PasswordReset'             => [ 'Reset_hesla', 'Resetovat_heslo', 'Obnova_hesla', 'Obnovit_heslo' ],
        'PermanentLink'             => [ 'Trvalý_odkaz' ],
index 587f6ea..f325641 100644 (file)
@@ -359,6 +359,7 @@ $magicWords = [
        'filepath'                => [ 0, 'FILEPATH:' ],
        'tag'                     => [ 0, 'tag' ],
        'hiddencat'               => [ 1, '__HIDDENCAT__' ],
+       'expectunusedcategory'    => [ 1, '__EXPECTUNUSEDCATEGORY__', ],
        'pagesincategory'         => [ 1, 'PAGESINCATEGORY', 'PAGESINCAT' ],
        'pagesize'                => [ 1, 'PAGESIZE' ],
        'index'                   => [ 1, '__INDEX__' ],
index cc4e069..9579e28 100644 (file)
@@ -8,4 +8,4 @@
  *
  */
 
-$fallback = 'bo'; // Tibetian
+$fallback = 'my';
diff --git a/maintenance/archives/patch-drop-ct_tag.sql b/maintenance/archives/patch-drop-ct_tag.sql
new file mode 100644 (file)
index 0000000..2f5881a
--- /dev/null
@@ -0,0 +1,10 @@
+-- T185355
+ALTER TABLE /*_*/change_tag MODIFY ct_tag_id int unsigned NOT NULL;
+
+DROP INDEX /*i*/change_tag_rc_tag_nonuniq ON /*_*/change_tag;
+DROP INDEX /*i*/change_tag_log_tag_nonuniq ON /*_*/change_tag;
+DROP INDEX /*i*/change_tag_rev_tag_nonuniq ON /*_*/change_tag;
+DROP INDEX /*i*/change_tag_tag_id ON /*_*/change_tag;
+
+ALTER TABLE /*_*/change_tag DROP COLUMN ct_tag;
+
index 24ca86d..17d2e18 100644 (file)
@@ -54,13 +54,13 @@ class CleanupSpam extends Maintenance {
 
                $spec = $this->getArg();
 
-               $likes = [];
+               $protConds = [];
                foreach ( [ 'http://', 'https://' ] as $prot ) {
-                       $like = LinkFilter::makeLikeArray( $spec, $prot );
-                       if ( !$like ) {
+                       $conds = LinkFilter::getQueryConditions( $spec, [ 'protocol' => $prot ] );
+                       if ( !$conds ) {
                                $this->fatalError( "Not a valid hostname specification: $spec" );
                        }
-                       $likes[$prot] = $like;
+                       $protConds[$prot] = $conds;
                }
 
                if ( $this->hasOption( 'all' ) ) {
@@ -71,11 +71,11 @@ class CleanupSpam extends Maintenance {
                                /** @var $dbr Database */
                                $dbr = $this->getDB( DB_REPLICA, [], $wikiID );
 
-                               foreach ( $likes as $like ) {
+                               foreach ( $protConds as $conds ) {
                                        $count = $dbr->selectField(
                                                'externallinks',
                                                'COUNT(*)',
-                                               [ 'el_index' . $dbr->buildLike( $like ) ],
+                                               $conds,
                                                __METHOD__
                                        );
                                        if ( $count ) {
@@ -99,11 +99,11 @@ class CleanupSpam extends Maintenance {
                        $count = 0;
                        /** @var $dbr Database */
                        $dbr = $this->getDB( DB_REPLICA );
-                       foreach ( $likes as $prot => $like ) {
+                       foreach ( $protConds as $prot => $conds ) {
                                $res = $dbr->select(
                                        'externallinks',
                                        [ 'DISTINCT el_from' ],
-                                       [ 'el_index' . $dbr->buildLike( $like ) ],
+                                       $conds,
                                        __METHOD__
                                );
                                $count = $dbr->numRows( $res );
index 9849dc5..76a6a1f 100644 (file)
@@ -38,17 +38,44 @@ class DeleteSelfExternals extends Maintenance {
 
        public function execute() {
                global $wgServer;
+
+               // Extract the host and scheme from $wgServer
+               $bits = wfParseUrl( $wgServer );
+               if ( !$bits ) {
+                       $this->error( 'Could not parse $wgServer' );
+                       exit( 1 );
+               }
+
                $this->output( "Deleting self externals from $wgServer\n" );
                $db = $this->getDB( DB_MASTER );
-               while ( 1 ) {
-                       $this->commitTransaction( $db, __METHOD__ );
-                       $q = $db->limitResult( "DELETE /* deleteSelfExternals */ FROM externallinks WHERE el_to"
-                               . $db->buildLike( $wgServer . '/', $db->anyString() ), $this->getBatchSize() );
-                       $this->output( "Deleting a batch\n" );
-                       $db->query( $q );
-                       if ( !$db->affectedRows() ) {
-                               return;
+
+               // If it's protocol-relative, we need to do both http and https.
+               // Otherwise, just do the specified scheme.
+               $host = $bits['host'];
+               if ( isset( $bits['port'] ) ) {
+                       $host .= ':' . $bits['port'];
+               }
+               if ( $bits['scheme'] != '' ) {
+                       $conds = [ LinkFilter::getQueryConditions( $host, [ 'protocol' => $bits['scheme'] . '://' ] ) ];
+               } else {
+                       $conds = [
+                               LinkFilter::getQueryConditions( $host, [ 'protocol' => 'http://' ] ),
+                               LinkFilter::getQueryConditions( $host, [ 'protocol' => 'https://' ] ),
+                       ];
+               }
+
+               foreach ( $conds as $cond ) {
+                       if ( !$cond ) {
+                               continue;
                        }
+                       $cond = $db->makeList( $cond, LIST_AND );
+                       do {
+                               $this->commitTransaction( $db, __METHOD__ );
+                               $q = $db->limitResult( "DELETE /* deleteSelfExternals */ FROM externallinks WHERE $cond",
+                                       $this->mBatchSize );
+                               $this->output( "Deleting a batch\n" );
+                               $db->query( $q );
+                       } while ( $db->affectedRows() );
                }
        }
 }
diff --git a/maintenance/mssql/archives/patch-drop-ct_tag.sql b/maintenance/mssql/archives/patch-drop-ct_tag.sql
new file mode 100644 (file)
index 0000000..5498a1c
--- /dev/null
@@ -0,0 +1,22 @@
+-- T185355
+ALTER TABLE /*_*/change_tag ALTER COLUMN ct_tag INTEGER NOT NULL
+
+DECLARE @sql nvarchar(max),
+       @id sysname;--
+
+SET @sql = 'ALTER TABLE /*_*/change_tag DROP CONSTRAINT ';--
+
+SELECT @id = df.name
+FROM sys.default_constraints df
+JOIN sys.columns c
+       ON c.object_id = df.parent_object_id
+       AND c.column_id = df.parent_column_id
+WHERE
+       df.parent_object_id = OBJECT_ID('/*_*/change_tag')
+       AND c.name = 'ct_tag';--
+
+SET @sql = @sql + @id;--
+
+EXEC sp_executesql @sql;--
+
+ALTER TABLE /*_*/change_tag DROP COLUMN ct_tag;
index 2b95b43..fd2fae7 100644 (file)
@@ -545,6 +545,9 @@ CREATE TABLE /*_*/externallinks (
   -- which allows for fast searching for all pages under example.com with the
   -- clause:
   --      WHERE el_index LIKE 'http://com.example.%'
+  --
+  -- Note if you enable or disable PHP's intl extension, you'll need to run
+  -- maintenance/refreshExternallinksIndex.php to refresh this field.
   el_index nvarchar(450) NOT NULL,
 
   -- This is el_index truncated to 60 bytes to allow for sortable queries that
@@ -802,20 +805,6 @@ CREATE INDEX /*i*/img_sha1 ON /*_*/image (img_sha1);
 -- Used to get media of one type
 CREATE INDEX /*i*/img_media_mime ON /*_*/image (img_media_type,img_major_mime,img_minor_mime);
 
---
--- Temporary table to avoid blocking on an alter of image.
---
--- On large wikis like Wikimedia Commons, altering the image table is a
--- months-long process. This table is being created to avoid such an alter, and
--- will be merged back into image in the future.
---
-CREATE TABLE /*_*/image_comment_temp (
-  imgcomment_name nvarchar(255) NOT NULL CONSTRAINT FK_imgcomment_name FOREIGN KEY REFERENCES /*_*/image(img_name) ON DELETE CASCADE,
-  imgcomment_description_id bigint NOT NULL CONSTRAINT FK_imgcomment_description_id FOREIGN KEY REFERENCES /*_*/comment(comment_id),
-  CONSTRAINT PK_image_comment_temp PRIMARY KEY (imgcomment_name, imgcomment_description_id)
-);
-CREATE UNIQUE INDEX /*i*/imgcomment_name ON /*_*/image_comment_temp (imgcomment_name);
-
 
 --
 -- Previous revisions of uploaded files.
@@ -1041,7 +1030,7 @@ CREATE TABLE /*_*/recentchanges (
   -- remove a warning flag on the RC list.
   -- A value of 1 indicates the page has been reviewed manually.
   -- A value of 2 indicates the page has been automatically reviewed.
-  rc_patrolled tinyint NOT NULL CONSTRAINT DF_rc_patrolled DEFAULT 0
+  rc_patrolled tinyint NOT NULL CONSTRAINT DF_rc_patrolled DEFAULT 0,
 
   -- Recorded IP address the edit was made from, if the
   -- $wgPutIPinRC option is enabled.
@@ -1409,24 +1398,17 @@ CREATE TABLE /*_*/change_tag (
   ct_log_id int NULL REFERENCES /*_*/logging(log_id),
   -- REVID for the change
   ct_rev_id int NULL REFERENCES /*_*/revision(rev_id),
-  -- Tag applied
-  ct_tag nvarchar(255) NOT NULL default '',
   -- Parameters for the tag, presently unused
   ct_params nvarchar(max) NULL,
   -- Foreign key to change_tag_def row
-  ct_tag_id int NULL CONSTRAINT ctd_tag_id__fk FOREIGN KEY REFERENCES /*_*/change_tag_def(ctd_id)
+  ct_tag_id int NOT NULL CONSTRAINT ctd_tag_id__fk FOREIGN KEY REFERENCES /*_*/change_tag_def(ctd_id)
 );
 
-CREATE INDEX /*i*/change_tag_rc_tag_nonuniq ON /*_*/change_tag (ct_rc_id,ct_tag);
-CREATE INDEX /*i*/change_tag_log_tag_nonuniq ON /*_*/change_tag (ct_log_id,ct_tag);
-CREATE INDEX /*i*/change_tag_rev_tag_nonuniq ON /*_*/change_tag (ct_rev_id,ct_tag);
-
 CREATE UNIQUE INDEX /*i*/change_tag_rc_tag_id ON /*_*/change_tag (ct_rc_id,ct_tag_id);
 CREATE UNIQUE INDEX /*i*/change_tag_log_tag_id ON /*_*/change_tag (ct_log_id,ct_tag_id);
 CREATE UNIQUE INDEX /*i*/change_tag_rev_tag_id ON /*_*/change_tag (ct_rev_id,ct_tag_id);
 
 -- Covering index, so we can pull all the info only out of the index.
-CREATE INDEX /*i*/change_tag_tag_id ON /*_*/change_tag (ct_tag,ct_rc_id,ct_rev_id,ct_log_id);
 CREATE INDEX /*i*/change_tag_tag_id_id ON /*_*/change_tag (ct_tag_id,ct_rc_id,ct_rev_id,ct_log_id);
 
 -- Rollup table to pull a LIST of tags simply without ugly GROUP_CONCAT
diff --git a/maintenance/oracle/archives/patch-drop-ct_tag.sql b/maintenance/oracle/archives/patch-drop-ct_tag.sql
new file mode 100644 (file)
index 0000000..4c5d128
--- /dev/null
@@ -0,0 +1,9 @@
+-- T185355
+ALTER TABLE &mw_prefix.change_tag MODIFY &mw_prefix.ct_tag_id NUMBER NOT NULL;
+
+DROP INDEX &mw_prefix.change_tag_i03;
+DROP INDEX &mw_prefix.change_tag_i04;
+DROP INDEX &mw_prefix.change_tag_i05;
+DROP INDEX &mw_prefix.change_tag_i01;
+
+ALTER TABLE &mw_prefix.change_tag DROP COLUMN &mw_prefix.ct_tag;
index 6e76851..4c36fe1 100644 (file)
@@ -566,15 +566,6 @@ CREATE INDEX &mw_prefix.image_i03 ON &mw_prefix.image (img_timestamp);
 CREATE INDEX &mw_prefix.image_i04 ON &mw_prefix.image (img_sha1);
 CREATE INDEX &mw_prefix.img_actor_timestamp ON &mw_prefix.image (img_actor, img_timestamp);
 
-CREATE TABLE &mw_prefix.image_comment_temp (
-  imgcomment_name VARCHAR2(255) NOT NULL,
-  imgcomment_description_id NUMBER NOT NULL
-);
-ALTER TABLE &mw_prefix.image_comment_temp ADD CONSTRAINT &mw_prefix.image_comment_temp_pk PRIMARY KEY (imgcomment_name, imgcomment_description_id);
-ALTER TABLE &mw_prefix.image_comment_temp ADD CONSTRAINT &mw_prefix.image_comment_temp_fk1 FOREIGN KEY (imgcomment_name) REFERENCES &mw_prefix.image(img_name) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED;
-ALTER TABLE &mw_prefix.image_comment_temp ADD CONSTRAINT &mw_prefix.image_comment_temp_fk2 FOREIGN KEY (imgcomment_description_id) REFERENCES &mw_prefix."COMMENT"(comment_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED;
-CREATE UNIQUE INDEX &mw_prefix.imgcomment_name ON &mw_prefix.image_comment_temp (imgcomment_name);
-
 
 CREATE TABLE &mw_prefix.oldimage (
   oi_name          VARCHAR2(255)         DEFAULT 0 NOT NULL,
@@ -944,21 +935,15 @@ CREATE TABLE &mw_prefix.change_tag (
   ct_rc_id NUMBER NULL,
   ct_log_id NUMBER NULL,
   ct_rev_id NUMBER NULL,
-  ct_tag VARCHAR2(255) DEFAULT '///invalid///' NOT NULL,
   ct_params BLOB NULL,
-  ct_tag_id NUMBER NULL
+  ct_tag_id NUMBER NOT NULL
 );
 ALTER TABLE &mw_prefix.change_tag ADD CONSTRAINT &mw_prefix.change_tag_pk PRIMARY KEY (ct_id);
 
-CREATE INDEX &mw_prefix.change_tag_i03 ON &mw_prefix.change_tag (ct_rc_id,ct_tag);
-CREATE INDEX &mw_prefix.change_tag_i04 ON &mw_prefix.change_tag (ct_log_id,ct_tag);
-CREATE INDEX &mw_prefix.change_tag_i05 ON &mw_prefix.change_tag (ct_rev_id,ct_tag);
-
 CREATE UNIQUE INDEX &mw_prefix.change_tag_u04 ON &mw_prefix.change_tag (ct_rc_id,ct_tag_id);
 CREATE UNIQUE INDEX &mw_prefix.change_tag_u05 ON &mw_prefix.change_tag (ct_log_id,ct_tag_id);
 CREATE UNIQUE INDEX &mw_prefix.change_tag_u06 ON &mw_prefix.change_tag (ct_rev_id,ct_tag_id);
 
-CREATE INDEX &mw_prefix.change_tag_i01 ON &mw_prefix.change_tag (ct_tag,ct_rc_id,ct_rev_id,ct_log_id);
 CREATE INDEX &mw_prefix.change_tag_i02 ON &mw_prefix.change_tag (ct_tag_id,ct_rc_id,ct_rev_id,ct_log_id);
 
 CREATE TABLE &mw_prefix.tag_summary (
index 7bec25a..9594137 100644 (file)
@@ -42,16 +42,6 @@ class PopulateChangeTagDef extends LoggedUpdateMaintenance {
                $this->addOption( 'set-user-tags-only', 'Only update ctd_user_defined from valid_tag table' );
        }
 
-       public function execute() {
-               global $wgChangeTagsSchemaMigrationStage;
-               if ( $wgChangeTagsSchemaMigrationStage === MIGRATION_OLD ) {
-                       // Return "success", but don't flag it as done so the next run will retry
-                       $this->output( '... Not run, $wgChangeTagsSchemaMigrationStage === MIGRATION_OLD' . "\n" );
-                       return true;
-               }
-               return parent::execute();
-       }
-
        protected function doDBUpdates() {
                $this->lbFactory = MediaWiki\MediaWikiServices::getInstance()->getDBLoadBalancerFactory();
                $this->setBatchSize( $this->getOption( 'batch-size', $this->getBatchSize() ) );
diff --git a/maintenance/postgres/archives/patch-drop-ct_tag.sql b/maintenance/postgres/archives/patch-drop-ct_tag.sql
new file mode 100644 (file)
index 0000000..cbef6c9
--- /dev/null
@@ -0,0 +1,10 @@
+-- T185355
+ALTER TABLE /*_*/change_tag ALTER COLUMN ct_tag_id SET NOT NULL;
+
+DROP INDEX /*i*/change_tag_rc_tag_nonuniq;
+DROP INDEX /*i*/change_tag_log_tag_nonuniq;
+DROP INDEX /*i*/change_tag_rev_tag_nonuniq;
+DROP INDEX /*i*/change_tag_tag_id;
+
+ALTER TABLE /*_*/change_tag DROP COLUMN ct_tag;
+
index 003204d..4f636ae 100644 (file)
@@ -463,13 +463,6 @@ CREATE INDEX img_size_idx      ON image (img_size);
 CREATE INDEX img_timestamp_idx ON image (img_timestamp);
 CREATE INDEX img_sha1          ON image (img_sha1);
 
-CREATE TABLE image_comment_temp (
-       imgcomment_name       TEXT NOT NULL,
-       imgcomment_description_id INTEGER NOT NULL,
-       PRIMARY KEY (imgcomment_name, imgcomment_description_id)
-);
-CREATE UNIQUE INDEX imgcomment_name ON image_comment_temp (imgcomment_name);
-
 CREATE TABLE oldimage (
   oi_name          TEXT         NOT NULL,
   oi_archive_name  TEXT         NOT NULL,
@@ -811,21 +804,15 @@ CREATE TABLE change_tag (
   ct_rc_id   INTEGER      NULL,
   ct_log_id  INTEGER      NULL,
   ct_rev_id  INTEGER      NULL,
-  ct_tag     TEXT     NOT NULL DEFAULT '',
   ct_params  TEXT         NULL,
-  ct_tag_id  INTEGER      NULL
+  ct_tag_id  INTEGER  NOT NULL
 );
 ALTER SEQUENCE change_tag_ct_id_seq OWNED BY change_tag.ct_id;
 
-CREATE INDEX change_tag_rc_tag_nonuniq ON change_tag(ct_rc_id,ct_tag);
-CREATE INDEX change_tag_log_tag_nonuniq ON change_tag(ct_log_id,ct_tag);
-CREATE INDEX change_tag_rev_tag_nonuniq ON change_tag(ct_rev_id,ct_tag);
-
 CREATE UNIQUE INDEX change_tag_rc_tag_id ON change_tag(ct_rc_id,ct_tag_id);
 CREATE UNIQUE INDEX change_tag_log_tag_id ON change_tag(ct_log_id,ct_tag_id);
 CREATE UNIQUE INDEX change_tag_rev_tag_id ON change_tag(ct_rev_id,ct_tag_id);
 
-CREATE INDEX change_tag_tag_id ON change_tag(ct_tag,ct_rc_id,ct_rev_id,ct_log_id);
 CREATE INDEX change_tag_tag_id_id ON change_tag(ct_tag_id,ct_rc_id,ct_rev_id,ct_log_id);
 
 CREATE SEQUENCE tag_summary_ts_id_seq;
index f06e62b..900a52a 100644 (file)
@@ -101,9 +101,13 @@ class RebuildTextIndex extends Maintenance {
                        }
                        $end = $n + self::RTI_CHUNK_SIZE - 1;
 
-                       $res = $this->db->select( $revQuery['tables'], $revQuery['fields'],
+                       $res = $this->db->select(
+                               $revQuery['tables'],
+                               $revQuery['fields'],
                                [ "page_id BETWEEN $n AND $end", 'page_latest = rev_id', 'rev_text_id = old_id' ],
-                               __METHOD__
+                               __METHOD__,
+                               [],
+                               $revQuery['joins']
                        );
 
                        foreach ( $res as $s ) {
diff --git a/maintenance/refreshExternallinksIndex.php b/maintenance/refreshExternallinksIndex.php
new file mode 100644 (file)
index 0000000..1551a94
--- /dev/null
@@ -0,0 +1,120 @@
+<?php
+/**
+ * Refresh the externallinks table el_index and el_index_60 from el_to
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup Maintenance
+ */
+
+require_once __DIR__ . '/Maintenance.php';
+
+/**
+ * Maintenance script that refreshes the externallinks table el_index and
+ * el_index_60 from el_to
+ *
+ * @ingroup Maintenance
+ * @since 1.33
+ */
+class RefreshExternallinksIndex extends LoggedUpdateMaintenance {
+       public function __construct() {
+               parent::__construct();
+               $this->addDescription(
+                       'Refresh the externallinks table el_index and el_index_60 from el_to' );
+               $this->setBatchSize( 10000 );
+       }
+
+       protected function getUpdateKey() {
+               return static::class
+                       . ' v' . LinkFilter::VERSION
+                       . ( LinkFilter::supportsIDN() ? '+' : '-' ) . 'IDN';
+       }
+
+       protected function updateSkippedMessage() {
+               return 'externallinks table indexes up to date';
+       }
+
+       protected function doDBUpdates() {
+               $dbw = $this->getDB( DB_MASTER );
+               if ( !$dbw->tableExists( 'externallinks' ) ) {
+                       $this->error( "externallinks table does not exist" );
+                       return false;
+               }
+               $this->output( "Updating externallinks table index fields\n" );
+
+               $minmax = $dbw->selectRow(
+                       'externallinks',
+                       [ 'min' => 'MIN(el_id)', 'max' => 'MAX(el_id)' ],
+                       '',
+                       __METHOD__
+               );
+
+               $updated = 0;
+               $deleted = 0;
+               $start = $minmax->min - 1;
+               $last = $minmax->max;
+               while ( $start < $last ) {
+                       $end = min( $start + $this->mBatchSize, $last );
+                       $this->output( "el_id $start - $end of $last\n" );
+                       $res = $dbw->select( 'externallinks', [ 'el_id', 'el_to', 'el_index' ],
+                               [
+                                       "el_id > $start",
+                                       "el_id <= $end",
+                               ],
+                               __METHOD__,
+                               [ 'ORDER BY' => 'el_id' ]
+                       );
+                       foreach ( $res as $row ) {
+                               $newIndexes = LinkFilter::makeIndexes( $row->el_to );
+                               if ( !$newIndexes ) {
+                                       $dbw->delete( 'externallinks', [ 'el_id' => $row->el_id ], __METHOD__ );
+                                       $deleted++;
+                                       continue;
+                               }
+                               if ( in_array( $row->el_index, $newIndexes, true ) ) {
+                                       continue;
+                               }
+
+                               if ( count( $newIndexes ) === 1 ) {
+                                       $newIndex = $newIndexes[0];
+                               } else {
+                                       // Assume the scheme is the only difference between the different $newIndexes.
+                                       // Keep this row's scheme, assuming there's another row with the other scheme.
+                                       $newIndex = substr( $row->el_index, 0, strpos( $row->el_index, ':' ) ) .
+                                               substr( $newIndexes[0], strpos( $newIndexes[0], ':' ) );
+                               }
+                               $dbw->update( 'externallinks',
+                                       [
+                                               'el_index' => $newIndex,
+                                               'el_index_60' => substr( $newIndex, 0, 60 ),
+                                       ],
+                                       [ 'el_id' => $row->el_id ],
+                                       __METHOD__
+                               );
+                               $updated++;
+                       }
+                       wfWaitForSlaves();
+                       $start = $end;
+               }
+               $this->output( "Done, $updated rows updated, $deleted deleted.\n" );
+
+               return true;
+       }
+}
+
+$maintClass = "RefreshExternallinksIndex";
+require_once RUN_MAINTENANCE_IF_MAIN;
diff --git a/maintenance/resetPageRandom.php b/maintenance/resetPageRandom.php
new file mode 100644 (file)
index 0000000..6110221
--- /dev/null
@@ -0,0 +1,126 @@
+<?php
+/**
+ * Resets the page_random field for articles in the provided time range.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup Maintenance
+ */
+
+require_once __DIR__ . '/Maintenance.php';
+
+/**
+ * Maintenance script that resets page_random over a time range.
+ *
+ * @ingroup Maintenance
+ */
+class ResetPageRandom extends Maintenance {
+       public function __construct() {
+               parent::__construct();
+               $this->addDescription( 'Reset the page_random for articles within given date range' );
+               $this->addOption( 'from',
+                       'From date range selector to select articles to update, ex: 20041011000000' );
+               $this->addOption( 'to',
+                       'To date range selector to select articles to update, ex: 20050708000000' );
+               $this->addOption( 'dry', 'Do not update column' );
+               $this->addOption( 'batch-start',
+                       'Optional: Use when you need to restart the reset process from a given page ID offset'
+                       . ' in case a previous reset failed or was stopped'
+               );
+               // Initialize batch size to a good default value and enable the batch size option.
+               $this->setBatchSize( 200 );
+       }
+
+       public function execute() {
+               $batchSize = $this->getBatchSize();
+               $dbw = $this->getDB( DB_MASTER );
+               $lbFactory = \MediaWiki\MediaWikiServices::getInstance()->getDBLoadBalancerFactory();
+               $dbr = $this->getDB( DB_REPLICA );
+               $from = wfTimestampOrNull( TS_MW, $this->getOption( 'from' ) );
+               $to = wfTimestampOrNull( TS_MW, $this->getOption( 'to' ) );
+
+               if ( $from === null || $to === null ) {
+                       $this->output( "--from and --to have to be provided" . PHP_EOL );
+                       return false;
+               }
+               if ( $from >= $to ) {
+                       $this->output( "--from has to be smaller than --to" . PHP_EOL );
+                       return false;
+               }
+               $batchStart = (int)$this->getOption( 'batch-start', 0 );
+               $changed = 0;
+               $dry = (bool)$this->getOption( 'dry' );
+
+               $message = "Resetting page_random column within date range from $from to $to";
+               if ( $batchStart > 0 ) {
+                       $message .= " starting from page ID $batchStart";
+               }
+               $message .= $dry ? ". dry run" : '.';
+
+               $this->output( $message . PHP_EOL );
+               do {
+                       $this->output( "  ...doing chunk of $batchSize from $batchStart " . PHP_EOL );
+
+                       // Find the oldest page revision associated with each page_id. Iff it falls in the given
+                       // time range AND it's greater than $batchStart, yield the page ID. If it falls outside the
+                       // time range, it was created before or after the occurrence of T208909 and its page_random
+                       // is considered valid. The replica is used for this read since page_id and the rev_timestamp
+                       // will not change between queries.
+                       $res = $dbr->select(
+                               'page',
+                               'page_id',
+                               [
+                                       '(' . $dbr->selectSQLText( 'revision', 'MIN(rev_timestamp)', 'rev_page=page_id' ) . ') ' .
+                                               'BETWEEN ' . $dbr->addQuotes( $dbr->timestamp( $from ) ) .
+                                               ' AND ' . $dbr->addQuotes( $dbr->timestamp( $to ) ),
+                                       'page_id > ' . $dbr->addQuotes( $batchStart )
+                               ],
+                               __METHOD__,
+                               [ 'LIMIT' => $batchSize, 'ORDER BY' => 'page_id' ]
+                       );
+
+                       foreach ( $res as $row ) {
+                               if ( !$dry ) {
+                                       # Update the row...
+                                       $dbw->update( 'page',
+                                               [ 'page_random' => wfRandom() ],
+                                               [ 'page_id' => $row->page_id ],
+                                               __METHOD__ );
+                                       $changed += $dbw->affectedRows();
+                               } else {
+                                       $changed++;
+                               }
+                       }
+                       if ( $row ) {
+                               $batchStart = $row->page_id;
+                       } else {
+                               // We don't need to set the $batchStart as $res is empty,
+                               // and we don't need to do another loop
+                               // the while() condition will evaluate to false and
+                               // we will leave the do{}while() block.
+                       }
+
+                       $lbFactory->waitForReplication();
+               } while ( $res->numRows() === $batchSize );
+               $this->output( "page_random reset complete ... changed $changed rows" . PHP_EOL );
+
+               return true;
+       }
+}
+
+$maintClass = ResetPageRandom::class;
+require_once RUN_MAINTENANCE_IF_MAIN;
index 8ae4f9f..ad1943d 100644 (file)
@@ -112,8 +112,8 @@ oojs:
 
 ooui:
   type: tar
-  src: https://registry.npmjs.org/oojs-ui/-/oojs-ui-0.29.4.tgz
-  integrity: sha384-Nalm0LX+S/mjx+GJBDuJsy0hHK3fYOUpzuijLFAw1Gu1018UeOU+U0Z711VthWVB
+  src: https://registry.npmjs.org/oojs-ui/-/oojs-ui-0.29.5.tgz
+  integrity: sha384-Acz0ji0NNdeYseLVkL90rlcnrNJXemvTn6gZYqebThDIz8ixmop9MgyQFLmcvt9p
   dest:
     # Main stuff
     package/dist/oojs-ui-core.js{,.map.json}:
index 714726a..8350cfa 100644 (file)
@@ -126,7 +126,7 @@ CREATE TABLE /*_*/image_tmp (
   img_height int NOT NULL default 0,
   img_metadata mediumblob NOT NULL,
   img_bits int NOT NULL default 0,
-  img_media_type ENUM("UNKNOWN", "BITMAP", "DRAWING", "AUDIO", "VIDEO", "MULTIMEDIA", "OFFICE", "TEXT", "EXECUTABLE", "ARCHIVE") default NULL,
+  img_media_type ENUM("UNKNOWN", "BITMAP", "DRAWING", "AUDIO", "VIDEO", "MULTIMEDIA", "OFFICE", "TEXT", "EXECUTABLE", "ARCHIVE", "3D") default NULL,
   img_major_mime ENUM("unknown", "application", "audio", "image", "text", "video", "message", "model", "multipart", "chemical") NOT NULL default "unknown",
   img_minor_mime varbinary(100) NOT NULL default "unknown",
   img_description varbinary(767) NOT NULL default '',
@@ -177,7 +177,7 @@ CREATE TABLE /*_*/oldimage_tmp (
   oi_actor bigint unsigned NOT NULL DEFAULT 0,
   oi_timestamp binary(14) NOT NULL default '',
   oi_metadata mediumblob NOT NULL,
-  oi_media_type ENUM("UNKNOWN", "BITMAP", "DRAWING", "AUDIO", "VIDEO", "MULTIMEDIA", "OFFICE", "TEXT", "EXECUTABLE", "ARCHIVE") default NULL,
+  oi_media_type ENUM("UNKNOWN", "BITMAP", "DRAWING", "AUDIO", "VIDEO", "MULTIMEDIA", "OFFICE", "TEXT", "EXECUTABLE", "ARCHIVE", "3D") default NULL,
   oi_major_mime ENUM("unknown", "application", "audio", "image", "text", "video", "message", "model", "multipart", "chemical") NOT NULL default "unknown",
   oi_minor_mime varbinary(100) NOT NULL default "unknown",
   oi_deleted tinyint unsigned NOT NULL default 0,
@@ -204,61 +204,7 @@ CREATE INDEX /*i*/oi_actor_timestamp ON /*_*/oldimage (oi_actor,oi_timestamp);
 
 COMMIT;
 
-BEGIN;
-
-DROP TABLE IF EXISTS /*_*/filearchive_tmp;
-CREATE TABLE /*_*/filearchive_tmp (
-  fa_id int NOT NULL PRIMARY KEY AUTO_INCREMENT,
-  fa_name varchar(255) binary NOT NULL default '',
-  fa_archive_name varchar(255) binary default '',
-  fa_storage_group varbinary(16),
-  fa_storage_key varbinary(64) default '',
-  fa_deleted_user int,
-  fa_deleted_timestamp binary(14) default '',
-  fa_deleted_reason varbinary(767) default '',
-  fa_deleted_reason_id bigint unsigned NOT NULL DEFAULT 0,
-  fa_size int unsigned default 0,
-  fa_width int default 0,
-  fa_height int default 0,
-  fa_metadata mediumblob,
-  fa_bits int default 0,
-  fa_media_type ENUM("UNKNOWN", "BITMAP", "DRAWING", "AUDIO", "VIDEO", "MULTIMEDIA", "OFFICE", "TEXT", "EXECUTABLE", "ARCHIVE") default NULL,
-  fa_major_mime ENUM("unknown", "application", "audio", "image", "text", "video", "message", "model", "multipart", "chemical") default "unknown",
-  fa_minor_mime varbinary(100) default "unknown",
-  fa_description varbinary(767) default '',
-  fa_description_id bigint unsigned NOT NULL DEFAULT 0,
-  fa_user int unsigned default 0,
-  fa_user_text varchar(255) binary DEFAULT '',
-  fa_actor bigint unsigned NOT NULL DEFAULT 0,
-  fa_timestamp binary(14) default '',
-  fa_deleted tinyint unsigned NOT NULL default 0,
-  fa_sha1 varbinary(32) NOT NULL default ''
-) /*$wgDBTableOptions*/;
-
-INSERT OR IGNORE INTO /*_*/filearchive_tmp (
-       fa_id, fa_name, fa_archive_name, fa_storage_group, fa_storage_key,
-       fa_deleted_user, fa_deleted_timestamp, fa_deleted_reason, fa_size,
-       fa_width, fa_height, fa_metadata, fa_bits, fa_media_type, fa_major_mime,
-       fa_minor_mime, fa_description, fa_user, fa_user_text, fa_timestamp,
-       fa_deleted, fa_sha1)
-  SELECT
-       fa_id, fa_name, fa_archive_name, fa_storage_group, fa_storage_key,
-       fa_deleted_user, fa_deleted_timestamp, fa_deleted_reason, fa_size,
-       fa_width, fa_height, fa_metadata, fa_bits, fa_media_type, fa_major_mime,
-       fa_minor_mime, fa_description, fa_user, fa_user_text, fa_timestamp,
-       fa_deleted, fa_sha1
-  FROM /*_*/filearchive;
-
-DROP TABLE /*_*/filearchive;
-ALTER TABLE /*_*/filearchive_tmp RENAME TO /*_*/filearchive;
-CREATE INDEX /*i*/fa_name ON /*_*/filearchive (fa_name, fa_timestamp);
-CREATE INDEX /*i*/fa_storage_group ON /*_*/filearchive (fa_storage_group, fa_storage_key);
-CREATE INDEX /*i*/fa_deleted_timestamp ON /*_*/filearchive (fa_deleted_timestamp);
-CREATE INDEX /*i*/fa_user_timestamp ON /*_*/filearchive (fa_user_text,fa_timestamp);
-CREATE INDEX /*i*/fa_sha1 ON /*_*/filearchive (fa_sha1(10));
-CREATE INDEX /*i*/fa_actor_timestamp ON /*_*/filearchive (fa_actor,fa_timestamp);
-
-COMMIT;
+-- filearchive is done in patch-filearchive-fa_actor.sql
 
 BEGIN;
 
index 10d74fb..69cfe13 100644 (file)
--- image
-
-CREATE TABLE /*_*/image_tmp (
-  -- Filename.
-  -- This is also the title of the associated description page,
-  -- which will be in namespace 6 (NS_FILE).
-  img_name varchar(255) binary NOT NULL default '' PRIMARY KEY,
-
-  -- File size in bytes.
-  img_size int unsigned NOT NULL default 0,
-
-  -- For images, size in pixels.
-  img_width int NOT NULL default 0,
-  img_height int NOT NULL default 0,
-
-  -- Extracted Exif metadata stored as a serialized PHP array.
-  img_metadata mediumblob NOT NULL,
-
-  -- For images, bits per pixel if known.
-  img_bits int NOT NULL default 0,
-
-  -- Media type as defined by the MEDIATYPE_xxx constants
-  img_media_type ENUM("UNKNOWN", "BITMAP", "DRAWING", "AUDIO", "VIDEO", "MULTIMEDIA", "OFFICE", "TEXT", "EXECUTABLE", "ARCHIVE", "3D") default NULL,
-
-  -- major part of a MIME media type as defined by IANA
-  -- see https://www.iana.org/assignments/media-types/
-  -- for "chemical" cf. http://dx.doi.org/10.1021/ci9803233 by the ACS
-  img_major_mime ENUM("unknown", "application", "audio", "image", "text", "video", "message", "model", "multipart", "chemical") NOT NULL default "unknown",
-
-  -- minor part of a MIME media type as defined by IANA
-  -- the minor parts are not required to adher to any standard
-  -- but should be consistent throughout the database
-  -- see https://www.iana.org/assignments/media-types/
-  img_minor_mime varbinary(100) NOT NULL default "unknown",
-
-  -- Description field as entered by the uploader.
-  -- This is displayed in image upload history and logs.
-  img_description varbinary(767) NOT NULL,
-
-  -- user_id and user_name of uploader.
-  img_user int unsigned NOT NULL default 0,
-  img_user_text varchar(255) binary NOT NULL,
-
-  -- Time of the upload.
-  img_timestamp varbinary(14) NOT NULL default '',
-
-  -- SHA-1 content hash in base-36
-  img_sha1 varbinary(32) NOT NULL default ''
-) /*$wgDBTableOptions*/;
-
-INSERT INTO /*_*/image_tmp
-       SELECT img_name, img_size, img_width, img_height, img_metadata, img_bits,
-       img_media_type, img_major_mime, img_minor_mime, img_description,
-       img_user, img_user_text, img_timestamp, img_sha1
-               FROM /*_*/image;
-
-DROP TABLE /*_*/image;
-
-ALTER TABLE /*_*/image_tmp RENAME TO /*_*/image;
-
--- Used by Special:Newimages and ApiQueryAllImages
-CREATE INDEX /*i*/img_user_timestamp ON /*_*/image (img_user,img_timestamp);
-CREATE INDEX /*i*/img_usertext_timestamp ON /*_*/image (img_user_text,img_timestamp);
--- Used by Special:ListFiles for sort-by-size
-CREATE INDEX /*i*/img_size ON /*_*/image (img_size);
--- Used by Special:Newimages and Special:ListFiles
-CREATE INDEX /*i*/img_timestamp ON /*_*/image (img_timestamp);
--- Used in API and duplicate search
-CREATE INDEX /*i*/img_sha1 ON /*_*/image (img_sha1(10));
--- Used to get media of one type
-CREATE INDEX /*i*/img_media_mime ON /*_*/image (img_media_type,img_major_mime,img_minor_mime);
-
--- oldimage
-
-CREATE TABLE /*_*/oldimage_tmp (
-  -- Base filename: key to image.img_name
-  oi_name varchar(255) binary NOT NULL default '',
-
-  -- Filename of the archived file.
-  -- This is generally a timestamp and '!' prepended to the base name.
-  oi_archive_name varchar(255) binary NOT NULL default '',
-
-  -- Other fields as in image...
-  oi_size int unsigned NOT NULL default 0,
-  oi_width int NOT NULL default 0,
-  oi_height int NOT NULL default 0,
-  oi_bits int NOT NULL default 0,
-  oi_description varbinary(767) NOT NULL,
-  oi_user int unsigned NOT NULL default 0,
-  oi_user_text varchar(255) binary NOT NULL,
-  oi_timestamp binary(14) NOT NULL default '',
-
-  oi_metadata mediumblob NOT NULL,
-  oi_media_type ENUM("UNKNOWN", "BITMAP", "DRAWING", "AUDIO", "VIDEO", "MULTIMEDIA", "OFFICE", "TEXT", "EXECUTABLE", "ARCHIVE", "3D") default NULL,
-  oi_major_mime ENUM("unknown", "application", "audio", "image", "text", "video", "message", "model", "multipart", "chemical") NOT NULL default "unknown",
-  oi_minor_mime varbinary(100) NOT NULL default "unknown",
-  oi_deleted tinyint unsigned NOT NULL default 0,
-  oi_sha1 varbinary(32) NOT NULL default ''
-) /*$wgDBTableOptions*/;
-
-INSERT INTO /*_*/oldimage_tmp
-       SELECT oi_name, oi_archive_name, oi_size, oi_width, oi_height, oi_bits,
-       oi_description, oi_user, oi_user_text, oi_timestamp, oi_metadata,
-       oi_media_type, oi_major_mime, oi_minor_mime, oi_deleted, oi_sha1
-               FROM /*_*/oldimage;
-
-DROP TABLE /*_*/oldimage;
-
-ALTER TABLE oldimage_tmp RENAME TO /*_*/oldimage;
-
-CREATE INDEX /*i*/oi_usertext_timestamp ON /*_*/oldimage (oi_user_text,oi_timestamp);
-CREATE INDEX /*i*/oi_name_timestamp ON /*_*/oldimage (oi_name,oi_timestamp);
--- oi_archive_name truncated to 14 to avoid key length overflow
-CREATE INDEX /*i*/oi_name_archive_name ON /*_*/oldimage (oi_name,oi_archive_name(14));
-CREATE INDEX /*i*/oi_sha1 ON /*_*/oldimage (oi_sha1(10));
-
--- filearchive
-
-CREATE TABLE /*_*/filearchive_tmp (
-  -- Unique row id
-  fa_id int NOT NULL PRIMARY KEY AUTO_INCREMENT,
-
-  -- Original base filename; key to image.img_name, page.page_title, etc
-  fa_name varchar(255) binary NOT NULL default '',
-
-  -- Filename of archived file, if an old revision
-  fa_archive_name varchar(255) binary default '',
-
-  -- Which storage bin (directory tree or object store) the file data
-  -- is stored in. Should be 'deleted' for files that have been deleted;
-  -- any other bin is not yet in use.
-  fa_storage_group varbinary(16),
-
-  -- SHA-1 of the file contents plus extension, used as a key for storage.
-  -- eg 8f8a562add37052a1848ff7771a2c515db94baa9.jpg
-  --
-  -- If NULL, the file was missing at deletion time or has been purged
-  -- from the archival storage.
-  fa_storage_key varbinary(64) default '',
-
-  -- Deletion information, if this file is deleted.
-  fa_deleted_user int,
-  fa_deleted_timestamp binary(14) default '',
-  fa_deleted_reason varbinary(767) default '',
-
-  -- Duped fields from image
-  fa_size int unsigned default 0,
-  fa_width int default 0,
-  fa_height int default 0,
-  fa_metadata mediumblob,
-  fa_bits int default 0,
-  fa_media_type ENUM("UNKNOWN", "BITMAP", "DRAWING", "AUDIO", "VIDEO", "MULTIMEDIA", "OFFICE", "TEXT", "EXECUTABLE", "ARCHIVE", "3D") default NULL,
-  fa_major_mime ENUM("unknown", "application", "audio", "image", "text", "video", "message", "model", "multipart", "chemical") default "unknown",
-  fa_minor_mime varbinary(100) default "unknown",
-  fa_description varbinary(767),
-  fa_user int unsigned default 0,
-  fa_user_text varchar(255) binary,
-  fa_timestamp binary(14) default '',
-
-  -- Visibility of deleted revisions, bitfield
-  fa_deleted tinyint unsigned NOT NULL default 0,
-
-  -- sha1 hash of file content
-  fa_sha1 varbinary(32) NOT NULL default ''
-) /*$wgDBTableOptions*/;
-
-INSERT INTO /*_*/filearchive_tmp
-       SELECT fa_id, fa_name, fa_archive_name, fa_storage_group, fa_storage_key, fa_deleted_user, fa_deleted_timestamp,
-       fa_deleted_reason, fa_size, fa_width, fa_height, fa_metadata, fa_bits, fa_media_type, fa_major_mime,
-       fa_minor_mime, fa_description, fa_user, fa_user_text, fa_timestamp, fa_deleted, fa_sha1
-               FROM /*_*/filearchive;
-
-DROP TABLE /*_*/filearchive;
-
-ALTER TABLE /*_*/filearchive_tmp RENAME TO /*_*/filearchive;
-
--- pick out by image name
-CREATE INDEX /*i*/fa_name ON /*_*/filearchive (fa_name, fa_timestamp);
--- pick out dupe files
-CREATE INDEX /*i*/fa_storage_group ON /*_*/filearchive (fa_storage_group, fa_storage_key);
--- sort by deletion time
-CREATE INDEX /*i*/fa_deleted_timestamp ON /*_*/filearchive (fa_deleted_timestamp);
--- sort by uploader
-CREATE INDEX /*i*/fa_user_timestamp ON /*_*/filearchive (fa_user_text,fa_timestamp);
--- find file by sha1, 10 bytes will be enough for hashes to be indexed
-CREATE INDEX /*i*/fa_sha1 ON /*_*/filearchive (fa_sha1(10));
-
--- uploadstash
-
-CREATE TABLE /*_*/uploadstash_tmp (
-  us_id int unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT,
-
-  -- the user who uploaded the file.
-  us_user int unsigned NOT NULL,
-
-  -- file key. this is how applications actually search for the file.
-  -- this might go away, or become the primary key.
-  us_key varchar(255) NOT NULL,
-
-  -- the original path
-  us_orig_path varchar(255) NOT NULL,
-
-  -- the temporary path at which the file is actually stored
-  us_path varchar(255) NOT NULL,
-
-  -- which type of upload the file came from (sometimes)
-  us_source_type varchar(50),
-
-  -- the date/time on which the file was added
-  us_timestamp varbinary(14) NOT NULL,
-
-  us_status varchar(50) NOT NULL,
-
-  -- chunk counter starts at 0, current offset is stored in us_size
-  us_chunk_inx int unsigned NULL,
-
-  -- Serialized file properties from FSFile::getProps()
-  us_props blob,
-
-  -- file size in bytes
-  us_size int unsigned NOT NULL,
-  -- this hash comes from FSFile::getSha1Base36(), and is 31 characters
-  us_sha1 varchar(31) NOT NULL,
-  us_mime varchar(255),
-  -- Media type as defined by the MEDIATYPE_xxx constants, should duplicate definition in the image table
-  us_media_type ENUM("UNKNOWN", "BITMAP", "DRAWING", "AUDIO", "VIDEO", "MULTIMEDIA", "OFFICE", "TEXT", "EXECUTABLE", "ARCHIVE", "3D") default NULL,
-  -- image-specific properties
-  us_image_width int unsigned,
-  us_image_height int unsigned,
-  us_image_bits smallint unsigned
-
-) /*$wgDBTableOptions*/;
-
-INSERT INTO /*_*/uploadstash_tmp
-       SELECT us_id, us_user, us_key, us_orig_path, us_path, us_source_type,
-       us_timestamp, us_status, us_chunk_inx, us_props, us_size, us_sha1, us_mime,
-       us_media_type, us_image_width, us_image_height, us_image_bits
-               FROM /*_*/uploadstash;
-
-DROP TABLE uploadstash;
-
-ALTER TABLE /*_*/uploadstash_tmp RENAME TO /*_*/uploadstash;
-
--- sometimes there's a delete for all of a user's stuff.
-CREATE INDEX /*i*/us_user ON /*_*/uploadstash (us_user);
--- pick out files by key, enforce key uniqueness
-CREATE UNIQUE INDEX /*i*/us_key ON /*_*/uploadstash (us_key);
--- the abandoned upload cleanup script needs this
-CREATE INDEX /*i*/us_timestamp ON /*_*/uploadstash (us_timestamp);
+-- In theory all the stuff below would be needed to change the ENUM. But in
+-- practice sqlite3 ignores the list of values and stores an "ENUM" as TEXT,
+-- making this a no-op. So for efficiency and to avoid screwing up tables that
+-- are otherwise correct from tables.sql let's just skip it.
+-- (see code review on I7bf4ad01 and I335cb8d for details).
+
+---- image
+--
+--CREATE TABLE /*_*/image_tmp (
+--  -- Filename.
+--  -- This is also the title of the associated description page,
+--  -- which will be in namespace 6 (NS_FILE).
+--  img_name varchar(255) binary NOT NULL default '' PRIMARY KEY,
+--
+--  -- File size in bytes.
+--  img_size int unsigned NOT NULL default 0,
+--
+--  -- For images, size in pixels.
+--  img_width int NOT NULL default 0,
+--  img_height int NOT NULL default 0,
+--
+--  -- Extracted Exif metadata stored as a serialized PHP array.
+--  img_metadata mediumblob NOT NULL,
+--
+--  -- For images, bits per pixel if known.
+--  img_bits int NOT NULL default 0,
+--
+--  -- Media type as defined by the MEDIATYPE_xxx constants
+--  img_media_type ENUM("UNKNOWN", "BITMAP", "DRAWING", "AUDIO", "VIDEO", "MULTIMEDIA", "OFFICE", "TEXT", "EXECUTABLE", "ARCHIVE", "3D") default NULL,
+--
+--  -- major part of a MIME media type as defined by IANA
+--  -- see https://www.iana.org/assignments/media-types/
+--  -- for "chemical" cf. http://dx.doi.org/10.1021/ci9803233 by the ACS
+--  img_major_mime ENUM("unknown", "application", "audio", "image", "text", "video", "message", "model", "multipart", "chemical") NOT NULL default "unknown",
+--
+--  -- minor part of a MIME media type as defined by IANA
+--  -- the minor parts are not required to adher to any standard
+--  -- but should be consistent throughout the database
+--  -- see https://www.iana.org/assignments/media-types/
+--  img_minor_mime varbinary(100) NOT NULL default "unknown",
+--
+--  -- Description field as entered by the uploader.
+--  -- This is displayed in image upload history and logs.
+--  img_description varbinary(767) NOT NULL,
+--
+--  -- user_id and user_name of uploader.
+--  img_user int unsigned NOT NULL default 0,
+--  img_user_text varchar(255) binary NOT NULL,
+--
+--  -- Time of the upload.
+--  img_timestamp varbinary(14) NOT NULL default '',
+--
+--  -- SHA-1 content hash in base-36
+--  img_sha1 varbinary(32) NOT NULL default ''
+--) /*$wgDBTableOptions*/;
+--
+--INSERT INTO /*_*/image_tmp
+--     SELECT img_name, img_size, img_width, img_height, img_metadata, img_bits,
+--     img_media_type, img_major_mime, img_minor_mime, img_description,
+--     img_user, img_user_text, img_timestamp, img_sha1
+--             FROM /*_*/image;
+--
+--DROP TABLE /*_*/image;
+--
+--ALTER TABLE /*_*/image_tmp RENAME TO /*_*/image;
+--
+---- Used by Special:Newimages and ApiQueryAllImages
+--CREATE INDEX /*i*/img_user_timestamp ON /*_*/image (img_user,img_timestamp);
+--CREATE INDEX /*i*/img_usertext_timestamp ON /*_*/image (img_user_text,img_timestamp);
+---- Used by Special:ListFiles for sort-by-size
+--CREATE INDEX /*i*/img_size ON /*_*/image (img_size);
+---- Used by Special:Newimages and Special:ListFiles
+--CREATE INDEX /*i*/img_timestamp ON /*_*/image (img_timestamp);
+---- Used in API and duplicate search
+--CREATE INDEX /*i*/img_sha1 ON /*_*/image (img_sha1(10));
+---- Used to get media of one type
+--CREATE INDEX /*i*/img_media_mime ON /*_*/image (img_media_type,img_major_mime,img_minor_mime);
+--
+---- oldimage
+--
+--CREATE TABLE /*_*/oldimage_tmp (
+--  -- Base filename: key to image.img_name
+--  oi_name varchar(255) binary NOT NULL default '',
+--
+--  -- Filename of the archived file.
+--  -- This is generally a timestamp and '!' prepended to the base name.
+--  oi_archive_name varchar(255) binary NOT NULL default '',
+--
+--  -- Other fields as in image...
+--  oi_size int unsigned NOT NULL default 0,
+--  oi_width int NOT NULL default 0,
+--  oi_height int NOT NULL default 0,
+--  oi_bits int NOT NULL default 0,
+--  oi_description varbinary(767) NOT NULL,
+--  oi_user int unsigned NOT NULL default 0,
+--  oi_user_text varchar(255) binary NOT NULL,
+--  oi_timestamp binary(14) NOT NULL default '',
+--
+--  oi_metadata mediumblob NOT NULL,
+--  oi_media_type ENUM("UNKNOWN", "BITMAP", "DRAWING", "AUDIO", "VIDEO", "MULTIMEDIA", "OFFICE", "TEXT", "EXECUTABLE", "ARCHIVE", "3D") default NULL,
+--  oi_major_mime ENUM("unknown", "application", "audio", "image", "text", "video", "message", "model", "multipart", "chemical") NOT NULL default "unknown",
+--  oi_minor_mime varbinary(100) NOT NULL default "unknown",
+--  oi_deleted tinyint unsigned NOT NULL default 0,
+--  oi_sha1 varbinary(32) NOT NULL default ''
+--) /*$wgDBTableOptions*/;
+--
+--INSERT INTO /*_*/oldimage_tmp
+--     SELECT oi_name, oi_archive_name, oi_size, oi_width, oi_height, oi_bits,
+--     oi_description, oi_user, oi_user_text, oi_timestamp, oi_metadata,
+--     oi_media_type, oi_major_mime, oi_minor_mime, oi_deleted, oi_sha1
+--             FROM /*_*/oldimage;
+--
+--DROP TABLE /*_*/oldimage;
+--
+--ALTER TABLE oldimage_tmp RENAME TO /*_*/oldimage;
+--
+--CREATE INDEX /*i*/oi_usertext_timestamp ON /*_*/oldimage (oi_user_text,oi_timestamp);
+--CREATE INDEX /*i*/oi_name_timestamp ON /*_*/oldimage (oi_name,oi_timestamp);
+---- oi_archive_name truncated to 14 to avoid key length overflow
+--CREATE INDEX /*i*/oi_name_archive_name ON /*_*/oldimage (oi_name,oi_archive_name(14));
+--CREATE INDEX /*i*/oi_sha1 ON /*_*/oldimage (oi_sha1(10));
+--
+---- filearchive
+--
+--CREATE TABLE /*_*/filearchive_tmp (
+--  -- Unique row id
+--  fa_id int NOT NULL PRIMARY KEY AUTO_INCREMENT,
+--
+--  -- Original base filename; key to image.img_name, page.page_title, etc
+--  fa_name varchar(255) binary NOT NULL default '',
+--
+--  -- Filename of archived file, if an old revision
+--  fa_archive_name varchar(255) binary default '',
+--
+--  -- Which storage bin (directory tree or object store) the file data
+--  -- is stored in. Should be 'deleted' for files that have been deleted;
+--  -- any other bin is not yet in use.
+--  fa_storage_group varbinary(16),
+--
+--  -- SHA-1 of the file contents plus extension, used as a key for storage.
+--  -- eg 8f8a562add37052a1848ff7771a2c515db94baa9.jpg
+--  --
+--  -- If NULL, the file was missing at deletion time or has been purged
+--  -- from the archival storage.
+--  fa_storage_key varbinary(64) default '',
+--
+--  -- Deletion information, if this file is deleted.
+--  fa_deleted_user int,
+--  fa_deleted_timestamp binary(14) default '',
+--  fa_deleted_reason varbinary(767) default '',
+--
+--  -- Duped fields from image
+--  fa_size int unsigned default 0,
+--  fa_width int default 0,
+--  fa_height int default 0,
+--  fa_metadata mediumblob,
+--  fa_bits int default 0,
+--  fa_media_type ENUM("UNKNOWN", "BITMAP", "DRAWING", "AUDIO", "VIDEO", "MULTIMEDIA", "OFFICE", "TEXT", "EXECUTABLE", "ARCHIVE", "3D") default NULL,
+--  fa_major_mime ENUM("unknown", "application", "audio", "image", "text", "video", "message", "model", "multipart", "chemical") default "unknown",
+--  fa_minor_mime varbinary(100) default "unknown",
+--  fa_description varbinary(767),
+--  fa_user int unsigned default 0,
+--  fa_user_text varchar(255) binary,
+--  fa_timestamp binary(14) default '',
+--
+--  -- Visibility of deleted revisions, bitfield
+--  fa_deleted tinyint unsigned NOT NULL default 0,
+--
+--  -- sha1 hash of file content
+--  fa_sha1 varbinary(32) NOT NULL default ''
+--) /*$wgDBTableOptions*/;
+--
+--INSERT INTO /*_*/filearchive_tmp
+--     SELECT fa_id, fa_name, fa_archive_name, fa_storage_group, fa_storage_key, fa_deleted_user, fa_deleted_timestamp,
+--     fa_deleted_reason, fa_size, fa_width, fa_height, fa_metadata, fa_bits, fa_media_type, fa_major_mime,
+--     fa_minor_mime, fa_description, fa_user, fa_user_text, fa_timestamp, fa_deleted, fa_sha1
+--             FROM /*_*/filearchive;
+--
+--DROP TABLE /*_*/filearchive;
+--
+--ALTER TABLE /*_*/filearchive_tmp RENAME TO /*_*/filearchive;
+--
+---- pick out by image name
+--CREATE INDEX /*i*/fa_name ON /*_*/filearchive (fa_name, fa_timestamp);
+---- pick out dupe files
+--CREATE INDEX /*i*/fa_storage_group ON /*_*/filearchive (fa_storage_group, fa_storage_key);
+---- sort by deletion time
+--CREATE INDEX /*i*/fa_deleted_timestamp ON /*_*/filearchive (fa_deleted_timestamp);
+---- sort by uploader
+--CREATE INDEX /*i*/fa_user_timestamp ON /*_*/filearchive (fa_user_text,fa_timestamp);
+---- find file by sha1, 10 bytes will be enough for hashes to be indexed
+--CREATE INDEX /*i*/fa_sha1 ON /*_*/filearchive (fa_sha1(10));
+--
+---- uploadstash
+--
+--CREATE TABLE /*_*/uploadstash_tmp (
+--  us_id int unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT,
+--
+--  -- the user who uploaded the file.
+--  us_user int unsigned NOT NULL,
+--
+--  -- file key. this is how applications actually search for the file.
+--  -- this might go away, or become the primary key.
+--  us_key varchar(255) NOT NULL,
+--
+--  -- the original path
+--  us_orig_path varchar(255) NOT NULL,
+--
+--  -- the temporary path at which the file is actually stored
+--  us_path varchar(255) NOT NULL,
+--
+--  -- which type of upload the file came from (sometimes)
+--  us_source_type varchar(50),
+--
+--  -- the date/time on which the file was added
+--  us_timestamp varbinary(14) NOT NULL,
+--
+--  us_status varchar(50) NOT NULL,
+--
+--  -- chunk counter starts at 0, current offset is stored in us_size
+--  us_chunk_inx int unsigned NULL,
+--
+--  -- Serialized file properties from FSFile::getProps()
+--  us_props blob,
+--
+--  -- file size in bytes
+--  us_size int unsigned NOT NULL,
+--  -- this hash comes from FSFile::getSha1Base36(), and is 31 characters
+--  us_sha1 varchar(31) NOT NULL,
+--  us_mime varchar(255),
+--  -- Media type as defined by the MEDIATYPE_xxx constants, should duplicate definition in the image table
+--  us_media_type ENUM("UNKNOWN", "BITMAP", "DRAWING", "AUDIO", "VIDEO", "MULTIMEDIA", "OFFICE", "TEXT", "EXECUTABLE", "ARCHIVE", "3D") default NULL,
+--  -- image-specific properties
+--  us_image_width int unsigned,
+--  us_image_height int unsigned,
+--  us_image_bits smallint unsigned
+--
+--) /*$wgDBTableOptions*/;
+--
+--INSERT INTO /*_*/uploadstash_tmp
+--     SELECT us_id, us_user, us_key, us_orig_path, us_path, us_source_type,
+--     us_timestamp, us_status, us_chunk_inx, us_props, us_size, us_sha1, us_mime,
+--     us_media_type, us_image_width, us_image_height, us_image_bits
+--             FROM /*_*/uploadstash;
+--
+--DROP TABLE uploadstash;
+--
+--ALTER TABLE /*_*/uploadstash_tmp RENAME TO /*_*/uploadstash;
+--
+---- sometimes there's a delete for all of a user's stuff.
+--CREATE INDEX /*i*/us_user ON /*_*/uploadstash (us_user);
+---- pick out files by key, enforce key uniqueness
+--CREATE UNIQUE INDEX /*i*/us_key ON /*_*/uploadstash (us_key);
+---- the abandoned upload cleanup script needs this
+--CREATE INDEX /*i*/us_timestamp ON /*_*/uploadstash (us_timestamp);
index f743b55..d74c3a6 100644 (file)
@@ -177,7 +177,7 @@ CREATE TABLE /*_*/image_tmp (
   img_height int NOT NULL default 0,
   img_metadata mediumblob NOT NULL,
   img_bits int NOT NULL default 0,
-  img_media_type ENUM("UNKNOWN", "BITMAP", "DRAWING", "AUDIO", "VIDEO", "MULTIMEDIA", "OFFICE", "TEXT", "EXECUTABLE", "ARCHIVE") default NULL,
+  img_media_type ENUM("UNKNOWN", "BITMAP", "DRAWING", "AUDIO", "VIDEO", "MULTIMEDIA", "OFFICE", "TEXT", "EXECUTABLE", "ARCHIVE", "3D") default NULL,
   img_major_mime ENUM("unknown", "application", "audio", "image", "text", "video", "message", "model", "multipart", "chemical") NOT NULL default "unknown",
   img_minor_mime varbinary(100) NOT NULL default "unknown",
   img_description varbinary(767) NOT NULL default '',
@@ -224,7 +224,7 @@ CREATE TABLE /*_*/oldimage_tmp (
   oi_user_text varchar(255) binary NOT NULL,
   oi_timestamp binary(14) NOT NULL default '',
   oi_metadata mediumblob NOT NULL,
-  oi_media_type ENUM("UNKNOWN", "BITMAP", "DRAWING", "AUDIO", "VIDEO", "MULTIMEDIA", "OFFICE", "TEXT", "EXECUTABLE", "ARCHIVE") default NULL,
+  oi_media_type ENUM("UNKNOWN", "BITMAP", "DRAWING", "AUDIO", "VIDEO", "MULTIMEDIA", "OFFICE", "TEXT", "EXECUTABLE", "ARCHIVE", "3D") default NULL,
   oi_major_mime ENUM("unknown", "application", "audio", "image", "text", "video", "message", "model", "multipart", "chemical") NOT NULL default "unknown",
   oi_minor_mime varbinary(100) NOT NULL default "unknown",
   oi_deleted tinyint unsigned NOT NULL default 0,
@@ -250,59 +250,7 @@ CREATE INDEX /*i*/oi_sha1 ON /*_*/oldimage (oi_sha1(10));
 
 COMMIT;
 
-BEGIN;
-
-DROP TABLE IF EXISTS /*_*/filearchive_tmp;
-CREATE TABLE /*_*/filearchive_tmp (
-  fa_id int NOT NULL PRIMARY KEY AUTO_INCREMENT,
-  fa_name varchar(255) binary NOT NULL default '',
-  fa_archive_name varchar(255) binary default '',
-  fa_storage_group varbinary(16),
-  fa_storage_key varbinary(64) default '',
-  fa_deleted_user int,
-  fa_deleted_timestamp binary(14) default '',
-  fa_deleted_reason varbinary(767) default '',
-  fa_deleted_reason_id bigint unsigned NOT NULL DEFAULT 0,
-  fa_size int unsigned default 0,
-  fa_width int default 0,
-  fa_height int default 0,
-  fa_metadata mediumblob,
-  fa_bits int default 0,
-  fa_media_type ENUM("UNKNOWN", "BITMAP", "DRAWING", "AUDIO", "VIDEO", "MULTIMEDIA", "OFFICE", "TEXT", "EXECUTABLE", "ARCHIVE") default NULL,
-  fa_major_mime ENUM("unknown", "application", "audio", "image", "text", "video", "message", "model", "multipart", "chemical") default "unknown",
-  fa_minor_mime varbinary(100) default "unknown",
-  fa_description varbinary(767) default '',
-  fa_description_id bigint unsigned NOT NULL DEFAULT 0,
-  fa_user int unsigned default 0,
-  fa_user_text varchar(255) binary,
-  fa_timestamp binary(14) default '',
-  fa_deleted tinyint unsigned NOT NULL default 0,
-  fa_sha1 varbinary(32) NOT NULL default ''
-) /*$wgDBTableOptions*/;
-
-INSERT OR IGNORE INTO /*_*/filearchive_tmp (
-       fa_id, fa_name, fa_archive_name, fa_storage_group, fa_storage_key,
-       fa_deleted_user, fa_deleted_timestamp, fa_deleted_reason, fa_size,
-       fa_width, fa_height, fa_metadata, fa_bits, fa_media_type, fa_major_mime,
-       fa_minor_mime, fa_description, fa_user, fa_user_text, fa_timestamp,
-       fa_deleted, fa_sha1)
-  SELECT
-       fa_id, fa_name, fa_archive_name, fa_storage_group, fa_storage_key,
-       fa_deleted_user, fa_deleted_timestamp, fa_deleted_reason, fa_size,
-       fa_width, fa_height, fa_metadata, fa_bits, fa_media_type, fa_major_mime,
-       fa_minor_mime, fa_description, fa_user, fa_user_text, fa_timestamp,
-       fa_deleted, fa_sha1
-  FROM /*_*/filearchive;
-
-DROP TABLE /*_*/filearchive;
-ALTER TABLE /*_*/filearchive_tmp RENAME TO /*_*/filearchive;
-CREATE INDEX /*i*/fa_name ON /*_*/filearchive (fa_name, fa_timestamp);
-CREATE INDEX /*i*/fa_storage_group ON /*_*/filearchive (fa_storage_group, fa_storage_key);
-CREATE INDEX /*i*/fa_deleted_timestamp ON /*_*/filearchive (fa_deleted_timestamp);
-CREATE INDEX /*i*/fa_user_timestamp ON /*_*/filearchive (fa_user_text,fa_timestamp);
-CREATE INDEX /*i*/fa_sha1 ON /*_*/filearchive (fa_sha1(10));
-
-COMMIT;
+-- filearchive is done in patch-filearchive-fa_description_id.sql
 
 BEGIN;
 
diff --git a/maintenance/sqlite/archives/patch-drop-ct_tag.sql b/maintenance/sqlite/archives/patch-drop-ct_tag.sql
new file mode 100644 (file)
index 0000000..d5fd77f
--- /dev/null
@@ -0,0 +1,23 @@
+-- T185355
+
+CREATE TABLE /*_*/change_tag_tmp (
+  ct_id int unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT,
+  ct_rc_id int NULL,
+  ct_log_id int unsigned NULL,
+  ct_rev_id int unsigned NULL,
+  ct_params blob NULL,
+  ct_tag_id int unsigned NOT NULL
+) /*$wgDBTableOptions*/;
+
+INSERT INTO /*_*/change_tag_tmp
+       SELECT ct_id, ct_rc_id, ct_log_id, ct_rev_id, ct_params, ct_tag_id
+               FROM /*_*/change_tag;
+
+DROP TABLE /*_*/change_tag;
+
+ALTER TABLE /*_*/change_tag_tmp RENAME TO /*_*/change_tag;
+
+CREATE UNIQUE INDEX /*i*/change_tag_rc_tag_id ON /*_*/change_tag (ct_rc_id,ct_tag_id);
+CREATE UNIQUE INDEX /*i*/change_tag_log_tag_id ON /*_*/change_tag (ct_log_id,ct_tag_id);
+CREATE UNIQUE INDEX /*i*/change_tag_rev_tag_id ON /*_*/change_tag (ct_rev_id,ct_tag_id);
+CREATE INDEX /*i*/change_tag_tag_id_id ON /*_*/change_tag (ct_tag_id,ct_rc_id,ct_rev_id,ct_log_id);
diff --git a/maintenance/sqlite/archives/patch-filearchive-fa_actor.sql b/maintenance/sqlite/archives/patch-filearchive-fa_actor.sql
new file mode 100644 (file)
index 0000000..179c29c
--- /dev/null
@@ -0,0 +1,61 @@
+--
+-- patch-filearchive-fa_actor.sql
+--
+-- Split from patch-actor-table.sql to work around SQLite unconditionally running
+-- patch-add-3d.sql on a fresh install, which wipes out fa_actor.
+
+BEGIN;
+
+DROP TABLE IF EXISTS /*_*/filearchive_tmp;
+CREATE TABLE /*_*/filearchive_tmp (
+  fa_id int NOT NULL PRIMARY KEY AUTO_INCREMENT,
+  fa_name varchar(255) binary NOT NULL default '',
+  fa_archive_name varchar(255) binary default '',
+  fa_storage_group varbinary(16),
+  fa_storage_key varbinary(64) default '',
+  fa_deleted_user int,
+  fa_deleted_timestamp binary(14) default '',
+  fa_deleted_reason varbinary(767) default '',
+  fa_deleted_reason_id bigint unsigned NOT NULL DEFAULT 0,
+  fa_size int unsigned default 0,
+  fa_width int default 0,
+  fa_height int default 0,
+  fa_metadata mediumblob,
+  fa_bits int default 0,
+  fa_media_type ENUM("UNKNOWN", "BITMAP", "DRAWING", "AUDIO", "VIDEO", "MULTIMEDIA", "OFFICE", "TEXT", "EXECUTABLE", "ARCHIVE", "3D") default NULL,
+  fa_major_mime ENUM("unknown", "application", "audio", "image", "text", "video", "message", "model", "multipart", "chemical") default "unknown",
+  fa_minor_mime varbinary(100) default "unknown",
+  fa_description varbinary(767) default '',
+  fa_description_id bigint unsigned NOT NULL DEFAULT 0,
+  fa_user int unsigned default 0,
+  fa_user_text varchar(255) binary DEFAULT '',
+  fa_actor bigint unsigned NOT NULL DEFAULT 0,
+  fa_timestamp binary(14) default '',
+  fa_deleted tinyint unsigned NOT NULL default 0,
+  fa_sha1 varbinary(32) NOT NULL default ''
+) /*$wgDBTableOptions*/;
+
+INSERT OR IGNORE INTO /*_*/filearchive_tmp (
+       fa_id, fa_name, fa_archive_name, fa_storage_group, fa_storage_key,
+       fa_deleted_user, fa_deleted_timestamp, fa_deleted_reason, fa_size,
+       fa_width, fa_height, fa_metadata, fa_bits, fa_media_type, fa_major_mime,
+       fa_minor_mime, fa_description, fa_user, fa_user_text, fa_timestamp,
+       fa_deleted, fa_sha1)
+  SELECT
+       fa_id, fa_name, fa_archive_name, fa_storage_group, fa_storage_key,
+       fa_deleted_user, fa_deleted_timestamp, fa_deleted_reason, fa_size,
+       fa_width, fa_height, fa_metadata, fa_bits, fa_media_type, fa_major_mime,
+       fa_minor_mime, fa_description, fa_user, fa_user_text, fa_timestamp,
+       fa_deleted, fa_sha1
+  FROM /*_*/filearchive;
+
+DROP TABLE /*_*/filearchive;
+ALTER TABLE /*_*/filearchive_tmp RENAME TO /*_*/filearchive;
+CREATE INDEX /*i*/fa_name ON /*_*/filearchive (fa_name, fa_timestamp);
+CREATE INDEX /*i*/fa_storage_group ON /*_*/filearchive (fa_storage_group, fa_storage_key);
+CREATE INDEX /*i*/fa_deleted_timestamp ON /*_*/filearchive (fa_deleted_timestamp);
+CREATE INDEX /*i*/fa_user_timestamp ON /*_*/filearchive (fa_user_text,fa_timestamp);
+CREATE INDEX /*i*/fa_sha1 ON /*_*/filearchive (fa_sha1(10));
+CREATE INDEX /*i*/fa_actor_timestamp ON /*_*/filearchive (fa_actor,fa_timestamp);
+
+COMMIT;
diff --git a/maintenance/sqlite/archives/patch-filearchive-fa_description_id.sql b/maintenance/sqlite/archives/patch-filearchive-fa_description_id.sql
new file mode 100644 (file)
index 0000000..c5361ed
--- /dev/null
@@ -0,0 +1,60 @@
+--
+-- patch-filearchive-fa_description_id.sql
+--
+-- Split from patch-comment-table.sql to work around SQLite unconditionally running
+-- patch-add-3d.sql on a fresh install, which wipes out fa_description_id and
+-- fa_deleted_reason_id.
+
+BEGIN;
+
+DROP TABLE IF EXISTS /*_*/filearchive_tmp;
+CREATE TABLE /*_*/filearchive_tmp (
+  fa_id int NOT NULL PRIMARY KEY AUTO_INCREMENT,
+  fa_name varchar(255) binary NOT NULL default '',
+  fa_archive_name varchar(255) binary default '',
+  fa_storage_group varbinary(16),
+  fa_storage_key varbinary(64) default '',
+  fa_deleted_user int,
+  fa_deleted_timestamp binary(14) default '',
+  fa_deleted_reason varbinary(767) default '',
+  fa_deleted_reason_id bigint unsigned NOT NULL DEFAULT 0,
+  fa_size int unsigned default 0,
+  fa_width int default 0,
+  fa_height int default 0,
+  fa_metadata mediumblob,
+  fa_bits int default 0,
+  fa_media_type ENUM("UNKNOWN", "BITMAP", "DRAWING", "AUDIO", "VIDEO", "MULTIMEDIA", "OFFICE", "TEXT", "EXECUTABLE", "ARCHIVE", "3D") default NULL,
+  fa_major_mime ENUM("unknown", "application", "audio", "image", "text", "video", "message", "model", "multipart", "chemical") default "unknown",
+  fa_minor_mime varbinary(100) default "unknown",
+  fa_description varbinary(767) default '',
+  fa_description_id bigint unsigned NOT NULL DEFAULT 0,
+  fa_user int unsigned default 0,
+  fa_user_text varchar(255) binary,
+  fa_timestamp binary(14) default '',
+  fa_deleted tinyint unsigned NOT NULL default 0,
+  fa_sha1 varbinary(32) NOT NULL default ''
+) /*$wgDBTableOptions*/;
+
+INSERT OR IGNORE INTO /*_*/filearchive_tmp (
+       fa_id, fa_name, fa_archive_name, fa_storage_group, fa_storage_key,
+       fa_deleted_user, fa_deleted_timestamp, fa_deleted_reason, fa_size,
+       fa_width, fa_height, fa_metadata, fa_bits, fa_media_type, fa_major_mime,
+       fa_minor_mime, fa_description, fa_user, fa_user_text, fa_timestamp,
+       fa_deleted, fa_sha1)
+  SELECT
+       fa_id, fa_name, fa_archive_name, fa_storage_group, fa_storage_key,
+       fa_deleted_user, fa_deleted_timestamp, fa_deleted_reason, fa_size,
+       fa_width, fa_height, fa_metadata, fa_bits, fa_media_type, fa_major_mime,
+       fa_minor_mime, fa_description, fa_user, fa_user_text, fa_timestamp,
+       fa_deleted, fa_sha1
+  FROM /*_*/filearchive;
+
+DROP TABLE /*_*/filearchive;
+ALTER TABLE /*_*/filearchive_tmp RENAME TO /*_*/filearchive;
+CREATE INDEX /*i*/fa_name ON /*_*/filearchive (fa_name, fa_timestamp);
+CREATE INDEX /*i*/fa_storage_group ON /*_*/filearchive (fa_storage_group, fa_storage_key);
+CREATE INDEX /*i*/fa_deleted_timestamp ON /*_*/filearchive (fa_deleted_timestamp);
+CREATE INDEX /*i*/fa_user_timestamp ON /*_*/filearchive (fa_user_text,fa_timestamp);
+CREATE INDEX /*i*/fa_sha1 ON /*_*/filearchive (fa_sha1(10));
+
+COMMIT;
index 8edc3c3..72db8c3 100644 (file)
@@ -930,6 +930,9 @@ CREATE TABLE /*_*/externallinks (
   -- which allows for fast searching for all pages under example.com with the
   -- clause:
   --      WHERE el_index LIKE 'http://com.example.%'
+  --
+  -- Note if you enable or disable PHP's intl extension, you'll need to run
+  -- maintenance/refreshExternallinksIndex.php to refresh this field.
   el_index blob NOT NULL,
 
   -- This is el_index truncated to 60 bytes to allow for sortable queries that
@@ -1211,23 +1214,6 @@ CREATE INDEX /*i*/img_sha1 ON /*_*/image (img_sha1(10));
 -- Used to get media of one type
 CREATE INDEX /*i*/img_media_mime ON /*_*/image (img_media_type,img_major_mime,img_minor_mime);
 
---
--- Temporary table to avoid blocking on an alter of image.
---
--- On large wikis like Wikimedia Commons, altering the image table is a
--- months-long process. This table is being created to avoid such an alter, and
--- will be merged back into image in the future.
---
-CREATE TABLE /*_*/image_comment_temp (
-  -- Key to img_name (ugh)
-  imgcomment_name varchar(255) binary NOT NULL,
-  -- Key to comment_id
-  imgcomment_description_id bigint unsigned NOT NULL,
-  PRIMARY KEY (imgcomment_name, imgcomment_description_id)
-) /*$wgDBTableOptions*/;
--- Ensure uniqueness
-CREATE UNIQUE INDEX /*i*/imgcomment_name ON /*_*/image_comment_temp (imgcomment_name);
-
 
 --
 -- Previous revisions of uploaded files.
@@ -1860,23 +1846,17 @@ CREATE TABLE /*_*/change_tag (
   ct_log_id int unsigned NULL,
   -- REVID for the change
   ct_rev_id int unsigned NULL,
-  -- Tag applied, this will go away and be replaced with ct_tag_id
-  ct_tag varchar(255) NOT NULL default '',
   -- Parameters for the tag; used by some extensions
   ct_params blob NULL,
-  -- Foreign key to change_tag_def row, this will be "NOT NULL" once populated
-  ct_tag_id int unsigned NULL
+  -- Foreign key to change_tag_def row
+  ct_tag_id int unsigned NOT NULL
 ) /*$wgDBTableOptions*/;
 
-CREATE INDEX /*i*/change_tag_rc_tag_nonuniq ON /*_*/change_tag (ct_rc_id,ct_tag);
-CREATE INDEX /*i*/change_tag_log_tag_nonuniq ON /*_*/change_tag (ct_log_id,ct_tag);
-CREATE INDEX /*i*/change_tag_rev_tag_nonuniq ON /*_*/change_tag (ct_rev_id,ct_tag);
 
 CREATE UNIQUE INDEX /*i*/change_tag_rc_tag_id ON /*_*/change_tag (ct_rc_id,ct_tag_id);
 CREATE UNIQUE INDEX /*i*/change_tag_log_tag_id ON /*_*/change_tag (ct_log_id,ct_tag_id);
 CREATE UNIQUE INDEX /*i*/change_tag_rev_tag_id ON /*_*/change_tag (ct_rev_id,ct_tag_id);
 -- Covering index, so we can pull all the info only out of the index.
-CREATE INDEX /*i*/change_tag_tag_id ON /*_*/change_tag (ct_tag,ct_rc_id,ct_rev_id,ct_log_id);
 CREATE INDEX /*i*/change_tag_tag_id_id ON /*_*/change_tag (ct_tag_id,ct_rc_id,ct_rev_id,ct_log_id);
 
 -- Rollup table to pull a LIST of tags simply without ugly GROUP_CONCAT
index 3b2798f..511cd03 100644 (file)
@@ -5,7 +5,7 @@
 body {
        margin: 0;
        background: #eee;
-       font-family: 'Verdana';
+       font-family: 'Verdana', sans-serif;
        color: #333;
 }
 
index 2468c71..1b2574d 100644 (file)
@@ -10,7 +10,6 @@
 .config-block {
        margin-top: 2em;
        display: block;
-
 }
 
 .config-block-label {
index b3de151..e3379ca 100644 (file)
@@ -11,9 +11,7 @@
   },
   "devDependencies": {
     "deepmerge": "1.3.2",
-    "eslint": "5.0.1",
-    "eslint-config-wikimedia": "0.8.1",
-    "eslint-plugin-qunit": "3.3.1",
+    "eslint-config-wikimedia": "0.9.0",
     "grunt": "1.0.3",
     "grunt-banana-checker": "0.6.0",
     "grunt-contrib-copy": "1.0.0",
@@ -29,8 +27,8 @@
     "karma-qunit": "2.1.0",
     "postcss-less": "2.0.0",
     "qunit": "2.6.2",
-    "stylelint": "9.2.0",
-    "stylelint-config-wikimedia": "0.4.3",
+    "stylelint": "9.6.0",
+    "stylelint-config-wikimedia": "0.5.0",
     "wdio-junit-reporter": "0.2.0",
     "wdio-mediawiki": "file:tests/selenium/wdio-mediawiki",
     "wdio-mocha-framework": "0.5.13",
index b0737e8..0385d80 100644 (file)
@@ -175,6 +175,7 @@ return [
        ],
        'jquery.async' => [
                'scripts' => 'resources/lib/jquery.async.js',
+               'deprecated' => true,
        ],
        'jquery.byteLength' => [
                'scripts' => 'resources/src/jquery/jquery.byteLength.js',
@@ -1371,7 +1372,6 @@ return [
                'dependencies' => [
                        'jquery.accessKeyLabel',
                        'mediawiki.RegExp',
-                       'mediawiki.notify',
                ],
                'targets' => [ 'desktop', 'mobile' ],
        ],
index 4e0a33d..f3a02d5 100644 (file)
@@ -1,4 +1,10 @@
 # OOUI Release History
+## v0.29.5 / 2018-11-08
+### Code
+* MenuTagMultiselectWidget: Clear input if adding valid tag (Thalia Chan)
+* TagMultiselectWidget: Rename `limit` config to `tagLimit` (Thalia Chan)
+
+
 ## v0.29.4 / 2018-11-06
 ### Features
 * TagMultiSelectWidget: Add a `limit` configuration option (Moriel Schottlender)
index bd5e764..446ee7a 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOUI v0.29.4
+ * OOUI v0.29.5
  * https://www.mediawiki.org/wiki/OOUI
  *
  * Copyright 2011–2018 OOUI Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2018-11-07T00:58:30Z
+ * Date: 2018-11-08T22:38:07Z
  */
 ( function ( OO ) {
 
index 180e9cc..66bf837 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOUI v0.29.4
+ * OOUI v0.29.5
  * https://www.mediawiki.org/wiki/OOUI
  *
  * Copyright 2011–2018 OOUI Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2018-11-07T00:58:38Z
+ * Date: 2018-11-08T22:38:15Z
  */
 .oo-ui-element-hidden {
   display: none !important;
index 2061fe1..bce0336 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOUI v0.29.4
+ * OOUI v0.29.5
  * https://www.mediawiki.org/wiki/OOUI
  *
  * Copyright 2011–2018 OOUI Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2018-11-07T00:58:38Z
+ * Date: 2018-11-08T22:38:15Z
  */
 .oo-ui-element-hidden {
   display: none !important;
index f41d24b..b95adc7 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOUI v0.29.4
+ * OOUI v0.29.5
  * https://www.mediawiki.org/wiki/OOUI
  *
  * Copyright 2011–2018 OOUI Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2018-11-07T00:58:30Z
+ * Date: 2018-11-08T22:38:07Z
  */
 ( function ( OO ) {
 
index e2c7d66..577766b 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOUI v0.29.4
+ * OOUI v0.29.5
  * https://www.mediawiki.org/wiki/OOUI
  *
  * Copyright 2011–2018 OOUI Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2018-11-07T00:58:38Z
+ * Date: 2018-11-08T22:38:15Z
  */
 .oo-ui-tool > .oo-ui-tool-link > .oo-ui-tool-checkIcon {
   display: none;
index 0de2619..ad008d4 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOUI v0.29.4
+ * OOUI v0.29.5
  * https://www.mediawiki.org/wiki/OOUI
  *
  * Copyright 2011–2018 OOUI Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2018-11-07T00:58:38Z
+ * Date: 2018-11-08T22:38:15Z
  */
 .oo-ui-tool {
   -webkit-box-sizing: border-box;
index 5167444..e0d9b3c 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOUI v0.29.4
+ * OOUI v0.29.5
  * https://www.mediawiki.org/wiki/OOUI
  *
  * Copyright 2011–2018 OOUI Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2018-11-07T00:58:30Z
+ * Date: 2018-11-08T22:38:07Z
  */
 ( function ( OO ) {
 
index 5609c07..39789c2 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOUI v0.29.4
+ * OOUI v0.29.5
  * https://www.mediawiki.org/wiki/OOUI
  *
  * Copyright 2011–2018 OOUI Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2018-11-07T00:58:38Z
+ * Date: 2018-11-08T22:38:15Z
  */
 .oo-ui-draggableElement-handle:not( .oo-ui-draggableElement-undraggable ).oo-ui-widget {
   cursor: move;
index 9b89b04..576f4b3 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOUI v0.29.4
+ * OOUI v0.29.5
  * https://www.mediawiki.org/wiki/OOUI
  *
  * Copyright 2011–2018 OOUI Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2018-11-07T00:58:38Z
+ * Date: 2018-11-08T22:38:15Z
  */
 .oo-ui-draggableElement-handle:not( .oo-ui-draggableElement-undraggable ).oo-ui-widget {
   cursor: move;
index 6a83974..be90a20 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOUI v0.29.4
+ * OOUI v0.29.5
  * https://www.mediawiki.org/wiki/OOUI
  *
  * Copyright 2011–2018 OOUI Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2018-11-07T00:58:30Z
+ * Date: 2018-11-08T22:38:07Z
  */
 ( function ( OO ) {
 
@@ -4045,10 +4045,10 @@ OO.ui.TagItemWidget.prototype.isValid = function () {
  *  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 {number} [limit] An optional limit on the number of selected options.
- *  If the limit exists and is reached, the input is disabled, not allowing
- *  for any additions. If the limit is unset or is 0, an unlimited number
- *  of items can be added.
+ * @cfg {number} [tagLimit] An optional limit on the number of selected options.
+ *  If 'tagLimit' is set and is reached, the input is disabled, not allowing any
+ *  additions. If 'tagLimit' is unset or is 0, an unlimited number of items can be
+ *  added.
  * @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
@@ -4088,7 +4088,7 @@ OO.ui.TagMultiselectWidget = function OoUiTagMultiselectWidget( config ) {
        this.allowedValues = config.allowedValues || [];
        this.allowDisplayInvalidTags = config.allowDisplayInvalidTags;
        this.hasInput = this.inputPosition !== 'none';
-       this.limit = config.limit;
+       this.tagLimit = config.tagLimit;
        this.height = null;
        this.valid = true;
 
@@ -4458,7 +4458,7 @@ OO.ui.TagMultiselectWidget.prototype.onChangeTags = function () {
        // Reset validity
        this.toggleValid(
                this.checkValidity() &&
-               ( !this.hasInput || !this.input.getValue() )
+               !( this.hasInput && this.input.getValue() )
        );
 
        if ( this.hasInput ) {
@@ -4677,15 +4677,14 @@ OO.ui.TagMultiselectWidget.prototype.addTag = function ( data, label ) {
 };
 
 /**
- * Check whether the current tags are under the limit. Returns true
- * if there is no limit set.
+ * Check whether the number of current tags is within the limit.
  *
- * @return {boolean} True if current tag count is under the limit
- *  or if there is no limit set
+ * @return {boolean} True if current tag count is within the limit or
+ *  if 'tagLimit' is not set
  */
 OO.ui.TagMultiselectWidget.prototype.isUnderLimit = function () {
-       return !this.limit ||
-               this.getItemCount() < this.limit;
+       return !this.tagLimit ||
+               this.getItemCount() < this.tagLimit;
 };
 
 /**
@@ -5248,32 +5247,27 @@ OO.ui.MenuTagMultiselectWidget.prototype.initializeMenuSelection = function () {
  * @inheritdoc
  */
 OO.ui.MenuTagMultiselectWidget.prototype.addTagFromInput = function () {
-       var inputValue = this.input.getValue(),
-               validated = false,
-               highlightedItem = this.menu.findHighlightedItem(),
-               item = this.menu.findItemFromData( inputValue );
-
-       if ( !inputValue ) {
-               return;
-       }
+       var val = this.input.getValue(),
+               // Look for a highlighted item first
+               // Then look for the element that fits the data
+               item = this.menu.findHighlightedItem() || this.menu.findItemFromData( val ),
+               data = item ? item.getData() : val,
+               isValid = this.isAllowedData( data );
 
        // Override the parent method so we add from the menu
        // rather than directly from the input
 
-       // Look for a highlighted item first
-       if ( highlightedItem ) {
-               validated = this.addTag( highlightedItem.getData(), highlightedItem.getLabel() );
-       } else if ( item ) {
-               // Look for the element that fits the data
-               validated = 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
-               validated = this.addTag( inputValue );
+       if ( !val ) {
+               return;
        }
 
-       if ( validated ) {
+       if ( isValid || this.allowDisplayInvalidTags ) {
                this.clearInput();
+               if ( item ) {
+                       this.addTag( data, item.getLabel() );
+               } else {
+                       this.addTag( val );
+               }
        }
 };
 
index 7a965b2..c81a9c9 100644 (file)
@@ -1 +1 @@
-{"version":3,"sources":["../src/intro.js.txt","../src/mixins/DraggableElement.js","../src/mixins/DraggableGroupElement.js","../src/mixins/RequestManager.js","../src/mixins/LookupElement.js","../src/layouts/TabPanelLayout.js","../src/layouts/PageLayout.js","../src/layouts/StackLayout.js","../src/layouts/MenuLayout.js","../src/layouts/BookletLayout.js","../src/layouts/IndexLayout.js","../src/widgets/ToggleWidget.js","../src/widgets/ToggleButtonWidget.js","../src/widgets/ToggleSwitchWidget.js","../src/widgets/OutlineControlsWidget.js","../src/widgets/OutlineOptionWidget.js","../src/widgets/OutlineSelectWidget.js","../src/widgets/ButtonOptionWidget.js","../src/widgets/ButtonSelectWidget.js","../src/widgets/TabOptionWidget.js","../src/widgets/TabSelectWidget.js","../src/widgets/TagItemWidget.js","../src/widgets/TagMultiselectWidget.js","../src/widgets/PopupTagMultiselectWidget.js","../src/widgets/MenuTagMultiselectWidget.js","../src/widgets/SelectFileWidget.js","../src/widgets/SearchWidget.js","../src/outro.js.txt"],"names":[],"mappings":"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","file":"oojs-ui-widgets.js","sourcesContent":["( function ( OO ) {\n\n'use strict';\n","/**\n * DraggableElement is a mixin class used to create elements that can be clicked\n * and dragged by a mouse to a new position within a group. This class must be used\n * in conjunction with OO.ui.mixin.DraggableGroupElement, which provides a container for\n * the draggable elements.\n *\n * @abstract\n * @class\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {jQuery} [$handle] The part of the element which can be used for dragging, defaults to the whole element\n * @cfg {boolean} [draggable] The items are draggable. This can change with #toggleDraggable\n *  but the draggable state should be called from the DraggableGroupElement, which updates\n *  the whole group\n */\nOO.ui.mixin.DraggableElement = function OoUiMixinDraggableElement( config ) {\n\tconfig = config || {};\n\n\t// Properties\n\tthis.index = null;\n\tthis.$handle = config.$handle || this.$element;\n\tthis.wasHandleUsed = null;\n\n\t// Initialize and events\n\tthis.$element\n\t\t.addClass( 'oo-ui-draggableElement' )\n\t\t.on( {\n\t\t\tmousedown: this.onDragMouseDown.bind( this ),\n\t\t\tdragstart: this.onDragStart.bind( this ),\n\t\t\tdragover: this.onDragOver.bind( this ),\n\t\t\tdragend: this.onDragEnd.bind( this ),\n\t\t\tdrop: this.onDrop.bind( this )\n\t\t} );\n\tthis.$handle.addClass( 'oo-ui-draggableElement-handle' );\n\tthis.toggleDraggable( config.draggable === undefined ? true : !!config.draggable );\n};\n\nOO.initClass( OO.ui.mixin.DraggableElement );\n\n/* Events */\n\n/**\n * @event dragstart\n *\n * A dragstart event is emitted when the user clicks and begins dragging an item.\n * @param {OO.ui.mixin.DraggableElement} item The item the user has clicked and is dragging with the mouse.\n */\n\n/**\n * @event dragend\n * A dragend event is emitted when the user drags an item and releases the mouse,\n * thus terminating the drag operation.\n */\n\n/**\n * @event drop\n * A drop event is emitted when the user drags an item and then releases the mouse button\n * over a valid target.\n */\n\n/* Static Properties */\n\n/**\n * @inheritdoc OO.ui.mixin.ButtonElement\n */\nOO.ui.mixin.DraggableElement.static.cancelButtonMouseDownEvents = false;\n\n/* Methods */\n\n/**\n * Change the draggable state of this widget.\n * This allows users to temporarily halt the dragging operations.\n *\n * @param {boolean} isDraggable Widget supports draggable operations\n * @fires draggable\n */\nOO.ui.mixin.DraggableElement.prototype.toggleDraggable = function ( isDraggable ) {\n\tisDraggable = isDraggable !== undefined ? !!isDraggable : !this.draggable;\n\n\tif ( this.draggable !== isDraggable ) {\n\t\tthis.draggable = isDraggable;\n\n\t\tthis.$handle.toggleClass( 'oo-ui-draggableElement-undraggable', !this.draggable );\n\n\t\t// We make the entire element draggable, not just the handle, so that\n\t\t// the whole element appears to move. wasHandleUsed prevents drags from\n\t\t// starting outside the handle\n\t\tthis.$element.prop( 'draggable', this.draggable );\n\t}\n};\n\n/**\n * Check the draggable state of this widget\n *\n * @return {boolean} Widget supports draggable operations\n */\nOO.ui.mixin.DraggableElement.prototype.isDraggable = function () {\n\treturn this.draggable;\n};\n\n/**\n * Respond to mousedown event.\n *\n * @private\n * @param {jQuery.Event} e Drag event\n */\nOO.ui.mixin.DraggableElement.prototype.onDragMouseDown = function ( e ) {\n\tif ( !this.isDraggable() ) {\n\t\treturn;\n\t}\n\n\tthis.wasHandleUsed =\n\t\t// Optimization: if the handle is the whole element this is always true\n\t\tthis.$handle[ 0 ] === this.$element[ 0 ] ||\n\t\t// Check the mousedown occurred inside the handle\n\t\tOO.ui.contains( this.$handle[ 0 ], e.target, true );\n};\n\n/**\n * Respond to dragstart event.\n *\n * @private\n * @param {jQuery.Event} e Drag event\n * @return {boolean} False if the event is cancelled\n * @fires dragstart\n */\nOO.ui.mixin.DraggableElement.prototype.onDragStart = function ( e ) {\n\tvar element = this,\n\t\tdataTransfer = e.originalEvent.dataTransfer;\n\n\tif ( !this.wasHandleUsed || !this.isDraggable() ) {\n\t\treturn false;\n\t}\n\n\t// Define drop effect\n\tdataTransfer.dropEffect = 'none';\n\tdataTransfer.effectAllowed = 'move';\n\t// Support: Firefox\n\t// We must set up a dataTransfer data property or Firefox seems to\n\t// ignore the fact the element is draggable.\n\ttry {\n\t\tdataTransfer.setData( 'application-x/OOUI-draggable', this.getIndex() );\n\t} catch ( err ) {\n\t\t// The above is only for Firefox. Move on if it fails.\n\t}\n\t// Briefly add a 'clone' class to style the browser's native drag image\n\tthis.$element.addClass( 'oo-ui-draggableElement-clone' );\n\t// Add placeholder class after the browser has rendered the clone\n\tsetTimeout( function () {\n\t\telement.$element\n\t\t\t.removeClass( 'oo-ui-draggableElement-clone' )\n\t\t\t.addClass( 'oo-ui-draggableElement-placeholder' );\n\t} );\n\t// Emit event\n\tthis.emit( 'dragstart', this );\n\treturn true;\n};\n\n/**\n * Respond to dragend event.\n *\n * @private\n * @fires dragend\n */\nOO.ui.mixin.DraggableElement.prototype.onDragEnd = function () {\n\tthis.$element.removeClass( 'oo-ui-draggableElement-placeholder' );\n\tthis.emit( 'dragend' );\n};\n\n/**\n * Handle drop event.\n *\n * @private\n * @param {jQuery.Event} e Drop event\n * @fires drop\n */\nOO.ui.mixin.DraggableElement.prototype.onDrop = function ( e ) {\n\te.preventDefault();\n\tthis.emit( 'drop', e );\n};\n\n/**\n * In order for drag/drop to work, the dragover event must\n * return false and stop propogation.\n *\n * @param {jQuery.Event} e Drag event\n * @private\n */\nOO.ui.mixin.DraggableElement.prototype.onDragOver = function ( e ) {\n\te.preventDefault();\n};\n\n/**\n * Set item index.\n * Store it in the DOM so we can access from the widget drag event\n *\n * @private\n * @param {number} index Item index\n */\nOO.ui.mixin.DraggableElement.prototype.setIndex = function ( index ) {\n\tif ( this.index !== index ) {\n\t\tthis.index = index;\n\t\tthis.$element.data( 'index', index );\n\t}\n};\n\n/**\n * Get item index\n *\n * @private\n * @return {number} Item index\n */\nOO.ui.mixin.DraggableElement.prototype.getIndex = function () {\n\treturn this.index;\n};\n","/**\n * DraggableGroupElement is a mixin class used to create a group element to\n * contain draggable elements, which are items that can be clicked and dragged by a mouse.\n * The class is used with OO.ui.mixin.DraggableElement.\n *\n * @abstract\n * @class\n * @mixins OO.ui.mixin.GroupElement\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {string} [orientation] Item orientation: 'horizontal' or 'vertical'. The orientation\n *  should match the layout of the items. Items displayed in a single row\n *  or in several rows should use horizontal orientation. The vertical orientation should only be\n *  used when the items are displayed in a single column. Defaults to 'vertical'\n * @cfg {boolean} [draggable] The items are draggable. This can change with #toggleDraggable\n */\nOO.ui.mixin.DraggableGroupElement = function OoUiMixinDraggableGroupElement( config ) {\n\t// Configuration initialization\n\tconfig = config || {};\n\n\t// Parent constructor\n\tOO.ui.mixin.GroupElement.call( this, config );\n\n\t// Properties\n\tthis.orientation = config.orientation || 'vertical';\n\tthis.dragItem = null;\n\tthis.itemKeys = {};\n\tthis.dir = null;\n\tthis.itemsOrder = null;\n\tthis.draggable = config.draggable === undefined ? true : !!config.draggable;\n\n\t// Events\n\tthis.aggregate( {\n\t\tdragstart: 'itemDragStart',\n\t\tdragend: 'itemDragEnd',\n\t\tdrop: 'itemDrop'\n\t} );\n\tthis.connect( this, {\n\t\titemDragStart: 'onItemDragStart',\n\t\titemDrop: 'onItemDropOrDragEnd',\n\t\titemDragEnd: 'onItemDropOrDragEnd'\n\t} );\n\n\t// Initialize\n\tif ( Array.isArray( config.items ) ) {\n\t\tthis.addItems( config.items );\n\t}\n\tthis.$element\n\t\t.addClass( 'oo-ui-draggableGroupElement' )\n\t\t.toggleClass( 'oo-ui-draggableGroupElement-horizontal', this.orientation === 'horizontal' );\n};\n\n/* Setup */\nOO.mixinClass( OO.ui.mixin.DraggableGroupElement, OO.ui.mixin.GroupElement );\n\n/* Events */\n\n/**\n * An item has been dragged to a new position, but not yet dropped.\n *\n * @event drag\n * @param {OO.ui.mixin.DraggableElement} item Dragged item\n * @param {number} [newIndex] New index for the item\n */\n\n/**\n * An item has been dropped at a new position.\n *\n * @event reorder\n * @param {OO.ui.mixin.DraggableElement} item Reordered item\n * @param {number} [newIndex] New index for the item\n */\n\n/**\n * Draggable state of this widget has changed.\n *\n * @event draggable\n * @param {boolean} [draggable] Widget is draggable\n */\n\n/* Methods */\n\n/**\n * Change the draggable state of this widget.\n * This allows users to temporarily halt the dragging operations.\n *\n * @param {boolean} isDraggable Widget supports draggable operations\n * @fires draggable\n */\nOO.ui.mixin.DraggableGroupElement.prototype.toggleDraggable = function ( isDraggable ) {\n\tisDraggable = isDraggable !== undefined ? !!isDraggable : !this.draggable;\n\n\tif ( this.draggable !== isDraggable ) {\n\t\tthis.draggable = isDraggable;\n\n\t\t// Tell the items their draggable state changed\n\t\tthis.getItems().forEach( function ( item ) {\n\t\t\titem.toggleDraggable( this.draggable );\n\t\t}.bind( this ) );\n\n\t\t// Emit event\n\t\tthis.emit( 'draggable', this.draggable );\n\t}\n};\n\n/**\n * Check the draggable state of this widget\n *\n * @return {boolean} Widget supports draggable operations\n */\nOO.ui.mixin.DraggableGroupElement.prototype.isDraggable = function () {\n\treturn this.draggable;\n};\n\n/**\n * Respond to item drag start event\n *\n * @private\n * @param {OO.ui.mixin.DraggableElement} item Dragged item\n */\nOO.ui.mixin.DraggableGroupElement.prototype.onItemDragStart = function ( item ) {\n\tif ( !this.isDraggable() ) {\n\t\treturn;\n\t}\n\t// Make a shallow copy of this.items so we can re-order it during previews\n\t// without affecting the original array.\n\tthis.itemsOrder = this.items.slice();\n\tthis.updateIndexes();\n\tif ( this.orientation === 'horizontal' ) {\n\t\t// Calculate and cache directionality on drag start - it's a little\n\t\t// expensive and it shouldn't change while dragging.\n\t\tthis.dir = this.$element.css( 'direction' );\n\t}\n\tthis.setDragItem( item );\n};\n\n/**\n * Update the index properties of the items\n */\nOO.ui.mixin.DraggableGroupElement.prototype.updateIndexes = function () {\n\tvar i, len;\n\n\t// Map the index of each object\n\tfor ( i = 0, len = this.itemsOrder.length; i < len; i++ ) {\n\t\tthis.itemsOrder[ i ].setIndex( i );\n\t}\n};\n\n/**\n * Handle drop or dragend event and switch the order of the items accordingly\n *\n * @private\n * @param {OO.ui.mixin.DraggableElement} item Dropped item\n * @return {OO.ui.Element} The element, for chaining\n */\nOO.ui.mixin.DraggableGroupElement.prototype.onItemDropOrDragEnd = function () {\n\tvar targetIndex, originalIndex,\n\t\titem = this.getDragItem();\n\n\t// TODO: Figure out a way to configure a list of legally droppable\n\t// elements even if they are not yet in the list\n\tif ( item ) {\n\t\toriginalIndex = this.items.indexOf( item );\n\t\t// If the item has moved forward, add one to the index to account for the left shift\n\t\ttargetIndex = item.getIndex() + ( item.getIndex() > originalIndex ? 1 : 0 );\n\t\tif ( targetIndex !== originalIndex ) {\n\t\t\tthis.reorder( this.getDragItem(), targetIndex );\n\t\t\tthis.emit( 'reorder', this.getDragItem(), targetIndex );\n\t\t}\n\t\tthis.updateIndexes();\n\t}\n\tthis.unsetDragItem();\n\t// Return false to prevent propogation\n\treturn false;\n};\n\n/**\n * Respond to dragover event\n *\n * @private\n * @param {jQuery.Event} e Dragover event\n * @fires reorder\n */\nOO.ui.mixin.DraggableGroupElement.prototype.onDragOver = function ( e ) {\n\tvar overIndex, targetIndex,\n\t\titem = this.getDragItem(),\n\t\tdragItemIndex = item.getIndex();\n\n\t// Get the OptionWidget item we are dragging over\n\toverIndex = $( e.target ).closest( '.oo-ui-draggableElement' ).data( 'index' );\n\n\tif ( overIndex !== undefined && overIndex !== dragItemIndex ) {\n\t\ttargetIndex = overIndex + ( overIndex > dragItemIndex ? 1 : 0 );\n\n\t\tif ( targetIndex > 0 ) {\n\t\t\tthis.$group.children().eq( targetIndex - 1 ).after( item.$element );\n\t\t} else {\n\t\t\tthis.$group.prepend( item.$element );\n\t\t}\n\t\t// Move item in itemsOrder array\n\t\tthis.itemsOrder.splice( overIndex, 0,\n\t\t\tthis.itemsOrder.splice( dragItemIndex, 1 )[ 0 ]\n\t\t);\n\t\tthis.updateIndexes();\n\t\tthis.emit( 'drag', item, targetIndex );\n\t}\n\t// Prevent default\n\te.preventDefault();\n};\n\n/**\n * Reorder the items in the group\n *\n * @param {OO.ui.mixin.DraggableElement} item Reordered item\n * @param {number} newIndex New index\n */\nOO.ui.mixin.DraggableGroupElement.prototype.reorder = function ( item, newIndex ) {\n\tthis.addItems( [ item ], newIndex );\n};\n\n/**\n * Set a dragged item\n *\n * @param {OO.ui.mixin.DraggableElement} item Dragged item\n */\nOO.ui.mixin.DraggableGroupElement.prototype.setDragItem = function ( item ) {\n\tif ( this.dragItem !== item ) {\n\t\tthis.dragItem = item;\n\t\tthis.$element.on( 'dragover', this.onDragOver.bind( this ) );\n\t\tthis.$element.addClass( 'oo-ui-draggableGroupElement-dragging' );\n\t}\n};\n\n/**\n * Unset the current dragged item\n */\nOO.ui.mixin.DraggableGroupElement.prototype.unsetDragItem = function () {\n\tif ( this.dragItem ) {\n\t\tthis.dragItem = null;\n\t\tthis.$element.off( 'dragover' );\n\t\tthis.$element.removeClass( 'oo-ui-draggableGroupElement-dragging' );\n\t}\n};\n\n/**\n * Get the item that is currently being dragged.\n *\n * @return {OO.ui.mixin.DraggableElement|null} The currently dragged item, or `null` if no item is being dragged\n */\nOO.ui.mixin.DraggableGroupElement.prototype.getDragItem = function () {\n\treturn this.dragItem;\n};\n","/**\n * RequestManager is a mixin that manages the lifecycle of a promise-backed request for a widget, such as\n * the {@link OO.ui.mixin.LookupElement}.\n *\n * @class\n * @abstract\n *\n * @constructor\n */\nOO.ui.mixin.RequestManager = function OoUiMixinRequestManager() {\n\tthis.requestCache = {};\n\tthis.requestQuery = null;\n\tthis.requestRequest = null;\n};\n\n/* Setup */\n\nOO.initClass( OO.ui.mixin.RequestManager );\n\n/**\n * Get request results for the current query.\n *\n * @return {jQuery.Promise} Promise object which will be passed response data as the first argument of\n *   the done event. If the request was aborted to make way for a subsequent request, this promise\n *   may not be rejected, depending on what jQuery feels like doing.\n */\nOO.ui.mixin.RequestManager.prototype.getRequestData = function () {\n\tvar widget = this,\n\t\tvalue = this.getRequestQuery(),\n\t\tdeferred = $.Deferred(),\n\t\tourRequest;\n\n\tthis.abortRequest();\n\tif ( Object.prototype.hasOwnProperty.call( this.requestCache, value ) ) {\n\t\tdeferred.resolve( this.requestCache[ value ] );\n\t} else {\n\t\tif ( this.pushPending ) {\n\t\t\tthis.pushPending();\n\t\t}\n\t\tthis.requestQuery = value;\n\t\tourRequest = this.requestRequest = this.getRequest();\n\t\tourRequest\n\t\t\t.always( function () {\n\t\t\t\t// We need to pop pending even if this is an old request, otherwise\n\t\t\t\t// the widget will remain pending forever.\n\t\t\t\t// TODO: this assumes that an aborted request will fail or succeed soon after\n\t\t\t\t// being aborted, or at least eventually. It would be nice if we could popPending()\n\t\t\t\t// at abort time, but only if we knew that we hadn't already called popPending()\n\t\t\t\t// for that request.\n\t\t\t\tif ( widget.popPending ) {\n\t\t\t\t\twidget.popPending();\n\t\t\t\t}\n\t\t\t} )\n\t\t\t.done( function ( response ) {\n\t\t\t\t// If this is an old request (and aborting it somehow caused it to still succeed),\n\t\t\t\t// ignore its success completely\n\t\t\t\tif ( ourRequest === widget.requestRequest ) {\n\t\t\t\t\twidget.requestQuery = null;\n\t\t\t\t\twidget.requestRequest = null;\n\t\t\t\t\twidget.requestCache[ value ] = widget.getRequestCacheDataFromResponse( response );\n\t\t\t\t\tdeferred.resolve( widget.requestCache[ value ] );\n\t\t\t\t}\n\t\t\t} )\n\t\t\t.fail( function () {\n\t\t\t\t// If this is an old request (or a request failing because it's being aborted),\n\t\t\t\t// ignore its failure completely\n\t\t\t\tif ( ourRequest === widget.requestRequest ) {\n\t\t\t\t\twidget.requestQuery = null;\n\t\t\t\t\twidget.requestRequest = null;\n\t\t\t\t\tdeferred.reject();\n\t\t\t\t}\n\t\t\t} );\n\t}\n\treturn deferred.promise();\n};\n\n/**\n * Abort the currently pending request, if any.\n *\n * @private\n */\nOO.ui.mixin.RequestManager.prototype.abortRequest = function () {\n\tvar oldRequest = this.requestRequest;\n\tif ( oldRequest ) {\n\t\t// First unset this.requestRequest to the fail handler will notice\n\t\t// that the request is no longer current\n\t\tthis.requestRequest = null;\n\t\tthis.requestQuery = null;\n\t\toldRequest.abort();\n\t}\n};\n\n/**\n * Get the query to be made.\n *\n * @protected\n * @method\n * @abstract\n * @return {string} query to be used\n */\nOO.ui.mixin.RequestManager.prototype.getRequestQuery = null;\n\n/**\n * Get a new request object of the current query value.\n *\n * @protected\n * @method\n * @abstract\n * @return {jQuery.Promise} jQuery AJAX object, or promise object with an .abort() method\n */\nOO.ui.mixin.RequestManager.prototype.getRequest = null;\n\n/**\n * Pre-process data returned by the request from #getRequest.\n *\n * The return value of this function will be cached, and any further queries for the given value\n * will use the cache rather than doing API requests.\n *\n * @protected\n * @method\n * @abstract\n * @param {Mixed} response Response from server\n * @return {Mixed} Cached result data\n */\nOO.ui.mixin.RequestManager.prototype.getRequestCacheDataFromResponse = null;\n","/**\n * LookupElement is a mixin that creates a {@link OO.ui.MenuSelectWidget menu} of suggested values for\n * a {@link OO.ui.TextInputWidget text input widget}. Suggested values are based on the characters the user types\n * into the text input field and, in general, the menu is only displayed when the user types. If a suggested value is chosen\n * from the lookup menu, that value becomes the value of the input field.\n *\n * Note that a new menu of suggested items is displayed when a value is chosen from the lookup menu. If this is\n * not the desired behavior, disable lookup menus with the #setLookupsDisabled method, then set the value, then\n * re-enable lookups.\n *\n * See the [OOUI demos][1] for an example.\n *\n * [1]: https://doc.wikimedia.org/oojs-ui/master/demos/#LookupElement-try-inputting-an-integer\n *\n * @class\n * @abstract\n * @mixins OO.ui.mixin.RequestManager\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {jQuery} [$overlay] Overlay for the lookup menu; defaults to relative positioning.\n *  See <https://www.mediawiki.org/wiki/OOUI/Concepts#Overlays>.\n * @cfg {jQuery} [$container=this.$element] The container element. The lookup menu is rendered beneath the specified element.\n * @cfg {Object} [menu] Configuration options to pass to {@link OO.ui.MenuSelectWidget menu select widget}\n * @cfg {boolean} [allowSuggestionsWhenEmpty=false] Request and display a lookup menu when the text input is empty.\n *  By default, the lookup menu is not generated and displayed until the user begins to type.\n * @cfg {boolean} [highlightFirst=true] Whether the first lookup result should be highlighted (so, that the user can\n *  take it over into the input with simply pressing return) automatically or not.\n */\nOO.ui.mixin.LookupElement = function OoUiMixinLookupElement( config ) {\n\t// Configuration initialization\n\tconfig = $.extend( { highlightFirst: true }, config );\n\n\t// Mixin constructors\n\tOO.ui.mixin.RequestManager.call( this, config );\n\n\t// Properties\n\tthis.$overlay = ( config.$overlay === true ? OO.ui.getDefaultOverlay() : config.$overlay ) || this.$element;\n\tthis.lookupMenu = new OO.ui.MenuSelectWidget( $.extend( {\n\t\twidget: this,\n\t\tinput: this,\n\t\t$floatableContainer: config.$container || this.$element\n\t}, config.menu ) );\n\n\tthis.allowSuggestionsWhenEmpty = config.allowSuggestionsWhenEmpty || false;\n\n\tthis.lookupsDisabled = false;\n\tthis.lookupInputFocused = false;\n\tthis.lookupHighlightFirstItem = config.highlightFirst;\n\n\t// Events\n\tthis.$input.on( {\n\t\tfocus: this.onLookupInputFocus.bind( this ),\n\t\tblur: this.onLookupInputBlur.bind( this ),\n\t\tmousedown: this.onLookupInputMouseDown.bind( this )\n\t} );\n\tthis.connect( this, { change: 'onLookupInputChange' } );\n\tthis.lookupMenu.connect( this, {\n\t\ttoggle: 'onLookupMenuToggle',\n\t\tchoose: 'onLookupMenuItemChoose'\n\t} );\n\n\t// Initialization\n\tthis.$input.attr( {\n\t\trole: 'combobox',\n\t\t'aria-owns': this.lookupMenu.getElementId(),\n\t\t'aria-autocomplete': 'list'\n\t} );\n\tthis.$element.addClass( 'oo-ui-lookupElement' );\n\tthis.lookupMenu.$element.addClass( 'oo-ui-lookupElement-menu' );\n\tthis.$overlay.append( this.lookupMenu.$element );\n};\n\n/* Setup */\n\nOO.mixinClass( OO.ui.mixin.LookupElement, OO.ui.mixin.RequestManager );\n\n/* Methods */\n\n/**\n * Handle input focus event.\n *\n * @protected\n * @param {jQuery.Event} e Input focus event\n */\nOO.ui.mixin.LookupElement.prototype.onLookupInputFocus = function () {\n\tthis.lookupInputFocused = true;\n\tthis.populateLookupMenu();\n};\n\n/**\n * Handle input blur event.\n *\n * @protected\n * @param {jQuery.Event} e Input blur event\n */\nOO.ui.mixin.LookupElement.prototype.onLookupInputBlur = function () {\n\tthis.closeLookupMenu();\n\tthis.lookupInputFocused = false;\n};\n\n/**\n * Handle input mouse down event.\n *\n * @protected\n * @param {jQuery.Event} e Input mouse down event\n */\nOO.ui.mixin.LookupElement.prototype.onLookupInputMouseDown = function () {\n\t// Only open the menu if the input was already focused.\n\t// This way we allow the user to open the menu again after closing it with Esc\n\t// by clicking in the input. Opening (and populating) the menu when initially\n\t// clicking into the input is handled by the focus handler.\n\tif ( this.lookupInputFocused && !this.lookupMenu.isVisible() ) {\n\t\tthis.populateLookupMenu();\n\t}\n};\n\n/**\n * Handle input change event.\n *\n * @protected\n * @param {string} value New input value\n */\nOO.ui.mixin.LookupElement.prototype.onLookupInputChange = function () {\n\tif ( this.lookupInputFocused ) {\n\t\tthis.populateLookupMenu();\n\t}\n};\n\n/**\n * Handle the lookup menu being shown/hidden.\n *\n * @protected\n * @param {boolean} visible Whether the lookup menu is now visible.\n */\nOO.ui.mixin.LookupElement.prototype.onLookupMenuToggle = function ( visible ) {\n\tif ( !visible ) {\n\t\t// When the menu is hidden, abort any active request and clear the menu.\n\t\t// This has to be done here in addition to closeLookupMenu(), because\n\t\t// MenuSelectWidget will close itself when the user presses Esc.\n\t\tthis.abortLookupRequest();\n\t\tthis.lookupMenu.clearItems();\n\t}\n};\n\n/**\n * Handle menu item 'choose' event, updating the text input value to the value of the clicked item.\n *\n * @protected\n * @param {OO.ui.MenuOptionWidget} item Selected item\n */\nOO.ui.mixin.LookupElement.prototype.onLookupMenuItemChoose = function ( item ) {\n\tthis.setValue( item.getData() );\n};\n\n/**\n * Get lookup menu.\n *\n * @private\n * @return {OO.ui.MenuSelectWidget}\n */\nOO.ui.mixin.LookupElement.prototype.getLookupMenu = function () {\n\treturn this.lookupMenu;\n};\n\n/**\n * Disable or re-enable lookups.\n *\n * When lookups are disabled, calls to #populateLookupMenu will be ignored.\n *\n * @param {boolean} disabled Disable lookups\n */\nOO.ui.mixin.LookupElement.prototype.setLookupsDisabled = function ( disabled ) {\n\tthis.lookupsDisabled = !!disabled;\n};\n\n/**\n * Open the menu. If there are no entries in the menu, this does nothing.\n *\n * @private\n * @chainable\n * @return {OO.ui.Element} The element, for chaining\n */\nOO.ui.mixin.LookupElement.prototype.openLookupMenu = function () {\n\tif ( !this.lookupMenu.isEmpty() ) {\n\t\tthis.lookupMenu.toggle( true );\n\t}\n\treturn this;\n};\n\n/**\n * Close the menu, empty it, and abort any pending request.\n *\n * @private\n * @chainable\n * @return {OO.ui.Element} The element, for chaining\n */\nOO.ui.mixin.LookupElement.prototype.closeLookupMenu = function () {\n\tthis.lookupMenu.toggle( false );\n\tthis.abortLookupRequest();\n\tthis.lookupMenu.clearItems();\n\treturn this;\n};\n\n/**\n * Request menu items based on the input's current value, and when they arrive,\n * populate the menu with these items and show the menu.\n *\n * If lookups have been disabled with #setLookupsDisabled, this function does nothing.\n *\n * @private\n * @chainable\n * @return {OO.ui.Element} The element, for chaining\n */\nOO.ui.mixin.LookupElement.prototype.populateLookupMenu = function () {\n\tvar widget = this,\n\t\tvalue = this.getValue();\n\n\tif ( this.lookupsDisabled || this.isReadOnly() ) {\n\t\treturn;\n\t}\n\n\t// If the input is empty, clear the menu, unless suggestions when empty are allowed.\n\tif ( !this.allowSuggestionsWhenEmpty && value === '' ) {\n\t\tthis.closeLookupMenu();\n\t// Skip population if there is already a request pending for the current value\n\t} else if ( value !== this.lookupQuery ) {\n\t\tthis.getLookupMenuItems()\n\t\t\t.done( function ( items ) {\n\t\t\t\twidget.lookupMenu.clearItems();\n\t\t\t\tif ( items.length ) {\n\t\t\t\t\twidget.lookupMenu\n\t\t\t\t\t\t.addItems( items )\n\t\t\t\t\t\t.toggle( true );\n\t\t\t\t\twidget.initializeLookupMenuSelection();\n\t\t\t\t} else {\n\t\t\t\t\twidget.lookupMenu.toggle( false );\n\t\t\t\t}\n\t\t\t} )\n\t\t\t.fail( function () {\n\t\t\t\twidget.lookupMenu.clearItems();\n\t\t\t\twidget.lookupMenu.toggle( false );\n\t\t\t} );\n\t}\n\n\treturn this;\n};\n\n/**\n * Highlight the first selectable item in the menu, if configured.\n *\n * @private\n * @chainable\n */\nOO.ui.mixin.LookupElement.prototype.initializeLookupMenuSelection = function () {\n\tif ( this.lookupHighlightFirstItem && !this.lookupMenu.findSelectedItem() ) {\n\t\tthis.lookupMenu.highlightItem( this.lookupMenu.findFirstSelectableItem() );\n\t}\n};\n\n/**\n * Get lookup menu items for the current query.\n *\n * @private\n * @return {jQuery.Promise} Promise object which will be passed menu items as the first argument of\n *   the done event. If the request was aborted to make way for a subsequent request, this promise\n *   will not be rejected: it will remain pending forever.\n */\nOO.ui.mixin.LookupElement.prototype.getLookupMenuItems = function () {\n\treturn this.getRequestData().then( function ( data ) {\n\t\treturn this.getLookupMenuOptionsFromData( data );\n\t}.bind( this ) );\n};\n\n/**\n * Abort the currently pending lookup request, if any.\n *\n * @private\n */\nOO.ui.mixin.LookupElement.prototype.abortLookupRequest = function () {\n\tthis.abortRequest();\n};\n\n/**\n * Get a new request object of the current lookup query value.\n *\n * @protected\n * @method\n * @abstract\n * @return {jQuery.Promise} jQuery AJAX object, or promise object with an .abort() method\n */\nOO.ui.mixin.LookupElement.prototype.getLookupRequest = null;\n\n/**\n * Pre-process data returned by the request from #getLookupRequest.\n *\n * The return value of this function will be cached, and any further queries for the given value\n * will use the cache rather than doing API requests.\n *\n * @protected\n * @method\n * @abstract\n * @param {Mixed} response Response from server\n * @return {Mixed} Cached result data\n */\nOO.ui.mixin.LookupElement.prototype.getLookupCacheDataFromResponse = null;\n\n/**\n * Get a list of menu option widgets from the (possibly cached) data returned by\n * #getLookupCacheDataFromResponse.\n *\n * @protected\n * @method\n * @abstract\n * @param {Mixed} data Cached result data, usually an array\n * @return {OO.ui.MenuOptionWidget[]} Menu items\n */\nOO.ui.mixin.LookupElement.prototype.getLookupMenuOptionsFromData = null;\n\n/**\n * Set the read-only state of the widget.\n *\n * This will also disable/enable the lookups functionality.\n *\n * @param {boolean} readOnly Make input read-only\n * @chainable\n * @return {OO.ui.Element} The element, for chaining\n */\nOO.ui.mixin.LookupElement.prototype.setReadOnly = function ( readOnly ) {\n\t// Parent method\n\t// Note: Calling #setReadOnly this way assumes this is mixed into an OO.ui.TextInputWidget\n\tOO.ui.TextInputWidget.prototype.setReadOnly.call( this, readOnly );\n\n\t// During construction, #setReadOnly is called before the OO.ui.mixin.LookupElement constructor\n\tif ( this.isReadOnly() && this.lookupMenu ) {\n\t\tthis.closeLookupMenu();\n\t}\n\n\treturn this;\n};\n\n/**\n * @inheritdoc OO.ui.mixin.RequestManager\n */\nOO.ui.mixin.LookupElement.prototype.getRequestQuery = function () {\n\treturn this.getValue();\n};\n\n/**\n * @inheritdoc OO.ui.mixin.RequestManager\n */\nOO.ui.mixin.LookupElement.prototype.getRequest = function () {\n\treturn this.getLookupRequest();\n};\n\n/**\n * @inheritdoc OO.ui.mixin.RequestManager\n */\nOO.ui.mixin.LookupElement.prototype.getRequestCacheDataFromResponse = function ( response ) {\n\treturn this.getLookupCacheDataFromResponse( response );\n};\n","/**\n * TabPanelLayouts are used within {@link OO.ui.IndexLayout index layouts} to create tab panels that\n * users can select and display from the index's optional {@link OO.ui.TabSelectWidget tab}\n * navigation. TabPanels are usually not instantiated directly, rather extended to include the\n * required content and functionality.\n *\n * Each tab panel must have a unique symbolic name, which is passed to the constructor. In addition,\n * the tab panel's tab item is customized (with a label) using the #setupTabItem method. See\n * {@link OO.ui.IndexLayout IndexLayout} for an example.\n *\n * @class\n * @extends OO.ui.PanelLayout\n *\n * @constructor\n * @param {string} name Unique symbolic name of tab panel\n * @param {Object} [config] Configuration options\n * @cfg {jQuery|string|Function|OO.ui.HtmlSnippet} [label] Label for tab panel's tab\n */\nOO.ui.TabPanelLayout = function OoUiTabPanelLayout( name, config ) {\n\t// Allow passing positional parameters inside the config object\n\tif ( OO.isPlainObject( name ) && config === undefined ) {\n\t\tconfig = name;\n\t\tname = config.name;\n\t}\n\n\t// Configuration initialization\n\tconfig = $.extend( { scrollable: true }, config );\n\n\t// Parent constructor\n\tOO.ui.TabPanelLayout.parent.call( this, config );\n\n\t// Properties\n\tthis.name = name;\n\tthis.label = config.label;\n\tthis.tabItem = null;\n\tthis.active = false;\n\n\t// Initialization\n\tthis.$element\n\t\t.addClass( 'oo-ui-tabPanelLayout' )\n\t\t.attr( 'role', 'tabpanel' );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.TabPanelLayout, OO.ui.PanelLayout );\n\n/* Events */\n\n/**\n * An 'active' event is emitted when the tab panel becomes active. Tab panels become active when they are\n * shown in a index layout that is configured to display only one tab panel at a time.\n *\n * @event active\n * @param {boolean} active Tab panel is active\n */\n\n/* Methods */\n\n/**\n * Get the symbolic name of the tab panel.\n *\n * @return {string} Symbolic name of tab panel\n */\nOO.ui.TabPanelLayout.prototype.getName = function () {\n\treturn this.name;\n};\n\n/**\n * Check if tab panel is active.\n *\n * Tab panels become active when they are shown in a {@link OO.ui.IndexLayout index layout} that is configured to\n * display only one tab panel at a time. Additional CSS is applied to the tab panel's tab item to reflect the\n * active state.\n *\n * @return {boolean} Tab panel is active\n */\nOO.ui.TabPanelLayout.prototype.isActive = function () {\n\treturn this.active;\n};\n\n/**\n * Get tab item.\n *\n * The tab item allows users to access the tab panel from the index's tab\n * navigation. The tab item itself can be customized (with a label, level, etc.) using the #setupTabItem method.\n *\n * @return {OO.ui.TabOptionWidget|null} Tab option widget\n */\nOO.ui.TabPanelLayout.prototype.getTabItem = function () {\n\treturn this.tabItem;\n};\n\n/**\n * Set or unset the tab item.\n *\n * Specify a {@link OO.ui.TabOptionWidget tab option} to set it,\n * or `null` to clear the tab item. To customize the tab item itself (e.g., to set a label or tab\n * level), use #setupTabItem instead of this method.\n *\n * @param {OO.ui.TabOptionWidget|null} tabItem Tab option widget, null to clear\n * @chainable\n * @return {OO.ui.TabPanelLayout} The layout, for chaining\n */\nOO.ui.TabPanelLayout.prototype.setTabItem = function ( tabItem ) {\n\tthis.tabItem = tabItem || null;\n\tif ( tabItem ) {\n\t\tthis.setupTabItem();\n\t}\n\treturn this;\n};\n\n/**\n * Set up the tab item.\n *\n * Use this method to customize the tab item (e.g., to add a label or tab level). To set or unset\n * the tab item itself (with a {@link OO.ui.TabOptionWidget tab option} or `null`), use\n * the #setTabItem method instead.\n *\n * @param {OO.ui.TabOptionWidget} tabItem Tab option widget to set up\n * @chainable\n * @return {OO.ui.TabPanelLayout} The layout, for chaining\n */\nOO.ui.TabPanelLayout.prototype.setupTabItem = function () {\n\tthis.$element.attr( 'aria-labelledby', this.tabItem.getElementId() );\n\n\tthis.tabItem.$element.attr( 'aria-controls', this.getElementId() );\n\n\tif ( this.label ) {\n\t\tthis.tabItem.setLabel( this.label );\n\t}\n\treturn this;\n};\n\n/**\n * Set the tab panel to its 'active' state.\n *\n * Tab panels become active when they are shown in a index layout that is configured to display only\n * one tab panel at a time. Additional CSS is applied to the tab item to reflect the tab panel's\n * active state. Outside of the index context, setting the active state on a tab panel does nothing.\n *\n * @param {boolean} active Tab panel is active\n * @fires active\n */\nOO.ui.TabPanelLayout.prototype.setActive = function ( active ) {\n\tactive = !!active;\n\n\tif ( active !== this.active ) {\n\t\tthis.active = active;\n\t\tthis.$element.toggleClass( 'oo-ui-tabPanelLayout-active', this.active );\n\t\tthis.emit( 'active', this.active );\n\t}\n};\n","/**\n * PageLayouts are used within {@link OO.ui.BookletLayout booklet layouts} to create pages that users can select and display\n * from the booklet's optional {@link OO.ui.OutlineSelectWidget outline} navigation. Pages are usually not instantiated directly,\n * rather extended to include the required content and functionality.\n *\n * Each page must have a unique symbolic name, which is passed to the constructor. In addition, the page's outline\n * item is customized (with a label, outline level, etc.) using the #setupOutlineItem method. See\n * {@link OO.ui.BookletLayout BookletLayout} for an example.\n *\n * @class\n * @extends OO.ui.PanelLayout\n *\n * @constructor\n * @param {string} name Unique symbolic name of page\n * @param {Object} [config] Configuration options\n */\nOO.ui.PageLayout = function OoUiPageLayout( name, config ) {\n\t// Allow passing positional parameters inside the config object\n\tif ( OO.isPlainObject( name ) && config === undefined ) {\n\t\tconfig = name;\n\t\tname = config.name;\n\t}\n\n\t// Configuration initialization\n\tconfig = $.extend( { scrollable: true }, config );\n\n\t// Parent constructor\n\tOO.ui.PageLayout.parent.call( this, config );\n\n\t// Properties\n\tthis.name = name;\n\tthis.outlineItem = null;\n\tthis.active = false;\n\n\t// Initialization\n\tthis.$element.addClass( 'oo-ui-pageLayout' );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.PageLayout, OO.ui.PanelLayout );\n\n/* Events */\n\n/**\n * An 'active' event is emitted when the page becomes active. Pages become active when they are\n * shown in a booklet layout that is configured to display only one page at a time.\n *\n * @event active\n * @param {boolean} active Page is active\n */\n\n/* Methods */\n\n/**\n * Get the symbolic name of the page.\n *\n * @return {string} Symbolic name of page\n */\nOO.ui.PageLayout.prototype.getName = function () {\n\treturn this.name;\n};\n\n/**\n * Check if page is active.\n *\n * Pages become active when they are shown in a {@link OO.ui.BookletLayout booklet layout} that is configured to display\n * only one page at a time. Additional CSS is applied to the page's outline item to reflect the active state.\n *\n * @return {boolean} Page is active\n */\nOO.ui.PageLayout.prototype.isActive = function () {\n\treturn this.active;\n};\n\n/**\n * Get outline item.\n *\n * The outline item allows users to access the page from the booklet's outline\n * navigation. The outline item itself can be customized (with a label, level, etc.) using the #setupOutlineItem method.\n *\n * @return {OO.ui.OutlineOptionWidget|null} Outline option widget\n */\nOO.ui.PageLayout.prototype.getOutlineItem = function () {\n\treturn this.outlineItem;\n};\n\n/**\n * Set or unset the outline item.\n *\n * Specify an {@link OO.ui.OutlineOptionWidget outline option} to set it,\n * or `null` to clear the outline item. To customize the outline item itself (e.g., to set a label or outline\n * level), use #setupOutlineItem instead of this method.\n *\n * @param {OO.ui.OutlineOptionWidget|null} outlineItem Outline option widget, null to clear\n * @chainable\n * @return {OO.ui.PageLayout} The layout, for chaining\n */\nOO.ui.PageLayout.prototype.setOutlineItem = function ( outlineItem ) {\n\tthis.outlineItem = outlineItem || null;\n\tif ( outlineItem ) {\n\t\tthis.setupOutlineItem();\n\t}\n\treturn this;\n};\n\n/**\n * Set up the outline item.\n *\n * Use this method to customize the outline item (e.g., to add a label or outline level). To set or unset\n * the outline item itself (with an {@link OO.ui.OutlineOptionWidget outline option} or `null`), use\n * the #setOutlineItem method instead.\n *\n * @param {OO.ui.OutlineOptionWidget} outlineItem Outline option widget to set up\n * @chainable\n * @return {OO.ui.PageLayout} The layout, for chaining\n */\nOO.ui.PageLayout.prototype.setupOutlineItem = function () {\n\treturn this;\n};\n\n/**\n * Set the page to its 'active' state.\n *\n * Pages become active when they are shown in a booklet layout that is configured to display only one page at a time. Additional\n * CSS is applied to the outline item to reflect the page's active state. Outside of the booklet\n * context, setting the active state on a page does nothing.\n *\n * @param {boolean} active Page is active\n * @fires active\n */\nOO.ui.PageLayout.prototype.setActive = function ( active ) {\n\tactive = !!active;\n\n\tif ( active !== this.active ) {\n\t\tthis.active = active;\n\t\tthis.$element.toggleClass( 'oo-ui-pageLayout-active', active );\n\t\tthis.emit( 'active', this.active );\n\t}\n};\n","/**\n * StackLayouts contain a series of {@link OO.ui.PanelLayout panel layouts}. By default, only one panel is displayed\n * at a time, though the stack layout can also be configured to show all contained panels, one after another,\n * by setting the #continuous option to 'true'.\n *\n *     @example\n *     // A stack layout with two panels, configured to be displayed continuously\n *     var myStack = new OO.ui.StackLayout( {\n *         items: [\n *             new OO.ui.PanelLayout( {\n *                 $content: $( '<p>Panel One</p>' ),\n *                 padded: true,\n *                 framed: true\n *             } ),\n *             new OO.ui.PanelLayout( {\n *                 $content: $( '<p>Panel Two</p>' ),\n *                 padded: true,\n *                 framed: true\n *             } )\n *         ],\n *         continuous: true\n *     } );\n *     $( 'body' ).append( myStack.$element );\n *\n * @class\n * @extends OO.ui.PanelLayout\n * @mixins OO.ui.mixin.GroupElement\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {boolean} [continuous=false] Show all panels, one after another. By default, only one panel is displayed at a time.\n * @cfg {OO.ui.Layout[]} [items] Panel layouts to add to the stack layout.\n */\nOO.ui.StackLayout = function OoUiStackLayout( config ) {\n\t// Configuration initialization\n\tconfig = $.extend( { scrollable: true }, config );\n\n\t// Parent constructor\n\tOO.ui.StackLayout.parent.call( this, config );\n\n\t// Mixin constructors\n\tOO.ui.mixin.GroupElement.call( this, $.extend( {}, config, { $group: this.$element } ) );\n\n\t// Properties\n\tthis.currentItem = null;\n\tthis.continuous = !!config.continuous;\n\n\t// Initialization\n\tthis.$element.addClass( 'oo-ui-stackLayout' );\n\tif ( this.continuous ) {\n\t\tthis.$element.addClass( 'oo-ui-stackLayout-continuous' );\n\t\tthis.$element.on( 'scroll', OO.ui.debounce( this.onScroll.bind( this ), 250 ) );\n\t}\n\tif ( Array.isArray( config.items ) ) {\n\t\tthis.addItems( config.items );\n\t}\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.StackLayout, OO.ui.PanelLayout );\nOO.mixinClass( OO.ui.StackLayout, OO.ui.mixin.GroupElement );\n\n/* Events */\n\n/**\n * A 'set' event is emitted when panels are {@link #addItems added}, {@link #removeItems removed},\n * {@link #clearItems cleared} or {@link #setItem displayed}.\n *\n * @event set\n * @param {OO.ui.Layout|null} item Current panel or `null` if no panel is shown\n */\n\n/**\n * When used in continuous mode, this event is emitted when the user scrolls down\n * far enough such that currentItem is no longer visible.\n *\n * @event visibleItemChange\n * @param {OO.ui.PanelLayout} panel The next visible item in the layout\n */\n\n/* Methods */\n\n/**\n * Handle scroll events from the layout element\n *\n * @param {jQuery.Event} e\n * @fires visibleItemChange\n */\nOO.ui.StackLayout.prototype.onScroll = function () {\n\tvar currentRect,\n\t\tlen = this.items.length,\n\t\tcurrentIndex = this.items.indexOf( this.currentItem ),\n\t\tnewIndex = currentIndex,\n\t\tcontainerRect = this.$element[ 0 ].getBoundingClientRect();\n\n\tif ( !containerRect || ( !containerRect.top && !containerRect.bottom ) ) {\n\t\t// Can't get bounding rect, possibly not attached.\n\t\treturn;\n\t}\n\n\tfunction getRect( item ) {\n\t\treturn item.$element[ 0 ].getBoundingClientRect();\n\t}\n\n\tfunction isVisible( item ) {\n\t\tvar rect = getRect( item );\n\t\treturn rect.bottom > containerRect.top && rect.top < containerRect.bottom;\n\t}\n\n\tcurrentRect = getRect( this.currentItem );\n\n\tif ( currentRect.bottom < containerRect.top ) {\n\t\t// Scrolled down past current item\n\t\twhile ( ++newIndex < len ) {\n\t\t\tif ( isVisible( this.items[ newIndex ] ) ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t} else if ( currentRect.top > containerRect.bottom ) {\n\t\t// Scrolled up past current item\n\t\twhile ( --newIndex >= 0 ) {\n\t\t\tif ( isVisible( this.items[ newIndex ] ) ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( newIndex !== currentIndex ) {\n\t\tthis.emit( 'visibleItemChange', this.items[ newIndex ] );\n\t}\n};\n\n/**\n * Get the current panel.\n *\n * @return {OO.ui.Layout|null}\n */\nOO.ui.StackLayout.prototype.getCurrentItem = function () {\n\treturn this.currentItem;\n};\n\n/**\n * Unset the current item.\n *\n * @private\n * @param {OO.ui.StackLayout} layout\n * @fires set\n */\nOO.ui.StackLayout.prototype.unsetCurrentItem = function () {\n\tvar prevItem = this.currentItem;\n\tif ( prevItem === null ) {\n\t\treturn;\n\t}\n\n\tthis.currentItem = null;\n\tthis.emit( 'set', null );\n};\n\n/**\n * Add panel layouts to the stack layout.\n *\n * Panels will be added to the end of the stack layout array unless the optional index parameter specifies a different\n * insertion point. Adding a panel that is already in the stack will move it to the end of the array or the point specified\n * by the index.\n *\n * @param {OO.ui.Layout[]} items Panels to add\n * @param {number} [index] Index of the insertion point\n * @chainable\n * @return {OO.ui.StackLayout} The layout, for chaining\n */\nOO.ui.StackLayout.prototype.addItems = function ( items, index ) {\n\t// Update the visibility\n\tthis.updateHiddenState( items, this.currentItem );\n\n\t// Mixin method\n\tOO.ui.mixin.GroupElement.prototype.addItems.call( this, items, index );\n\n\tif ( !this.currentItem && items.length ) {\n\t\tthis.setItem( items[ 0 ] );\n\t}\n\n\treturn this;\n};\n\n/**\n * Remove the specified panels from the stack layout.\n *\n * Removed panels are detached from the DOM, not removed, so that they may be reused. To remove all panels,\n * you may wish to use the #clearItems method instead.\n *\n * @param {OO.ui.Layout[]} items Panels to remove\n * @chainable\n * @return {OO.ui.StackLayout} The layout, for chaining\n * @fires set\n */\nOO.ui.StackLayout.prototype.removeItems = function ( items ) {\n\t// Mixin method\n\tOO.ui.mixin.GroupElement.prototype.removeItems.call( this, items );\n\n\tif ( items.indexOf( this.currentItem ) !== -1 ) {\n\t\tif ( this.items.length ) {\n\t\t\tthis.setItem( this.items[ 0 ] );\n\t\t} else {\n\t\t\tthis.unsetCurrentItem();\n\t\t}\n\t}\n\n\treturn this;\n};\n\n/**\n * Clear all panels from the stack layout.\n *\n * Cleared panels are detached from the DOM, not removed, so that they may be reused. To remove only\n * a subset of panels, use the #removeItems method.\n *\n * @chainable\n * @return {OO.ui.StackLayout} The layout, for chaining\n * @fires set\n */\nOO.ui.StackLayout.prototype.clearItems = function () {\n\tthis.unsetCurrentItem();\n\tOO.ui.mixin.GroupElement.prototype.clearItems.call( this );\n\n\treturn this;\n};\n\n/**\n * Show the specified panel.\n *\n * If another panel is currently displayed, it will be hidden.\n *\n * @param {OO.ui.Layout} item Panel to show\n * @chainable\n * @return {OO.ui.StackLayout} The layout, for chaining\n * @fires set\n */\nOO.ui.StackLayout.prototype.setItem = function ( item ) {\n\tif ( item !== this.currentItem ) {\n\t\tthis.updateHiddenState( this.items, item );\n\n\t\tif ( this.items.indexOf( item ) !== -1 ) {\n\t\t\tthis.currentItem = item;\n\t\t\tthis.emit( 'set', item );\n\t\t} else {\n\t\t\tthis.unsetCurrentItem();\n\t\t}\n\t}\n\n\treturn this;\n};\n\n/**\n * Reset the scroll offset of all panels, or the container if continuous\n *\n * @inheritdoc\n */\nOO.ui.StackLayout.prototype.resetScroll = function () {\n\tif ( this.continuous ) {\n\t\t// Parent method\n\t\treturn OO.ui.StackLayout.parent.prototype.resetScroll.call( this );\n\t}\n\t// Reset each panel\n\tthis.getItems().forEach( function ( panel ) {\n\t\tvar hidden = panel.$element.hasClass( 'oo-ui-element-hidden' );\n\t\t// Scroll can only be reset when panel is visible\n\t\tpanel.$element.removeClass( 'oo-ui-element-hidden' );\n\t\tpanel.resetScroll();\n\t\tif ( hidden ) {\n\t\t\tpanel.$element.addClass( 'oo-ui-element-hidden' );\n\t\t}\n\t} );\n\n\treturn this;\n};\n\n/**\n * Update the visibility of all items in case of non-continuous view.\n *\n * Ensure all items are hidden except for the selected one.\n * This method does nothing when the stack is continuous.\n *\n * @private\n * @param {OO.ui.Layout[]} items Item list iterate over\n * @param {OO.ui.Layout} [selectedItem] Selected item to show\n */\nOO.ui.StackLayout.prototype.updateHiddenState = function ( items, selectedItem ) {\n\tvar i, len;\n\n\tif ( !this.continuous ) {\n\t\tfor ( i = 0, len = items.length; i < len; i++ ) {\n\t\t\tif ( !selectedItem || selectedItem !== items[ i ] ) {\n\t\t\t\titems[ i ].$element.addClass( 'oo-ui-element-hidden' );\n\t\t\t\titems[ i ].$element.attr( 'aria-hidden', 'true' );\n\t\t\t}\n\t\t}\n\t\tif ( selectedItem ) {\n\t\t\tselectedItem.$element.removeClass( 'oo-ui-element-hidden' );\n\t\t\tselectedItem.$element.removeAttr( 'aria-hidden' );\n\t\t}\n\t}\n};\n","/**\n * MenuLayouts combine a menu and a content {@link OO.ui.PanelLayout panel}. The menu is positioned relative to the content (after, before, top, or bottom)\n * and its size is customized with the #menuSize config. The content area will fill all remaining space.\n *\n *     @example\n *     var menuLayout,\n *         menuPanel = new OO.ui.PanelLayout( { padded: true, expanded: true, scrollable: true } ),\n *         contentPanel = new OO.ui.PanelLayout( { padded: true, expanded: true, scrollable: true } ),\n *         select = new OO.ui.SelectWidget( {\n *             items: [\n *                 new OO.ui.OptionWidget( {\n *                     data: 'before',\n *                     label: 'Before'\n *                 } ),\n *                 new OO.ui.OptionWidget( {\n *                     data: 'after',\n *                     label: 'After'\n *                 } ),\n *                 new OO.ui.OptionWidget( {\n *                     data: 'top',\n *                     label: 'Top'\n *                 } ),\n *                 new OO.ui.OptionWidget( {\n *                     data: 'bottom',\n *                     label: 'Bottom'\n *                 } )\n *              ]\n *         } ).on( 'select', function ( item ) {\n *            menuLayout.setMenuPosition( item.getData() );\n *         } );\n *\n *     menuLayout = new OO.ui.MenuLayout( {\n *         position: 'top',\n *         menuPanel: menuPanel,\n *         contentPanel: contentPanel\n *     } )\n *     menuLayout.$menu.append(\n *         menuPanel.$element.append( '<b>Menu panel</b>', select.$element )\n *     );\n *     menuLayout.$content.append(\n *         contentPanel.$element.append( '<b>Content panel</b>', '<p>Note that the menu is positioned relative to the content panel: top, bottom, after, before.</p>')\n *     );\n *     $( 'body' ).append( menuLayout.$element );\n *\n * If menu size needs to be overridden, it can be accomplished using CSS similar to the snippet\n * below. MenuLayout's CSS will override the appropriate values with 'auto' or '0' to display the\n * menu correctly. If `menuPosition` is known beforehand, CSS rules corresponding to other positions\n * may be omitted.\n *\n *     .oo-ui-menuLayout-menu {\n *         width: 200px;\n *         height: 200px;\n *     }\n *\n *     .oo-ui-menuLayout-content {\n *         top: 200px;\n *         left: 200px;\n *         right: 200px;\n *         bottom: 200px;\n *     }\n *\n * @class\n * @extends OO.ui.Layout\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {OO.ui.PanelLayout} [menuPanel] Menu panel\n * @cfg {OO.ui.PanelLayout} [contentPanel] Content panel\n * @cfg {boolean} [expanded=true] Expand the layout to fill the entire parent element.\n * @cfg {boolean} [showMenu=true] Show menu\n * @cfg {string} [menuPosition='before'] Position of menu: `top`, `after`, `bottom` or `before`\n */\nOO.ui.MenuLayout = function OoUiMenuLayout( config ) {\n\t// Configuration initialization\n\tconfig = $.extend( {\n\t\texpanded: true,\n\t\tshowMenu: true,\n\t\tmenuPosition: 'before'\n\t}, config );\n\n\t// Parent constructor\n\tOO.ui.MenuLayout.parent.call( this, config );\n\n\tthis.menuPanel = null;\n\tthis.contentPanel = null;\n\tthis.expanded = !!config.expanded;\n\t/**\n\t * Menu DOM node\n\t *\n\t * @property {jQuery}\n\t */\n\tthis.$menu = $( '<div>' );\n\t/**\n\t * Content DOM node\n\t *\n\t * @property {jQuery}\n\t */\n\tthis.$content = $( '<div>' );\n\n\t// Initialization\n\tthis.$menu\n\t\t.addClass( 'oo-ui-menuLayout-menu' );\n\tthis.$content.addClass( 'oo-ui-menuLayout-content' );\n\tthis.$element\n\t\t.addClass( 'oo-ui-menuLayout' );\n\tif ( config.expanded ) {\n\t\tthis.$element.addClass( 'oo-ui-menuLayout-expanded' );\n\t} else {\n\t\tthis.$element.addClass( 'oo-ui-menuLayout-static' );\n\t}\n\tif ( config.menuPanel ) {\n\t\tthis.setMenuPanel( config.menuPanel );\n\t}\n\tif ( config.contentPanel ) {\n\t\tthis.setContentPanel( config.contentPanel );\n\t}\n\tthis.setMenuPosition( config.menuPosition );\n\tthis.toggleMenu( config.showMenu );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.MenuLayout, OO.ui.Layout );\n\n/* Methods */\n\n/**\n * Toggle menu.\n *\n * @param {boolean} showMenu Show menu, omit to toggle\n * @chainable\n * @return {OO.ui.MenuLayout} The layout, for chaining\n */\nOO.ui.MenuLayout.prototype.toggleMenu = function ( showMenu ) {\n\tshowMenu = showMenu === undefined ? !this.showMenu : !!showMenu;\n\n\tif ( this.showMenu !== showMenu ) {\n\t\tthis.showMenu = showMenu;\n\t\tthis.$element\n\t\t\t.toggleClass( 'oo-ui-menuLayout-showMenu', this.showMenu )\n\t\t\t.toggleClass( 'oo-ui-menuLayout-hideMenu', !this.showMenu );\n\t\tthis.$menu.attr( 'aria-hidden', this.showMenu ? 'false' : 'true' );\n\t}\n\n\treturn this;\n};\n\n/**\n * Check if menu is visible\n *\n * @return {boolean} Menu is visible\n */\nOO.ui.MenuLayout.prototype.isMenuVisible = function () {\n\treturn this.showMenu;\n};\n\n/**\n * Set menu position.\n *\n * @param {string} position Position of menu, either `top`, `after`, `bottom` or `before`\n * @throws {Error} If position value is not supported\n * @chainable\n * @return {OO.ui.MenuLayout} The layout, for chaining\n */\nOO.ui.MenuLayout.prototype.setMenuPosition = function ( position ) {\n\tthis.$element.removeClass( 'oo-ui-menuLayout-' + this.menuPosition );\n\tthis.menuPosition = position;\n\tif ( this.menuPosition === 'top' || this.menuPosition === 'before' ) {\n\t\tthis.$element.append( this.$menu, this.$content );\n\t} else {\n\t\tthis.$element.append( this.$content, this.$menu );\n\t}\n\tthis.$element.addClass( 'oo-ui-menuLayout-' + position );\n\n\treturn this;\n};\n\n/**\n * Get menu position.\n *\n * @return {string} Menu position\n */\nOO.ui.MenuLayout.prototype.getMenuPosition = function () {\n\treturn this.menuPosition;\n};\n\n/**\n * Set the menu panel.\n *\n * @param {OO.ui.PanelLayout} menuPanel Menu panel\n */\nOO.ui.MenuLayout.prototype.setMenuPanel = function ( menuPanel ) {\n\tthis.menuPanel = menuPanel;\n\tthis.$menu.append( this.menuPanel.$element );\n};\n\n/**\n * Set the content panel.\n *\n * @param {OO.ui.PanelLayout} contentPanel Content panel\n */\nOO.ui.MenuLayout.prototype.setContentPanel = function ( contentPanel ) {\n\tthis.contentPanel = contentPanel;\n\tthis.$content.append( this.contentPanel.$element );\n};\n\n/**\n * Clear the menu panel.\n */\nOO.ui.MenuLayout.prototype.clearMenuPanel = function () {\n\tthis.menuPanel = null;\n\tthis.$menu.empty();\n};\n\n/**\n * Clear the content panel.\n */\nOO.ui.MenuLayout.prototype.clearContentPanel = function () {\n\tthis.contentPanel = null;\n\tthis.$content.empty();\n};\n\n/**\n * Reset the scroll offset of all panels and the tab select widget\n *\n * @inheritdoc\n */\nOO.ui.MenuLayout.prototype.resetScroll = function () {\n\tif ( this.menuPanel ) {\n\t\tthis.menuPanel.resetScroll();\n\t}\n\tif ( this.contentPanel ) {\n\t\tthis.contentPanel.resetScroll();\n\t}\n\n\treturn this;\n};\n","/**\n * BookletLayouts contain {@link OO.ui.PageLayout page layouts} as well as\n * an {@link OO.ui.OutlineSelectWidget outline} that allows users to easily navigate\n * through the pages and select which one to display. By default, only one page is\n * displayed at a time and the outline is hidden. When a user navigates to a new page,\n * the booklet layout automatically focuses on the first focusable element, unless the\n * default setting is changed. Optionally, booklets can be configured to show\n * {@link OO.ui.OutlineControlsWidget controls} for adding, moving, and removing items.\n *\n *     @example\n *     // Example of a BookletLayout that contains two PageLayouts.\n *\n *     function PageOneLayout( name, config ) {\n *         PageOneLayout.parent.call( this, name, config );\n *         this.$element.append( '<p>First page</p><p>(This booklet has an outline, displayed on the left)</p>' );\n *     }\n *     OO.inheritClass( PageOneLayout, OO.ui.PageLayout );\n *     PageOneLayout.prototype.setupOutlineItem = function () {\n *         this.outlineItem.setLabel( 'Page One' );\n *     };\n *\n *     function PageTwoLayout( name, config ) {\n *         PageTwoLayout.parent.call( this, name, config );\n *         this.$element.append( '<p>Second page</p>' );\n *     }\n *     OO.inheritClass( PageTwoLayout, OO.ui.PageLayout );\n *     PageTwoLayout.prototype.setupOutlineItem = function () {\n *         this.outlineItem.setLabel( 'Page Two' );\n *     };\n *\n *     var page1 = new PageOneLayout( 'one' ),\n *         page2 = new PageTwoLayout( 'two' );\n *\n *     var booklet = new OO.ui.BookletLayout( {\n *         outlined: true\n *     } );\n *\n *     booklet.addPages( [ page1, page2 ] );\n *     $( 'body' ).append( booklet.$element );\n *\n * @class\n * @extends OO.ui.MenuLayout\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {boolean} [continuous=false] Show all pages, one after another\n * @cfg {boolean} [autoFocus=true] Focus on the first focusable element when a new page is displayed. Disabled on mobile.\n * @cfg {boolean} [outlined=false] Show the outline. The outline is used to navigate through the pages of the booklet.\n * @cfg {boolean} [editable=false] Show controls for adding, removing and reordering pages\n */\nOO.ui.BookletLayout = function OoUiBookletLayout( config ) {\n\t// Configuration initialization\n\tconfig = config || {};\n\n\t// Parent constructor\n\tOO.ui.BookletLayout.parent.call( this, config );\n\n\t// Properties\n\tthis.currentPageName = null;\n\tthis.pages = {};\n\tthis.ignoreFocus = false;\n\tthis.stackLayout = new OO.ui.StackLayout( {\n\t\tcontinuous: !!config.continuous,\n\t\texpanded: this.expanded\n\t} );\n\tthis.setContentPanel( this.stackLayout );\n\tthis.autoFocus = config.autoFocus === undefined || !!config.autoFocus;\n\tthis.outlineVisible = false;\n\tthis.outlined = !!config.outlined;\n\tif ( this.outlined ) {\n\t\tthis.editable = !!config.editable;\n\t\tthis.outlineControlsWidget = null;\n\t\tthis.outlineSelectWidget = new OO.ui.OutlineSelectWidget();\n\t\tthis.outlinePanel = new OO.ui.PanelLayout( {\n\t\t\texpanded: this.expanded,\n\t\t\tscrollable: true\n\t\t} );\n\t\tthis.setMenuPanel( this.outlinePanel );\n\t\tthis.outlineVisible = true;\n\t\tif ( this.editable ) {\n\t\t\tthis.outlineControlsWidget = new OO.ui.OutlineControlsWidget(\n\t\t\t\tthis.outlineSelectWidget\n\t\t\t);\n\t\t}\n\t}\n\tthis.toggleMenu( this.outlined );\n\n\t// Events\n\tthis.stackLayout.connect( this, { set: 'onStackLayoutSet' } );\n\tif ( this.outlined ) {\n\t\tthis.outlineSelectWidget.connect( this, { select: 'onOutlineSelectWidgetSelect' } );\n\t\tthis.scrolling = false;\n\t\tthis.stackLayout.connect( this, { visibleItemChange: 'onStackLayoutVisibleItemChange' } );\n\t}\n\tif ( this.autoFocus ) {\n\t\t// Event 'focus' does not bubble, but 'focusin' does\n\t\tthis.stackLayout.$element.on( 'focusin', this.onStackLayoutFocus.bind( this ) );\n\t}\n\n\t// Initialization\n\tthis.$element.addClass( 'oo-ui-bookletLayout' );\n\tthis.stackLayout.$element.addClass( 'oo-ui-bookletLayout-stackLayout' );\n\tif ( this.outlined ) {\n\t\tthis.outlinePanel.$element\n\t\t\t.addClass( 'oo-ui-bookletLayout-outlinePanel' )\n\t\t\t.append( this.outlineSelectWidget.$element );\n\t\tif ( this.editable ) {\n\t\t\tthis.outlinePanel.$element\n\t\t\t\t.addClass( 'oo-ui-bookletLayout-outlinePanel-editable' )\n\t\t\t\t.append( this.outlineControlsWidget.$element );\n\t\t}\n\t}\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.BookletLayout, OO.ui.MenuLayout );\n\n/* Events */\n\n/**\n * A 'set' event is emitted when a page is {@link #setPage set} to be displayed by the booklet layout.\n * @event set\n * @param {OO.ui.PageLayout} page Current page\n */\n\n/**\n * An 'add' event is emitted when pages are {@link #addPages added} to the booklet layout.\n *\n * @event add\n * @param {OO.ui.PageLayout[]} page Added pages\n * @param {number} index Index pages were added at\n */\n\n/**\n * A 'remove' event is emitted when pages are {@link #clearPages cleared} or\n * {@link #removePages removed} from the booklet.\n *\n * @event remove\n * @param {OO.ui.PageLayout[]} pages Removed pages\n */\n\n/* Methods */\n\n/**\n * Handle stack layout focus.\n *\n * @private\n * @param {jQuery.Event} e Focusin event\n */\nOO.ui.BookletLayout.prototype.onStackLayoutFocus = function ( e ) {\n\tvar name, $target;\n\n\t// Find the page that an element was focused within\n\t$target = $( e.target ).closest( '.oo-ui-pageLayout' );\n\tfor ( name in this.pages ) {\n\t\t// Check for page match, exclude current page to find only page changes\n\t\tif ( this.pages[ name ].$element[ 0 ] === $target[ 0 ] && name !== this.currentPageName ) {\n\t\t\tthis.setPage( name );\n\t\t\tbreak;\n\t\t}\n\t}\n};\n\n/**\n * Handle visibleItemChange events from the stackLayout\n *\n * The next visible page is set as the current page by selecting it\n * in the outline\n *\n * @param {OO.ui.PageLayout} page The next visible page in the layout\n */\nOO.ui.BookletLayout.prototype.onStackLayoutVisibleItemChange = function ( page ) {\n\t// Set a flag to so that the resulting call to #onStackLayoutSet doesn't\n\t// try and scroll the item into view again.\n\tthis.scrolling = true;\n\tthis.outlineSelectWidget.selectItemByData( page.getName() );\n\tthis.scrolling = false;\n};\n\n/**\n * Handle stack layout set events.\n *\n * @private\n * @param {OO.ui.PanelLayout|null} page The page panel that is now the current panel\n */\nOO.ui.BookletLayout.prototype.onStackLayoutSet = function ( page ) {\n\tvar promise, layout = this;\n\t// If everything is unselected, do nothing\n\tif ( !page ) {\n\t\treturn;\n\t}\n\t// For continuous BookletLayouts, scroll the selected page into view first\n\tif ( this.stackLayout.continuous && !this.scrolling ) {\n\t\tpromise = page.scrollElementIntoView();\n\t} else {\n\t\tpromise = $.Deferred().resolve();\n\t}\n\t// Focus the first element on the newly selected panel.\n\t// Don't focus if the page was set by scrolling.\n\tif ( this.autoFocus && !OO.ui.isMobile() && !this.scrolling ) {\n\t\tpromise.done( function () {\n\t\t\tlayout.focus();\n\t\t} );\n\t}\n};\n\n/**\n * Focus the first input in the current page.\n *\n * If no page is selected, the first selectable page will be selected.\n * If the focus is already in an element on the current page, nothing will happen.\n *\n * @param {number} [itemIndex] A specific item to focus on\n */\nOO.ui.BookletLayout.prototype.focus = function ( itemIndex ) {\n\tvar page,\n\t\titems = this.stackLayout.getItems();\n\n\tif ( itemIndex !== undefined && items[ itemIndex ] ) {\n\t\tpage = items[ itemIndex ];\n\t} else {\n\t\tpage = this.stackLayout.getCurrentItem();\n\t}\n\n\tif ( !page && this.outlined ) {\n\t\tthis.selectFirstSelectablePage();\n\t\tpage = this.stackLayout.getCurrentItem();\n\t}\n\tif ( !page ) {\n\t\treturn;\n\t}\n\t// Only change the focus if is not already in the current page\n\tif ( !OO.ui.contains( page.$element[ 0 ], this.getElementDocument().activeElement, true ) ) {\n\t\tpage.focus();\n\t}\n};\n\n/**\n * Find the first focusable input in the booklet layout and focus\n * on it.\n */\nOO.ui.BookletLayout.prototype.focusFirstFocusable = function () {\n\tOO.ui.findFocusable( this.stackLayout.$element ).focus();\n};\n\n/**\n * Handle outline widget select events.\n *\n * @private\n * @param {OO.ui.OptionWidget|null} item Selected item\n */\nOO.ui.BookletLayout.prototype.onOutlineSelectWidgetSelect = function ( item ) {\n\tif ( item ) {\n\t\tthis.setPage( item.getData() );\n\t}\n};\n\n/**\n * Check if booklet has an outline.\n *\n * @return {boolean} Booklet has an outline\n */\nOO.ui.BookletLayout.prototype.isOutlined = function () {\n\treturn this.outlined;\n};\n\n/**\n * Check if booklet has editing controls.\n *\n * @return {boolean} Booklet is editable\n */\nOO.ui.BookletLayout.prototype.isEditable = function () {\n\treturn this.editable;\n};\n\n/**\n * Check if booklet has a visible outline.\n *\n * @return {boolean} Outline is visible\n */\nOO.ui.BookletLayout.prototype.isOutlineVisible = function () {\n\treturn this.outlined && this.outlineVisible;\n};\n\n/**\n * Hide or show the outline.\n *\n * @param {boolean} [show] Show outline, omit to invert current state\n * @chainable\n * @return {OO.ui.BookletLayout} The layout, for chaining\n */\nOO.ui.BookletLayout.prototype.toggleOutline = function ( show ) {\n\tvar booklet = this;\n\n\tif ( this.outlined ) {\n\t\tshow = show === undefined ? !this.outlineVisible : !!show;\n\t\tthis.outlineVisible = show;\n\t\tthis.toggleMenu( show );\n\t\tif ( show && this.editable ) {\n\t\t\t// HACK: Kill dumb scrollbars when the sidebar stops animating, see T161798. Only necessary when\n\t\t\t// outline controls are present, delay matches transition on `.oo-ui-menuLayout-menu`.\n\t\t\tsetTimeout( function () {\n\t\t\t\tOO.ui.Element.static.reconsiderScrollbars( booklet.outlinePanel.$element[ 0 ] );\n\t\t\t}, 200 );\n\t\t}\n\t}\n\n\treturn this;\n};\n\n/**\n * Find the page closest to the specified page.\n *\n * @param {OO.ui.PageLayout} page Page to use as a reference point\n * @return {OO.ui.PageLayout|null} Page closest to the specified page\n */\nOO.ui.BookletLayout.prototype.findClosestPage = function ( page ) {\n\tvar next, prev, level,\n\t\tpages = this.stackLayout.getItems(),\n\t\tindex = pages.indexOf( page );\n\n\tif ( index !== -1 ) {\n\t\tnext = pages[ index + 1 ];\n\t\tprev = pages[ index - 1 ];\n\t\t// Prefer adjacent pages at the same level\n\t\tif ( this.outlined ) {\n\t\t\tlevel = this.outlineSelectWidget.findItemFromData( page.getName() ).getLevel();\n\t\t\tif (\n\t\t\t\tprev &&\n\t\t\t\tlevel === this.outlineSelectWidget.findItemFromData( prev.getName() ).getLevel()\n\t\t\t) {\n\t\t\t\treturn prev;\n\t\t\t}\n\t\t\tif (\n\t\t\t\tnext &&\n\t\t\t\tlevel === this.outlineSelectWidget.findItemFromData( next.getName() ).getLevel()\n\t\t\t) {\n\t\t\t\treturn next;\n\t\t\t}\n\t\t}\n\t}\n\treturn prev || next || null;\n};\n\n/**\n * Get the outline widget.\n *\n * If the booklet is not outlined, the method will return `null`.\n *\n * @return {OO.ui.OutlineSelectWidget|null} Outline widget, or null if the booklet is not outlined\n */\nOO.ui.BookletLayout.prototype.getOutline = function () {\n\treturn this.outlineSelectWidget;\n};\n\n/**\n * Get the outline controls widget.\n *\n * If the outline is not editable, the method will return `null`.\n *\n * @return {OO.ui.OutlineControlsWidget|null} The outline controls widget.\n */\nOO.ui.BookletLayout.prototype.getOutlineControls = function () {\n\treturn this.outlineControlsWidget;\n};\n\n/**\n * Get a page by its symbolic name.\n *\n * @param {string} name Symbolic name of page\n * @return {OO.ui.PageLayout|undefined} Page, if found\n */\nOO.ui.BookletLayout.prototype.getPage = function ( name ) {\n\treturn this.pages[ name ];\n};\n\n/**\n * Get the current page.\n *\n * @return {OO.ui.PageLayout|undefined} Current page, if found\n */\nOO.ui.BookletLayout.prototype.getCurrentPage = function () {\n\tvar name = this.getCurrentPageName();\n\treturn name ? this.getPage( name ) : undefined;\n};\n\n/**\n * Get the symbolic name of the current page.\n *\n * @return {string|null} Symbolic name of the current page\n */\nOO.ui.BookletLayout.prototype.getCurrentPageName = function () {\n\treturn this.currentPageName;\n};\n\n/**\n * Add pages to the booklet layout\n *\n * When pages are added with the same names as existing pages, the existing pages will be\n * automatically removed before the new pages are added.\n *\n * @param {OO.ui.PageLayout[]} pages Pages to add\n * @param {number} index Index of the insertion point\n * @fires add\n * @chainable\n * @return {OO.ui.BookletLayout} The layout, for chaining\n */\nOO.ui.BookletLayout.prototype.addPages = function ( pages, index ) {\n\tvar i, len, name, page, item, currentIndex,\n\t\tstackLayoutPages = this.stackLayout.getItems(),\n\t\tremove = [],\n\t\titems = [];\n\n\t// Remove pages with same names\n\tfor ( i = 0, len = pages.length; i < len; i++ ) {\n\t\tpage = pages[ i ];\n\t\tname = page.getName();\n\n\t\tif ( Object.prototype.hasOwnProperty.call( this.pages, name ) ) {\n\t\t\t// Correct the insertion index\n\t\t\tcurrentIndex = stackLayoutPages.indexOf( this.pages[ name ] );\n\t\t\tif ( currentIndex !== -1 && currentIndex + 1 < index ) {\n\t\t\t\tindex--;\n\t\t\t}\n\t\t\tremove.push( this.pages[ name ] );\n\t\t}\n\t}\n\tif ( remove.length ) {\n\t\tthis.removePages( remove );\n\t}\n\n\t// Add new pages\n\tfor ( i = 0, len = pages.length; i < len; i++ ) {\n\t\tpage = pages[ i ];\n\t\tname = page.getName();\n\t\tthis.pages[ page.getName() ] = page;\n\t\tif ( this.outlined ) {\n\t\t\titem = new OO.ui.OutlineOptionWidget( { data: name } );\n\t\t\tpage.setOutlineItem( item );\n\t\t\titems.push( item );\n\t\t}\n\t}\n\n\tif ( this.outlined && items.length ) {\n\t\tthis.outlineSelectWidget.addItems( items, index );\n\t\tthis.selectFirstSelectablePage();\n\t}\n\tthis.stackLayout.addItems( pages, index );\n\tthis.emit( 'add', pages, index );\n\n\treturn this;\n};\n\n/**\n * Remove the specified pages from the booklet layout.\n *\n * To remove all pages from the booklet, you may wish to use the #clearPages method instead.\n *\n * @param {OO.ui.PageLayout[]} pages An array of pages to remove\n * @fires remove\n * @chainable\n * @return {OO.ui.BookletLayout} The layout, for chaining\n */\nOO.ui.BookletLayout.prototype.removePages = function ( pages ) {\n\tvar i, len, name, page,\n\t\titems = [];\n\n\tfor ( i = 0, len = pages.length; i < len; i++ ) {\n\t\tpage = pages[ i ];\n\t\tname = page.getName();\n\t\tdelete this.pages[ name ];\n\t\tif ( this.outlined ) {\n\t\t\titems.push( this.outlineSelectWidget.findItemFromData( name ) );\n\t\t\tpage.setOutlineItem( null );\n\t\t}\n\t}\n\tif ( this.outlined && items.length ) {\n\t\tthis.outlineSelectWidget.removeItems( items );\n\t\tthis.selectFirstSelectablePage();\n\t}\n\tthis.stackLayout.removeItems( pages );\n\tthis.emit( 'remove', pages );\n\n\treturn this;\n};\n\n/**\n * Clear all pages from the booklet layout.\n *\n * To remove only a subset of pages from the booklet, use the #removePages method.\n *\n * @fires remove\n * @chainable\n * @return {OO.ui.BookletLayout} The layout, for chaining\n */\nOO.ui.BookletLayout.prototype.clearPages = function () {\n\tvar i, len,\n\t\tpages = this.stackLayout.getItems();\n\n\tthis.pages = {};\n\tthis.currentPageName = null;\n\tif ( this.outlined ) {\n\t\tthis.outlineSelectWidget.clearItems();\n\t\tfor ( i = 0, len = pages.length; i < len; i++ ) {\n\t\t\tpages[ i ].setOutlineItem( null );\n\t\t}\n\t}\n\tthis.stackLayout.clearItems();\n\n\tthis.emit( 'remove', pages );\n\n\treturn this;\n};\n\n/**\n * Set the current page by symbolic name.\n *\n * @fires set\n * @param {string} name Symbolic name of page\n */\nOO.ui.BookletLayout.prototype.setPage = function ( name ) {\n\tvar selectedItem,\n\t\t$focused,\n\t\tpage = this.pages[ name ],\n\t\tpreviousPage = this.currentPageName && this.pages[ this.currentPageName ];\n\n\tif ( name !== this.currentPageName ) {\n\t\tif ( this.outlined ) {\n\t\t\tselectedItem = this.outlineSelectWidget.findSelectedItem();\n\t\t\tif ( selectedItem && selectedItem.getData() !== name ) {\n\t\t\t\tthis.outlineSelectWidget.selectItemByData( name );\n\t\t\t}\n\t\t}\n\t\tif ( page ) {\n\t\t\tif ( previousPage ) {\n\t\t\t\tpreviousPage.setActive( false );\n\t\t\t\t// Blur anything focused if the next page doesn't have anything focusable.\n\t\t\t\t// This is not needed if the next page has something focusable (because once it is focused\n\t\t\t\t// this blur happens automatically). If the layout is non-continuous, this check is\n\t\t\t\t// meaningless because the next page is not visible yet and thus can't hold focus.\n\t\t\t\tif (\n\t\t\t\t\tthis.autoFocus &&\n\t\t\t\t\t!OO.ui.isMobile() &&\n\t\t\t\t\tthis.stackLayout.continuous &&\n\t\t\t\t\tOO.ui.findFocusable( page.$element ).length !== 0\n\t\t\t\t) {\n\t\t\t\t\t$focused = previousPage.$element.find( ':focus' );\n\t\t\t\t\tif ( $focused.length ) {\n\t\t\t\t\t\t$focused[ 0 ].blur();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.currentPageName = name;\n\t\t\tpage.setActive( true );\n\t\t\tthis.stackLayout.setItem( page );\n\t\t\tif ( !this.stackLayout.continuous && previousPage ) {\n\t\t\t\t// This should not be necessary, since any inputs on the previous page should have been\n\t\t\t\t// blurred when it was hidden, but browsers are not very consistent about this.\n\t\t\t\t$focused = previousPage.$element.find( ':focus' );\n\t\t\t\tif ( $focused.length ) {\n\t\t\t\t\t$focused[ 0 ].blur();\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.emit( 'set', page );\n\t\t}\n\t}\n};\n\n/**\n * For outlined-continuous booklets, also reset the outlineSelectWidget to the first item.\n *\n * @inheritdoc\n */\nOO.ui.BookletLayout.prototype.resetScroll = function () {\n\t// Parent method\n\tOO.ui.BookletLayout.parent.prototype.resetScroll.call( this );\n\n\tif ( this.outlined && this.stackLayout.continuous && this.outlineSelectWidget.findFirstSelectableItem() ) {\n\t\tthis.scrolling = true;\n\t\tthis.outlineSelectWidget.selectItem( this.outlineSelectWidget.findFirstSelectableItem() );\n\t\tthis.scrolling = false;\n\t}\n\treturn this;\n};\n\n/**\n * Select the first selectable page.\n *\n * @chainable\n * @return {OO.ui.BookletLayout} The layout, for chaining\n */\nOO.ui.BookletLayout.prototype.selectFirstSelectablePage = function () {\n\tif ( !this.outlineSelectWidget.findSelectedItem() ) {\n\t\tthis.outlineSelectWidget.selectItem( this.outlineSelectWidget.findFirstSelectableItem() );\n\t}\n\n\treturn this;\n};\n","/**\n * IndexLayouts contain {@link OO.ui.TabPanelLayout tab panel layouts} as well as\n * {@link OO.ui.TabSelectWidget tabs} that allow users to easily navigate through the tab panels and\n * select which one to display. By default, only one tab panel is displayed at a time. When a user\n * navigates to a new tab panel, the index layout automatically focuses on the first focusable element,\n * unless the default setting is changed.\n *\n * TODO: This class is similar to BookletLayout, we may want to refactor to reduce duplication\n *\n *     @example\n *     // Example of a IndexLayout that contains two TabPanelLayouts.\n *\n *     function TabPanelOneLayout( name, config ) {\n *         TabPanelOneLayout.parent.call( this, name, config );\n *         this.$element.append( '<p>First tab panel</p>' );\n *     }\n *     OO.inheritClass( TabPanelOneLayout, OO.ui.TabPanelLayout );\n *     TabPanelOneLayout.prototype.setupTabItem = function () {\n *         this.tabItem.setLabel( 'Tab panel one' );\n *     };\n *\n *     var tabPanel1 = new TabPanelOneLayout( 'one' ),\n *         tabPanel2 = new OO.ui.TabPanelLayout( 'two', { label: 'Tab panel two' } );\n *\n *     tabPanel2.$element.append( '<p>Second tab panel</p>' );\n *\n *     var index = new OO.ui.IndexLayout();\n *\n *     index.addTabPanels( [ tabPanel1, tabPanel2 ] );\n *     $( 'body' ).append( index.$element );\n *\n * @class\n * @extends OO.ui.MenuLayout\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {boolean} [continuous=false] Show all tab panels, one after another\n * @cfg {boolean} [autoFocus=true] Focus on the first focusable element when a new tab panel is displayed. Disabled on mobile.\n */\nOO.ui.IndexLayout = function OoUiIndexLayout( config ) {\n\t// Configuration initialization\n\tconfig = $.extend( {}, config, { menuPosition: 'top' } );\n\n\t// Parent constructor\n\tOO.ui.IndexLayout.parent.call( this, config );\n\n\t// Properties\n\tthis.currentTabPanelName = null;\n\tthis.tabPanels = {};\n\n\tthis.ignoreFocus = false;\n\tthis.stackLayout = new OO.ui.StackLayout( {\n\t\tcontinuous: !!config.continuous,\n\t\texpanded: this.expanded\n\t} );\n\tthis.setContentPanel( this.stackLayout );\n\tthis.autoFocus = config.autoFocus === undefined || !!config.autoFocus;\n\n\tthis.tabSelectWidget = new OO.ui.TabSelectWidget();\n\tthis.tabPanel = new OO.ui.PanelLayout( {\n\t\texpanded: this.expanded\n\t} );\n\tthis.setMenuPanel( this.tabPanel );\n\n\tthis.toggleMenu( true );\n\n\t// Events\n\tthis.stackLayout.connect( this, { set: 'onStackLayoutSet' } );\n\tthis.tabSelectWidget.connect( this, { select: 'onTabSelectWidgetSelect' } );\n\tif ( this.autoFocus ) {\n\t\t// Event 'focus' does not bubble, but 'focusin' does\n\t\tthis.stackLayout.$element.on( 'focusin', this.onStackLayoutFocus.bind( this ) );\n\t}\n\n\t// Initialization\n\tthis.$element.addClass( 'oo-ui-indexLayout' );\n\tthis.stackLayout.$element.addClass( 'oo-ui-indexLayout-stackLayout' );\n\tthis.tabPanel.$element\n\t\t.addClass( 'oo-ui-indexLayout-tabPanel' )\n\t\t.append( this.tabSelectWidget.$element );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.IndexLayout, OO.ui.MenuLayout );\n\n/* Events */\n\n/**\n * A 'set' event is emitted when a tab panel is {@link #setTabPanel set} to be displayed by the index layout.\n * @event set\n * @param {OO.ui.TabPanelLayout} tabPanel Current tab panel\n */\n\n/**\n * An 'add' event is emitted when tab panels are {@link #addTabPanels added} to the index layout.\n *\n * @event add\n * @param {OO.ui.TabPanelLayout[]} tabPanel Added tab panels\n * @param {number} index Index tab panels were added at\n */\n\n/**\n * A 'remove' event is emitted when tab panels are {@link #clearTabPanels cleared} or\n * {@link #removeTabPanels removed} from the index.\n *\n * @event remove\n * @param {OO.ui.TabPanelLayout[]} tabPanel Removed tab panels\n */\n\n/* Methods */\n\n/**\n * Handle stack layout focus.\n *\n * @private\n * @param {jQuery.Event} e Focusing event\n */\nOO.ui.IndexLayout.prototype.onStackLayoutFocus = function ( e ) {\n\tvar name, $target;\n\n\t// Find the tab panel that an element was focused within\n\t$target = $( e.target ).closest( '.oo-ui-tabPanelLayout' );\n\tfor ( name in this.tabPanels ) {\n\t\t// Check for tab panel match, exclude current tab panel to find only tab panel changes\n\t\tif ( this.tabPanels[ name ].$element[ 0 ] === $target[ 0 ] && name !== this.currentTabPanelName ) {\n\t\t\tthis.setTabPanel( name );\n\t\t\tbreak;\n\t\t}\n\t}\n};\n\n/**\n * Handle stack layout set events.\n *\n * @private\n * @param {OO.ui.PanelLayout|null} tabPanel The tab panel that is now the current panel\n */\nOO.ui.IndexLayout.prototype.onStackLayoutSet = function ( tabPanel ) {\n\t// If everything is unselected, do nothing\n\tif ( !tabPanel ) {\n\t\treturn;\n\t}\n\t// Focus the first element on the newly selected panel\n\tif ( this.autoFocus && !OO.ui.isMobile() ) {\n\t\tthis.focus();\n\t}\n};\n\n/**\n * Focus the first input in the current tab panel.\n *\n * If no tab panel is selected, the first selectable tab panel will be selected.\n * If the focus is already in an element on the current tab panel, nothing will happen.\n *\n * @param {number} [itemIndex] A specific item to focus on\n */\nOO.ui.IndexLayout.prototype.focus = function ( itemIndex ) {\n\tvar tabPanel,\n\t\titems = this.stackLayout.getItems();\n\n\tif ( itemIndex !== undefined && items[ itemIndex ] ) {\n\t\ttabPanel = items[ itemIndex ];\n\t} else {\n\t\ttabPanel = this.stackLayout.getCurrentItem();\n\t}\n\n\tif ( !tabPanel ) {\n\t\tthis.selectFirstSelectableTabPanel();\n\t\ttabPanel = this.stackLayout.getCurrentItem();\n\t}\n\tif ( !tabPanel ) {\n\t\treturn;\n\t}\n\t// Only change the focus if is not already in the current page\n\tif ( !OO.ui.contains( tabPanel.$element[ 0 ], this.getElementDocument().activeElement, true ) ) {\n\t\ttabPanel.focus();\n\t}\n};\n\n/**\n * Find the first focusable input in the index layout and focus\n * on it.\n */\nOO.ui.IndexLayout.prototype.focusFirstFocusable = function () {\n\tOO.ui.findFocusable( this.stackLayout.$element ).focus();\n};\n\n/**\n * Handle tab widget select events.\n *\n * @private\n * @param {OO.ui.OptionWidget|null} item Selected item\n */\nOO.ui.IndexLayout.prototype.onTabSelectWidgetSelect = function ( item ) {\n\tif ( item ) {\n\t\tthis.setTabPanel( item.getData() );\n\t}\n};\n\n/**\n * Get the tab panel closest to the specified tab panel.\n *\n * @param {OO.ui.TabPanelLayout} tabPanel Tab panel to use as a reference point\n * @return {OO.ui.TabPanelLayout|null} Tab panel closest to the specified\n */\nOO.ui.IndexLayout.prototype.getClosestTabPanel = function ( tabPanel ) {\n\tvar next, prev, level,\n\t\ttabPanels = this.stackLayout.getItems(),\n\t\tindex = tabPanels.indexOf( tabPanel );\n\n\tif ( index !== -1 ) {\n\t\tnext = tabPanels[ index + 1 ];\n\t\tprev = tabPanels[ index - 1 ];\n\t\t// Prefer adjacent tab panels at the same level\n\t\tlevel = this.tabSelectWidget.findItemFromData( tabPanel.getName() ).getLevel();\n\t\tif (\n\t\t\tprev &&\n\t\t\tlevel === this.tabSelectWidget.findItemFromData( prev.getName() ).getLevel()\n\t\t) {\n\t\t\treturn prev;\n\t\t}\n\t\tif (\n\t\t\tnext &&\n\t\t\tlevel === this.tabSelectWidget.findItemFromData( next.getName() ).getLevel()\n\t\t) {\n\t\t\treturn next;\n\t\t}\n\t}\n\treturn prev || next || null;\n};\n\n/**\n * Get the tabs widget.\n *\n * @return {OO.ui.TabSelectWidget} Tabs widget\n */\nOO.ui.IndexLayout.prototype.getTabs = function () {\n\treturn this.tabSelectWidget;\n};\n\n/**\n * Get a tab panel by its symbolic name.\n *\n * @param {string} name Symbolic name of tab panel\n * @return {OO.ui.TabPanelLayout|undefined} Tab panel, if found\n */\nOO.ui.IndexLayout.prototype.getTabPanel = function ( name ) {\n\treturn this.tabPanels[ name ];\n};\n\n/**\n * Get the current tab panel.\n *\n * @return {OO.ui.TabPanelLayout|undefined} Current tab panel, if found\n */\nOO.ui.IndexLayout.prototype.getCurrentTabPanel = function () {\n\tvar name = this.getCurrentTabPanelName();\n\treturn name ? this.getTabPanel( name ) : undefined;\n};\n\n/**\n * Get the symbolic name of the current tab panel.\n *\n * @return {string|null} Symbolic name of the current tab panel\n */\nOO.ui.IndexLayout.prototype.getCurrentTabPanelName = function () {\n\treturn this.currentTabPanelName;\n};\n\n/**\n * Add tab panels to the index layout\n *\n * When tab panels are added with the same names as existing tab panels, the existing tab panels\n * will be automatically removed before the new tab panels are added.\n *\n * @param {OO.ui.TabPanelLayout[]} tabPanels Tab panels to add\n * @param {number} index Index of the insertion point\n * @fires add\n * @chainable\n * @return {OO.ui.BookletLayout} The layout, for chaining\n */\nOO.ui.IndexLayout.prototype.addTabPanels = function ( tabPanels, index ) {\n\tvar i, len, name, tabPanel, item, currentIndex,\n\t\tstackLayoutTabPanels = this.stackLayout.getItems(),\n\t\tremove = [],\n\t\titems = [];\n\n\t// Remove tab panels with same names\n\tfor ( i = 0, len = tabPanels.length; i < len; i++ ) {\n\t\ttabPanel = tabPanels[ i ];\n\t\tname = tabPanel.getName();\n\n\t\tif ( Object.prototype.hasOwnProperty.call( this.tabPanels, name ) ) {\n\t\t\t// Correct the insertion index\n\t\t\tcurrentIndex = stackLayoutTabPanels.indexOf( this.tabPanels[ name ] );\n\t\t\tif ( currentIndex !== -1 && currentIndex + 1 < index ) {\n\t\t\t\tindex--;\n\t\t\t}\n\t\t\tremove.push( this.tabPanels[ name ] );\n\t\t}\n\t}\n\tif ( remove.length ) {\n\t\tthis.removeTabPanels( remove );\n\t}\n\n\t// Add new tab panels\n\tfor ( i = 0, len = tabPanels.length; i < len; i++ ) {\n\t\ttabPanel = tabPanels[ i ];\n\t\tname = tabPanel.getName();\n\t\tthis.tabPanels[ tabPanel.getName() ] = tabPanel;\n\t\titem = new OO.ui.TabOptionWidget( { data: name } );\n\t\ttabPanel.setTabItem( item );\n\t\titems.push( item );\n\t}\n\n\tif ( items.length ) {\n\t\tthis.tabSelectWidget.addItems( items, index );\n\t\tthis.selectFirstSelectableTabPanel();\n\t}\n\tthis.stackLayout.addItems( tabPanels, index );\n\tthis.emit( 'add', tabPanels, index );\n\n\treturn this;\n};\n\n/**\n * Remove the specified tab panels from the index layout.\n *\n * To remove all tab panels from the index, you may wish to use the #clearTabPanels method instead.\n *\n * @param {OO.ui.TabPanelLayout[]} tabPanels An array of tab panels to remove\n * @fires remove\n * @chainable\n * @return {OO.ui.BookletLayout} The layout, for chaining\n */\nOO.ui.IndexLayout.prototype.removeTabPanels = function ( tabPanels ) {\n\tvar i, len, name, tabPanel,\n\t\titems = [];\n\n\tfor ( i = 0, len = tabPanels.length; i < len; i++ ) {\n\t\ttabPanel = tabPanels[ i ];\n\t\tname = tabPanel.getName();\n\t\tdelete this.tabPanels[ name ];\n\t\titems.push( this.tabSelectWidget.findItemFromData( name ) );\n\t\ttabPanel.setTabItem( null );\n\t}\n\tif ( items.length ) {\n\t\tthis.tabSelectWidget.removeItems( items );\n\t\tthis.selectFirstSelectableTabPanel();\n\t}\n\tthis.stackLayout.removeItems( tabPanels );\n\tthis.emit( 'remove', tabPanels );\n\n\treturn this;\n};\n\n/**\n * Clear all tab panels from the index layout.\n *\n * To remove only a subset of tab panels from the index, use the #removeTabPanels method.\n *\n * @fires remove\n * @chainable\n * @return {OO.ui.BookletLayout} The layout, for chaining\n */\nOO.ui.IndexLayout.prototype.clearTabPanels = function () {\n\tvar i, len,\n\t\ttabPanels = this.stackLayout.getItems();\n\n\tthis.tabPanels = {};\n\tthis.currentTabPanelName = null;\n\tthis.tabSelectWidget.clearItems();\n\tfor ( i = 0, len = tabPanels.length; i < len; i++ ) {\n\t\ttabPanels[ i ].setTabItem( null );\n\t}\n\tthis.stackLayout.clearItems();\n\n\tthis.emit( 'remove', tabPanels );\n\n\treturn this;\n};\n\n/**\n * Set the current tab panel by symbolic name.\n *\n * @fires set\n * @param {string} name Symbolic name of tab panel\n */\nOO.ui.IndexLayout.prototype.setTabPanel = function ( name ) {\n\tvar selectedItem,\n\t\t$focused,\n\t\tpreviousTabPanel,\n\t\ttabPanel = this.tabPanels[ name ];\n\n\tif ( name !== this.currentTabPanelName ) {\n\t\tpreviousTabPanel = this.getCurrentTabPanel();\n\t\tselectedItem = this.tabSelectWidget.findSelectedItem();\n\t\tif ( selectedItem && selectedItem.getData() !== name ) {\n\t\t\tthis.tabSelectWidget.selectItemByData( name );\n\t\t}\n\t\tif ( tabPanel ) {\n\t\t\tif ( previousTabPanel ) {\n\t\t\t\tpreviousTabPanel.setActive( false );\n\t\t\t\t// Blur anything focused if the next tab panel doesn't have anything focusable.\n\t\t\t\t// This is not needed if the next tab panel has something focusable (because once it is focused\n\t\t\t\t// this blur happens automatically). If the layout is non-continuous, this check is\n\t\t\t\t// meaningless because the next tab panel is not visible yet and thus can't hold focus.\n\t\t\t\tif (\n\t\t\t\t\tthis.autoFocus &&\n\t\t\t\t\t!OO.ui.isMobile() &&\n\t\t\t\t\tthis.stackLayout.continuous &&\n\t\t\t\t\tOO.ui.findFocusable( tabPanel.$element ).length !== 0\n\t\t\t\t) {\n\t\t\t\t\t$focused = previousTabPanel.$element.find( ':focus' );\n\t\t\t\t\tif ( $focused.length ) {\n\t\t\t\t\t\t$focused[ 0 ].blur();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.currentTabPanelName = name;\n\t\t\ttabPanel.setActive( true );\n\t\t\tthis.stackLayout.setItem( tabPanel );\n\t\t\tif ( !this.stackLayout.continuous && previousTabPanel ) {\n\t\t\t\t// This should not be necessary, since any inputs on the previous tab panel should have been\n\t\t\t\t// blurred when it was hidden, but browsers are not very consistent about this.\n\t\t\t\t$focused = previousTabPanel.$element.find( ':focus' );\n\t\t\t\tif ( $focused.length ) {\n\t\t\t\t\t$focused[ 0 ].blur();\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.emit( 'set', tabPanel );\n\t\t}\n\t}\n};\n\n/**\n * Select the first selectable tab panel.\n *\n * @chainable\n * @return {OO.ui.BookletLayout} The layout, for chaining\n */\nOO.ui.IndexLayout.prototype.selectFirstSelectableTabPanel = function () {\n\tif ( !this.tabSelectWidget.findSelectedItem() ) {\n\t\tthis.tabSelectWidget.selectItem( this.tabSelectWidget.findFirstSelectableItem() );\n\t}\n\n\treturn this;\n};\n","/**\n * ToggleWidget implements basic behavior of widgets with an on/off state.\n * Please see OO.ui.ToggleButtonWidget and OO.ui.ToggleSwitchWidget for examples.\n *\n * @abstract\n * @class\n * @extends OO.ui.Widget\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {boolean} [value=false] The toggle’s initial on/off state.\n *  By default, the toggle is in the 'off' state.\n */\nOO.ui.ToggleWidget = function OoUiToggleWidget( config ) {\n\t// Configuration initialization\n\tconfig = config || {};\n\n\t// Parent constructor\n\tOO.ui.ToggleWidget.parent.call( this, config );\n\n\t// Properties\n\tthis.value = null;\n\n\t// Initialization\n\tthis.$element.addClass( 'oo-ui-toggleWidget' );\n\tthis.setValue( !!config.value );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.ToggleWidget, OO.ui.Widget );\n\n/* Events */\n\n/**\n * @event change\n *\n * A change event is emitted when the on/off state of the toggle changes.\n *\n * @param {boolean} value Value representing the new state of the toggle\n */\n\n/* Methods */\n\n/**\n * Get the value representing the toggle’s state.\n *\n * @return {boolean} The on/off state of the toggle\n */\nOO.ui.ToggleWidget.prototype.getValue = function () {\n\treturn this.value;\n};\n\n/**\n * Set the state of the toggle: `true` for 'on', `false` for 'off'.\n *\n * @param {boolean} value The state of the toggle\n * @fires change\n * @chainable\n * @return {OO.ui.Widget} The widget, for chaining\n */\nOO.ui.ToggleWidget.prototype.setValue = function ( value ) {\n\tvalue = !!value;\n\tif ( this.value !== value ) {\n\t\tthis.value = value;\n\t\tthis.emit( 'change', value );\n\t\tthis.$element.toggleClass( 'oo-ui-toggleWidget-on', value );\n\t\tthis.$element.toggleClass( 'oo-ui-toggleWidget-off', !value );\n\t}\n\treturn this;\n};\n","/**\n * ToggleButtons are buttons that have a state (‘on’ or ‘off’) that is represented by a\n * Boolean value. Like other {@link OO.ui.ButtonWidget buttons}, toggle buttons can be\n * configured with {@link OO.ui.mixin.IconElement icons}, {@link OO.ui.mixin.IndicatorElement indicators},\n * {@link OO.ui.mixin.TitledElement titles}, {@link OO.ui.mixin.FlaggedElement styling flags},\n * and {@link OO.ui.mixin.LabelElement labels}. Please see\n * the [OOUI documentation][1] on MediaWiki for more information.\n *\n *     @example\n *     // Toggle buttons in the 'off' and 'on' state.\n *     var toggleButton1 = new OO.ui.ToggleButtonWidget( {\n *         label: 'Toggle Button off'\n *     } );\n *     var toggleButton2 = new OO.ui.ToggleButtonWidget( {\n *         label: 'Toggle Button on',\n *         value: true\n *     } );\n *     // Append the buttons to the DOM.\n *     $( 'body' ).append( toggleButton1.$element, toggleButton2.$element );\n *\n * [1]: https://www.mediawiki.org/wiki/OOUI/Widgets/Buttons_and_Switches#Toggle_buttons\n *\n * @class\n * @extends OO.ui.ToggleWidget\n * @mixins OO.ui.mixin.ButtonElement\n * @mixins OO.ui.mixin.IconElement\n * @mixins OO.ui.mixin.IndicatorElement\n * @mixins OO.ui.mixin.LabelElement\n * @mixins OO.ui.mixin.TitledElement\n * @mixins OO.ui.mixin.FlaggedElement\n * @mixins OO.ui.mixin.TabIndexedElement\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {boolean} [value=false] The toggle button’s initial on/off\n *  state. By default, the button is in the 'off' state.\n */\nOO.ui.ToggleButtonWidget = function OoUiToggleButtonWidget( config ) {\n\t// Configuration initialization\n\tconfig = config || {};\n\n\t// Parent constructor\n\tOO.ui.ToggleButtonWidget.parent.call( this, config );\n\n\t// Mixin constructors\n\tOO.ui.mixin.ButtonElement.call( this, $.extend( {}, config, { active: this.active } ) );\n\tOO.ui.mixin.IconElement.call( this, config );\n\tOO.ui.mixin.IndicatorElement.call( this, config );\n\tOO.ui.mixin.LabelElement.call( this, config );\n\tOO.ui.mixin.TitledElement.call( this, $.extend( {}, config, { $titled: this.$button } ) );\n\tOO.ui.mixin.FlaggedElement.call( this, config );\n\tOO.ui.mixin.TabIndexedElement.call( this, $.extend( {}, config, { $tabIndexed: this.$button } ) );\n\n\t// Events\n\tthis.connect( this, { click: 'onAction' } );\n\n\t// Initialization\n\tthis.$button.append( this.$icon, this.$label, this.$indicator );\n\tthis.$element\n\t\t.addClass( 'oo-ui-toggleButtonWidget' )\n\t\t.append( this.$button );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.ToggleButtonWidget, OO.ui.ToggleWidget );\nOO.mixinClass( OO.ui.ToggleButtonWidget, OO.ui.mixin.ButtonElement );\nOO.mixinClass( OO.ui.ToggleButtonWidget, OO.ui.mixin.IconElement );\nOO.mixinClass( OO.ui.ToggleButtonWidget, OO.ui.mixin.IndicatorElement );\nOO.mixinClass( OO.ui.ToggleButtonWidget, OO.ui.mixin.LabelElement );\nOO.mixinClass( OO.ui.ToggleButtonWidget, OO.ui.mixin.TitledElement );\nOO.mixinClass( OO.ui.ToggleButtonWidget, OO.ui.mixin.FlaggedElement );\nOO.mixinClass( OO.ui.ToggleButtonWidget, OO.ui.mixin.TabIndexedElement );\n\n/* Static Properties */\n\n/**\n * @static\n * @inheritdoc\n */\nOO.ui.ToggleButtonWidget.static.tagName = 'span';\n\n/* Methods */\n\n/**\n * Handle the button action being triggered.\n *\n * @private\n */\nOO.ui.ToggleButtonWidget.prototype.onAction = function () {\n\tthis.setValue( !this.value );\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.ToggleButtonWidget.prototype.setValue = function ( value ) {\n\tvalue = !!value;\n\tif ( value !== this.value ) {\n\t\t// Might be called from parent constructor before ButtonElement constructor\n\t\tif ( this.$button ) {\n\t\t\tthis.$button.attr( 'aria-pressed', value.toString() );\n\t\t}\n\t\tthis.setActive( value );\n\t}\n\n\t// Parent method\n\tOO.ui.ToggleButtonWidget.parent.prototype.setValue.call( this, value );\n\n\treturn this;\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.ToggleButtonWidget.prototype.setButtonElement = function ( $button ) {\n\tif ( this.$button ) {\n\t\tthis.$button.removeAttr( 'aria-pressed' );\n\t}\n\tOO.ui.mixin.ButtonElement.prototype.setButtonElement.call( this, $button );\n\tthis.$button.attr( 'aria-pressed', this.value.toString() );\n};\n","/**\n * ToggleSwitches are switches that slide on and off. Their state is represented by a Boolean\n * value (`true` for ‘on’, and `false` otherwise, the default). The ‘off’ state is represented\n * visually by a slider in the leftmost position.\n *\n *     @example\n *     // Toggle switches in the 'off' and 'on' position.\n *     var toggleSwitch1 = new OO.ui.ToggleSwitchWidget();\n *     var toggleSwitch2 = new OO.ui.ToggleSwitchWidget( {\n *         value: true\n *     } );\n *\n *     // Create a FieldsetLayout to layout and label switches\n *     var fieldset = new OO.ui.FieldsetLayout( {\n *        label: 'Toggle switches'\n *     } );\n *     fieldset.addItems( [\n *         new OO.ui.FieldLayout( toggleSwitch1, { label: 'Off', align: 'top' } ),\n *         new OO.ui.FieldLayout( toggleSwitch2, { label: 'On', align: 'top' } )\n *     ] );\n *     $( 'body' ).append( fieldset.$element );\n *\n * @class\n * @extends OO.ui.ToggleWidget\n * @mixins OO.ui.mixin.TabIndexedElement\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {boolean} [value=false] The toggle switch’s initial on/off state.\n *  By default, the toggle switch is in the 'off' position.\n */\nOO.ui.ToggleSwitchWidget = function OoUiToggleSwitchWidget( config ) {\n\t// Parent constructor\n\tOO.ui.ToggleSwitchWidget.parent.call( this, config );\n\n\t// Mixin constructors\n\tOO.ui.mixin.TabIndexedElement.call( this, config );\n\n\t// Properties\n\tthis.dragging = false;\n\tthis.dragStart = null;\n\tthis.sliding = false;\n\tthis.$glow = $( '<span>' );\n\tthis.$grip = $( '<span>' );\n\n\t// Events\n\tthis.$element.on( {\n\t\tclick: this.onClick.bind( this ),\n\t\tkeypress: this.onKeyPress.bind( this )\n\t} );\n\n\t// Initialization\n\tthis.$glow.addClass( 'oo-ui-toggleSwitchWidget-glow' );\n\tthis.$grip.addClass( 'oo-ui-toggleSwitchWidget-grip' );\n\tthis.$element\n\t\t.addClass( 'oo-ui-toggleSwitchWidget' )\n\t\t.attr( 'role', 'checkbox' )\n\t\t.append( this.$glow, this.$grip );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.ToggleSwitchWidget, OO.ui.ToggleWidget );\nOO.mixinClass( OO.ui.ToggleSwitchWidget, OO.ui.mixin.TabIndexedElement );\n\n/* Methods */\n\n/**\n * Handle mouse click events.\n *\n * @private\n * @param {jQuery.Event} e Mouse click event\n * @return {undefined/boolean} False to prevent default if event is handled\n */\nOO.ui.ToggleSwitchWidget.prototype.onClick = function ( e ) {\n\tif ( !this.isDisabled() && e.which === OO.ui.MouseButtons.LEFT ) {\n\t\tthis.setValue( !this.value );\n\t}\n\treturn false;\n};\n\n/**\n * Handle key press events.\n *\n * @private\n * @param {jQuery.Event} e Key press event\n * @return {undefined/boolean} False to prevent default if event is handled\n */\nOO.ui.ToggleSwitchWidget.prototype.onKeyPress = function ( e ) {\n\tif ( !this.isDisabled() && ( e.which === OO.ui.Keys.SPACE || e.which === OO.ui.Keys.ENTER ) ) {\n\t\tthis.setValue( !this.value );\n\t\treturn false;\n\t}\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.ToggleSwitchWidget.prototype.setValue = function ( value ) {\n\tOO.ui.ToggleSwitchWidget.parent.prototype.setValue.call( this, value );\n\tthis.$element.attr( 'aria-checked', this.value.toString() );\n\treturn this;\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.ToggleSwitchWidget.prototype.simulateLabelClick = function () {\n\tif ( !this.isDisabled() ) {\n\t\tthis.setValue( !this.value );\n\t}\n\tthis.focus();\n};\n","/**\n * OutlineControlsWidget is a set of controls for an {@link OO.ui.OutlineSelectWidget outline select widget}.\n * Controls include moving items up and down, removing items, and adding different kinds of items.\n *\n * **Currently, this class is only used by {@link OO.ui.BookletLayout booklet layouts}.**\n *\n * @class\n * @extends OO.ui.Widget\n * @mixins OO.ui.mixin.GroupElement\n *\n * @constructor\n * @param {OO.ui.OutlineSelectWidget} outline Outline to control\n * @param {Object} [config] Configuration options\n * @cfg {Object} [abilities] List of abilties\n * @cfg {boolean} [abilities.move=true] Allow moving movable items\n * @cfg {boolean} [abilities.remove=true] Allow removing removable items\n */\nOO.ui.OutlineControlsWidget = function OoUiOutlineControlsWidget( outline, config ) {\n\t// Allow passing positional parameters inside the config object\n\tif ( OO.isPlainObject( outline ) && config === undefined ) {\n\t\tconfig = outline;\n\t\toutline = config.outline;\n\t}\n\n\t// Configuration initialization\n\tconfig = config || {};\n\n\t// Parent constructor\n\tOO.ui.OutlineControlsWidget.parent.call( this, config );\n\n\t// Mixin constructors\n\tOO.ui.mixin.GroupElement.call( this, config );\n\n\t// Properties\n\tthis.outline = outline;\n\tthis.$movers = $( '<div>' );\n\tthis.upButton = new OO.ui.ButtonWidget( {\n\t\tframed: false,\n\t\ticon: 'collapse',\n\t\ttitle: OO.ui.msg( 'ooui-outline-control-move-up' )\n\t} );\n\tthis.downButton = new OO.ui.ButtonWidget( {\n\t\tframed: false,\n\t\ticon: 'expand',\n\t\ttitle: OO.ui.msg( 'ooui-outline-control-move-down' )\n\t} );\n\tthis.removeButton = new OO.ui.ButtonWidget( {\n\t\tframed: false,\n\t\ticon: 'trash',\n\t\ttitle: OO.ui.msg( 'ooui-outline-control-remove' )\n\t} );\n\tthis.abilities = { move: true, remove: true };\n\n\t// Events\n\toutline.connect( this, {\n\t\tselect: 'onOutlineChange',\n\t\tadd: 'onOutlineChange',\n\t\tremove: 'onOutlineChange'\n\t} );\n\tthis.upButton.connect( this, { click: [ 'emit', 'move', -1 ] } );\n\tthis.downButton.connect( this, { click: [ 'emit', 'move', 1 ] } );\n\tthis.removeButton.connect( this, { click: [ 'emit', 'remove' ] } );\n\n\t// Initialization\n\tthis.$element.addClass( 'oo-ui-outlineControlsWidget' );\n\tthis.$group.addClass( 'oo-ui-outlineControlsWidget-items' );\n\tthis.$movers\n\t\t.addClass( 'oo-ui-outlineControlsWidget-movers' )\n\t\t.append( this.removeButton.$element, this.upButton.$element, this.downButton.$element );\n\tthis.$element.append( this.$icon, this.$group, this.$movers );\n\tthis.setAbilities( config.abilities || {} );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.OutlineControlsWidget, OO.ui.Widget );\nOO.mixinClass( OO.ui.OutlineControlsWidget, OO.ui.mixin.GroupElement );\n\n/* Events */\n\n/**\n * @event move\n * @param {number} places Number of places to move\n */\n\n/**\n * @event remove\n */\n\n/* Methods */\n\n/**\n * Set abilities.\n *\n * @param {Object} abilities List of abilties\n * @param {boolean} [abilities.move] Allow moving movable items\n * @param {boolean} [abilities.remove] Allow removing removable items\n */\nOO.ui.OutlineControlsWidget.prototype.setAbilities = function ( abilities ) {\n\tvar ability;\n\n\tfor ( ability in this.abilities ) {\n\t\tif ( abilities[ ability ] !== undefined ) {\n\t\t\tthis.abilities[ ability ] = !!abilities[ ability ];\n\t\t}\n\t}\n\n\tthis.onOutlineChange();\n};\n\n/**\n * Handle outline change events.\n *\n * @private\n */\nOO.ui.OutlineControlsWidget.prototype.onOutlineChange = function () {\n\tvar i, len, firstMovable, lastMovable,\n\t\titems = this.outline.getItems(),\n\t\tselectedItem = this.outline.findSelectedItem(),\n\t\tmovable = this.abilities.move && selectedItem && selectedItem.isMovable(),\n\t\tremovable = this.abilities.remove && selectedItem && selectedItem.isRemovable();\n\n\tif ( movable ) {\n\t\ti = -1;\n\t\tlen = items.length;\n\t\twhile ( ++i < len ) {\n\t\t\tif ( items[ i ].isMovable() ) {\n\t\t\t\tfirstMovable = items[ i ];\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\ti = len;\n\t\twhile ( i-- ) {\n\t\t\tif ( items[ i ].isMovable() ) {\n\t\t\t\tlastMovable = items[ i ];\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\tthis.upButton.setDisabled( !movable || selectedItem === firstMovable );\n\tthis.downButton.setDisabled( !movable || selectedItem === lastMovable );\n\tthis.removeButton.setDisabled( !removable );\n};\n","/**\n * OutlineOptionWidget is an item in an {@link OO.ui.OutlineSelectWidget OutlineSelectWidget}.\n *\n * Currently, this class is only used by {@link OO.ui.BookletLayout booklet layouts}, which contain\n * {@link OO.ui.PageLayout page layouts}. See {@link OO.ui.BookletLayout BookletLayout}\n * for an example.\n *\n * @class\n * @extends OO.ui.DecoratedOptionWidget\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {number} [level] Indentation level\n * @cfg {boolean} [movable] Allow modification from {@link OO.ui.OutlineControlsWidget outline controls}.\n */\nOO.ui.OutlineOptionWidget = function OoUiOutlineOptionWidget( config ) {\n\t// Configuration initialization\n\tconfig = config || {};\n\n\t// Parent constructor\n\tOO.ui.OutlineOptionWidget.parent.call( this, config );\n\n\t// Properties\n\tthis.level = 0;\n\tthis.movable = !!config.movable;\n\tthis.removable = !!config.removable;\n\n\t// Initialization\n\tthis.$element.addClass( 'oo-ui-outlineOptionWidget' );\n\tthis.setLevel( config.level );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.OutlineOptionWidget, OO.ui.DecoratedOptionWidget );\n\n/* Static Properties */\n\n/**\n * @static\n * @inheritdoc\n */\nOO.ui.OutlineOptionWidget.static.highlightable = true;\n\n/**\n * @static\n * @inheritdoc\n */\nOO.ui.OutlineOptionWidget.static.scrollIntoViewOnSelect = true;\n\n/**\n * @static\n * @inheritable\n * @property {string}\n */\nOO.ui.OutlineOptionWidget.static.levelClass = 'oo-ui-outlineOptionWidget-level-';\n\n/**\n * @static\n * @inheritable\n * @property {number}\n */\nOO.ui.OutlineOptionWidget.static.levels = 3;\n\n/* Methods */\n\n/**\n * Check if item is movable.\n *\n * Movability is used by {@link OO.ui.OutlineControlsWidget outline controls}.\n *\n * @return {boolean} Item is movable\n */\nOO.ui.OutlineOptionWidget.prototype.isMovable = function () {\n\treturn this.movable;\n};\n\n/**\n * Check if item is removable.\n *\n * Removability is used by {@link OO.ui.OutlineControlsWidget outline controls}.\n *\n * @return {boolean} Item is removable\n */\nOO.ui.OutlineOptionWidget.prototype.isRemovable = function () {\n\treturn this.removable;\n};\n\n/**\n * Get indentation level.\n *\n * @return {number} Indentation level\n */\nOO.ui.OutlineOptionWidget.prototype.getLevel = function () {\n\treturn this.level;\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.OutlineOptionWidget.prototype.setPressed = function ( state ) {\n\tOO.ui.OutlineOptionWidget.parent.prototype.setPressed.call( this, state );\n\treturn this;\n};\n\n/**\n * Set movability.\n *\n * Movability is used by {@link OO.ui.OutlineControlsWidget outline controls}.\n *\n * @param {boolean} movable Item is movable\n * @chainable\n * @return {OO.ui.Widget} The widget, for chaining\n */\nOO.ui.OutlineOptionWidget.prototype.setMovable = function ( movable ) {\n\tthis.movable = !!movable;\n\tthis.updateThemeClasses();\n\treturn this;\n};\n\n/**\n * Set removability.\n *\n * Removability is used by {@link OO.ui.OutlineControlsWidget outline controls}.\n *\n * @param {boolean} removable Item is removable\n * @chainable\n * @return {OO.ui.Widget} The widget, for chaining\n */\nOO.ui.OutlineOptionWidget.prototype.setRemovable = function ( removable ) {\n\tthis.removable = !!removable;\n\tthis.updateThemeClasses();\n\treturn this;\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.OutlineOptionWidget.prototype.setSelected = function ( state ) {\n\tOO.ui.OutlineOptionWidget.parent.prototype.setSelected.call( this, state );\n\treturn this;\n};\n\n/**\n * Set indentation level.\n *\n * @param {number} [level=0] Indentation level, in the range of [0,#maxLevel]\n * @chainable\n * @return {OO.ui.Widget} The widget, for chaining\n */\nOO.ui.OutlineOptionWidget.prototype.setLevel = function ( level ) {\n\tvar levels = this.constructor.static.levels,\n\t\tlevelClass = this.constructor.static.levelClass,\n\t\ti = levels;\n\n\tthis.level = level ? Math.max( 0, Math.min( levels - 1, level ) ) : 0;\n\twhile ( i-- ) {\n\t\tif ( this.level === i ) {\n\t\t\tthis.$element.addClass( levelClass + i );\n\t\t} else {\n\t\t\tthis.$element.removeClass( levelClass + i );\n\t\t}\n\t}\n\tthis.updateThemeClasses();\n\n\treturn this;\n};\n","/**\n * OutlineSelectWidget is a structured list that contains {@link OO.ui.OutlineOptionWidget outline options}\n * A set of controls can be provided with an {@link OO.ui.OutlineControlsWidget outline controls} widget.\n *\n * **Currently, this class is only used by {@link OO.ui.BookletLayout booklet layouts}.**\n *\n * @class\n * @extends OO.ui.SelectWidget\n * @mixins OO.ui.mixin.TabIndexedElement\n *\n * @constructor\n * @param {Object} [config] Configuration options\n */\nOO.ui.OutlineSelectWidget = function OoUiOutlineSelectWidget( config ) {\n\t// Parent constructor\n\tOO.ui.OutlineSelectWidget.parent.call( this, config );\n\n\t// Mixin constructors\n\tOO.ui.mixin.TabIndexedElement.call( this, config );\n\n\t// Events\n\tthis.$element.on( {\n\t\tfocus: this.bindDocumentKeyDownListener.bind( this ),\n\t\tblur: this.unbindDocumentKeyDownListener.bind( this )\n\t} );\n\n\t// Initialization\n\tthis.$element.addClass( 'oo-ui-outlineSelectWidget' );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.OutlineSelectWidget, OO.ui.SelectWidget );\nOO.mixinClass( OO.ui.OutlineSelectWidget, OO.ui.mixin.TabIndexedElement );\n","/**\n * ButtonOptionWidget is a special type of {@link OO.ui.mixin.ButtonElement button element} that\n * can be selected and configured with data. The class is\n * used with OO.ui.ButtonSelectWidget to create a selection of button options. Please see the\n * [OOUI documentation on MediaWiki] [1] for more information.\n *\n * [1]: https://www.mediawiki.org/wiki/OOUI/Widgets/Selects_and_Options#Button_selects_and_options\n *\n * @class\n * @extends OO.ui.OptionWidget\n * @mixins OO.ui.mixin.ButtonElement\n * @mixins OO.ui.mixin.IconElement\n * @mixins OO.ui.mixin.IndicatorElement\n * @mixins OO.ui.mixin.TitledElement\n *\n * @constructor\n * @param {Object} [config] Configuration options\n */\nOO.ui.ButtonOptionWidget = function OoUiButtonOptionWidget( config ) {\n\t// Configuration initialization\n\tconfig = config || {};\n\n\t// Parent constructor\n\tOO.ui.ButtonOptionWidget.parent.call( this, config );\n\n\t// Mixin constructors\n\tOO.ui.mixin.ButtonElement.call( this, config );\n\tOO.ui.mixin.IconElement.call( this, config );\n\tOO.ui.mixin.IndicatorElement.call( this, config );\n\tOO.ui.mixin.TitledElement.call( this, $.extend( {}, config, { $titled: this.$button } ) );\n\n\t// Initialization\n\tthis.$element.addClass( 'oo-ui-buttonOptionWidget' );\n\tthis.$button.append( this.$icon, this.$label, this.$indicator );\n\tthis.$element.append( this.$button );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.ButtonOptionWidget, OO.ui.OptionWidget );\nOO.mixinClass( OO.ui.ButtonOptionWidget, OO.ui.mixin.ButtonElement );\nOO.mixinClass( OO.ui.ButtonOptionWidget, OO.ui.mixin.IconElement );\nOO.mixinClass( OO.ui.ButtonOptionWidget, OO.ui.mixin.IndicatorElement );\nOO.mixinClass( OO.ui.ButtonOptionWidget, OO.ui.mixin.TitledElement );\n\n/* Static Properties */\n\n/**\n * Allow button mouse down events to pass through so they can be handled by the parent select widget\n *\n * @static\n * @inheritdoc\n */\nOO.ui.ButtonOptionWidget.static.cancelButtonMouseDownEvents = false;\n\n/**\n * @static\n * @inheritdoc\n */\nOO.ui.ButtonOptionWidget.static.highlightable = false;\n\n/* Methods */\n\n/**\n * @inheritdoc\n */\nOO.ui.ButtonOptionWidget.prototype.setSelected = function ( state ) {\n\tOO.ui.ButtonOptionWidget.parent.prototype.setSelected.call( this, state );\n\n\tif ( this.constructor.static.selectable ) {\n\t\tthis.setActive( state );\n\t}\n\n\treturn this;\n};\n","/**\n * ButtonSelectWidget is a {@link OO.ui.SelectWidget select widget} that contains\n * button options and is used together with\n * OO.ui.ButtonOptionWidget. The ButtonSelectWidget provides an interface for\n * highlighting, choosing, and selecting mutually exclusive options. Please see\n * the [OOUI documentation on MediaWiki] [1] for more information.\n *\n *     @example\n *     // Example: A ButtonSelectWidget that contains three ButtonOptionWidgets\n *     var option1 = new OO.ui.ButtonOptionWidget( {\n *         data: 1,\n *         label: 'Option 1',\n *         title: 'Button option 1'\n *     } );\n *\n *     var option2 = new OO.ui.ButtonOptionWidget( {\n *         data: 2,\n *         label: 'Option 2',\n *         title: 'Button option 2'\n *     } );\n *\n *     var option3 = new OO.ui.ButtonOptionWidget( {\n *         data: 3,\n *         label: 'Option 3',\n *         title: 'Button option 3'\n *     } );\n *\n *     var buttonSelect=new OO.ui.ButtonSelectWidget( {\n *         items: [ option1, option2, option3 ]\n *     } );\n *     $( 'body' ).append( buttonSelect.$element );\n *\n * [1]: https://www.mediawiki.org/wiki/OOUI/Widgets/Selects_and_Options\n *\n * @class\n * @extends OO.ui.SelectWidget\n * @mixins OO.ui.mixin.TabIndexedElement\n *\n * @constructor\n * @param {Object} [config] Configuration options\n */\nOO.ui.ButtonSelectWidget = function OoUiButtonSelectWidget( config ) {\n\t// Parent constructor\n\tOO.ui.ButtonSelectWidget.parent.call( this, config );\n\n\t// Mixin constructors\n\tOO.ui.mixin.TabIndexedElement.call( this, config );\n\n\t// Events\n\tthis.$element.on( {\n\t\tfocus: this.bindDocumentKeyDownListener.bind( this ),\n\t\tblur: this.unbindDocumentKeyDownListener.bind( this )\n\t} );\n\n\t// Initialization\n\tthis.$element.addClass( 'oo-ui-buttonSelectWidget' );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.ButtonSelectWidget, OO.ui.SelectWidget );\nOO.mixinClass( OO.ui.ButtonSelectWidget, OO.ui.mixin.TabIndexedElement );\n","/**\n * TabOptionWidget is an item in a {@link OO.ui.TabSelectWidget TabSelectWidget}.\n *\n * Currently, this class is only used by {@link OO.ui.IndexLayout index layouts}, which contain\n * {@link OO.ui.TabPanelLayout tab panel layouts}. See {@link OO.ui.IndexLayout IndexLayout}\n * for an example.\n *\n * @class\n * @extends OO.ui.OptionWidget\n *\n * @constructor\n * @param {Object} [config] Configuration options\n */\nOO.ui.TabOptionWidget = function OoUiTabOptionWidget( config ) {\n\t// Configuration initialization\n\tconfig = config || {};\n\n\t// Parent constructor\n\tOO.ui.TabOptionWidget.parent.call( this, config );\n\n\t// Initialization\n\tthis.$element\n\t\t.addClass( 'oo-ui-tabOptionWidget' )\n\t\t.attr( 'role', 'tab' );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.TabOptionWidget, OO.ui.OptionWidget );\n\n/* Static Properties */\n\n/**\n * @static\n * @inheritdoc\n */\nOO.ui.TabOptionWidget.static.highlightable = false;\n","/**\n * TabSelectWidget is a list that contains {@link OO.ui.TabOptionWidget tab options}\n *\n * **Currently, this class is only used by {@link OO.ui.IndexLayout index layouts}.**\n *\n * @class\n * @extends OO.ui.SelectWidget\n * @mixins OO.ui.mixin.TabIndexedElement\n *\n * @constructor\n * @param {Object} [config] Configuration options\n */\nOO.ui.TabSelectWidget = function OoUiTabSelectWidget( config ) {\n\t// Parent constructor\n\tOO.ui.TabSelectWidget.parent.call( this, config );\n\n\t// Mixin constructors\n\tOO.ui.mixin.TabIndexedElement.call( this, config );\n\n\t// Events\n\tthis.$element.on( {\n\t\tfocus: this.bindDocumentKeyDownListener.bind( this ),\n\t\tblur: this.unbindDocumentKeyDownListener.bind( this )\n\t} );\n\n\t// Initialization\n\tthis.$element\n\t\t.addClass( 'oo-ui-tabSelectWidget' )\n\t\t.attr( 'role', 'tablist' );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.TabSelectWidget, OO.ui.SelectWidget );\nOO.mixinClass( OO.ui.TabSelectWidget, OO.ui.mixin.TabIndexedElement );\n","/**\n * TagItemWidgets are used within a {@link OO.ui.TagMultiselectWidget\n * TagMultiselectWidget} to display the selected items.\n *\n * @class\n * @extends OO.ui.Widget\n * @mixins OO.ui.mixin.ItemWidget\n * @mixins OO.ui.mixin.LabelElement\n * @mixins OO.ui.mixin.FlaggedElement\n * @mixins OO.ui.mixin.TabIndexedElement\n * @mixins OO.ui.mixin.DraggableElement\n *\n * @constructor\n * @param {Object} [config] Configuration object\n * @cfg {boolean} [valid=true] Item is valid\n * @cfg {boolean} [fixed] Item is fixed. This means the item is\n *  always included in the values and cannot be removed.\n */\nOO.ui.TagItemWidget = function OoUiTagItemWidget( config ) {\n\tconfig = config || {};\n\n\t// Parent constructor\n\tOO.ui.TagItemWidget.parent.call( this, config );\n\n\t// Mixin constructors\n\tOO.ui.mixin.ItemWidget.call( this );\n\tOO.ui.mixin.LabelElement.call( this, config );\n\tOO.ui.mixin.FlaggedElement.call( this, config );\n\tOO.ui.mixin.TabIndexedElement.call( this, config );\n\tOO.ui.mixin.DraggableElement.call( this, config );\n\n\tthis.valid = config.valid === undefined ? true : !!config.valid;\n\tthis.fixed = !!config.fixed;\n\n\tthis.closeButton = new OO.ui.ButtonWidget( {\n\t\tframed: false,\n\t\ticon: 'close',\n\t\ttabIndex: -1,\n\t\ttitle: OO.ui.msg( 'ooui-item-remove' )\n\t} );\n\tthis.closeButton.setDisabled( this.isDisabled() );\n\n\t// Events\n\tthis.closeButton\n\t\t.connect( this, { click: 'remove' } );\n\tthis.$element\n\t\t.on( 'click', this.select.bind( this ) )\n\t\t.on( 'keydown', this.onKeyDown.bind( this ) )\n\t\t// Prevent propagation of mousedown; the tag item \"lives\" in the\n\t\t// clickable area of the TagMultiselectWidget, which listens to\n\t\t// mousedown to open the menu or popup. We want to prevent that\n\t\t// for clicks specifically on the tag itself, so the actions taken\n\t\t// are more deliberate. When the tag is clicked, it will emit the\n\t\t// selection event (similar to how #OO.ui.MultioptionWidget emits 'change')\n\t\t// and can be handled separately.\n\t\t.on( 'mousedown', function ( e ) { e.stopPropagation(); } );\n\n\t// Initialization\n\tthis.$element\n\t\t.addClass( 'oo-ui-tagItemWidget' )\n\t\t.append( this.$label, this.closeButton.$element );\n};\n\n/* Initialization */\n\nOO.inheritClass( OO.ui.TagItemWidget, OO.ui.Widget );\nOO.mixinClass( OO.ui.TagItemWidget, OO.ui.mixin.ItemWidget );\nOO.mixinClass( OO.ui.TagItemWidget, OO.ui.mixin.LabelElement );\nOO.mixinClass( OO.ui.TagItemWidget, OO.ui.mixin.FlaggedElement );\nOO.mixinClass( OO.ui.TagItemWidget, OO.ui.mixin.TabIndexedElement );\nOO.mixinClass( OO.ui.TagItemWidget, OO.ui.mixin.DraggableElement );\n\n/* Events */\n\n/**\n * @event remove\n *\n * A remove action was performed on the item\n */\n\n/**\n * @event navigate\n * @param {string} direction Direction of the movement, forward or backwards\n *\n * A navigate action was performed on the item\n */\n\n/**\n * @event select\n *\n * The tag widget was selected. This can occur when the widget\n * is either clicked or enter was pressed on it.\n */\n\n/**\n * @event valid\n * @param {boolean} isValid Item is valid\n *\n * Item validity has changed\n */\n\n/**\n * @event fixed\n * @param {boolean} isFixed Item is fixed\n *\n * Item fixed state has changed\n */\n\n/* Methods */\n\n/**\n * Set this item as fixed, meaning it cannot be removed\n *\n * @param {string} [state] Item is fixed\n * @fires fixed\n * @return {OO.ui.Widget} The widget, for chaining\n */\nOO.ui.TagItemWidget.prototype.setFixed = function ( state ) {\n\tstate = state === undefined ? !this.fixed : !!state;\n\n\tif ( this.fixed !== state ) {\n\t\tthis.fixed = state;\n\t\tif ( this.closeButton ) {\n\t\t\tthis.closeButton.toggle( !this.fixed );\n\t\t}\n\n\t\tif ( !this.fixed && this.elementGroup && !this.elementGroup.isDraggable() ) {\n\t\t\t// Only enable the state of the item if the\n\t\t\t// entire group is draggable\n\t\t\tthis.toggleDraggable( !this.fixed );\n\t\t}\n\t\tthis.$element.toggleClass( 'oo-ui-tagItemWidget-fixed', this.fixed );\n\n\t\tthis.emit( 'fixed', this.isFixed() );\n\t}\n\treturn this;\n};\n\n/**\n * Check whether the item is fixed\n * @return {boolean}\n */\nOO.ui.TagItemWidget.prototype.isFixed = function () {\n\treturn this.fixed;\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.TagItemWidget.prototype.setDisabled = function ( state ) {\n\tif ( state && this.elementGroup && !this.elementGroup.isDisabled() ) {\n\t\tOO.ui.warnDeprecation( 'TagItemWidget#setDisabled: Disabling individual items is deprecated and will result in inconsistent behavior. Use #setFixed instead. See T193571.' );\n\t}\n\t// Parent method\n\tOO.ui.TagItemWidget.parent.prototype.setDisabled.call( this, state );\n\tif (\n\t\t!state &&\n\t\t// Verify we have a group, and that the widget is ready\n\t\tthis.toggleDraggable && this.elementGroup &&\n\t\t!this.isFixed() &&\n\t\t!this.elementGroup.isDraggable()\n\t) {\n\t\t// Only enable the draggable state of the item if the\n\t\t// entire group is draggable to begin with, and if the\n\t\t// item is not fixed\n\t\tthis.toggleDraggable( !state );\n\t}\n\n\tif ( this.closeButton ) {\n\t\tthis.closeButton.setDisabled( state );\n\t}\n\n\treturn this;\n};\n\n/**\n * Handle removal of the item\n *\n * This is mainly for extensibility concerns, so other children\n * of this class can change the behavior if they need to. This\n * is called by both clicking the 'remove' button but also\n * on keypress, which is harder to override if needed.\n *\n * @fires remove\n */\nOO.ui.TagItemWidget.prototype.remove = function () {\n\tif ( !this.isDisabled() && !this.isFixed() ) {\n\t\tthis.emit( 'remove' );\n\t}\n};\n\n/**\n * Handle a keydown event on the widget\n *\n * @fires navigate\n * @fires remove\n * @param {jQuery.Event} e Key down event\n * @return {boolean|undefined} false to stop the operation\n */\nOO.ui.TagItemWidget.prototype.onKeyDown = function ( e ) {\n\tvar movement;\n\n\tif ( !this.isDisabled() && !this.isFixed() && e.keyCode === OO.ui.Keys.BACKSPACE || e.keyCode === OO.ui.Keys.DELETE ) {\n\t\tthis.remove();\n\t\treturn false;\n\t} else if ( e.keyCode === OO.ui.Keys.ENTER ) {\n\t\tthis.select();\n\t\treturn false;\n\t} else if (\n\t\te.keyCode === OO.ui.Keys.LEFT ||\n\t\te.keyCode === OO.ui.Keys.RIGHT\n\t) {\n\t\tif ( OO.ui.Element.static.getDir( this.$element ) === 'rtl' ) {\n\t\t\tmovement = {\n\t\t\t\tleft: 'forwards',\n\t\t\t\tright: 'backwards'\n\t\t\t};\n\t\t} else {\n\t\t\tmovement = {\n\t\t\t\tleft: 'backwards',\n\t\t\t\tright: 'forwards'\n\t\t\t};\n\t\t}\n\n\t\tthis.emit(\n\t\t\t'navigate',\n\t\t\te.keyCode === OO.ui.Keys.LEFT ?\n\t\t\t\tmovement.left : movement.right\n\t\t);\n\t\treturn false;\n\t}\n};\n\n/**\n * Select this item\n *\n * @fires select\n */\nOO.ui.TagItemWidget.prototype.select = function () {\n\tif ( !this.isDisabled() ) {\n\t\tthis.emit( 'select' );\n\t}\n};\n\n/**\n * Set the valid state of this item\n *\n * @param {boolean} [valid] Item is valid\n * @fires valid\n */\nOO.ui.TagItemWidget.prototype.toggleValid = function ( valid ) {\n\tvalid = valid === undefined ? !this.valid : !!valid;\n\n\tif ( this.valid !== valid ) {\n\t\tthis.valid = valid;\n\n\t\tthis.setFlags( { invalid: !this.valid } );\n\n\t\tthis.emit( 'valid', this.valid );\n\t}\n};\n\n/**\n * Check whether the item is valid\n *\n * @return {boolean} Item is valid\n */\nOO.ui.TagItemWidget.prototype.isValid = function () {\n\treturn this.valid;\n};\n","/**\n * A basic tag multiselect widget, similar in concept to {@link OO.ui.ComboBoxInputWidget combo box widget}\n * that allows the user to add multiple values that are displayed in a tag area.\n *\n * This widget is a base widget; see {@link OO.ui.MenuTagMultiselectWidget MenuTagMultiselectWidget} and\n * {@link OO.ui.PopupTagMultiselectWidget PopupTagMultiselectWidget} for the implementations that use\n * a menu and a popup respectively.\n *\n *     @example\n *     // Example: A basic TagMultiselectWidget.\n *     var widget = new OO.ui.TagMultiselectWidget( {\n *         inputPosition: 'outline',\n *         allowedValues: [ 'Option 1', 'Option 2', 'Option 3' ],\n *         selected: [ 'Option 1' ]\n *     } );\n *     $( 'body' ).append( widget.$element );\n *\n * @class\n * @extends OO.ui.Widget\n * @mixins OO.ui.mixin.GroupWidget\n * @mixins OO.ui.mixin.DraggableGroupElement\n * @mixins OO.ui.mixin.IndicatorElement\n * @mixins OO.ui.mixin.IconElement\n * @mixins OO.ui.mixin.TabIndexedElement\n * @mixins OO.ui.mixin.FlaggedElement\n *\n * @constructor\n * @param {Object} config Configuration object\n * @cfg {Object} [input] Configuration options for the input widget\n * @cfg {OO.ui.InputWidget} [inputWidget] An optional input widget. If given, it will\n *  replace the input widget used in the TagMultiselectWidget. If not given,\n *  TagMultiselectWidget creates its own.\n * @cfg {boolean} [inputPosition='inline'] Position of the input. Options are:\n * \t- inline: The input is invisible, but exists inside the tag list, so\n * \t\tthe user types into the tag groups to add tags.\n * \t- outline: The input is underneath the tag area.\n * \t- none: No input supplied\n * @cfg {boolean} [allowEditTags=true] Allow editing of the tags by clicking them\n * @cfg {boolean} [allowArbitrary=false] Allow data items to be added even if\n *  not present in the menu.\n * @cfg {Object[]} [allowedValues] An array representing the allowed items\n *  by their datas.\n * @cfg {boolean} [allowDuplicates=false] Allow duplicate items to be added\n * @cfg {boolean} [allowDisplayInvalidTags=false] Allow the display of\n *  invalid tags. These tags will display with an invalid state, and\n *  the widget as a whole will have an invalid state if any invalid tags\n *  are present.\n * @cfg {number} [limit] An optional limit on the number of selected options.\n *  If the limit exists and is reached, the input is disabled, not allowing\n *  for any additions. If the limit is unset or is 0, an unlimited number\n *  of items can be added.\n * @cfg {boolean} [allowReordering=true] Allow reordering of the items\n * @cfg {Object[]|String[]} [selected] A set of selected tags. If given,\n *  these will appear in the tag list on initialization, as long as they\n *  pass the validity tests.\n */\nOO.ui.TagMultiselectWidget = function OoUiTagMultiselectWidget( config ) {\n\tvar inputEvents,\n\t\trAF = window.requestAnimationFrame || setTimeout,\n\t\twidget = this,\n\t\t$tabFocus = $( '<span>' )\n\t\t\t.addClass( 'oo-ui-tagMultiselectWidget-focusTrap' );\n\n\tconfig = config || {};\n\n\t// Parent constructor\n\tOO.ui.TagMultiselectWidget.parent.call( this, config );\n\n\t// Mixin constructors\n\tOO.ui.mixin.GroupWidget.call( this, config );\n\tOO.ui.mixin.IndicatorElement.call( this, config );\n\tOO.ui.mixin.IconElement.call( this, config );\n\tOO.ui.mixin.TabIndexedElement.call( this, config );\n\tOO.ui.mixin.FlaggedElement.call( this, config );\n\tOO.ui.mixin.DraggableGroupElement.call( this, config );\n\n\tthis.toggleDraggable(\n\t\tconfig.allowReordering === undefined ?\n\t\t\ttrue : !!config.allowReordering\n\t);\n\n\tthis.inputPosition =\n\t\tthis.constructor.static.allowedInputPositions.indexOf( config.inputPosition ) > -1 ?\n\t\t\tconfig.inputPosition : 'inline';\n\tthis.allowEditTags = config.allowEditTags === undefined ? true : !!config.allowEditTags;\n\tthis.allowArbitrary = !!config.allowArbitrary;\n\tthis.allowDuplicates = !!config.allowDuplicates;\n\tthis.allowedValues = config.allowedValues || [];\n\tthis.allowDisplayInvalidTags = config.allowDisplayInvalidTags;\n\tthis.hasInput = this.inputPosition !== 'none';\n\tthis.limit = config.limit;\n\tthis.height = null;\n\tthis.valid = true;\n\n\tthis.$content = $( '<div>' )\n\t\t.addClass( 'oo-ui-tagMultiselectWidget-content' );\n\tthis.$handle = $( '<div>' )\n\t\t.addClass( 'oo-ui-tagMultiselectWidget-handle' )\n\t\t.append(\n\t\t\tthis.$indicator,\n\t\t\tthis.$icon,\n\t\t\tthis.$content\n\t\t\t\t.append(\n\t\t\t\t\tthis.$group\n\t\t\t\t\t\t.addClass( 'oo-ui-tagMultiselectWidget-group' )\n\t\t\t\t)\n\t\t);\n\n\t// Events\n\tthis.aggregate( {\n\t\tremove: 'itemRemove',\n\t\tnavigate: 'itemNavigate',\n\t\tselect: 'itemSelect',\n\t\tfixed: 'itemFixed'\n\t} );\n\tthis.connect( this, {\n\t\titemRemove: 'onTagRemove',\n\t\titemSelect: 'onTagSelect',\n\t\titemFixed: 'onTagFixed',\n\t\titemNavigate: 'onTagNavigate',\n\t\tchange: 'onChangeTags'\n\t} );\n\tthis.$handle.on( {\n\t\tmousedown: this.onMouseDown.bind( this )\n\t} );\n\n\t// Initialize\n\tthis.$element\n\t\t.addClass( 'oo-ui-tagMultiselectWidget' )\n\t\t.append( this.$handle );\n\n\tif ( this.hasInput ) {\n\t\tif ( config.inputWidget ) {\n\t\t\tthis.input = config.inputWidget;\n\t\t} else {\n\t\t\tthis.input = new OO.ui.TextInputWidget( $.extend( {\n\t\t\t\tplaceholder: config.placeholder,\n\t\t\t\tclasses: [ 'oo-ui-tagMultiselectWidget-input' ]\n\t\t\t}, config.input ) );\n\t\t}\n\t\tthis.input.setDisabled( this.isDisabled() );\n\n\t\tinputEvents = {\n\t\t\tfocus: this.onInputFocus.bind( this ),\n\t\t\tblur: this.onInputBlur.bind( this ),\n\t\t\t'propertychange change click mouseup keydown keyup input cut paste select focus':\n\t\t\t\tOO.ui.debounce( this.updateInputSize.bind( this ) ),\n\t\t\tkeydown: this.onInputKeyDown.bind( this ),\n\t\t\tkeypress: this.onInputKeyPress.bind( this )\n\t\t};\n\n\t\tthis.input.$input.on( inputEvents );\n\t\tthis.inputPlaceholder = this.input.$input.attr( 'placeholder' );\n\n\t\tif ( this.inputPosition === 'outline' ) {\n\t\t\t// Override max-height for the input widget\n\t\t\t// in the case the widget is outline so it can\n\t\t\t// stretch all the way if the widget is wide\n\t\t\tthis.input.$element.css( 'max-width', 'inherit' );\n\t\t\tthis.$element\n\t\t\t\t.addClass( 'oo-ui-tagMultiselectWidget-outlined' )\n\t\t\t\t.append( this.input.$element );\n\t\t} else {\n\t\t\tthis.$element.addClass( 'oo-ui-tagMultiselectWidget-inlined' );\n\t\t\t// HACK: When the widget is using 'inline' input, the\n\t\t\t// behavior needs to only use the $input itself\n\t\t\t// so we style and size it accordingly (otherwise\n\t\t\t// the styling and sizing can get very convoluted\n\t\t\t// when the wrapping divs and other elements)\n\t\t\t// We are taking advantage of still being able to\n\t\t\t// call the widget itself for operations like\n\t\t\t// .getValue() and setDisabled() and .focus() but\n\t\t\t// having only the $input attached to the DOM\n\t\t\tthis.$content.append( this.input.$input );\n\t\t}\n\t} else {\n\t\tthis.$content.append( $tabFocus );\n\t}\n\n\tthis.setTabIndexedElement(\n\t\tthis.hasInput ?\n\t\t\tthis.input.$input :\n\t\t\t$tabFocus\n\t);\n\n\tif ( config.selected ) {\n\t\tthis.setValue( config.selected );\n\t}\n\n\t// HACK: Input size needs to be calculated after everything\n\t// else is rendered\n\trAF( function () {\n\t\tif ( widget.hasInput ) {\n\t\t\twidget.updateInputSize();\n\t\t}\n\t} );\n};\n\n/* Initialization */\n\nOO.inheritClass( OO.ui.TagMultiselectWidget, OO.ui.Widget );\nOO.mixinClass( OO.ui.TagMultiselectWidget, OO.ui.mixin.GroupWidget );\nOO.mixinClass( OO.ui.TagMultiselectWidget, OO.ui.mixin.DraggableGroupElement );\nOO.mixinClass( OO.ui.TagMultiselectWidget, OO.ui.mixin.IndicatorElement );\nOO.mixinClass( OO.ui.TagMultiselectWidget, OO.ui.mixin.IconElement );\nOO.mixinClass( OO.ui.TagMultiselectWidget, OO.ui.mixin.TabIndexedElement );\nOO.mixinClass( OO.ui.TagMultiselectWidget, OO.ui.mixin.FlaggedElement );\n\n/* Static properties */\n\n/**\n * Allowed input positions.\n * - inline: The input is inside the tag list\n * - outline: The input is under the tag list\n * - none: There is no input\n *\n * @property {Array}\n */\nOO.ui.TagMultiselectWidget.static.allowedInputPositions = [ 'inline', 'outline', 'none' ];\n\n/* Methods */\n\n/**\n * Handle mouse down events.\n *\n * @private\n * @param {jQuery.Event} e Mouse down event\n * @return {boolean} False to prevent defaults\n */\nOO.ui.TagMultiselectWidget.prototype.onMouseDown = function ( e ) {\n\tif (\n\t\t!this.isDisabled() &&\n\t\t( !this.hasInput || e.target !== this.input.$input[ 0 ] ) &&\n\t\te.which === OO.ui.MouseButtons.LEFT\n\t) {\n\t\tthis.focus();\n\t\treturn false;\n\t}\n};\n\n/**\n * Handle key press events.\n *\n * @private\n * @param {jQuery.Event} e Key press event\n * @return {boolean} Whether to prevent defaults\n */\nOO.ui.TagMultiselectWidget.prototype.onInputKeyPress = function ( e ) {\n\tvar stopOrContinue,\n\t\twithMetaKey = e.metaKey || e.ctrlKey;\n\n\tif ( !this.isDisabled() ) {\n\t\tif ( e.which === OO.ui.Keys.ENTER ) {\n\t\t\tstopOrContinue = this.doInputEnter( e, withMetaKey );\n\t\t}\n\n\t\t// Make sure the input gets resized.\n\t\tsetTimeout( this.updateInputSize.bind( this ), 0 );\n\t\treturn stopOrContinue;\n\t}\n};\n\n/**\n * Handle key down events.\n *\n * @private\n * @param {jQuery.Event} e Key down event\n * @return {boolean}\n */\nOO.ui.TagMultiselectWidget.prototype.onInputKeyDown = function ( e ) {\n\tvar movement, direction,\n\t\twidget = this,\n\t\twithMetaKey = e.metaKey || e.ctrlKey,\n\t\tisMovementInsideInput = function ( direction ) {\n\t\t\tvar inputRange = widget.input.getRange(),\n\t\t\t\tinputValue = widget.hasInput && widget.input.getValue();\n\n\t\t\tif ( direction === 'forwards' && inputRange.to > inputValue.length - 1 ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tif ( direction === 'backwards' && inputRange.from <= 0 ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\treturn true;\n\t\t};\n\n\tif ( !this.isDisabled() ) {\n\t\t// 'keypress' event is not triggered for Backspace\n\t\tif ( e.keyCode === OO.ui.Keys.BACKSPACE ) {\n\t\t\treturn this.doInputBackspace( e, withMetaKey );\n\t\t} else if ( e.keyCode === OO.ui.Keys.ESCAPE ) {\n\t\t\treturn this.doInputEscape( e );\n\t\t} else if (\n\t\t\te.keyCode === OO.ui.Keys.LEFT ||\n\t\t\te.keyCode === OO.ui.Keys.RIGHT\n\t\t) {\n\t\t\tif ( OO.ui.Element.static.getDir( this.$element ) === 'rtl' ) {\n\t\t\t\tmovement = {\n\t\t\t\t\tleft: 'forwards',\n\t\t\t\t\tright: 'backwards'\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\tmovement = {\n\t\t\t\t\tleft: 'backwards',\n\t\t\t\t\tright: 'forwards'\n\t\t\t\t};\n\t\t\t}\n\t\t\tdirection = e.keyCode === OO.ui.Keys.LEFT ?\n\t\t\t\tmovement.left : movement.right;\n\n\t\t\tif ( !this.hasInput || !isMovementInsideInput( direction ) ) {\n\t\t\t\treturn this.doInputArrow( e, direction, withMetaKey );\n\t\t\t}\n\t\t}\n\t}\n};\n\n/**\n * Respond to input focus event\n */\nOO.ui.TagMultiselectWidget.prototype.onInputFocus = function () {\n\tthis.$element.addClass( 'oo-ui-tagMultiselectWidget-focus' );\n\t// Reset validity\n\tthis.toggleValid( true );\n};\n\n/**\n * Respond to input blur event\n */\nOO.ui.TagMultiselectWidget.prototype.onInputBlur = function () {\n\tthis.$element.removeClass( 'oo-ui-tagMultiselectWidget-focus' );\n\n\t// Set the widget as invalid if there's text in the input\n\tthis.addTagFromInput();\n\tthis.toggleValid( this.checkValidity() && ( !this.hasInput || !this.input.getValue() ) );\n};\n\n/**\n * Perform an action after the enter key on the input\n *\n * @param {jQuery.Event} e Event data\n * @param {boolean} [withMetaKey] Whether this key was pressed with\n * a meta key like 'ctrl'\n * @return {boolean} Whether to prevent defaults\n */\nOO.ui.TagMultiselectWidget.prototype.doInputEnter = function () {\n\tthis.addTagFromInput();\n\treturn false;\n};\n\n/**\n * Perform an action responding to the enter key on the input\n *\n * @param {jQuery.Event} e Event data\n * @param {boolean} [withMetaKey] Whether this key was pressed with\n * a meta key like 'ctrl'\n * @return {boolean} Whether to prevent defaults\n */\nOO.ui.TagMultiselectWidget.prototype.doInputBackspace = function ( e, withMetaKey ) {\n\tvar items, item;\n\n\tif (\n\t\tthis.inputPosition === 'inline' &&\n\t\tthis.input.getValue() === '' &&\n\t\t!this.isEmpty()\n\t) {\n\t\t// Delete the last item\n\t\titems = this.getItems();\n\t\titem = items[ items.length - 1 ];\n\n\t\tif ( !item.isDisabled() && !item.isFixed() ) {\n\t\t\tthis.removeItems( [ item ] );\n\t\t\t// If Ctrl/Cmd was pressed, delete item entirely.\n\t\t\t// Otherwise put it into the text field for editing.\n\t\t\tif ( !withMetaKey ) {\n\t\t\t\tthis.input.setValue( item.getData() );\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n};\n\n/**\n * Perform an action after the escape key on the input\n *\n * @param {jQuery.Event} e Event data\n */\nOO.ui.TagMultiselectWidget.prototype.doInputEscape = function () {\n\tthis.clearInput();\n};\n\n/**\n * Perform an action after the arrow key on the input, select the previous\n * item from the input.\n * See #getPreviousItem\n *\n * @param {jQuery.Event} e Event data\n * @param {string} direction Direction of the movement; forwards or backwards\n * @param {boolean} [withMetaKey] Whether this key was pressed with\n *  a meta key like 'ctrl'\n */\nOO.ui.TagMultiselectWidget.prototype.doInputArrow = function ( e, direction ) {\n\tif (\n\t\tthis.inputPosition === 'inline' &&\n\t\t!this.isEmpty() &&\n\t\tdirection === 'backwards'\n\t) {\n\t\t// Get previous item\n\t\tthis.getPreviousItem().focus();\n\t}\n};\n\n/**\n * Respond to item select event\n *\n * @param {OO.ui.TagItemWidget} item Selected item\n */\nOO.ui.TagMultiselectWidget.prototype.onTagSelect = function ( item ) {\n\tif ( this.hasInput && this.allowEditTags && !item.isFixed() ) {\n\t\tif ( this.input.getValue() ) {\n\t\t\tthis.addTagFromInput();\n\t\t}\n\t\t// 1. Get the label of the tag into the input\n\t\tthis.input.setValue( item.getData() );\n\t\t// 2. Remove the tag\n\t\tthis.removeItems( [ item ] );\n\t\t// 3. Focus the input\n\t\tthis.focus();\n\t}\n};\n\n/**\n * Respond to item fixed state change\n *\n * @param {OO.ui.TagItemWidget} item Selected item\n */\nOO.ui.TagMultiselectWidget.prototype.onTagFixed = function ( item ) {\n\tvar i,\n\t\titems = this.getItems();\n\n\t// Move item to the end of the static items\n\tfor ( i = 0; i < items.length; i++ ) {\n\t\tif ( items[ i ] !== item && !items[ i ].isFixed() ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\tthis.addItems( item, i );\n};\n/**\n * Respond to change event, where items were added, removed, or cleared.\n */\nOO.ui.TagMultiselectWidget.prototype.onChangeTags = function () {\n\tvar isUnderLimit = this.isUnderLimit();\n\n\t// Reset validity\n\tthis.toggleValid(\n\t\tthis.checkValidity() &&\n\t\t( !this.hasInput || !this.input.getValue() )\n\t);\n\n\tif ( this.hasInput ) {\n\t\tthis.updateInputSize();\n\t\tif ( !isUnderLimit ) {\n\t\t\t// Clear the input\n\t\t\tthis.input.setValue( '' );\n\t\t}\n\t\tif ( this.inputPosition === 'outline' ) {\n\t\t\t// Show/clear the placeholder and enable/disable the input\n\t\t\t// based on whether we are/aren't under the specified limit\n\t\t\tthis.input.$input.attr( 'placeholder', isUnderLimit ? this.inputPlaceholder : '' );\n\t\t\tthis.input.setDisabled( !isUnderLimit );\n\t\t} else {\n\t\t\t// Show/hide the input\n\t\t\tthis.input.$input.toggleClass( 'oo-ui-element-hidden', !isUnderLimit );\n\t\t}\n\t}\n\tthis.updateIfHeightChanged();\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.TagMultiselectWidget.prototype.setDisabled = function ( isDisabled ) {\n\t// Parent method\n\tOO.ui.TagMultiselectWidget.parent.prototype.setDisabled.call( this, isDisabled );\n\n\tif ( this.hasInput && this.input ) {\n\t\tthis.input.setDisabled( !!isDisabled && !this.isUnderLimit() );\n\t}\n\n\tif ( this.items ) {\n\t\tthis.getItems().forEach( function ( item ) {\n\t\t\titem.setDisabled( !!isDisabled );\n\t\t} );\n\t}\n};\n\n/**\n * Respond to tag remove event\n * @param {OO.ui.TagItemWidget} item Removed tag\n */\nOO.ui.TagMultiselectWidget.prototype.onTagRemove = function ( item ) {\n\tthis.removeTagByData( item.getData() );\n};\n\n/**\n * Respond to navigate event on the tag\n *\n * @param {OO.ui.TagItemWidget} item Removed tag\n * @param {string} direction Direction of movement; 'forwards' or 'backwards'\n */\nOO.ui.TagMultiselectWidget.prototype.onTagNavigate = function ( item, direction ) {\n\tvar firstItem = this.getItems()[ 0 ];\n\n\tif ( direction === 'forwards' ) {\n\t\tthis.getNextItem( item ).focus();\n\t} else if ( !this.inputPosition === 'inline' || item !== firstItem ) {\n\t\t// If the widget has an inline input, we want to stop at the starting edge\n\t\t// of the tags\n\t\tthis.getPreviousItem( item ).focus();\n\t}\n};\n\n/**\n * Add tag from input value\n */\nOO.ui.TagMultiselectWidget.prototype.addTagFromInput = function () {\n\tvar val = this.input.getValue(),\n\t\tisValid = this.isAllowedData( val );\n\n\tif ( !val ) {\n\t\treturn;\n\t}\n\n\tif ( isValid || this.allowDisplayInvalidTags ) {\n\t\tthis.clearInput();\n\t\tthis.addTag( val );\n\t}\n};\n\n/**\n * Clear the input\n */\nOO.ui.TagMultiselectWidget.prototype.clearInput = function () {\n\tthis.input.setValue( '' );\n};\n\n/**\n * Check whether the given value is a duplicate of an existing\n * tag already in the list.\n *\n * @param {string|Object} data Requested value\n * @return {boolean} Value is duplicate\n */\nOO.ui.TagMultiselectWidget.prototype.isDuplicateData = function ( data ) {\n\treturn !!this.findItemFromData( data );\n};\n\n/**\n * Check whether a given value is allowed to be added\n *\n * @param {string|Object} data Requested value\n * @return {boolean} Value is allowed\n */\nOO.ui.TagMultiselectWidget.prototype.isAllowedData = function ( data ) {\n\tif (\n\t\t!this.allowDuplicates &&\n\t\tthis.isDuplicateData( data )\n\t) {\n\t\treturn false;\n\t}\n\n\tif ( this.allowArbitrary ) {\n\t\treturn true;\n\t}\n\n\t// Check with allowed values\n\tif (\n\t\tthis.getAllowedValues().some( function ( value ) {\n\t\t\treturn data === value;\n\t\t} )\n\t) {\n\t\treturn true;\n\t}\n\n\treturn false;\n};\n\n/**\n * Get the allowed values list\n *\n * @return {string[]} Allowed data values\n */\nOO.ui.TagMultiselectWidget.prototype.getAllowedValues = function () {\n\treturn this.allowedValues;\n};\n\n/**\n * Add a value to the allowed values list\n *\n * @param {string} value Allowed data value\n */\nOO.ui.TagMultiselectWidget.prototype.addAllowedValue = function ( value ) {\n\tif ( this.allowedValues.indexOf( value ) === -1 ) {\n\t\tthis.allowedValues.push( value );\n\t}\n};\n\n/**\n * Get the datas of the currently selected items\n *\n * @return {string[]|Object[]} Datas of currently selected items\n */\nOO.ui.TagMultiselectWidget.prototype.getValue = function () {\n\treturn this.getItems()\n\t\t.filter( function ( item ) {\n\t\t\treturn item.isValid();\n\t\t} )\n\t\t.map( function ( item ) {\n\t\t\treturn item.getData();\n\t\t} );\n};\n\n/**\n * Set the value of this widget by datas.\n *\n * @param {string|string[]|Object|Object[]} valueObject An object representing the data\n *  and label of the value. If the widget allows arbitrary values,\n *  the items will be added as-is. Otherwise, the data value will\n *  be checked against allowedValues.\n *  This object must contain at least a data key. Example:\n *  { data: 'foo', label: 'Foo item' }\n *  For multiple items, use an array of objects. For example:\n *   [\n *   \t{ data: 'foo', label: 'Foo item' },\n *    \t{ data: 'bar', label: 'Bar item' }\n * \t ]\n *  Value can also be added with plaintext array, for example:\n *  [ 'foo', 'bar', 'bla' ] or a single string, like 'foo'\n */\nOO.ui.TagMultiselectWidget.prototype.setValue = function ( valueObject ) {\n\tvalueObject = Array.isArray( valueObject ) ? valueObject : [ valueObject ];\n\n\tthis.clearItems();\n\tvalueObject.forEach( function ( obj ) {\n\t\tif ( typeof obj === 'string' ) {\n\t\t\tthis.addTag( obj );\n\t\t} else {\n\t\t\tthis.addTag( obj.data, obj.label );\n\t\t}\n\t}.bind( this ) );\n};\n\n/**\n * Add tag to the display area\n *\n * @param {string|Object} data Tag data\n * @param {string} [label] Tag label. If no label is provided, the\n *  stringified version of the data will be used instead.\n * @return {boolean} Item was added successfully\n */\nOO.ui.TagMultiselectWidget.prototype.addTag = function ( data, label ) {\n\tvar newItemWidget,\n\t\tisValid = this.isAllowedData( data );\n\n\tif ( this.isUnderLimit() && ( isValid || this.allowDisplayInvalidTags ) ) {\n\t\tnewItemWidget = this.createTagItemWidget( data, label );\n\t\tnewItemWidget.toggleValid( isValid );\n\t\tthis.addItems( [ newItemWidget ] );\n\t\treturn true;\n\t}\n\n\treturn false;\n};\n\n/**\n * Check whether the current tags are under the limit. Returns true\n * if there is no limit set.\n *\n * @return {boolean} True if current tag count is under the limit\n *  or if there is no limit set\n */\nOO.ui.TagMultiselectWidget.prototype.isUnderLimit = function () {\n\treturn !this.limit ||\n\t\tthis.getItemCount() < this.limit;\n};\n\n/**\n * Remove tag by its data property.\n *\n * @param {string|Object} data Tag data\n */\nOO.ui.TagMultiselectWidget.prototype.removeTagByData = function ( data ) {\n\tvar item = this.findItemFromData( data );\n\n\tthis.removeItems( [ item ] );\n};\n\n/**\n * Construct a OO.ui.TagItemWidget (or a subclass thereof) from given label and data.\n *\n * @protected\n * @param {string} data Item data\n * @param {string} label The label text.\n * @return {OO.ui.TagItemWidget}\n */\nOO.ui.TagMultiselectWidget.prototype.createTagItemWidget = function ( data, label ) {\n\tlabel = label || data;\n\n\treturn new OO.ui.TagItemWidget( { data: data, label: label } );\n};\n\n/**\n * Given an item, returns the item after it. If the item is already the\n * last item, return `this.input`. If no item is passed, returns the\n * very first item.\n *\n * @protected\n * @param {OO.ui.TagItemWidget} [item] Tag item\n * @return {OO.ui.Widget} The next widget available.\n */\nOO.ui.TagMultiselectWidget.prototype.getNextItem = function ( item ) {\n\tvar itemIndex = this.items.indexOf( item );\n\n\tif ( item === undefined || itemIndex === -1 ) {\n\t\treturn this.items[ 0 ];\n\t}\n\n\tif ( itemIndex === this.items.length - 1 ) { // Last item\n\t\tif ( this.hasInput ) {\n\t\t\treturn this.input;\n\t\t} else {\n\t\t\t// Return first item\n\t\t\treturn this.items[ 0 ];\n\t\t}\n\t} else {\n\t\treturn this.items[ itemIndex + 1 ];\n\t}\n};\n\n/**\n * Given an item, returns the item before it. If the item is already the\n * first item, return `this.input`. If no item is passed, returns the\n * very last item.\n *\n * @protected\n * @param {OO.ui.TagItemWidget} [item] Tag item\n * @return {OO.ui.Widget} The previous widget available.\n */\nOO.ui.TagMultiselectWidget.prototype.getPreviousItem = function ( item ) {\n\tvar itemIndex = this.items.indexOf( item );\n\n\tif ( item === undefined || itemIndex === -1 ) {\n\t\treturn this.items[ this.items.length - 1 ];\n\t}\n\n\tif ( itemIndex === 0 ) {\n\t\tif ( this.hasInput ) {\n\t\t\treturn this.input;\n\t\t} else {\n\t\t\t// Return the last item\n\t\t\treturn this.items[ this.items.length - 1 ];\n\t\t}\n\t} else {\n\t\treturn this.items[ itemIndex - 1 ];\n\t}\n};\n\n/**\n * Update the dimensions of the text input field to encompass all available area.\n * This is especially relevant for when the input is at the edge of a line\n * and should get smaller. The usual operation (as an inline-block with min-width)\n * does not work in that case, pushing the input downwards to the next line.\n *\n * @private\n */\nOO.ui.TagMultiselectWidget.prototype.updateInputSize = function () {\n\tvar $lastItem, direction, contentWidth, currentWidth, bestWidth;\n\tif ( this.inputPosition === 'inline' && !this.isDisabled() ) {\n\t\tif ( this.input.$input[ 0 ].scrollWidth === 0 ) {\n\t\t\t// Input appears to be attached but not visible.\n\t\t\t// Don't attempt to adjust its size, because our measurements\n\t\t\t// are going to fail anyway.\n\t\t\treturn;\n\t\t}\n\t\tthis.input.$input.css( 'width', '1em' );\n\t\t$lastItem = this.$group.children().last();\n\t\tdirection = OO.ui.Element.static.getDir( this.$handle );\n\n\t\t// Get the width of the input with the placeholder text as\n\t\t// the value and save it so that we don't keep recalculating\n\t\tif (\n\t\t\tthis.contentWidthWithPlaceholder === undefined &&\n\t\t\tthis.input.getValue() === '' &&\n\t\t\tthis.input.$input.attr( 'placeholder' ) !== undefined\n\t\t) {\n\t\t\tthis.input.setValue( this.input.$input.attr( 'placeholder' ) );\n\t\t\tthis.contentWidthWithPlaceholder = this.input.$input[ 0 ].scrollWidth;\n\t\t\tthis.input.setValue( '' );\n\n\t\t}\n\n\t\t// Always keep the input wide enough for the placeholder text\n\t\tcontentWidth = Math.max(\n\t\t\tthis.input.$input[ 0 ].scrollWidth,\n\t\t\t// undefined arguments in Math.max lead to NaN\n\t\t\t( this.contentWidthWithPlaceholder === undefined ) ?\n\t\t\t\t0 : this.contentWidthWithPlaceholder\n\t\t);\n\t\tcurrentWidth = this.input.$input.width();\n\n\t\tif ( contentWidth < currentWidth ) {\n\t\t\tthis.updateIfHeightChanged();\n\t\t\t// All is fine, don't perform expensive calculations\n\t\t\treturn;\n\t\t}\n\n\t\tif ( $lastItem.length === 0 ) {\n\t\t\tbestWidth = this.$content.innerWidth();\n\t\t} else {\n\t\t\tbestWidth = direction === 'ltr' ?\n\t\t\t\tthis.$content.innerWidth() - $lastItem.position().left - $lastItem.outerWidth() :\n\t\t\t\t$lastItem.position().left;\n\t\t}\n\n\t\t// Some safety margin for sanity, because I *really* don't feel like finding out where the few\n\t\t// pixels this is off by are coming from.\n\t\tbestWidth -= 13;\n\t\tif ( contentWidth > bestWidth ) {\n\t\t\t// This will result in the input getting shifted to the next line\n\t\t\tbestWidth = this.$content.innerWidth() - 13;\n\t\t}\n\t\tthis.input.$input.width( Math.floor( bestWidth ) );\n\t\tthis.updateIfHeightChanged();\n\t} else {\n\t\tthis.updateIfHeightChanged();\n\t}\n};\n\n/**\n * Determine if widget height changed, and if so,\n * emit the resize event. This is useful for when there are either\n * menus or popups attached to the bottom of the widget, to allow\n * them to change their positioning in case the widget moved down\n * or up.\n *\n * @private\n */\nOO.ui.TagMultiselectWidget.prototype.updateIfHeightChanged = function () {\n\tvar height = this.$element.height();\n\tif ( height !== this.height ) {\n\t\tthis.height = height;\n\t\tthis.emit( 'resize' );\n\t}\n};\n\n/**\n * Check whether all items in the widget are valid\n *\n * @return {boolean} Widget is valid\n */\nOO.ui.TagMultiselectWidget.prototype.checkValidity = function () {\n\treturn this.getItems().every( function ( item ) {\n\t\treturn item.isValid();\n\t} );\n};\n\n/**\n * Set the valid state of this item\n *\n * @param {boolean} [valid] Item is valid\n * @fires valid\n */\nOO.ui.TagMultiselectWidget.prototype.toggleValid = function ( valid ) {\n\tvalid = valid === undefined ? !this.valid : !!valid;\n\n\tif ( this.valid !== valid ) {\n\t\tthis.valid = valid;\n\n\t\tthis.setFlags( { invalid: !this.valid } );\n\n\t\tthis.emit( 'valid', this.valid );\n\t}\n};\n\n/**\n * Get the current valid state of the widget\n *\n * @return {boolean} Widget is valid\n */\nOO.ui.TagMultiselectWidget.prototype.isValid = function () {\n\treturn this.valid;\n};\n","/**\n * PopupTagMultiselectWidget is a {@link OO.ui.TagMultiselectWidget OO.ui.TagMultiselectWidget} intended\n * to use a popup. The popup can be configured to have a default input to insert values into the widget.\n *\n *     @example\n *     // Example: A basic PopupTagMultiselectWidget.\n *     var widget = new OO.ui.PopupTagMultiselectWidget();\n *     $( 'body' ).append( widget.$element );\n *\n *     // Example: A PopupTagMultiselectWidget with an external popup.\n *     var popupInput = new OO.ui.TextInputWidget(),\n *         widget = new OO.ui.PopupTagMultiselectWidget( {\n *            popupInput: popupInput,\n *            popup: {\n *               $content: popupInput.$element\n *            }\n *         } );\n *     $( 'body' ).append( widget.$element );\n *\n * @class\n * @extends OO.ui.TagMultiselectWidget\n * @mixins OO.ui.mixin.PopupElement\n *\n * @param {Object} config Configuration object\n * @cfg {jQuery} [$overlay] An overlay for the popup.\n *  See <https://www.mediawiki.org/wiki/OOUI/Concepts#Overlays>.\n * @cfg {Object} [popup] Configuration options for the popup\n * @cfg {OO.ui.InputWidget} [popupInput] An input widget inside the popup that will be\n *  focused when the popup is opened and will be used as replacement for the\n *  general input in the widget.\n */\nOO.ui.PopupTagMultiselectWidget = function OoUiPopupTagMultiselectWidget( config ) {\n\tvar defaultInput,\n\t\tdefaultConfig = { popup: {} };\n\n\tconfig = config || {};\n\n\t// Parent constructor\n\tOO.ui.PopupTagMultiselectWidget.parent.call( this, $.extend( { inputPosition: 'none' }, config ) );\n\n\tthis.$overlay = ( config.$overlay === true ? OO.ui.getDefaultOverlay() : config.$overlay ) || this.$element;\n\n\tif ( !config.popup ) {\n\t\t// For the default base implementation, we give a popup\n\t\t// with an input widget inside it. For any other use cases\n\t\t// the popup needs to be populated externally and the\n\t\t// event handled to add tags separately and manually\n\t\tdefaultInput = new OO.ui.TextInputWidget();\n\n\t\tdefaultConfig.popupInput = defaultInput;\n\t\tdefaultConfig.popup.$content = defaultInput.$element;\n\t\tdefaultConfig.popup.padded = true;\n\n\t\tthis.$element.addClass( 'oo-ui-popupTagMultiselectWidget-defaultPopup' );\n\t}\n\n\t// Add overlay, and add that to the autoCloseIgnore\n\tdefaultConfig.popup.$overlay = this.$overlay;\n\tdefaultConfig.popup.$autoCloseIgnore = this.hasInput ?\n\t\tthis.input.$element.add( this.$overlay ) : this.$overlay;\n\n\t// Allow extending any of the above\n\tconfig = $.extend( defaultConfig, config );\n\n\t// Mixin constructors\n\tOO.ui.mixin.PopupElement.call( this, config );\n\n\tif ( this.hasInput ) {\n\t\tthis.input.$input.on( 'focus', this.popup.toggle.bind( this.popup, true ) );\n\t}\n\n\t// Configuration options\n\tthis.popupInput = config.popupInput;\n\tif ( this.popupInput ) {\n\t\tthis.popupInput.connect( this, {\n\t\t\tenter: 'onPopupInputEnter'\n\t\t} );\n\t}\n\n\t// Events\n\tthis.on( 'resize', this.popup.updateDimensions.bind( this.popup ) );\n\tthis.popup.connect( this, { toggle: 'onPopupToggle' } );\n\tthis.$tabIndexed\n\t\t.on( 'focus', this.onFocus.bind( this ) );\n\n\t// Initialize\n\tthis.$element\n\t\t.append( this.popup.$element )\n\t\t.addClass( 'oo-ui-popupTagMultiselectWidget' );\n};\n\n/* Initialization */\n\nOO.inheritClass( OO.ui.PopupTagMultiselectWidget, OO.ui.TagMultiselectWidget );\nOO.mixinClass( OO.ui.PopupTagMultiselectWidget, OO.ui.mixin.PopupElement );\n\n/* Methods */\n\n/**\n * Focus event handler.\n *\n * @private\n */\nOO.ui.PopupTagMultiselectWidget.prototype.onFocus = function () {\n\tthis.popup.toggle( true );\n};\n\n/**\n * Respond to popup toggle event\n *\n * @param {boolean} isVisible Popup is visible\n */\nOO.ui.PopupTagMultiselectWidget.prototype.onPopupToggle = function ( isVisible ) {\n\tif ( isVisible && this.popupInput ) {\n\t\tthis.popupInput.focus();\n\t}\n};\n\n/**\n * Respond to popup input enter event\n */\nOO.ui.PopupTagMultiselectWidget.prototype.onPopupInputEnter = function () {\n\tif ( this.popupInput ) {\n\t\tthis.addTagByPopupValue( this.popupInput.getValue() );\n\t\tthis.popupInput.setValue( '' );\n\t}\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.PopupTagMultiselectWidget.prototype.onTagSelect = function ( item ) {\n\tif ( this.popupInput && this.allowEditTags ) {\n\t\tthis.popupInput.setValue( item.getData() );\n\t\tthis.removeItems( [ item ] );\n\n\t\tthis.popup.toggle( true );\n\t\tthis.popupInput.focus();\n\t} else {\n\t\t// Parent\n\t\tOO.ui.PopupTagMultiselectWidget.parent.prototype.onTagSelect.call( this, item );\n\t}\n};\n\n/**\n * Add a tag by the popup value.\n * Whatever is responsible for setting the value in the popup should call\n * this method to add a tag, or use the regular methods like #addTag or\n * #setValue directly.\n *\n * @param {string} data The value of item\n * @param {string} [label] The label of the tag. If not given, the data is used.\n */\nOO.ui.PopupTagMultiselectWidget.prototype.addTagByPopupValue = function ( data, label ) {\n\tthis.addTag( data, label );\n};\n","/**\n * MenuTagMultiselectWidget is a {@link OO.ui.TagMultiselectWidget OO.ui.TagMultiselectWidget} intended\n * to use a menu of selectable options.\n *\n *     @example\n *     // Example: A basic MenuTagMultiselectWidget.\n *     var widget = new OO.ui.MenuTagMultiselectWidget( {\n *         inputPosition: 'outline',\n *         options: [\n *            { data: 'option1', label: 'Option 1', icon: 'tag' },\n *            { data: 'option2', label: 'Option 2' },\n *            { data: 'option3', label: 'Option 3' },\n *         ],\n *         selected: [ 'option1', 'option2' ]\n *     } );\n *     $( 'body' ).append( widget.$element );\n *\n * @class\n * @extends OO.ui.TagMultiselectWidget\n *\n * @constructor\n * @param {Object} [config] Configuration object\n * @cfg {boolean} [clearInputOnChoose=true] Clear the text input value when a menu option is chosen\n * @cfg {Object} [menu] Configuration object for the menu widget\n * @cfg {jQuery} [$overlay] An overlay for the menu.\n *  See <https://www.mediawiki.org/wiki/OOUI/Concepts#Overlays>.\n * @cfg {Object[]} [options=[]] Array of menu options in the format `{ data: …, label: … }`\n */\nOO.ui.MenuTagMultiselectWidget = function OoUiMenuTagMultiselectWidget( config ) {\n\tconfig = config || {};\n\n\t// Parent constructor\n\tOO.ui.MenuTagMultiselectWidget.parent.call( this, config );\n\n\tthis.$overlay = ( config.$overlay === true ? OO.ui.getDefaultOverlay() : config.$overlay ) || this.$element;\n\tthis.clearInputOnChoose = config.clearInputOnChoose === undefined || !!config.clearInputOnChoose;\n\tthis.menu = this.createMenuWidget( $.extend( {\n\t\twidget: this,\n\t\tinput: this.hasInput ? this.input : null,\n\t\t$input: this.hasInput ? this.input.$input : null,\n\t\tfilterFromInput: !!this.hasInput,\n\t\t$autoCloseIgnore: this.hasInput ?\n\t\t\tthis.input.$element : $( [] ),\n\t\t$floatableContainer: this.hasInput && this.inputPosition === 'outline' ?\n\t\t\tthis.input.$element : this.$element,\n\t\t$overlay: this.$overlay,\n\t\tdisabled: this.isDisabled()\n\t}, config.menu ) );\n\tthis.addOptions( config.options || [] );\n\n\t// Events\n\tthis.menu.connect( this, {\n\t\tchoose: 'onMenuChoose',\n\t\ttoggle: 'onMenuToggle'\n\t} );\n\tif ( this.hasInput ) {\n\t\tthis.input.connect( this, { change: 'onInputChange' } );\n\t}\n\tthis.connect( this, { resize: 'onResize' } );\n\n\t// Initialization\n\tthis.$overlay\n\t\t.append( this.menu.$element );\n\tthis.$element\n\t\t.addClass( 'oo-ui-menuTagMultiselectWidget' );\n\t// TagMultiselectWidget already does this, but it doesn't work right because this.menu is not yet\n\t// set up while the parent constructor runs, and #getAllowedValues rejects everything.\n\tif ( config.selected ) {\n\t\tthis.setValue( config.selected );\n\t}\n};\n\n/* Initialization */\n\nOO.inheritClass( OO.ui.MenuTagMultiselectWidget, OO.ui.TagMultiselectWidget );\n\n/* Methods */\n\n/**\n * Respond to resize event\n */\nOO.ui.MenuTagMultiselectWidget.prototype.onResize = function () {\n\t// Reposition the menu\n\tthis.menu.position();\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.MenuTagMultiselectWidget.prototype.onInputFocus = function () {\n\t// Parent method\n\tOO.ui.MenuTagMultiselectWidget.parent.prototype.onInputFocus.call( this );\n\n\tthis.menu.toggle( true );\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.MenuTagMultiselectWidget.prototype.onInputBlur = function () {\n\t// Parent method\n\tOO.ui.MenuTagMultiselectWidget.parent.prototype.onInputBlur.call( this );\n\n\tthis.menu.toggle( false );\n};\n\n/**\n * Respond to input change event\n */\nOO.ui.MenuTagMultiselectWidget.prototype.onInputChange = function () {\n\tthis.menu.toggle( true );\n\tthis.initializeMenuSelection();\n};\n\n/**\n * Respond to menu choose event\n *\n * @param {OO.ui.OptionWidget} menuItem Chosen menu item\n */\nOO.ui.MenuTagMultiselectWidget.prototype.onMenuChoose = function ( menuItem ) {\n\t// Add tag\n\tthis.addTag( menuItem.getData(), menuItem.getLabel() );\n\tif ( this.hasInput && this.clearInputOnChoose ) {\n\t\tthis.input.setValue( '' );\n\t}\n};\n\n/**\n * Respond to menu toggle event. Reset item highlights on hide.\n *\n * @param {boolean} isVisible The menu is visible\n */\nOO.ui.MenuTagMultiselectWidget.prototype.onMenuToggle = function ( isVisible ) {\n\tif ( !isVisible ) {\n\t\tthis.menu.selectItem( null );\n\t\tthis.menu.highlightItem( null );\n\t} else {\n\t\tthis.initializeMenuSelection();\n\t}\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.MenuTagMultiselectWidget.prototype.onTagSelect = function ( tagItem ) {\n\tvar menuItem = this.menu.findItemFromData( tagItem.getData() );\n\tif ( !this.allowArbitrary ) {\n\t\t// Override the base behavior from TagMultiselectWidget; the base behavior\n\t\t// in TagMultiselectWidget is to remove the tag to edit it in the input,\n\t\t// but in our case, we want to utilize the menu selection behavior, and\n\t\t// definitely not remove the item.\n\n\t\t// If there is an input that is used for filtering, erase the value so we don't filter\n\t\tif ( this.hasInput && this.menu.filterFromInput ) {\n\t\t\tthis.input.setValue( '' );\n\t\t}\n\n\t\t// Select the menu item\n\t\tthis.menu.selectItem( menuItem );\n\n\t\tthis.focus();\n\t} else {\n\t\t// Use the default\n\t\tOO.ui.MenuTagMultiselectWidget.parent.prototype.onTagSelect.call( this, tagItem );\n\t}\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.MenuTagMultiselectWidget.prototype.setDisabled = function ( isDisabled ) {\n\t// Parent method\n\tOO.ui.MenuTagMultiselectWidget.parent.prototype.setDisabled.call( this, isDisabled );\n\n\tif ( this.menu ) {\n\t\t// Protect against calling setDisabled() before the menu was initialized\n\t\tthis.menu.setDisabled( isDisabled );\n\t}\n};\n\n/**\n * Highlight the first selectable item in the menu, if configured.\n *\n * @private\n * @chainable\n */\nOO.ui.MenuTagMultiselectWidget.prototype.initializeMenuSelection = function () {\n\tif ( !this.menu.findSelectedItem() ) {\n\t\tthis.menu.highlightItem( this.menu.findFirstSelectableItem() );\n\t}\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.MenuTagMultiselectWidget.prototype.addTagFromInput = function () {\n\tvar inputValue = this.input.getValue(),\n\t\tvalidated = false,\n\t\thighlightedItem = this.menu.findHighlightedItem(),\n\t\titem = this.menu.findItemFromData( inputValue );\n\n\tif ( !inputValue ) {\n\t\treturn;\n\t}\n\n\t// Override the parent method so we add from the menu\n\t// rather than directly from the input\n\n\t// Look for a highlighted item first\n\tif ( highlightedItem ) {\n\t\tvalidated = this.addTag( highlightedItem.getData(), highlightedItem.getLabel() );\n\t} else if ( item ) {\n\t\t// Look for the element that fits the data\n\t\tvalidated = this.addTag( item.getData(), item.getLabel() );\n\t} else {\n\t\t// Otherwise, add the tag - the method will only add if the\n\t\t// tag is valid or if invalid tags are allowed\n\t\tvalidated = this.addTag( inputValue );\n\t}\n\n\tif ( validated ) {\n\t\tthis.clearInput();\n\t}\n};\n\n/**\n * Return the visible items in the menu. This is mainly used for when\n * the menu is filtering results.\n *\n * @return {OO.ui.MenuOptionWidget[]} Visible results\n */\nOO.ui.MenuTagMultiselectWidget.prototype.getMenuVisibleItems = function () {\n\treturn this.menu.getItems().filter( function ( menuItem ) {\n\t\treturn menuItem.isVisible();\n\t} );\n};\n\n/**\n * Create the menu for this widget. This is in a separate method so that\n * child classes can override this without polluting the constructor with\n * unnecessary extra objects that will be overidden.\n *\n * @param {Object} menuConfig Configuration options\n * @return {OO.ui.MenuSelectWidget} Menu widget\n */\nOO.ui.MenuTagMultiselectWidget.prototype.createMenuWidget = function ( menuConfig ) {\n\treturn new OO.ui.MenuSelectWidget( menuConfig );\n};\n\n/**\n * Add options to the menu\n *\n * @param {Object[]} menuOptions Object defining options\n */\nOO.ui.MenuTagMultiselectWidget.prototype.addOptions = function ( menuOptions ) {\n\tvar widget = this,\n\t\titems = menuOptions.map( function ( obj ) {\n\t\t\treturn widget.createMenuOptionWidget( obj.data, obj.label, obj.icon );\n\t\t} );\n\n\tthis.menu.addItems( items );\n};\n\n/**\n * Create a menu option widget.\n *\n * @param {string} data Item data\n * @param {string} [label] Item label\n * @param {string} [icon] Symbolic icon name\n * @return {OO.ui.OptionWidget} Option widget\n */\nOO.ui.MenuTagMultiselectWidget.prototype.createMenuOptionWidget = function ( data, label, icon ) {\n\treturn new OO.ui.MenuOptionWidget( {\n\t\tdata: data,\n\t\tlabel: label || data,\n\t\ticon: icon\n\t} );\n};\n\n/**\n * Get the menu\n *\n * @return {OO.ui.MenuSelectWidget} Menu\n */\nOO.ui.MenuTagMultiselectWidget.prototype.getMenu = function () {\n\treturn this.menu;\n};\n\n/**\n * Get the allowed values list\n *\n * @return {string[]} Allowed data values\n */\nOO.ui.MenuTagMultiselectWidget.prototype.getAllowedValues = function () {\n\tvar menuDatas = [];\n\tif ( this.menu ) {\n\t\t// If the parent constructor is calling us, we're not ready yet, this.menu is not set up.\n\t\tmenuDatas = this.menu.getItems().map( function ( menuItem ) {\n\t\t\treturn menuItem.getData();\n\t\t} );\n\t}\n\treturn this.allowedValues.concat( menuDatas );\n};\n","/**\n * SelectFileWidgets allow for selecting files, using the HTML5 File API. These\n * widgets can be configured with {@link OO.ui.mixin.IconElement icons} and {@link\n * OO.ui.mixin.IndicatorElement indicators}.\n * Please see the [OOUI documentation on MediaWiki] [1] for more information and examples.\n *\n *     @example\n *     // Example of a file select widget\n *     var selectFile = new OO.ui.SelectFileWidget();\n *     $( 'body' ).append( selectFile.$element );\n *\n * [1]: https://www.mediawiki.org/wiki/OOUI/Widgets\n *\n * @class\n * @extends OO.ui.Widget\n * @mixins OO.ui.mixin.IconElement\n * @mixins OO.ui.mixin.IndicatorElement\n * @mixins OO.ui.mixin.PendingElement\n * @mixins OO.ui.mixin.LabelElement\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {string[]|null} [accept=null] MIME types to accept. null accepts all types.\n * @cfg {string} [placeholder] Text to display when no file is selected.\n * @cfg {string} [notsupported] Text to display when file support is missing in the browser.\n * @cfg {boolean} [droppable=true] Whether to accept files by drag and drop.\n * @cfg {boolean} [showDropTarget=false] Whether to show a drop target. Requires droppable to be true.\n * @cfg {number} [thumbnailSizeLimit=20] File size limit in MiB above which to not try and show a\n *  preview (for performance)\n */\nOO.ui.SelectFileWidget = function OoUiSelectFileWidget( config ) {\n\tvar dragHandler;\n\n\t// Configuration initialization\n\tconfig = $.extend( {\n\t\taccept: null,\n\t\tplaceholder: OO.ui.msg( 'ooui-selectfile-placeholder' ),\n\t\tnotsupported: OO.ui.msg( 'ooui-selectfile-not-supported' ),\n\t\tdroppable: true,\n\t\tshowDropTarget: false,\n\t\tthumbnailSizeLimit: 20\n\t}, config );\n\n\t// Parent constructor\n\tOO.ui.SelectFileWidget.parent.call( this, config );\n\n\t// Mixin constructors\n\tOO.ui.mixin.IconElement.call( this, config );\n\tOO.ui.mixin.IndicatorElement.call( this, config );\n\tOO.ui.mixin.PendingElement.call( this, $.extend( {}, config, { $pending: this.$info } ) );\n\tOO.ui.mixin.LabelElement.call( this, config );\n\n\t// Properties\n\tthis.$info = $( '<span>' );\n\tthis.showDropTarget = config.showDropTarget;\n\tthis.thumbnailSizeLimit = config.thumbnailSizeLimit;\n\tthis.isSupported = this.constructor.static.isSupported();\n\tthis.currentFile = null;\n\tif ( Array.isArray( config.accept ) ) {\n\t\tthis.accept = config.accept;\n\t} else {\n\t\tthis.accept = null;\n\t}\n\tthis.placeholder = config.placeholder;\n\tthis.notsupported = config.notsupported;\n\tthis.onFileSelectedHandler = this.onFileSelected.bind( this );\n\n\tthis.selectButton = new OO.ui.ButtonWidget( {\n\t\t$element: $( '<label>' ),\n\t\tclasses: [ 'oo-ui-selectFileWidget-selectButton' ],\n\t\tlabel: OO.ui.msg( 'ooui-selectfile-button-select' ),\n\t\tdisabled: this.disabled || !this.isSupported\n\t} );\n\n\tthis.clearButton = new OO.ui.ButtonWidget( {\n\t\tclasses: [ 'oo-ui-selectFileWidget-clearButton' ],\n\t\tframed: false,\n\t\ticon: 'close',\n\t\tdisabled: this.disabled\n\t} );\n\n\t// Events\n\tthis.selectButton.$button.on( {\n\t\tkeypress: this.onKeyPress.bind( this )\n\t} );\n\tthis.clearButton.connect( this, {\n\t\tclick: 'onClearClick'\n\t} );\n\tif ( config.droppable ) {\n\t\tdragHandler = this.onDragEnterOrOver.bind( this );\n\t\tthis.$element.on( {\n\t\t\tdragenter: dragHandler,\n\t\t\tdragover: dragHandler,\n\t\t\tdragleave: this.onDragLeave.bind( this ),\n\t\t\tdrop: this.onDrop.bind( this )\n\t\t} );\n\t}\n\n\t// Initialization\n\tthis.addInput();\n\tthis.$label.addClass( 'oo-ui-selectFileWidget-label' );\n\tthis.$info\n\t\t.addClass( 'oo-ui-selectFileWidget-info' )\n\t\t.append( this.$icon, this.$label, this.clearButton.$element, this.$indicator );\n\n\tif ( config.droppable && config.showDropTarget ) {\n\t\tthis.selectButton.setIcon( 'upload' );\n\t\tthis.$thumbnail = $( '<div>' ).addClass( 'oo-ui-selectFileWidget-thumbnail' );\n\t\tthis.setPendingElement( this.$thumbnail );\n\t\tthis.$element\n\t\t\t.addClass( 'oo-ui-selectFileWidget-dropTarget oo-ui-selectFileWidget' )\n\t\t\t.on( {\n\t\t\t\tclick: this.onDropTargetClick.bind( this )\n\t\t\t} )\n\t\t\t.append(\n\t\t\t\tthis.$thumbnail,\n\t\t\t\tthis.$info,\n\t\t\t\tthis.selectButton.$element,\n\t\t\t\t$( '<span>' )\n\t\t\t\t\t.addClass( 'oo-ui-selectFileWidget-dropLabel' )\n\t\t\t\t\t.text( OO.ui.msg( 'ooui-selectfile-dragdrop-placeholder' ) )\n\t\t\t);\n\t} else {\n\t\tthis.$element\n\t\t\t.addClass( 'oo-ui-selectFileWidget' )\n\t\t\t.append( this.$info, this.selectButton.$element );\n\t}\n\tthis.updateUI();\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.SelectFileWidget, OO.ui.Widget );\nOO.mixinClass( OO.ui.SelectFileWidget, OO.ui.mixin.IconElement );\nOO.mixinClass( OO.ui.SelectFileWidget, OO.ui.mixin.IndicatorElement );\nOO.mixinClass( OO.ui.SelectFileWidget, OO.ui.mixin.PendingElement );\nOO.mixinClass( OO.ui.SelectFileWidget, OO.ui.mixin.LabelElement );\n\n/* Static Properties */\n\n/**\n * Check if this widget is supported\n *\n * @static\n * @return {boolean}\n */\nOO.ui.SelectFileWidget.static.isSupported = function () {\n\tvar $input;\n\tif ( OO.ui.SelectFileWidget.static.isSupportedCache === null ) {\n\t\t$input = $( '<input>' ).attr( 'type', 'file' );\n\t\tOO.ui.SelectFileWidget.static.isSupportedCache = $input[ 0 ].files !== undefined;\n\t}\n\treturn OO.ui.SelectFileWidget.static.isSupportedCache;\n};\n\nOO.ui.SelectFileWidget.static.isSupportedCache = null;\n\n/* Events */\n\n/**\n * @event change\n *\n * A change event is emitted when the on/off state of the toggle changes.\n *\n * @param {File|null} value New value\n */\n\n/* Methods */\n\n/**\n * Get the current value of the field\n *\n * @return {File|null}\n */\nOO.ui.SelectFileWidget.prototype.getValue = function () {\n\treturn this.currentFile;\n};\n\n/**\n * Set the current value of the field\n *\n * @param {File|null} file File to select\n */\nOO.ui.SelectFileWidget.prototype.setValue = function ( file ) {\n\tif ( this.currentFile !== file ) {\n\t\tthis.currentFile = file;\n\t\tthis.updateUI();\n\t\tthis.emit( 'change', this.currentFile );\n\t}\n};\n\n/**\n * Focus the widget.\n *\n * Focusses the select file button.\n *\n * @chainable\n * @return {OO.ui.Widget} The widget, for chaining\n */\nOO.ui.SelectFileWidget.prototype.focus = function () {\n\tthis.selectButton.focus();\n\treturn this;\n};\n\n/**\n * Blur the widget.\n *\n * @chainable\n * @return {OO.ui.Widget} The widget, for chaining\n */\nOO.ui.SelectFileWidget.prototype.blur = function () {\n\tthis.selectButton.blur();\n\treturn this;\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.SelectFileWidget.prototype.simulateLabelClick = function () {\n\tthis.focus();\n};\n\n/**\n * Update the user interface when a file is selected or unselected\n *\n * @protected\n */\nOO.ui.SelectFileWidget.prototype.updateUI = function () {\n\tvar $label;\n\tif ( !this.isSupported ) {\n\t\tthis.$element.addClass( 'oo-ui-selectFileWidget-notsupported' );\n\t\tthis.$element.removeClass( 'oo-ui-selectFileWidget-empty' );\n\t\tthis.setLabel( this.notsupported );\n\t} else {\n\t\tthis.$element.addClass( 'oo-ui-selectFileWidget-supported' );\n\t\tif ( this.currentFile ) {\n\t\t\tthis.$element.removeClass( 'oo-ui-selectFileWidget-empty' );\n\t\t\t$label = $( [] );\n\t\t\t$label = $label.add(\n\t\t\t\t$( '<span>' )\n\t\t\t\t\t.addClass( 'oo-ui-selectFileWidget-fileName' )\n\t\t\t\t\t.text( this.currentFile.name )\n\t\t\t);\n\t\t\tthis.setLabel( $label );\n\n\t\t\tif ( this.showDropTarget ) {\n\t\t\t\tthis.pushPending();\n\t\t\t\tthis.loadAndGetImageUrl().done( function ( url ) {\n\t\t\t\t\tthis.$thumbnail.css( 'background-image', 'url( ' + url + ' )' );\n\t\t\t\t}.bind( this ) ).fail( function () {\n\t\t\t\t\tthis.$thumbnail.append(\n\t\t\t\t\t\tnew OO.ui.IconWidget( {\n\t\t\t\t\t\t\ticon: 'attachment',\n\t\t\t\t\t\t\tclasses: [ 'oo-ui-selectFileWidget-noThumbnail-icon' ]\n\t\t\t\t\t\t} ).$element\n\t\t\t\t\t);\n\t\t\t\t}.bind( this ) ).always( function () {\n\t\t\t\t\tthis.popPending();\n\t\t\t\t}.bind( this ) );\n\t\t\t\tthis.$element.off( 'click' );\n\t\t\t}\n\t\t} else {\n\t\t\tif ( this.showDropTarget ) {\n\t\t\t\tthis.$element.off( 'click' );\n\t\t\t\tthis.$element.on( {\n\t\t\t\t\tclick: this.onDropTargetClick.bind( this )\n\t\t\t\t} );\n\t\t\t\tthis.$thumbnail\n\t\t\t\t\t.empty()\n\t\t\t\t\t.css( 'background-image', '' );\n\t\t\t}\n\t\t\tthis.$element.addClass( 'oo-ui-selectFileWidget-empty' );\n\t\t\tthis.setLabel( this.placeholder );\n\t\t}\n\t}\n};\n\n/**\n * If the selected file is an image, get its URL and load it.\n *\n * @return {jQuery.Promise} Promise resolves with the image URL after it has loaded\n */\nOO.ui.SelectFileWidget.prototype.loadAndGetImageUrl = function () {\n\tvar deferred = $.Deferred(),\n\t\tfile = this.currentFile,\n\t\treader = new FileReader();\n\n\tif (\n\t\tfile &&\n\t\t( OO.getProp( file, 'type' ) || '' ).indexOf( 'image/' ) === 0 &&\n\t\tfile.size < this.thumbnailSizeLimit * 1024 * 1024\n\t) {\n\t\treader.onload = function ( event ) {\n\t\t\tvar img = document.createElement( 'img' );\n\t\t\timg.addEventListener( 'load', function () {\n\t\t\t\tif (\n\t\t\t\t\timg.naturalWidth === 0 ||\n\t\t\t\t\timg.naturalHeight === 0 ||\n\t\t\t\t\timg.complete === false\n\t\t\t\t) {\n\t\t\t\t\tdeferred.reject();\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.resolve( event.target.result );\n\t\t\t\t}\n\t\t\t} );\n\t\t\timg.src = event.target.result;\n\t\t};\n\t\treader.readAsDataURL( file );\n\t} else {\n\t\tdeferred.reject();\n\t}\n\n\treturn deferred.promise();\n};\n\n/**\n * Add the input to the widget\n *\n * @private\n */\nOO.ui.SelectFileWidget.prototype.addInput = function () {\n\tif ( this.$input ) {\n\t\tthis.$input.remove();\n\t}\n\n\tif ( !this.isSupported ) {\n\t\tthis.$input = null;\n\t\treturn;\n\t}\n\n\tthis.$input = $( '<input>' ).attr( 'type', 'file' );\n\tthis.$input.on( 'change', this.onFileSelectedHandler );\n\tthis.$input.on( 'click', function ( e ) {\n\t\t// Prevents dropTarget to get clicked which calls\n\t\t// a click on this input\n\t\te.stopPropagation();\n\t} );\n\tthis.$input.attr( {\n\t\ttabindex: -1\n\t} );\n\tif ( this.accept ) {\n\t\tthis.$input.attr( 'accept', this.accept.join( ', ' ) );\n\t}\n\tthis.selectButton.$button.append( this.$input );\n};\n\n/**\n * Determine if we should accept this file\n *\n * @private\n * @param {string} mimeType File MIME type\n * @return {boolean}\n */\nOO.ui.SelectFileWidget.prototype.isAllowedType = function ( mimeType ) {\n\tvar i, mimeTest;\n\n\tif ( !this.accept || !mimeType ) {\n\t\treturn true;\n\t}\n\n\tfor ( i = 0; i < this.accept.length; i++ ) {\n\t\tmimeTest = this.accept[ i ];\n\t\tif ( mimeTest === mimeType ) {\n\t\t\treturn true;\n\t\t} else if ( mimeTest.substr( -2 ) === '/*' ) {\n\t\t\tmimeTest = mimeTest.substr( 0, mimeTest.length - 1 );\n\t\t\tif ( mimeType.substr( 0, mimeTest.length ) === mimeTest ) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn false;\n};\n\n/**\n * Handle file selection from the input\n *\n * @private\n * @param {jQuery.Event} e\n */\nOO.ui.SelectFileWidget.prototype.onFileSelected = function ( e ) {\n\tvar file = OO.getProp( e.target, 'files', 0 ) || null;\n\n\tif ( file && !this.isAllowedType( file.type ) ) {\n\t\tfile = null;\n\t}\n\n\tthis.setValue( file );\n\tthis.addInput();\n};\n\n/**\n * Handle clear button click events.\n *\n * @private\n * @return {undefined/boolean} False to prevent default if event is handled\n */\nOO.ui.SelectFileWidget.prototype.onClearClick = function () {\n\tthis.setValue( null );\n\treturn false;\n};\n\n/**\n * Handle key press events.\n *\n * @private\n * @param {jQuery.Event} e Key press event\n * @return {undefined/boolean} False to prevent default if event is handled\n */\nOO.ui.SelectFileWidget.prototype.onKeyPress = function ( e ) {\n\tif ( this.isSupported && !this.isDisabled() && this.$input &&\n\t\t( e.which === OO.ui.Keys.SPACE || e.which === OO.ui.Keys.ENTER )\n\t) {\n\t\tthis.$input.click();\n\t\treturn false;\n\t}\n};\n\n/**\n * Handle drop target click events.\n *\n * @private\n * @param {jQuery.Event} e Key press event\n * @return {undefined/boolean} False to prevent default if event is handled\n */\nOO.ui.SelectFileWidget.prototype.onDropTargetClick = function () {\n\tif ( this.isSupported && !this.isDisabled() && this.$input ) {\n\t\tthis.$input.click();\n\t\treturn false;\n\t}\n};\n\n/**\n * Handle drag enter and over events\n *\n * @private\n * @param {jQuery.Event} e Drag event\n * @return {undefined/boolean} False to prevent default if event is handled\n */\nOO.ui.SelectFileWidget.prototype.onDragEnterOrOver = function ( e ) {\n\tvar itemOrFile,\n\t\tdroppableFile = false,\n\t\tdt = e.originalEvent.dataTransfer;\n\n\te.preventDefault();\n\te.stopPropagation();\n\n\tif ( this.isDisabled() || !this.isSupported ) {\n\t\tthis.$element.removeClass( 'oo-ui-selectFileWidget-canDrop' );\n\t\tdt.dropEffect = 'none';\n\t\treturn false;\n\t}\n\n\t// DataTransferItem and File both have a type property, but in Chrome files\n\t// have no information at this point.\n\titemOrFile = OO.getProp( dt, 'items', 0 ) || OO.getProp( dt, 'files', 0 );\n\tif ( itemOrFile ) {\n\t\tif ( this.isAllowedType( itemOrFile.type ) ) {\n\t\t\tdroppableFile = true;\n\t\t}\n\t// dt.types is Array-like, but not an Array\n\t} else if ( Array.prototype.indexOf.call( OO.getProp( dt, 'types' ) || [], 'Files' ) !== -1 ) {\n\t\t// File information is not available at this point for security so just assume\n\t\t// it is acceptable for now.\n\t\t// https://bugzilla.mozilla.org/show_bug.cgi?id=640534\n\t\tdroppableFile = true;\n\t}\n\n\tthis.$element.toggleClass( 'oo-ui-selectFileWidget-canDrop', droppableFile );\n\tif ( !droppableFile ) {\n\t\tdt.dropEffect = 'none';\n\t}\n\n\treturn false;\n};\n\n/**\n * Handle drag leave events\n *\n * @private\n * @param {jQuery.Event} e Drag event\n */\nOO.ui.SelectFileWidget.prototype.onDragLeave = function () {\n\tthis.$element.removeClass( 'oo-ui-selectFileWidget-canDrop' );\n};\n\n/**\n * Handle drop events\n *\n * @private\n * @param {jQuery.Event} e Drop event\n * @return {undefined/boolean} False to prevent default if event is handled\n */\nOO.ui.SelectFileWidget.prototype.onDrop = function ( e ) {\n\tvar file = null,\n\t\tdt = e.originalEvent.dataTransfer;\n\n\te.preventDefault();\n\te.stopPropagation();\n\tthis.$element.removeClass( 'oo-ui-selectFileWidget-canDrop' );\n\n\tif ( this.isDisabled() || !this.isSupported ) {\n\t\treturn false;\n\t}\n\n\tfile = OO.getProp( dt, 'files', 0 );\n\tif ( file && !this.isAllowedType( file.type ) ) {\n\t\tfile = null;\n\t}\n\tif ( file ) {\n\t\tthis.setValue( file );\n\t}\n\n\treturn false;\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.SelectFileWidget.prototype.setDisabled = function ( disabled ) {\n\tOO.ui.SelectFileWidget.parent.prototype.setDisabled.call( this, disabled );\n\tif ( this.selectButton ) {\n\t\tthis.selectButton.setDisabled( disabled );\n\t}\n\tif ( this.clearButton ) {\n\t\tthis.clearButton.setDisabled( disabled );\n\t}\n\treturn this;\n};\n","/**\n * SearchWidgets combine a {@link OO.ui.TextInputWidget text input field}, where users can type a search query,\n * and a menu of search results, which is displayed beneath the query\n * field. Unlike {@link OO.ui.mixin.LookupElement lookup menus}, search result menus are always visible to the user.\n * Users can choose an item from the menu or type a query into the text field to search for a matching result item.\n * In general, search widgets are used inside a separate {@link OO.ui.Dialog dialog} window.\n *\n * Each time the query is changed, the search result menu is cleared and repopulated. Please see\n * the [OOUI demos][1] for an example.\n *\n * [1]: https://doc.wikimedia.org/oojs-ui/master/demos/#SearchInputWidget-type-search\n *\n * @class\n * @extends OO.ui.Widget\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {string|jQuery} [placeholder] Placeholder text for query input\n * @cfg {string} [value] Initial query value\n */\nOO.ui.SearchWidget = function OoUiSearchWidget( config ) {\n\t// Configuration initialization\n\tconfig = config || {};\n\n\t// Parent constructor\n\tOO.ui.SearchWidget.parent.call( this, config );\n\n\t// Properties\n\tthis.query = new OO.ui.TextInputWidget( {\n\t\ticon: 'search',\n\t\tplaceholder: config.placeholder,\n\t\tvalue: config.value\n\t} );\n\tthis.results = new OO.ui.SelectWidget();\n\tthis.$query = $( '<div>' );\n\tthis.$results = $( '<div>' );\n\n\t// Events\n\tthis.query.connect( this, {\n\t\tchange: 'onQueryChange',\n\t\tenter: 'onQueryEnter'\n\t} );\n\tthis.query.$input.on( 'keydown', this.onQueryKeydown.bind( this ) );\n\n\t// Initialization\n\tthis.$query\n\t\t.addClass( 'oo-ui-searchWidget-query' )\n\t\t.append( this.query.$element );\n\tthis.$results\n\t\t.addClass( 'oo-ui-searchWidget-results' )\n\t\t.append( this.results.$element );\n\tthis.$element\n\t\t.addClass( 'oo-ui-searchWidget' )\n\t\t.append( this.$results, this.$query );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.SearchWidget, OO.ui.Widget );\n\n/* Methods */\n\n/**\n * Handle query key down events.\n *\n * @private\n * @param {jQuery.Event} e Key down event\n */\nOO.ui.SearchWidget.prototype.onQueryKeydown = function ( e ) {\n\tvar highlightedItem, nextItem,\n\t\tdir = e.which === OO.ui.Keys.DOWN ? 1 : ( e.which === OO.ui.Keys.UP ? -1 : 0 );\n\n\tif ( dir ) {\n\t\thighlightedItem = this.results.findHighlightedItem();\n\t\tif ( !highlightedItem ) {\n\t\t\thighlightedItem = this.results.findSelectedItem();\n\t\t}\n\t\tnextItem = this.results.findRelativeSelectableItem( highlightedItem, dir );\n\t\tthis.results.highlightItem( nextItem );\n\t\tnextItem.scrollElementIntoView();\n\t}\n};\n\n/**\n * Handle select widget select events.\n *\n * Clears existing results. Subclasses should repopulate items according to new query.\n *\n * @private\n * @param {string} value New value\n */\nOO.ui.SearchWidget.prototype.onQueryChange = function () {\n\t// Reset\n\tthis.results.clearItems();\n};\n\n/**\n * Handle select widget enter key events.\n *\n * Chooses highlighted item.\n *\n * @private\n * @param {string} value New value\n */\nOO.ui.SearchWidget.prototype.onQueryEnter = function () {\n\tvar highlightedItem = this.results.findHighlightedItem();\n\tif ( highlightedItem ) {\n\t\tthis.results.chooseItem( highlightedItem );\n\t}\n};\n\n/**\n * Get the query input.\n *\n * @return {OO.ui.TextInputWidget} Query input\n */\nOO.ui.SearchWidget.prototype.getQuery = function () {\n\treturn this.query;\n};\n\n/**\n * Get the search results menu.\n *\n * @return {OO.ui.SelectWidget} Menu of search results\n */\nOO.ui.SearchWidget.prototype.getResults = function () {\n\treturn this.results;\n};\n","}( OO ) );\n"]}
\ No newline at end of file
+{"version":3,"sources":["../src/intro.js.txt","../src/mixins/DraggableElement.js","../src/mixins/DraggableGroupElement.js","../src/mixins/RequestManager.js","../src/mixins/LookupElement.js","../src/layouts/TabPanelLayout.js","../src/layouts/PageLayout.js","../src/layouts/StackLayout.js","../src/layouts/MenuLayout.js","../src/layouts/BookletLayout.js","../src/layouts/IndexLayout.js","../src/widgets/ToggleWidget.js","../src/widgets/ToggleButtonWidget.js","../src/widgets/ToggleSwitchWidget.js","../src/widgets/OutlineControlsWidget.js","../src/widgets/OutlineOptionWidget.js","../src/widgets/OutlineSelectWidget.js","../src/widgets/ButtonOptionWidget.js","../src/widgets/ButtonSelectWidget.js","../src/widgets/TabOptionWidget.js","../src/widgets/TabSelectWidget.js","../src/widgets/TagItemWidget.js","../src/widgets/TagMultiselectWidget.js","../src/widgets/PopupTagMultiselectWidget.js","../src/widgets/MenuTagMultiselectWidget.js","../src/widgets/SelectFileWidget.js","../src/widgets/SearchWidget.js","../src/outro.js.txt"],"names":[],"mappings":"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","file":"oojs-ui-widgets.js","sourcesContent":["( function ( OO ) {\n\n'use strict';\n","/**\n * DraggableElement is a mixin class used to create elements that can be clicked\n * and dragged by a mouse to a new position within a group. This class must be used\n * in conjunction with OO.ui.mixin.DraggableGroupElement, which provides a container for\n * the draggable elements.\n *\n * @abstract\n * @class\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {jQuery} [$handle] The part of the element which can be used for dragging, defaults to the whole element\n * @cfg {boolean} [draggable] The items are draggable. This can change with #toggleDraggable\n *  but the draggable state should be called from the DraggableGroupElement, which updates\n *  the whole group\n */\nOO.ui.mixin.DraggableElement = function OoUiMixinDraggableElement( config ) {\n\tconfig = config || {};\n\n\t// Properties\n\tthis.index = null;\n\tthis.$handle = config.$handle || this.$element;\n\tthis.wasHandleUsed = null;\n\n\t// Initialize and events\n\tthis.$element\n\t\t.addClass( 'oo-ui-draggableElement' )\n\t\t.on( {\n\t\t\tmousedown: this.onDragMouseDown.bind( this ),\n\t\t\tdragstart: this.onDragStart.bind( this ),\n\t\t\tdragover: this.onDragOver.bind( this ),\n\t\t\tdragend: this.onDragEnd.bind( this ),\n\t\t\tdrop: this.onDrop.bind( this )\n\t\t} );\n\tthis.$handle.addClass( 'oo-ui-draggableElement-handle' );\n\tthis.toggleDraggable( config.draggable === undefined ? true : !!config.draggable );\n};\n\nOO.initClass( OO.ui.mixin.DraggableElement );\n\n/* Events */\n\n/**\n * @event dragstart\n *\n * A dragstart event is emitted when the user clicks and begins dragging an item.\n * @param {OO.ui.mixin.DraggableElement} item The item the user has clicked and is dragging with the mouse.\n */\n\n/**\n * @event dragend\n * A dragend event is emitted when the user drags an item and releases the mouse,\n * thus terminating the drag operation.\n */\n\n/**\n * @event drop\n * A drop event is emitted when the user drags an item and then releases the mouse button\n * over a valid target.\n */\n\n/* Static Properties */\n\n/**\n * @inheritdoc OO.ui.mixin.ButtonElement\n */\nOO.ui.mixin.DraggableElement.static.cancelButtonMouseDownEvents = false;\n\n/* Methods */\n\n/**\n * Change the draggable state of this widget.\n * This allows users to temporarily halt the dragging operations.\n *\n * @param {boolean} isDraggable Widget supports draggable operations\n * @fires draggable\n */\nOO.ui.mixin.DraggableElement.prototype.toggleDraggable = function ( isDraggable ) {\n\tisDraggable = isDraggable !== undefined ? !!isDraggable : !this.draggable;\n\n\tif ( this.draggable !== isDraggable ) {\n\t\tthis.draggable = isDraggable;\n\n\t\tthis.$handle.toggleClass( 'oo-ui-draggableElement-undraggable', !this.draggable );\n\n\t\t// We make the entire element draggable, not just the handle, so that\n\t\t// the whole element appears to move. wasHandleUsed prevents drags from\n\t\t// starting outside the handle\n\t\tthis.$element.prop( 'draggable', this.draggable );\n\t}\n};\n\n/**\n * Check the draggable state of this widget\n *\n * @return {boolean} Widget supports draggable operations\n */\nOO.ui.mixin.DraggableElement.prototype.isDraggable = function () {\n\treturn this.draggable;\n};\n\n/**\n * Respond to mousedown event.\n *\n * @private\n * @param {jQuery.Event} e Drag event\n */\nOO.ui.mixin.DraggableElement.prototype.onDragMouseDown = function ( e ) {\n\tif ( !this.isDraggable() ) {\n\t\treturn;\n\t}\n\n\tthis.wasHandleUsed =\n\t\t// Optimization: if the handle is the whole element this is always true\n\t\tthis.$handle[ 0 ] === this.$element[ 0 ] ||\n\t\t// Check the mousedown occurred inside the handle\n\t\tOO.ui.contains( this.$handle[ 0 ], e.target, true );\n};\n\n/**\n * Respond to dragstart event.\n *\n * @private\n * @param {jQuery.Event} e Drag event\n * @return {boolean} False if the event is cancelled\n * @fires dragstart\n */\nOO.ui.mixin.DraggableElement.prototype.onDragStart = function ( e ) {\n\tvar element = this,\n\t\tdataTransfer = e.originalEvent.dataTransfer;\n\n\tif ( !this.wasHandleUsed || !this.isDraggable() ) {\n\t\treturn false;\n\t}\n\n\t// Define drop effect\n\tdataTransfer.dropEffect = 'none';\n\tdataTransfer.effectAllowed = 'move';\n\t// Support: Firefox\n\t// We must set up a dataTransfer data property or Firefox seems to\n\t// ignore the fact the element is draggable.\n\ttry {\n\t\tdataTransfer.setData( 'application-x/OOUI-draggable', this.getIndex() );\n\t} catch ( err ) {\n\t\t// The above is only for Firefox. Move on if it fails.\n\t}\n\t// Briefly add a 'clone' class to style the browser's native drag image\n\tthis.$element.addClass( 'oo-ui-draggableElement-clone' );\n\t// Add placeholder class after the browser has rendered the clone\n\tsetTimeout( function () {\n\t\telement.$element\n\t\t\t.removeClass( 'oo-ui-draggableElement-clone' )\n\t\t\t.addClass( 'oo-ui-draggableElement-placeholder' );\n\t} );\n\t// Emit event\n\tthis.emit( 'dragstart', this );\n\treturn true;\n};\n\n/**\n * Respond to dragend event.\n *\n * @private\n * @fires dragend\n */\nOO.ui.mixin.DraggableElement.prototype.onDragEnd = function () {\n\tthis.$element.removeClass( 'oo-ui-draggableElement-placeholder' );\n\tthis.emit( 'dragend' );\n};\n\n/**\n * Handle drop event.\n *\n * @private\n * @param {jQuery.Event} e Drop event\n * @fires drop\n */\nOO.ui.mixin.DraggableElement.prototype.onDrop = function ( e ) {\n\te.preventDefault();\n\tthis.emit( 'drop', e );\n};\n\n/**\n * In order for drag/drop to work, the dragover event must\n * return false and stop propogation.\n *\n * @param {jQuery.Event} e Drag event\n * @private\n */\nOO.ui.mixin.DraggableElement.prototype.onDragOver = function ( e ) {\n\te.preventDefault();\n};\n\n/**\n * Set item index.\n * Store it in the DOM so we can access from the widget drag event\n *\n * @private\n * @param {number} index Item index\n */\nOO.ui.mixin.DraggableElement.prototype.setIndex = function ( index ) {\n\tif ( this.index !== index ) {\n\t\tthis.index = index;\n\t\tthis.$element.data( 'index', index );\n\t}\n};\n\n/**\n * Get item index\n *\n * @private\n * @return {number} Item index\n */\nOO.ui.mixin.DraggableElement.prototype.getIndex = function () {\n\treturn this.index;\n};\n","/**\n * DraggableGroupElement is a mixin class used to create a group element to\n * contain draggable elements, which are items that can be clicked and dragged by a mouse.\n * The class is used with OO.ui.mixin.DraggableElement.\n *\n * @abstract\n * @class\n * @mixins OO.ui.mixin.GroupElement\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {string} [orientation] Item orientation: 'horizontal' or 'vertical'. The orientation\n *  should match the layout of the items. Items displayed in a single row\n *  or in several rows should use horizontal orientation. The vertical orientation should only be\n *  used when the items are displayed in a single column. Defaults to 'vertical'\n * @cfg {boolean} [draggable] The items are draggable. This can change with #toggleDraggable\n */\nOO.ui.mixin.DraggableGroupElement = function OoUiMixinDraggableGroupElement( config ) {\n\t// Configuration initialization\n\tconfig = config || {};\n\n\t// Parent constructor\n\tOO.ui.mixin.GroupElement.call( this, config );\n\n\t// Properties\n\tthis.orientation = config.orientation || 'vertical';\n\tthis.dragItem = null;\n\tthis.itemKeys = {};\n\tthis.dir = null;\n\tthis.itemsOrder = null;\n\tthis.draggable = config.draggable === undefined ? true : !!config.draggable;\n\n\t// Events\n\tthis.aggregate( {\n\t\tdragstart: 'itemDragStart',\n\t\tdragend: 'itemDragEnd',\n\t\tdrop: 'itemDrop'\n\t} );\n\tthis.connect( this, {\n\t\titemDragStart: 'onItemDragStart',\n\t\titemDrop: 'onItemDropOrDragEnd',\n\t\titemDragEnd: 'onItemDropOrDragEnd'\n\t} );\n\n\t// Initialize\n\tif ( Array.isArray( config.items ) ) {\n\t\tthis.addItems( config.items );\n\t}\n\tthis.$element\n\t\t.addClass( 'oo-ui-draggableGroupElement' )\n\t\t.toggleClass( 'oo-ui-draggableGroupElement-horizontal', this.orientation === 'horizontal' );\n};\n\n/* Setup */\nOO.mixinClass( OO.ui.mixin.DraggableGroupElement, OO.ui.mixin.GroupElement );\n\n/* Events */\n\n/**\n * An item has been dragged to a new position, but not yet dropped.\n *\n * @event drag\n * @param {OO.ui.mixin.DraggableElement} item Dragged item\n * @param {number} [newIndex] New index for the item\n */\n\n/**\n * An item has been dropped at a new position.\n *\n * @event reorder\n * @param {OO.ui.mixin.DraggableElement} item Reordered item\n * @param {number} [newIndex] New index for the item\n */\n\n/**\n * Draggable state of this widget has changed.\n *\n * @event draggable\n * @param {boolean} [draggable] Widget is draggable\n */\n\n/* Methods */\n\n/**\n * Change the draggable state of this widget.\n * This allows users to temporarily halt the dragging operations.\n *\n * @param {boolean} isDraggable Widget supports draggable operations\n * @fires draggable\n */\nOO.ui.mixin.DraggableGroupElement.prototype.toggleDraggable = function ( isDraggable ) {\n\tisDraggable = isDraggable !== undefined ? !!isDraggable : !this.draggable;\n\n\tif ( this.draggable !== isDraggable ) {\n\t\tthis.draggable = isDraggable;\n\n\t\t// Tell the items their draggable state changed\n\t\tthis.getItems().forEach( function ( item ) {\n\t\t\titem.toggleDraggable( this.draggable );\n\t\t}.bind( this ) );\n\n\t\t// Emit event\n\t\tthis.emit( 'draggable', this.draggable );\n\t}\n};\n\n/**\n * Check the draggable state of this widget\n *\n * @return {boolean} Widget supports draggable operations\n */\nOO.ui.mixin.DraggableGroupElement.prototype.isDraggable = function () {\n\treturn this.draggable;\n};\n\n/**\n * Respond to item drag start event\n *\n * @private\n * @param {OO.ui.mixin.DraggableElement} item Dragged item\n */\nOO.ui.mixin.DraggableGroupElement.prototype.onItemDragStart = function ( item ) {\n\tif ( !this.isDraggable() ) {\n\t\treturn;\n\t}\n\t// Make a shallow copy of this.items so we can re-order it during previews\n\t// without affecting the original array.\n\tthis.itemsOrder = this.items.slice();\n\tthis.updateIndexes();\n\tif ( this.orientation === 'horizontal' ) {\n\t\t// Calculate and cache directionality on drag start - it's a little\n\t\t// expensive and it shouldn't change while dragging.\n\t\tthis.dir = this.$element.css( 'direction' );\n\t}\n\tthis.setDragItem( item );\n};\n\n/**\n * Update the index properties of the items\n */\nOO.ui.mixin.DraggableGroupElement.prototype.updateIndexes = function () {\n\tvar i, len;\n\n\t// Map the index of each object\n\tfor ( i = 0, len = this.itemsOrder.length; i < len; i++ ) {\n\t\tthis.itemsOrder[ i ].setIndex( i );\n\t}\n};\n\n/**\n * Handle drop or dragend event and switch the order of the items accordingly\n *\n * @private\n * @param {OO.ui.mixin.DraggableElement} item Dropped item\n * @return {OO.ui.Element} The element, for chaining\n */\nOO.ui.mixin.DraggableGroupElement.prototype.onItemDropOrDragEnd = function () {\n\tvar targetIndex, originalIndex,\n\t\titem = this.getDragItem();\n\n\t// TODO: Figure out a way to configure a list of legally droppable\n\t// elements even if they are not yet in the list\n\tif ( item ) {\n\t\toriginalIndex = this.items.indexOf( item );\n\t\t// If the item has moved forward, add one to the index to account for the left shift\n\t\ttargetIndex = item.getIndex() + ( item.getIndex() > originalIndex ? 1 : 0 );\n\t\tif ( targetIndex !== originalIndex ) {\n\t\t\tthis.reorder( this.getDragItem(), targetIndex );\n\t\t\tthis.emit( 'reorder', this.getDragItem(), targetIndex );\n\t\t}\n\t\tthis.updateIndexes();\n\t}\n\tthis.unsetDragItem();\n\t// Return false to prevent propogation\n\treturn false;\n};\n\n/**\n * Respond to dragover event\n *\n * @private\n * @param {jQuery.Event} e Dragover event\n * @fires reorder\n */\nOO.ui.mixin.DraggableGroupElement.prototype.onDragOver = function ( e ) {\n\tvar overIndex, targetIndex,\n\t\titem = this.getDragItem(),\n\t\tdragItemIndex = item.getIndex();\n\n\t// Get the OptionWidget item we are dragging over\n\toverIndex = $( e.target ).closest( '.oo-ui-draggableElement' ).data( 'index' );\n\n\tif ( overIndex !== undefined && overIndex !== dragItemIndex ) {\n\t\ttargetIndex = overIndex + ( overIndex > dragItemIndex ? 1 : 0 );\n\n\t\tif ( targetIndex > 0 ) {\n\t\t\tthis.$group.children().eq( targetIndex - 1 ).after( item.$element );\n\t\t} else {\n\t\t\tthis.$group.prepend( item.$element );\n\t\t}\n\t\t// Move item in itemsOrder array\n\t\tthis.itemsOrder.splice( overIndex, 0,\n\t\t\tthis.itemsOrder.splice( dragItemIndex, 1 )[ 0 ]\n\t\t);\n\t\tthis.updateIndexes();\n\t\tthis.emit( 'drag', item, targetIndex );\n\t}\n\t// Prevent default\n\te.preventDefault();\n};\n\n/**\n * Reorder the items in the group\n *\n * @param {OO.ui.mixin.DraggableElement} item Reordered item\n * @param {number} newIndex New index\n */\nOO.ui.mixin.DraggableGroupElement.prototype.reorder = function ( item, newIndex ) {\n\tthis.addItems( [ item ], newIndex );\n};\n\n/**\n * Set a dragged item\n *\n * @param {OO.ui.mixin.DraggableElement} item Dragged item\n */\nOO.ui.mixin.DraggableGroupElement.prototype.setDragItem = function ( item ) {\n\tif ( this.dragItem !== item ) {\n\t\tthis.dragItem = item;\n\t\tthis.$element.on( 'dragover', this.onDragOver.bind( this ) );\n\t\tthis.$element.addClass( 'oo-ui-draggableGroupElement-dragging' );\n\t}\n};\n\n/**\n * Unset the current dragged item\n */\nOO.ui.mixin.DraggableGroupElement.prototype.unsetDragItem = function () {\n\tif ( this.dragItem ) {\n\t\tthis.dragItem = null;\n\t\tthis.$element.off( 'dragover' );\n\t\tthis.$element.removeClass( 'oo-ui-draggableGroupElement-dragging' );\n\t}\n};\n\n/**\n * Get the item that is currently being dragged.\n *\n * @return {OO.ui.mixin.DraggableElement|null} The currently dragged item, or `null` if no item is being dragged\n */\nOO.ui.mixin.DraggableGroupElement.prototype.getDragItem = function () {\n\treturn this.dragItem;\n};\n","/**\n * RequestManager is a mixin that manages the lifecycle of a promise-backed request for a widget, such as\n * the {@link OO.ui.mixin.LookupElement}.\n *\n * @class\n * @abstract\n *\n * @constructor\n */\nOO.ui.mixin.RequestManager = function OoUiMixinRequestManager() {\n\tthis.requestCache = {};\n\tthis.requestQuery = null;\n\tthis.requestRequest = null;\n};\n\n/* Setup */\n\nOO.initClass( OO.ui.mixin.RequestManager );\n\n/**\n * Get request results for the current query.\n *\n * @return {jQuery.Promise} Promise object which will be passed response data as the first argument of\n *   the done event. If the request was aborted to make way for a subsequent request, this promise\n *   may not be rejected, depending on what jQuery feels like doing.\n */\nOO.ui.mixin.RequestManager.prototype.getRequestData = function () {\n\tvar widget = this,\n\t\tvalue = this.getRequestQuery(),\n\t\tdeferred = $.Deferred(),\n\t\tourRequest;\n\n\tthis.abortRequest();\n\tif ( Object.prototype.hasOwnProperty.call( this.requestCache, value ) ) {\n\t\tdeferred.resolve( this.requestCache[ value ] );\n\t} else {\n\t\tif ( this.pushPending ) {\n\t\t\tthis.pushPending();\n\t\t}\n\t\tthis.requestQuery = value;\n\t\tourRequest = this.requestRequest = this.getRequest();\n\t\tourRequest\n\t\t\t.always( function () {\n\t\t\t\t// We need to pop pending even if this is an old request, otherwise\n\t\t\t\t// the widget will remain pending forever.\n\t\t\t\t// TODO: this assumes that an aborted request will fail or succeed soon after\n\t\t\t\t// being aborted, or at least eventually. It would be nice if we could popPending()\n\t\t\t\t// at abort time, but only if we knew that we hadn't already called popPending()\n\t\t\t\t// for that request.\n\t\t\t\tif ( widget.popPending ) {\n\t\t\t\t\twidget.popPending();\n\t\t\t\t}\n\t\t\t} )\n\t\t\t.done( function ( response ) {\n\t\t\t\t// If this is an old request (and aborting it somehow caused it to still succeed),\n\t\t\t\t// ignore its success completely\n\t\t\t\tif ( ourRequest === widget.requestRequest ) {\n\t\t\t\t\twidget.requestQuery = null;\n\t\t\t\t\twidget.requestRequest = null;\n\t\t\t\t\twidget.requestCache[ value ] = widget.getRequestCacheDataFromResponse( response );\n\t\t\t\t\tdeferred.resolve( widget.requestCache[ value ] );\n\t\t\t\t}\n\t\t\t} )\n\t\t\t.fail( function () {\n\t\t\t\t// If this is an old request (or a request failing because it's being aborted),\n\t\t\t\t// ignore its failure completely\n\t\t\t\tif ( ourRequest === widget.requestRequest ) {\n\t\t\t\t\twidget.requestQuery = null;\n\t\t\t\t\twidget.requestRequest = null;\n\t\t\t\t\tdeferred.reject();\n\t\t\t\t}\n\t\t\t} );\n\t}\n\treturn deferred.promise();\n};\n\n/**\n * Abort the currently pending request, if any.\n *\n * @private\n */\nOO.ui.mixin.RequestManager.prototype.abortRequest = function () {\n\tvar oldRequest = this.requestRequest;\n\tif ( oldRequest ) {\n\t\t// First unset this.requestRequest to the fail handler will notice\n\t\t// that the request is no longer current\n\t\tthis.requestRequest = null;\n\t\tthis.requestQuery = null;\n\t\toldRequest.abort();\n\t}\n};\n\n/**\n * Get the query to be made.\n *\n * @protected\n * @method\n * @abstract\n * @return {string} query to be used\n */\nOO.ui.mixin.RequestManager.prototype.getRequestQuery = null;\n\n/**\n * Get a new request object of the current query value.\n *\n * @protected\n * @method\n * @abstract\n * @return {jQuery.Promise} jQuery AJAX object, or promise object with an .abort() method\n */\nOO.ui.mixin.RequestManager.prototype.getRequest = null;\n\n/**\n * Pre-process data returned by the request from #getRequest.\n *\n * The return value of this function will be cached, and any further queries for the given value\n * will use the cache rather than doing API requests.\n *\n * @protected\n * @method\n * @abstract\n * @param {Mixed} response Response from server\n * @return {Mixed} Cached result data\n */\nOO.ui.mixin.RequestManager.prototype.getRequestCacheDataFromResponse = null;\n","/**\n * LookupElement is a mixin that creates a {@link OO.ui.MenuSelectWidget menu} of suggested values for\n * a {@link OO.ui.TextInputWidget text input widget}. Suggested values are based on the characters the user types\n * into the text input field and, in general, the menu is only displayed when the user types. If a suggested value is chosen\n * from the lookup menu, that value becomes the value of the input field.\n *\n * Note that a new menu of suggested items is displayed when a value is chosen from the lookup menu. If this is\n * not the desired behavior, disable lookup menus with the #setLookupsDisabled method, then set the value, then\n * re-enable lookups.\n *\n * See the [OOUI demos][1] for an example.\n *\n * [1]: https://doc.wikimedia.org/oojs-ui/master/demos/#LookupElement-try-inputting-an-integer\n *\n * @class\n * @abstract\n * @mixins OO.ui.mixin.RequestManager\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {jQuery} [$overlay] Overlay for the lookup menu; defaults to relative positioning.\n *  See <https://www.mediawiki.org/wiki/OOUI/Concepts#Overlays>.\n * @cfg {jQuery} [$container=this.$element] The container element. The lookup menu is rendered beneath the specified element.\n * @cfg {Object} [menu] Configuration options to pass to {@link OO.ui.MenuSelectWidget menu select widget}\n * @cfg {boolean} [allowSuggestionsWhenEmpty=false] Request and display a lookup menu when the text input is empty.\n *  By default, the lookup menu is not generated and displayed until the user begins to type.\n * @cfg {boolean} [highlightFirst=true] Whether the first lookup result should be highlighted (so, that the user can\n *  take it over into the input with simply pressing return) automatically or not.\n */\nOO.ui.mixin.LookupElement = function OoUiMixinLookupElement( config ) {\n\t// Configuration initialization\n\tconfig = $.extend( { highlightFirst: true }, config );\n\n\t// Mixin constructors\n\tOO.ui.mixin.RequestManager.call( this, config );\n\n\t// Properties\n\tthis.$overlay = ( config.$overlay === true ? OO.ui.getDefaultOverlay() : config.$overlay ) || this.$element;\n\tthis.lookupMenu = new OO.ui.MenuSelectWidget( $.extend( {\n\t\twidget: this,\n\t\tinput: this,\n\t\t$floatableContainer: config.$container || this.$element\n\t}, config.menu ) );\n\n\tthis.allowSuggestionsWhenEmpty = config.allowSuggestionsWhenEmpty || false;\n\n\tthis.lookupsDisabled = false;\n\tthis.lookupInputFocused = false;\n\tthis.lookupHighlightFirstItem = config.highlightFirst;\n\n\t// Events\n\tthis.$input.on( {\n\t\tfocus: this.onLookupInputFocus.bind( this ),\n\t\tblur: this.onLookupInputBlur.bind( this ),\n\t\tmousedown: this.onLookupInputMouseDown.bind( this )\n\t} );\n\tthis.connect( this, { change: 'onLookupInputChange' } );\n\tthis.lookupMenu.connect( this, {\n\t\ttoggle: 'onLookupMenuToggle',\n\t\tchoose: 'onLookupMenuItemChoose'\n\t} );\n\n\t// Initialization\n\tthis.$input.attr( {\n\t\trole: 'combobox',\n\t\t'aria-owns': this.lookupMenu.getElementId(),\n\t\t'aria-autocomplete': 'list'\n\t} );\n\tthis.$element.addClass( 'oo-ui-lookupElement' );\n\tthis.lookupMenu.$element.addClass( 'oo-ui-lookupElement-menu' );\n\tthis.$overlay.append( this.lookupMenu.$element );\n};\n\n/* Setup */\n\nOO.mixinClass( OO.ui.mixin.LookupElement, OO.ui.mixin.RequestManager );\n\n/* Methods */\n\n/**\n * Handle input focus event.\n *\n * @protected\n * @param {jQuery.Event} e Input focus event\n */\nOO.ui.mixin.LookupElement.prototype.onLookupInputFocus = function () {\n\tthis.lookupInputFocused = true;\n\tthis.populateLookupMenu();\n};\n\n/**\n * Handle input blur event.\n *\n * @protected\n * @param {jQuery.Event} e Input blur event\n */\nOO.ui.mixin.LookupElement.prototype.onLookupInputBlur = function () {\n\tthis.closeLookupMenu();\n\tthis.lookupInputFocused = false;\n};\n\n/**\n * Handle input mouse down event.\n *\n * @protected\n * @param {jQuery.Event} e Input mouse down event\n */\nOO.ui.mixin.LookupElement.prototype.onLookupInputMouseDown = function () {\n\t// Only open the menu if the input was already focused.\n\t// This way we allow the user to open the menu again after closing it with Esc\n\t// by clicking in the input. Opening (and populating) the menu when initially\n\t// clicking into the input is handled by the focus handler.\n\tif ( this.lookupInputFocused && !this.lookupMenu.isVisible() ) {\n\t\tthis.populateLookupMenu();\n\t}\n};\n\n/**\n * Handle input change event.\n *\n * @protected\n * @param {string} value New input value\n */\nOO.ui.mixin.LookupElement.prototype.onLookupInputChange = function () {\n\tif ( this.lookupInputFocused ) {\n\t\tthis.populateLookupMenu();\n\t}\n};\n\n/**\n * Handle the lookup menu being shown/hidden.\n *\n * @protected\n * @param {boolean} visible Whether the lookup menu is now visible.\n */\nOO.ui.mixin.LookupElement.prototype.onLookupMenuToggle = function ( visible ) {\n\tif ( !visible ) {\n\t\t// When the menu is hidden, abort any active request and clear the menu.\n\t\t// This has to be done here in addition to closeLookupMenu(), because\n\t\t// MenuSelectWidget will close itself when the user presses Esc.\n\t\tthis.abortLookupRequest();\n\t\tthis.lookupMenu.clearItems();\n\t}\n};\n\n/**\n * Handle menu item 'choose' event, updating the text input value to the value of the clicked item.\n *\n * @protected\n * @param {OO.ui.MenuOptionWidget} item Selected item\n */\nOO.ui.mixin.LookupElement.prototype.onLookupMenuItemChoose = function ( item ) {\n\tthis.setValue( item.getData() );\n};\n\n/**\n * Get lookup menu.\n *\n * @private\n * @return {OO.ui.MenuSelectWidget}\n */\nOO.ui.mixin.LookupElement.prototype.getLookupMenu = function () {\n\treturn this.lookupMenu;\n};\n\n/**\n * Disable or re-enable lookups.\n *\n * When lookups are disabled, calls to #populateLookupMenu will be ignored.\n *\n * @param {boolean} disabled Disable lookups\n */\nOO.ui.mixin.LookupElement.prototype.setLookupsDisabled = function ( disabled ) {\n\tthis.lookupsDisabled = !!disabled;\n};\n\n/**\n * Open the menu. If there are no entries in the menu, this does nothing.\n *\n * @private\n * @chainable\n * @return {OO.ui.Element} The element, for chaining\n */\nOO.ui.mixin.LookupElement.prototype.openLookupMenu = function () {\n\tif ( !this.lookupMenu.isEmpty() ) {\n\t\tthis.lookupMenu.toggle( true );\n\t}\n\treturn this;\n};\n\n/**\n * Close the menu, empty it, and abort any pending request.\n *\n * @private\n * @chainable\n * @return {OO.ui.Element} The element, for chaining\n */\nOO.ui.mixin.LookupElement.prototype.closeLookupMenu = function () {\n\tthis.lookupMenu.toggle( false );\n\tthis.abortLookupRequest();\n\tthis.lookupMenu.clearItems();\n\treturn this;\n};\n\n/**\n * Request menu items based on the input's current value, and when they arrive,\n * populate the menu with these items and show the menu.\n *\n * If lookups have been disabled with #setLookupsDisabled, this function does nothing.\n *\n * @private\n * @chainable\n * @return {OO.ui.Element} The element, for chaining\n */\nOO.ui.mixin.LookupElement.prototype.populateLookupMenu = function () {\n\tvar widget = this,\n\t\tvalue = this.getValue();\n\n\tif ( this.lookupsDisabled || this.isReadOnly() ) {\n\t\treturn;\n\t}\n\n\t// If the input is empty, clear the menu, unless suggestions when empty are allowed.\n\tif ( !this.allowSuggestionsWhenEmpty && value === '' ) {\n\t\tthis.closeLookupMenu();\n\t// Skip population if there is already a request pending for the current value\n\t} else if ( value !== this.lookupQuery ) {\n\t\tthis.getLookupMenuItems()\n\t\t\t.done( function ( items ) {\n\t\t\t\twidget.lookupMenu.clearItems();\n\t\t\t\tif ( items.length ) {\n\t\t\t\t\twidget.lookupMenu\n\t\t\t\t\t\t.addItems( items )\n\t\t\t\t\t\t.toggle( true );\n\t\t\t\t\twidget.initializeLookupMenuSelection();\n\t\t\t\t} else {\n\t\t\t\t\twidget.lookupMenu.toggle( false );\n\t\t\t\t}\n\t\t\t} )\n\t\t\t.fail( function () {\n\t\t\t\twidget.lookupMenu.clearItems();\n\t\t\t\twidget.lookupMenu.toggle( false );\n\t\t\t} );\n\t}\n\n\treturn this;\n};\n\n/**\n * Highlight the first selectable item in the menu, if configured.\n *\n * @private\n * @chainable\n */\nOO.ui.mixin.LookupElement.prototype.initializeLookupMenuSelection = function () {\n\tif ( this.lookupHighlightFirstItem && !this.lookupMenu.findSelectedItem() ) {\n\t\tthis.lookupMenu.highlightItem( this.lookupMenu.findFirstSelectableItem() );\n\t}\n};\n\n/**\n * Get lookup menu items for the current query.\n *\n * @private\n * @return {jQuery.Promise} Promise object which will be passed menu items as the first argument of\n *   the done event. If the request was aborted to make way for a subsequent request, this promise\n *   will not be rejected: it will remain pending forever.\n */\nOO.ui.mixin.LookupElement.prototype.getLookupMenuItems = function () {\n\treturn this.getRequestData().then( function ( data ) {\n\t\treturn this.getLookupMenuOptionsFromData( data );\n\t}.bind( this ) );\n};\n\n/**\n * Abort the currently pending lookup request, if any.\n *\n * @private\n */\nOO.ui.mixin.LookupElement.prototype.abortLookupRequest = function () {\n\tthis.abortRequest();\n};\n\n/**\n * Get a new request object of the current lookup query value.\n *\n * @protected\n * @method\n * @abstract\n * @return {jQuery.Promise} jQuery AJAX object, or promise object with an .abort() method\n */\nOO.ui.mixin.LookupElement.prototype.getLookupRequest = null;\n\n/**\n * Pre-process data returned by the request from #getLookupRequest.\n *\n * The return value of this function will be cached, and any further queries for the given value\n * will use the cache rather than doing API requests.\n *\n * @protected\n * @method\n * @abstract\n * @param {Mixed} response Response from server\n * @return {Mixed} Cached result data\n */\nOO.ui.mixin.LookupElement.prototype.getLookupCacheDataFromResponse = null;\n\n/**\n * Get a list of menu option widgets from the (possibly cached) data returned by\n * #getLookupCacheDataFromResponse.\n *\n * @protected\n * @method\n * @abstract\n * @param {Mixed} data Cached result data, usually an array\n * @return {OO.ui.MenuOptionWidget[]} Menu items\n */\nOO.ui.mixin.LookupElement.prototype.getLookupMenuOptionsFromData = null;\n\n/**\n * Set the read-only state of the widget.\n *\n * This will also disable/enable the lookups functionality.\n *\n * @param {boolean} readOnly Make input read-only\n * @chainable\n * @return {OO.ui.Element} The element, for chaining\n */\nOO.ui.mixin.LookupElement.prototype.setReadOnly = function ( readOnly ) {\n\t// Parent method\n\t// Note: Calling #setReadOnly this way assumes this is mixed into an OO.ui.TextInputWidget\n\tOO.ui.TextInputWidget.prototype.setReadOnly.call( this, readOnly );\n\n\t// During construction, #setReadOnly is called before the OO.ui.mixin.LookupElement constructor\n\tif ( this.isReadOnly() && this.lookupMenu ) {\n\t\tthis.closeLookupMenu();\n\t}\n\n\treturn this;\n};\n\n/**\n * @inheritdoc OO.ui.mixin.RequestManager\n */\nOO.ui.mixin.LookupElement.prototype.getRequestQuery = function () {\n\treturn this.getValue();\n};\n\n/**\n * @inheritdoc OO.ui.mixin.RequestManager\n */\nOO.ui.mixin.LookupElement.prototype.getRequest = function () {\n\treturn this.getLookupRequest();\n};\n\n/**\n * @inheritdoc OO.ui.mixin.RequestManager\n */\nOO.ui.mixin.LookupElement.prototype.getRequestCacheDataFromResponse = function ( response ) {\n\treturn this.getLookupCacheDataFromResponse( response );\n};\n","/**\n * TabPanelLayouts are used within {@link OO.ui.IndexLayout index layouts} to create tab panels that\n * users can select and display from the index's optional {@link OO.ui.TabSelectWidget tab}\n * navigation. TabPanels are usually not instantiated directly, rather extended to include the\n * required content and functionality.\n *\n * Each tab panel must have a unique symbolic name, which is passed to the constructor. In addition,\n * the tab panel's tab item is customized (with a label) using the #setupTabItem method. See\n * {@link OO.ui.IndexLayout IndexLayout} for an example.\n *\n * @class\n * @extends OO.ui.PanelLayout\n *\n * @constructor\n * @param {string} name Unique symbolic name of tab panel\n * @param {Object} [config] Configuration options\n * @cfg {jQuery|string|Function|OO.ui.HtmlSnippet} [label] Label for tab panel's tab\n */\nOO.ui.TabPanelLayout = function OoUiTabPanelLayout( name, config ) {\n\t// Allow passing positional parameters inside the config object\n\tif ( OO.isPlainObject( name ) && config === undefined ) {\n\t\tconfig = name;\n\t\tname = config.name;\n\t}\n\n\t// Configuration initialization\n\tconfig = $.extend( { scrollable: true }, config );\n\n\t// Parent constructor\n\tOO.ui.TabPanelLayout.parent.call( this, config );\n\n\t// Properties\n\tthis.name = name;\n\tthis.label = config.label;\n\tthis.tabItem = null;\n\tthis.active = false;\n\n\t// Initialization\n\tthis.$element\n\t\t.addClass( 'oo-ui-tabPanelLayout' )\n\t\t.attr( 'role', 'tabpanel' );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.TabPanelLayout, OO.ui.PanelLayout );\n\n/* Events */\n\n/**\n * An 'active' event is emitted when the tab panel becomes active. Tab panels become active when they are\n * shown in a index layout that is configured to display only one tab panel at a time.\n *\n * @event active\n * @param {boolean} active Tab panel is active\n */\n\n/* Methods */\n\n/**\n * Get the symbolic name of the tab panel.\n *\n * @return {string} Symbolic name of tab panel\n */\nOO.ui.TabPanelLayout.prototype.getName = function () {\n\treturn this.name;\n};\n\n/**\n * Check if tab panel is active.\n *\n * Tab panels become active when they are shown in a {@link OO.ui.IndexLayout index layout} that is configured to\n * display only one tab panel at a time. Additional CSS is applied to the tab panel's tab item to reflect the\n * active state.\n *\n * @return {boolean} Tab panel is active\n */\nOO.ui.TabPanelLayout.prototype.isActive = function () {\n\treturn this.active;\n};\n\n/**\n * Get tab item.\n *\n * The tab item allows users to access the tab panel from the index's tab\n * navigation. The tab item itself can be customized (with a label, level, etc.) using the #setupTabItem method.\n *\n * @return {OO.ui.TabOptionWidget|null} Tab option widget\n */\nOO.ui.TabPanelLayout.prototype.getTabItem = function () {\n\treturn this.tabItem;\n};\n\n/**\n * Set or unset the tab item.\n *\n * Specify a {@link OO.ui.TabOptionWidget tab option} to set it,\n * or `null` to clear the tab item. To customize the tab item itself (e.g., to set a label or tab\n * level), use #setupTabItem instead of this method.\n *\n * @param {OO.ui.TabOptionWidget|null} tabItem Tab option widget, null to clear\n * @chainable\n * @return {OO.ui.TabPanelLayout} The layout, for chaining\n */\nOO.ui.TabPanelLayout.prototype.setTabItem = function ( tabItem ) {\n\tthis.tabItem = tabItem || null;\n\tif ( tabItem ) {\n\t\tthis.setupTabItem();\n\t}\n\treturn this;\n};\n\n/**\n * Set up the tab item.\n *\n * Use this method to customize the tab item (e.g., to add a label or tab level). To set or unset\n * the tab item itself (with a {@link OO.ui.TabOptionWidget tab option} or `null`), use\n * the #setTabItem method instead.\n *\n * @param {OO.ui.TabOptionWidget} tabItem Tab option widget to set up\n * @chainable\n * @return {OO.ui.TabPanelLayout} The layout, for chaining\n */\nOO.ui.TabPanelLayout.prototype.setupTabItem = function () {\n\tthis.$element.attr( 'aria-labelledby', this.tabItem.getElementId() );\n\n\tthis.tabItem.$element.attr( 'aria-controls', this.getElementId() );\n\n\tif ( this.label ) {\n\t\tthis.tabItem.setLabel( this.label );\n\t}\n\treturn this;\n};\n\n/**\n * Set the tab panel to its 'active' state.\n *\n * Tab panels become active when they are shown in a index layout that is configured to display only\n * one tab panel at a time. Additional CSS is applied to the tab item to reflect the tab panel's\n * active state. Outside of the index context, setting the active state on a tab panel does nothing.\n *\n * @param {boolean} active Tab panel is active\n * @fires active\n */\nOO.ui.TabPanelLayout.prototype.setActive = function ( active ) {\n\tactive = !!active;\n\n\tif ( active !== this.active ) {\n\t\tthis.active = active;\n\t\tthis.$element.toggleClass( 'oo-ui-tabPanelLayout-active', this.active );\n\t\tthis.emit( 'active', this.active );\n\t}\n};\n","/**\n * PageLayouts are used within {@link OO.ui.BookletLayout booklet layouts} to create pages that users can select and display\n * from the booklet's optional {@link OO.ui.OutlineSelectWidget outline} navigation. Pages are usually not instantiated directly,\n * rather extended to include the required content and functionality.\n *\n * Each page must have a unique symbolic name, which is passed to the constructor. In addition, the page's outline\n * item is customized (with a label, outline level, etc.) using the #setupOutlineItem method. See\n * {@link OO.ui.BookletLayout BookletLayout} for an example.\n *\n * @class\n * @extends OO.ui.PanelLayout\n *\n * @constructor\n * @param {string} name Unique symbolic name of page\n * @param {Object} [config] Configuration options\n */\nOO.ui.PageLayout = function OoUiPageLayout( name, config ) {\n\t// Allow passing positional parameters inside the config object\n\tif ( OO.isPlainObject( name ) && config === undefined ) {\n\t\tconfig = name;\n\t\tname = config.name;\n\t}\n\n\t// Configuration initialization\n\tconfig = $.extend( { scrollable: true }, config );\n\n\t// Parent constructor\n\tOO.ui.PageLayout.parent.call( this, config );\n\n\t// Properties\n\tthis.name = name;\n\tthis.outlineItem = null;\n\tthis.active = false;\n\n\t// Initialization\n\tthis.$element.addClass( 'oo-ui-pageLayout' );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.PageLayout, OO.ui.PanelLayout );\n\n/* Events */\n\n/**\n * An 'active' event is emitted when the page becomes active. Pages become active when they are\n * shown in a booklet layout that is configured to display only one page at a time.\n *\n * @event active\n * @param {boolean} active Page is active\n */\n\n/* Methods */\n\n/**\n * Get the symbolic name of the page.\n *\n * @return {string} Symbolic name of page\n */\nOO.ui.PageLayout.prototype.getName = function () {\n\treturn this.name;\n};\n\n/**\n * Check if page is active.\n *\n * Pages become active when they are shown in a {@link OO.ui.BookletLayout booklet layout} that is configured to display\n * only one page at a time. Additional CSS is applied to the page's outline item to reflect the active state.\n *\n * @return {boolean} Page is active\n */\nOO.ui.PageLayout.prototype.isActive = function () {\n\treturn this.active;\n};\n\n/**\n * Get outline item.\n *\n * The outline item allows users to access the page from the booklet's outline\n * navigation. The outline item itself can be customized (with a label, level, etc.) using the #setupOutlineItem method.\n *\n * @return {OO.ui.OutlineOptionWidget|null} Outline option widget\n */\nOO.ui.PageLayout.prototype.getOutlineItem = function () {\n\treturn this.outlineItem;\n};\n\n/**\n * Set or unset the outline item.\n *\n * Specify an {@link OO.ui.OutlineOptionWidget outline option} to set it,\n * or `null` to clear the outline item. To customize the outline item itself (e.g., to set a label or outline\n * level), use #setupOutlineItem instead of this method.\n *\n * @param {OO.ui.OutlineOptionWidget|null} outlineItem Outline option widget, null to clear\n * @chainable\n * @return {OO.ui.PageLayout} The layout, for chaining\n */\nOO.ui.PageLayout.prototype.setOutlineItem = function ( outlineItem ) {\n\tthis.outlineItem = outlineItem || null;\n\tif ( outlineItem ) {\n\t\tthis.setupOutlineItem();\n\t}\n\treturn this;\n};\n\n/**\n * Set up the outline item.\n *\n * Use this method to customize the outline item (e.g., to add a label or outline level). To set or unset\n * the outline item itself (with an {@link OO.ui.OutlineOptionWidget outline option} or `null`), use\n * the #setOutlineItem method instead.\n *\n * @param {OO.ui.OutlineOptionWidget} outlineItem Outline option widget to set up\n * @chainable\n * @return {OO.ui.PageLayout} The layout, for chaining\n */\nOO.ui.PageLayout.prototype.setupOutlineItem = function () {\n\treturn this;\n};\n\n/**\n * Set the page to its 'active' state.\n *\n * Pages become active when they are shown in a booklet layout that is configured to display only one page at a time. Additional\n * CSS is applied to the outline item to reflect the page's active state. Outside of the booklet\n * context, setting the active state on a page does nothing.\n *\n * @param {boolean} active Page is active\n * @fires active\n */\nOO.ui.PageLayout.prototype.setActive = function ( active ) {\n\tactive = !!active;\n\n\tif ( active !== this.active ) {\n\t\tthis.active = active;\n\t\tthis.$element.toggleClass( 'oo-ui-pageLayout-active', active );\n\t\tthis.emit( 'active', this.active );\n\t}\n};\n","/**\n * StackLayouts contain a series of {@link OO.ui.PanelLayout panel layouts}. By default, only one panel is displayed\n * at a time, though the stack layout can also be configured to show all contained panels, one after another,\n * by setting the #continuous option to 'true'.\n *\n *     @example\n *     // A stack layout with two panels, configured to be displayed continuously\n *     var myStack = new OO.ui.StackLayout( {\n *         items: [\n *             new OO.ui.PanelLayout( {\n *                 $content: $( '<p>Panel One</p>' ),\n *                 padded: true,\n *                 framed: true\n *             } ),\n *             new OO.ui.PanelLayout( {\n *                 $content: $( '<p>Panel Two</p>' ),\n *                 padded: true,\n *                 framed: true\n *             } )\n *         ],\n *         continuous: true\n *     } );\n *     $( 'body' ).append( myStack.$element );\n *\n * @class\n * @extends OO.ui.PanelLayout\n * @mixins OO.ui.mixin.GroupElement\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {boolean} [continuous=false] Show all panels, one after another. By default, only one panel is displayed at a time.\n * @cfg {OO.ui.Layout[]} [items] Panel layouts to add to the stack layout.\n */\nOO.ui.StackLayout = function OoUiStackLayout( config ) {\n\t// Configuration initialization\n\tconfig = $.extend( { scrollable: true }, config );\n\n\t// Parent constructor\n\tOO.ui.StackLayout.parent.call( this, config );\n\n\t// Mixin constructors\n\tOO.ui.mixin.GroupElement.call( this, $.extend( {}, config, { $group: this.$element } ) );\n\n\t// Properties\n\tthis.currentItem = null;\n\tthis.continuous = !!config.continuous;\n\n\t// Initialization\n\tthis.$element.addClass( 'oo-ui-stackLayout' );\n\tif ( this.continuous ) {\n\t\tthis.$element.addClass( 'oo-ui-stackLayout-continuous' );\n\t\tthis.$element.on( 'scroll', OO.ui.debounce( this.onScroll.bind( this ), 250 ) );\n\t}\n\tif ( Array.isArray( config.items ) ) {\n\t\tthis.addItems( config.items );\n\t}\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.StackLayout, OO.ui.PanelLayout );\nOO.mixinClass( OO.ui.StackLayout, OO.ui.mixin.GroupElement );\n\n/* Events */\n\n/**\n * A 'set' event is emitted when panels are {@link #addItems added}, {@link #removeItems removed},\n * {@link #clearItems cleared} or {@link #setItem displayed}.\n *\n * @event set\n * @param {OO.ui.Layout|null} item Current panel or `null` if no panel is shown\n */\n\n/**\n * When used in continuous mode, this event is emitted when the user scrolls down\n * far enough such that currentItem is no longer visible.\n *\n * @event visibleItemChange\n * @param {OO.ui.PanelLayout} panel The next visible item in the layout\n */\n\n/* Methods */\n\n/**\n * Handle scroll events from the layout element\n *\n * @param {jQuery.Event} e\n * @fires visibleItemChange\n */\nOO.ui.StackLayout.prototype.onScroll = function () {\n\tvar currentRect,\n\t\tlen = this.items.length,\n\t\tcurrentIndex = this.items.indexOf( this.currentItem ),\n\t\tnewIndex = currentIndex,\n\t\tcontainerRect = this.$element[ 0 ].getBoundingClientRect();\n\n\tif ( !containerRect || ( !containerRect.top && !containerRect.bottom ) ) {\n\t\t// Can't get bounding rect, possibly not attached.\n\t\treturn;\n\t}\n\n\tfunction getRect( item ) {\n\t\treturn item.$element[ 0 ].getBoundingClientRect();\n\t}\n\n\tfunction isVisible( item ) {\n\t\tvar rect = getRect( item );\n\t\treturn rect.bottom > containerRect.top && rect.top < containerRect.bottom;\n\t}\n\n\tcurrentRect = getRect( this.currentItem );\n\n\tif ( currentRect.bottom < containerRect.top ) {\n\t\t// Scrolled down past current item\n\t\twhile ( ++newIndex < len ) {\n\t\t\tif ( isVisible( this.items[ newIndex ] ) ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t} else if ( currentRect.top > containerRect.bottom ) {\n\t\t// Scrolled up past current item\n\t\twhile ( --newIndex >= 0 ) {\n\t\t\tif ( isVisible( this.items[ newIndex ] ) ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( newIndex !== currentIndex ) {\n\t\tthis.emit( 'visibleItemChange', this.items[ newIndex ] );\n\t}\n};\n\n/**\n * Get the current panel.\n *\n * @return {OO.ui.Layout|null}\n */\nOO.ui.StackLayout.prototype.getCurrentItem = function () {\n\treturn this.currentItem;\n};\n\n/**\n * Unset the current item.\n *\n * @private\n * @param {OO.ui.StackLayout} layout\n * @fires set\n */\nOO.ui.StackLayout.prototype.unsetCurrentItem = function () {\n\tvar prevItem = this.currentItem;\n\tif ( prevItem === null ) {\n\t\treturn;\n\t}\n\n\tthis.currentItem = null;\n\tthis.emit( 'set', null );\n};\n\n/**\n * Add panel layouts to the stack layout.\n *\n * Panels will be added to the end of the stack layout array unless the optional index parameter specifies a different\n * insertion point. Adding a panel that is already in the stack will move it to the end of the array or the point specified\n * by the index.\n *\n * @param {OO.ui.Layout[]} items Panels to add\n * @param {number} [index] Index of the insertion point\n * @chainable\n * @return {OO.ui.StackLayout} The layout, for chaining\n */\nOO.ui.StackLayout.prototype.addItems = function ( items, index ) {\n\t// Update the visibility\n\tthis.updateHiddenState( items, this.currentItem );\n\n\t// Mixin method\n\tOO.ui.mixin.GroupElement.prototype.addItems.call( this, items, index );\n\n\tif ( !this.currentItem && items.length ) {\n\t\tthis.setItem( items[ 0 ] );\n\t}\n\n\treturn this;\n};\n\n/**\n * Remove the specified panels from the stack layout.\n *\n * Removed panels are detached from the DOM, not removed, so that they may be reused. To remove all panels,\n * you may wish to use the #clearItems method instead.\n *\n * @param {OO.ui.Layout[]} items Panels to remove\n * @chainable\n * @return {OO.ui.StackLayout} The layout, for chaining\n * @fires set\n */\nOO.ui.StackLayout.prototype.removeItems = function ( items ) {\n\t// Mixin method\n\tOO.ui.mixin.GroupElement.prototype.removeItems.call( this, items );\n\n\tif ( items.indexOf( this.currentItem ) !== -1 ) {\n\t\tif ( this.items.length ) {\n\t\t\tthis.setItem( this.items[ 0 ] );\n\t\t} else {\n\t\t\tthis.unsetCurrentItem();\n\t\t}\n\t}\n\n\treturn this;\n};\n\n/**\n * Clear all panels from the stack layout.\n *\n * Cleared panels are detached from the DOM, not removed, so that they may be reused. To remove only\n * a subset of panels, use the #removeItems method.\n *\n * @chainable\n * @return {OO.ui.StackLayout} The layout, for chaining\n * @fires set\n */\nOO.ui.StackLayout.prototype.clearItems = function () {\n\tthis.unsetCurrentItem();\n\tOO.ui.mixin.GroupElement.prototype.clearItems.call( this );\n\n\treturn this;\n};\n\n/**\n * Show the specified panel.\n *\n * If another panel is currently displayed, it will be hidden.\n *\n * @param {OO.ui.Layout} item Panel to show\n * @chainable\n * @return {OO.ui.StackLayout} The layout, for chaining\n * @fires set\n */\nOO.ui.StackLayout.prototype.setItem = function ( item ) {\n\tif ( item !== this.currentItem ) {\n\t\tthis.updateHiddenState( this.items, item );\n\n\t\tif ( this.items.indexOf( item ) !== -1 ) {\n\t\t\tthis.currentItem = item;\n\t\t\tthis.emit( 'set', item );\n\t\t} else {\n\t\t\tthis.unsetCurrentItem();\n\t\t}\n\t}\n\n\treturn this;\n};\n\n/**\n * Reset the scroll offset of all panels, or the container if continuous\n *\n * @inheritdoc\n */\nOO.ui.StackLayout.prototype.resetScroll = function () {\n\tif ( this.continuous ) {\n\t\t// Parent method\n\t\treturn OO.ui.StackLayout.parent.prototype.resetScroll.call( this );\n\t}\n\t// Reset each panel\n\tthis.getItems().forEach( function ( panel ) {\n\t\tvar hidden = panel.$element.hasClass( 'oo-ui-element-hidden' );\n\t\t// Scroll can only be reset when panel is visible\n\t\tpanel.$element.removeClass( 'oo-ui-element-hidden' );\n\t\tpanel.resetScroll();\n\t\tif ( hidden ) {\n\t\t\tpanel.$element.addClass( 'oo-ui-element-hidden' );\n\t\t}\n\t} );\n\n\treturn this;\n};\n\n/**\n * Update the visibility of all items in case of non-continuous view.\n *\n * Ensure all items are hidden except for the selected one.\n * This method does nothing when the stack is continuous.\n *\n * @private\n * @param {OO.ui.Layout[]} items Item list iterate over\n * @param {OO.ui.Layout} [selectedItem] Selected item to show\n */\nOO.ui.StackLayout.prototype.updateHiddenState = function ( items, selectedItem ) {\n\tvar i, len;\n\n\tif ( !this.continuous ) {\n\t\tfor ( i = 0, len = items.length; i < len; i++ ) {\n\t\t\tif ( !selectedItem || selectedItem !== items[ i ] ) {\n\t\t\t\titems[ i ].$element.addClass( 'oo-ui-element-hidden' );\n\t\t\t\titems[ i ].$element.attr( 'aria-hidden', 'true' );\n\t\t\t}\n\t\t}\n\t\tif ( selectedItem ) {\n\t\t\tselectedItem.$element.removeClass( 'oo-ui-element-hidden' );\n\t\t\tselectedItem.$element.removeAttr( 'aria-hidden' );\n\t\t}\n\t}\n};\n","/**\n * MenuLayouts combine a menu and a content {@link OO.ui.PanelLayout panel}. The menu is positioned relative to the content (after, before, top, or bottom)\n * and its size is customized with the #menuSize config. The content area will fill all remaining space.\n *\n *     @example\n *     var menuLayout,\n *         menuPanel = new OO.ui.PanelLayout( { padded: true, expanded: true, scrollable: true } ),\n *         contentPanel = new OO.ui.PanelLayout( { padded: true, expanded: true, scrollable: true } ),\n *         select = new OO.ui.SelectWidget( {\n *             items: [\n *                 new OO.ui.OptionWidget( {\n *                     data: 'before',\n *                     label: 'Before'\n *                 } ),\n *                 new OO.ui.OptionWidget( {\n *                     data: 'after',\n *                     label: 'After'\n *                 } ),\n *                 new OO.ui.OptionWidget( {\n *                     data: 'top',\n *                     label: 'Top'\n *                 } ),\n *                 new OO.ui.OptionWidget( {\n *                     data: 'bottom',\n *                     label: 'Bottom'\n *                 } )\n *              ]\n *         } ).on( 'select', function ( item ) {\n *            menuLayout.setMenuPosition( item.getData() );\n *         } );\n *\n *     menuLayout = new OO.ui.MenuLayout( {\n *         position: 'top',\n *         menuPanel: menuPanel,\n *         contentPanel: contentPanel\n *     } )\n *     menuLayout.$menu.append(\n *         menuPanel.$element.append( '<b>Menu panel</b>', select.$element )\n *     );\n *     menuLayout.$content.append(\n *         contentPanel.$element.append( '<b>Content panel</b>', '<p>Note that the menu is positioned relative to the content panel: top, bottom, after, before.</p>')\n *     );\n *     $( 'body' ).append( menuLayout.$element );\n *\n * If menu size needs to be overridden, it can be accomplished using CSS similar to the snippet\n * below. MenuLayout's CSS will override the appropriate values with 'auto' or '0' to display the\n * menu correctly. If `menuPosition` is known beforehand, CSS rules corresponding to other positions\n * may be omitted.\n *\n *     .oo-ui-menuLayout-menu {\n *         width: 200px;\n *         height: 200px;\n *     }\n *\n *     .oo-ui-menuLayout-content {\n *         top: 200px;\n *         left: 200px;\n *         right: 200px;\n *         bottom: 200px;\n *     }\n *\n * @class\n * @extends OO.ui.Layout\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {OO.ui.PanelLayout} [menuPanel] Menu panel\n * @cfg {OO.ui.PanelLayout} [contentPanel] Content panel\n * @cfg {boolean} [expanded=true] Expand the layout to fill the entire parent element.\n * @cfg {boolean} [showMenu=true] Show menu\n * @cfg {string} [menuPosition='before'] Position of menu: `top`, `after`, `bottom` or `before`\n */\nOO.ui.MenuLayout = function OoUiMenuLayout( config ) {\n\t// Configuration initialization\n\tconfig = $.extend( {\n\t\texpanded: true,\n\t\tshowMenu: true,\n\t\tmenuPosition: 'before'\n\t}, config );\n\n\t// Parent constructor\n\tOO.ui.MenuLayout.parent.call( this, config );\n\n\tthis.menuPanel = null;\n\tthis.contentPanel = null;\n\tthis.expanded = !!config.expanded;\n\t/**\n\t * Menu DOM node\n\t *\n\t * @property {jQuery}\n\t */\n\tthis.$menu = $( '<div>' );\n\t/**\n\t * Content DOM node\n\t *\n\t * @property {jQuery}\n\t */\n\tthis.$content = $( '<div>' );\n\n\t// Initialization\n\tthis.$menu\n\t\t.addClass( 'oo-ui-menuLayout-menu' );\n\tthis.$content.addClass( 'oo-ui-menuLayout-content' );\n\tthis.$element\n\t\t.addClass( 'oo-ui-menuLayout' );\n\tif ( config.expanded ) {\n\t\tthis.$element.addClass( 'oo-ui-menuLayout-expanded' );\n\t} else {\n\t\tthis.$element.addClass( 'oo-ui-menuLayout-static' );\n\t}\n\tif ( config.menuPanel ) {\n\t\tthis.setMenuPanel( config.menuPanel );\n\t}\n\tif ( config.contentPanel ) {\n\t\tthis.setContentPanel( config.contentPanel );\n\t}\n\tthis.setMenuPosition( config.menuPosition );\n\tthis.toggleMenu( config.showMenu );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.MenuLayout, OO.ui.Layout );\n\n/* Methods */\n\n/**\n * Toggle menu.\n *\n * @param {boolean} showMenu Show menu, omit to toggle\n * @chainable\n * @return {OO.ui.MenuLayout} The layout, for chaining\n */\nOO.ui.MenuLayout.prototype.toggleMenu = function ( showMenu ) {\n\tshowMenu = showMenu === undefined ? !this.showMenu : !!showMenu;\n\n\tif ( this.showMenu !== showMenu ) {\n\t\tthis.showMenu = showMenu;\n\t\tthis.$element\n\t\t\t.toggleClass( 'oo-ui-menuLayout-showMenu', this.showMenu )\n\t\t\t.toggleClass( 'oo-ui-menuLayout-hideMenu', !this.showMenu );\n\t\tthis.$menu.attr( 'aria-hidden', this.showMenu ? 'false' : 'true' );\n\t}\n\n\treturn this;\n};\n\n/**\n * Check if menu is visible\n *\n * @return {boolean} Menu is visible\n */\nOO.ui.MenuLayout.prototype.isMenuVisible = function () {\n\treturn this.showMenu;\n};\n\n/**\n * Set menu position.\n *\n * @param {string} position Position of menu, either `top`, `after`, `bottom` or `before`\n * @throws {Error} If position value is not supported\n * @chainable\n * @return {OO.ui.MenuLayout} The layout, for chaining\n */\nOO.ui.MenuLayout.prototype.setMenuPosition = function ( position ) {\n\tthis.$element.removeClass( 'oo-ui-menuLayout-' + this.menuPosition );\n\tthis.menuPosition = position;\n\tif ( this.menuPosition === 'top' || this.menuPosition === 'before' ) {\n\t\tthis.$element.append( this.$menu, this.$content );\n\t} else {\n\t\tthis.$element.append( this.$content, this.$menu );\n\t}\n\tthis.$element.addClass( 'oo-ui-menuLayout-' + position );\n\n\treturn this;\n};\n\n/**\n * Get menu position.\n *\n * @return {string} Menu position\n */\nOO.ui.MenuLayout.prototype.getMenuPosition = function () {\n\treturn this.menuPosition;\n};\n\n/**\n * Set the menu panel.\n *\n * @param {OO.ui.PanelLayout} menuPanel Menu panel\n */\nOO.ui.MenuLayout.prototype.setMenuPanel = function ( menuPanel ) {\n\tthis.menuPanel = menuPanel;\n\tthis.$menu.append( this.menuPanel.$element );\n};\n\n/**\n * Set the content panel.\n *\n * @param {OO.ui.PanelLayout} contentPanel Content panel\n */\nOO.ui.MenuLayout.prototype.setContentPanel = function ( contentPanel ) {\n\tthis.contentPanel = contentPanel;\n\tthis.$content.append( this.contentPanel.$element );\n};\n\n/**\n * Clear the menu panel.\n */\nOO.ui.MenuLayout.prototype.clearMenuPanel = function () {\n\tthis.menuPanel = null;\n\tthis.$menu.empty();\n};\n\n/**\n * Clear the content panel.\n */\nOO.ui.MenuLayout.prototype.clearContentPanel = function () {\n\tthis.contentPanel = null;\n\tthis.$content.empty();\n};\n\n/**\n * Reset the scroll offset of all panels and the tab select widget\n *\n * @inheritdoc\n */\nOO.ui.MenuLayout.prototype.resetScroll = function () {\n\tif ( this.menuPanel ) {\n\t\tthis.menuPanel.resetScroll();\n\t}\n\tif ( this.contentPanel ) {\n\t\tthis.contentPanel.resetScroll();\n\t}\n\n\treturn this;\n};\n","/**\n * BookletLayouts contain {@link OO.ui.PageLayout page layouts} as well as\n * an {@link OO.ui.OutlineSelectWidget outline} that allows users to easily navigate\n * through the pages and select which one to display. By default, only one page is\n * displayed at a time and the outline is hidden. When a user navigates to a new page,\n * the booklet layout automatically focuses on the first focusable element, unless the\n * default setting is changed. Optionally, booklets can be configured to show\n * {@link OO.ui.OutlineControlsWidget controls} for adding, moving, and removing items.\n *\n *     @example\n *     // Example of a BookletLayout that contains two PageLayouts.\n *\n *     function PageOneLayout( name, config ) {\n *         PageOneLayout.parent.call( this, name, config );\n *         this.$element.append( '<p>First page</p><p>(This booklet has an outline, displayed on the left)</p>' );\n *     }\n *     OO.inheritClass( PageOneLayout, OO.ui.PageLayout );\n *     PageOneLayout.prototype.setupOutlineItem = function () {\n *         this.outlineItem.setLabel( 'Page One' );\n *     };\n *\n *     function PageTwoLayout( name, config ) {\n *         PageTwoLayout.parent.call( this, name, config );\n *         this.$element.append( '<p>Second page</p>' );\n *     }\n *     OO.inheritClass( PageTwoLayout, OO.ui.PageLayout );\n *     PageTwoLayout.prototype.setupOutlineItem = function () {\n *         this.outlineItem.setLabel( 'Page Two' );\n *     };\n *\n *     var page1 = new PageOneLayout( 'one' ),\n *         page2 = new PageTwoLayout( 'two' );\n *\n *     var booklet = new OO.ui.BookletLayout( {\n *         outlined: true\n *     } );\n *\n *     booklet.addPages( [ page1, page2 ] );\n *     $( 'body' ).append( booklet.$element );\n *\n * @class\n * @extends OO.ui.MenuLayout\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {boolean} [continuous=false] Show all pages, one after another\n * @cfg {boolean} [autoFocus=true] Focus on the first focusable element when a new page is displayed. Disabled on mobile.\n * @cfg {boolean} [outlined=false] Show the outline. The outline is used to navigate through the pages of the booklet.\n * @cfg {boolean} [editable=false] Show controls for adding, removing and reordering pages\n */\nOO.ui.BookletLayout = function OoUiBookletLayout( config ) {\n\t// Configuration initialization\n\tconfig = config || {};\n\n\t// Parent constructor\n\tOO.ui.BookletLayout.parent.call( this, config );\n\n\t// Properties\n\tthis.currentPageName = null;\n\tthis.pages = {};\n\tthis.ignoreFocus = false;\n\tthis.stackLayout = new OO.ui.StackLayout( {\n\t\tcontinuous: !!config.continuous,\n\t\texpanded: this.expanded\n\t} );\n\tthis.setContentPanel( this.stackLayout );\n\tthis.autoFocus = config.autoFocus === undefined || !!config.autoFocus;\n\tthis.outlineVisible = false;\n\tthis.outlined = !!config.outlined;\n\tif ( this.outlined ) {\n\t\tthis.editable = !!config.editable;\n\t\tthis.outlineControlsWidget = null;\n\t\tthis.outlineSelectWidget = new OO.ui.OutlineSelectWidget();\n\t\tthis.outlinePanel = new OO.ui.PanelLayout( {\n\t\t\texpanded: this.expanded,\n\t\t\tscrollable: true\n\t\t} );\n\t\tthis.setMenuPanel( this.outlinePanel );\n\t\tthis.outlineVisible = true;\n\t\tif ( this.editable ) {\n\t\t\tthis.outlineControlsWidget = new OO.ui.OutlineControlsWidget(\n\t\t\t\tthis.outlineSelectWidget\n\t\t\t);\n\t\t}\n\t}\n\tthis.toggleMenu( this.outlined );\n\n\t// Events\n\tthis.stackLayout.connect( this, { set: 'onStackLayoutSet' } );\n\tif ( this.outlined ) {\n\t\tthis.outlineSelectWidget.connect( this, { select: 'onOutlineSelectWidgetSelect' } );\n\t\tthis.scrolling = false;\n\t\tthis.stackLayout.connect( this, { visibleItemChange: 'onStackLayoutVisibleItemChange' } );\n\t}\n\tif ( this.autoFocus ) {\n\t\t// Event 'focus' does not bubble, but 'focusin' does\n\t\tthis.stackLayout.$element.on( 'focusin', this.onStackLayoutFocus.bind( this ) );\n\t}\n\n\t// Initialization\n\tthis.$element.addClass( 'oo-ui-bookletLayout' );\n\tthis.stackLayout.$element.addClass( 'oo-ui-bookletLayout-stackLayout' );\n\tif ( this.outlined ) {\n\t\tthis.outlinePanel.$element\n\t\t\t.addClass( 'oo-ui-bookletLayout-outlinePanel' )\n\t\t\t.append( this.outlineSelectWidget.$element );\n\t\tif ( this.editable ) {\n\t\t\tthis.outlinePanel.$element\n\t\t\t\t.addClass( 'oo-ui-bookletLayout-outlinePanel-editable' )\n\t\t\t\t.append( this.outlineControlsWidget.$element );\n\t\t}\n\t}\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.BookletLayout, OO.ui.MenuLayout );\n\n/* Events */\n\n/**\n * A 'set' event is emitted when a page is {@link #setPage set} to be displayed by the booklet layout.\n * @event set\n * @param {OO.ui.PageLayout} page Current page\n */\n\n/**\n * An 'add' event is emitted when pages are {@link #addPages added} to the booklet layout.\n *\n * @event add\n * @param {OO.ui.PageLayout[]} page Added pages\n * @param {number} index Index pages were added at\n */\n\n/**\n * A 'remove' event is emitted when pages are {@link #clearPages cleared} or\n * {@link #removePages removed} from the booklet.\n *\n * @event remove\n * @param {OO.ui.PageLayout[]} pages Removed pages\n */\n\n/* Methods */\n\n/**\n * Handle stack layout focus.\n *\n * @private\n * @param {jQuery.Event} e Focusin event\n */\nOO.ui.BookletLayout.prototype.onStackLayoutFocus = function ( e ) {\n\tvar name, $target;\n\n\t// Find the page that an element was focused within\n\t$target = $( e.target ).closest( '.oo-ui-pageLayout' );\n\tfor ( name in this.pages ) {\n\t\t// Check for page match, exclude current page to find only page changes\n\t\tif ( this.pages[ name ].$element[ 0 ] === $target[ 0 ] && name !== this.currentPageName ) {\n\t\t\tthis.setPage( name );\n\t\t\tbreak;\n\t\t}\n\t}\n};\n\n/**\n * Handle visibleItemChange events from the stackLayout\n *\n * The next visible page is set as the current page by selecting it\n * in the outline\n *\n * @param {OO.ui.PageLayout} page The next visible page in the layout\n */\nOO.ui.BookletLayout.prototype.onStackLayoutVisibleItemChange = function ( page ) {\n\t// Set a flag to so that the resulting call to #onStackLayoutSet doesn't\n\t// try and scroll the item into view again.\n\tthis.scrolling = true;\n\tthis.outlineSelectWidget.selectItemByData( page.getName() );\n\tthis.scrolling = false;\n};\n\n/**\n * Handle stack layout set events.\n *\n * @private\n * @param {OO.ui.PanelLayout|null} page The page panel that is now the current panel\n */\nOO.ui.BookletLayout.prototype.onStackLayoutSet = function ( page ) {\n\tvar promise, layout = this;\n\t// If everything is unselected, do nothing\n\tif ( !page ) {\n\t\treturn;\n\t}\n\t// For continuous BookletLayouts, scroll the selected page into view first\n\tif ( this.stackLayout.continuous && !this.scrolling ) {\n\t\tpromise = page.scrollElementIntoView();\n\t} else {\n\t\tpromise = $.Deferred().resolve();\n\t}\n\t// Focus the first element on the newly selected panel.\n\t// Don't focus if the page was set by scrolling.\n\tif ( this.autoFocus && !OO.ui.isMobile() && !this.scrolling ) {\n\t\tpromise.done( function () {\n\t\t\tlayout.focus();\n\t\t} );\n\t}\n};\n\n/**\n * Focus the first input in the current page.\n *\n * If no page is selected, the first selectable page will be selected.\n * If the focus is already in an element on the current page, nothing will happen.\n *\n * @param {number} [itemIndex] A specific item to focus on\n */\nOO.ui.BookletLayout.prototype.focus = function ( itemIndex ) {\n\tvar page,\n\t\titems = this.stackLayout.getItems();\n\n\tif ( itemIndex !== undefined && items[ itemIndex ] ) {\n\t\tpage = items[ itemIndex ];\n\t} else {\n\t\tpage = this.stackLayout.getCurrentItem();\n\t}\n\n\tif ( !page && this.outlined ) {\n\t\tthis.selectFirstSelectablePage();\n\t\tpage = this.stackLayout.getCurrentItem();\n\t}\n\tif ( !page ) {\n\t\treturn;\n\t}\n\t// Only change the focus if is not already in the current page\n\tif ( !OO.ui.contains( page.$element[ 0 ], this.getElementDocument().activeElement, true ) ) {\n\t\tpage.focus();\n\t}\n};\n\n/**\n * Find the first focusable input in the booklet layout and focus\n * on it.\n */\nOO.ui.BookletLayout.prototype.focusFirstFocusable = function () {\n\tOO.ui.findFocusable( this.stackLayout.$element ).focus();\n};\n\n/**\n * Handle outline widget select events.\n *\n * @private\n * @param {OO.ui.OptionWidget|null} item Selected item\n */\nOO.ui.BookletLayout.prototype.onOutlineSelectWidgetSelect = function ( item ) {\n\tif ( item ) {\n\t\tthis.setPage( item.getData() );\n\t}\n};\n\n/**\n * Check if booklet has an outline.\n *\n * @return {boolean} Booklet has an outline\n */\nOO.ui.BookletLayout.prototype.isOutlined = function () {\n\treturn this.outlined;\n};\n\n/**\n * Check if booklet has editing controls.\n *\n * @return {boolean} Booklet is editable\n */\nOO.ui.BookletLayout.prototype.isEditable = function () {\n\treturn this.editable;\n};\n\n/**\n * Check if booklet has a visible outline.\n *\n * @return {boolean} Outline is visible\n */\nOO.ui.BookletLayout.prototype.isOutlineVisible = function () {\n\treturn this.outlined && this.outlineVisible;\n};\n\n/**\n * Hide or show the outline.\n *\n * @param {boolean} [show] Show outline, omit to invert current state\n * @chainable\n * @return {OO.ui.BookletLayout} The layout, for chaining\n */\nOO.ui.BookletLayout.prototype.toggleOutline = function ( show ) {\n\tvar booklet = this;\n\n\tif ( this.outlined ) {\n\t\tshow = show === undefined ? !this.outlineVisible : !!show;\n\t\tthis.outlineVisible = show;\n\t\tthis.toggleMenu( show );\n\t\tif ( show && this.editable ) {\n\t\t\t// HACK: Kill dumb scrollbars when the sidebar stops animating, see T161798. Only necessary when\n\t\t\t// outline controls are present, delay matches transition on `.oo-ui-menuLayout-menu`.\n\t\t\tsetTimeout( function () {\n\t\t\t\tOO.ui.Element.static.reconsiderScrollbars( booklet.outlinePanel.$element[ 0 ] );\n\t\t\t}, 200 );\n\t\t}\n\t}\n\n\treturn this;\n};\n\n/**\n * Find the page closest to the specified page.\n *\n * @param {OO.ui.PageLayout} page Page to use as a reference point\n * @return {OO.ui.PageLayout|null} Page closest to the specified page\n */\nOO.ui.BookletLayout.prototype.findClosestPage = function ( page ) {\n\tvar next, prev, level,\n\t\tpages = this.stackLayout.getItems(),\n\t\tindex = pages.indexOf( page );\n\n\tif ( index !== -1 ) {\n\t\tnext = pages[ index + 1 ];\n\t\tprev = pages[ index - 1 ];\n\t\t// Prefer adjacent pages at the same level\n\t\tif ( this.outlined ) {\n\t\t\tlevel = this.outlineSelectWidget.findItemFromData( page.getName() ).getLevel();\n\t\t\tif (\n\t\t\t\tprev &&\n\t\t\t\tlevel === this.outlineSelectWidget.findItemFromData( prev.getName() ).getLevel()\n\t\t\t) {\n\t\t\t\treturn prev;\n\t\t\t}\n\t\t\tif (\n\t\t\t\tnext &&\n\t\t\t\tlevel === this.outlineSelectWidget.findItemFromData( next.getName() ).getLevel()\n\t\t\t) {\n\t\t\t\treturn next;\n\t\t\t}\n\t\t}\n\t}\n\treturn prev || next || null;\n};\n\n/**\n * Get the outline widget.\n *\n * If the booklet is not outlined, the method will return `null`.\n *\n * @return {OO.ui.OutlineSelectWidget|null} Outline widget, or null if the booklet is not outlined\n */\nOO.ui.BookletLayout.prototype.getOutline = function () {\n\treturn this.outlineSelectWidget;\n};\n\n/**\n * Get the outline controls widget.\n *\n * If the outline is not editable, the method will return `null`.\n *\n * @return {OO.ui.OutlineControlsWidget|null} The outline controls widget.\n */\nOO.ui.BookletLayout.prototype.getOutlineControls = function () {\n\treturn this.outlineControlsWidget;\n};\n\n/**\n * Get a page by its symbolic name.\n *\n * @param {string} name Symbolic name of page\n * @return {OO.ui.PageLayout|undefined} Page, if found\n */\nOO.ui.BookletLayout.prototype.getPage = function ( name ) {\n\treturn this.pages[ name ];\n};\n\n/**\n * Get the current page.\n *\n * @return {OO.ui.PageLayout|undefined} Current page, if found\n */\nOO.ui.BookletLayout.prototype.getCurrentPage = function () {\n\tvar name = this.getCurrentPageName();\n\treturn name ? this.getPage( name ) : undefined;\n};\n\n/**\n * Get the symbolic name of the current page.\n *\n * @return {string|null} Symbolic name of the current page\n */\nOO.ui.BookletLayout.prototype.getCurrentPageName = function () {\n\treturn this.currentPageName;\n};\n\n/**\n * Add pages to the booklet layout\n *\n * When pages are added with the same names as existing pages, the existing pages will be\n * automatically removed before the new pages are added.\n *\n * @param {OO.ui.PageLayout[]} pages Pages to add\n * @param {number} index Index of the insertion point\n * @fires add\n * @chainable\n * @return {OO.ui.BookletLayout} The layout, for chaining\n */\nOO.ui.BookletLayout.prototype.addPages = function ( pages, index ) {\n\tvar i, len, name, page, item, currentIndex,\n\t\tstackLayoutPages = this.stackLayout.getItems(),\n\t\tremove = [],\n\t\titems = [];\n\n\t// Remove pages with same names\n\tfor ( i = 0, len = pages.length; i < len; i++ ) {\n\t\tpage = pages[ i ];\n\t\tname = page.getName();\n\n\t\tif ( Object.prototype.hasOwnProperty.call( this.pages, name ) ) {\n\t\t\t// Correct the insertion index\n\t\t\tcurrentIndex = stackLayoutPages.indexOf( this.pages[ name ] );\n\t\t\tif ( currentIndex !== -1 && currentIndex + 1 < index ) {\n\t\t\t\tindex--;\n\t\t\t}\n\t\t\tremove.push( this.pages[ name ] );\n\t\t}\n\t}\n\tif ( remove.length ) {\n\t\tthis.removePages( remove );\n\t}\n\n\t// Add new pages\n\tfor ( i = 0, len = pages.length; i < len; i++ ) {\n\t\tpage = pages[ i ];\n\t\tname = page.getName();\n\t\tthis.pages[ page.getName() ] = page;\n\t\tif ( this.outlined ) {\n\t\t\titem = new OO.ui.OutlineOptionWidget( { data: name } );\n\t\t\tpage.setOutlineItem( item );\n\t\t\titems.push( item );\n\t\t}\n\t}\n\n\tif ( this.outlined && items.length ) {\n\t\tthis.outlineSelectWidget.addItems( items, index );\n\t\tthis.selectFirstSelectablePage();\n\t}\n\tthis.stackLayout.addItems( pages, index );\n\tthis.emit( 'add', pages, index );\n\n\treturn this;\n};\n\n/**\n * Remove the specified pages from the booklet layout.\n *\n * To remove all pages from the booklet, you may wish to use the #clearPages method instead.\n *\n * @param {OO.ui.PageLayout[]} pages An array of pages to remove\n * @fires remove\n * @chainable\n * @return {OO.ui.BookletLayout} The layout, for chaining\n */\nOO.ui.BookletLayout.prototype.removePages = function ( pages ) {\n\tvar i, len, name, page,\n\t\titems = [];\n\n\tfor ( i = 0, len = pages.length; i < len; i++ ) {\n\t\tpage = pages[ i ];\n\t\tname = page.getName();\n\t\tdelete this.pages[ name ];\n\t\tif ( this.outlined ) {\n\t\t\titems.push( this.outlineSelectWidget.findItemFromData( name ) );\n\t\t\tpage.setOutlineItem( null );\n\t\t}\n\t}\n\tif ( this.outlined && items.length ) {\n\t\tthis.outlineSelectWidget.removeItems( items );\n\t\tthis.selectFirstSelectablePage();\n\t}\n\tthis.stackLayout.removeItems( pages );\n\tthis.emit( 'remove', pages );\n\n\treturn this;\n};\n\n/**\n * Clear all pages from the booklet layout.\n *\n * To remove only a subset of pages from the booklet, use the #removePages method.\n *\n * @fires remove\n * @chainable\n * @return {OO.ui.BookletLayout} The layout, for chaining\n */\nOO.ui.BookletLayout.prototype.clearPages = function () {\n\tvar i, len,\n\t\tpages = this.stackLayout.getItems();\n\n\tthis.pages = {};\n\tthis.currentPageName = null;\n\tif ( this.outlined ) {\n\t\tthis.outlineSelectWidget.clearItems();\n\t\tfor ( i = 0, len = pages.length; i < len; i++ ) {\n\t\t\tpages[ i ].setOutlineItem( null );\n\t\t}\n\t}\n\tthis.stackLayout.clearItems();\n\n\tthis.emit( 'remove', pages );\n\n\treturn this;\n};\n\n/**\n * Set the current page by symbolic name.\n *\n * @fires set\n * @param {string} name Symbolic name of page\n */\nOO.ui.BookletLayout.prototype.setPage = function ( name ) {\n\tvar selectedItem,\n\t\t$focused,\n\t\tpage = this.pages[ name ],\n\t\tpreviousPage = this.currentPageName && this.pages[ this.currentPageName ];\n\n\tif ( name !== this.currentPageName ) {\n\t\tif ( this.outlined ) {\n\t\t\tselectedItem = this.outlineSelectWidget.findSelectedItem();\n\t\t\tif ( selectedItem && selectedItem.getData() !== name ) {\n\t\t\t\tthis.outlineSelectWidget.selectItemByData( name );\n\t\t\t}\n\t\t}\n\t\tif ( page ) {\n\t\t\tif ( previousPage ) {\n\t\t\t\tpreviousPage.setActive( false );\n\t\t\t\t// Blur anything focused if the next page doesn't have anything focusable.\n\t\t\t\t// This is not needed if the next page has something focusable (because once it is focused\n\t\t\t\t// this blur happens automatically). If the layout is non-continuous, this check is\n\t\t\t\t// meaningless because the next page is not visible yet and thus can't hold focus.\n\t\t\t\tif (\n\t\t\t\t\tthis.autoFocus &&\n\t\t\t\t\t!OO.ui.isMobile() &&\n\t\t\t\t\tthis.stackLayout.continuous &&\n\t\t\t\t\tOO.ui.findFocusable( page.$element ).length !== 0\n\t\t\t\t) {\n\t\t\t\t\t$focused = previousPage.$element.find( ':focus' );\n\t\t\t\t\tif ( $focused.length ) {\n\t\t\t\t\t\t$focused[ 0 ].blur();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.currentPageName = name;\n\t\t\tpage.setActive( true );\n\t\t\tthis.stackLayout.setItem( page );\n\t\t\tif ( !this.stackLayout.continuous && previousPage ) {\n\t\t\t\t// This should not be necessary, since any inputs on the previous page should have been\n\t\t\t\t// blurred when it was hidden, but browsers are not very consistent about this.\n\t\t\t\t$focused = previousPage.$element.find( ':focus' );\n\t\t\t\tif ( $focused.length ) {\n\t\t\t\t\t$focused[ 0 ].blur();\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.emit( 'set', page );\n\t\t}\n\t}\n};\n\n/**\n * For outlined-continuous booklets, also reset the outlineSelectWidget to the first item.\n *\n * @inheritdoc\n */\nOO.ui.BookletLayout.prototype.resetScroll = function () {\n\t// Parent method\n\tOO.ui.BookletLayout.parent.prototype.resetScroll.call( this );\n\n\tif ( this.outlined && this.stackLayout.continuous && this.outlineSelectWidget.findFirstSelectableItem() ) {\n\t\tthis.scrolling = true;\n\t\tthis.outlineSelectWidget.selectItem( this.outlineSelectWidget.findFirstSelectableItem() );\n\t\tthis.scrolling = false;\n\t}\n\treturn this;\n};\n\n/**\n * Select the first selectable page.\n *\n * @chainable\n * @return {OO.ui.BookletLayout} The layout, for chaining\n */\nOO.ui.BookletLayout.prototype.selectFirstSelectablePage = function () {\n\tif ( !this.outlineSelectWidget.findSelectedItem() ) {\n\t\tthis.outlineSelectWidget.selectItem( this.outlineSelectWidget.findFirstSelectableItem() );\n\t}\n\n\treturn this;\n};\n","/**\n * IndexLayouts contain {@link OO.ui.TabPanelLayout tab panel layouts} as well as\n * {@link OO.ui.TabSelectWidget tabs} that allow users to easily navigate through the tab panels and\n * select which one to display. By default, only one tab panel is displayed at a time. When a user\n * navigates to a new tab panel, the index layout automatically focuses on the first focusable element,\n * unless the default setting is changed.\n *\n * TODO: This class is similar to BookletLayout, we may want to refactor to reduce duplication\n *\n *     @example\n *     // Example of a IndexLayout that contains two TabPanelLayouts.\n *\n *     function TabPanelOneLayout( name, config ) {\n *         TabPanelOneLayout.parent.call( this, name, config );\n *         this.$element.append( '<p>First tab panel</p>' );\n *     }\n *     OO.inheritClass( TabPanelOneLayout, OO.ui.TabPanelLayout );\n *     TabPanelOneLayout.prototype.setupTabItem = function () {\n *         this.tabItem.setLabel( 'Tab panel one' );\n *     };\n *\n *     var tabPanel1 = new TabPanelOneLayout( 'one' ),\n *         tabPanel2 = new OO.ui.TabPanelLayout( 'two', { label: 'Tab panel two' } );\n *\n *     tabPanel2.$element.append( '<p>Second tab panel</p>' );\n *\n *     var index = new OO.ui.IndexLayout();\n *\n *     index.addTabPanels( [ tabPanel1, tabPanel2 ] );\n *     $( 'body' ).append( index.$element );\n *\n * @class\n * @extends OO.ui.MenuLayout\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {boolean} [continuous=false] Show all tab panels, one after another\n * @cfg {boolean} [autoFocus=true] Focus on the first focusable element when a new tab panel is displayed. Disabled on mobile.\n */\nOO.ui.IndexLayout = function OoUiIndexLayout( config ) {\n\t// Configuration initialization\n\tconfig = $.extend( {}, config, { menuPosition: 'top' } );\n\n\t// Parent constructor\n\tOO.ui.IndexLayout.parent.call( this, config );\n\n\t// Properties\n\tthis.currentTabPanelName = null;\n\tthis.tabPanels = {};\n\n\tthis.ignoreFocus = false;\n\tthis.stackLayout = new OO.ui.StackLayout( {\n\t\tcontinuous: !!config.continuous,\n\t\texpanded: this.expanded\n\t} );\n\tthis.setContentPanel( this.stackLayout );\n\tthis.autoFocus = config.autoFocus === undefined || !!config.autoFocus;\n\n\tthis.tabSelectWidget = new OO.ui.TabSelectWidget();\n\tthis.tabPanel = new OO.ui.PanelLayout( {\n\t\texpanded: this.expanded\n\t} );\n\tthis.setMenuPanel( this.tabPanel );\n\n\tthis.toggleMenu( true );\n\n\t// Events\n\tthis.stackLayout.connect( this, { set: 'onStackLayoutSet' } );\n\tthis.tabSelectWidget.connect( this, { select: 'onTabSelectWidgetSelect' } );\n\tif ( this.autoFocus ) {\n\t\t// Event 'focus' does not bubble, but 'focusin' does\n\t\tthis.stackLayout.$element.on( 'focusin', this.onStackLayoutFocus.bind( this ) );\n\t}\n\n\t// Initialization\n\tthis.$element.addClass( 'oo-ui-indexLayout' );\n\tthis.stackLayout.$element.addClass( 'oo-ui-indexLayout-stackLayout' );\n\tthis.tabPanel.$element\n\t\t.addClass( 'oo-ui-indexLayout-tabPanel' )\n\t\t.append( this.tabSelectWidget.$element );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.IndexLayout, OO.ui.MenuLayout );\n\n/* Events */\n\n/**\n * A 'set' event is emitted when a tab panel is {@link #setTabPanel set} to be displayed by the index layout.\n * @event set\n * @param {OO.ui.TabPanelLayout} tabPanel Current tab panel\n */\n\n/**\n * An 'add' event is emitted when tab panels are {@link #addTabPanels added} to the index layout.\n *\n * @event add\n * @param {OO.ui.TabPanelLayout[]} tabPanel Added tab panels\n * @param {number} index Index tab panels were added at\n */\n\n/**\n * A 'remove' event is emitted when tab panels are {@link #clearTabPanels cleared} or\n * {@link #removeTabPanels removed} from the index.\n *\n * @event remove\n * @param {OO.ui.TabPanelLayout[]} tabPanel Removed tab panels\n */\n\n/* Methods */\n\n/**\n * Handle stack layout focus.\n *\n * @private\n * @param {jQuery.Event} e Focusing event\n */\nOO.ui.IndexLayout.prototype.onStackLayoutFocus = function ( e ) {\n\tvar name, $target;\n\n\t// Find the tab panel that an element was focused within\n\t$target = $( e.target ).closest( '.oo-ui-tabPanelLayout' );\n\tfor ( name in this.tabPanels ) {\n\t\t// Check for tab panel match, exclude current tab panel to find only tab panel changes\n\t\tif ( this.tabPanels[ name ].$element[ 0 ] === $target[ 0 ] && name !== this.currentTabPanelName ) {\n\t\t\tthis.setTabPanel( name );\n\t\t\tbreak;\n\t\t}\n\t}\n};\n\n/**\n * Handle stack layout set events.\n *\n * @private\n * @param {OO.ui.PanelLayout|null} tabPanel The tab panel that is now the current panel\n */\nOO.ui.IndexLayout.prototype.onStackLayoutSet = function ( tabPanel ) {\n\t// If everything is unselected, do nothing\n\tif ( !tabPanel ) {\n\t\treturn;\n\t}\n\t// Focus the first element on the newly selected panel\n\tif ( this.autoFocus && !OO.ui.isMobile() ) {\n\t\tthis.focus();\n\t}\n};\n\n/**\n * Focus the first input in the current tab panel.\n *\n * If no tab panel is selected, the first selectable tab panel will be selected.\n * If the focus is already in an element on the current tab panel, nothing will happen.\n *\n * @param {number} [itemIndex] A specific item to focus on\n */\nOO.ui.IndexLayout.prototype.focus = function ( itemIndex ) {\n\tvar tabPanel,\n\t\titems = this.stackLayout.getItems();\n\n\tif ( itemIndex !== undefined && items[ itemIndex ] ) {\n\t\ttabPanel = items[ itemIndex ];\n\t} else {\n\t\ttabPanel = this.stackLayout.getCurrentItem();\n\t}\n\n\tif ( !tabPanel ) {\n\t\tthis.selectFirstSelectableTabPanel();\n\t\ttabPanel = this.stackLayout.getCurrentItem();\n\t}\n\tif ( !tabPanel ) {\n\t\treturn;\n\t}\n\t// Only change the focus if is not already in the current page\n\tif ( !OO.ui.contains( tabPanel.$element[ 0 ], this.getElementDocument().activeElement, true ) ) {\n\t\ttabPanel.focus();\n\t}\n};\n\n/**\n * Find the first focusable input in the index layout and focus\n * on it.\n */\nOO.ui.IndexLayout.prototype.focusFirstFocusable = function () {\n\tOO.ui.findFocusable( this.stackLayout.$element ).focus();\n};\n\n/**\n * Handle tab widget select events.\n *\n * @private\n * @param {OO.ui.OptionWidget|null} item Selected item\n */\nOO.ui.IndexLayout.prototype.onTabSelectWidgetSelect = function ( item ) {\n\tif ( item ) {\n\t\tthis.setTabPanel( item.getData() );\n\t}\n};\n\n/**\n * Get the tab panel closest to the specified tab panel.\n *\n * @param {OO.ui.TabPanelLayout} tabPanel Tab panel to use as a reference point\n * @return {OO.ui.TabPanelLayout|null} Tab panel closest to the specified\n */\nOO.ui.IndexLayout.prototype.getClosestTabPanel = function ( tabPanel ) {\n\tvar next, prev, level,\n\t\ttabPanels = this.stackLayout.getItems(),\n\t\tindex = tabPanels.indexOf( tabPanel );\n\n\tif ( index !== -1 ) {\n\t\tnext = tabPanels[ index + 1 ];\n\t\tprev = tabPanels[ index - 1 ];\n\t\t// Prefer adjacent tab panels at the same level\n\t\tlevel = this.tabSelectWidget.findItemFromData( tabPanel.getName() ).getLevel();\n\t\tif (\n\t\t\tprev &&\n\t\t\tlevel === this.tabSelectWidget.findItemFromData( prev.getName() ).getLevel()\n\t\t) {\n\t\t\treturn prev;\n\t\t}\n\t\tif (\n\t\t\tnext &&\n\t\t\tlevel === this.tabSelectWidget.findItemFromData( next.getName() ).getLevel()\n\t\t) {\n\t\t\treturn next;\n\t\t}\n\t}\n\treturn prev || next || null;\n};\n\n/**\n * Get the tabs widget.\n *\n * @return {OO.ui.TabSelectWidget} Tabs widget\n */\nOO.ui.IndexLayout.prototype.getTabs = function () {\n\treturn this.tabSelectWidget;\n};\n\n/**\n * Get a tab panel by its symbolic name.\n *\n * @param {string} name Symbolic name of tab panel\n * @return {OO.ui.TabPanelLayout|undefined} Tab panel, if found\n */\nOO.ui.IndexLayout.prototype.getTabPanel = function ( name ) {\n\treturn this.tabPanels[ name ];\n};\n\n/**\n * Get the current tab panel.\n *\n * @return {OO.ui.TabPanelLayout|undefined} Current tab panel, if found\n */\nOO.ui.IndexLayout.prototype.getCurrentTabPanel = function () {\n\tvar name = this.getCurrentTabPanelName();\n\treturn name ? this.getTabPanel( name ) : undefined;\n};\n\n/**\n * Get the symbolic name of the current tab panel.\n *\n * @return {string|null} Symbolic name of the current tab panel\n */\nOO.ui.IndexLayout.prototype.getCurrentTabPanelName = function () {\n\treturn this.currentTabPanelName;\n};\n\n/**\n * Add tab panels to the index layout\n *\n * When tab panels are added with the same names as existing tab panels, the existing tab panels\n * will be automatically removed before the new tab panels are added.\n *\n * @param {OO.ui.TabPanelLayout[]} tabPanels Tab panels to add\n * @param {number} index Index of the insertion point\n * @fires add\n * @chainable\n * @return {OO.ui.BookletLayout} The layout, for chaining\n */\nOO.ui.IndexLayout.prototype.addTabPanels = function ( tabPanels, index ) {\n\tvar i, len, name, tabPanel, item, currentIndex,\n\t\tstackLayoutTabPanels = this.stackLayout.getItems(),\n\t\tremove = [],\n\t\titems = [];\n\n\t// Remove tab panels with same names\n\tfor ( i = 0, len = tabPanels.length; i < len; i++ ) {\n\t\ttabPanel = tabPanels[ i ];\n\t\tname = tabPanel.getName();\n\n\t\tif ( Object.prototype.hasOwnProperty.call( this.tabPanels, name ) ) {\n\t\t\t// Correct the insertion index\n\t\t\tcurrentIndex = stackLayoutTabPanels.indexOf( this.tabPanels[ name ] );\n\t\t\tif ( currentIndex !== -1 && currentIndex + 1 < index ) {\n\t\t\t\tindex--;\n\t\t\t}\n\t\t\tremove.push( this.tabPanels[ name ] );\n\t\t}\n\t}\n\tif ( remove.length ) {\n\t\tthis.removeTabPanels( remove );\n\t}\n\n\t// Add new tab panels\n\tfor ( i = 0, len = tabPanels.length; i < len; i++ ) {\n\t\ttabPanel = tabPanels[ i ];\n\t\tname = tabPanel.getName();\n\t\tthis.tabPanels[ tabPanel.getName() ] = tabPanel;\n\t\titem = new OO.ui.TabOptionWidget( { data: name } );\n\t\ttabPanel.setTabItem( item );\n\t\titems.push( item );\n\t}\n\n\tif ( items.length ) {\n\t\tthis.tabSelectWidget.addItems( items, index );\n\t\tthis.selectFirstSelectableTabPanel();\n\t}\n\tthis.stackLayout.addItems( tabPanels, index );\n\tthis.emit( 'add', tabPanels, index );\n\n\treturn this;\n};\n\n/**\n * Remove the specified tab panels from the index layout.\n *\n * To remove all tab panels from the index, you may wish to use the #clearTabPanels method instead.\n *\n * @param {OO.ui.TabPanelLayout[]} tabPanels An array of tab panels to remove\n * @fires remove\n * @chainable\n * @return {OO.ui.BookletLayout} The layout, for chaining\n */\nOO.ui.IndexLayout.prototype.removeTabPanels = function ( tabPanels ) {\n\tvar i, len, name, tabPanel,\n\t\titems = [];\n\n\tfor ( i = 0, len = tabPanels.length; i < len; i++ ) {\n\t\ttabPanel = tabPanels[ i ];\n\t\tname = tabPanel.getName();\n\t\tdelete this.tabPanels[ name ];\n\t\titems.push( this.tabSelectWidget.findItemFromData( name ) );\n\t\ttabPanel.setTabItem( null );\n\t}\n\tif ( items.length ) {\n\t\tthis.tabSelectWidget.removeItems( items );\n\t\tthis.selectFirstSelectableTabPanel();\n\t}\n\tthis.stackLayout.removeItems( tabPanels );\n\tthis.emit( 'remove', tabPanels );\n\n\treturn this;\n};\n\n/**\n * Clear all tab panels from the index layout.\n *\n * To remove only a subset of tab panels from the index, use the #removeTabPanels method.\n *\n * @fires remove\n * @chainable\n * @return {OO.ui.BookletLayout} The layout, for chaining\n */\nOO.ui.IndexLayout.prototype.clearTabPanels = function () {\n\tvar i, len,\n\t\ttabPanels = this.stackLayout.getItems();\n\n\tthis.tabPanels = {};\n\tthis.currentTabPanelName = null;\n\tthis.tabSelectWidget.clearItems();\n\tfor ( i = 0, len = tabPanels.length; i < len; i++ ) {\n\t\ttabPanels[ i ].setTabItem( null );\n\t}\n\tthis.stackLayout.clearItems();\n\n\tthis.emit( 'remove', tabPanels );\n\n\treturn this;\n};\n\n/**\n * Set the current tab panel by symbolic name.\n *\n * @fires set\n * @param {string} name Symbolic name of tab panel\n */\nOO.ui.IndexLayout.prototype.setTabPanel = function ( name ) {\n\tvar selectedItem,\n\t\t$focused,\n\t\tpreviousTabPanel,\n\t\ttabPanel = this.tabPanels[ name ];\n\n\tif ( name !== this.currentTabPanelName ) {\n\t\tpreviousTabPanel = this.getCurrentTabPanel();\n\t\tselectedItem = this.tabSelectWidget.findSelectedItem();\n\t\tif ( selectedItem && selectedItem.getData() !== name ) {\n\t\t\tthis.tabSelectWidget.selectItemByData( name );\n\t\t}\n\t\tif ( tabPanel ) {\n\t\t\tif ( previousTabPanel ) {\n\t\t\t\tpreviousTabPanel.setActive( false );\n\t\t\t\t// Blur anything focused if the next tab panel doesn't have anything focusable.\n\t\t\t\t// This is not needed if the next tab panel has something focusable (because once it is focused\n\t\t\t\t// this blur happens automatically). If the layout is non-continuous, this check is\n\t\t\t\t// meaningless because the next tab panel is not visible yet and thus can't hold focus.\n\t\t\t\tif (\n\t\t\t\t\tthis.autoFocus &&\n\t\t\t\t\t!OO.ui.isMobile() &&\n\t\t\t\t\tthis.stackLayout.continuous &&\n\t\t\t\t\tOO.ui.findFocusable( tabPanel.$element ).length !== 0\n\t\t\t\t) {\n\t\t\t\t\t$focused = previousTabPanel.$element.find( ':focus' );\n\t\t\t\t\tif ( $focused.length ) {\n\t\t\t\t\t\t$focused[ 0 ].blur();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.currentTabPanelName = name;\n\t\t\ttabPanel.setActive( true );\n\t\t\tthis.stackLayout.setItem( tabPanel );\n\t\t\tif ( !this.stackLayout.continuous && previousTabPanel ) {\n\t\t\t\t// This should not be necessary, since any inputs on the previous tab panel should have been\n\t\t\t\t// blurred when it was hidden, but browsers are not very consistent about this.\n\t\t\t\t$focused = previousTabPanel.$element.find( ':focus' );\n\t\t\t\tif ( $focused.length ) {\n\t\t\t\t\t$focused[ 0 ].blur();\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.emit( 'set', tabPanel );\n\t\t}\n\t}\n};\n\n/**\n * Select the first selectable tab panel.\n *\n * @chainable\n * @return {OO.ui.BookletLayout} The layout, for chaining\n */\nOO.ui.IndexLayout.prototype.selectFirstSelectableTabPanel = function () {\n\tif ( !this.tabSelectWidget.findSelectedItem() ) {\n\t\tthis.tabSelectWidget.selectItem( this.tabSelectWidget.findFirstSelectableItem() );\n\t}\n\n\treturn this;\n};\n","/**\n * ToggleWidget implements basic behavior of widgets with an on/off state.\n * Please see OO.ui.ToggleButtonWidget and OO.ui.ToggleSwitchWidget for examples.\n *\n * @abstract\n * @class\n * @extends OO.ui.Widget\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {boolean} [value=false] The toggle’s initial on/off state.\n *  By default, the toggle is in the 'off' state.\n */\nOO.ui.ToggleWidget = function OoUiToggleWidget( config ) {\n\t// Configuration initialization\n\tconfig = config || {};\n\n\t// Parent constructor\n\tOO.ui.ToggleWidget.parent.call( this, config );\n\n\t// Properties\n\tthis.value = null;\n\n\t// Initialization\n\tthis.$element.addClass( 'oo-ui-toggleWidget' );\n\tthis.setValue( !!config.value );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.ToggleWidget, OO.ui.Widget );\n\n/* Events */\n\n/**\n * @event change\n *\n * A change event is emitted when the on/off state of the toggle changes.\n *\n * @param {boolean} value Value representing the new state of the toggle\n */\n\n/* Methods */\n\n/**\n * Get the value representing the toggle’s state.\n *\n * @return {boolean} The on/off state of the toggle\n */\nOO.ui.ToggleWidget.prototype.getValue = function () {\n\treturn this.value;\n};\n\n/**\n * Set the state of the toggle: `true` for 'on', `false` for 'off'.\n *\n * @param {boolean} value The state of the toggle\n * @fires change\n * @chainable\n * @return {OO.ui.Widget} The widget, for chaining\n */\nOO.ui.ToggleWidget.prototype.setValue = function ( value ) {\n\tvalue = !!value;\n\tif ( this.value !== value ) {\n\t\tthis.value = value;\n\t\tthis.emit( 'change', value );\n\t\tthis.$element.toggleClass( 'oo-ui-toggleWidget-on', value );\n\t\tthis.$element.toggleClass( 'oo-ui-toggleWidget-off', !value );\n\t}\n\treturn this;\n};\n","/**\n * ToggleButtons are buttons that have a state (‘on’ or ‘off’) that is represented by a\n * Boolean value. Like other {@link OO.ui.ButtonWidget buttons}, toggle buttons can be\n * configured with {@link OO.ui.mixin.IconElement icons}, {@link OO.ui.mixin.IndicatorElement indicators},\n * {@link OO.ui.mixin.TitledElement titles}, {@link OO.ui.mixin.FlaggedElement styling flags},\n * and {@link OO.ui.mixin.LabelElement labels}. Please see\n * the [OOUI documentation][1] on MediaWiki for more information.\n *\n *     @example\n *     // Toggle buttons in the 'off' and 'on' state.\n *     var toggleButton1 = new OO.ui.ToggleButtonWidget( {\n *         label: 'Toggle Button off'\n *     } );\n *     var toggleButton2 = new OO.ui.ToggleButtonWidget( {\n *         label: 'Toggle Button on',\n *         value: true\n *     } );\n *     // Append the buttons to the DOM.\n *     $( 'body' ).append( toggleButton1.$element, toggleButton2.$element );\n *\n * [1]: https://www.mediawiki.org/wiki/OOUI/Widgets/Buttons_and_Switches#Toggle_buttons\n *\n * @class\n * @extends OO.ui.ToggleWidget\n * @mixins OO.ui.mixin.ButtonElement\n * @mixins OO.ui.mixin.IconElement\n * @mixins OO.ui.mixin.IndicatorElement\n * @mixins OO.ui.mixin.LabelElement\n * @mixins OO.ui.mixin.TitledElement\n * @mixins OO.ui.mixin.FlaggedElement\n * @mixins OO.ui.mixin.TabIndexedElement\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {boolean} [value=false] The toggle button’s initial on/off\n *  state. By default, the button is in the 'off' state.\n */\nOO.ui.ToggleButtonWidget = function OoUiToggleButtonWidget( config ) {\n\t// Configuration initialization\n\tconfig = config || {};\n\n\t// Parent constructor\n\tOO.ui.ToggleButtonWidget.parent.call( this, config );\n\n\t// Mixin constructors\n\tOO.ui.mixin.ButtonElement.call( this, $.extend( {}, config, { active: this.active } ) );\n\tOO.ui.mixin.IconElement.call( this, config );\n\tOO.ui.mixin.IndicatorElement.call( this, config );\n\tOO.ui.mixin.LabelElement.call( this, config );\n\tOO.ui.mixin.TitledElement.call( this, $.extend( {}, config, { $titled: this.$button } ) );\n\tOO.ui.mixin.FlaggedElement.call( this, config );\n\tOO.ui.mixin.TabIndexedElement.call( this, $.extend( {}, config, { $tabIndexed: this.$button } ) );\n\n\t// Events\n\tthis.connect( this, { click: 'onAction' } );\n\n\t// Initialization\n\tthis.$button.append( this.$icon, this.$label, this.$indicator );\n\tthis.$element\n\t\t.addClass( 'oo-ui-toggleButtonWidget' )\n\t\t.append( this.$button );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.ToggleButtonWidget, OO.ui.ToggleWidget );\nOO.mixinClass( OO.ui.ToggleButtonWidget, OO.ui.mixin.ButtonElement );\nOO.mixinClass( OO.ui.ToggleButtonWidget, OO.ui.mixin.IconElement );\nOO.mixinClass( OO.ui.ToggleButtonWidget, OO.ui.mixin.IndicatorElement );\nOO.mixinClass( OO.ui.ToggleButtonWidget, OO.ui.mixin.LabelElement );\nOO.mixinClass( OO.ui.ToggleButtonWidget, OO.ui.mixin.TitledElement );\nOO.mixinClass( OO.ui.ToggleButtonWidget, OO.ui.mixin.FlaggedElement );\nOO.mixinClass( OO.ui.ToggleButtonWidget, OO.ui.mixin.TabIndexedElement );\n\n/* Static Properties */\n\n/**\n * @static\n * @inheritdoc\n */\nOO.ui.ToggleButtonWidget.static.tagName = 'span';\n\n/* Methods */\n\n/**\n * Handle the button action being triggered.\n *\n * @private\n */\nOO.ui.ToggleButtonWidget.prototype.onAction = function () {\n\tthis.setValue( !this.value );\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.ToggleButtonWidget.prototype.setValue = function ( value ) {\n\tvalue = !!value;\n\tif ( value !== this.value ) {\n\t\t// Might be called from parent constructor before ButtonElement constructor\n\t\tif ( this.$button ) {\n\t\t\tthis.$button.attr( 'aria-pressed', value.toString() );\n\t\t}\n\t\tthis.setActive( value );\n\t}\n\n\t// Parent method\n\tOO.ui.ToggleButtonWidget.parent.prototype.setValue.call( this, value );\n\n\treturn this;\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.ToggleButtonWidget.prototype.setButtonElement = function ( $button ) {\n\tif ( this.$button ) {\n\t\tthis.$button.removeAttr( 'aria-pressed' );\n\t}\n\tOO.ui.mixin.ButtonElement.prototype.setButtonElement.call( this, $button );\n\tthis.$button.attr( 'aria-pressed', this.value.toString() );\n};\n","/**\n * ToggleSwitches are switches that slide on and off. Their state is represented by a Boolean\n * value (`true` for ‘on’, and `false` otherwise, the default). The ‘off’ state is represented\n * visually by a slider in the leftmost position.\n *\n *     @example\n *     // Toggle switches in the 'off' and 'on' position.\n *     var toggleSwitch1 = new OO.ui.ToggleSwitchWidget();\n *     var toggleSwitch2 = new OO.ui.ToggleSwitchWidget( {\n *         value: true\n *     } );\n *\n *     // Create a FieldsetLayout to layout and label switches\n *     var fieldset = new OO.ui.FieldsetLayout( {\n *        label: 'Toggle switches'\n *     } );\n *     fieldset.addItems( [\n *         new OO.ui.FieldLayout( toggleSwitch1, { label: 'Off', align: 'top' } ),\n *         new OO.ui.FieldLayout( toggleSwitch2, { label: 'On', align: 'top' } )\n *     ] );\n *     $( 'body' ).append( fieldset.$element );\n *\n * @class\n * @extends OO.ui.ToggleWidget\n * @mixins OO.ui.mixin.TabIndexedElement\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {boolean} [value=false] The toggle switch’s initial on/off state.\n *  By default, the toggle switch is in the 'off' position.\n */\nOO.ui.ToggleSwitchWidget = function OoUiToggleSwitchWidget( config ) {\n\t// Parent constructor\n\tOO.ui.ToggleSwitchWidget.parent.call( this, config );\n\n\t// Mixin constructors\n\tOO.ui.mixin.TabIndexedElement.call( this, config );\n\n\t// Properties\n\tthis.dragging = false;\n\tthis.dragStart = null;\n\tthis.sliding = false;\n\tthis.$glow = $( '<span>' );\n\tthis.$grip = $( '<span>' );\n\n\t// Events\n\tthis.$element.on( {\n\t\tclick: this.onClick.bind( this ),\n\t\tkeypress: this.onKeyPress.bind( this )\n\t} );\n\n\t// Initialization\n\tthis.$glow.addClass( 'oo-ui-toggleSwitchWidget-glow' );\n\tthis.$grip.addClass( 'oo-ui-toggleSwitchWidget-grip' );\n\tthis.$element\n\t\t.addClass( 'oo-ui-toggleSwitchWidget' )\n\t\t.attr( 'role', 'checkbox' )\n\t\t.append( this.$glow, this.$grip );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.ToggleSwitchWidget, OO.ui.ToggleWidget );\nOO.mixinClass( OO.ui.ToggleSwitchWidget, OO.ui.mixin.TabIndexedElement );\n\n/* Methods */\n\n/**\n * Handle mouse click events.\n *\n * @private\n * @param {jQuery.Event} e Mouse click event\n * @return {undefined/boolean} False to prevent default if event is handled\n */\nOO.ui.ToggleSwitchWidget.prototype.onClick = function ( e ) {\n\tif ( !this.isDisabled() && e.which === OO.ui.MouseButtons.LEFT ) {\n\t\tthis.setValue( !this.value );\n\t}\n\treturn false;\n};\n\n/**\n * Handle key press events.\n *\n * @private\n * @param {jQuery.Event} e Key press event\n * @return {undefined/boolean} False to prevent default if event is handled\n */\nOO.ui.ToggleSwitchWidget.prototype.onKeyPress = function ( e ) {\n\tif ( !this.isDisabled() && ( e.which === OO.ui.Keys.SPACE || e.which === OO.ui.Keys.ENTER ) ) {\n\t\tthis.setValue( !this.value );\n\t\treturn false;\n\t}\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.ToggleSwitchWidget.prototype.setValue = function ( value ) {\n\tOO.ui.ToggleSwitchWidget.parent.prototype.setValue.call( this, value );\n\tthis.$element.attr( 'aria-checked', this.value.toString() );\n\treturn this;\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.ToggleSwitchWidget.prototype.simulateLabelClick = function () {\n\tif ( !this.isDisabled() ) {\n\t\tthis.setValue( !this.value );\n\t}\n\tthis.focus();\n};\n","/**\n * OutlineControlsWidget is a set of controls for an {@link OO.ui.OutlineSelectWidget outline select widget}.\n * Controls include moving items up and down, removing items, and adding different kinds of items.\n *\n * **Currently, this class is only used by {@link OO.ui.BookletLayout booklet layouts}.**\n *\n * @class\n * @extends OO.ui.Widget\n * @mixins OO.ui.mixin.GroupElement\n *\n * @constructor\n * @param {OO.ui.OutlineSelectWidget} outline Outline to control\n * @param {Object} [config] Configuration options\n * @cfg {Object} [abilities] List of abilties\n * @cfg {boolean} [abilities.move=true] Allow moving movable items\n * @cfg {boolean} [abilities.remove=true] Allow removing removable items\n */\nOO.ui.OutlineControlsWidget = function OoUiOutlineControlsWidget( outline, config ) {\n\t// Allow passing positional parameters inside the config object\n\tif ( OO.isPlainObject( outline ) && config === undefined ) {\n\t\tconfig = outline;\n\t\toutline = config.outline;\n\t}\n\n\t// Configuration initialization\n\tconfig = config || {};\n\n\t// Parent constructor\n\tOO.ui.OutlineControlsWidget.parent.call( this, config );\n\n\t// Mixin constructors\n\tOO.ui.mixin.GroupElement.call( this, config );\n\n\t// Properties\n\tthis.outline = outline;\n\tthis.$movers = $( '<div>' );\n\tthis.upButton = new OO.ui.ButtonWidget( {\n\t\tframed: false,\n\t\ticon: 'collapse',\n\t\ttitle: OO.ui.msg( 'ooui-outline-control-move-up' )\n\t} );\n\tthis.downButton = new OO.ui.ButtonWidget( {\n\t\tframed: false,\n\t\ticon: 'expand',\n\t\ttitle: OO.ui.msg( 'ooui-outline-control-move-down' )\n\t} );\n\tthis.removeButton = new OO.ui.ButtonWidget( {\n\t\tframed: false,\n\t\ticon: 'trash',\n\t\ttitle: OO.ui.msg( 'ooui-outline-control-remove' )\n\t} );\n\tthis.abilities = { move: true, remove: true };\n\n\t// Events\n\toutline.connect( this, {\n\t\tselect: 'onOutlineChange',\n\t\tadd: 'onOutlineChange',\n\t\tremove: 'onOutlineChange'\n\t} );\n\tthis.upButton.connect( this, { click: [ 'emit', 'move', -1 ] } );\n\tthis.downButton.connect( this, { click: [ 'emit', 'move', 1 ] } );\n\tthis.removeButton.connect( this, { click: [ 'emit', 'remove' ] } );\n\n\t// Initialization\n\tthis.$element.addClass( 'oo-ui-outlineControlsWidget' );\n\tthis.$group.addClass( 'oo-ui-outlineControlsWidget-items' );\n\tthis.$movers\n\t\t.addClass( 'oo-ui-outlineControlsWidget-movers' )\n\t\t.append( this.removeButton.$element, this.upButton.$element, this.downButton.$element );\n\tthis.$element.append( this.$icon, this.$group, this.$movers );\n\tthis.setAbilities( config.abilities || {} );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.OutlineControlsWidget, OO.ui.Widget );\nOO.mixinClass( OO.ui.OutlineControlsWidget, OO.ui.mixin.GroupElement );\n\n/* Events */\n\n/**\n * @event move\n * @param {number} places Number of places to move\n */\n\n/**\n * @event remove\n */\n\n/* Methods */\n\n/**\n * Set abilities.\n *\n * @param {Object} abilities List of abilties\n * @param {boolean} [abilities.move] Allow moving movable items\n * @param {boolean} [abilities.remove] Allow removing removable items\n */\nOO.ui.OutlineControlsWidget.prototype.setAbilities = function ( abilities ) {\n\tvar ability;\n\n\tfor ( ability in this.abilities ) {\n\t\tif ( abilities[ ability ] !== undefined ) {\n\t\t\tthis.abilities[ ability ] = !!abilities[ ability ];\n\t\t}\n\t}\n\n\tthis.onOutlineChange();\n};\n\n/**\n * Handle outline change events.\n *\n * @private\n */\nOO.ui.OutlineControlsWidget.prototype.onOutlineChange = function () {\n\tvar i, len, firstMovable, lastMovable,\n\t\titems = this.outline.getItems(),\n\t\tselectedItem = this.outline.findSelectedItem(),\n\t\tmovable = this.abilities.move && selectedItem && selectedItem.isMovable(),\n\t\tremovable = this.abilities.remove && selectedItem && selectedItem.isRemovable();\n\n\tif ( movable ) {\n\t\ti = -1;\n\t\tlen = items.length;\n\t\twhile ( ++i < len ) {\n\t\t\tif ( items[ i ].isMovable() ) {\n\t\t\t\tfirstMovable = items[ i ];\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\ti = len;\n\t\twhile ( i-- ) {\n\t\t\tif ( items[ i ].isMovable() ) {\n\t\t\t\tlastMovable = items[ i ];\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\tthis.upButton.setDisabled( !movable || selectedItem === firstMovable );\n\tthis.downButton.setDisabled( !movable || selectedItem === lastMovable );\n\tthis.removeButton.setDisabled( !removable );\n};\n","/**\n * OutlineOptionWidget is an item in an {@link OO.ui.OutlineSelectWidget OutlineSelectWidget}.\n *\n * Currently, this class is only used by {@link OO.ui.BookletLayout booklet layouts}, which contain\n * {@link OO.ui.PageLayout page layouts}. See {@link OO.ui.BookletLayout BookletLayout}\n * for an example.\n *\n * @class\n * @extends OO.ui.DecoratedOptionWidget\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {number} [level] Indentation level\n * @cfg {boolean} [movable] Allow modification from {@link OO.ui.OutlineControlsWidget outline controls}.\n */\nOO.ui.OutlineOptionWidget = function OoUiOutlineOptionWidget( config ) {\n\t// Configuration initialization\n\tconfig = config || {};\n\n\t// Parent constructor\n\tOO.ui.OutlineOptionWidget.parent.call( this, config );\n\n\t// Properties\n\tthis.level = 0;\n\tthis.movable = !!config.movable;\n\tthis.removable = !!config.removable;\n\n\t// Initialization\n\tthis.$element.addClass( 'oo-ui-outlineOptionWidget' );\n\tthis.setLevel( config.level );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.OutlineOptionWidget, OO.ui.DecoratedOptionWidget );\n\n/* Static Properties */\n\n/**\n * @static\n * @inheritdoc\n */\nOO.ui.OutlineOptionWidget.static.highlightable = true;\n\n/**\n * @static\n * @inheritdoc\n */\nOO.ui.OutlineOptionWidget.static.scrollIntoViewOnSelect = true;\n\n/**\n * @static\n * @inheritable\n * @property {string}\n */\nOO.ui.OutlineOptionWidget.static.levelClass = 'oo-ui-outlineOptionWidget-level-';\n\n/**\n * @static\n * @inheritable\n * @property {number}\n */\nOO.ui.OutlineOptionWidget.static.levels = 3;\n\n/* Methods */\n\n/**\n * Check if item is movable.\n *\n * Movability is used by {@link OO.ui.OutlineControlsWidget outline controls}.\n *\n * @return {boolean} Item is movable\n */\nOO.ui.OutlineOptionWidget.prototype.isMovable = function () {\n\treturn this.movable;\n};\n\n/**\n * Check if item is removable.\n *\n * Removability is used by {@link OO.ui.OutlineControlsWidget outline controls}.\n *\n * @return {boolean} Item is removable\n */\nOO.ui.OutlineOptionWidget.prototype.isRemovable = function () {\n\treturn this.removable;\n};\n\n/**\n * Get indentation level.\n *\n * @return {number} Indentation level\n */\nOO.ui.OutlineOptionWidget.prototype.getLevel = function () {\n\treturn this.level;\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.OutlineOptionWidget.prototype.setPressed = function ( state ) {\n\tOO.ui.OutlineOptionWidget.parent.prototype.setPressed.call( this, state );\n\treturn this;\n};\n\n/**\n * Set movability.\n *\n * Movability is used by {@link OO.ui.OutlineControlsWidget outline controls}.\n *\n * @param {boolean} movable Item is movable\n * @chainable\n * @return {OO.ui.Widget} The widget, for chaining\n */\nOO.ui.OutlineOptionWidget.prototype.setMovable = function ( movable ) {\n\tthis.movable = !!movable;\n\tthis.updateThemeClasses();\n\treturn this;\n};\n\n/**\n * Set removability.\n *\n * Removability is used by {@link OO.ui.OutlineControlsWidget outline controls}.\n *\n * @param {boolean} removable Item is removable\n * @chainable\n * @return {OO.ui.Widget} The widget, for chaining\n */\nOO.ui.OutlineOptionWidget.prototype.setRemovable = function ( removable ) {\n\tthis.removable = !!removable;\n\tthis.updateThemeClasses();\n\treturn this;\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.OutlineOptionWidget.prototype.setSelected = function ( state ) {\n\tOO.ui.OutlineOptionWidget.parent.prototype.setSelected.call( this, state );\n\treturn this;\n};\n\n/**\n * Set indentation level.\n *\n * @param {number} [level=0] Indentation level, in the range of [0,#maxLevel]\n * @chainable\n * @return {OO.ui.Widget} The widget, for chaining\n */\nOO.ui.OutlineOptionWidget.prototype.setLevel = function ( level ) {\n\tvar levels = this.constructor.static.levels,\n\t\tlevelClass = this.constructor.static.levelClass,\n\t\ti = levels;\n\n\tthis.level = level ? Math.max( 0, Math.min( levels - 1, level ) ) : 0;\n\twhile ( i-- ) {\n\t\tif ( this.level === i ) {\n\t\t\tthis.$element.addClass( levelClass + i );\n\t\t} else {\n\t\t\tthis.$element.removeClass( levelClass + i );\n\t\t}\n\t}\n\tthis.updateThemeClasses();\n\n\treturn this;\n};\n","/**\n * OutlineSelectWidget is a structured list that contains {@link OO.ui.OutlineOptionWidget outline options}\n * A set of controls can be provided with an {@link OO.ui.OutlineControlsWidget outline controls} widget.\n *\n * **Currently, this class is only used by {@link OO.ui.BookletLayout booklet layouts}.**\n *\n * @class\n * @extends OO.ui.SelectWidget\n * @mixins OO.ui.mixin.TabIndexedElement\n *\n * @constructor\n * @param {Object} [config] Configuration options\n */\nOO.ui.OutlineSelectWidget = function OoUiOutlineSelectWidget( config ) {\n\t// Parent constructor\n\tOO.ui.OutlineSelectWidget.parent.call( this, config );\n\n\t// Mixin constructors\n\tOO.ui.mixin.TabIndexedElement.call( this, config );\n\n\t// Events\n\tthis.$element.on( {\n\t\tfocus: this.bindDocumentKeyDownListener.bind( this ),\n\t\tblur: this.unbindDocumentKeyDownListener.bind( this )\n\t} );\n\n\t// Initialization\n\tthis.$element.addClass( 'oo-ui-outlineSelectWidget' );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.OutlineSelectWidget, OO.ui.SelectWidget );\nOO.mixinClass( OO.ui.OutlineSelectWidget, OO.ui.mixin.TabIndexedElement );\n","/**\n * ButtonOptionWidget is a special type of {@link OO.ui.mixin.ButtonElement button element} that\n * can be selected and configured with data. The class is\n * used with OO.ui.ButtonSelectWidget to create a selection of button options. Please see the\n * [OOUI documentation on MediaWiki] [1] for more information.\n *\n * [1]: https://www.mediawiki.org/wiki/OOUI/Widgets/Selects_and_Options#Button_selects_and_options\n *\n * @class\n * @extends OO.ui.OptionWidget\n * @mixins OO.ui.mixin.ButtonElement\n * @mixins OO.ui.mixin.IconElement\n * @mixins OO.ui.mixin.IndicatorElement\n * @mixins OO.ui.mixin.TitledElement\n *\n * @constructor\n * @param {Object} [config] Configuration options\n */\nOO.ui.ButtonOptionWidget = function OoUiButtonOptionWidget( config ) {\n\t// Configuration initialization\n\tconfig = config || {};\n\n\t// Parent constructor\n\tOO.ui.ButtonOptionWidget.parent.call( this, config );\n\n\t// Mixin constructors\n\tOO.ui.mixin.ButtonElement.call( this, config );\n\tOO.ui.mixin.IconElement.call( this, config );\n\tOO.ui.mixin.IndicatorElement.call( this, config );\n\tOO.ui.mixin.TitledElement.call( this, $.extend( {}, config, { $titled: this.$button } ) );\n\n\t// Initialization\n\tthis.$element.addClass( 'oo-ui-buttonOptionWidget' );\n\tthis.$button.append( this.$icon, this.$label, this.$indicator );\n\tthis.$element.append( this.$button );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.ButtonOptionWidget, OO.ui.OptionWidget );\nOO.mixinClass( OO.ui.ButtonOptionWidget, OO.ui.mixin.ButtonElement );\nOO.mixinClass( OO.ui.ButtonOptionWidget, OO.ui.mixin.IconElement );\nOO.mixinClass( OO.ui.ButtonOptionWidget, OO.ui.mixin.IndicatorElement );\nOO.mixinClass( OO.ui.ButtonOptionWidget, OO.ui.mixin.TitledElement );\n\n/* Static Properties */\n\n/**\n * Allow button mouse down events to pass through so they can be handled by the parent select widget\n *\n * @static\n * @inheritdoc\n */\nOO.ui.ButtonOptionWidget.static.cancelButtonMouseDownEvents = false;\n\n/**\n * @static\n * @inheritdoc\n */\nOO.ui.ButtonOptionWidget.static.highlightable = false;\n\n/* Methods */\n\n/**\n * @inheritdoc\n */\nOO.ui.ButtonOptionWidget.prototype.setSelected = function ( state ) {\n\tOO.ui.ButtonOptionWidget.parent.prototype.setSelected.call( this, state );\n\n\tif ( this.constructor.static.selectable ) {\n\t\tthis.setActive( state );\n\t}\n\n\treturn this;\n};\n","/**\n * ButtonSelectWidget is a {@link OO.ui.SelectWidget select widget} that contains\n * button options and is used together with\n * OO.ui.ButtonOptionWidget. The ButtonSelectWidget provides an interface for\n * highlighting, choosing, and selecting mutually exclusive options. Please see\n * the [OOUI documentation on MediaWiki] [1] for more information.\n *\n *     @example\n *     // Example: A ButtonSelectWidget that contains three ButtonOptionWidgets\n *     var option1 = new OO.ui.ButtonOptionWidget( {\n *         data: 1,\n *         label: 'Option 1',\n *         title: 'Button option 1'\n *     } );\n *\n *     var option2 = new OO.ui.ButtonOptionWidget( {\n *         data: 2,\n *         label: 'Option 2',\n *         title: 'Button option 2'\n *     } );\n *\n *     var option3 = new OO.ui.ButtonOptionWidget( {\n *         data: 3,\n *         label: 'Option 3',\n *         title: 'Button option 3'\n *     } );\n *\n *     var buttonSelect=new OO.ui.ButtonSelectWidget( {\n *         items: [ option1, option2, option3 ]\n *     } );\n *     $( 'body' ).append( buttonSelect.$element );\n *\n * [1]: https://www.mediawiki.org/wiki/OOUI/Widgets/Selects_and_Options\n *\n * @class\n * @extends OO.ui.SelectWidget\n * @mixins OO.ui.mixin.TabIndexedElement\n *\n * @constructor\n * @param {Object} [config] Configuration options\n */\nOO.ui.ButtonSelectWidget = function OoUiButtonSelectWidget( config ) {\n\t// Parent constructor\n\tOO.ui.ButtonSelectWidget.parent.call( this, config );\n\n\t// Mixin constructors\n\tOO.ui.mixin.TabIndexedElement.call( this, config );\n\n\t// Events\n\tthis.$element.on( {\n\t\tfocus: this.bindDocumentKeyDownListener.bind( this ),\n\t\tblur: this.unbindDocumentKeyDownListener.bind( this )\n\t} );\n\n\t// Initialization\n\tthis.$element.addClass( 'oo-ui-buttonSelectWidget' );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.ButtonSelectWidget, OO.ui.SelectWidget );\nOO.mixinClass( OO.ui.ButtonSelectWidget, OO.ui.mixin.TabIndexedElement );\n","/**\n * TabOptionWidget is an item in a {@link OO.ui.TabSelectWidget TabSelectWidget}.\n *\n * Currently, this class is only used by {@link OO.ui.IndexLayout index layouts}, which contain\n * {@link OO.ui.TabPanelLayout tab panel layouts}. See {@link OO.ui.IndexLayout IndexLayout}\n * for an example.\n *\n * @class\n * @extends OO.ui.OptionWidget\n *\n * @constructor\n * @param {Object} [config] Configuration options\n */\nOO.ui.TabOptionWidget = function OoUiTabOptionWidget( config ) {\n\t// Configuration initialization\n\tconfig = config || {};\n\n\t// Parent constructor\n\tOO.ui.TabOptionWidget.parent.call( this, config );\n\n\t// Initialization\n\tthis.$element\n\t\t.addClass( 'oo-ui-tabOptionWidget' )\n\t\t.attr( 'role', 'tab' );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.TabOptionWidget, OO.ui.OptionWidget );\n\n/* Static Properties */\n\n/**\n * @static\n * @inheritdoc\n */\nOO.ui.TabOptionWidget.static.highlightable = false;\n","/**\n * TabSelectWidget is a list that contains {@link OO.ui.TabOptionWidget tab options}\n *\n * **Currently, this class is only used by {@link OO.ui.IndexLayout index layouts}.**\n *\n * @class\n * @extends OO.ui.SelectWidget\n * @mixins OO.ui.mixin.TabIndexedElement\n *\n * @constructor\n * @param {Object} [config] Configuration options\n */\nOO.ui.TabSelectWidget = function OoUiTabSelectWidget( config ) {\n\t// Parent constructor\n\tOO.ui.TabSelectWidget.parent.call( this, config );\n\n\t// Mixin constructors\n\tOO.ui.mixin.TabIndexedElement.call( this, config );\n\n\t// Events\n\tthis.$element.on( {\n\t\tfocus: this.bindDocumentKeyDownListener.bind( this ),\n\t\tblur: this.unbindDocumentKeyDownListener.bind( this )\n\t} );\n\n\t// Initialization\n\tthis.$element\n\t\t.addClass( 'oo-ui-tabSelectWidget' )\n\t\t.attr( 'role', 'tablist' );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.TabSelectWidget, OO.ui.SelectWidget );\nOO.mixinClass( OO.ui.TabSelectWidget, OO.ui.mixin.TabIndexedElement );\n","/**\n * TagItemWidgets are used within a {@link OO.ui.TagMultiselectWidget\n * TagMultiselectWidget} to display the selected items.\n *\n * @class\n * @extends OO.ui.Widget\n * @mixins OO.ui.mixin.ItemWidget\n * @mixins OO.ui.mixin.LabelElement\n * @mixins OO.ui.mixin.FlaggedElement\n * @mixins OO.ui.mixin.TabIndexedElement\n * @mixins OO.ui.mixin.DraggableElement\n *\n * @constructor\n * @param {Object} [config] Configuration object\n * @cfg {boolean} [valid=true] Item is valid\n * @cfg {boolean} [fixed] Item is fixed. This means the item is\n *  always included in the values and cannot be removed.\n */\nOO.ui.TagItemWidget = function OoUiTagItemWidget( config ) {\n\tconfig = config || {};\n\n\t// Parent constructor\n\tOO.ui.TagItemWidget.parent.call( this, config );\n\n\t// Mixin constructors\n\tOO.ui.mixin.ItemWidget.call( this );\n\tOO.ui.mixin.LabelElement.call( this, config );\n\tOO.ui.mixin.FlaggedElement.call( this, config );\n\tOO.ui.mixin.TabIndexedElement.call( this, config );\n\tOO.ui.mixin.DraggableElement.call( this, config );\n\n\tthis.valid = config.valid === undefined ? true : !!config.valid;\n\tthis.fixed = !!config.fixed;\n\n\tthis.closeButton = new OO.ui.ButtonWidget( {\n\t\tframed: false,\n\t\ticon: 'close',\n\t\ttabIndex: -1,\n\t\ttitle: OO.ui.msg( 'ooui-item-remove' )\n\t} );\n\tthis.closeButton.setDisabled( this.isDisabled() );\n\n\t// Events\n\tthis.closeButton\n\t\t.connect( this, { click: 'remove' } );\n\tthis.$element\n\t\t.on( 'click', this.select.bind( this ) )\n\t\t.on( 'keydown', this.onKeyDown.bind( this ) )\n\t\t// Prevent propagation of mousedown; the tag item \"lives\" in the\n\t\t// clickable area of the TagMultiselectWidget, which listens to\n\t\t// mousedown to open the menu or popup. We want to prevent that\n\t\t// for clicks specifically on the tag itself, so the actions taken\n\t\t// are more deliberate. When the tag is clicked, it will emit the\n\t\t// selection event (similar to how #OO.ui.MultioptionWidget emits 'change')\n\t\t// and can be handled separately.\n\t\t.on( 'mousedown', function ( e ) { e.stopPropagation(); } );\n\n\t// Initialization\n\tthis.$element\n\t\t.addClass( 'oo-ui-tagItemWidget' )\n\t\t.append( this.$label, this.closeButton.$element );\n};\n\n/* Initialization */\n\nOO.inheritClass( OO.ui.TagItemWidget, OO.ui.Widget );\nOO.mixinClass( OO.ui.TagItemWidget, OO.ui.mixin.ItemWidget );\nOO.mixinClass( OO.ui.TagItemWidget, OO.ui.mixin.LabelElement );\nOO.mixinClass( OO.ui.TagItemWidget, OO.ui.mixin.FlaggedElement );\nOO.mixinClass( OO.ui.TagItemWidget, OO.ui.mixin.TabIndexedElement );\nOO.mixinClass( OO.ui.TagItemWidget, OO.ui.mixin.DraggableElement );\n\n/* Events */\n\n/**\n * @event remove\n *\n * A remove action was performed on the item\n */\n\n/**\n * @event navigate\n * @param {string} direction Direction of the movement, forward or backwards\n *\n * A navigate action was performed on the item\n */\n\n/**\n * @event select\n *\n * The tag widget was selected. This can occur when the widget\n * is either clicked or enter was pressed on it.\n */\n\n/**\n * @event valid\n * @param {boolean} isValid Item is valid\n *\n * Item validity has changed\n */\n\n/**\n * @event fixed\n * @param {boolean} isFixed Item is fixed\n *\n * Item fixed state has changed\n */\n\n/* Methods */\n\n/**\n * Set this item as fixed, meaning it cannot be removed\n *\n * @param {string} [state] Item is fixed\n * @fires fixed\n * @return {OO.ui.Widget} The widget, for chaining\n */\nOO.ui.TagItemWidget.prototype.setFixed = function ( state ) {\n\tstate = state === undefined ? !this.fixed : !!state;\n\n\tif ( this.fixed !== state ) {\n\t\tthis.fixed = state;\n\t\tif ( this.closeButton ) {\n\t\t\tthis.closeButton.toggle( !this.fixed );\n\t\t}\n\n\t\tif ( !this.fixed && this.elementGroup && !this.elementGroup.isDraggable() ) {\n\t\t\t// Only enable the state of the item if the\n\t\t\t// entire group is draggable\n\t\t\tthis.toggleDraggable( !this.fixed );\n\t\t}\n\t\tthis.$element.toggleClass( 'oo-ui-tagItemWidget-fixed', this.fixed );\n\n\t\tthis.emit( 'fixed', this.isFixed() );\n\t}\n\treturn this;\n};\n\n/**\n * Check whether the item is fixed\n * @return {boolean}\n */\nOO.ui.TagItemWidget.prototype.isFixed = function () {\n\treturn this.fixed;\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.TagItemWidget.prototype.setDisabled = function ( state ) {\n\tif ( state && this.elementGroup && !this.elementGroup.isDisabled() ) {\n\t\tOO.ui.warnDeprecation( 'TagItemWidget#setDisabled: Disabling individual items is deprecated and will result in inconsistent behavior. Use #setFixed instead. See T193571.' );\n\t}\n\t// Parent method\n\tOO.ui.TagItemWidget.parent.prototype.setDisabled.call( this, state );\n\tif (\n\t\t!state &&\n\t\t// Verify we have a group, and that the widget is ready\n\t\tthis.toggleDraggable && this.elementGroup &&\n\t\t!this.isFixed() &&\n\t\t!this.elementGroup.isDraggable()\n\t) {\n\t\t// Only enable the draggable state of the item if the\n\t\t// entire group is draggable to begin with, and if the\n\t\t// item is not fixed\n\t\tthis.toggleDraggable( !state );\n\t}\n\n\tif ( this.closeButton ) {\n\t\tthis.closeButton.setDisabled( state );\n\t}\n\n\treturn this;\n};\n\n/**\n * Handle removal of the item\n *\n * This is mainly for extensibility concerns, so other children\n * of this class can change the behavior if they need to. This\n * is called by both clicking the 'remove' button but also\n * on keypress, which is harder to override if needed.\n *\n * @fires remove\n */\nOO.ui.TagItemWidget.prototype.remove = function () {\n\tif ( !this.isDisabled() && !this.isFixed() ) {\n\t\tthis.emit( 'remove' );\n\t}\n};\n\n/**\n * Handle a keydown event on the widget\n *\n * @fires navigate\n * @fires remove\n * @param {jQuery.Event} e Key down event\n * @return {boolean|undefined} false to stop the operation\n */\nOO.ui.TagItemWidget.prototype.onKeyDown = function ( e ) {\n\tvar movement;\n\n\tif ( !this.isDisabled() && !this.isFixed() && e.keyCode === OO.ui.Keys.BACKSPACE || e.keyCode === OO.ui.Keys.DELETE ) {\n\t\tthis.remove();\n\t\treturn false;\n\t} else if ( e.keyCode === OO.ui.Keys.ENTER ) {\n\t\tthis.select();\n\t\treturn false;\n\t} else if (\n\t\te.keyCode === OO.ui.Keys.LEFT ||\n\t\te.keyCode === OO.ui.Keys.RIGHT\n\t) {\n\t\tif ( OO.ui.Element.static.getDir( this.$element ) === 'rtl' ) {\n\t\t\tmovement = {\n\t\t\t\tleft: 'forwards',\n\t\t\t\tright: 'backwards'\n\t\t\t};\n\t\t} else {\n\t\t\tmovement = {\n\t\t\t\tleft: 'backwards',\n\t\t\t\tright: 'forwards'\n\t\t\t};\n\t\t}\n\n\t\tthis.emit(\n\t\t\t'navigate',\n\t\t\te.keyCode === OO.ui.Keys.LEFT ?\n\t\t\t\tmovement.left : movement.right\n\t\t);\n\t\treturn false;\n\t}\n};\n\n/**\n * Select this item\n *\n * @fires select\n */\nOO.ui.TagItemWidget.prototype.select = function () {\n\tif ( !this.isDisabled() ) {\n\t\tthis.emit( 'select' );\n\t}\n};\n\n/**\n * Set the valid state of this item\n *\n * @param {boolean} [valid] Item is valid\n * @fires valid\n */\nOO.ui.TagItemWidget.prototype.toggleValid = function ( valid ) {\n\tvalid = valid === undefined ? !this.valid : !!valid;\n\n\tif ( this.valid !== valid ) {\n\t\tthis.valid = valid;\n\n\t\tthis.setFlags( { invalid: !this.valid } );\n\n\t\tthis.emit( 'valid', this.valid );\n\t}\n};\n\n/**\n * Check whether the item is valid\n *\n * @return {boolean} Item is valid\n */\nOO.ui.TagItemWidget.prototype.isValid = function () {\n\treturn this.valid;\n};\n","/**\n * A basic tag multiselect widget, similar in concept to {@link OO.ui.ComboBoxInputWidget combo box widget}\n * that allows the user to add multiple values that are displayed in a tag area.\n *\n * This widget is a base widget; see {@link OO.ui.MenuTagMultiselectWidget MenuTagMultiselectWidget} and\n * {@link OO.ui.PopupTagMultiselectWidget PopupTagMultiselectWidget} for the implementations that use\n * a menu and a popup respectively.\n *\n *     @example\n *     // Example: A basic TagMultiselectWidget.\n *     var widget = new OO.ui.TagMultiselectWidget( {\n *         inputPosition: 'outline',\n *         allowedValues: [ 'Option 1', 'Option 2', 'Option 3' ],\n *         selected: [ 'Option 1' ]\n *     } );\n *     $( 'body' ).append( widget.$element );\n *\n * @class\n * @extends OO.ui.Widget\n * @mixins OO.ui.mixin.GroupWidget\n * @mixins OO.ui.mixin.DraggableGroupElement\n * @mixins OO.ui.mixin.IndicatorElement\n * @mixins OO.ui.mixin.IconElement\n * @mixins OO.ui.mixin.TabIndexedElement\n * @mixins OO.ui.mixin.FlaggedElement\n *\n * @constructor\n * @param {Object} config Configuration object\n * @cfg {Object} [input] Configuration options for the input widget\n * @cfg {OO.ui.InputWidget} [inputWidget] An optional input widget. If given, it will\n *  replace the input widget used in the TagMultiselectWidget. If not given,\n *  TagMultiselectWidget creates its own.\n * @cfg {boolean} [inputPosition='inline'] Position of the input. Options are:\n * \t- inline: The input is invisible, but exists inside the tag list, so\n * \t\tthe user types into the tag groups to add tags.\n * \t- outline: The input is underneath the tag area.\n * \t- none: No input supplied\n * @cfg {boolean} [allowEditTags=true] Allow editing of the tags by clicking them\n * @cfg {boolean} [allowArbitrary=false] Allow data items to be added even if\n *  not present in the menu.\n * @cfg {Object[]} [allowedValues] An array representing the allowed items\n *  by their datas.\n * @cfg {boolean} [allowDuplicates=false] Allow duplicate items to be added\n * @cfg {boolean} [allowDisplayInvalidTags=false] Allow the display of\n *  invalid tags. These tags will display with an invalid state, and\n *  the widget as a whole will have an invalid state if any invalid tags\n *  are present.\n * @cfg {number} [tagLimit] An optional limit on the number of selected options.\n *  If 'tagLimit' is set and is reached, the input is disabled, not allowing any\n *  additions. If 'tagLimit' is unset or is 0, an unlimited number of items can be\n *  added.\n * @cfg {boolean} [allowReordering=true] Allow reordering of the items\n * @cfg {Object[]|String[]} [selected] A set of selected tags. If given,\n *  these will appear in the tag list on initialization, as long as they\n *  pass the validity tests.\n */\nOO.ui.TagMultiselectWidget = function OoUiTagMultiselectWidget( config ) {\n\tvar inputEvents,\n\t\trAF = window.requestAnimationFrame || setTimeout,\n\t\twidget = this,\n\t\t$tabFocus = $( '<span>' )\n\t\t\t.addClass( 'oo-ui-tagMultiselectWidget-focusTrap' );\n\n\tconfig = config || {};\n\n\t// Parent constructor\n\tOO.ui.TagMultiselectWidget.parent.call( this, config );\n\n\t// Mixin constructors\n\tOO.ui.mixin.GroupWidget.call( this, config );\n\tOO.ui.mixin.IndicatorElement.call( this, config );\n\tOO.ui.mixin.IconElement.call( this, config );\n\tOO.ui.mixin.TabIndexedElement.call( this, config );\n\tOO.ui.mixin.FlaggedElement.call( this, config );\n\tOO.ui.mixin.DraggableGroupElement.call( this, config );\n\n\tthis.toggleDraggable(\n\t\tconfig.allowReordering === undefined ?\n\t\t\ttrue : !!config.allowReordering\n\t);\n\n\tthis.inputPosition =\n\t\tthis.constructor.static.allowedInputPositions.indexOf( config.inputPosition ) > -1 ?\n\t\t\tconfig.inputPosition : 'inline';\n\tthis.allowEditTags = config.allowEditTags === undefined ? true : !!config.allowEditTags;\n\tthis.allowArbitrary = !!config.allowArbitrary;\n\tthis.allowDuplicates = !!config.allowDuplicates;\n\tthis.allowedValues = config.allowedValues || [];\n\tthis.allowDisplayInvalidTags = config.allowDisplayInvalidTags;\n\tthis.hasInput = this.inputPosition !== 'none';\n\tthis.tagLimit = config.tagLimit;\n\tthis.height = null;\n\tthis.valid = true;\n\n\tthis.$content = $( '<div>' )\n\t\t.addClass( 'oo-ui-tagMultiselectWidget-content' );\n\tthis.$handle = $( '<div>' )\n\t\t.addClass( 'oo-ui-tagMultiselectWidget-handle' )\n\t\t.append(\n\t\t\tthis.$indicator,\n\t\t\tthis.$icon,\n\t\t\tthis.$content\n\t\t\t\t.append(\n\t\t\t\t\tthis.$group\n\t\t\t\t\t\t.addClass( 'oo-ui-tagMultiselectWidget-group' )\n\t\t\t\t)\n\t\t);\n\n\t// Events\n\tthis.aggregate( {\n\t\tremove: 'itemRemove',\n\t\tnavigate: 'itemNavigate',\n\t\tselect: 'itemSelect',\n\t\tfixed: 'itemFixed'\n\t} );\n\tthis.connect( this, {\n\t\titemRemove: 'onTagRemove',\n\t\titemSelect: 'onTagSelect',\n\t\titemFixed: 'onTagFixed',\n\t\titemNavigate: 'onTagNavigate',\n\t\tchange: 'onChangeTags'\n\t} );\n\tthis.$handle.on( {\n\t\tmousedown: this.onMouseDown.bind( this )\n\t} );\n\n\t// Initialize\n\tthis.$element\n\t\t.addClass( 'oo-ui-tagMultiselectWidget' )\n\t\t.append( this.$handle );\n\n\tif ( this.hasInput ) {\n\t\tif ( config.inputWidget ) {\n\t\t\tthis.input = config.inputWidget;\n\t\t} else {\n\t\t\tthis.input = new OO.ui.TextInputWidget( $.extend( {\n\t\t\t\tplaceholder: config.placeholder,\n\t\t\t\tclasses: [ 'oo-ui-tagMultiselectWidget-input' ]\n\t\t\t}, config.input ) );\n\t\t}\n\t\tthis.input.setDisabled( this.isDisabled() );\n\n\t\tinputEvents = {\n\t\t\tfocus: this.onInputFocus.bind( this ),\n\t\t\tblur: this.onInputBlur.bind( this ),\n\t\t\t'propertychange change click mouseup keydown keyup input cut paste select focus':\n\t\t\t\tOO.ui.debounce( this.updateInputSize.bind( this ) ),\n\t\t\tkeydown: this.onInputKeyDown.bind( this ),\n\t\t\tkeypress: this.onInputKeyPress.bind( this )\n\t\t};\n\n\t\tthis.input.$input.on( inputEvents );\n\t\tthis.inputPlaceholder = this.input.$input.attr( 'placeholder' );\n\n\t\tif ( this.inputPosition === 'outline' ) {\n\t\t\t// Override max-height for the input widget\n\t\t\t// in the case the widget is outline so it can\n\t\t\t// stretch all the way if the widget is wide\n\t\t\tthis.input.$element.css( 'max-width', 'inherit' );\n\t\t\tthis.$element\n\t\t\t\t.addClass( 'oo-ui-tagMultiselectWidget-outlined' )\n\t\t\t\t.append( this.input.$element );\n\t\t} else {\n\t\t\tthis.$element.addClass( 'oo-ui-tagMultiselectWidget-inlined' );\n\t\t\t// HACK: When the widget is using 'inline' input, the\n\t\t\t// behavior needs to only use the $input itself\n\t\t\t// so we style and size it accordingly (otherwise\n\t\t\t// the styling and sizing can get very convoluted\n\t\t\t// when the wrapping divs and other elements)\n\t\t\t// We are taking advantage of still being able to\n\t\t\t// call the widget itself for operations like\n\t\t\t// .getValue() and setDisabled() and .focus() but\n\t\t\t// having only the $input attached to the DOM\n\t\t\tthis.$content.append( this.input.$input );\n\t\t}\n\t} else {\n\t\tthis.$content.append( $tabFocus );\n\t}\n\n\tthis.setTabIndexedElement(\n\t\tthis.hasInput ?\n\t\t\tthis.input.$input :\n\t\t\t$tabFocus\n\t);\n\n\tif ( config.selected ) {\n\t\tthis.setValue( config.selected );\n\t}\n\n\t// HACK: Input size needs to be calculated after everything\n\t// else is rendered\n\trAF( function () {\n\t\tif ( widget.hasInput ) {\n\t\t\twidget.updateInputSize();\n\t\t}\n\t} );\n};\n\n/* Initialization */\n\nOO.inheritClass( OO.ui.TagMultiselectWidget, OO.ui.Widget );\nOO.mixinClass( OO.ui.TagMultiselectWidget, OO.ui.mixin.GroupWidget );\nOO.mixinClass( OO.ui.TagMultiselectWidget, OO.ui.mixin.DraggableGroupElement );\nOO.mixinClass( OO.ui.TagMultiselectWidget, OO.ui.mixin.IndicatorElement );\nOO.mixinClass( OO.ui.TagMultiselectWidget, OO.ui.mixin.IconElement );\nOO.mixinClass( OO.ui.TagMultiselectWidget, OO.ui.mixin.TabIndexedElement );\nOO.mixinClass( OO.ui.TagMultiselectWidget, OO.ui.mixin.FlaggedElement );\n\n/* Static properties */\n\n/**\n * Allowed input positions.\n * - inline: The input is inside the tag list\n * - outline: The input is under the tag list\n * - none: There is no input\n *\n * @property {Array}\n */\nOO.ui.TagMultiselectWidget.static.allowedInputPositions = [ 'inline', 'outline', 'none' ];\n\n/* Methods */\n\n/**\n * Handle mouse down events.\n *\n * @private\n * @param {jQuery.Event} e Mouse down event\n * @return {boolean} False to prevent defaults\n */\nOO.ui.TagMultiselectWidget.prototype.onMouseDown = function ( e ) {\n\tif (\n\t\t!this.isDisabled() &&\n\t\t( !this.hasInput || e.target !== this.input.$input[ 0 ] ) &&\n\t\te.which === OO.ui.MouseButtons.LEFT\n\t) {\n\t\tthis.focus();\n\t\treturn false;\n\t}\n};\n\n/**\n * Handle key press events.\n *\n * @private\n * @param {jQuery.Event} e Key press event\n * @return {boolean} Whether to prevent defaults\n */\nOO.ui.TagMultiselectWidget.prototype.onInputKeyPress = function ( e ) {\n\tvar stopOrContinue,\n\t\twithMetaKey = e.metaKey || e.ctrlKey;\n\n\tif ( !this.isDisabled() ) {\n\t\tif ( e.which === OO.ui.Keys.ENTER ) {\n\t\t\tstopOrContinue = this.doInputEnter( e, withMetaKey );\n\t\t}\n\n\t\t// Make sure the input gets resized.\n\t\tsetTimeout( this.updateInputSize.bind( this ), 0 );\n\t\treturn stopOrContinue;\n\t}\n};\n\n/**\n * Handle key down events.\n *\n * @private\n * @param {jQuery.Event} e Key down event\n * @return {boolean}\n */\nOO.ui.TagMultiselectWidget.prototype.onInputKeyDown = function ( e ) {\n\tvar movement, direction,\n\t\twidget = this,\n\t\twithMetaKey = e.metaKey || e.ctrlKey,\n\t\tisMovementInsideInput = function ( direction ) {\n\t\t\tvar inputRange = widget.input.getRange(),\n\t\t\t\tinputValue = widget.hasInput && widget.input.getValue();\n\n\t\t\tif ( direction === 'forwards' && inputRange.to > inputValue.length - 1 ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tif ( direction === 'backwards' && inputRange.from <= 0 ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\treturn true;\n\t\t};\n\n\tif ( !this.isDisabled() ) {\n\t\t// 'keypress' event is not triggered for Backspace\n\t\tif ( e.keyCode === OO.ui.Keys.BACKSPACE ) {\n\t\t\treturn this.doInputBackspace( e, withMetaKey );\n\t\t} else if ( e.keyCode === OO.ui.Keys.ESCAPE ) {\n\t\t\treturn this.doInputEscape( e );\n\t\t} else if (\n\t\t\te.keyCode === OO.ui.Keys.LEFT ||\n\t\t\te.keyCode === OO.ui.Keys.RIGHT\n\t\t) {\n\t\t\tif ( OO.ui.Element.static.getDir( this.$element ) === 'rtl' ) {\n\t\t\t\tmovement = {\n\t\t\t\t\tleft: 'forwards',\n\t\t\t\t\tright: 'backwards'\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\tmovement = {\n\t\t\t\t\tleft: 'backwards',\n\t\t\t\t\tright: 'forwards'\n\t\t\t\t};\n\t\t\t}\n\t\t\tdirection = e.keyCode === OO.ui.Keys.LEFT ?\n\t\t\t\tmovement.left : movement.right;\n\n\t\t\tif ( !this.hasInput || !isMovementInsideInput( direction ) ) {\n\t\t\t\treturn this.doInputArrow( e, direction, withMetaKey );\n\t\t\t}\n\t\t}\n\t}\n};\n\n/**\n * Respond to input focus event\n */\nOO.ui.TagMultiselectWidget.prototype.onInputFocus = function () {\n\tthis.$element.addClass( 'oo-ui-tagMultiselectWidget-focus' );\n\t// Reset validity\n\tthis.toggleValid( true );\n};\n\n/**\n * Respond to input blur event\n */\nOO.ui.TagMultiselectWidget.prototype.onInputBlur = function () {\n\tthis.$element.removeClass( 'oo-ui-tagMultiselectWidget-focus' );\n\n\t// Set the widget as invalid if there's text in the input\n\tthis.addTagFromInput();\n\tthis.toggleValid( this.checkValidity() && ( !this.hasInput || !this.input.getValue() ) );\n};\n\n/**\n * Perform an action after the enter key on the input\n *\n * @param {jQuery.Event} e Event data\n * @param {boolean} [withMetaKey] Whether this key was pressed with\n * a meta key like 'ctrl'\n * @return {boolean} Whether to prevent defaults\n */\nOO.ui.TagMultiselectWidget.prototype.doInputEnter = function () {\n\tthis.addTagFromInput();\n\treturn false;\n};\n\n/**\n * Perform an action responding to the enter key on the input\n *\n * @param {jQuery.Event} e Event data\n * @param {boolean} [withMetaKey] Whether this key was pressed with\n * a meta key like 'ctrl'\n * @return {boolean} Whether to prevent defaults\n */\nOO.ui.TagMultiselectWidget.prototype.doInputBackspace = function ( e, withMetaKey ) {\n\tvar items, item;\n\n\tif (\n\t\tthis.inputPosition === 'inline' &&\n\t\tthis.input.getValue() === '' &&\n\t\t!this.isEmpty()\n\t) {\n\t\t// Delete the last item\n\t\titems = this.getItems();\n\t\titem = items[ items.length - 1 ];\n\n\t\tif ( !item.isDisabled() && !item.isFixed() ) {\n\t\t\tthis.removeItems( [ item ] );\n\t\t\t// If Ctrl/Cmd was pressed, delete item entirely.\n\t\t\t// Otherwise put it into the text field for editing.\n\t\t\tif ( !withMetaKey ) {\n\t\t\t\tthis.input.setValue( item.getData() );\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n};\n\n/**\n * Perform an action after the escape key on the input\n *\n * @param {jQuery.Event} e Event data\n */\nOO.ui.TagMultiselectWidget.prototype.doInputEscape = function () {\n\tthis.clearInput();\n};\n\n/**\n * Perform an action after the arrow key on the input, select the previous\n * item from the input.\n * See #getPreviousItem\n *\n * @param {jQuery.Event} e Event data\n * @param {string} direction Direction of the movement; forwards or backwards\n * @param {boolean} [withMetaKey] Whether this key was pressed with\n *  a meta key like 'ctrl'\n */\nOO.ui.TagMultiselectWidget.prototype.doInputArrow = function ( e, direction ) {\n\tif (\n\t\tthis.inputPosition === 'inline' &&\n\t\t!this.isEmpty() &&\n\t\tdirection === 'backwards'\n\t) {\n\t\t// Get previous item\n\t\tthis.getPreviousItem().focus();\n\t}\n};\n\n/**\n * Respond to item select event\n *\n * @param {OO.ui.TagItemWidget} item Selected item\n */\nOO.ui.TagMultiselectWidget.prototype.onTagSelect = function ( item ) {\n\tif ( this.hasInput && this.allowEditTags && !item.isFixed() ) {\n\t\tif ( this.input.getValue() ) {\n\t\t\tthis.addTagFromInput();\n\t\t}\n\t\t// 1. Get the label of the tag into the input\n\t\tthis.input.setValue( item.getData() );\n\t\t// 2. Remove the tag\n\t\tthis.removeItems( [ item ] );\n\t\t// 3. Focus the input\n\t\tthis.focus();\n\t}\n};\n\n/**\n * Respond to item fixed state change\n *\n * @param {OO.ui.TagItemWidget} item Selected item\n */\nOO.ui.TagMultiselectWidget.prototype.onTagFixed = function ( item ) {\n\tvar i,\n\t\titems = this.getItems();\n\n\t// Move item to the end of the static items\n\tfor ( i = 0; i < items.length; i++ ) {\n\t\tif ( items[ i ] !== item && !items[ i ].isFixed() ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\tthis.addItems( item, i );\n};\n/**\n * Respond to change event, where items were added, removed, or cleared.\n */\nOO.ui.TagMultiselectWidget.prototype.onChangeTags = function () {\n\tvar isUnderLimit = this.isUnderLimit();\n\n\t// Reset validity\n\tthis.toggleValid(\n\t\tthis.checkValidity() &&\n\t\t!( this.hasInput && this.input.getValue() )\n\t);\n\n\tif ( this.hasInput ) {\n\t\tthis.updateInputSize();\n\t\tif ( !isUnderLimit ) {\n\t\t\t// Clear the input\n\t\t\tthis.input.setValue( '' );\n\t\t}\n\t\tif ( this.inputPosition === 'outline' ) {\n\t\t\t// Show/clear the placeholder and enable/disable the input\n\t\t\t// based on whether we are/aren't under the specified limit\n\t\t\tthis.input.$input.attr( 'placeholder', isUnderLimit ? this.inputPlaceholder : '' );\n\t\t\tthis.input.setDisabled( !isUnderLimit );\n\t\t} else {\n\t\t\t// Show/hide the input\n\t\t\tthis.input.$input.toggleClass( 'oo-ui-element-hidden', !isUnderLimit );\n\t\t}\n\t}\n\tthis.updateIfHeightChanged();\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.TagMultiselectWidget.prototype.setDisabled = function ( isDisabled ) {\n\t// Parent method\n\tOO.ui.TagMultiselectWidget.parent.prototype.setDisabled.call( this, isDisabled );\n\n\tif ( this.hasInput && this.input ) {\n\t\tthis.input.setDisabled( !!isDisabled && !this.isUnderLimit() );\n\t}\n\n\tif ( this.items ) {\n\t\tthis.getItems().forEach( function ( item ) {\n\t\t\titem.setDisabled( !!isDisabled );\n\t\t} );\n\t}\n};\n\n/**\n * Respond to tag remove event\n * @param {OO.ui.TagItemWidget} item Removed tag\n */\nOO.ui.TagMultiselectWidget.prototype.onTagRemove = function ( item ) {\n\tthis.removeTagByData( item.getData() );\n};\n\n/**\n * Respond to navigate event on the tag\n *\n * @param {OO.ui.TagItemWidget} item Removed tag\n * @param {string} direction Direction of movement; 'forwards' or 'backwards'\n */\nOO.ui.TagMultiselectWidget.prototype.onTagNavigate = function ( item, direction ) {\n\tvar firstItem = this.getItems()[ 0 ];\n\n\tif ( direction === 'forwards' ) {\n\t\tthis.getNextItem( item ).focus();\n\t} else if ( !this.inputPosition === 'inline' || item !== firstItem ) {\n\t\t// If the widget has an inline input, we want to stop at the starting edge\n\t\t// of the tags\n\t\tthis.getPreviousItem( item ).focus();\n\t}\n};\n\n/**\n * Add tag from input value\n */\nOO.ui.TagMultiselectWidget.prototype.addTagFromInput = function () {\n\tvar val = this.input.getValue(),\n\t\tisValid = this.isAllowedData( val );\n\n\tif ( !val ) {\n\t\treturn;\n\t}\n\n\tif ( isValid || this.allowDisplayInvalidTags ) {\n\t\tthis.clearInput();\n\t\tthis.addTag( val );\n\t}\n};\n\n/**\n * Clear the input\n */\nOO.ui.TagMultiselectWidget.prototype.clearInput = function () {\n\tthis.input.setValue( '' );\n};\n\n/**\n * Check whether the given value is a duplicate of an existing\n * tag already in the list.\n *\n * @param {string|Object} data Requested value\n * @return {boolean} Value is duplicate\n */\nOO.ui.TagMultiselectWidget.prototype.isDuplicateData = function ( data ) {\n\treturn !!this.findItemFromData( data );\n};\n\n/**\n * Check whether a given value is allowed to be added\n *\n * @param {string|Object} data Requested value\n * @return {boolean} Value is allowed\n */\nOO.ui.TagMultiselectWidget.prototype.isAllowedData = function ( data ) {\n\tif (\n\t\t!this.allowDuplicates &&\n\t\tthis.isDuplicateData( data )\n\t) {\n\t\treturn false;\n\t}\n\n\tif ( this.allowArbitrary ) {\n\t\treturn true;\n\t}\n\n\t// Check with allowed values\n\tif (\n\t\tthis.getAllowedValues().some( function ( value ) {\n\t\t\treturn data === value;\n\t\t} )\n\t) {\n\t\treturn true;\n\t}\n\n\treturn false;\n};\n\n/**\n * Get the allowed values list\n *\n * @return {string[]} Allowed data values\n */\nOO.ui.TagMultiselectWidget.prototype.getAllowedValues = function () {\n\treturn this.allowedValues;\n};\n\n/**\n * Add a value to the allowed values list\n *\n * @param {string} value Allowed data value\n */\nOO.ui.TagMultiselectWidget.prototype.addAllowedValue = function ( value ) {\n\tif ( this.allowedValues.indexOf( value ) === -1 ) {\n\t\tthis.allowedValues.push( value );\n\t}\n};\n\n/**\n * Get the datas of the currently selected items\n *\n * @return {string[]|Object[]} Datas of currently selected items\n */\nOO.ui.TagMultiselectWidget.prototype.getValue = function () {\n\treturn this.getItems()\n\t\t.filter( function ( item ) {\n\t\t\treturn item.isValid();\n\t\t} )\n\t\t.map( function ( item ) {\n\t\t\treturn item.getData();\n\t\t} );\n};\n\n/**\n * Set the value of this widget by datas.\n *\n * @param {string|string[]|Object|Object[]} valueObject An object representing the data\n *  and label of the value. If the widget allows arbitrary values,\n *  the items will be added as-is. Otherwise, the data value will\n *  be checked against allowedValues.\n *  This object must contain at least a data key. Example:\n *  { data: 'foo', label: 'Foo item' }\n *  For multiple items, use an array of objects. For example:\n *   [\n *   \t{ data: 'foo', label: 'Foo item' },\n *    \t{ data: 'bar', label: 'Bar item' }\n * \t ]\n *  Value can also be added with plaintext array, for example:\n *  [ 'foo', 'bar', 'bla' ] or a single string, like 'foo'\n */\nOO.ui.TagMultiselectWidget.prototype.setValue = function ( valueObject ) {\n\tvalueObject = Array.isArray( valueObject ) ? valueObject : [ valueObject ];\n\n\tthis.clearItems();\n\tvalueObject.forEach( function ( obj ) {\n\t\tif ( typeof obj === 'string' ) {\n\t\t\tthis.addTag( obj );\n\t\t} else {\n\t\t\tthis.addTag( obj.data, obj.label );\n\t\t}\n\t}.bind( this ) );\n};\n\n/**\n * Add tag to the display area\n *\n * @param {string|Object} data Tag data\n * @param {string} [label] Tag label. If no label is provided, the\n *  stringified version of the data will be used instead.\n * @return {boolean} Item was added successfully\n */\nOO.ui.TagMultiselectWidget.prototype.addTag = function ( data, label ) {\n\tvar newItemWidget,\n\t\tisValid = this.isAllowedData( data );\n\n\tif ( this.isUnderLimit() && ( isValid || this.allowDisplayInvalidTags ) ) {\n\t\tnewItemWidget = this.createTagItemWidget( data, label );\n\t\tnewItemWidget.toggleValid( isValid );\n\t\tthis.addItems( [ newItemWidget ] );\n\t\treturn true;\n\t}\n\n\treturn false;\n};\n\n/**\n * Check whether the number of current tags is within the limit.\n *\n * @return {boolean} True if current tag count is within the limit or\n *  if 'tagLimit' is not set\n */\nOO.ui.TagMultiselectWidget.prototype.isUnderLimit = function () {\n\treturn !this.tagLimit ||\n\t\tthis.getItemCount() < this.tagLimit;\n};\n\n/**\n * Remove tag by its data property.\n *\n * @param {string|Object} data Tag data\n */\nOO.ui.TagMultiselectWidget.prototype.removeTagByData = function ( data ) {\n\tvar item = this.findItemFromData( data );\n\n\tthis.removeItems( [ item ] );\n};\n\n/**\n * Construct a OO.ui.TagItemWidget (or a subclass thereof) from given label and data.\n *\n * @protected\n * @param {string} data Item data\n * @param {string} label The label text.\n * @return {OO.ui.TagItemWidget}\n */\nOO.ui.TagMultiselectWidget.prototype.createTagItemWidget = function ( data, label ) {\n\tlabel = label || data;\n\n\treturn new OO.ui.TagItemWidget( { data: data, label: label } );\n};\n\n/**\n * Given an item, returns the item after it. If the item is already the\n * last item, return `this.input`. If no item is passed, returns the\n * very first item.\n *\n * @protected\n * @param {OO.ui.TagItemWidget} [item] Tag item\n * @return {OO.ui.Widget} The next widget available.\n */\nOO.ui.TagMultiselectWidget.prototype.getNextItem = function ( item ) {\n\tvar itemIndex = this.items.indexOf( item );\n\n\tif ( item === undefined || itemIndex === -1 ) {\n\t\treturn this.items[ 0 ];\n\t}\n\n\tif ( itemIndex === this.items.length - 1 ) { // Last item\n\t\tif ( this.hasInput ) {\n\t\t\treturn this.input;\n\t\t} else {\n\t\t\t// Return first item\n\t\t\treturn this.items[ 0 ];\n\t\t}\n\t} else {\n\t\treturn this.items[ itemIndex + 1 ];\n\t}\n};\n\n/**\n * Given an item, returns the item before it. If the item is already the\n * first item, return `this.input`. If no item is passed, returns the\n * very last item.\n *\n * @protected\n * @param {OO.ui.TagItemWidget} [item] Tag item\n * @return {OO.ui.Widget} The previous widget available.\n */\nOO.ui.TagMultiselectWidget.prototype.getPreviousItem = function ( item ) {\n\tvar itemIndex = this.items.indexOf( item );\n\n\tif ( item === undefined || itemIndex === -1 ) {\n\t\treturn this.items[ this.items.length - 1 ];\n\t}\n\n\tif ( itemIndex === 0 ) {\n\t\tif ( this.hasInput ) {\n\t\t\treturn this.input;\n\t\t} else {\n\t\t\t// Return the last item\n\t\t\treturn this.items[ this.items.length - 1 ];\n\t\t}\n\t} else {\n\t\treturn this.items[ itemIndex - 1 ];\n\t}\n};\n\n/**\n * Update the dimensions of the text input field to encompass all available area.\n * This is especially relevant for when the input is at the edge of a line\n * and should get smaller. The usual operation (as an inline-block with min-width)\n * does not work in that case, pushing the input downwards to the next line.\n *\n * @private\n */\nOO.ui.TagMultiselectWidget.prototype.updateInputSize = function () {\n\tvar $lastItem, direction, contentWidth, currentWidth, bestWidth;\n\tif ( this.inputPosition === 'inline' && !this.isDisabled() ) {\n\t\tif ( this.input.$input[ 0 ].scrollWidth === 0 ) {\n\t\t\t// Input appears to be attached but not visible.\n\t\t\t// Don't attempt to adjust its size, because our measurements\n\t\t\t// are going to fail anyway.\n\t\t\treturn;\n\t\t}\n\t\tthis.input.$input.css( 'width', '1em' );\n\t\t$lastItem = this.$group.children().last();\n\t\tdirection = OO.ui.Element.static.getDir( this.$handle );\n\n\t\t// Get the width of the input with the placeholder text as\n\t\t// the value and save it so that we don't keep recalculating\n\t\tif (\n\t\t\tthis.contentWidthWithPlaceholder === undefined &&\n\t\t\tthis.input.getValue() === '' &&\n\t\t\tthis.input.$input.attr( 'placeholder' ) !== undefined\n\t\t) {\n\t\t\tthis.input.setValue( this.input.$input.attr( 'placeholder' ) );\n\t\t\tthis.contentWidthWithPlaceholder = this.input.$input[ 0 ].scrollWidth;\n\t\t\tthis.input.setValue( '' );\n\n\t\t}\n\n\t\t// Always keep the input wide enough for the placeholder text\n\t\tcontentWidth = Math.max(\n\t\t\tthis.input.$input[ 0 ].scrollWidth,\n\t\t\t// undefined arguments in Math.max lead to NaN\n\t\t\t( this.contentWidthWithPlaceholder === undefined ) ?\n\t\t\t\t0 : this.contentWidthWithPlaceholder\n\t\t);\n\t\tcurrentWidth = this.input.$input.width();\n\n\t\tif ( contentWidth < currentWidth ) {\n\t\t\tthis.updateIfHeightChanged();\n\t\t\t// All is fine, don't perform expensive calculations\n\t\t\treturn;\n\t\t}\n\n\t\tif ( $lastItem.length === 0 ) {\n\t\t\tbestWidth = this.$content.innerWidth();\n\t\t} else {\n\t\t\tbestWidth = direction === 'ltr' ?\n\t\t\t\tthis.$content.innerWidth() - $lastItem.position().left - $lastItem.outerWidth() :\n\t\t\t\t$lastItem.position().left;\n\t\t}\n\n\t\t// Some safety margin for sanity, because I *really* don't feel like finding out where the few\n\t\t// pixels this is off by are coming from.\n\t\tbestWidth -= 13;\n\t\tif ( contentWidth > bestWidth ) {\n\t\t\t// This will result in the input getting shifted to the next line\n\t\t\tbestWidth = this.$content.innerWidth() - 13;\n\t\t}\n\t\tthis.input.$input.width( Math.floor( bestWidth ) );\n\t\tthis.updateIfHeightChanged();\n\t} else {\n\t\tthis.updateIfHeightChanged();\n\t}\n};\n\n/**\n * Determine if widget height changed, and if so,\n * emit the resize event. This is useful for when there are either\n * menus or popups attached to the bottom of the widget, to allow\n * them to change their positioning in case the widget moved down\n * or up.\n *\n * @private\n */\nOO.ui.TagMultiselectWidget.prototype.updateIfHeightChanged = function () {\n\tvar height = this.$element.height();\n\tif ( height !== this.height ) {\n\t\tthis.height = height;\n\t\tthis.emit( 'resize' );\n\t}\n};\n\n/**\n * Check whether all items in the widget are valid\n *\n * @return {boolean} Widget is valid\n */\nOO.ui.TagMultiselectWidget.prototype.checkValidity = function () {\n\treturn this.getItems().every( function ( item ) {\n\t\treturn item.isValid();\n\t} );\n};\n\n/**\n * Set the valid state of this item\n *\n * @param {boolean} [valid] Item is valid\n * @fires valid\n */\nOO.ui.TagMultiselectWidget.prototype.toggleValid = function ( valid ) {\n\tvalid = valid === undefined ? !this.valid : !!valid;\n\n\tif ( this.valid !== valid ) {\n\t\tthis.valid = valid;\n\n\t\tthis.setFlags( { invalid: !this.valid } );\n\n\t\tthis.emit( 'valid', this.valid );\n\t}\n};\n\n/**\n * Get the current valid state of the widget\n *\n * @return {boolean} Widget is valid\n */\nOO.ui.TagMultiselectWidget.prototype.isValid = function () {\n\treturn this.valid;\n};\n","/**\n * PopupTagMultiselectWidget is a {@link OO.ui.TagMultiselectWidget OO.ui.TagMultiselectWidget} intended\n * to use a popup. The popup can be configured to have a default input to insert values into the widget.\n *\n *     @example\n *     // Example: A basic PopupTagMultiselectWidget.\n *     var widget = new OO.ui.PopupTagMultiselectWidget();\n *     $( 'body' ).append( widget.$element );\n *\n *     // Example: A PopupTagMultiselectWidget with an external popup.\n *     var popupInput = new OO.ui.TextInputWidget(),\n *         widget = new OO.ui.PopupTagMultiselectWidget( {\n *            popupInput: popupInput,\n *            popup: {\n *               $content: popupInput.$element\n *            }\n *         } );\n *     $( 'body' ).append( widget.$element );\n *\n * @class\n * @extends OO.ui.TagMultiselectWidget\n * @mixins OO.ui.mixin.PopupElement\n *\n * @param {Object} config Configuration object\n * @cfg {jQuery} [$overlay] An overlay for the popup.\n *  See <https://www.mediawiki.org/wiki/OOUI/Concepts#Overlays>.\n * @cfg {Object} [popup] Configuration options for the popup\n * @cfg {OO.ui.InputWidget} [popupInput] An input widget inside the popup that will be\n *  focused when the popup is opened and will be used as replacement for the\n *  general input in the widget.\n */\nOO.ui.PopupTagMultiselectWidget = function OoUiPopupTagMultiselectWidget( config ) {\n\tvar defaultInput,\n\t\tdefaultConfig = { popup: {} };\n\n\tconfig = config || {};\n\n\t// Parent constructor\n\tOO.ui.PopupTagMultiselectWidget.parent.call( this, $.extend( { inputPosition: 'none' }, config ) );\n\n\tthis.$overlay = ( config.$overlay === true ? OO.ui.getDefaultOverlay() : config.$overlay ) || this.$element;\n\n\tif ( !config.popup ) {\n\t\t// For the default base implementation, we give a popup\n\t\t// with an input widget inside it. For any other use cases\n\t\t// the popup needs to be populated externally and the\n\t\t// event handled to add tags separately and manually\n\t\tdefaultInput = new OO.ui.TextInputWidget();\n\n\t\tdefaultConfig.popupInput = defaultInput;\n\t\tdefaultConfig.popup.$content = defaultInput.$element;\n\t\tdefaultConfig.popup.padded = true;\n\n\t\tthis.$element.addClass( 'oo-ui-popupTagMultiselectWidget-defaultPopup' );\n\t}\n\n\t// Add overlay, and add that to the autoCloseIgnore\n\tdefaultConfig.popup.$overlay = this.$overlay;\n\tdefaultConfig.popup.$autoCloseIgnore = this.hasInput ?\n\t\tthis.input.$element.add( this.$overlay ) : this.$overlay;\n\n\t// Allow extending any of the above\n\tconfig = $.extend( defaultConfig, config );\n\n\t// Mixin constructors\n\tOO.ui.mixin.PopupElement.call( this, config );\n\n\tif ( this.hasInput ) {\n\t\tthis.input.$input.on( 'focus', this.popup.toggle.bind( this.popup, true ) );\n\t}\n\n\t// Configuration options\n\tthis.popupInput = config.popupInput;\n\tif ( this.popupInput ) {\n\t\tthis.popupInput.connect( this, {\n\t\t\tenter: 'onPopupInputEnter'\n\t\t} );\n\t}\n\n\t// Events\n\tthis.on( 'resize', this.popup.updateDimensions.bind( this.popup ) );\n\tthis.popup.connect( this, { toggle: 'onPopupToggle' } );\n\tthis.$tabIndexed\n\t\t.on( 'focus', this.onFocus.bind( this ) );\n\n\t// Initialize\n\tthis.$element\n\t\t.append( this.popup.$element )\n\t\t.addClass( 'oo-ui-popupTagMultiselectWidget' );\n};\n\n/* Initialization */\n\nOO.inheritClass( OO.ui.PopupTagMultiselectWidget, OO.ui.TagMultiselectWidget );\nOO.mixinClass( OO.ui.PopupTagMultiselectWidget, OO.ui.mixin.PopupElement );\n\n/* Methods */\n\n/**\n * Focus event handler.\n *\n * @private\n */\nOO.ui.PopupTagMultiselectWidget.prototype.onFocus = function () {\n\tthis.popup.toggle( true );\n};\n\n/**\n * Respond to popup toggle event\n *\n * @param {boolean} isVisible Popup is visible\n */\nOO.ui.PopupTagMultiselectWidget.prototype.onPopupToggle = function ( isVisible ) {\n\tif ( isVisible && this.popupInput ) {\n\t\tthis.popupInput.focus();\n\t}\n};\n\n/**\n * Respond to popup input enter event\n */\nOO.ui.PopupTagMultiselectWidget.prototype.onPopupInputEnter = function () {\n\tif ( this.popupInput ) {\n\t\tthis.addTagByPopupValue( this.popupInput.getValue() );\n\t\tthis.popupInput.setValue( '' );\n\t}\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.PopupTagMultiselectWidget.prototype.onTagSelect = function ( item ) {\n\tif ( this.popupInput && this.allowEditTags ) {\n\t\tthis.popupInput.setValue( item.getData() );\n\t\tthis.removeItems( [ item ] );\n\n\t\tthis.popup.toggle( true );\n\t\tthis.popupInput.focus();\n\t} else {\n\t\t// Parent\n\t\tOO.ui.PopupTagMultiselectWidget.parent.prototype.onTagSelect.call( this, item );\n\t}\n};\n\n/**\n * Add a tag by the popup value.\n * Whatever is responsible for setting the value in the popup should call\n * this method to add a tag, or use the regular methods like #addTag or\n * #setValue directly.\n *\n * @param {string} data The value of item\n * @param {string} [label] The label of the tag. If not given, the data is used.\n */\nOO.ui.PopupTagMultiselectWidget.prototype.addTagByPopupValue = function ( data, label ) {\n\tthis.addTag( data, label );\n};\n","/**\n * MenuTagMultiselectWidget is a {@link OO.ui.TagMultiselectWidget OO.ui.TagMultiselectWidget} intended\n * to use a menu of selectable options.\n *\n *     @example\n *     // Example: A basic MenuTagMultiselectWidget.\n *     var widget = new OO.ui.MenuTagMultiselectWidget( {\n *         inputPosition: 'outline',\n *         options: [\n *            { data: 'option1', label: 'Option 1', icon: 'tag' },\n *            { data: 'option2', label: 'Option 2' },\n *            { data: 'option3', label: 'Option 3' },\n *         ],\n *         selected: [ 'option1', 'option2' ]\n *     } );\n *     $( 'body' ).append( widget.$element );\n *\n * @class\n * @extends OO.ui.TagMultiselectWidget\n *\n * @constructor\n * @param {Object} [config] Configuration object\n * @cfg {boolean} [clearInputOnChoose=true] Clear the text input value when a menu option is chosen\n * @cfg {Object} [menu] Configuration object for the menu widget\n * @cfg {jQuery} [$overlay] An overlay for the menu.\n *  See <https://www.mediawiki.org/wiki/OOUI/Concepts#Overlays>.\n * @cfg {Object[]} [options=[]] Array of menu options in the format `{ data: …, label: … }`\n */\nOO.ui.MenuTagMultiselectWidget = function OoUiMenuTagMultiselectWidget( config ) {\n\tconfig = config || {};\n\n\t// Parent constructor\n\tOO.ui.MenuTagMultiselectWidget.parent.call( this, config );\n\n\tthis.$overlay = ( config.$overlay === true ? OO.ui.getDefaultOverlay() : config.$overlay ) || this.$element;\n\tthis.clearInputOnChoose = config.clearInputOnChoose === undefined || !!config.clearInputOnChoose;\n\tthis.menu = this.createMenuWidget( $.extend( {\n\t\twidget: this,\n\t\tinput: this.hasInput ? this.input : null,\n\t\t$input: this.hasInput ? this.input.$input : null,\n\t\tfilterFromInput: !!this.hasInput,\n\t\t$autoCloseIgnore: this.hasInput ?\n\t\t\tthis.input.$element : $( [] ),\n\t\t$floatableContainer: this.hasInput && this.inputPosition === 'outline' ?\n\t\t\tthis.input.$element : this.$element,\n\t\t$overlay: this.$overlay,\n\t\tdisabled: this.isDisabled()\n\t}, config.menu ) );\n\tthis.addOptions( config.options || [] );\n\n\t// Events\n\tthis.menu.connect( this, {\n\t\tchoose: 'onMenuChoose',\n\t\ttoggle: 'onMenuToggle'\n\t} );\n\tif ( this.hasInput ) {\n\t\tthis.input.connect( this, { change: 'onInputChange' } );\n\t}\n\tthis.connect( this, { resize: 'onResize' } );\n\n\t// Initialization\n\tthis.$overlay\n\t\t.append( this.menu.$element );\n\tthis.$element\n\t\t.addClass( 'oo-ui-menuTagMultiselectWidget' );\n\t// TagMultiselectWidget already does this, but it doesn't work right because this.menu is not yet\n\t// set up while the parent constructor runs, and #getAllowedValues rejects everything.\n\tif ( config.selected ) {\n\t\tthis.setValue( config.selected );\n\t}\n};\n\n/* Initialization */\n\nOO.inheritClass( OO.ui.MenuTagMultiselectWidget, OO.ui.TagMultiselectWidget );\n\n/* Methods */\n\n/**\n * Respond to resize event\n */\nOO.ui.MenuTagMultiselectWidget.prototype.onResize = function () {\n\t// Reposition the menu\n\tthis.menu.position();\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.MenuTagMultiselectWidget.prototype.onInputFocus = function () {\n\t// Parent method\n\tOO.ui.MenuTagMultiselectWidget.parent.prototype.onInputFocus.call( this );\n\n\tthis.menu.toggle( true );\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.MenuTagMultiselectWidget.prototype.onInputBlur = function () {\n\t// Parent method\n\tOO.ui.MenuTagMultiselectWidget.parent.prototype.onInputBlur.call( this );\n\n\tthis.menu.toggle( false );\n};\n\n/**\n * Respond to input change event\n */\nOO.ui.MenuTagMultiselectWidget.prototype.onInputChange = function () {\n\tthis.menu.toggle( true );\n\tthis.initializeMenuSelection();\n};\n\n/**\n * Respond to menu choose event\n *\n * @param {OO.ui.OptionWidget} menuItem Chosen menu item\n */\nOO.ui.MenuTagMultiselectWidget.prototype.onMenuChoose = function ( menuItem ) {\n\t// Add tag\n\tthis.addTag( menuItem.getData(), menuItem.getLabel() );\n\tif ( this.hasInput && this.clearInputOnChoose ) {\n\t\tthis.input.setValue( '' );\n\t}\n};\n\n/**\n * Respond to menu toggle event. Reset item highlights on hide.\n *\n * @param {boolean} isVisible The menu is visible\n */\nOO.ui.MenuTagMultiselectWidget.prototype.onMenuToggle = function ( isVisible ) {\n\tif ( !isVisible ) {\n\t\tthis.menu.selectItem( null );\n\t\tthis.menu.highlightItem( null );\n\t} else {\n\t\tthis.initializeMenuSelection();\n\t}\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.MenuTagMultiselectWidget.prototype.onTagSelect = function ( tagItem ) {\n\tvar menuItem = this.menu.findItemFromData( tagItem.getData() );\n\tif ( !this.allowArbitrary ) {\n\t\t// Override the base behavior from TagMultiselectWidget; the base behavior\n\t\t// in TagMultiselectWidget is to remove the tag to edit it in the input,\n\t\t// but in our case, we want to utilize the menu selection behavior, and\n\t\t// definitely not remove the item.\n\n\t\t// If there is an input that is used for filtering, erase the value so we don't filter\n\t\tif ( this.hasInput && this.menu.filterFromInput ) {\n\t\t\tthis.input.setValue( '' );\n\t\t}\n\n\t\t// Select the menu item\n\t\tthis.menu.selectItem( menuItem );\n\n\t\tthis.focus();\n\t} else {\n\t\t// Use the default\n\t\tOO.ui.MenuTagMultiselectWidget.parent.prototype.onTagSelect.call( this, tagItem );\n\t}\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.MenuTagMultiselectWidget.prototype.setDisabled = function ( isDisabled ) {\n\t// Parent method\n\tOO.ui.MenuTagMultiselectWidget.parent.prototype.setDisabled.call( this, isDisabled );\n\n\tif ( this.menu ) {\n\t\t// Protect against calling setDisabled() before the menu was initialized\n\t\tthis.menu.setDisabled( isDisabled );\n\t}\n};\n\n/**\n * Highlight the first selectable item in the menu, if configured.\n *\n * @private\n * @chainable\n */\nOO.ui.MenuTagMultiselectWidget.prototype.initializeMenuSelection = function () {\n\tif ( !this.menu.findSelectedItem() ) {\n\t\tthis.menu.highlightItem( this.menu.findFirstSelectableItem() );\n\t}\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.MenuTagMultiselectWidget.prototype.addTagFromInput = function () {\n\tvar val = this.input.getValue(),\n\t\t// Look for a highlighted item first\n\t\t// Then look for the element that fits the data\n\t\titem = this.menu.findHighlightedItem() || this.menu.findItemFromData( val ),\n\t\tdata = item ? item.getData() : val,\n\t\tisValid = this.isAllowedData( data );\n\n\t// Override the parent method so we add from the menu\n\t// rather than directly from the input\n\n\tif ( !val ) {\n\t\treturn;\n\t}\n\n\tif ( isValid || this.allowDisplayInvalidTags ) {\n\t\tthis.clearInput();\n\t\tif ( item ) {\n\t\t\tthis.addTag( data, item.getLabel() );\n\t\t} else {\n\t\t\tthis.addTag( val );\n\t\t}\n\t}\n};\n\n/**\n * Return the visible items in the menu. This is mainly used for when\n * the menu is filtering results.\n *\n * @return {OO.ui.MenuOptionWidget[]} Visible results\n */\nOO.ui.MenuTagMultiselectWidget.prototype.getMenuVisibleItems = function () {\n\treturn this.menu.getItems().filter( function ( menuItem ) {\n\t\treturn menuItem.isVisible();\n\t} );\n};\n\n/**\n * Create the menu for this widget. This is in a separate method so that\n * child classes can override this without polluting the constructor with\n * unnecessary extra objects that will be overidden.\n *\n * @param {Object} menuConfig Configuration options\n * @return {OO.ui.MenuSelectWidget} Menu widget\n */\nOO.ui.MenuTagMultiselectWidget.prototype.createMenuWidget = function ( menuConfig ) {\n\treturn new OO.ui.MenuSelectWidget( menuConfig );\n};\n\n/**\n * Add options to the menu\n *\n * @param {Object[]} menuOptions Object defining options\n */\nOO.ui.MenuTagMultiselectWidget.prototype.addOptions = function ( menuOptions ) {\n\tvar widget = this,\n\t\titems = menuOptions.map( function ( obj ) {\n\t\t\treturn widget.createMenuOptionWidget( obj.data, obj.label, obj.icon );\n\t\t} );\n\n\tthis.menu.addItems( items );\n};\n\n/**\n * Create a menu option widget.\n *\n * @param {string} data Item data\n * @param {string} [label] Item label\n * @param {string} [icon] Symbolic icon name\n * @return {OO.ui.OptionWidget} Option widget\n */\nOO.ui.MenuTagMultiselectWidget.prototype.createMenuOptionWidget = function ( data, label, icon ) {\n\treturn new OO.ui.MenuOptionWidget( {\n\t\tdata: data,\n\t\tlabel: label || data,\n\t\ticon: icon\n\t} );\n};\n\n/**\n * Get the menu\n *\n * @return {OO.ui.MenuSelectWidget} Menu\n */\nOO.ui.MenuTagMultiselectWidget.prototype.getMenu = function () {\n\treturn this.menu;\n};\n\n/**\n * Get the allowed values list\n *\n * @return {string[]} Allowed data values\n */\nOO.ui.MenuTagMultiselectWidget.prototype.getAllowedValues = function () {\n\tvar menuDatas = [];\n\tif ( this.menu ) {\n\t\t// If the parent constructor is calling us, we're not ready yet, this.menu is not set up.\n\t\tmenuDatas = this.menu.getItems().map( function ( menuItem ) {\n\t\t\treturn menuItem.getData();\n\t\t} );\n\t}\n\treturn this.allowedValues.concat( menuDatas );\n};\n","/**\n * SelectFileWidgets allow for selecting files, using the HTML5 File API. These\n * widgets can be configured with {@link OO.ui.mixin.IconElement icons} and {@link\n * OO.ui.mixin.IndicatorElement indicators}.\n * Please see the [OOUI documentation on MediaWiki] [1] for more information and examples.\n *\n *     @example\n *     // Example of a file select widget\n *     var selectFile = new OO.ui.SelectFileWidget();\n *     $( 'body' ).append( selectFile.$element );\n *\n * [1]: https://www.mediawiki.org/wiki/OOUI/Widgets\n *\n * @class\n * @extends OO.ui.Widget\n * @mixins OO.ui.mixin.IconElement\n * @mixins OO.ui.mixin.IndicatorElement\n * @mixins OO.ui.mixin.PendingElement\n * @mixins OO.ui.mixin.LabelElement\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {string[]|null} [accept=null] MIME types to accept. null accepts all types.\n * @cfg {string} [placeholder] Text to display when no file is selected.\n * @cfg {string} [notsupported] Text to display when file support is missing in the browser.\n * @cfg {boolean} [droppable=true] Whether to accept files by drag and drop.\n * @cfg {boolean} [showDropTarget=false] Whether to show a drop target. Requires droppable to be true.\n * @cfg {number} [thumbnailSizeLimit=20] File size limit in MiB above which to not try and show a\n *  preview (for performance)\n */\nOO.ui.SelectFileWidget = function OoUiSelectFileWidget( config ) {\n\tvar dragHandler;\n\n\t// Configuration initialization\n\tconfig = $.extend( {\n\t\taccept: null,\n\t\tplaceholder: OO.ui.msg( 'ooui-selectfile-placeholder' ),\n\t\tnotsupported: OO.ui.msg( 'ooui-selectfile-not-supported' ),\n\t\tdroppable: true,\n\t\tshowDropTarget: false,\n\t\tthumbnailSizeLimit: 20\n\t}, config );\n\n\t// Parent constructor\n\tOO.ui.SelectFileWidget.parent.call( this, config );\n\n\t// Mixin constructors\n\tOO.ui.mixin.IconElement.call( this, config );\n\tOO.ui.mixin.IndicatorElement.call( this, config );\n\tOO.ui.mixin.PendingElement.call( this, $.extend( {}, config, { $pending: this.$info } ) );\n\tOO.ui.mixin.LabelElement.call( this, config );\n\n\t// Properties\n\tthis.$info = $( '<span>' );\n\tthis.showDropTarget = config.showDropTarget;\n\tthis.thumbnailSizeLimit = config.thumbnailSizeLimit;\n\tthis.isSupported = this.constructor.static.isSupported();\n\tthis.currentFile = null;\n\tif ( Array.isArray( config.accept ) ) {\n\t\tthis.accept = config.accept;\n\t} else {\n\t\tthis.accept = null;\n\t}\n\tthis.placeholder = config.placeholder;\n\tthis.notsupported = config.notsupported;\n\tthis.onFileSelectedHandler = this.onFileSelected.bind( this );\n\n\tthis.selectButton = new OO.ui.ButtonWidget( {\n\t\t$element: $( '<label>' ),\n\t\tclasses: [ 'oo-ui-selectFileWidget-selectButton' ],\n\t\tlabel: OO.ui.msg( 'ooui-selectfile-button-select' ),\n\t\tdisabled: this.disabled || !this.isSupported\n\t} );\n\n\tthis.clearButton = new OO.ui.ButtonWidget( {\n\t\tclasses: [ 'oo-ui-selectFileWidget-clearButton' ],\n\t\tframed: false,\n\t\ticon: 'close',\n\t\tdisabled: this.disabled\n\t} );\n\n\t// Events\n\tthis.selectButton.$button.on( {\n\t\tkeypress: this.onKeyPress.bind( this )\n\t} );\n\tthis.clearButton.connect( this, {\n\t\tclick: 'onClearClick'\n\t} );\n\tif ( config.droppable ) {\n\t\tdragHandler = this.onDragEnterOrOver.bind( this );\n\t\tthis.$element.on( {\n\t\t\tdragenter: dragHandler,\n\t\t\tdragover: dragHandler,\n\t\t\tdragleave: this.onDragLeave.bind( this ),\n\t\t\tdrop: this.onDrop.bind( this )\n\t\t} );\n\t}\n\n\t// Initialization\n\tthis.addInput();\n\tthis.$label.addClass( 'oo-ui-selectFileWidget-label' );\n\tthis.$info\n\t\t.addClass( 'oo-ui-selectFileWidget-info' )\n\t\t.append( this.$icon, this.$label, this.clearButton.$element, this.$indicator );\n\n\tif ( config.droppable && config.showDropTarget ) {\n\t\tthis.selectButton.setIcon( 'upload' );\n\t\tthis.$thumbnail = $( '<div>' ).addClass( 'oo-ui-selectFileWidget-thumbnail' );\n\t\tthis.setPendingElement( this.$thumbnail );\n\t\tthis.$element\n\t\t\t.addClass( 'oo-ui-selectFileWidget-dropTarget oo-ui-selectFileWidget' )\n\t\t\t.on( {\n\t\t\t\tclick: this.onDropTargetClick.bind( this )\n\t\t\t} )\n\t\t\t.append(\n\t\t\t\tthis.$thumbnail,\n\t\t\t\tthis.$info,\n\t\t\t\tthis.selectButton.$element,\n\t\t\t\t$( '<span>' )\n\t\t\t\t\t.addClass( 'oo-ui-selectFileWidget-dropLabel' )\n\t\t\t\t\t.text( OO.ui.msg( 'ooui-selectfile-dragdrop-placeholder' ) )\n\t\t\t);\n\t} else {\n\t\tthis.$element\n\t\t\t.addClass( 'oo-ui-selectFileWidget' )\n\t\t\t.append( this.$info, this.selectButton.$element );\n\t}\n\tthis.updateUI();\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.SelectFileWidget, OO.ui.Widget );\nOO.mixinClass( OO.ui.SelectFileWidget, OO.ui.mixin.IconElement );\nOO.mixinClass( OO.ui.SelectFileWidget, OO.ui.mixin.IndicatorElement );\nOO.mixinClass( OO.ui.SelectFileWidget, OO.ui.mixin.PendingElement );\nOO.mixinClass( OO.ui.SelectFileWidget, OO.ui.mixin.LabelElement );\n\n/* Static Properties */\n\n/**\n * Check if this widget is supported\n *\n * @static\n * @return {boolean}\n */\nOO.ui.SelectFileWidget.static.isSupported = function () {\n\tvar $input;\n\tif ( OO.ui.SelectFileWidget.static.isSupportedCache === null ) {\n\t\t$input = $( '<input>' ).attr( 'type', 'file' );\n\t\tOO.ui.SelectFileWidget.static.isSupportedCache = $input[ 0 ].files !== undefined;\n\t}\n\treturn OO.ui.SelectFileWidget.static.isSupportedCache;\n};\n\nOO.ui.SelectFileWidget.static.isSupportedCache = null;\n\n/* Events */\n\n/**\n * @event change\n *\n * A change event is emitted when the on/off state of the toggle changes.\n *\n * @param {File|null} value New value\n */\n\n/* Methods */\n\n/**\n * Get the current value of the field\n *\n * @return {File|null}\n */\nOO.ui.SelectFileWidget.prototype.getValue = function () {\n\treturn this.currentFile;\n};\n\n/**\n * Set the current value of the field\n *\n * @param {File|null} file File to select\n */\nOO.ui.SelectFileWidget.prototype.setValue = function ( file ) {\n\tif ( this.currentFile !== file ) {\n\t\tthis.currentFile = file;\n\t\tthis.updateUI();\n\t\tthis.emit( 'change', this.currentFile );\n\t}\n};\n\n/**\n * Focus the widget.\n *\n * Focusses the select file button.\n *\n * @chainable\n * @return {OO.ui.Widget} The widget, for chaining\n */\nOO.ui.SelectFileWidget.prototype.focus = function () {\n\tthis.selectButton.focus();\n\treturn this;\n};\n\n/**\n * Blur the widget.\n *\n * @chainable\n * @return {OO.ui.Widget} The widget, for chaining\n */\nOO.ui.SelectFileWidget.prototype.blur = function () {\n\tthis.selectButton.blur();\n\treturn this;\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.SelectFileWidget.prototype.simulateLabelClick = function () {\n\tthis.focus();\n};\n\n/**\n * Update the user interface when a file is selected or unselected\n *\n * @protected\n */\nOO.ui.SelectFileWidget.prototype.updateUI = function () {\n\tvar $label;\n\tif ( !this.isSupported ) {\n\t\tthis.$element.addClass( 'oo-ui-selectFileWidget-notsupported' );\n\t\tthis.$element.removeClass( 'oo-ui-selectFileWidget-empty' );\n\t\tthis.setLabel( this.notsupported );\n\t} else {\n\t\tthis.$element.addClass( 'oo-ui-selectFileWidget-supported' );\n\t\tif ( this.currentFile ) {\n\t\t\tthis.$element.removeClass( 'oo-ui-selectFileWidget-empty' );\n\t\t\t$label = $( [] );\n\t\t\t$label = $label.add(\n\t\t\t\t$( '<span>' )\n\t\t\t\t\t.addClass( 'oo-ui-selectFileWidget-fileName' )\n\t\t\t\t\t.text( this.currentFile.name )\n\t\t\t);\n\t\t\tthis.setLabel( $label );\n\n\t\t\tif ( this.showDropTarget ) {\n\t\t\t\tthis.pushPending();\n\t\t\t\tthis.loadAndGetImageUrl().done( function ( url ) {\n\t\t\t\t\tthis.$thumbnail.css( 'background-image', 'url( ' + url + ' )' );\n\t\t\t\t}.bind( this ) ).fail( function () {\n\t\t\t\t\tthis.$thumbnail.append(\n\t\t\t\t\t\tnew OO.ui.IconWidget( {\n\t\t\t\t\t\t\ticon: 'attachment',\n\t\t\t\t\t\t\tclasses: [ 'oo-ui-selectFileWidget-noThumbnail-icon' ]\n\t\t\t\t\t\t} ).$element\n\t\t\t\t\t);\n\t\t\t\t}.bind( this ) ).always( function () {\n\t\t\t\t\tthis.popPending();\n\t\t\t\t}.bind( this ) );\n\t\t\t\tthis.$element.off( 'click' );\n\t\t\t}\n\t\t} else {\n\t\t\tif ( this.showDropTarget ) {\n\t\t\t\tthis.$element.off( 'click' );\n\t\t\t\tthis.$element.on( {\n\t\t\t\t\tclick: this.onDropTargetClick.bind( this )\n\t\t\t\t} );\n\t\t\t\tthis.$thumbnail\n\t\t\t\t\t.empty()\n\t\t\t\t\t.css( 'background-image', '' );\n\t\t\t}\n\t\t\tthis.$element.addClass( 'oo-ui-selectFileWidget-empty' );\n\t\t\tthis.setLabel( this.placeholder );\n\t\t}\n\t}\n};\n\n/**\n * If the selected file is an image, get its URL and load it.\n *\n * @return {jQuery.Promise} Promise resolves with the image URL after it has loaded\n */\nOO.ui.SelectFileWidget.prototype.loadAndGetImageUrl = function () {\n\tvar deferred = $.Deferred(),\n\t\tfile = this.currentFile,\n\t\treader = new FileReader();\n\n\tif (\n\t\tfile &&\n\t\t( OO.getProp( file, 'type' ) || '' ).indexOf( 'image/' ) === 0 &&\n\t\tfile.size < this.thumbnailSizeLimit * 1024 * 1024\n\t) {\n\t\treader.onload = function ( event ) {\n\t\t\tvar img = document.createElement( 'img' );\n\t\t\timg.addEventListener( 'load', function () {\n\t\t\t\tif (\n\t\t\t\t\timg.naturalWidth === 0 ||\n\t\t\t\t\timg.naturalHeight === 0 ||\n\t\t\t\t\timg.complete === false\n\t\t\t\t) {\n\t\t\t\t\tdeferred.reject();\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.resolve( event.target.result );\n\t\t\t\t}\n\t\t\t} );\n\t\t\timg.src = event.target.result;\n\t\t};\n\t\treader.readAsDataURL( file );\n\t} else {\n\t\tdeferred.reject();\n\t}\n\n\treturn deferred.promise();\n};\n\n/**\n * Add the input to the widget\n *\n * @private\n */\nOO.ui.SelectFileWidget.prototype.addInput = function () {\n\tif ( this.$input ) {\n\t\tthis.$input.remove();\n\t}\n\n\tif ( !this.isSupported ) {\n\t\tthis.$input = null;\n\t\treturn;\n\t}\n\n\tthis.$input = $( '<input>' ).attr( 'type', 'file' );\n\tthis.$input.on( 'change', this.onFileSelectedHandler );\n\tthis.$input.on( 'click', function ( e ) {\n\t\t// Prevents dropTarget to get clicked which calls\n\t\t// a click on this input\n\t\te.stopPropagation();\n\t} );\n\tthis.$input.attr( {\n\t\ttabindex: -1\n\t} );\n\tif ( this.accept ) {\n\t\tthis.$input.attr( 'accept', this.accept.join( ', ' ) );\n\t}\n\tthis.selectButton.$button.append( this.$input );\n};\n\n/**\n * Determine if we should accept this file\n *\n * @private\n * @param {string} mimeType File MIME type\n * @return {boolean}\n */\nOO.ui.SelectFileWidget.prototype.isAllowedType = function ( mimeType ) {\n\tvar i, mimeTest;\n\n\tif ( !this.accept || !mimeType ) {\n\t\treturn true;\n\t}\n\n\tfor ( i = 0; i < this.accept.length; i++ ) {\n\t\tmimeTest = this.accept[ i ];\n\t\tif ( mimeTest === mimeType ) {\n\t\t\treturn true;\n\t\t} else if ( mimeTest.substr( -2 ) === '/*' ) {\n\t\t\tmimeTest = mimeTest.substr( 0, mimeTest.length - 1 );\n\t\t\tif ( mimeType.substr( 0, mimeTest.length ) === mimeTest ) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn false;\n};\n\n/**\n * Handle file selection from the input\n *\n * @private\n * @param {jQuery.Event} e\n */\nOO.ui.SelectFileWidget.prototype.onFileSelected = function ( e ) {\n\tvar file = OO.getProp( e.target, 'files', 0 ) || null;\n\n\tif ( file && !this.isAllowedType( file.type ) ) {\n\t\tfile = null;\n\t}\n\n\tthis.setValue( file );\n\tthis.addInput();\n};\n\n/**\n * Handle clear button click events.\n *\n * @private\n * @return {undefined/boolean} False to prevent default if event is handled\n */\nOO.ui.SelectFileWidget.prototype.onClearClick = function () {\n\tthis.setValue( null );\n\treturn false;\n};\n\n/**\n * Handle key press events.\n *\n * @private\n * @param {jQuery.Event} e Key press event\n * @return {undefined/boolean} False to prevent default if event is handled\n */\nOO.ui.SelectFileWidget.prototype.onKeyPress = function ( e ) {\n\tif ( this.isSupported && !this.isDisabled() && this.$input &&\n\t\t( e.which === OO.ui.Keys.SPACE || e.which === OO.ui.Keys.ENTER )\n\t) {\n\t\tthis.$input.click();\n\t\treturn false;\n\t}\n};\n\n/**\n * Handle drop target click events.\n *\n * @private\n * @param {jQuery.Event} e Key press event\n * @return {undefined/boolean} False to prevent default if event is handled\n */\nOO.ui.SelectFileWidget.prototype.onDropTargetClick = function () {\n\tif ( this.isSupported && !this.isDisabled() && this.$input ) {\n\t\tthis.$input.click();\n\t\treturn false;\n\t}\n};\n\n/**\n * Handle drag enter and over events\n *\n * @private\n * @param {jQuery.Event} e Drag event\n * @return {undefined/boolean} False to prevent default if event is handled\n */\nOO.ui.SelectFileWidget.prototype.onDragEnterOrOver = function ( e ) {\n\tvar itemOrFile,\n\t\tdroppableFile = false,\n\t\tdt = e.originalEvent.dataTransfer;\n\n\te.preventDefault();\n\te.stopPropagation();\n\n\tif ( this.isDisabled() || !this.isSupported ) {\n\t\tthis.$element.removeClass( 'oo-ui-selectFileWidget-canDrop' );\n\t\tdt.dropEffect = 'none';\n\t\treturn false;\n\t}\n\n\t// DataTransferItem and File both have a type property, but in Chrome files\n\t// have no information at this point.\n\titemOrFile = OO.getProp( dt, 'items', 0 ) || OO.getProp( dt, 'files', 0 );\n\tif ( itemOrFile ) {\n\t\tif ( this.isAllowedType( itemOrFile.type ) ) {\n\t\t\tdroppableFile = true;\n\t\t}\n\t// dt.types is Array-like, but not an Array\n\t} else if ( Array.prototype.indexOf.call( OO.getProp( dt, 'types' ) || [], 'Files' ) !== -1 ) {\n\t\t// File information is not available at this point for security so just assume\n\t\t// it is acceptable for now.\n\t\t// https://bugzilla.mozilla.org/show_bug.cgi?id=640534\n\t\tdroppableFile = true;\n\t}\n\n\tthis.$element.toggleClass( 'oo-ui-selectFileWidget-canDrop', droppableFile );\n\tif ( !droppableFile ) {\n\t\tdt.dropEffect = 'none';\n\t}\n\n\treturn false;\n};\n\n/**\n * Handle drag leave events\n *\n * @private\n * @param {jQuery.Event} e Drag event\n */\nOO.ui.SelectFileWidget.prototype.onDragLeave = function () {\n\tthis.$element.removeClass( 'oo-ui-selectFileWidget-canDrop' );\n};\n\n/**\n * Handle drop events\n *\n * @private\n * @param {jQuery.Event} e Drop event\n * @return {undefined/boolean} False to prevent default if event is handled\n */\nOO.ui.SelectFileWidget.prototype.onDrop = function ( e ) {\n\tvar file = null,\n\t\tdt = e.originalEvent.dataTransfer;\n\n\te.preventDefault();\n\te.stopPropagation();\n\tthis.$element.removeClass( 'oo-ui-selectFileWidget-canDrop' );\n\n\tif ( this.isDisabled() || !this.isSupported ) {\n\t\treturn false;\n\t}\n\n\tfile = OO.getProp( dt, 'files', 0 );\n\tif ( file && !this.isAllowedType( file.type ) ) {\n\t\tfile = null;\n\t}\n\tif ( file ) {\n\t\tthis.setValue( file );\n\t}\n\n\treturn false;\n};\n\n/**\n * @inheritdoc\n */\nOO.ui.SelectFileWidget.prototype.setDisabled = function ( disabled ) {\n\tOO.ui.SelectFileWidget.parent.prototype.setDisabled.call( this, disabled );\n\tif ( this.selectButton ) {\n\t\tthis.selectButton.setDisabled( disabled );\n\t}\n\tif ( this.clearButton ) {\n\t\tthis.clearButton.setDisabled( disabled );\n\t}\n\treturn this;\n};\n","/**\n * SearchWidgets combine a {@link OO.ui.TextInputWidget text input field}, where users can type a search query,\n * and a menu of search results, which is displayed beneath the query\n * field. Unlike {@link OO.ui.mixin.LookupElement lookup menus}, search result menus are always visible to the user.\n * Users can choose an item from the menu or type a query into the text field to search for a matching result item.\n * In general, search widgets are used inside a separate {@link OO.ui.Dialog dialog} window.\n *\n * Each time the query is changed, the search result menu is cleared and repopulated. Please see\n * the [OOUI demos][1] for an example.\n *\n * [1]: https://doc.wikimedia.org/oojs-ui/master/demos/#SearchInputWidget-type-search\n *\n * @class\n * @extends OO.ui.Widget\n *\n * @constructor\n * @param {Object} [config] Configuration options\n * @cfg {string|jQuery} [placeholder] Placeholder text for query input\n * @cfg {string} [value] Initial query value\n */\nOO.ui.SearchWidget = function OoUiSearchWidget( config ) {\n\t// Configuration initialization\n\tconfig = config || {};\n\n\t// Parent constructor\n\tOO.ui.SearchWidget.parent.call( this, config );\n\n\t// Properties\n\tthis.query = new OO.ui.TextInputWidget( {\n\t\ticon: 'search',\n\t\tplaceholder: config.placeholder,\n\t\tvalue: config.value\n\t} );\n\tthis.results = new OO.ui.SelectWidget();\n\tthis.$query = $( '<div>' );\n\tthis.$results = $( '<div>' );\n\n\t// Events\n\tthis.query.connect( this, {\n\t\tchange: 'onQueryChange',\n\t\tenter: 'onQueryEnter'\n\t} );\n\tthis.query.$input.on( 'keydown', this.onQueryKeydown.bind( this ) );\n\n\t// Initialization\n\tthis.$query\n\t\t.addClass( 'oo-ui-searchWidget-query' )\n\t\t.append( this.query.$element );\n\tthis.$results\n\t\t.addClass( 'oo-ui-searchWidget-results' )\n\t\t.append( this.results.$element );\n\tthis.$element\n\t\t.addClass( 'oo-ui-searchWidget' )\n\t\t.append( this.$results, this.$query );\n};\n\n/* Setup */\n\nOO.inheritClass( OO.ui.SearchWidget, OO.ui.Widget );\n\n/* Methods */\n\n/**\n * Handle query key down events.\n *\n * @private\n * @param {jQuery.Event} e Key down event\n */\nOO.ui.SearchWidget.prototype.onQueryKeydown = function ( e ) {\n\tvar highlightedItem, nextItem,\n\t\tdir = e.which === OO.ui.Keys.DOWN ? 1 : ( e.which === OO.ui.Keys.UP ? -1 : 0 );\n\n\tif ( dir ) {\n\t\thighlightedItem = this.results.findHighlightedItem();\n\t\tif ( !highlightedItem ) {\n\t\t\thighlightedItem = this.results.findSelectedItem();\n\t\t}\n\t\tnextItem = this.results.findRelativeSelectableItem( highlightedItem, dir );\n\t\tthis.results.highlightItem( nextItem );\n\t\tnextItem.scrollElementIntoView();\n\t}\n};\n\n/**\n * Handle select widget select events.\n *\n * Clears existing results. Subclasses should repopulate items according to new query.\n *\n * @private\n * @param {string} value New value\n */\nOO.ui.SearchWidget.prototype.onQueryChange = function () {\n\t// Reset\n\tthis.results.clearItems();\n};\n\n/**\n * Handle select widget enter key events.\n *\n * Chooses highlighted item.\n *\n * @private\n * @param {string} value New value\n */\nOO.ui.SearchWidget.prototype.onQueryEnter = function () {\n\tvar highlightedItem = this.results.findHighlightedItem();\n\tif ( highlightedItem ) {\n\t\tthis.results.chooseItem( highlightedItem );\n\t}\n};\n\n/**\n * Get the query input.\n *\n * @return {OO.ui.TextInputWidget} Query input\n */\nOO.ui.SearchWidget.prototype.getQuery = function () {\n\treturn this.query;\n};\n\n/**\n * Get the search results menu.\n *\n * @return {OO.ui.SelectWidget} Menu of search results\n */\nOO.ui.SearchWidget.prototype.getResults = function () {\n\treturn this.results;\n};\n","}( OO ) );\n"]}
\ No newline at end of file
index a310523..495e03f 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOUI v0.29.4
+ * OOUI v0.29.5
  * https://www.mediawiki.org/wiki/OOUI
  *
  * Copyright 2011–2018 OOUI Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2018-11-07T00:58:30Z
+ * Date: 2018-11-08T22:38:07Z
  */
 ( function ( OO ) {
 
index 37d2d82..2a92b69 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOUI v0.29.4
+ * OOUI v0.29.5
  * https://www.mediawiki.org/wiki/OOUI
  *
  * Copyright 2011–2018 OOUI Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2018-11-07T00:58:38Z
+ * Date: 2018-11-08T22:38:15Z
  */
 .oo-ui-actionWidget.oo-ui-pendingElement-pending {
   background-image: /* @embed */ url(themes/wikimediaui/images/textures/pending.gif);
index 116723d..04b254a 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOUI v0.29.4
+ * OOUI v0.29.5
  * https://www.mediawiki.org/wiki/OOUI
  *
  * Copyright 2011–2018 OOUI Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2018-11-07T00:58:38Z
+ * Date: 2018-11-08T22:38:15Z
  */
 
 .oo-ui-window {
index 62b7681..d4a366e 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOUI v0.29.4
+ * OOUI v0.29.5
  * https://www.mediawiki.org/wiki/OOUI
  *
  * Copyright 2011–2018 OOUI Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2018-11-07T00:58:30Z
+ * Date: 2018-11-08T22:38:07Z
  */
 ( function ( OO ) {
 
index a37bcf7..0ff8864 100644 (file)
 
                        // Loop through all the dom cells of the thead
                        $tableRows.each( function ( rowIndex, row ) {
-                               // eslint-disable-next-line no-restricted-properties
+                               // eslint-disable-next-line jquery/no-each-util
                                $.each( row.cells, function ( columnIndex, cell ) {
                                        var matrixRowIndex,
                                                matrixColumnIndex;
        function convertSortList( sortObjects ) {
                var sortList = [];
                sortObjects.forEach( function ( sortObject ) {
-                       // eslint-disable-next-line no-restricted-properties
+                       // eslint-disable-next-line jquery/no-each-util
                        $.each( sortObject, function ( columnIndex, order ) {
                                var orderIndex = ( order === 'desc' ) ? 1 : 0;
                                sortList.push( [ parseInt( columnIndex, 10 ), orderIndex ] );
index 9036dd3..ea60702 100644 (file)
@@ -4,9 +4,10 @@
        z-index: 100000;
        cursor: default;
 }
+
 .tipsy-inner {
        padding: 5px 8px 4px 8px;
-       /*background-color: #e8f2f8;*/
+       /* background-color: #e8f2f8; */
        background-color: #fff;
        border: solid 1px #a7d7f9;
        color: #000;
@@ -20,6 +21,7 @@
        filter: progid:DXImageTransform.Microsoft.DropShadow(OffX=0, OffY=2, Strength=6, Direction=90, Color='#cccccc');
        */
 }
+
 .tipsy-arrow {
        position: absolute;
        /* @embed */
        width: 11px;
        height: 6px;
 }
-/* @noflip */ .tipsy-n .tipsy-arrow {
+
+/* @noflip */
+.tipsy-n .tipsy-arrow {
        top: 0;
        left: 50%;
        margin-left: -5px;
 }
-/* @noflip */ .tipsy-nw .tipsy-arrow {
+
+/* @noflip */
+.tipsy-nw .tipsy-arrow {
        top: 0;
        left: 10px;
 }
-/* @noflip */ .tipsy-ne .tipsy-arrow {
+
+/* @noflip */
+.tipsy-ne .tipsy-arrow {
        top: 0;
        right: 10px;
 }
-/* @noflip */ .tipsy-s .tipsy-arrow {
+
+/* @noflip */
+.tipsy-s .tipsy-arrow {
        bottom: 0;
        left: 50%;
        margin-left: -5px;
        background-position: bottom left;
 }
-/* @noflip */ .tipsy-sw .tipsy-arrow {
+
+/* @noflip */
+.tipsy-sw .tipsy-arrow {
        bottom: 0;
        left: 10px;
        background-position: bottom left;
 }
-/* @noflip */ .tipsy-se .tipsy-arrow {
+
+/* @noflip */
+.tipsy-se .tipsy-arrow {
        bottom: 0;
        right: 10px;
        background-position: bottom left;
 }
-/* @noflip */ .tipsy-e .tipsy-arrow {
+
+/* @noflip */
+.tipsy-e .tipsy-arrow {
        top: 50%;
        margin-top: -5px;
        right: 0;
@@ -64,7 +80,9 @@
        height: 11px;
        background-position: top right;
 }
-/* @noflip */ .tipsy-w .tipsy-arrow {
+
+/* @noflip */
+.tipsy-w .tipsy-arrow {
        top: 50%;
        margin-top: -5px;
        left: 0;
index fc52d51..bc37943 100644 (file)
        -ms-user-select: none;
        user-select: none;
 }
+
 .mw-collapsible-toggle-default:before {
        content: '[';
 }
+
 .mw-collapsible-toggle-default:after {
        content: ']';
 }
@@ -24,7 +26,7 @@
        cursor: pointer;
 }
 
-/* collapse links in captions should be inline */
+/* Collapse links in captions should be inline */
 caption .mw-collapsible-toggle,
 .mw-content-ltr caption .mw-collapsible-toggle,
 .mw-content-rtl caption .mw-collapsible-toggle,
index 43b8f0d..09306f6 100644 (file)
 
                        // Default toggle link. Only build it when needed to avoid jQuery memory leaks (event data).
                        buildDefaultToggleLink = function () {
-                               return $( '<a class="mw-collapsible-text"></a>' )
+                               return $( '<a>' )
+                                       .addClass( 'mw-collapsible-text' )
                                        .text( collapseText )
                                        .wrap( '<span class="mw-collapsible-toggle mw-collapsible-toggle-default"></span>' )
                                        .parent()
index ea5b6dd..1ab91a9 100644 (file)
@@ -25,7 +25,6 @@
 @exclude: ~'.mw-made-collapsible';
 
 .client-js {
-
        ol.mw-collapsible:before,
        ul.mw-collapsible:before,
        .mw-collapsible-toggle-li {
@@ -76,8 +75,7 @@
                // Avoid FOUC/reflows on collapsed elements by making sure they are opened by default (T42812)
                > p,
                > table,
-               // Manual:Collapsible_elements/Demo/Simple#Collapsed_by_default
-               > thead + tbody,
+               > thead + tbody, // 'https://www.mediawiki.org/wiki/Manual:Collapsible_elements/Demo/Simple#Collapsed_by_default'
                tr:not( :first-child ),
                .mw-collapsible-content {
                        display: none;
index f2d6a04..1016e72 100644 (file)
@@ -3,12 +3,12 @@
  *
  * Set options:
  *
- *             $( '#textbox' ).suggestions( { option1: value1, option2: value2 } );
- *             $( '#textbox' ).suggestions( option, value );
+ *  $( '#textbox' ).suggestions( { option1: value1, option2: value2 } );
+ *  $( '#textbox' ).suggestions( option, value );
  *
  * Initialize:
  *
- *             $( '#textbox' ).suggestions();
+ *  $( '#textbox' ).suggestions();
  *
  * Uses jQuery.suggestions singleton internally.
  *
index 0bcb2b6..44baa8b 100644 (file)
 
        /**
         * Check if a given namespace is a talk namespace
+        *
+        * See MWNamespace::isTalk in PHP
+        *
         * @param {number} namespaceId Namespace ID
         * @return {boolean} Namespace is a talk namespace
         */
                return !!( namespaceId > NS_MAIN && namespaceId % 2 );
        };
 
+       /**
+        * Check if signature buttons should be shown in a given namespace
+        *
+        * See MWNamespace::wantSignatures in PHP
+        *
+        * @param {number} namespaceId Namespace ID
+        * @return {boolean} Namespace is a signature namespace
+        */
+       Title.wantSignaturesNamespace = function ( namespaceId ) {
+               return this.isTalkNamespace( namespaceId ) ||
+                       mw.config.get( 'wgExtraSignatureNamespaces' ).indexOf( namespaceId ) !== -1;
+       };
+
        /**
         * Whether this title exists on the wiki.
         *
index 178f169..0e5a5ba 100644 (file)
                         */
                        getQueryString: function () {
                                var args = [];
-                               // eslint-disable-next-line no-restricted-properties
+                               // eslint-disable-next-line jquery/no-each-util
                                $.each( this.query, function ( key, val ) {
                                        var k = Uri.encode( key ),
                                                vals = Array.isArray( val ) ? val : [ val ];
index b90427e..363b494 100644 (file)
                                }
 
                                newList = [];
-                               // eslint-disable-next-line no-restricted-properties
+                               // eslint-disable-next-line jquery/no-each-util
                                $.each( response.parse.indicators, function ( name, indicator ) {
                                        newList.push(
                                                $( '<div>' )
index 4e7ebcd..a0bba6f 100644 (file)
@@ -2,7 +2,7 @@
  * JavaScript for History action
  */
 $( function () {
-       var     $historyCompareForm = $( '#mw-history-compare' ),
+       var $historyCompareForm = $( '#mw-history-compare' ),
                $historySubmitter,
                $lis = $( '#pagehistory > li' );
 
@@ -72,7 +72,7 @@ $( function () {
        // the page look broken for a second in slow browsers and might show the form broken
        // again when coming back from a "next" page.
        $historyCompareForm.submit( function ( e ) {
-               var     $copyForm, $copyRadios, $copyAction;
+               var $copyForm, $copyRadios, $copyAction;
 
                if ( $historySubmitter ) {
                        $copyForm = $historyCompareForm.clone();
index a481074..abdee12 100644 (file)
@@ -3,11 +3,13 @@
 .mw-category {
        .column-count(3);
        .column-width(24em);
+
        .mw-category-group {
                ul {
                        margin-top: 0;
                        margin-bottom: 0;
                }
+
                li {
                        .column-break-inside-avoid;
                }
index e76ea33..b61349b 100644 (file)
@@ -42,8 +42,8 @@
                                } );
 
                        $table.find( 'tbody' ).append(
-                               $( '<tr class="mw-metadata-show-hide-extended"></tr>' ).append(
-                                       $( '<td colspan="2"></td>' ).append( $link )
+                               $( '<tr>' ).addClass( 'mw-metadata-show-hide-extended' ).append(
+                                       $( '<td>' ).prop( 'colspan', 2 ).append( $link )
                                )
                        );
                } );
index 81c55e8..f168515 100644 (file)
@@ -53,7 +53,7 @@
        // Pre-populate with fake ajax promises to save http requests for tokens
        // we already have on the page via the user.tokens module (T36733).
        promises[ defaultOptions.ajax.url ] = {};
-       // eslint-disable-next-line no-restricted-properties
+       // eslint-disable-next-line jquery/no-each-util
        $.each( mw.user.tokens.get(), function ( key, value ) {
                // This requires #getToken to use the same key as user.tokens.
                // Format: token-type + "Token" (eg. csrfToken, patrolToken, watchToken).
index 1785ab3..8d4b2bc 100644 (file)
 
                        file.name = 'file';
 
-                       // eslint-disable-next-line no-restricted-properties
+                       // eslint-disable-next-line jquery/no-each-util
                        $.each( data, function ( key, val ) {
                                $form.append( getHiddenInput( key, val ) );
                        } );
index d3e4950..7528fdb 100644 (file)
@@ -97,9 +97,11 @@ div.apihelp-linktrail {
 .api-main-links {
        text-align: center;
 }
+
 .api-main-links ul:before {
        content: '[';
 }
+
 .api-main-links ul:after {
        content: ']';
 }
index d1fbff0..b6aa5fd 100644 (file)
@@ -33,7 +33,9 @@
                        // opposite way than normal event handlers (returning true will prevent the default
                        // action, returning false will let the browser handle the error normally, by e.g.
                        // logging to the console), so our fallback old handler needs to return false.
-                       var oldHandler = window.onerror || function () { return false; };
+                       var oldHandler = window.onerror || function () {
+                               return false;
+                       };
 
                        /**
                         * Dumb window.onerror handler which forwards the errors via mw.track.
index f0c2601..32dbdc1 100644 (file)
                buildHtml: function () {
                        var $container, $bits, panes, id, gitInfo;
 
-                       $container = $( '<div id="mw-debug-toolbar" class="mw-debug" lang="en" dir="ltr"></div>' );
+                       $container = $( '<div>' )
+                               .attr( {
+                                       id: 'mw-debug-toolbar',
+                                       lang: 'en',
+                                       dir: 'ltr'
+                               } )
+                               .addClass( 'mw-debug' );
 
-                       $bits = $( '<div class="mw-debug-bits"></div>' );
+                       $bits = $( '<div>' ).addClass( 'mw-debug-bits' );
 
                        /**
                         * Returns a jQuery element for a debug-bit div
                        }
 
                        bitDiv( 'mwversion' )
-                               .append( $( '<a href="//www.mediawiki.org/">MediaWiki</a>' ) )
+                               .append( $( '<a>' ).attr( 'href', '//www.mediawiki.org/' ).text( 'MediaWiki' ) )
                                .append( document.createTextNode( ': ' + this.data.mwVersion + ' ' ) )
                                .append( gitInfo );
 
                        }
 
                        bitDiv( 'phpversion' )
-                               .append( $( this.data.phpEngine === 'HHVM' ?
-                                       '<a href="https://hhvm.com/">HHVM</a>' :
-                                       '<a href="https://php.net/">PHP</a>'
-                               ) )
+                               .append( this.data.phpEngine === 'HHVM' ?
+                                       $( '<a>' ).attr( 'href', 'https://hhvm.com/' ).text( 'HHVM' ) :
+                                       $( '<a>' ).attr( 'href', 'https://php.net/' ).text( 'PHP' )
+                               )
                                .append( ': ' + this.data.phpVersion );
 
                        bitDiv( 'time' )
                buildConsoleTable: function () {
                        var $table, entryTypeText, i, length, entry;
 
-                       $table = $( '<table id="mw-debug-console">' );
+                       $table = $( '<table>' ).attr( 'id', 'mw-debug-console' );
 
                        $( '<colgroup>' ).css( 'width', /* padding = */ 20 + ( 10 * /* fontSize = */ 11 ) ).appendTo( $table );
                        $( '<colgroup>' ).appendTo( $table );
                buildQueryTable: function () {
                        var $table, i, length, query;
 
-                       $table = $( '<table id="mw-debug-querylist"></table>' );
+                       $table = $( '<table>' ).attr( 'id', 'mw-debug-querylist' );
 
                        $( '<tr>' )
-                               .append( $( '<th>#</th>' ).css( 'width', '4em' ) )
-                               .append( $( '<th>SQL</th>' ) )
-                               .append( $( '<th>Time</th>' ).css( 'width', '8em' ) )
-                               .append( $( '<th>Call</th>' ).css( 'width', '18em' ) )
+                               .append( $( '<th>' ).text( '#' ).css( 'width', '4em' ) )
+                               .append( $( '<th>' ).text( 'SQL' ) )
+                               .append( $( '<th>' ).text( 'Time' ).css( 'width', '8em' ) )
+                               .append( $( '<th>' ).text( 'Call' ).css( 'width', '18em' ) )
                                .appendTo( $table );
 
                        for ( i = 0, length = this.data.queries.length; i < length; i += 1 ) {
                                $( '<tr>' )
                                        .append( $( '<td>' ).text( i + 1 ) )
                                        .append( $( '<td>' ).text( query.sql ) )
-                                       .append( $( '<td class="stats">' ).text( ( query.time * 1000 ).toFixed( 4 ) + 'ms' ) )
-                                       .append( $( '<td>' ).text( query[ 'function' ] ) )
+                                       .append( $( '<td>' ).text( ( query.time * 1000 ).toFixed( 4 ) + 'ms' ).addClass( 'stats' ) )
+                                       .append( $( '<td>' ).text( query.function ) )
                                        .appendTo( $table );
                        }
 
                                file = this.data.includes[ i ];
                                $( '<tr>' )
                                        .append( $( '<td>' ).text( file.name ) )
-                                       .append( $( '<td class="nr">' ).text( file.size ) )
+                                       .append( $( '<td>' ).text( file.size ).addClass( 'nr' ) )
                                        .appendTo( $table );
                        }
 
index ef8afdf..ddb9b17 100644 (file)
@@ -7,7 +7,7 @@
 
        function getHovzer() {
                if ( $hovzer === undefined ) {
-                       $hovzer = $( '<div id="jquery-foot-hovzer"></div>' ).appendTo( 'body' );
+                       $hovzer = $( '<div>' ).attr( 'id', 'jquery-foot-hovzer' ).appendTo( 'body' );
                }
                return $hovzer;
        }
index ac33b84..92e1d04 100644 (file)
        margin-bottom: 1em;
 }
 
-/* Overwriting OOUI is no fun */
+/* Overwriting OOUI */
 .mw-feedbackDialog-feedback-form .oo-ui-fieldLayout.oo-ui-labelElement.oo-ui-fieldLayout-align-left > .oo-ui-fieldLayout-body > .oo-ui-fieldLayout-header {
        min-width: 4.2em;
        width: 20%;
 }
+
 .mw-feedbackDialog-feedback-form .oo-ui-fieldLayout.oo-ui-labelElement.oo-ui-fieldLayout-align-left > .oo-ui-fieldLayout-body > .oo-ui-fieldLayout-field {
        width: 80%;
 }
index 2663d87..e25a92f 100644 (file)
@@ -6,22 +6,26 @@
 .hlist dt:after {
        content: ':';
 }
+
 .hlist dd:after,
 .hlist li:after {
        content: ' ·';
        font-weight: bold;
 }
+
 .hlist dd:last-child:after,
 .hlist dt:last-child:after,
 .hlist li:last-child:after {
        content: none;
 }
+
 /* For IE8 */
 .hlist dd.hlist-last-child:after,
 .hlist dt.hlist-last-child:after,
 .hlist li.hlist-last-child:after {
        content: none;
 }
+
 /* Add parentheses around nested lists */
 .hlist dd dd:first-child:before,
 .hlist dd dt:first-child:before,
@@ -35,6 +39,7 @@
        content: '(';
        font-weight: normal;
 }
+
 .hlist dd dd:last-child:after,
 .hlist dd dt:last-child:after,
 .hlist dd li:last-child:after,
@@ -47,6 +52,7 @@
        content: ')';
        font-weight: normal;
 }
+
 /* For IE8 */
 .hlist dd dd.hlist-last-child:after,
 .hlist dd dt.hlist-last-child:after,
        content: ')';
        font-weight: normal;
 }
+
 /* Put ordinals in front of ordered list items */
 .hlist ol {
        counter-reset: list-item;
 }
+
 .hlist ol > li {
        counter-increment: list-item;
 }
+
 .hlist ol > li:before {
        content: counter( list-item ) ' ';
 }
+
 .hlist dd ol > li:first-child:before,
 .hlist dt ol > li:first-child:before,
 .hlist li ol > li:first-child:before {
index a156e88..8f1d563 100644 (file)
 .mw-htmlform-ooui {
        line-height: 1.4; // Override MediaWiki's default of `1.6`
 
+       .oo-ui-fieldsetLayout-header {
+               font-size: 100%; // Override MediaWiki's generic `legend` styling
+       }
+
        .oo-ui-fieldLayout.oo-ui-labelElement > .oo-ui-fieldLayout-body > .oo-ui-fieldLayout-header {
                line-height: 16 / @ooui-font-size-browser / @ooui-font-size-base;
        }
        .mw-htmlform-matrix {
                border-spacing: 0 2px;
 
+               th {
+                       font-weight: normal;
+               }
+
                td {
                        padding: @ooui-padding-vertical @ooui-padding-horizontal;
                        text-align: center;
                        &:first-child {
                                text-align: left;
                        }
+
+                       &.first {
+                               margin-right: 5%;
+                               width: 39%;
+                       }
+               }
+
+               thead tr td {
+                       padding-bottom: 0;
                }
 
                tbody tr:nth-child( even ) td {
                        background-color: #f8f9fa;
                }
 
-               tbody tr:not( :first-child ):hover td {
+               tbody tr:hover td {
                        background-color: #eaecf0;
                }
 
-               tbody tr:first-child td {
-                       background-color: #fff;
-                       padding-bottom: 0;
+               // Specificity needed because of necessary high OOUI specificity due to modularity
+               .oo-ui-fieldLayout.oo-ui-fieldLayout-align-top .oo-ui-fieldLayout-help {
+                       margin-top: 0;
                }
 
-               td.first {
-                       margin-right: 5%;
-                       width: 39%;
+               .oo-ui-fieldLayout.oo-ui-labelElement > .oo-ui-fieldLayout-body > .oo-ui-fieldLayout-header {
+                       padding-bottom: 0;
                }
        }
 }
 
-// Flatlist styling for PHP widgets...
+// Flatlist styling for PHP (`.oo-ui-fieldLayout-align-inline`) &
+// JS (`.oo-ui-radioOptionWidget, .oo-ui-checkboxMultioptionWidget`) widgets
 .mw-htmlform-flatlist .oo-ui-fieldLayout-align-inline,
-// ...and for JS widgets
 .mw-htmlform-flatlist .oo-ui-radioOptionWidget,
 .mw-htmlform-flatlist .oo-ui-checkboxMultioptionWidget {
        display: inline-block;
index 0f331ee..d943219 100644 (file)
@@ -19,6 +19,9 @@ table.mw-htmlform-nolabel td.mw-label {
 }
 
 /* HTMLCheckMatrix */
+.mw-htmlform-matrix th {
+       font-weight: normal;
+}
 
 .mw-htmlform-matrix td {
        padding-left: 0.5em;
@@ -44,7 +47,6 @@ tr.mw-htmlform-vertical-label td.mw-label {
        margin-left: 4px;
 }
 
-/* stylelint-disable indentation */
 .mw-icon-question:lang( ar ),
 .mw-icon-question:lang( fa ),
 .mw-icon-question:lang( ur ) {
index f5c2c93..72a27fa 100644 (file)
                var i,
                        units = [ '', ' KiB', ' MiB', ' GiB', ' TiB', ' PiB' ];
 
-               if ( !$.isNumeric( bytes ) || bytes === 0 ) { return bytes; }
+               if ( !$.isNumeric( bytes ) || bytes === 0 ) {
+                       return bytes;
+               }
 
-               for ( i = 0; bytes >= 1024; bytes /= 1024 ) { i++; }
+               for ( i = 0; bytes >= 1024; bytes /= 1024 ) {
+                       i++;
+               }
                // Maintain one decimal for kB and above, but don't
                // add ".0" for bytes.
                return bytes.toFixed( i > 0 ? 1 : 0 ) + units[ i ];
 
                style.textContent = css;
                document.body.appendChild( style );
-               // eslint-disable-next-line no-restricted-properties
+               // eslint-disable-next-line jquery/no-each-util
                $.each( style.sheet.cssRules, function ( index, rule ) {
                        selectors.total++;
                        // document.querySelector() on prefixed pseudo-elements can throw exceptions
index 082db5c..ebb469f 100644 (file)
@@ -1,4 +1,3 @@
-/* eslint-disable no-restricted-properties */
 /*!
 * Experimental advanced wikitext parser-emitter.
 * See: https://www.mediawiki.org/wiki/Extension:UploadWizard/MessageParser for docs
        mw.jqueryMsg.HtmlEmitter = function ( language, magic ) {
                var jmsg = this;
                this.language = language;
-               // eslint-disable-next-line no-restricted-properties
+               // eslint-disable-next-line jquery/no-each-util
                $.each( magic, function ( key, val ) {
                        jmsg[ key.toLowerCase() ] = function () {
                                return val;
                                // typeof returns object for arrays
                                case 'object':
                                        // node is an array of nodes
+                                       // eslint-disable-next-line jquery/no-map-util
                                        subnodes = $.map( node.slice( 1 ), function ( n ) {
                                                return jmsg.emit( n, replacements );
                                        } );
                 */
                concat: function ( nodes ) {
                        var $span = $( '<span>' ).addClass( 'mediaWiki_htmlEmitter' );
-                       // eslint-disable-next-line no-restricted-properties
+                       // eslint-disable-next-line jquery/no-each-util
                        $.each( nodes, function ( i, node ) {
                                // Let jQuery append nodes, arrays of nodes and jQuery objects
                                // other things (strings, numbers, ..) are appended as text nodes (not as HTML strings)
                        }
 
                        // Remove explicit plural forms from the forms. They were set undefined in the above loop.
+                       // eslint-disable-next-line jquery/no-map-util
                        forms = $.map( forms, function ( form ) {
                                return form;
                        } );
index b449ef6..f5a8272 100644 (file)
@@ -337,23 +337,6 @@ table.mw_metadata td.spacer {
        clear: both;
 }
 
-/* Allmessages table */
-#allmessagestable th {
-       background-color: #b2b2ff;
-}
-
-#allmessagestable tr.orig {
-       background-color: #ffe2e2;
-}
-
-#allmessagestable tr.new {
-       background-color: #e2ffe2;
-}
-
-#allmessagestable tr.def {
-       background-color: #f0f0ff;
-}
-
 #jump-to-nav {
        display: none;
 }
index 829052d..2da5122 100644 (file)
@@ -1,4 +1,3 @@
-/* eslint-disable no-restricted-properties */
 ( function () {
        var ProtectionForm,
                reasonCodePointLimit = mw.config.get( 'wgCommentCodePointLimit' ),
                 * @return {boolean}
                 */
                matchAttribute: function ( objects, attrName ) {
+                       // eslint-disable-next-line jquery/no-map-util
                        return $.map( objects, function ( object ) {
                                return object[ attrName ];
                        } ).filter( function ( item, index, a ) {
                 * @param {boolean} val Enable?
                 */
                toggleUnchainedInputs: function ( val ) {
-                       var setDisabled = function () { this.disabled = !val; };
+                       var setDisabled = function () {
+                               this.disabled = !val;
+                       };
                        this.getLevelSelectors().slice( 1 ).each( setDisabled );
                        this.getExpiryInputs().slice( 1 ).each( setDisabled );
                        this.getExpirySelectors().slice( 1 ).each( setDisabled );
index d4c3621..1e1c303 100644 (file)
@@ -27,7 +27,9 @@
         * @deprecated since 1.17 Use jQuery instead
         */
        mw.log.deprecate( window, 'addOnloadHook', function ( fn ) {
-               $( function () { fn(); } );
+               $( function () {
+                       fn();
+               } );
        }, 'Use jQuery instead.' );
 
        /**
index 7e7821e..fe5647f 100644 (file)
@@ -54,7 +54,7 @@
 }
 
 .hyphens( @value: auto ) {
-       & when ( @value = auto ){
+       & when ( @value = auto ) {
                // Legacy `word-wrap`; IE 6-11, Edge 12+, Firefox 3.5+, Chrome 4+, Safari 3.1+,
                //   Opera 11.5+, iOS 3.2+, Android 2.1+
                // `overflow-wrap` is W3 standard, but it doesn't seem as if browser vendors
@@ -92,7 +92,6 @@
 // and remaining parameters are additional transitions."
 .transition-transform( ... ) {
        -webkit-backface-visibility: hidden; // Older Webkit browsers: Promote element to a composite layer & involve the GPU
-
        -webkit-transition: -webkit-transform @arguments; // Safari 3.1-8, iOS 3.2-8.4, Android 2.1-4.4.4
        -moz-transition: -moz-transform @arguments; // Firefox 4-15 for `-moz-transition`
        transition: transform @arguments; // Chrome 36+, Firefox 16+, IE 10+, Safari 9+, Opera 12.1+, iOS 9.2+, Android 36+
        -webkit-box-flex: @grow; // iOS 6-, Safari 3.1-6
        -moz-box-flex: @grow; // Firefox 21-
        width: @width; // Fallback for flex-basis
-
        -ms-flex: @grow @shrink @width; // IE 10
        flex: @grow @shrink @width;
-
        -webkit-box-ordinal-group: @order; // iOS 6-, Safari 3.1-6
        -moz-box-ordinal-group: @order; // Firefox 21-
        -ms-flex-order: @order; // IE 10
index 64d6b3d..ccc9564 100644 (file)
@@ -7,6 +7,7 @@
        from {
                .transform-rotate( 0deg );
        }
+
        to {
                .transform-rotate( 360deg );
        }
diff --git a/resources/src/mediawiki.less/mediawiki.ui/mixins.less b/resources/src/mediawiki.less/mediawiki.ui/mixins.less
deleted file mode 100644 (file)
index 1e078bd..0000000
+++ /dev/null
@@ -1,148 +0,0 @@
-// ----------------------------------------------------------------------------
-// Form styling mixins
-// ----------------------------------------------------------------------------
-.agora-label-styling() {
-       font-size: 0.9em;
-       color: @colorText;
-
-       * {
-               font-weight: normal;
-       }
-}
-
-.agora-inline-label-styling() {
-       margin-bottom: 0.5em;
-       cursor: pointer;
-       vertical-align: bottom;
-       line-height: normal;
-       font-weight: normal;
-
-       & > input[ type='checkbox' ],
-       & > input[ type='radio' ] {
-               width: auto;
-               height: auto;
-               margin: 0 0.1em 0 0;
-               padding: 0;
-               border: 1px solid @colorGray7;
-               cursor: pointer;
-       }
-}
-
-// ----------------------------------------------------------------------------
-// Button styling
-// ----------------------------------------------------------------------------
-
-.button-colors( @bgColor, @highlightColor, @activeColor ) {
-       background-color: @bgColor;
-       color: @colorButtonText;
-       border: 1px solid @colorFieldBorder;
-
-       // Make sure that `color` isn't inheriting from user-agent styles
-       &:visited {
-               color: @colorButtonText;
-       }
-
-       &:hover {
-               background-color: @highlightColor;
-               color: @colorGray4;
-               border-color: @colorGray10;
-       }
-
-       &:focus {
-               background-color: @highlightColor;
-               // Make sure that `color` isn't inheriting from user-agent styles
-               color: @colorButtonText;
-               border-color: @colorProgressive;
-               box-shadow: inset 0 0 0 1px @colorProgressive, inset 0 0 0 2px #fff;
-       }
-
-       &:active,
-       &.is-on,
-       &.mw-ui-checked {
-               background-color: @activeColor;
-               color: @colorGray1;
-               border-color: @colorGray7;
-               box-shadow: none;
-       }
-
-       &:disabled {
-               background-color: @colorGray12;
-               color: #fff;
-               border-color: @colorGray12;
-
-               // Make sure disabled buttons don't have hover and active states
-               &:hover,
-               &:active {
-                       background-color: @colorGray12;
-                       color: #fff;
-                       box-shadow: none;
-                       border-color: @colorGray12;
-               }
-       }
-}
-
-.button-colors-primary( @bgColor, @highlightColor, @activeColor ) {
-       background-color: @bgColor;
-       color: #fff;
-       // border of the same color as background so that light background and
-       // dark background buttons are the same height and width
-       border: 1px solid @bgColor;
-
-       &:hover {
-               background-color: @highlightColor;
-               border-color: @highlightColor;
-       }
-
-       &:focus {
-               box-shadow: inset 0 0 0 1px @bgColor, inset 0 0 0 2px #fff;
-       }
-
-       &:active,
-       &.is-on,
-       &.mw-ui-checked {
-               background-color: @activeColor;
-               border-color: @activeColor;
-               box-shadow: none;
-       }
-
-       &:disabled {
-               background-color: @colorGray12;
-               color: #fff;
-               border-color: @colorGray12;
-
-               // Make sure disabled buttons don't have hover and active states
-               &:hover,
-               &:active,
-               &.mw-ui-checked {
-                       background-color: @colorGray12;
-                       color: #fff;
-                       border-color: @colorGray12;
-                       box-shadow: none;
-               }
-       }
-}
-
-.button-colors-quiet( @textColor, @highlightColor, @activeColor ) {
-       // Quiet buttons all start gray, and reveal
-       // progressive/destructive color on hover and active.
-       color: @colorButtonText;
-
-       &:hover {
-               background-color: transparent;
-               color: @highlightColor;
-       }
-
-       &:active,
-       &.mw-ui-checked {
-               color: @activeColor;
-       }
-
-       &:focus {
-               background-color: transparent;
-               color: @textColor;
-       }
-
-       &:disabled {
-               color: @colorDisabledText;
-       }
-}
index 731bd2d..0d1a657 100644 (file)
@@ -36,6 +36,7 @@
 @colorBaseInverted: #fff;
 
 // Semantic colors
+@background-color-base: #fff;
 // Blue; for contextual use of a continuing action
 @colorProgressive: #36c;
 @colorProgressiveHighlight: #447ff5;
 @colorNeutral: @colorGray7;
 
 // Border colors
+@border-color-base: #a2a9b1;
 @borderColorInputBinaryChecked: @colorProgressive;
 @borderColorInputBinaryActive: @colorProgressiveActive;
 
+// Border styles
+@border-style-base: solid;
+
+// Border widths
+@border-width-base: 1px;
+
 // Checked radio input border-width, equal to OOUI at 14px base font-size
 @borderWidthRadioChecked: 0.4285em;
 
 
 // Form input sizes, equal to OOUI at 14px base font-size
 @sizeInputBinary: 1.5625em;
-
-// Deprecated color variables from when WikimediaUI color palette wasn't around
-// See https://wikimedia.github.io/WikimediaUI-Style-Guide/visual-style_colors.html
-@colorGray3: #333;
-@colorGray6: #666;
-@colorGray8: #888;
-@colorGray9: #999;
-@colorGray11: #bbb;
-@colorGray13: #ddd;
index a56be76..c36b8d8 100644 (file)
@@ -17,7 +17,6 @@
        background-color: #fff;
        /* Click handler in mediawiki.notification.js */
        cursor: pointer;
-
        opacity: 0;
        -webkit-transform: translateX( 35px );
        transform: translateX( 35px );
index 0ec010e..f72fc92 100644 (file)
        function Notification( message, options ) {
                var $notification, $notificationContent;
 
-               $notification = $( '<div class="mw-notification"></div>' )
+               $notification = $( '<div>' )
                        .data( 'mw-notification', this )
-                       .addClass( options.autoHide ? 'mw-notification-autohide' : 'mw-notification-noautohide' );
+                       .addClass( [
+                               'mw-notification',
+                               options.autoHide ? 'mw-notification-autohide' : 'mw-notification-noautohide'
+                       ] );
 
                if ( options.tag ) {
                        // Sanitize options.tag before it is used by any code. (Including Notification class methods)
                }
 
                if ( options.title ) {
-                       $( '<div class="mw-notification-title"></div>' )
+                       $( '<div>' )
+                               .addClass( 'mw-notification-title' )
                                .text( options.title )
                                .appendTo( $notification );
                }
 
-               $notificationContent = $( '<div class="mw-notification-content"></div>' );
+               $notificationContent = $( '<div>' ).addClass( 'mw-notification-content' );
 
                if ( typeof message === 'object' ) {
                        // Handle mw.Message objects separately from DOM nodes and jQuery objects
index 204d915..17caa9e 100644 (file)
         * Draws the carousel and the interface around it.
         */
        mw.GallerySlideshow.prototype.drawCarousel = function () {
-               var next, prev, toggle, interfaceElements, carouselStack;
+               var next, prev, toggle, interfaceElements, carouselStack;
 
                this.$carousel = $( '<li>' ).addClass( 'gallerycarousel' );
 
         *
         * @param {Object} $img
         * @return {jQuery.Promise} Resolves with the images URL and original
-        *      element once the image has loaded.
+        *   element once the image has loaded.
         */
        mw.GallerySlideshow.prototype.loadImage = function ( $img ) {
                var img, d = $.Deferred();
index 047c933..f7a3f0d 100644 (file)
@@ -56,4 +56,3 @@ ul.mw-gallery-packed-hover li.gallerybox.mw-gallery-focused div.gallerytextwrapp
        white-space: normal;
        overflow: visible;
 }
-
index e08e28c..9264a39 100644 (file)
@@ -1,4 +1,3 @@
-/* eslint-disable no-restricted-properties */
 ( function () {
        /**
         * View model for a filter group
 
                // Check for filters that should be initially selected by their default value
                if ( this.isSticky() ) {
+                       // eslint-disable-next-line jquery/no-each-util
                        $.each( this.defaultFilters, function ( filterName, filterValue ) {
                                model.getItemByName( filterName ).toggleSelected( filterValue );
                        } );
         * Conflict object is set up by filter name keys and conflict
         * definition. For example:
         * [
-        *              {
-        *                      filterName: {
-        *                              filter: filterName,
-        *                              group: group1
-        *                      }
-        *              },
-        *              {
-        *                      filterName2: {
-        *                              filter: filterName2,
-        *                              group: group2
-        *                      }
-        *              }
+        *     {
+        *         filterName: {
+        *             filter: filterName,
+        *             group: group1
+        *         }
+        *     },
+        *     {
+        *         filterName2: {
+        *             filter: filterName2,
+        *             group: group2
+        *         }
+        *     }
         * ]
         * @return {Object} Conflict definition
         */
                                        selected = [];
 
                                // Find if any are selected
+                               // eslint-disable-next-line jquery/no-each-util
                                $.each( filters, function ( name, value ) {
                                        if ( value ) {
                                                selected.push( name );
                        // all false
 
                        // Go over the items and define the correct values
+                       // eslint-disable-next-line jquery/no-each-util
                        $.each( filterRepresentation, function ( name, value ) {
                                // We must store all parameter values as strings '0' or '1'
                                if ( model.getType() === 'send_unselected_if_any' ) {
                } else if ( this.getType() === 'string_options' ) {
                        values = [];
 
+                       // eslint-disable-next-line jquery/no-each-util
                        $.each( filterRepresentation, function ( name, value ) {
                                // Collect values
                                if ( value ) {
                                }
                        } );
 
+                       // eslint-disable-next-line jquery/no-each-util
                        $.each( expandedParams, function ( paramName, paramValue ) {
                                var filterItem = paramToFilterMap[ paramName ];
 
index 0204013..dac61b2 100644 (file)
@@ -94,7 +94,7 @@
 
                key = key || 'contextDescription';
 
-               // eslint-disable-next-line no-restricted-properties
+               // eslint-disable-next-line jquery/no-each-util
                $.each( conflicts, function ( filterName, conflict ) {
                        if ( !conflict.item.isSelected() ) {
                                return;
         *
         * Conflict object is set up by filter name keys and conflict
         * definition. For example:
-        *              {
-        *                      filterName: {
-        *                              filter: filterName,
-        *                              group: group1,
-        *                              label: itemLabel,
-        *                              item: itemModel
-        *                      }
-        *                      filterName2: {
-        *                              filter: filterName2,
-        *                              group: group2
-        *                              label: itemLabel2,
-        *                              item: itemModel2
-        *                      }
-        *              }
+        *
+        *  {
+        *      filterName: {
+        *          filter: filterName,
+        *          group: group1,
+        *          label: itemLabel,
+        *          item: itemModel
+        *      }
+        *      filterName2: {
+        *          filter: filterName2,
+        *          group: group2
+        *          label: itemLabel2,
+        *          item: itemModel2
+        *      }
+        *  }
         *
         * @return {Object} Filter conflicts
         */
index c76cd25..36575f7 100644 (file)
@@ -1,4 +1,3 @@
-/* eslint-disable no-restricted-properties */
 ( function () {
        /**
         * View model for the filters selection and display
                                filterItemGroup = filterItem.getGroupModel();
 
                        // For each item, see if that item is still conflicting
+                       // eslint-disable-next-line jquery/no-each-util
                        $.each( model.groups, function ( groupName, groupModel ) {
                                if ( filterItem.getGroupName() === groupName ) {
                                        // Check inside the group
                        expandConflictDefinitions = function ( obj ) {
                                var result = {};
 
+                               // eslint-disable-next-line jquery/no-each-util
                                $.each( obj, function ( key, conflicts ) {
                                        var filterName,
                                                adjustedConflicts = {};
                }, views );
 
                // Go over all views
+               // eslint-disable-next-line jquery/no-each-util
                $.each( allViews, function ( viewName, viewData ) {
                        // Define the view
                        model.views[ viewName ] = {
                filterConflictResult = expandConflictDefinitions( filterConflictMap );
 
                // Set conflicts for groups
+               // eslint-disable-next-line jquery/no-each-util
                $.each( groupConflictResult, function ( group, conflicts ) {
                        model.groups[ group ].setConflicts( conflicts );
                } );
 
                // Set conflicts for items
+               // eslint-disable-next-line jquery/no-each-util
                $.each( filterConflictResult, function ( filterName, conflicts ) {
                        var filterItem = model.getItemByName( filterName );
                        // set conflicts for items in the group
                } );
 
                // Create a map between known parameters and their models
+               // eslint-disable-next-line jquery/no-each-util
                $.each( this.groups, function ( group, groupModel ) {
                        if (
                                groupModel.getType() === 'send_unselected_if_any' ||
                var filtersValue;
                // For arbitrary numeric single_option values make sure the values
                // are normalized to fit within the limits
+               // eslint-disable-next-line jquery/no-each-util
                $.each( this.getFilterGroups(), function ( groupName, groupModel ) {
                        params[ groupName ] = groupModel.normalizeArbitraryValue( params[ groupName ] );
                } );
                parameters = parameters ? $.extend( true, {}, parameters ) : this.getCurrentParameterState();
 
                // Params
+               // eslint-disable-next-line jquery/no-each-util
                $.each( this.getEmptyParameterState(), function ( param, value ) {
                        if ( parameters[ param ] !== undefined && parameters[ param ] !== value ) {
                                result[ param ] = parameters[ param ];
 
                view = view || this.getCurrentView();
 
+               // eslint-disable-next-line jquery/no-each-util
                $.each( this.groups, function ( groupName, groupModel ) {
                        if ( groupModel.getView() === view ) {
                                result[ groupName ] = groupModel;
 
                groups = this.getFilterGroupsByView( view );
 
+               // eslint-disable-next-line jquery/no-each-util
                $.each( groups, function ( groupName, groupModel ) {
                        result = result.concat( groupModel.getItems() );
                } );
                var result = {};
 
                // Get default filter state
+               // eslint-disable-next-line jquery/no-each-util
                $.each( this.groups, function ( name, model ) {
                        if ( !model.isSticky() ) {
                                $.extend( true, result, model.getDefaultParams() );
        mw.rcfilters.dm.FiltersViewModel.prototype.getStickyParams = function () {
                var result = [];
 
+               // eslint-disable-next-line jquery/no-each-util
                $.each( this.groups, function ( name, model ) {
                        if ( model.isSticky() ) {
                                if ( model.isPerGroupRequestParameter() ) {
        mw.rcfilters.dm.FiltersViewModel.prototype.getStickyParamsValues = function () {
                var result = {};
 
+               // eslint-disable-next-line jquery/no-each-util
                $.each( this.groups, function ( name, model ) {
                        if ( model.isSticky() ) {
                                $.extend( true, result, model.getParamRepresentation() );
                        } );
                }
 
+               // eslint-disable-next-line jquery/no-each-util
                $.each( groupItems, function ( group, model ) {
                        $.extend(
                                result,
                //    },
                //    group2: "param4|param5"
                // }
+               // eslint-disable-next-line jquery/no-each-util
                $.each( params, function ( paramName, paramValue ) {
                        var groupName,
                                itemOrGroup = model.parameterMap[ paramName ];
 
                // Go over all groups, so we make sure we get the complete output
                // even if the parameters don't include a certain group
+               // eslint-disable-next-line jquery/no-each-util
                $.each( this.groups, function ( groupName, groupModel ) {
                        result = $.extend( true, {}, result, groupModel.getFilterRepresentation( groupMap[ groupName ] ) );
                } );
        mw.rcfilters.dm.FiltersViewModel.prototype.findSelectedItems = function () {
                var allSelected = [];
 
+               // eslint-disable-next-line jquery/no-each-util
                $.each( this.getFilterGroups(), function ( groupName, groupModel ) {
                        allSelected = allSelected.concat( groupModel.findSelectedItems() );
                } );
        mw.rcfilters.dm.FiltersViewModel.prototype.getViewByTrigger = function ( trigger ) {
                var result = 'default';
 
+               // eslint-disable-next-line jquery/no-each-util
                $.each( this.views, function ( name, data ) {
                        if ( data.trigger === trigger ) {
                                result = name;
                        visibleGroupNames = Object.keys( visibleGroups );
 
                        // Update visibility of items and groups
+                       // eslint-disable-next-line jquery/no-each-util
                        $.each( this.getFilterGroups(), function ( groupName, groupModel ) {
                                // Check if the group is visible at all
                                groupModel.toggleVisible( visibleGroupNames.indexOf( groupName ) !== -1 );
index 9d8f977..b01aa7a 100644 (file)
@@ -1,4 +1,3 @@
-/* eslint-disable no-restricted-properties */
 ( function () {
        /**
         * View model for saved queries
                        //     }
                        //   }
                        // }
+                       // eslint-disable-next-line jquery/no-each-util
                        $.each( savedQueries.queries || {}, function ( id, obj ) {
                                if ( obj.data && obj.data.filters ) {
                                        obj.data = model.convertToParameters( obj.data );
                }
 
                // Initialize the query items
+               // eslint-disable-next-line jquery/no-each-util
                $.each( savedQueries.queries || {}, function ( id, obj ) {
                        var normalizedData = obj.data,
                                isDefault = String( savedQueries.default ) === String( id );
 
                // Highlights: appending _color to keys
                newData.highlights = {};
+               // eslint-disable-next-line jquery/no-each-util
                $.each( data.highlights, function ( highlightedFilterName, value ) {
                        if ( value ) {
                                newData.highlights[ highlightedFilterName + '_color' ] = data.highlights[ highlightedFilterName ];
                        data = this.filtersModel.getMinimizedParamRepresentation( fulldata );
 
                // Split highlight/params
+               // eslint-disable-next-line jquery/no-each-util
                $.each( data, function ( param, value ) {
                        if ( param !== 'highlight' && highlightParamNames.indexOf( param ) > -1 ) {
                                normalizedData.highlights[ param ] = value;
diff --git a/resources/src/mediawiki.rcfilters/images/clip.svg b/resources/src/mediawiki.rcfilters/images/clip.svg
deleted file mode 100644 (file)
index f011042..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M17.5 4.5v13.2L12 13.5l-5.5 4.2V4.5zM5 21l7-6 7 6V3H5z" fill-rule="evenodd"/>
-</svg>
diff --git a/resources/src/mediawiki.rcfilters/images/pending.gif b/resources/src/mediawiki.rcfilters/images/pending.gif
deleted file mode 100644 (file)
index 1194eed..0000000
Binary files a/resources/src/mediawiki.rcfilters/images/pending.gif and /dev/null differ
diff --git a/resources/src/mediawiki.rcfilters/images/pushPin.svg b/resources/src/mediawiki.rcfilters/images/pushPin.svg
deleted file mode 100644 (file)
index c4a1341..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M17.445 12.225c-.813-.935-1.775-.739-2.883-1.768-.55-.511-.498-2.36-.498-2.36s-.041-1.836.524-2.401c.39-.39 1.076-.49 1.475-.883a.973.973 0 0 0 .217-.317c.007-.013.014-.023.018-.035.035-.092.054-.2.064-.316.003-.03.017-.055.017-.085 0-.005-.003-.01-.004-.015.001-.008.004-.014.004-.022 0-.02-.015-.03-.017-.048a1.052 1.052 0 0 0-1.043-.974H8.681c-.555 0-.997.43-1.043.974-.002.018-.017.028-.017.048 0 .008.003.014.003.022 0 .006-.003.01-.003.015 0 .03.014.055.017.085.01.116.029.224.064.316.004.012.012.022.018.035a.965.965 0 0 0 .217.317c.399.393 1.084.493 1.475.883.565.565.523 2.401.523 2.401s.053 1.849-.497 2.36c-1.108 1.03-2.07.833-2.883 1.768C5.979 12.887 6 14 6 14h5.333v4.578L12 21l.668-2.422V14H18s.02-1.113-.555-1.775z"/>
-</svg>
diff --git a/resources/src/mediawiki.rcfilters/images/unClip.svg b/resources/src/mediawiki.rcfilters/images/unClip.svg
deleted file mode 100644 (file)
index 2e3ebcb..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M5 21l7-6 7 6V3H5z" fill-rule="evenodd"/>
-</svg>
index 7284131..7565a0d 100644 (file)
@@ -1,4 +1,3 @@
-/* eslint-disable no-restricted-properties */
 ( function () {
 
        var byteLength = require( 'mediawiki.String' ).byteLength;
@@ -68,6 +67,7 @@
                // Prepare views
                if ( namespaceStructure ) {
                        items = [];
+                       // eslint-disable-next-line jquery/no-each-util
                        $.each( namespaceStructure, function ( namespaceID, label ) {
                                // Build and clean up the individual namespace items definition
                                items.push( {
                // Before we do anything, we need to see if we require additional items in the
                // groups that have 'AllowArbitrary'. For the moment, those are only single_option
                // groups; if we ever expand it, this might need further generalization:
+               // eslint-disable-next-line jquery/no-each-util
                $.each( views, function ( viewName, viewData ) {
                        viewData.groups.forEach( function ( groupData ) {
                                var extraValues = [];
         * Check if new changes, newer than those currently shown, are available
         *
         * @return {jQuery.Promise} Promise object that resolves with a bool
-        *      specifying if there are new changes or not
+        *   specifying if there are new changes or not
         *
         * @private
         */
index 9101fba..689f322 100644 (file)
@@ -24,7 +24,6 @@
        // On the watchlist, reserve a bit more
        .mw-special-Watchlist .rcfilters-head {
                min-height: @rcfilters-wl-head-min-height;
-
        }
 
        .mw-rcfilters-collapsed {
@@ -79,7 +78,6 @@
                        .cloptions {
                                display: none;
                        }
-
                }
        }
 
                        .animation-delay( 0s );
                }
        }
+
        body:not( .mw-rcfilters-ui-initialized ) .rcfilters-spinner {
                display: block;
                // When initializing, display the spinner on top of the area where the UI will appear
                margin-top: -( @rcfilters-head-min-height + @rcfilters-head-margin-bottom ) / 1.5;
        }
+
        body.mw-rcfilters-ui-loading .rcfilters-spinner {
                display: block;
                // When loading new results, display the spinner on top of the results area
        100% {
                -webkit-transform: scale( 0.625 );
        }
+
        20% { // equals 320ms
                opacity: 0.87;
                -webkit-transform: scale( 1 );
        100% {
                -moz-transform: scale( 0.625 );
        }
+
        20% {
                opacity: 0.87;
                -moz-transform: scale( 1 );
        100% {
                transform: scale( 0.625 );
        }
+
        20% { // equals 320ms
                opacity: 0.87;
                transform: scale( 1 );
index 516a79b..96a791f 100644 (file)
@@ -41,7 +41,6 @@ div.mw-rcfilters-ui-highlights {
                                        .mw-rcfilters-circle-color( @highlight-bluedot, true, @highlight-bluedot );
                                }
                        }
-
                }
 
                // Watchlist unseen highlighted fixes
index 16f110a..87f257b 100644 (file)
@@ -6,6 +6,7 @@
        60% {
                border-top-color: @colorProgressive;
        }
+
        100% {
                border-top-color: @colorGray12;
        }
index 93fae1e..d74f4d0 100644 (file)
                        &-c1 {
                                .mw-rcfilters-circle-color( @highlight-c1 );
                        }
+
                        &-c2 {
                                .mw-rcfilters-circle-color( @highlight-c2 );
                        }
+
                        &-c3 {
                                .mw-rcfilters-circle-color( @highlight-c3 );
                        }
+
                        &-c4 {
                                .mw-rcfilters-circle-color( @highlight-c4 );
                        }
+
                        &-c5 {
                                .mw-rcfilters-circle-color( @highlight-c5 );
                        }
index aa285e6..d67739d 100644 (file)
@@ -78,6 +78,7 @@
                                padding: 0.6em 0; // Same top padding as the handle
                                flex: 0 0 auto;
                        }
+
                        &-queryName {
                                flex: 1 1 auto;
                                padding: 0.6em 0; // Same top padding as the handle
index e6003c1..949980d 100644 (file)
@@ -12,7 +12,6 @@
        &-bottom {
                .flex-display;
                .flex;
-
                margin-top: 1em;
        }
 }
index deecd67..4fa5183 100644 (file)
@@ -50,6 +50,7 @@
                                        background-color: @highlight-none;
                                }
                        }
+
                        &-c1 {
                                .mw-rcfilters-circle-color( @highlight-c1, false );
                                border-color: @highlight-c1;
@@ -60,6 +61,7 @@
                                        background-color: @highlight-c1;
                                }
                        }
+
                        &-c2 {
                                .mw-rcfilters-circle-color( @highlight-c2, true );
                                border-color: @highlight-c2;
@@ -70,6 +72,7 @@
                                        background-color: @highlight-c2;
                                }
                        }
+
                        &-c3 {
                                .mw-rcfilters-circle-color( @highlight-c3, true );
                                border-color: @highlight-c3;
@@ -80,6 +83,7 @@
                                        background-color: @highlight-c3;
                                }
                        }
+
                        &-c4 {
                                .mw-rcfilters-circle-color( @highlight-c4, true );
                                border-color: @highlight-c4;
@@ -90,6 +94,7 @@
                                        background-color: @highlight-c4;
                                }
                        }
+
                        &-c5 {
                                .mw-rcfilters-circle-color( @highlight-c5, true );
                                border-color: @highlight-c5;
index 61872bd..5c3c0df 100644 (file)
@@ -14,9 +14,8 @@
                border-top: 4px solid @colorGray12;
        }
 
-       // Don't show border for first namespace
+       // Don't show border for first namespace & hide for every 'talk' option in second selector
        &-view-default + &-view-namespaces,
-       // Hide for every 'talk' option
        &-view-namespaces&.mw-rcfilters-ui-itemMenuOptionWidget-identifier-subject + &-view-namespaces.mw-rcfilters-ui-itemMenuOptionWidget-identifier-talk {
                border-top: 0;
        }
@@ -40,6 +39,7 @@
                        font-size: 1.15em;
                        color: @colorGray2;
                }
+
                &-desc {
                        color: @colorGray5;
                        white-space: normal;
index f210a44..e593966 100644 (file)
                .transform( scale( 0 ) );
                opacity: 1;
        }
+
        50% {
                .transform( scale( 1.5 ) );
                opacity: 0.8;
        }
+
        80%,
        100% {
                opacity: 0;
index 824485f..31a5f54 100644 (file)
@@ -16,6 +16,7 @@
                .oo-ui-labelElement-label {
                        color: @colorGray7;
                }
+
                .oo-ui-buttonWidget {
                        opacity: @muted-opacity;
                }
index c102e59..3c3f261 100644 (file)
         * Map a reason for having no results to its message key
         *
         * @param {string} reason One of the NO_RESULTS_* "constant" that represent
-        *      a reason for having no results
+        *   a reason for having no results
         * @return {string} Key for the message that explains why there is no results in this case
         */
        mw.rcfilters.ui.ChangesListWrapperWidget.prototype.getMsgKeyForNoResults = function ( reason ) {
index f4a40cb..289f1ee 100644 (file)
@@ -28,7 +28,9 @@
                // 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.on( 'mousedown', function ( e ) {
+                       e.stopPropagation();
+               } );
 
                this.updateUiBasedOnModel();
 
index 6c2fda7..5e5cd6e 100644 (file)
                                }
                        );
 
-                       this.saveQueryButton.$element.on( 'mousedown', function ( e ) { e.stopPropagation(); } );
+                       this.saveQueryButton.$element.on( 'mousedown', function ( e ) {
+                               e.stopPropagation();
+                       } );
 
                        this.saveQueryButton.connect( this, {
                                click: 'onSaveQueryButtonClick',
                this.hideShowButton.connect( this, { click: 'onHideShowButtonClick' } );
                // 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.hideShowButton.$element.on( 'mousedown', function ( e ) { e.stopPropagation(); } );
+               this.resetButton.$element.on( 'mousedown', function ( e ) {
+                       e.stopPropagation();
+               } );
+               this.hideShowButton.$element.on( 'mousedown', function ( e ) {
+                       e.stopPropagation();
+               } );
                this.model.connect( this, {
                        initialize: 'onModelInitialize',
                        update: 'onModelUpdate',
                                // 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 );
+                               setTimeout(
+                                       function () {
+                                               this.getMenu().scrollToTop();
+                                       }.bind( this )
+                               );
                        }
                } else {
-                       this.blur();
-
                        // Clear selection
                        this.selectTag( null );
 
 
                        // Log filter grouping
                        this.controller.trackFilterGroupings( 'filtermenu' );
+
+                       this.blur();
                }
 
                this.input.setIcon( isVisible ? 'search' : 'menu' );
index 491651a..ab49414 100644 (file)
@@ -22,7 +22,7 @@
 
                if ( config.events ) {
                        // Aggregate events
-                       // eslint-disable-next-line no-restricted-properties
+                       // eslint-disable-next-line jquery/no-each-util
                        $.each( config.events, function ( eventName, eventEmit ) {
                                aggregate[ eventName ] = eventEmit;
                        } );
index 3a159f2..49f980c 100644 (file)
                this.$overlay.append( this.highlightPopup.$element );
 
                // Count groups per view
-               // eslint-disable-next-line no-restricted-properties
+               // eslint-disable-next-line jquery/no-each-util
                $.each( groups, function ( groupName, groupModel ) {
                        if ( !groupModel.isHidden() ) {
                                viewGroupCount[ groupModel.getView() ] = viewGroupCount[ groupModel.getView() ] || 0;
                        }
                } );
 
-               // eslint-disable-next-line no-restricted-properties
+               // eslint-disable-next-line jquery/no-each-util
                $.each( groups, function ( groupName, groupModel ) {
                        var currentItems = [],
                                view = groupModel.getView();
index 3645b20..3882a95 100644 (file)
@@ -96,7 +96,9 @@
                this.$icon.on( { click: this.onDefaultIconClick.bind( this ) } );
                // Prevent propagation on mousedown for the save button
                // so the menu doesn't close
-               this.saveButton.$element.on( { mousedown: function () { return false; } } );
+               this.saveButton.$element.on( { mousedown: function () {
+                       return false;
+               } } );
 
                // Initialize
                this.toggleDefault( !!this.model.isDefault() );
index ca85a6e..e65abf2 100644 (file)
@@ -24,7 +24,9 @@
                OO.ui.mixin.LabelElement.call( this, config );
 
                this.model = model;
-               this.itemFilter = config.itemFilter || function () { return true; };
+               this.itemFilter = config.itemFilter || function () {
+                       return true;
+               };
 
                // Build the selection from the item models
                this.selectWidget = new OO.ui.ButtonSelectWidget();
index 044ac3f..0069cf9 100644 (file)
@@ -1,8 +1,8 @@
-/* eslint-disable no-restricted-properties */
 /*!
  * Add search suggestions to the search form.
  */
 ( function () {
+       // eslint-disable-next-line jquery/no-map-util
        var searchNS = $.map( mw.config.get( 'wgFormattedNamespaces' ), function ( nsName, nsID ) {
                if ( nsID >= 0 && mw.user.options.get( 'searchNs' + nsID ) ) {
                        // Cast string key to number
                        this.text( text );
 
                        // wrap only as link, if the config doesn't disallow it
-                       if ( textboxConfig.wrapAsLink !== false ) {
+                       if ( textboxConfig.wrapAsLink !== false ) {
                                this.wrap(
                                        $( '<a>' )
                                                .attr( 'href', formData.baseHref + $.param( formData.linkParams ) )
                                                } );
                                        } else {
                                                $input.closest( 'form' )
-                                                       .append( $( '<input type="hidden" name="fulltext" value="1"/>' ) );
+                                                       .append(
+                                                               $( '<input>' )
+                                                                       .prop( {
+                                                                               type: 'hidden',
+                                                                               value: 1
+                                                                       } )
+                                                                       .attr( 'name', 'fulltext' )
+                                                       );
                                        }
                                        return true; // allow the form to be submitted
                                }
index 2957080..3104a69 100644 (file)
@@ -34,7 +34,6 @@
        /* IE7 and earlier */
        zoom: 1;
        *display: inline; /* stylelint-disable declaration-block-no-duplicate-properties */
-
        padding: 7px;
 }
 
index 3f33837..8b2657d 100644 (file)
@@ -120,6 +120,7 @@ figure[ typeof~='mw:Audio/Frame' ] {
                /* @noflip */
                margin: 0.5em 1.4em 1.3em 0;
        }
+
        &.mw-halign-right {
                /* @noflip */
                margin: 0.5em 0 1.3em 1.4em;
@@ -198,6 +199,7 @@ figure[ typeof*='mw:Audio/Thumb' ] {
                display: inline-block;
                height: 100%;
        }
+
        > * {
                vertical-align: middle;
                display: inline-block;
@@ -213,24 +215,31 @@ figure[ typeof*='mw:Audio/Thumb' ] {
                .mw-valign-middle > & {
                        vertical-align: middle;
                }
+
                .mw-valign-baseline > & {
                        vertical-align: baseline;
                }
+
                .mw-valign-sub > & {
                        vertical-align: sub;
                }
+
                .mw-valign-super > & {
                        vertical-align: super;
                }
+
                .mw-valign-top > & {
                        vertical-align: top;
                }
+
                .mw-valign-text-top > & {
                        vertical-align: text-top;
                }
+
                .mw-valign-bottom > & {
                        vertical-align: bottom;
                }
+
                .mw-valign-text-bottom > & {
                        vertical-align: text-bottom;
                }
index 301024d..db9265a 100644 (file)
@@ -53,10 +53,12 @@ a.mw-selflink {
        font-weight: bold;
        text-decoration: inherit;
 }
+
 a.mw-selflink:hover {
        cursor: inherit;
        text-decoration: inherit;
 }
+
 a.mw-selflink:active,
 a.mw-selflink:visited {
        color: inherit;
index fe5ac41..d7415c9 100644 (file)
@@ -1,6 +1,6 @@
 .mw-apisandbox-toolbar {
        background: #fff;
-       -webkit-position: sticky;
+       position: -webkit-sticky;
        position: sticky;
        top: 0;
        margin-bottom: -1px;
index 48b3269..3762ae7 100644 (file)
@@ -1,4 +1,3 @@
-/* eslint-disable no-restricted-properties */
 ( function () {
        'use strict';
        var ApiSandbox, Util, WidgetMethods, Validators,
                this.checkbox = new OO.ui.CheckboxInputWidget( config.checkbox )
                        .on( 'change', this.onCheckboxChange, [], this );
 
-               OptionalWidget[ 'super' ].call( this, config );
+               OptionalWidget.super.call( this, config );
 
                // Forward most methods for convenience
                for ( k in this.widget ) {
-                       if ( $.isFunction( this.widget[ k ] ) && !this[ k ] ) {
+                       if ( typeof this.widget[ k ] === 'function' && !this[ k ] ) {
                                this[ k ] = this.widget[ k ].bind( this.widget );
                        }
                }
        };
        OptionalWidget.prototype.onOverlayClick = function () {
                this.setDisabled( false );
-               if ( $.isFunction( this.widget.focus ) ) {
+               if ( typeof this.widget.focus === 'function' ) {
                        this.widget.focus();
                }
        };
        OptionalWidget.prototype.setDisabled = function ( disabled ) {
-               OptionalWidget[ 'super' ].prototype.setDisabled.call( this, disabled );
+               OptionalWidget.super.prototype.setDisabled.call( this, disabled );
                this.widget.setDisabled( this.isDisabled() );
                this.checkbox.setSelected( !this.isDisabled() );
                this.$cover.toggle( this.isDisabled() );
@@ -91,7 +90,7 @@
                        },
                        setApiValue: function ( v ) {
                                if ( v === undefined ) {
-                                       v = this.paramInfo[ 'default' ];
+                                       v = this.paramInfo.default;
                                }
                                this.setValue( v );
                        },
                                var menu = this.getMenu();
 
                                if ( v === undefined ) {
-                                       v = this.paramInfo[ 'default' ];
+                                       v = this.paramInfo.default;
                                }
                                if ( v === undefined ) {
                                        menu.selectItem();
                                }
                        },
                        getApiValueForTemplates: function () {
-                               return this.isDisabled() ? this.parseApiValue( this.paramInfo[ 'default' ] ) : this.getValue();
+                               return this.isDisabled() ? this.parseApiValue( this.paramInfo.default ) : this.getValue();
                        },
                        getApiValue: function () {
                                var items = this.getValue();
                        },
                        setApiValue: function ( v ) {
                                if ( v === undefined ) {
-                                       v = this.paramInfo[ 'default' ];
+                                       v = this.paramInfo.default;
                                }
                                this.setValue( this.parseApiValue( v ) );
                        },
 
                submoduleWidget: {
                        single: function () {
-                               var v = this.isDisabled() ? this.paramInfo[ 'default' ] : this.getApiValue();
+                               var v = this.isDisabled() ? this.paramInfo.default : this.getApiValue();
                                return v === undefined ? [] : [ { value: v, path: this.paramInfo.submodules[ v ] } ];
                        },
                        multi: function () {
                                var map = this.paramInfo.submodules,
-                                       v = this.isDisabled() ? this.paramInfo[ 'default' ] : this.getApiValue();
+                                       v = this.isDisabled() ? this.paramInfo.default : this.getApiValue();
                                return v === undefined || v === '' ? [] : String( v ).split( '|' ).map( function ( v ) {
                                        return { value: v, path: map[ v ] };
                                } );
                                        break;
 
                                case 'namespace':
+                                       // eslint-disable-next-line jquery/no-map-util
                                        items = $.map( mw.config.get( 'wgFormattedNamespaces' ), function ( name, ns ) {
                                                if ( ns === '0' ) {
                                                        name = mw.message( 'blanknamespace' ).text();
                                $.extend( finalWidget, WidgetMethods.optionalWidget );
                                if ( widget.getSubmodules ) {
                                        finalWidget.getSubmodules = widget.getSubmodules.bind( widget );
-                                       finalWidget.on( 'disable', function () { setTimeout( ApiSandbox.updateUI ); } );
+                                       finalWidget.on( 'disable', function () {
+                                               setTimeout( ApiSandbox.updateUI );
+                                       } );
                                }
                                if ( widget.getApiValueForTemplates ) {
                                        finalWidget.getApiValueForTemplates = widget.getApiValueForTemplates.bind( widget );
                                finalWidget.setDisabled( true );
                        }
 
-                       widget.setApiValue( pi[ 'default' ] );
+                       widget.setApiValue( pi.default );
 
                        return finalWidget;
                },
                                                                .text( data )
                                                                .appendTo( $result );
                                                }
-                                               if ( paramsAreForced || data[ 'continue' ] ) {
+                                               if ( paramsAreForced || data.continue ) {
                                                        $result.append(
                                                                $( '<div>' ).append(
                                                                        new OO.ui.ButtonWidget( {
                                                                                label: mw.message( 'apisandbox-continue' ).text()
                                                                        } ).on( 'click', function () {
-                                                                               ApiSandbox.sendRequest( $.extend( {}, baseRequestParams, data[ 'continue' ] ) );
-                                                                       } ).setDisabled( !data[ 'continue' ] ).$element,
+                                                                               ApiSandbox.sendRequest( $.extend( {}, baseRequestParams, data.continue ) );
+                                                                       } ).setDisabled( !data.continue ).$element,
                                                                        ( clear = new OO.ui.ButtonWidget( {
                                                                                label: mw.message( 'apisandbox-continue-clear' ).text()
                                                                        } ).on( 'click', function () {
                this.templatedItemsCache = {};
                this.tokenWidget = null;
                this.indentLevel = config.indentLevel ? config.indentLevel : 0;
-               ApiSandbox.PageLayout[ 'super' ].call( this, config.key, config );
+               ApiSandbox.PageLayout.super.call( this, config.key, config );
                this.loadParamInfo();
        };
        OO.inheritClass( ApiSandbox.PageLayout, OO.ui.PageLayout );
 
        function widgetLabelOnClick() {
                var f = this.getField();
-               if ( $.isFunction( f.setDisabled ) ) {
+               if ( typeof f.setDisabled === 'function' ) {
                        f.setDisabled( false );
                }
-               if ( $.isFunction( f.focus ) ) {
+               if ( typeof f.focus === 'function' ) {
                        f.focus();
                }
        }
                }
 
                toRemove = {};
-               // eslint-disable-next-line no-restricted-properties
+               // eslint-disable-next-line jquery/no-each-util
                $.each( this.templatedItemsCache, function ( k, el ) {
                        if ( el.widget.isElementAttached() ) {
                                toRemove[ k ] = el;
                        };
                } );
                doProcess = function ( placeholder, target ) {
-                       var values, container, index, usedVars, done;
+                       var values, container, index, usedVars, done, items, i;
 
                        target = prefix + target;
 
                        done = $.isEmptyObject( p.vars );
                        if ( done ) {
                                container = Util.apiBool( p.info.deprecated ) ? that.deprecatedItemsFieldset : that.itemsFieldset;
-                               index = container.getItems().findIndex( function ( el ) {
-                                       return el.apiParamIndex !== undefined && el.apiParamIndex > p.info.index;
-                               } );
-                               if ( index < 0 ) {
-                                       index = undefined;
+                               items = container.getItems();
+                               index = undefined;
+                               for ( i = 0; i < items.length; i++ ) {
+                                       if ( items[ i ].apiParamIndex !== undefined && items[ i ].apiParamIndex > p.info.index ) {
+                                               index = i;
+                                               break;
+                                       }
                                }
                        }
                        values.forEach( function ( value ) {
                                        }
                                } else {
                                        newVars = {};
+                                       // eslint-disable-next-line jquery/no-each-util
                                        $.each( p.vars, function ( k, v ) {
                                                newVars[ k ] = v.replace( placeholder, value );
                                        } );
                };
                while ( toProcess.length ) {
                        p = toProcess.shift();
+                       // eslint-disable-next-line jquery/no-each-util
                        $.each( p.vars, doProcess );
                }
 
+               // eslint-disable-next-line jquery/no-map-util
                toRemove = $.map( toRemove, function ( el, name ) {
                        delete that.widgets[ name ];
                        return [ el.widgetField, el.helpField ];
                                        for ( i = 0; i < pi.parameters.length; i++ ) {
                                                if ( pi.parameters[ i ].name === 'action' ) {
                                                        pi.parameters[ i ].required = true;
-                                                       delete pi.parameters[ i ][ 'default' ];
+                                                       delete pi.parameters[ i ].default;
                                                }
                                                if ( pi.parameters[ i ].name === 'format' ) {
                                                        tmp = pi.parameters[ i ].type;
                                                                availableFormats[ tmp[ j ] ] = true;
                                                        }
                                                        pi.parameters[ i ].type = tmp.filter( filterFmModules );
-                                                       pi.parameters[ i ][ 'default' ] = 'json';
+                                                       pi.parameters[ i ].default = 'json';
                                                        pi.parameters[ i ].required = true;
                                                }
                                        }
                if ( this.paramInfo === null ) {
                        return [];
                } else {
+                       // eslint-disable-next-line jquery/no-map-util
                        promises = $.map( this.widgets, function ( widget ) {
                                return widget.apiCheckValid();
                        } );
                if ( this.paramInfo === null ) {
                        this.loadFromQueryParams = params;
                } else {
+                       // eslint-disable-next-line jquery/no-each-util
                        $.each( this.widgets, function ( name, widget ) {
                                var v = Object.prototype.hasOwnProperty.call( params, name ) ? params[ name ] : undefined;
                                widget.setApiValue( v );
         * @param {Object} displayParams Write query parameters for display into this object
         */
        ApiSandbox.PageLayout.prototype.getQueryParams = function ( params, displayParams ) {
+               // eslint-disable-next-line jquery/no-each-util
                $.each( this.widgets, function ( name, widget ) {
                        var value = widget.getApiValue();
                        if ( value !== undefined ) {
                                params[ name ] = value;
-                               if ( $.isFunction( widget.getApiValueForDisplay ) ) {
+                               if ( typeof widget.getApiValueForDisplay === 'function' ) {
                                        value = widget.getApiValueForDisplay();
                                }
                                displayParams[ name ] = value;
         */
        ApiSandbox.PageLayout.prototype.getSubpages = function () {
                var ret = [];
+               // eslint-disable-next-line jquery/no-each-util
                $.each( this.widgets, function ( name, widget ) {
                        var submodules, i;
-                       if ( $.isFunction( widget.getSubmodules ) ) {
+                       if ( typeof widget.getSubmodules === 'function' ) {
                                submodules = widget.getSubmodules();
                                for ( i = 0; i < submodules.length; i++ ) {
                                        ret.push( {
index c013994..c319294 100644 (file)
@@ -1,5 +1,6 @@
 .mw-block-page-restrictions {
        margin-left: 2em;
+
        .oo-ui-widget {
                max-width: 48em;
        }
index 34b0836..db33f4a 100644 (file)
        content: '. .';
 }
 
-.mw-changeslist-link-list {
-       display: inline-block;
-       /* In @media print, list elements have margins and/or paddings defined.
-       We don't want to see margins/paddings on these elements under any circumstances. */
-       margin: 0;
-       padding: 0;
-
+.comment--without-parentheses,
+.mw-changeslist-links,
+.mw-diff-bytes,
+.mw-tag-markers,
+.mw-uctop {
        &:before {
                content: '@{msg-parentheses-start}';
        }
+
        &:after {
                content: '@{msg-parentheses-end}';
        }
+}
 
-       > li {
-               display: inline;
+.mw-changeslist-links {
+       display: inline-block;
 
-               &:not( :first-child ):before {
-                       content: '@{msg-pipe-separator}';
-               }
+       > span:not( :first-child ):before {
+               content: '@{msg-pipe-separator}';
        }
 }
index 5869303..37d3a16 100644 (file)
@@ -17,6 +17,7 @@
 #preferences > fieldset table {
        width: 100%;
 }
+
 #preferences > fieldset table.mw-htmlform-matrix {
        width: auto;
 }
index 6f91ad2..b1931f4 100644 (file)
 .mw-email-authenticated .oo-ui-labelWidget { }
 */
 
+/*
+ * Use `position: sticky` on supported browsers, degrades gracefully in
+ * all others, therefore no `@supports` feature query to reduce code complexity.
+ */
+.mw-prefs-buttons {
+       background-color: #fff;
+       position: -webkit-sticky;
+       position: sticky;
+       bottom: 0;
+       margin-top: -1px;
+       border-top: 1px solid #c8ccd1;
+       padding: 1em 0;
+}
+
 /* This is needed because add extra buttons in a weird way */
 .mw-prefs-buttons .mw-htmlform-submit-buttons {
        display: inline;
        margin: 0;
 }
 
-.mw-prefs-buttons {
-       margin-top: 1em;
-}
-
 #prefcontrol {
        margin-right: 0.5em;
 }
index 7265399..81c8dc9 100644 (file)
@@ -1,11 +1,10 @@
-/* interwiki search results */
-/*==========================*/
+/* Interwiki search results */
+/* ======================== */
 
 @import 'mediawiki.ui/variables.less';
 @import 'mediawiki.mixins';
 
 .mw-searchresults-has-iw {
-
        .iw-headline {
                font-weight: bold;
        }
        }
 
        .iw-result__title {
-               font-size: 108%; /* matching regular search title */
+               font-size: 108%; /* Matching regular search title */
        }
 
        .iw-result:after,
-       .iw-result__content:after { /* clearfix */
+       .iw-result__content:after { /* Clearfix */
                visibility: hidden;
                display: block;
                font-size: 0;
 
        .iw-result__footer {
                float: right;
-               font-size: 97%; /* matching main search result font-size */
+               font-size: 97%; /* Matching main search result font-size */
                margin-top: 0.5em;
        }
+
        .iw-result__footer a {
                vertical-align: middle;
                font-style: italic;
@@ -54,7 +54,7 @@
                padding-right: 1em;
        }
 
-       /* image search result */
+       /* Image search result */
        .iw-result__mini-gallery {
                position: relative;
                float: left;
@@ -64,7 +64,7 @@
                padding: 0.25rem;
        }
 
-       /* second and third images are small */
+       /* Second and third images are small */
        .iw-result__mini-gallery:nth-child( 2 ),
        .iw-result__mini-gallery:nth-child( 3 ) { /* stylelint-disable-line indentation */
                width: 50%;
@@ -82,7 +82,7 @@
                background-position: center center;
        }
 
-       /* image gallery text */
+       /* Image gallery text */
        .iw-result__mini-gallery__image > .iw-result__mini-gallery__caption {
                visibility: hidden;
                position: absolute;
                visibility: visible;
        }
 
-       /* tablet and up */
-
+       /* Tablet and up */
        @media only screen and ( min-width: @width-breakpoint-tablet ) {
-
                #mw-interwiki-results {
                        width: 30%;
-                       display: inline-block; /* used to align interwiki sidebar with the top of the main search results */
-                       margin-left: 8%; /* since inline-block causes whitespace issues, this is 8 instead of 10% */
+                       display: inline-block; /* Used to align interwiki sidebar with the top of the main search results */
+                       margin-left: 8%; /* Since inline-block causes whitespace issues, this is 8 instead of 10% */
                }
+
                .mw-search-createlink,
                .mw-search-nonefound,
                .mw-search-results,
index 59a15a9..1179f90 100644 (file)
 .searchresult {
        display: inline !ie;
 }
+
 .searchresults {
        margin: 1em 0 1em 0.4em;
 }
+
 /* needs extra specificity to override `.mw-body p` selector */
 .mw-body .mw-search-nonefound {
        margin: 0;
 .mw-search-visualclear {
        clear: both;
 }
+
 .mw-search-results li {
        padding-bottom: 1.2em;
        list-style: none;
        list-style-image: none;
 }
+
 .mw-search-results li a {
        font-size: 108%;
 }
+
 .mw-search-result-data {
        color: #008000;
        font-size: 97%;
 }
+
 .mw-search-profile-tabs {
        background-color: #f8f9fa;
        margin-top: 1em;
        border: 1px solid #c8ccd1;
        border-radius: 2px;
 }
+
 .search-types {
        float: left;
        padding-left: 0.25em;
 }
+
 .search-types ul {
        margin: 0;
        padding: 0;
        list-style: none;
 }
+
 .search-types li {
        float: left;
        margin: 0;
        padding: 0;
 }
+
 .search-types a {
        display: block;
        padding: 0.5em;
 }
+
 .search-types .current a {
        color: #222;
        cursor: default;
 }
+
 .search-types .current a:hover {
        text-decoration: none;
 }
+
 .results-info {
        float: right;
        padding: 0.5em;
        color: #54595d;
        font-size: 95%;
 }
+
 #mw-search-top-table div.oo-ui-actionFieldLayout {
        float: left;
        width: 100%;
 }
 
 /* Advanced options menu */
-/*==========================*/
+/* ===================== */
 
 #mw-searchoptions {
        /* Support: Firefox, needs `clear: both` on `fieldset` when zoom level > 100%, see T176499 */
        border: 1px solid #c8ccd1;
        border-radius: 0 0 2px 2px;
 }
+
 #mw-searchoptions legend {
        display: none;
 }
+
 #mw-searchoptions h4 {
        padding: 0;
        margin: 0;
        float: left;
 }
+
 #mw-searchoptions table {
        float: left;
        margin-right: 3em;
        border-collapse: collapse;
 }
+
 #mw-searchoptions table td {
        padding: 0 1em 0 0;
        white-space: nowrap;
 }
+
 #mw-searchoptions .divider {
        clear: both;
        border-bottom: 1px solid #eaecf0;
        padding-top: 0.5em;
        margin-bottom: 0.5em;
 }
+
 #mw-search-menu {
        padding-left: 6em;
        font-size: 85%;
 #mw-search-interwiki li {
        font-size: 95%;
 }
+
 .mw-search-interwiki-more {
        float: right;
        font-size: 90%;
 }
+
 #mw-search-interwiki-caption {
        text-align: center;
        font-weight: bold;
        font-size: 95%;
 }
+
 .mw-search-interwiki-project {
        font-size: 97%;
        text-align: left;
index aad784e..e55c785 100644 (file)
@@ -1,9 +1,11 @@
 #mw-search-togglebox {
        float: right;
 }
+
 #mw-search-togglebox label {
        margin-right: 0.25em;
 }
+
 #mw-search-togglebox input {
        margin-left: 0.25em;
 }
index fe013bc..97a986e 100644 (file)
        background-color: #f8f9fa;
        color: #36c;
 }
+
 #mw-createaccount-join:hover {
        background-color: #fff;
        border-color: #859ecc;
        box-shadow: none;
 }
+
 #mw-createaccount-join:active {
        background-color: #eff3fa;
        color: #2a4b8d;
        border-color: #2a4b8d;
 }
+
 #mw-createaccount-join:focus {
        border-color: #36c;
        box-shadow: inset 0 0 0 1px #36c;
index 0404c45..35cdee7 100644 (file)
@@ -68,6 +68,7 @@
 .mw-uctop {
        font-weight: bold;
 }
+
 .mw-contributions-form select {
        vertical-align: middle;
 }
@@ -92,6 +93,7 @@
 .mw-listgrouprights-table tr {
        vertical-align: top;
 }
+
 .listgrouprights-revoked {
        text-decoration: line-through;
 }
        white-space: nowrap;
        font-size: 90%;
 }
+
 .mw-protectedpages-unknown {
        color: #72777d;
        font-size: 90%;
index 1ffdf70..14ad695 100644 (file)
@@ -14,6 +14,7 @@
 .mw-userrights-disabled {
        color: #72777d;
 }
+
 .mw-userrights-groups * td,
 .mw-userrights-groups * th {
        padding-right: 1.5em;
index 2b3e8bb..de519cb 100644 (file)
@@ -21,7 +21,7 @@
                                render: function ( data, partialTemplates ) {
                                        var partials = {};
                                        if ( partialTemplates ) {
-                                               /* eslint-disable-next-line no-restricted-properties */
+                                               // eslint-disable-next-line jquery/no-each-util
                                                $.each( partialTemplates, function ( name, template ) {
                                                        partials[ name ] = template.getSource();
                                                } );
index 5781d88..de81d6a 100644 (file)
                        if ( !$tocToggleCheckbox.length && $tocTitle.length && $tocList.length && !$tocToggleLink.length ) {
                                hideToc = mw.cookie.get( 'hidetoc' ) === '1';
 
-                               $tocToggleLink = $( '<a role="button" tabindex="0" class="togglelink"></a>' )
+                               $tocToggleLink = $( '<a>' )
+                                       .attr( {
+                                               role: 'button',
+                                               tabindex: 0
+                                       } )
+                                       .addClass( 'togglelink' )
                                        .text( mw.msg( hideToc ? 'showtoc' : 'hidetoc' ) )
                                        .on( 'click keypress', function ( e ) {
                                                if (
index 8e97c3e..a9e4b78 100644 (file)
@@ -1,6 +1,5 @@
 @import 'mediawiki.mixins';
 @import 'mediawiki.ui/variables';
-@import 'mediawiki.ui/mixins';
 
 // Helpers
 .mixin-mw-ui-anchor-styles( @mainColor ) {
@@ -68,6 +67,7 @@ Styleguide 6.2.1.
        &:hover {
                color: @mainColor;
        }
+
        &:focus,
        &:active {
                color: darken( @mainColor, @colorDarkenPercentage );
index d94a983..b7175d0 100644 (file)
@@ -1,10 +1,49 @@
 @import 'mediawiki.mixins';
 @import 'mediawiki.ui/variables';
-@import 'mediawiki.ui/mixins';
 
 // Buttons
-//
-// All buttons start with mw-ui-button class, modified by other classes.
+// Helper mixins
+// Primary buttons mixin
+.button-colors-primary( @bgColor, @highlightColor, @activeColor ) {
+       background-color: @bgColor;
+       color: #fff;
+       // border of the same color as background so that light background and
+       // dark background buttons are the same height and width
+       border: 1px solid @bgColor;
+
+       &:hover {
+               background-color: @highlightColor;
+               border-color: @highlightColor;
+       }
+
+       &:focus {
+               box-shadow: inset 0 0 0 1px @bgColor, inset 0 0 0 2px #fff;
+       }
+
+       &:active,
+       &.is-on {
+               background-color: @activeColor;
+               border-color: @activeColor;
+               box-shadow: none;
+       }
+
+       &:disabled {
+               background-color: @colorGray12;
+               color: #fff;
+               border-color: @colorGray12;
+
+               // Make sure disabled buttons don't have hover and active states
+               &:hover,
+               &:active {
+                       background-color: @colorGray12;
+                       color: #fff;
+                       border-color: @colorGray12;
+                       box-shadow: none;
+               }
+       }
+}
+
+// All buttons start with `.mw-ui-button` class, modified by other classes.
 // It can be any element.  Due to a lack of a CSS reset, the exact styling of
 // the button depends on what type of element is used.
 // There are two kinds of buttons, the default is a "Call to Action" with an obvious border
 //
 // Styleguide 2.1.
 .mw-ui-button {
-       // Inherit the font rather than apply user agent stylesheet (T72072)
-       font-family: inherit;
-       font-size: 1em;
+       background-color: @colorGray15;
+       color: @colorButtonText;
        // Container layout
        display: inline-block;
+       .box-sizing( border-box );
        min-width: 4em;
        max-width: 28.75em; // equivalent to 460px, @see T95367
-       padding: 0.546875em 1em;
-       line-height: 1.286;
        margin: 0;
+       padding: 0.546875em 1em;
+       border: @border-width-base @border-style-base @border-color-base;
        border-radius: @borderRadius;
-       .box-sizing( border-box );
-
+       // Inherit the font rather than apply user agent stylesheet (T72072)
+       font-family: inherit;
+       font-size: 1em;
+       font-weight: bold;
+       line-height: 1.286;
+       text-align: center;
        // Disable weird iOS styling
        -webkit-appearance: none;
-
        // IE 6 & 7 hack
        // https://stackoverflow.com/a/5838575/365238
        *display: inline; /* stylelint-disable-line declaration-block-no-duplicate-properties */
        zoom: 1;
-
        // Ensure that buttons and inputs are nicely aligned when they have differing heights
        vertical-align: middle;
-
-       // Content styling
-       .button-colors( @colorGray15, #fff, #d9d9d9 );
-       text-align: center;
-       font-weight: bold;
-
        // Interaction styling
        cursor: pointer;
 
+       // Make sure that `color` isn't inheriting from user-agent styles
+       &:visited {
+               color: @colorButtonText;
+       }
+
+       &:hover {
+               background-color: @background-color-base;
+               color: @colorGray4;
+               border-color: @colorGray10;
+       }
+
        &:focus {
+               background-color: @background-color-base;
+               // Make sure that `color` isn't inheriting from user-agent styles
+               color: @colorButtonText;
+               border-color: @colorProgressive;
+               box-shadow: inset 0 0 0 1px @colorProgressive, inset 0 0 0 2px @background-color-base;
                outline-width: 0;
 
                // Remove the inner border and padding in Firefox.
                }
        }
 
-       // `:not()` is used exclusively for `transition`s as both are not supported by IE < 9
-       &:not( :disabled ) {
-               .transition( ~'background-color 100ms, color 100ms, border-color 100ms, box-shadow 100ms' );
+       &:active,
+       &.is-on {
+               background-color: @colorGray12;
+               color: @colorGray1;
+               border-color: @colorGray7;
+               box-shadow: none;
        }
 
-       &:disabled {
-               text-shadow: none;
+       &:disabled,
+       &.mw-ui-quiet.mw-ui-progressive,
+       &.mw-ui-quiet.mw-ui-destructive {
+               background-color: @colorGray12;
+               color: @colorBaseInverted;
+               border-color: @colorGray12;
                cursor: default;
+
+               // Make sure disabled buttons don't have hover and active states
+               &:hover,
+               &:active {
+                       background-color: @colorGray12;
+                       color: @colorBaseInverted;
+                       box-shadow: none;
+                       border-color: @colorGray12;
+               }
+       }
+
+       // `:not()` is used exclusively for `transition`s as both are not supported by IE < 9
+       &:not( :disabled ) {
+               .transition( ~'background-color 100ms, color 100ms, border-color 100ms, box-shadow 100ms' );
        }
 
        // Styling for specific button types
        // -----------------------------------------
 
-       // Big buttons
+       // Quiet buttons
        //
-       // Not all buttons are equal. You can emphasise certain actions over others
-       // using the mw-ui-big class.
+       // Use quiet buttons when they are less important and alongside other progressive or destructive buttons. It should be used for an action that exits the user from the current view/workflow.
+       // Its use is  not recommended on mobile/tablet due to lack of hover state.
        //
        // Markup:
        // <div>
-       //   <button class="mw-ui-button mw-ui-big">.mw-ui-button</button>
-       // </div>
-       // <div>
-       //   <button class="mw-ui-button mw-ui-progressive mw-ui-big">.mw-ui-progressive</button>
+       //   <button class="mw-ui-button mw-ui-quiet">.mw-ui-button</button>
        // </div>
        // <div>
-       //   <button class="mw-ui-button mw-ui-destructive mw-ui-big">.mw-ui-destructive</button>
+       //   <button class="mw-ui-button mw-ui-destructive mw-ui-quiet">.mw-ui-destructive</button>
        // </div>
-       //
-       // Styleguide 2.1.6.
-       &.mw-ui-big {
-               font-size: 1.3em;
-       }
-
-       // Block buttons
-       //
-       // Some buttons might need to be stacked.
-       //
-       // Markup:
        // <div>
-       //   <button class="mw-ui-button mw-ui-block">.mw-ui-button</button>
+       //   <button class="mw-ui-button mw-ui-destructive mw-ui-quiet" disabled>.mw-ui-destructive</button>
        // </div>
        // <div>
-       //   <button class="mw-ui-button mw-ui-progressive mw-ui-block">.mw-ui-progressive</button>
+       //   <button class="mw-ui-button mw-ui-progressive mw-ui-quiet">.mw-ui-progressive</button>
        // </div>
        // <div>
-       //   <button class="mw-ui-button mw-ui-destructive mw-ui-block">.mw-ui-destructive</button>
+       //   <button class="mw-ui-button mw-ui-progressive mw-ui-quiet" disabled>.mw-ui-progressive</button>
        // </div>
        //
-       // Styleguide 2.1.5.
-       &.mw-ui-block {
-               display: block;
-               width: 100%;
-               margin-left: auto;
-               margin-right: auto;
+       // Styleguide 2.1.1.
+       &.mw-ui-quiet {
+               background-color: transparent;
+               // Quiet buttons all start gray, and reveal
+               // progressive/destructive color on hover and active.
+               color: @colorButtonText;
+               border-color: transparent;
+
+               &:hover {
+                       background-color: transparent;
+                       color: @colorButtonTextHighlight;
+                       border-color: transparent;
+                       box-shadow: none;
+               }
+
+               &:active {
+                       background-color: transparent;
+                       color: @colorButtonTextActive;
+                       border-color: transparent;
+               }
+
+               &:focus {
+                       background-color: transparent;
+                       color: @colorButtonText;
+                       border-color: transparent;
+                       box-shadow: none;
+               }
+
+               &:disabled {
+                       background-color: transparent;
+                       color: @colorDisabledText;
+                       border-color: transparent;
+               }
        }
 
        // Progressive buttons
        //   <button class="mw-ui-button mw-ui-progressive" disabled>.mw-ui-progressive</button>
        // </div>
        //
-       // Styleguide 2.1.1.
+       // Styleguide 2.1.2.
        &.mw-ui-progressive {
                .button-colors-primary( @colorProgressive, @colorProgressiveHighlight, @colorProgressiveActive );
 
                &.mw-ui-quiet {
-                       .button-colors-quiet( @colorProgressive, @colorProgressiveHighlight, @colorProgressiveActive );
+                       color: @colorProgressive;
+
+                       &:hover {
+                               background-color: transparent;
+                               color: @colorProgressiveHighlight;
+                       }
+
+                       &:active {
+                               color: @colorProgressiveActive;
+                       }
+
+                       &:focus {
+                               background-color: transparent;
+                               color: @colorProgressive;
+                       }
                }
        }
 
        //   <button class="mw-ui-button mw-ui-destructive" disabled>.mw-ui-destructive</button>
        // </div>
        //
-       // Styleguide 2.1.2.
+       // Styleguide 2.1.3.
        &.mw-ui-destructive {
                .button-colors-primary( @colorDestructive, @colorDestructiveHighlight, @colorDestructiveActive );
 
                &.mw-ui-quiet {
-                       .button-colors-quiet( @colorDestructive, @colorDestructiveHighlight, @colorDestructiveActive );
+                       color: @colorDestructive;
+
+                       &:hover {
+                               background-color: transparent;
+                               color: @colorDestructiveHighlight;
+                       }
+
+                       &:active {
+                               color: @colorDestructiveActive;
+                       }
+
+                       &:focus {
+                               background-color: transparent;
+                               color: @colorDestructive;
+                       }
                }
        }
 
-       // Quiet buttons
+       // Big buttons
        //
-       // Use quiet buttons when they are less important and alongside other progressive or destructive buttons. It should be used for an action that exits the user from the current view/workflow.
-       // Its use is  not recommended on mobile/tablet due to lack of hover state.
+       // Not all buttons are equal. You can emphasise certain actions over others
+       // using the mw-ui-big class.
        //
        // Markup:
        // <div>
-       //   <button class="mw-ui-button mw-ui-quiet">.mw-ui-button</button>
+       //   <button class="mw-ui-button mw-ui-big">.mw-ui-button</button>
        // </div>
        // <div>
-       //   <button class="mw-ui-button mw-ui-destructive mw-ui-quiet">.mw-ui-destructive</button>
+       //   <button class="mw-ui-button mw-ui-progressive mw-ui-big">.mw-ui-progressive</button>
        // </div>
        // <div>
-       //   <button class="mw-ui-button mw-ui-destructive mw-ui-quiet" disabled>.mw-ui-destructive</button>
+       //   <button class="mw-ui-button mw-ui-destructive mw-ui-big">.mw-ui-destructive</button>
        // </div>
+       //
+       // Styleguide 2.1.4.
+       &.mw-ui-big {
+               font-size: 1.3em;
+       }
+
+       // Block buttons
+       //
+       // Some buttons might need to be stacked.
+       //
+       // Markup:
        // <div>
-       //   <button class="mw-ui-button mw-ui-progressive mw-ui-quiet">.mw-ui-progressive</button>
+       //   <button class="mw-ui-button mw-ui-block">.mw-ui-button</button>
        // </div>
        // <div>
-       //   <button class="mw-ui-button mw-ui-progressive mw-ui-quiet" disabled>.mw-ui-progressive</button>
+       //   <button class="mw-ui-button mw-ui-progressive mw-ui-block">.mw-ui-progressive</button>
+       // </div>
+       // <div>
+       //   <button class="mw-ui-button mw-ui-destructive mw-ui-block">.mw-ui-destructive</button>
        // </div>
        //
-       // Styleguide 2.1.3.
-       &.mw-ui-quiet {
-               background: transparent;
-               border: 0;
-               text-shadow: none;
-               .button-colors-quiet( @colorButtonText, @colorButtonTextHighlight, @colorButtonTextActive );
-
-               &:hover,
-               &:focus {
-                       box-shadow: none;
-               }
-
-               &:active,
-               &:disabled {
-                       background: transparent;
-               }
+       // Styleguide 2.1.5.
+       &.mw-ui-block {
+               display: block;
+               width: 100%;
+               margin-left: auto;
+               margin-right: auto;
        }
 }
 
index 0a9023e..09bf9ca 100644 (file)
@@ -2,7 +2,6 @@
 
 @import 'mediawiki.mixins';
 @import 'mediawiki.ui/variables';
-@import 'mediawiki.ui/mixins';
 
 // --------------------------------------------------------------------------
 // Layouts
@@ -37,7 +36,6 @@
 // Styleguide 5.1.
 .mw-ui-vform {
        .box-sizing( border-box );
-
        width: @defaultFormWidth;
 
        // MW currently doesn't use the type attribute everywhere on inputs.
 
        > label {
                display: block;
+               color: @colorText;
                .box-sizing( border-box );
-               .agora-label-styling();
                width: auto;
                margin: 0 0 0.2em;
                padding: 0;
+               font-size: 0.9em;
+
+               * {
+                       font-weight: normal;
+               }
        }
 
        // Override input styling just for checkboxes and radio inputs.
                display: block;
                margin-top: 5px;
        }
-
 }
 
 // --------------------------------------------------------------------------
 // You generally don't need to use this class if <label> is within an Agora
 // form container such as mw-ui-vform
 .mw-ui-label {
-       .agora-label-styling();
-}
+       color: @colorText;
+       font-size: 0.9em;
 
-// Nesting an input  inside a label with this class
-// improves alignment, e.g.
-//
-// <label class="mw-ui-radio-label">
-//   <input type="radio">The label text
-// </label>
-.mw-ui-radio-label {
-       .agora-inline-label-styling();
+       * {
+               font-weight: normal;
+       }
 }
index 461de2f..1600493 100644 (file)
@@ -47,7 +47,6 @@
                @marginIcon: 2 * @iconGutterWidth;
                @width: @iconSize + @marginIcon;
                @sizeIconLarge: ( @iconSize * 1.75) + @marginIcon;
-
                text-indent: -999px;
                overflow: hidden;
                width: @width;
index 4b8b1ee..53c911b 100644 (file)
@@ -2,7 +2,6 @@
 
 @import 'mediawiki.mixins';
 @import 'mediawiki.ui/variables';
-@import 'mediawiki.ui/mixins';
 
 // Text inputs
 //
        vertical-align: middle;
 
        // Normalize & style placeholder text, see T139034
-       /* stylelint-disable indentation */
        .mixin-placeholder( {
                color: @colorGray7;
                opacity: 1;
        } );
-       /* stylelint-enable indentation */
 
        // Firefox: Remove red outline when `required` attribute set and invalid content.
        // See https://developer.mozilla.org/en-US/docs/Web/CSS/:invalid
index a07aa68..0bcded9 100644 (file)
@@ -1,6 +1,5 @@
 @import 'mediawiki.mixins';
 @import 'mediawiki.ui/variables';
-@import 'mediawiki.ui/mixins';
 
 /*
 Text & Anchors
@@ -30,6 +29,7 @@ Styleguide 6.1.
        &.mw-ui-progressive {
                color: @colorProgressive;
        }
+
        &.mw-ui-destructive {
                color: @colorDestructive;
        }
index 69f6961..65fe3d3 100644 (file)
                 */
                getParamValue: function ( param, url ) {
                        // Get last match, stop at hash
-                       var     re = new RegExp( '^[^#]*[&?]' + mw.RegExp.escape( param ) + '=([^&#]*)' ),
+                       var re = new RegExp( '^[^#]*[&?]' + mw.RegExp.escape( param ) + '=([^&#]*)' ),
                                m = re.exec( url !== undefined ? url : location.href );
 
                        if ( m ) {
                }
        };
 
-       /**
-        * Add a little box at the top of the screen to inform the user of
-        * something, replacing any previous message.
-        * Calling with no arguments, with an empty string or null will hide the message
-        *
-        * @method jsMessage
-        * @deprecated since 1.20 Use mw#notify
-        * @param {Mixed} message The DOM-element, jQuery object or HTML-string to be put inside the message box.
-        *  to allow CSS/JS to hide different boxes. null = no class used.
-        */
-       mw.log.deprecate( util, 'jsMessage', 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 mw.notify instead.', 'mw.util.jsMessage' );
-
        /**
         * Initialisation of mw.util.$content
         */
index 45cf597..da2017f 100644 (file)
                 * @param {HTMLElement} el Element that's being tested
                 * @param {Object} [rectangle] Viewport to test against; structured as such:
                 *
-                *      var rectangle = {
-                *              top: topEdge,
-                *              left: leftEdge,
-                *              right: rightEdge,
-                *              bottom: bottomEdge
-                *      }
-                *      Defaults to viewport made from `window`.
+                * var rectangle = {
+                *     top: topEdge,
+                *     left: leftEdge,
+                *     right: rightEdge,
+                *     bottom: bottomEdge
+                * }
+                *
+                * Defaults to viewport made from `window`.
                 *
                 * @return {boolean}
                 */
index 4c3d8d4..3ad6e29 100644 (file)
@@ -40,7 +40,7 @@
                }, config );
 
                // Parent constructor
-               mw.widgets.datetime.CalendarWidget[ 'super' ].call( this, config );
+               mw.widgets.datetime.CalendarWidget.super.call( this, config );
 
                // Mixin constructors
                OO.ui.mixin.TabIndexedElement.call( this, $.extend( {}, config, { $tabIndexed: this.$element } ) );
                if ( dates instanceof Date ) {
                        dates = [ dates ];
                } else if ( Array.isArray( dates ) ) {
-                       dates = dates.filter( function ( dt ) { return dt instanceof Date; } );
+                       dates = dates.filter( function ( dt ) {
+                               return dt instanceof Date;
+                       } );
                        dates.sort();
                } else {
                        dates = [];
                change = visible !== this.isVisible();
 
                // Parent method
-               mw.widgets.datetime.CalendarWidget[ 'super' ].prototype.toggle.call( this, visible );
+               mw.widgets.datetime.CalendarWidget.super.prototype.toggle.call( this, visible );
 
                if ( change ) {
                        if ( visible ) {
index e7afff8..5e4df47 100644 (file)
@@ -50,6 +50,7 @@
                                margin-left: 0;
                        }
                }
+
                .mw-widgets-datetime-calendarWidget-next {
                        float: right;
                }
index d8ec5b5..e8c1b9b 100644 (file)
@@ -1,4 +1,3 @@
-/* eslint-disable no-restricted-properties */
 ( function () {
 
        /**
                                                        parseValue: this.parseSpecValue
                                                };
                                                spec.size = Math.max.apply(
+                                                       // eslint-disable-next-line jquery/no-map-util
                                                        null, $.map( spec.values, function ( v ) { return v.length; } )
                                                );
                                                return spec;
                        }
                }
 
+               // eslint-disable-next-line no-restricted-properties
                if ( v.normalize ) {
+                       // eslint-disable-next-line no-restricted-properties
                        v = v.normalize();
                }
                re = new RegExp( '^\\s*' + v.replace( /([\\{}()|.?*+\-^$\[\]])/g, '\\$1' ), 'i' ); // eslint-disable-line no-useless-escape
index 21aecd6..ef7cea9 100644 (file)
@@ -64,7 +64,7 @@
                this.type = config.type;
 
                // Parent constructor
-               mw.widgets.datetime.DateTimeInputWidget[ 'super' ].call( this, config );
+               mw.widgets.datetime.DateTimeInputWidget.super.call( this, config );
 
                // Mixin constructors
                OO.ui.mixin.IconElement.call( this, config );
                                } else {
                                        maxlength = spec.size;
                                        if ( spec.intercalarySize ) {
-                                               // eslint-disable-next-line no-restricted-properties
+                                               // eslint-disable-next-line jquery/no-each-util
                                                $.each( spec.intercalarySize, reduceFunc );
                                        }
                                        $field = $( '<input>' ).attr( 'type', 'text' )
         * @inheritdoc
         */
        mw.widgets.datetime.DateTimeInputWidget.prototype.setDisabled = function ( disabled ) {
-               mw.widgets.datetime.DateTimeInputWidget[ 'super' ].prototype.setDisabled.call( this, disabled );
+               mw.widgets.datetime.DateTimeInputWidget.super.prototype.setDisabled.call( this, disabled );
 
                // Flag all our fields as disabled
                if ( this.$fields ) {
index e1d4672..c64a550 100644 (file)
@@ -1,4 +1,3 @@
-/* eslint-disable no-restricted-properties */
 ( function () {
 
        /**
@@ -21,7 +20,7 @@
                config = $.extend( {}, config );
 
                // Parent constructor
-               mw.widgets.datetime.DiscordianDateTimeFormatter[ 'super' ].call( this, config );
+               mw.widgets.datetime.DiscordianDateTimeFormatter.super.call( this, config );
        };
 
        /* Setup */
                                break;
 
                        default:
-                               return mw.widgets.datetime.DiscordianDateTimeFormatter[ 'super' ].prototype.getFieldForTag.call( this, tag, params );
+                               return mw.widgets.datetime.DiscordianDateTimeFormatter.super.prototype.getFieldForTag.call( this, tag, params );
                }
 
                if ( spec ) {
                        }
                        if ( spec.values ) {
                                spec.size = Math.max.apply(
+                                       // eslint-disable-next-line jquery/no-map-util
                                        null, $.map( spec.values, function ( v ) { return v.length; } )
                                );
                        }
index 35d4365..06dd2d5 100644 (file)
@@ -1,4 +1,3 @@
-/* eslint-disable no-restricted-properties */
 ( function () {
 
        /**
 
                if ( config.fullMonthNames && !config.shortMonthNames ) {
                        config.shortMonthNames = {};
+                       // eslint-disable-next-line jquery/no-each-util
                        $.each( config.fullMonthNames, function ( k, v ) {
                                config.shortMonthNames[ k ] = v.substr( 0, 3 );
                        } );
                }
                if ( config.shortDayNames && !config.dayLetters ) {
                        config.dayLetters = [];
+                       // eslint-disable-next-line jquery/no-each-util
                        $.each( config.shortDayNames, function ( k, v ) {
                                config.dayLetters[ k ] = v.substr( 0, 1 );
                        } );
                }
                if ( config.fullDayNames && !config.dayLetters ) {
                        config.dayLetters = [];
+                       // eslint-disable-next-line jquery/no-each-util
                        $.each( config.fullDayNames, function ( k, v ) {
                                config.dayLetters[ k ] = v.substr( 0, 1 );
                        } );
                }
                if ( config.fullDayNames && !config.shortDayNames ) {
                        config.shortDayNames = {};
+                       // eslint-disable-next-line jquery/no-each-util
                        $.each( config.fullDayNames, function ( k, v ) {
                                config.shortDayNames[ k ] = v.substr( 0, 3 );
                        } );
@@ -67,7 +70,7 @@
                }, config );
 
                // Parent constructor
-               mw.widgets.datetime.ProlepticGregorianDateTimeFormatter[ 'super' ].call( this, config );
+               mw.widgets.datetime.ProlepticGregorianDateTimeFormatter.super.call( this, config );
 
                // Properties
                this.weekStartsOn = config.weekStartsOn % 7;
 
                if ( this.fullMonthNames && !this.shortMonthNames ) {
                        this.shortMonthNames = {};
+                       // eslint-disable-next-line jquery/no-each-util
                        $.each( this.fullMonthNames, function ( k, v ) {
                                this.shortMonthNames[ k ] = v.substr( 0, 3 );
                        }.bind( this ) );
                }
                if ( this.shortDayNames && !this.dayLetters ) {
                        this.dayLetters = [];
+                       // eslint-disable-next-line jquery/no-each-util
                        $.each( this.shortDayNames, function ( k, v ) {
                                this.dayLetters[ k ] = v.substr( 0, 1 );
                        }.bind( this ) );
                }
                if ( this.fullDayNames && !this.dayLetters ) {
                        this.dayLetters = [];
+                       // eslint-disable-next-line jquery/no-each-util
                        $.each( this.fullDayNames, function ( k, v ) {
                                this.dayLetters[ k ] = v.substr( 0, 1 );
                        }.bind( this ) );
                }
                if ( this.fullDayNames && !this.shortDayNames ) {
                        this.shortDayNames = {};
+                       // eslint-disable-next-line jquery/no-each-util
                        $.each( this.fullDayNames, function ( k, v ) {
                                this.shortDayNames[ k ] = v.substr( 0, 3 );
                        }.bind( this ) );
                }
                if ( !this.dayLetters ) {
                        this.dayLetters = [];
+                       // eslint-disable-next-line jquery/no-each-util
                        $.each( this.shortDayNames, function ( k, v ) {
                                this.dayLetters[ k ] = v.substr( 0, 1 );
                        }.bind( this ) );
                                break;
 
                        default:
-                               return mw.widgets.datetime.ProlepticGregorianDateTimeFormatter[ 'super' ].prototype.getFieldForTag.call( this, tag, params );
+                               return mw.widgets.datetime.ProlepticGregorianDateTimeFormatter.super.prototype.getFieldForTag.call( this, tag, params );
                }
 
                if ( spec ) {
                        spec.parseValue = this.parseSpecValue;
                        if ( spec.values ) {
                                spec.size = Math.max.apply(
+                                       // eslint-disable-next-line jquery/no-map-util
                                        null, $.map( spec.values, function ( v ) { return v.length; } )
                                );
                        }
index 1035786..253784e 100644 (file)
        // 7x7 grid
        width: @calendarWidth / 7;
        line-height: @calendarHeight / 7;
+
        // Don't overlap the hacked-up fake box-shadow border we get when focussed
        &:nth-child( 7n ) {
                width: @calendarWidth / 7 - 0.2em;
                margin-right: 0.2em;
        }
+
        &:nth-child( 7n+1 ) {
                width: @calendarWidth / 7 - 0.2em;
                margin-left: 0.2em;
        }
+
        &:nth-child( 42 ) ~ & {
                line-height: @calendarHeight / 7 - 0.2em;
                margin-bottom: 0.2em;
        // 2x6 grid
        width: @calendarWidth / 2;
        line-height: @calendarHeight / 6;
+
        // Don't overlap the hacked-up fake box-shadow border we get when focussed
        &:nth-child( 2n ) {
                width: @calendarWidth / 2 - 0.2em;
                margin-right: 0.2em;
        }
+
        &:nth-child( 2n+1 ) {
                width: @calendarWidth / 2 - 0.2em;
                margin-left: 0.2em;
        }
+
        &:nth-child( 10 ) ~ & {
                line-height: @calendarHeight / 6 - 0.2em;
                margin-bottom: 0.2em;
        // 5x4 grid
        width: @calendarWidth / 5;
        line-height: @calendarHeight / 4;
+
        // Don't overlap the hacked-up fake box-shadow border we get when focussed
        &:nth-child( 5n ) {
                width: @calendarWidth / 5 - 0.2em;
                margin-right: 0.2em;
        }
+
        &:nth-child( 5n+1 ) {
                width: @calendarWidth / 5 - 0.2em;
                margin-left: 0.2em;
        }
+
        &:nth-child( 15 ) ~ & {
                line-height: @calendarHeight / 4 - 0.2em;
                margin-bottom: 0.2em;
index 01165ca..3c939ab 100644 (file)
@@ -21,6 +21,8 @@
        mw.widgets.CheckMatrixWidget = function MWWCheckMatrixWidget( config ) {
                var $headRow = $( '<tr>' ),
                        $table = $( '<table>' ),
+                       $thead = $( '<thead>' ),
+                       $tbody = $( '<tbody>' ),
                        widget = this;
                config = config || {};
 
                $headRow.append( $( '<td>' ).text( '\u00A0' ) );
 
                // Iterate over the columns object (ignore the value)
-               // eslint-disable-next-line no-restricted-properties
+               // eslint-disable-next-line jquery/no-each-util
                $.each( this.columns, function ( columnLabel ) {
-                       $headRow.append( $( '<td>' ).html( columnLabel ) );
+                       $headRow.append( $( '<th>' ).html( columnLabel ) );
                } );
-               $table.append( $headRow );
+               $thead.append( $headRow );
 
                // Build table
-               // eslint-disable-next-line no-restricted-properties
+               // eslint-disable-next-line jquery/no-each-util
                $.each( this.rows, function ( rowLabel, rowTag ) {
                        var $row = $( '<tr>' ),
                                labelField = new OO.ui.FieldLayout(
@@ -63,7 +65,7 @@
                        $row.append( $( '<td>' ).append( labelField.$element ) );
 
                        // Columns
-                       // eslint-disable-next-line no-restricted-properties
+                       // eslint-disable-next-line jquery/no-each-util
                        $.each( widget.columns, function ( columnLabel, columnTag ) {
                                var thisTag = columnTag + '-' + rowTag,
                                        checkbox = new OO.ui.CheckboxInputWidget( {
                                $row.append( $( '<td>' ).append( checkbox.$element ) );
                        } );
 
-                       $table.append( $row );
+                       $tbody.append( $row );
                } );
+               $table
+                       .addClass( 'mw-htmlform-matrix mw-widget-checkMatrixWidget-matrix' )
+                       .append( $thead, $tbody );
 
                this.$element
                        .addClass( 'mw-widget-checkMatrixWidget' )
                // setDisabled sometimes gets called before the widget is ready
                if ( this.checkboxes && Object.keys( this.checkboxes ).length > 0 ) {
                        // Propagate to all checkboxes and update their disabled state
-                       // eslint-disable-next-line no-restricted-properties
+                       // eslint-disable-next-line jquery/no-each-util
                        $.each( this.checkboxes, function ( name, checkbox ) {
                                checkbox.setDisabled( widget.isTagDisabled( name ) );
                        } );
index cca950f..ccfc726 100644 (file)
@@ -1,4 +1,3 @@
-/* eslint-disable no-restricted-properties */
 /*!
  * MediaWiki Widgets - NamespaceInputWidget class.
  *
@@ -45,6 +44,7 @@
                        exclude = config.exclude || [],
                        mainNamespace = mw.config.get( 'wgNamespaceIds' )[ '' ];
 
+               // eslint-disable-next-line jquery/no-map-util
                options = $.map( mw.config.get( 'wgFormattedNamespaces' ), function ( name, ns ) {
                        if ( ns < mainNamespace || exclude.indexOf( Number( ns ) ) !== -1 ) {
                                return null; // skip
index 18cd68a..76c6718 100644 (file)
                        urls = data.data[ 3 ],
                        self = this;
 
-               // eslint-disable-next-line no-restricted-properties
+               // eslint-disable-next-line jquery/no-each-util
                $.each( titles, function ( i, result ) {
                        items.push( new mw.widgets.TitleOptionWidget(
                                self.getOptionWidgetData(
index 8be1e86..b7f58a6 100644 (file)
@@ -48,6 +48,7 @@
                > .mw-widgets-stashedFileWidget-fileName {
                        float: left;
                }
+
                > .mw-widgets-stashedFileWidget-fileType {
                        color: #72777d;
                        float: right;
index 5540c64..e52d0cd 100644 (file)
                                        width: 3.75em;
                                        height: 3.75em;
                                        left: 0;
+
                                        &:not( .mw-widget-titleOptionWidget-hasImage ) {
                                                background-color: #c8ccd1;
                                                opacity: 0.4;
                                        }
+
                                        &.mw-widget-titleOptionWidget-hasImage {
                                                border: 0;
                                                background-size: cover;
index 71ba33f..f354cdf 100644 (file)
                                // Reset
                                widget.menu.clearItems();
                                widget.menu.addItems( widget.getOptionsFromData( data ) );
+                       } ).always( function () {
+                               // Parent method
+                               mw.widgets.TitlesMultiselectWidget.parent.prototype.onInputChange.call( widget );
                        } );
-
-               mw.widgets.TitlesMultiselectWidget.parent.prototype.onInputChange.call( this );
        };
 
        /**
index c085e60..7445669 100644 (file)
@@ -1,9 +1,6 @@
 {
        "root": true,
-       "extends": "wikimedia",
-       "env": {
-               "browser": true
-       },
+       "extends": "wikimedia/client",
        "rules": {
                "max-len": 0
        }
index 12c60a7..bc5f1fc 100644 (file)
@@ -1136,6 +1136,12 @@ class ParserTestRunner {
                } else {
                        $tidy = false;
                }
+
+               # Suppress warnings about running tests without tidy
+               Wikimedia\suppressWarnings();
+               wfDeprecated( 'disabling tidy' );
+               Wikimedia\restoreWarnings();
+
                MWTidy::setInstance( $tidy );
                $teardown[] = function () {
                        MWTidy::destroySingleton();
@@ -1224,7 +1230,6 @@ class ParserTestRunner {
                        // The new tables for comments are in use
                        $tables[] = 'comment';
                        $tables[] = 'revision_comment_temp';
-                       $tables[] = 'image_comment_temp';
                }
 
                if ( $wgActorTableSchemaMigrationStage & SCHEMA_COMPAT_WRITE_NEW ) {
index 6d5054e..d65e49a 100644 (file)
@@ -1435,7 +1435,7 @@ Non-word characters don't terminate tag names
 !! end
 
 ###
-### See tests/parser/parserTestsParserHook.php for the <tåg> extension)
+### See tests/parser/ParserTestParserHook.php for the <tåg> extension)
 ### This checks that HTML5 tags (with non-word characters in the tag
 ### name) make it safely through the parser -- the Sanitizer will
 ### munge them later, as it should.
@@ -2834,7 +2834,7 @@ two">hi</pre>
 <pre class="one two">hi</pre>
 
 !! html/parsoid
-<pre typeof="mw:Extension/pre" about="#mwt2" class="one two" data-mw='{"name":"pre","attrs":{"class":"one two"},"body":{"extsrc":"hi"}}'>hi</pre>
+<pre class="one two" typeof="mw:Extension/pre" about="#mwt2" data-mw='{"name":"pre","attrs":{"class":"one two"},"body":{"extsrc":"hi"}}'>hi</pre>
 !! end
 
 !! test
@@ -2869,7 +2869,7 @@ parsoid=wt2html
 <pre>x</pre>
 &lt;pre <table></table>
 !! html/parsoid
-<pre typeof="mw:Transclusion mw:Extension/pre" about="#mwt2" data-parsoid='{"stx":"html","a":{"&lt;pre":null},"sa":{"&lt;pre":""},"pi":[[{"k":"1"}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"&lt;pre &lt;pre>x&lt;/pre>"}},"i":0}}]}'>x</pre>
+<pre typeof="mw:Extension/pre mw:Transclusion" about="#mwt2" data-parsoid='{"stx":"html","a":{"&lt;pre":null},"sa":{"&lt;pre":""},"pi":[[{"k":"1"}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"&lt;pre &lt;pre>x&lt;/pre>"}},"i":0}}]}'>x</pre>
 
 <pre data-parsoid='{"stx":"html","src":"&lt;pre &lt;/table>","tagWidths":[13,0],"a":{"&lt;":null,"table":null},"sa":{"&lt;":"","table":""},"fostered":true,"autoInsertedEnd":true}'></pre><table data-parsoid='{"stx":"html","autoInsertedEnd":true}'></table>
 !! end
@@ -3681,7 +3681,7 @@ array (
  <pre class="123">hi</pre>
 
 !! html/parsoid
- <pre typeof="mw:Extension/pre" about="#mwt2" class="123" data-mw='{"name":"pre","attrs":{"class":"123"},"body":{"extsrc":"hi"}}'>hi</pre>
+ <pre class="123" typeof="mw:Extension/pre" about="#mwt2" data-mw='{"name":"pre","attrs":{"class":"123"},"body":{"extsrc":"hi"}}'>hi</pre>
 !! end
 
 !!test
@@ -6273,8 +6273,6 @@ parsoid=wt2html
 
 !! end
 
-# Note that the PHP parser output appears to be broken when the table
-# end tag is not separated by a space from the style attribute
 !! test
 A table with stray table end tags on start tag line (wt2html)
 !! options
@@ -6294,13 +6292,13 @@ parsoid=wt2html
 |foo
 |}
 !! html/php+tidy
-<table style="&quot;color:">
+<table style="color: red;">
 
 </table><table style="color: red;">
 <tbody><tr>
 <td>foo
 </td></tr></tbody></table>
-<table style="&quot;color:" id="foo">
+<table style="color: red;" id="foo">
 <tbody><tr>
 <td>foo
 </td></tr></tbody></table>
@@ -6925,9 +6923,9 @@ Don't break on | in extension attribute in template
 
 <references />
 !! html/parsoid
-<p><sup about="#mwt2" class="mw-ref" id="cite_ref-hi|ho_1-0" rel="dc:references" typeof="mw:Transclusion  mw:Extension/ref" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"&lt;ref name=\"hi|ho\">ha&lt;/ref>"}},"i":0}}]}'><a href="./Main_Page#cite_note-hi|ho-1" style="counter-reset: mw-Ref 1;"><span class="mw-reflink-text">[1]</span></a></sup></p>
+<p><sup about="#mwt2" class="mw-ref" id="cite_ref-hi|ho_1-0" rel="dc:references" typeof="mw:Transclusion  mw:Extension/ref" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"&lt;ref name=\"hi|ho\">ha&lt;/ref>"}},"i":0}}]}'><a href="./Parser_test#cite_note-hi|ho-1" style="counter-reset: mw-Ref 1;"><span class="mw-reflink-text">[1]</span></a></sup></p>
 
-<ol class="mw-references references" typeof="mw:Extension/references" about="#mwt5" data-mw='{"name":"references","attrs":{}}'><li about="#cite_note-hi|ho-1" id="cite_note-hi|ho-1"><a href="./Main_Page#cite_ref-hi|ho_1-0" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-hi|ho-1" class="mw-reference-text">ha</span></li></ol>
+<ol class="mw-references references" typeof="mw:Extension/references" about="#mwt5" data-mw='{"name":"references","attrs":{}}'><li about="#cite_note-hi|ho-1" id="cite_note-hi|ho-1"><a href="./Parser_test#cite_ref-hi|ho_1-0" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-hi|ho-1" class="mw-reference-text">ha</span></li></ol>
 !! end
 
 ## We don't support roundtripping of these attributes in Parsoid.
@@ -7100,9 +7098,9 @@ T107652: <ref>s in templates that also generate table cell attributes should be
 <references />
 !! html/parsoid
 <table>
-<tbody><tr><td style="background:#f9f9f9;" typeof="mw:Transclusion" about="#mwt1" data-mw='{"parts":["|",{"template":{"target":{"wt":"table_attribs_7","href":"./Template:Table_attribs_7"},"params":{},"i":0}}]}'>Foo<sup class="mw-ref" id="cite_ref-1" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","attrs":{},"body":{"id":"mw-reference-text-cite_note-1"}}'><a href="./Main_Page#cite_note-1" style="counter-reset: mw-Ref 1;"><span class="mw-reflink-text">[1]</span></a></s></td></tr>
+<tbody><tr><td style="background:#f9f9f9;" typeof="mw:Transclusion" about="#mwt1" data-mw='{"parts":["|",{"template":{"target":{"wt":"table_attribs_7","href":"./Template:Table_attribs_7"},"params":{},"i":0}}]}'>Foo<sup class="mw-ref" id="cite_ref-1" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","attrs":{},"body":{"id":"mw-reference-text-cite_note-1"}}'><a href="./Parser_test#cite_note-1" style="counter-reset: mw-Ref 1;"><span class="mw-reflink-text">[1]</span></a></s></td></tr>
 </tbody></table>
-<ol class="mw-references references" typeof="mw:Extension/references" about="#mwt5" data-mw='{"name":"references","attrs":{}}'><li about="#cite_note-1" id="cite_note-1"><a href="./Main_Page#cite_ref-1" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-1" class="mw-reference-text" data-parsoid="{}">foo</span></li></ol>
+<ol class="mw-references references" typeof="mw:Extension/references" about="#mwt5" data-mw='{"name":"references","attrs":{}}'><li about="#cite_note-1" id="cite_note-1"><a href="./Parser_test#cite_ref-1" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-1" class="mw-reference-text" data-parsoid="{}">foo</span></li></ol>
 !! end
 
 !! test
@@ -8044,6 +8042,8 @@ Link containing % as a double hex sequence interpreted to hex sequence
 ## Example for such a section: == < ==
 !! test
 Link containing "#<" and "#>" % as a hex sequences- these are valid section anchors
+!! options
+title=[[Main Page]]
 !! config
 wgFragmentMode=[ 'html5', 'legacy' ]
 !! wikitext
@@ -8822,6 +8822,8 @@ Interwiki link with fragment (T4130)
 
 !! test
 Link scenarios with escaped fragments
+!! options
+title=[[Main Page]]
 !! config
 wgFragmentMode=[ 'html5', 'legacy' ]
 !! wikitext
@@ -9648,17 +9650,14 @@ Handling html with a div self-closing tag
 <div title=bar />
 <div title=bar/>
 <div title=bar/ >
-!! html/php
-<p>&lt;div title /&gt;
-&lt;div title/&gt;
-</p>
-<div>
-<p>&lt;div title=bar /&gt;
-&lt;div title=bar/&gt;
-</p>
-<div title="bar/"></div>
-</div>
-
+!! html/php+tidy
+<div title=""></div>
+<div title=""></div>
+<div title="">
+<div title="bar"></div>
+<div title="bar"></div>
+<div title="bar/">
+</div></div>
 !! html/parsoid
 <div title="" data-parsoid='{"stx":"html","selfClose":true}'></div>
 <div title="" data-parsoid='{"stx":"html","selfClose":true}'></div>
@@ -9699,10 +9698,10 @@ Handling html with a br self-closing tag
 <br title=bar />
 <br title=bar/>
 <br title=bar/ >
-!! html/php
+!! html/php+tidy
 <p><br title="" />
 <br title="" />
-<br />
+<br title="" />
 <br title="bar" />
 <br title="bar" />
 <br title="bar/" />
@@ -9717,6 +9716,18 @@ Handling html with a br self-closing tag
 </p>
 !! end
 
+!! test
+Quoted attributes without spaces
+!! options
+parsoid=wt2html
+!! wikitext
+<div class="foo"style="color:red">red</div>
+!! html/php+tidy
+<div class="foo" style="color:red">red</div>
+!! html/parsoid
+<div class="foo" style="color:red">red</div>
+!! end
+
 !! test
 Horizontal ruler (should it add that extra space?)
 !! wikitext
@@ -11024,7 +11035,7 @@ wgRestrictDisplayTitle=false
 <i>Parser test</i>
 
 !! html/parsoid
-<meta property="mw:PageProp/displaytitle" content="Main Page" about="#mwt3" typeof="mw:ExpandedAttrs" data-parsoid='{"src":"{{DISPLAYTITLE:&#39;&#39;{{PAGENAME}}&#39;&#39;}}"}' data-mw='{"attribs":[[{"txt":"content"},{"html":"DISPLAYTITLE:&lt;i data-parsoid=&#39;{\"dsr\":[15,31,2,2]}&#39;>&lt;span about=\"#mwt1\" typeof=\"mw:Transclusion\" data-parsoid=&#39;{\"pi\":[[]],\"dsr\":[17,29,null,null]}&#39; data-mw=&#39;{\"parts\":[{\"template\":{\"target\":{\"wt\":\"PAGENAME\",\"function\":\"pagename\"},\"params\":{},\"i\":0}}]}&#39;>Main Page&lt;/span>&lt;/i>"}]]}'/>
+<meta property="mw:PageProp/displaytitle" content="Parser test" about="#mwt3" typeof="mw:ExpandedAttrs" data-parsoid='{"src":"{{DISPLAYTITLE:&#39;&#39;{{PAGENAME}}&#39;&#39;}}"}' data-mw='{"attribs":[[{"txt":"content"},{"html":"DISPLAYTITLE:&lt;i data-parsoid=&#39;{\"dsr\":[15,31,2,2]}&#39;>&lt;span about=\"#mwt1\" typeof=\"mw:Transclusion\" data-parsoid=&#39;{\"pi\":[[]],\"dsr\":[17,29,null,null]}&#39; data-mw=&#39;{\"parts\":[{\"template\":{\"target\":{\"wt\":\"PAGENAME\",\"function\":\"pagename\"},\"params\":{},\"i\":0}}]}&#39;>Parser test&lt;/span>&lt;/i>"}]]}'/>
 !! end
 
 # NOTE: mw:ExpandedAttrs is not the best typeof here. mw:Transclusion is better.
@@ -12725,7 +12736,7 @@ array (
 <li><span typeof="mw:Nowiki">foo-{bar}bat</span></li>
 <li><span typeof="mw:Transclusion mw:Nowiki" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"&lt;nowiki>foo-{bar}bat&lt;/nowiki>"}},"i":0}}]}'>foo-{bar}bat</span></li>
 <li><pre typeof="mw:Extension/pre" data-mw='{"name":"pre","attrs":{},"body":{"extsrc":"foo-{bar}bat"}}'>foo-{bar}bat</pre></li>
-<li><pre typeof="mw:Transclusion mw:Extension/pre" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"&lt;pre>foo-{bar}bat&lt;/pre>"}},"i":0}}]}'>foo-{bar}bat</pre></li>
+<li><pre typeof="mw:Extension/pre mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"&lt;pre>foo-{bar}bat&lt;/pre>"}},"i":0}}]}'>foo-{bar}bat</pre></li>
 </ul>
 <pre typeof="mw:Extension/tag" data-mw='{"name":"tag","attrs":{},"body":{"extsrc":"foo-{bar}bat"}}'></pre> <pre typeof="mw:Extension/tag mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"&lt;tag>foo-{bar}bat&lt;/tag>"}},"i":0}}]}'></pre>
 !! end
@@ -13647,11 +13658,11 @@ Templates: Wiki Tables: 7. Fosterable <ref>s should get fostered
 
 <references />
 !! html/parsoid
-<p about="#mwt2" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"PartialTable","href":"./Template:PartialTable"},"params":{},"i":0}},"&lt;ref>foo&lt;/ref>\n|}"]}'><sup about="#mwt3" class="mw-ref" id="cite_ref-1" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","attrs":{},"body":{"id":"mw-reference-text-cite_note-1"}}'><a href="./Main_Page#cite_note-1" style="counter-reset: mw-Ref 1;"><span class="mw-reflink-text">[1]</span></a></sup></p><table about="#mwt2">
+<p about="#mwt2" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"PartialTable","href":"./Template:PartialTable"},"params":{},"i":0}},"&lt;ref>foo&lt;/ref>\n|}"]}'><sup about="#mwt3" class="mw-ref" id="cite_ref-1" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","attrs":{},"body":{"id":"mw-reference-text-cite_note-1"}}'><a href="./Parser_test#cite_note-1" style="counter-reset: mw-Ref 1;"><span class="mw-reflink-text">[1]</span></a></sup></p><table about="#mwt2">
 <tbody>
 </tbody></table>
 
-<ol class="mw-references references" typeof="mw:Extension/references" about="#mwt5" data-mw='{"name":"references","attrs":{}}'><li about="#cite_note-1" id="cite_note-1"><a href="./Main_Page#cite_ref-1" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-1" class="mw-reference-text">foo</span></li></ol>
+<ol class="mw-references references" typeof="mw:Extension/references" about="#mwt5" data-mw='{"name":"references","attrs":{}}'><li about="#cite_note-1" id="cite_note-1"><a href="./Parser_test#cite_ref-1" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-1" class="mw-reference-text">foo</span></li></ol>
 !! end
 
 !! test
@@ -13827,6 +13838,7 @@ Parser Functions: 2. Nested use (only outermost should be marked up)
 !! test
 Template nested in extension tag in template
 !! options
+title=[[Main Page]]
 language=zh
 !! wikitext
 {{echo|hi<ref>[[ho|{{echo|hi}}]]</ref>}}
@@ -13834,10 +13846,10 @@ language=zh
 {{echo|hi<ref>-{ho|{{echo|hi}}}-</ref>}}
 <references />
 !! html/parsoid
-<p><span about="#mwt2" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"hi&lt;ref>[[ho|{{echo|hi}}]]&lt;/ref>"}},"i":0}}]}'>hi</span><sup about="#mwt2" class="mw-ref" id="cite_ref-1" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","attrs":{},"body":{"id":"mw-reference-text-cite_note-1"}}'><a href="./Wikipedia:首页#cite_note-1" style="counter-reset: mw-Ref 1;"><span class="mw-reflink-text">[1]</span></a></sup>
-<span about="#mwt8" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"hi&lt;ref>[http://test.com?q={{echo|ho}}]&lt;/ref>"}},"i":0}}]}'>hi</span><sup about="#mwt8" class="mw-ref" id="cite_ref-2" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","attrs":{},"body":{"id":"mw-reference-text-cite_note-2"}}'><a href="./Wikipedia:首页#cite_note-2" style="counter-reset: mw-Ref 2;"><span class="mw-reflink-text">[2]</span></a></sup>
-<span about="#mwt13" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"hi&lt;ref>-{ho|{{echo|hi}}}-&lt;/ref>"}},"i":0}}]}'>hi</span><sup about="#mwt13" class="mw-ref" id="cite_ref-3" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","attrs":{},"body":{"id":"mw-reference-text-cite_note-3"}}'><a href="./Wikipedia:首页#cite_note-3" style="counter-reset: mw-Ref 3;"><span class="mw-reflink-text">[3]</span></a></sup></p>
-<ol class="mw-references references" typeof="mw:Extension/references" about="#mwt17" data-mw='{"name":"references","attrs":{}}'><li about="#cite_note-1" id="cite_note-1"><a href="./Wikipedia:首页#cite_ref-1" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-1" class="mw-reference-text"><a rel="mw:WikiLink" href="./Ho" title="Ho">hi</a></span></li><li about="#cite_note-2" id="cite_note-2"><a href="./Wikipedia:首页#cite_ref-2" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-2" class="mw-reference-text"><a rel="mw:ExtLink" class="external autonumber" href="http://test.com?q=ho"></a></span></li><li about="#cite_note-3" id="cite_note-3"><a href="./Wikipedia:首页#cite_ref-3" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-3" class="mw-reference-text"><span typeof="mw:LanguageVariant" data-mw-variant='{"filter":{"l":["ho"],"t":"hi"}}'></span></span></li></ol>
+<p><span about="#mwt2" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"hi&lt;ref>[[ho|{{echo|hi}}]]&lt;/ref>"}},"i":0}}]}'>hi</span><sup about="#mwt2" class="mw-ref" id="cite_ref-1" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","attrs":{},"body":{"id":"mw-reference-text-cite_note-1"}}'><a href="./Main_Page#cite_note-1" style="counter-reset: mw-Ref 1;"><span class="mw-reflink-text">[1]</span></a></sup>
+<span about="#mwt8" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"hi&lt;ref>[http://test.com?q={{echo|ho}}]&lt;/ref>"}},"i":0}}]}'>hi</span><sup about="#mwt8" class="mw-ref" id="cite_ref-2" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","attrs":{},"body":{"id":"mw-reference-text-cite_note-2"}}'><a href="./Main_Page#cite_note-2" style="counter-reset: mw-Ref 2;"><span class="mw-reflink-text">[2]</span></a></sup>
+<span about="#mwt13" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"hi&lt;ref>-{ho|{{echo|hi}}}-&lt;/ref>"}},"i":0}}]}'>hi</span><sup about="#mwt13" class="mw-ref" id="cite_ref-3" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","attrs":{},"body":{"id":"mw-reference-text-cite_note-3"}}'><a href="./Main_Page#cite_note-3" style="counter-reset: mw-Ref 3;"><span class="mw-reflink-text">[3]</span></a></sup></p>
+<ol class="mw-references references" typeof="mw:Extension/references" about="#mwt17" data-mw='{"name":"references","attrs":{}}'><li about="#cite_note-1" id="cite_note-1"><a href="./Main_Page#cite_ref-1" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-1" class="mw-reference-text"><a rel="mw:WikiLink" href="./Ho" title="Ho">hi</a></span></li><li about="#cite_note-2" id="cite_note-2"><a href="./Main_Page#cite_ref-2" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-2" class="mw-reference-text"><a rel="mw:ExtLink" class="external autonumber" href="http://test.com?q=ho"></a></span></li><li about="#cite_note-3" id="cite_note-3"><a href="./Main_Page#cite_ref-3" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-3" class="mw-reference-text"><span typeof="mw:LanguageVariant" data-mw-variant='{"filter":{"l":["ho"],"t":"hi"}}'></span></span></li></ol>
 !! end
 
 ###
@@ -15471,6 +15483,37 @@ File:Foobar.jpg|link=Foo<nowiki>''s_bar''</nowiki>s|caption
 </ul>
 !! end
 
+!! test
+HTML entity prefix in link markup (T209236)
+!! wikitext
+[[File:Foobar.jpg|link=https://example.com?foo&params=bar]]
+
+<!-- consistency with gallery extension -->
+<gallery>
+File:Foobar.jpg|link=https://example.com?foo&params=bar
+</gallery>
+!! html/php+tidy
+<p><a href="https://example.com?foo&amp;params=bar" rel="nofollow"><img alt="Foobar.jpg" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
+</p>
+<ul class="gallery mw-gallery-traditional">
+               <li class="gallerybox" style="width: 155px"><div style="width: 155px">
+                       <div class="thumb" style="width: 150px;"><div style="margin:68px auto;"><a href="https://example.com?foo&amp;params=bar"><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
+<p><figure-inline class="mw-default-size" typeof="mw:Image"><a href="https://example.com?foo&amp;params=bar"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941"/></a></figure-inline></p>
+
+<!-- consistency with gallery extension -->
+<ul class="gallery mw-gallery-traditional" typeof="mw:Extension/gallery" data-mw='{"name":"gallery","attrs":{},"body":{"extsrc":"\nFile:Foobar.jpg|link=https://example.com?foo&amp;params=bar\n"}}'>
+<li class="gallerybox">
+<div class="thumb"><figure-inline typeof="mw:Image"><a href="https://example.com?foo&amp;params=bar"><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></figure-inline></div>
+<div class="gallerytext"></div>
+</li>
+</ul>
+!! end
+
 !! test
 Image with table with attributes in caption
 !! options
@@ -16418,9 +16461,9 @@ T93580: 1. Templated <ref> inside block images
 
 <references />
 !! html/parsoid
-<figure class="mw-default-size" typeof="mw:Image/Thumb" data-parsoid='{"optList":[{"ck":"thumbnail","ak":"thumb"},{"ck":"caption","ak":"Caption with templated ref: {{echo|&lt;ref>foo&lt;/ref>}}"}]}'><a href="./File:Foobar.jpg" data-parsoid='{"a":{"href":"./File:Foobar.jpg"},"sa":{}}'><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220" data-parsoid='{"a":{"resource":"./File:Foobar.jpg","height":"25","width":"220"},"sa":{"resource":"File:Foobar.jpg"}}'/></a><figcaption>Caption with templated ref: <sup about="#mwt5" class="mw-ref" id="cite_ref-1" rel="dc:references" typeof="mw:Transclusion  mw:Extension/ref" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"&lt;ref>foo&lt;/ref>"}},"i":0}}]}'><a href="./Main_Page#cite_note-1" style="counter-reset: mw-Ref 1;"><span class="mw-reflink-text">[1]</span></a></sup></figcaption></figure>
+<figure class="mw-default-size" typeof="mw:Image/Thumb" data-parsoid='{"optList":[{"ck":"thumbnail","ak":"thumb"},{"ck":"caption","ak":"Caption with templated ref: {{echo|&lt;ref>foo&lt;/ref>}}"}]}'><a href="./File:Foobar.jpg" data-parsoid='{"a":{"href":"./File:Foobar.jpg"},"sa":{}}'><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220" data-parsoid='{"a":{"resource":"./File:Foobar.jpg","height":"25","width":"220"},"sa":{"resource":"File:Foobar.jpg"}}'/></a><figcaption>Caption with templated ref: <sup about="#mwt5" class="mw-ref" id="cite_ref-1" rel="dc:references" typeof="mw:Transclusion  mw:Extension/ref" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"&lt;ref>foo&lt;/ref>"}},"i":0}}]}'><a href="./Parser_test#cite_note-1" style="counter-reset: mw-Ref 1;"><span class="mw-reflink-text">[1]</span></a></sup></figcaption></figure>
 
-<ol class="mw-references references" typeof="mw:Extension/references" about="#mwt6" data-mw='{"name":"references","attrs":{}}'><li about="#cite_note-1" id="cite_note-1"><a href="./Main_Page#cite_ref-1" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-1" class="mw-reference-text" data-parsoid="{}">foo</span></li></ol>
+<ol class="mw-references references" typeof="mw:Extension/references" about="#mwt6" data-mw='{"name":"references","attrs":{}}'><li about="#cite_note-1" id="cite_note-1"><a href="./Parser_test#cite_ref-1" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-1" class="mw-reference-text" data-parsoid="{}">foo</span></li></ol>
 !! end
 
 !! test
@@ -16430,9 +16473,9 @@ T93580: 2. <ref> inside inline images
 
 <references />
 !! html/parsoid
-<p><figure-inline class="mw-default-size" typeof="mw:Image" data-parsoid='{"optList":[{"ck":"caption","ak":"Undisplayed caption in inline image with ref: &lt;ref>foo&lt;/ref>"}]}' data-mw='{"caption":"Undisplayed caption in inline image with ref: &lt;sup about=\"#mwt2\" class=\"mw-ref\" id=\"cite_ref-1\" rel=\"dc:references\" typeof=\"mw:Extension/ref\" data-parsoid=&#39;{\"dsr\":[64,78,5,6]}&#39; data-mw=&#39;{\"name\":\"ref\",\"attrs\":{},\"body\":{\"id\":\"mw-reference-text-cite_note-1\"}}&#39;>&lt;a href=\"./Main_Page#cite_note-1\" style=\"counter-reset: mw-Ref 1;\" data-parsoid=\"{}\">&lt;span class=\"mw-reflink-text\" data-parsoid=\"{}\">[1]&lt;/span>&lt;/a>&lt;/sup>"}'><a href="./File:Foobar.jpg" data-parsoid='{"a":{"href":"./File:Foobar.jpg"},"sa":{"href":"File:Foobar.jpg"}}'><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941" data-parsoid='{"a":{"resource":"./File:Foobar.jpg","height":"220","width":"1941"},"sa":{"resource":"File:Foobar.jpg"}}'/></a></figure-inline></p>
+<p><figure-inline class="mw-default-size" typeof="mw:Image" data-parsoid='{"optList":[{"ck":"caption","ak":"Undisplayed caption in inline image with ref: &lt;ref>foo&lt;/ref>"}]}' data-mw='{"caption":"Undisplayed caption in inline image with ref: &lt;sup about=\"#mwt2\" class=\"mw-ref\" id=\"cite_ref-1\" rel=\"dc:references\" typeof=\"mw:Extension/ref\" data-parsoid=&#39;{\"dsr\":[64,78,5,6]}&#39; data-mw=&#39;{\"name\":\"ref\",\"attrs\":{},\"body\":{\"id\":\"mw-reference-text-cite_note-1\"}}&#39;>&lt;a href=\"./Parser_test#cite_note-1\" style=\"counter-reset: mw-Ref 1;\" data-parsoid=\"{}\">&lt;span class=\"mw-reflink-text\" data-parsoid=\"{}\">[1]&lt;/span>&lt;/a>&lt;/sup>"}'><a href="./File:Foobar.jpg" data-parsoid='{"a":{"href":"./File:Foobar.jpg"},"sa":{"href":"File:Foobar.jpg"}}'><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941" data-parsoid='{"a":{"resource":"./File:Foobar.jpg","height":"220","width":"1941"},"sa":{"resource":"File:Foobar.jpg"}}'/></a></figure-inline></p>
 
-<ol class="mw-references references" typeof="mw:Extension/references" about="#mwt4" data-mw='{"name":"references","attrs":{}}'><li about="#cite_note-1" id="cite_note-1"><a href="./Main_Page#cite_ref-1" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-1" class="mw-reference-text">foo</span></li></ol>
+<ol class="mw-references references" typeof="mw:Extension/references" about="#mwt4" data-mw='{"name":"references","attrs":{}}'><li about="#cite_note-1" id="cite_note-1"><a href="./Parser_test#cite_ref-1" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-1" class="mw-reference-text">foo</span></li></ol>
 !! end
 
 !! test
@@ -16442,9 +16485,9 @@ T93580: 3. Templated <ref> inside inline images
 
 <references />
 !! html/parsoid
-<p><figure-inline class="mw-default-size" typeof="mw:Image" data-parsoid='{"optList":[{"ck":"caption","ak":"Undisplayed caption in inline image with ref: {{echo|&lt;ref>{{echo|foo}}&lt;/ref>}}"}]}' data-mw='{"caption":"Undisplayed caption in inline image with ref: &lt;sup about=\"#mwt2\" class=\"mw-ref\" id=\"cite_ref-1\" rel=\"dc:references\" typeof=\"mw:Transclusion  mw:Extension/ref\" data-parsoid=&#39;{\"dsr\":[64,96,null,null],\"pi\":[[{\"k\":\"1\"}]]}&#39; data-mw=&#39;{\"parts\":[{\"template\":{\"target\":{\"wt\":\"echo\",\"href\":\"./Template:Echo\"},\"params\":{\"1\":{\"wt\":\"&amp;lt;ref>{{echo|foo}}&amp;lt;/ref>\"}},\"i\":0}}]}&#39;>&lt;a href=\"./Main_Page#cite_note-1\" style=\"counter-reset: mw-Ref 1;\" data-parsoid=\"{}\">&lt;span class=\"mw-reflink-text\" data-parsoid=\"{}\">[1]&lt;/span>&lt;/a>&lt;/sup>"}'><a href="./File:Foobar.jpg" data-parsoid='{"a":{"href":"./File:Foobar.jpg"},"sa":{"href":"File:Foobar.jpg"}}'><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941" data-parsoid='{"a":{"resource":"./File:Foobar.jpg","height":"220","width":"1941"},"sa":{"resource":"File:Foobar.jpg"}}'/></a></figure-inline></p>
+<p><figure-inline class="mw-default-size" typeof="mw:Image" data-parsoid='{"optList":[{"ck":"caption","ak":"Undisplayed caption in inline image with ref: {{echo|&lt;ref>{{echo|foo}}&lt;/ref>}}"}]}' data-mw='{"caption":"Undisplayed caption in inline image with ref: &lt;sup about=\"#mwt2\" class=\"mw-ref\" id=\"cite_ref-1\" rel=\"dc:references\" typeof=\"mw:Transclusion  mw:Extension/ref\" data-parsoid=&#39;{\"dsr\":[64,96,null,null],\"pi\":[[{\"k\":\"1\"}]]}&#39; data-mw=&#39;{\"parts\":[{\"template\":{\"target\":{\"wt\":\"echo\",\"href\":\"./Template:Echo\"},\"params\":{\"1\":{\"wt\":\"&amp;lt;ref>{{echo|foo}}&amp;lt;/ref>\"}},\"i\":0}}]}&#39;>&lt;a href=\"./Parser_test#cite_note-1\" style=\"counter-reset: mw-Ref 1;\" data-parsoid=\"{}\">&lt;span class=\"mw-reflink-text\" data-parsoid=\"{}\">[1]&lt;/span>&lt;/a>&lt;/sup>"}'><a href="./File:Foobar.jpg" data-parsoid='{"a":{"href":"./File:Foobar.jpg"},"sa":{"href":"File:Foobar.jpg"}}'><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941" data-parsoid='{"a":{"resource":"./File:Foobar.jpg","height":"220","width":"1941"},"sa":{"resource":"File:Foobar.jpg"}}'/></a></figure-inline></p>
 
-<ol class="mw-references references" typeof="mw:Extension/references" about="#mwt6" data-mw='{"name":"references","attrs":{}}'><li about="#cite_note-1" id="cite_note-1"><a href="./Main_Page#cite_ref-1" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-1" class="mw-reference-text">foo</span></li></ol>
+<ol class="mw-references references" typeof="mw:Extension/references" about="#mwt6" data-mw='{"name":"references","attrs":{}}'><li about="#cite_note-1" id="cite_note-1"><a href="./Parser_test#cite_ref-1" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-1" class="mw-reference-text">foo</span></li></ol>
 !! end
 
 ###
@@ -17779,12 +17822,12 @@ section 6
 <h2 id="Underscore-Entity_between_Text">Underscore-Entity<span typeof="mw:Entity" data-parsoid='{"src":"&amp;#95;","srcContent":"_"}'>_</span>between<span typeof="mw:Entity" data-parsoid='{"src":"&amp;#95;","srcContent":"_"}'>_</span>Text</h2>
 <p>section 6</p>
 
-<p><a rel="mw:WikiLink" href="./Main_Page#Space_between_Text" data-parsoid='{"stx":"simple","a":{"href":"./Main_Page#Space_between_Text"},"sa":{"href":"#Space between Text"}}'>#Space between Text</a>
-<a rel="mw:WikiLink" href="./Main_Page#Space-Entity_between_Text" data-parsoid='{"stx":"simple","a":{"href":"./Main_Page#Space-Entity_between_Text"},"sa":{"href":"#Space-Entity&amp;#32;between&amp;#32;Text"}}'>#Space-Entity between Text</a>
-<a rel="mw:WikiLink" href="./Main_Page#Plus+between+Text" data-parsoid='{"stx":"simple","a":{"href":"./Main_Page#Plus+between+Text"},"sa":{"href":"#Plus+between+Text"}}'>#Plus+between+Text</a>
-<a rel="mw:WikiLink" href="./Main_Page#Plus-Entity+between+Text" data-parsoid='{"stx":"simple","a":{"href":"./Main_Page#Plus-Entity+between+Text"},"sa":{"href":"#Plus-Entity&amp;#43;between&amp;#43;Text"}}'>#Plus-Entity+between+Text</a>
-<a rel="mw:WikiLink" href="./Main_Page#Underscore_between_Text" data-parsoid='{"stx":"simple","a":{"href":"./Main_Page#Underscore_between_Text"},"sa":{"href":"#Underscore_between_Text"}}'>#Underscore_between_Text</a>
-<a rel="mw:WikiLink" href="./Main_Page#Underscore-Entity_between_Text" data-parsoid='{"stx":"simple","a":{"href":"./Main_Page#Underscore-Entity_between_Text"},"sa":{"href":"#Underscore-Entity&amp;#95;between&amp;#95;Text"}}'>#Underscore-Entity_between_Text</a></p>
+<p><a rel="mw:WikiLink" href="./Parser_test#Space_between_Text" data-parsoid='{"stx":"simple","a":{"href":"./Parser_test#Space_between_Text"},"sa":{"href":"#Space between Text"}}'>#Space between Text</a>
+<a rel="mw:WikiLink" href="./Parser_test#Space-Entity_between_Text" data-parsoid='{"stx":"simple","a":{"href":"./Parser_test#Space-Entity_between_Text"},"sa":{"href":"#Space-Entity&amp;#32;between&amp;#32;Text"}}'>#Space-Entity between Text</a>
+<a rel="mw:WikiLink" href="./Parser_test#Plus+between+Text" data-parsoid='{"stx":"simple","a":{"href":"./Parser_test#Plus+between+Text"},"sa":{"href":"#Plus+between+Text"}}'>#Plus+between+Text</a>
+<a rel="mw:WikiLink" href="./Parser_test#Plus-Entity+between+Text" data-parsoid='{"stx":"simple","a":{"href":"./Parser_test#Plus-Entity+between+Text"},"sa":{"href":"#Plus-Entity&amp;#43;between&amp;#43;Text"}}'>#Plus-Entity+between+Text</a>
+<a rel="mw:WikiLink" href="./Parser_test#Underscore_between_Text" data-parsoid='{"stx":"simple","a":{"href":"./Parser_test#Underscore_between_Text"},"sa":{"href":"#Underscore_between_Text"}}'>#Underscore_between_Text</a>
+<a rel="mw:WikiLink" href="./Parser_test#Underscore-Entity_between_Text" data-parsoid='{"stx":"simple","a":{"href":"./Parser_test#Underscore-Entity_between_Text"},"sa":{"href":"#Underscore-Entity&amp;#95;between&amp;#95;Text"}}'>#Underscore-Entity_between_Text</a></p>
 !! end
 
 # Parsoid html2wt disabled because it adds padding spaces around =
@@ -18177,8 +18220,7 @@ HTML tag with leading space is parsed as text
 </p>
 !! end
 
-## Don't expect Parsoid and PHP to match, since PHP isn't exactly following
-## the HTML5 parsing spec.
+## FIXME: The untrimmed attribute in Parsoid is T205737
 !! test
 Element with broken attribute syntax
 !! options
@@ -18187,7 +18229,7 @@ parsoid=wt2html
 <div style=" style="123">hi</div>
 <div =>ho</div>
 !! html/php
-<div style="123">hi</div>
+<div style="style=">hi</div>
 <div>ho</div>
 
 !! html/parsoid
@@ -18991,7 +19033,7 @@ Tags which are hidden from tidiers cannot pass through the Sanitizer
 !! end
 
 ###
-### Parser hooks (see tests/parser/parserTestsParserHook.php for the <tag> extension)
+### Parser hooks (see tests/parser/ParserTestParserHook.php for the <tag> extension)
 ###
 
 !! test
@@ -19261,7 +19303,7 @@ array (
 !! end
 
 ###
-### (see tests/parser/parserTestsParserHook.php for the <statictag> extension)
+### (see tests/parser/ParserTestParserHook.php for the <statictag> extension)
 ###
 
 !! test
@@ -19275,8 +19317,8 @@ Parser hook: static parser hook not inside a comment
 hello, world
 </p>
 !! html/parsoid
-<p><span typeof="mw:Extension/statictag" data-mw='{"name":"statictag","attrs":{},"body":{"extsrc":"hello, world"}}' data-parsoid='{}' about="#mwt2"></span></p>
-<p typeof="mw:Extension/statictag" data-mw='{"name":"statictag","attrs":{"action":"flush"}}' data-parsoid='{}' about="#mwt4">hello, world</p>
+<p><span typeof="mw:Extension/statictag" data-mw='{"name":"statictag","attrs":{},"body":{"extsrc":"hello, world"}}' about="#mwt2"></span></p>
+<p><span typeof="mw:Extension/statictag" data-mw='{"name":"statictag","attrs":{"action":"flush"}}' about="#mwt4">hello, world</span></p>
 !! end
 
 !! test
@@ -19289,7 +19331,7 @@ Parser hook: static parser hook inside a comment
 </p>
 !! html/parsoid
 <!-- <statictag&#x3E;hello, world</statictag&#x3E; -->
-<p typeof='mw:Extension/statictag' data-mw='{"name":"statictag","attrs":{"action":"flush"}}' data-parsoid='{}' about='#mwt2'></p>
+<p><span typeof='mw:Extension/statictag' data-mw='{"name":"statictag","attrs":{"action":"flush"}}' data-parsoid='{}' about='#mwt2'></span></p>
 !! end
 
 # Nested template calls; this case was broken by Parser.php rev 1.506,
@@ -19364,6 +19406,8 @@ Table not started</td></tr></table>
 
 !! test
 Sanitizer: Escaping of spaces, multibyte characters, colons & other stuff in id=""
+!! options
+title=[[Main Page]]
 !! config
 wgFragmentMode=[ 'html5', 'legacy' ]
 !! wikitext
@@ -20055,8 +20099,8 @@ parsoid=wt2html
 <pre dir="&#10;"></pre>
 
 !! html/parsoid
-<pre typeof="mw:Extension/pre" about="#mwt2" dir="
-" data-mw='{"name":"pre","attrs":{"dir":"\n"},"body":{"extsrc":""}}'></pre>
+<pre dir="
+" typeof="mw:Extension/pre" about="#mwt2"data-mw='{"name":"pre","attrs":{"dir":"\n"},"body":{"extsrc":""}}'></pre>
 !! end
 
 !! test
@@ -20082,7 +20126,7 @@ Templates in extension attributes are not expanded
 <pre dir="{{echo|ltr}}"></pre>
 
 !! html/parsoid
-<pre typeof="mw:Extension/pre" about="#mwt2" dir="{{echo|ltr}}" data-mw='{"name":"pre","attrs":{"dir":"{{echo|ltr}}"},"body":{"extsrc":""}}'></pre>
+<pre dir="{{echo|ltr}}" typeof="mw:Extension/pre" about="#mwt2" data-mw='{"name":"pre","attrs":{"dir":"{{echo|ltr}}"},"body":{"extsrc":""}}'></pre>
 !! end
 
 !! test
@@ -21519,7 +21563,6 @@ image:foobar.jpg|link=Main Page#section|caption
 </ul>
 !! end
 
-## Whoops, Parsoid shouldn't be parsing templates in the attribute caption!
 !! test
 Gallery with template inside caption
 !! options
@@ -21532,7 +21575,7 @@ File:Foobar.jpg|{{echo|ho}}
 </gallery>
 !! html/php
 <ul class="gallery mw-gallery-traditional">
-       <li class='gallerycaption'>{{echo|hi}}</li>
+       <li class='gallerycaption'>hi</li>
                <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="" 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">
@@ -21549,6 +21592,30 @@ File:Foobar.jpg|{{echo|ho}}
 </ul>
 !! end
 
+!! test
+Gallery with wikitext inside gallery caption
+!! wikitext
+<gallery caption="# List item
+
+Text '''bold''' [[link]] {{ns:-1}}
+
+[[File:Foobar.jpg|thumb|File in gallery caption]]">
+File:Foobar.jpg|Image caption
+</gallery>
+!! html/php
+<ul class="gallery mw-gallery-traditional">
+       <li class='gallerycaption'># List item Text <b>bold</b> <a href="/index.php?title=Link&amp;action=edit&amp;redlink=1" class="new" title="Link (page does not exist)">link</a> Special <div class="thumb tright"><div class="thumbinner" style="width:182px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg" width="180" height="20" class="thumbimage" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/270px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/360px-Foobar.jpg 2x" /></a>  <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"></a></div>File in gallery caption</div></div></div></li>
+               <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="" 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">
+<p>Image caption
+</p>
+                       </div>
+               </div></li>
+</ul>
+
+!! end
+
 !! test
 Gallery with wikitext inside caption
 !! options
@@ -22931,6 +22998,19 @@ language=zh variant=zh-tw
 <p><span typeof="mw:LanguageVariant" data-parsoid='{"tSp":[6]}' data-mw-variant='{"twoway":[{"l":"zh","t":"China"},{"l":"zh-tw","t":"Taiwan"}]}'></span>, not China</p>
 !! end
 
+!! test
+Explicit definition of language variant alternatives (BCP 47 codes)
+!! options
+language=zh variant=zh-tw
+!! wikitext
+-{zh:China;zh-Hant-TW:Taiwan}-, not China
+!! html/php
+<p>Taiwan, not China
+</p>
+!! html/parsoid
+<p><span typeof="mw:LanguageVariant" data-parsoid='{"tSp":[6]}' data-mw-variant='{"twoway":[{"l":"zh","t":"China"},{"l":"zh-Hant-TW","t":"Taiwan"}]}'></span>, not China</p>
+!! end
+
 !! test
 Filter syntax for language variants
 !! options
@@ -24422,7 +24502,7 @@ comment title=[[Main Page]]
 !! wikitext
 /* External links */ removed bogus entries
 !! html/php
-<a href="/wiki/Main_Page#External_links" title="Main Page">→</a>‎<span dir="auto"><span class="autocomment">External links: </span> removed bogus entries</span>
+<a href="/wiki/Main_Page#External_links" title="Main Page">→External links</a>‎<span dir="auto"><span class="autocomment">: </span> removed bogus entries</span>
 !!end
 
 !! test
@@ -24432,7 +24512,7 @@ comment title=[[Main Page]]
 !! wikitext
 pre-comment text /* External links */ removed bogus entries
 !! html/php
-pre-comment text <a href="/wiki/Main_Page#External_links" title="Main Page">→</a>‎<span dir="auto"><span class="autocomment">External links: </span> removed bogus entries</span>
+pre-comment text <a href="/wiki/Main_Page#External_links" title="Main Page">→External links</a>‎<span dir="auto"><span class="autocomment">: </span> removed bogus entries</span>
 !!end
 
 !! test
@@ -24442,7 +24522,7 @@ comment local title=[[Main Page]]
 !! wikitext
 /* External links */ removed bogus entries
 !! html/php
-<a href="#External_links">→</a>‎<span dir="auto"><span class="autocomment">External links: </span> removed bogus entries</span>
+<a href="#External_links">→External links</a>‎<span dir="auto"><span class="autocomment">: </span> removed bogus entries</span>
 !!end
 
 !! test
@@ -24553,7 +24633,7 @@ title=[[Main Page]]
 !! wikitext
 /* __hello__world__ */
 !! html/php
-<a href="/wiki/Main_Page#hello_world" title="Main Page">→</a>‎<span dir="auto"><span class="autocomment">__hello__world__</span></span>
+<a href="/wiki/Main_Page#hello_world" title="Main Page">→__hello__world__</a>‎
 !! end
 
 !! test
@@ -26801,6 +26881,33 @@ parsoid=html2wt
 
 !! end
 
+!! test
+Tables: 4e. Escape }
+!! options
+parsoid=html2wt
+!! html/parsoid
+<table>
+<tr><td>}</td></tr>
+<tr><td>x</td><td data-parsoid='{"stx":"row"}'>}</td></tr></table>
+</table>
+!! wikitext
+{|
+|<nowiki>}</nowiki>
+|-
+|x||}
+|}
+!! html/php
+<table>
+<tr>
+<td>}
+</td></tr>
+<tr>
+<td>x</td>
+<td>}
+</td></tr></table>
+
+!! end
+
 !! test
 Tables: 5. Empty table cells should get whitespace to avoid need for nowikis
 !! options
@@ -28881,6 +28988,27 @@ Image: Invalid title as link
 <p><figure-inline class="mw-default-size" typeof="mw:Image" data-parsoid='{"optList":[{"ck":"link","ak":"link=&lt;"}]}' data-mw='{"caption":"link=&amp;lt;"}'><a href="./File:Foobar.jpg" data-parsoid='{"a":{"href":"./File:Foobar.jpg"},"sa":{}}'><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941" data-parsoid='{"a":{"resource":"./File:Foobar.jpg","height":"220","width":"1941"},"sa":{"resource":"File:Foobar.jpg"}}'/></a></figure-inline></p>
 !! end
 
+!! test
+Various link types in alt and link options
+!! wikitext
+[[File:Foobar.jpg|link=[[Main Page]]|alt=[[Main Page]]|caption]]
+
+[[File:Foobar.jpg|link=[[Media:Thumb.png]]|alt=[[Media:Thumb.png]]|caption]]
+
+[[File:Foobar.jpg|link=[[wikipedia:Foo]]|alt=[[wikipedia:Foo]]|caption]]
+!! html/php+tidy
+<p><a href="/wiki/Main_Page" title="caption"><img alt="Main Page" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
+</p><p><a href="/wiki/Media:Thumb.png" title="caption"><img alt="Media:Thumb.png" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
+</p><p><a href="http://en.wikipedia.org/wiki/Foo" title="caption"><img alt="wikipedia:Foo" src="http://example.com/images/3/3a/Foobar.jpg" width="1941" height="220" /></a>
+</p>
+!! html/parsoid
+<p><figure-inline class="mw-default-size" typeof="mw:Image" data-mw='{"caption":"caption"}'><a href="./Main_Page" data-parsoid='{"a":{"href":"./Main_Page"},"sa":{"href":"link=[[Main Page]]"}}'><img alt="Main Page" resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941" data-parsoid='{"a":{"alt":"Main Page","resource":"./File:Foobar.jpg","height":"220","width":"1941"},"sa":{"alt":"alt=[[Main Page]]","resource":"File:Foobar.jpg"}}'/></a></figure-inline></p>
+
+<p><figure-inline class="mw-default-size" typeof="mw:Image" data-mw='{"caption":"caption"}'><a href="./Media:Thumb.png" data-parsoid='{"a":{"href":"./Media:Thumb.png"},"sa":{"href":"link=[[Media:Thumb.png]]"}}'><img alt="Media:Thumb.png" resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941" data-parsoid='{"a":{"alt":"Media:Thumb.png","resource":"./File:Foobar.jpg","height":"220","width":"1941"},"sa":{"alt":"alt=[[Media:Thumb.png]]","resource":"File:Foobar.jpg"}}'/></a></figure-inline></p>
+
+<p><figure-inline class="mw-default-size" typeof="mw:Image" data-mw='{"caption":"caption"}'><a href="http://en.wikipedia.org/wiki/Foo" data-parsoid='{"a":{"href":"http://en.wikipedia.org/wiki/Foo"},"sa":{"href":"link=[[wikipedia:Foo]]"}}'><img alt="wikipedia:Foo" resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941" data-parsoid='{"a":{"alt":"wikipedia:Foo","resource":"./File:Foobar.jpg","height":"220","width":"1941"},"sa":{"alt":"alt=[[wikipedia:Foo]]","resource":"File:Foobar.jpg"}}'/></a></figure-inline></p>
+!! end
+
 !! test
 Lists: Serialize correctly even when list content is wrapped in p-tags (like VE does)
 !! options
@@ -30693,6 +30821,7 @@ parsoid={
 <tr><td>a</td></tr>
 <tr><td>-</td></tr>
 <tr><td>+</td></tr>
+<tr><td>}</td></tr>
 </table>
 !! wikitext
 {|
@@ -30701,6 +30830,8 @@ parsoid={
 |<nowiki>-</nowiki>
 |-
 |<nowiki>+</nowiki>
+|-
+|<nowiki>}</nowiki>
 |}
 !! end
 
@@ -30716,6 +30847,7 @@ parsoid={
 <tr><td>a</td></tr>
 <tr><td>-</td></tr>
 <tr><td>+</td></tr>
+<tr><td>}</td></tr>
 </table>
 !! wikitext
 {|
@@ -30724,6 +30856,8 @@ parsoid={
 | -
 |-
 | +
+|-
+| }
 |}
 !! end
 
@@ -30891,6 +31025,170 @@ parsoid={
 <font>foo</font>
 !! end
 
+!! test
+Ignore empty <p></p> when scrubWikitext is false
+!! options
+parsoid={
+  "modes": ["html2wt"],
+  "scrubWikitext": false
+}
+!! html/parsoid
+<div>1</div>
+<p>a</p><p></p><p>b</p>
+<div>2</div>
+<p>a</p>
+<p></p>
+<p>b</p>
+<div>3</div>
+<p>a</p>
+<p></p>
+<p></p>
+<p></p>
+<p></p>
+<p>b</p>
+!! wikitext
+<div>1</div>
+a
+
+b
+<div>2</div>
+a
+
+b
+<div>3</div>
+a
+
+b
+!! html/php+tidy
+<div>1</div>
+<p>a
+</p><p>b
+</p>
+<div>2</div>
+<p>a
+</p><p>b
+</p>
+<div>3</div>
+<p>a
+</p><p>b
+</p>
+!! end
+
+!! test
+Normalize empty paragraphs to HTML form that html2wt expects
+!! options
+parsoid={
+  "modes": ["html2wt"],
+  "scrubWikitext": true
+}
+!! html/parsoid
+<div>1</div>
+<p>a</p><p></p><p>b</p>
+<div>2</div>
+<p>a</p>
+<p></p>
+<p>b</p>
+<div>3</div>
+<p>a</p>
+<p></p>
+<p></p>
+<p></p>
+<p></p>
+<p>b</p>
+<div>4</div>
+<p>a</p>
+<p></p>
+<div>foo</div>
+!! wikitext
+<div>1</div>
+a
+
+
+b
+<div>2</div>
+a
+
+
+b
+<div>3</div>
+a
+
+
+
+
+
+b
+<div>4</div>
+a
+
+<br />
+<div>foo</div>
+!! html/php+tidy
+<div>1</div>
+<p>a
+</p><p><br />
+b
+</p>
+<div>2</div>
+<p>a
+</p><p><br />
+b
+</p>
+<div>3</div>
+<p>a
+</p><p><br />
+</p><p><br />
+</p><p>b
+</p>
+<div>4</div>
+<p>a
+</p><p><br />
+</p>
+<div>foo</div>
+!! end
+
+!! test
+Empty paragraphs (marked with mw-empty-elt) found in source should not be normalized away
+!! options
+parsoid={
+  "modes": ["html2wt"],
+  "scrubWikitext": true
+}
+!! html/parsoid
+<table>
+<tbody>
+<tr>
+<td><div>foo
+</div>
+<p class="mw-empty-elt"></p>
+</td>
+</tr>
+</tbody>
+<caption></caption>
+</table>
+!! wikitext
+{|
+|<div>foo
+</div>
+|+
+|}
+!! end
+
+!! test
+Templated content should be skipped over by normalization
+!! options
+parsoid={
+  "modes": ["html2wt"],
+  "scrubWikitext": true
+}
+!! html/parsoid
+<p about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"SomeTemplate1","href":"./Template:SomeTemplate1"},"params":{"1":{"wt":"boo"}},"i":0}}]}'>foobar</p><p about="#mwt2" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"SomeTemplate2","href":"./Template:SomeTemplate2"},"params":{"1":{"wt":"booboo"}},"i":0}}]}'>foobar</p><span about="#mwt2">
+</span><p about="#mwt2"></p><span about="#mwt2">
+</span>
+!! wikitext
+{{SomeTemplate1|boo}}{{SomeTemplate2|booboo}}
+!! end
+
 !! test
 Escape nowiki DOM elements
 !! options
@@ -31350,7 +31648,7 @@ wgFragmentMode=[ 'html5', 'legacy' ]
 </p>
 !! html/parsoid
 <h2 id="A&amp;B&amp;C&amp;amp;D&amp;amp;amp;E"><span id="A.26B.26C.26amp.3BD.26amp.3Bamp.3BE" typeof="mw:FallbackId" data-parsoid="{}"></span>A&amp;B<span typeof="mw:Entity" data-parsoid='{"src":"&amp;amp;","srcContent":"&amp;"}'>&amp;</span>C<span typeof="mw:Entity" data-parsoid='{"src":"&amp;amp;","srcContent":"&amp;"}'>&amp;</span>amp;D<span typeof="mw:Entity" data-parsoid='{"src":"&amp;amp;","srcContent":"&amp;"}'>&amp;</span>amp;amp;E</h2>
-<p><a rel="mw:WikiLink" href="./Main_Page#A&amp;B&amp;C&amp;amp;D&amp;amp;amp;E" data-parsoid='{"stx":"simple","a":{"href":"./Main_Page#A&amp;B&amp;C&amp;amp;D&amp;amp;amp;E"},"sa":{"href":"#A&amp;B&amp;amp;C&amp;amp;amp;D&amp;amp;amp;amp;E"}}'>#A&amp;B&amp;C&amp;amp;D&amp;amp;amp;E</a></p>
+<p><a rel="mw:WikiLink" href="./Parser_test#A&amp;B&amp;C&amp;amp;D&amp;amp;amp;E" data-parsoid='{"stx":"simple","a":{"href":"./Parser_test#A&amp;B&amp;C&amp;amp;D&amp;amp;amp;E"},"sa":{"href":"#A&amp;B&amp;amp;C&amp;amp;amp;D&amp;amp;amp;amp;E"}}'>#A&amp;B&amp;C&amp;amp;D&amp;amp;amp;E</a></p>
 !! end
 
 !! test
@@ -31463,12 +31761,12 @@ wgFragmentMode=[ 'html5', 'legacy' ]
 <h2 id="тест"><span id=".D1.82.D0.B5.D1.81.D1.82" typeof="mw:FallbackId"></span>тест</h2>
 
 <h2 id="Hey_&lt;_#_&quot;_>_%_:_'"><span id="Hey_.3C_.23_.22_.3E_.25_:_.27" typeof="mw:FallbackId"></span>Hey &lt; # " > %<span typeof="mw:DisplaySpace mw:Placeholder" data-parsoid='{"src":" ","isDisplayHack":true}'> </span>: '</h2>
-<p><a rel="mw:WikiLink" href="./Main_Page#Foo_bar">#Foo bar</a> <a rel="mw:WikiLink" href="./Main_Page#foo_Bar">#foo Bar</a> <a rel="mw:WikiLink" href="./Main_Page#Тест">#Тест</a> <a rel="mw:WikiLink" href="./Main_Page#тест">#тест</a> <a rel="mw:WikiLink" href="./Main_Page#Hey_&lt;_#_&quot;_>_%_:_'" data-parsoid='{"stx":"simple","a":{"href":"./Main_Page#Hey_&lt;_#_\"_>_%_:_&#39;"},"sa":{"href":"#Hey &lt; # \" > % : &#39;"}}'>#Hey &lt; # " > % : '</a></p>
+<p><a rel="mw:WikiLink" href="./Parser_test#Foo_bar">#Foo bar</a> <a rel="mw:WikiLink" href="./Parser_test#foo_Bar">#foo Bar</a> <a rel="mw:WikiLink" href="./Parser_test#Тест">#Тест</a> <a rel="mw:WikiLink" href="./Parser_test#тест">#тест</a> <a rel="mw:WikiLink" href="./Parser_test#Hey_&lt;_#_&quot;_>_%_:_'" data-parsoid='{"stx":"simple","a":{"href":"./Parser_test#Hey_&lt;_#_\"_>_%_:_&#39;"},"sa":{"href":"#Hey &lt; # \" > % : &#39;"}}'>#Hey &lt; # " > % : '</a></p>
 
 <p><span about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"anchorencode:💩","function":"anchorencode"},"params":{},"i":0}}]}'>💩</span> <span id="💩" about="#mwt3" typeof="mw:ExpandedAttrs" data-mw='{"attribs":[[{"txt":"id"},{"html":"&lt;span about=\"#mwt2\" typeof=\"mw:Transclusion\" data-parsoid=&#39;{\"pi\":[[]],\"dsr\":[178,197,null,null]}&#39; data-mw=&#39;{\"parts\":[{\"template\":{\"target\":{\"wt\":\"anchorencode:💩\",\"function\":\"anchorencode\"},\"params\":{},\"i\":0}}]}&#39;>💩&lt;/span>"}]]}'></span></p>
 
 <!-- These two links should produce identical HTML -->
-<p><a rel="mw:WikiLink" href="./Main_Page#啤酒">#啤酒</a> <a rel="mw:WikiLink" href="./Main_Page#啤酒" data-parsoid='{"stx":"simple","a":{"href":"./Main_Page#啤酒"},"sa":{"href":"#%E5%95%A4%E9%85%92"}}'>#啤酒</a></p>
+<p><a rel="mw:WikiLink" href="./Parser_test#啤酒">#啤酒</a> <a rel="mw:WikiLink" href="./Parser_test#啤酒" data-parsoid='{"stx":"simple","a":{"href":"./Parser_test#啤酒"},"sa":{"href":"#%E5%95%A4%E9%85%92"}}'>#啤酒</a></p>
 !! end
 
 # Parsoid doesn't support this mode
@@ -31581,7 +31879,7 @@ wgFragmentMode=[ 'html5', 'legacy' ]
 </p>
 !! html/parsoid
 <h2 id="Foo_bar"> Foo<span typeof="mw:Entity" data-parsoid='{"src":"&amp;nbsp;","srcContent":" "}'> </span>bar </h2>
-<p><a rel="mw:WikiLink" href="./Main_Page#Foo_bar" data-parsoid='{"stx":"simple","a":{"href":"./Main_Page#Foo_bar"},"sa":{"href":"#Foo&amp;nbsp;bar"}}'>#Foo bar</a></p>
+<p><a rel="mw:WikiLink" href="./Parser_test#Foo_bar" data-parsoid='{"stx":"simple","a":{"href":"./Parser_test#Foo_bar"},"sa":{"href":"#Foo&amp;nbsp;bar"}}'>#Foo bar</a></p>
 !! end
 
 !! test
@@ -31638,7 +31936,7 @@ wgFragmentMode=[ 'html5' ]
 <p><span id="&#91;foo&#93;"></span><a href="#[foo]">#&#91;foo&#93;</a>
 </p>
 !! html/parsoid
-<p><span id="[foo]" about="#mwt3" typeof="mw:ExpandedAttrs" data-parsoid='{"stx":"html","a":{"id":"[foo]"},"sa":{"id":"{{anchorencode:[foo]}}"}}' data-mw='{"attribs":[[{"txt":"id"},{"html":"&lt;span typeof=\"mw:Transclusion mw:Entity\" about=\"#mwt1\" data-parsoid=&apos;{\"srcContent\":\"[\",\"dsr\":[10,32,null,null],\"pi\":[[]]}&apos; data-mw=&apos;{\"parts\":[{\"template\":{\"target\":{\"wt\":\"anchorencode:[foo]\",\"function\":\"anchorencode\"},\"params\":{},\"i\":0}}]}&apos;>[&lt;/span>&lt;span about=\"#mwt1\" data-parsoid=\"{}\">foo&lt;/span>&lt;span typeof=\"mw:Entity\" about=\"#mwt1\" data-parsoid=&apos;{\"src\":\"&amp;amp;#x5D;\",\"srcContent\":\"]\"}&apos;>]&lt;/span>"}]]}'></span><a typeof="mw:ExpandedAttrs" about="#mwt4" rel="mw:WikiLink" href="./Main_Page#[foo]" data-parsoid='{"stx":"simple","a":{"href":"./Main_Page#[foo]"},"sa":{"href":"#{{anchorencode:[foo]}}"}}' data-mw='{"attribs":[[{"txt":"href"},{"html":"#&lt;span typeof=\"mw:Transclusion mw:Entity\" about=\"#mwt2\" data-parsoid=&apos;{\"srcContent\":\"[\",\"dsr\":[44,66,null,null],\"pi\":[[]]}&apos; data-mw=&apos;{\"parts\":[{\"template\":{\"target\":{\"wt\":\"anchorencode:[foo]\",\"function\":\"anchorencode\"},\"params\":{},\"i\":0}}]}&apos;>[&lt;/span>&lt;span about=\"#mwt2\" data-parsoid=\"{}\">foo&lt;/span>&lt;span typeof=\"mw:Entity\" about=\"#mwt2\" data-parsoid=&apos;{\"src\":\"&amp;amp;#x5D;\",\"srcContent\":\"]\"}&apos;>]&lt;/span>"}]]}'>#[foo]</a></p>
+<p><span id="[foo]" about="#mwt3" typeof="mw:ExpandedAttrs" data-parsoid='{"stx":"html","a":{"id":"[foo]"},"sa":{"id":"{{anchorencode:[foo]}}"}}' data-mw='{"attribs":[[{"txt":"id"},{"html":"&lt;span typeof=\"mw:Transclusion mw:Entity\" about=\"#mwt1\" data-parsoid=&apos;{\"srcContent\":\"[\",\"dsr\":[10,32,null,null],\"pi\":[[]]}&apos; data-mw=&apos;{\"parts\":[{\"template\":{\"target\":{\"wt\":\"anchorencode:[foo]\",\"function\":\"anchorencode\"},\"params\":{},\"i\":0}}]}&apos;>[&lt;/span>&lt;span about=\"#mwt1\" data-parsoid=\"{}\">foo&lt;/span>&lt;span typeof=\"mw:Entity\" about=\"#mwt1\" data-parsoid=&apos;{\"src\":\"&amp;amp;#x5D;\",\"srcContent\":\"]\"}&apos;>]&lt;/span>"}]]}'></span><a typeof="mw:ExpandedAttrs" about="#mwt4" rel="mw:WikiLink" href="./Parser_test#[foo]" data-parsoid='{"stx":"simple","a":{"href":"./Parser_test#[foo]"},"sa":{"href":"#{{anchorencode:[foo]}}"}}' data-mw='{"attribs":[[{"txt":"href"},{"html":"#&lt;span typeof=\"mw:Transclusion mw:Entity\" about=\"#mwt2\" data-parsoid=&apos;{\"srcContent\":\"[\",\"dsr\":[44,66,null,null],\"pi\":[[]]}&apos; data-mw=&apos;{\"parts\":[{\"template\":{\"target\":{\"wt\":\"anchorencode:[foo]\",\"function\":\"anchorencode\"},\"params\":{},\"i\":0}}]}&apos;>[&lt;/span>&lt;span about=\"#mwt2\" data-parsoid=\"{}\">foo&lt;/span>&lt;span typeof=\"mw:Entity\" about=\"#mwt2\" data-parsoid=&apos;{\"src\":\"&amp;amp;#x5D;\",\"srcContent\":\"]\"}&apos;>]&lt;/span>"}]]}'>#[foo]</a></p>
 !! end
 
 ## ------------------------------
index 9954425..7d844b5 100644 (file)
@@ -612,9 +612,9 @@ class BlockTest extends MediaWikiLangTestCase {
        }
 
        /**
-        * @covers Block::preventsEdit
+        * @covers Block::appliesToTitle
         */
-       public function testPreventsEditReturnsTrueOnSitewideBlock() {
+       public function testAppliesToTitleReturnsTrueOnSitewideBlock() {
                $user = $this->getTestUser()->getUser();
                $block = new Block( [
                        'expiry' => wfTimestamp( TS_MW, wfTimestamp() + ( 40 * 60 * 60 ) ),
@@ -628,15 +628,19 @@ class BlockTest extends MediaWikiLangTestCase {
 
                $title = $this->getExistingTestPage( 'Foo' )->getTitle();
 
-               $this->assertTrue( $block->preventsEdit( $title ) );
+               $this->assertTrue( $block->appliesToTitle( $title ) );
+
+               // appliesToTitle() ignores allowUsertalk
+               $title = $user->getTalkPage();
+               $this->assertTrue( $block->appliesToTitle( $title ) );
 
                $block->delete();
        }
 
        /**
-        * @covers Block::preventsEdit
+        * @covers Block::appliesToTitle
         */
-       public function testPreventsEditOnPartialBlock() {
+       public function testAppliesToTitleOnPartialBlock() {
                $user = $this->getTestUser()->getUser();
                $block = new Block( [
                        'expiry' => wfTimestamp( TS_MW, wfTimestamp() + ( 40 * 60 * 60 ) ),
@@ -654,72 +658,10 @@ class BlockTest extends MediaWikiLangTestCase {
                $pageRestriction = new PageRestriction( $block->getId(), $pageFoo->getId() );
                BlockRestriction::insert( [ $pageRestriction ] );
 
-               $this->assertTrue( $block->preventsEdit( $pageFoo->getTitle() ) );
-               $this->assertFalse( $block->preventsEdit( $pageBar->getTitle() ) );
-
-               $block->delete();
-       }
-
-       /**
-        * @covers Block::preventsEdit
-        * @dataProvider preventsEditOnUserTalkProvider
-        */
-       public function testPreventsEditOnUserTalkPage(
-               $allowUsertalk, $sitewide, $result, $blockAllowsUTEdit = true
-       ) {
-               $this->setMwGlobals( [
-                       'wgBlockAllowsUTEdit' => $blockAllowsUTEdit,
-               ] );
-
-               $user = $this->getTestUser()->getUser();
-               $block = new Block( [
-                       'expiry' => wfTimestamp( TS_MW, wfTimestamp() + ( 40 * 60 * 60 ) ),
-                       'allowUsertalk' => $allowUsertalk,
-                       'sitewide' => $sitewide
-               ] );
-
-               $block->setTarget( $user );
-               $block->setBlocker( $this->getTestSysop()->getUser() );
-               $block->insert();
+               $this->assertTrue( $block->appliesToTitle( $pageFoo->getTitle() ) );
+               $this->assertFalse( $block->appliesToTitle( $pageBar->getTitle() ) );
 
-               $this->assertEquals( $result, $block->preventsEdit( $user->getTalkPage() ) );
                $block->delete();
        }
 
-       public function preventsEditOnUserTalkProvider() {
-               return [
-                       [
-                               'allowUsertalk' => false,
-                               'sitewide' => true,
-                               'result' => true,
-                       ],
-                       [
-                               'allowUsertalk' => true,
-                               'sitewide' => true,
-                               'result' => false,
-                       ],
-                       [
-                               'allowUsertalk' => true,
-                               'sitewide' => false,
-                               'result' => false,
-                       ],
-                       [
-                               'allowUsertalk' => false,
-                               'sitewide' => false,
-                               'result' => true,
-                       ],
-                       [
-                               'allowUsertalk' => true,
-                               'sitewide' => true,
-                               'result' => true,
-                               'blockAllowsUTEdit' => false
-                       ],
-                       [
-                               'allowUsertalk' => true,
-                               'sitewide' => false,
-                               'result' => true,
-                               'blockAllowsUTEdit' => false
-                       ],
-               ];
-       }
 }
index bc1f101..4360343 100644 (file)
@@ -117,7 +117,6 @@ class CommentStoreTest extends MediaWikiLangTestCase {
                                MIGRATION_WRITE_BOTH, 'img_description',
                                [
                                        'img_description_old' => 'img_description',
-                                       'img_description_pk' => 'img_name',
                                        'img_description_id' => 'img_description_id'
                                ],
                        ],
@@ -125,14 +124,12 @@ class CommentStoreTest extends MediaWikiLangTestCase {
                                MIGRATION_WRITE_NEW, 'img_description',
                                [
                                        'img_description_old' => 'img_description',
-                                       'img_description_pk' => 'img_name',
                                        'img_description_id' => 'img_description_id'
                                ],
                        ],
                        'Image, new' => [
                                MIGRATION_NEW, 'img_description',
                                [
-                                       'img_description_pk' => 'img_name',
                                        'img_description_id' => 'img_description_id'
                                ],
                        ],
@@ -296,7 +293,6 @@ class CommentStoreTest extends MediaWikiLangTestCase {
                        'Image, write-both' => [
                                MIGRATION_WRITE_BOTH, 'img_description', [
                                        'tables' => [
-                                               'temp_img_description' => 'image_comment_temp',
                                                'comment_img_description' => 'comment',
                                        ],
                                        'fields' => [
@@ -305,10 +301,8 @@ class CommentStoreTest extends MediaWikiLangTestCase {
                                                'img_description_cid' => 'comment_img_description.comment_id',
                                        ],
                                        'joins' => [
-                                               'temp_img_description' => [ 'LEFT JOIN', 'temp_img_description.imgcomment_name = img_name' ],
                                                'comment_img_description' => [ 'LEFT JOIN',
-                                                       // phpcs:ignore Generic.Files.LineLength
-                                                       'comment_img_description.comment_id = (CASE WHEN img_description_id != 0 THEN img_description_id ELSE temp_img_description.imgcomment_description_id END)',
+                                                       'comment_img_description.comment_id = img_description_id',
                                                ],
                                        ],
                                ],
@@ -316,7 +310,6 @@ class CommentStoreTest extends MediaWikiLangTestCase {
                        'Image, write-new' => [
                                MIGRATION_WRITE_NEW, 'img_description', [
                                        'tables' => [
-                                               'temp_img_description' => 'image_comment_temp',
                                                'comment_img_description' => 'comment',
                                        ],
                                        'fields' => [
@@ -325,10 +318,8 @@ class CommentStoreTest extends MediaWikiLangTestCase {
                                                'img_description_cid' => 'comment_img_description.comment_id',
                                        ],
                                        'joins' => [
-                                               'temp_img_description' => [ 'LEFT JOIN', 'temp_img_description.imgcomment_name = img_name' ],
                                                'comment_img_description' => [ 'LEFT JOIN',
-                                                       // phpcs:ignore Generic.Files.LineLength
-                                                       'comment_img_description.comment_id = (CASE WHEN img_description_id != 0 THEN img_description_id ELSE temp_img_description.imgcomment_description_id END)',
+                                                       'comment_img_description.comment_id = img_description_id',
                                                ],
                                        ],
                                ],
@@ -336,7 +327,6 @@ class CommentStoreTest extends MediaWikiLangTestCase {
                        'Image, new' => [
                                MIGRATION_NEW, 'img_description', [
                                        'tables' => [
-                                               'temp_img_description' => 'image_comment_temp',
                                                'comment_img_description' => 'comment',
                                        ],
                                        'fields' => [
@@ -345,10 +335,8 @@ class CommentStoreTest extends MediaWikiLangTestCase {
                                                'img_description_cid' => 'comment_img_description.comment_id',
                                        ],
                                        'joins' => [
-                                               'temp_img_description' => [ 'LEFT JOIN', 'temp_img_description.imgcomment_name = img_name' ],
                                                'comment_img_description' => [ 'JOIN',
-                                                       // phpcs:ignore Generic.Files.LineLength
-                                                       'comment_img_description.comment_id = (CASE WHEN img_description_id != 0 THEN img_description_id ELSE temp_img_description.imgcomment_description_id END)',
+                                                       'comment_img_description.comment_id = img_description_id',
                                                ],
                                        ],
                                ],
index 32c190e..22fe3ce 100644 (file)
@@ -589,63 +589,6 @@ class GlobalTest extends MediaWikiTestCase {
                ];
        }
 
-       /**
-        * @dataProvider provideMakeUrlIndexes()
-        * @covers ::wfMakeUrlIndexes
-        */
-       public function testMakeUrlIndexes( $url, $expected ) {
-               $index = wfMakeUrlIndexes( $url );
-               $this->assertEquals( $expected, $index, "wfMakeUrlIndexes(\"$url\")" );
-       }
-
-       public static function provideMakeUrlIndexes() {
-               return [
-                       // Testcase for T30627
-                       [
-                               'https://example.org/test.cgi?id=12345',
-                               [ 'https://org.example./test.cgi?id=12345' ]
-                       ],
-                       [
-                               // mailtos are handled special
-                               // is this really right though? that final . probably belongs earlier?
-                               'mailto:wiki@wikimedia.org',
-                               [ 'mailto:org.wikimedia@wiki.' ]
-                       ],
-
-                       // file URL cases per T30627...
-                       [
-                               // three slashes: local filesystem path Unix-style
-                               'file:///whatever/you/like.txt',
-                               [ 'file://./whatever/you/like.txt' ]
-                       ],
-                       [
-                               // three slashes: local filesystem path Windows-style
-                               'file:///c:/whatever/you/like.txt',
-                               [ 'file://./c:/whatever/you/like.txt' ]
-                       ],
-                       [
-                               // two slashes: UNC filesystem path Windows-style
-                               'file://intranet/whatever/you/like.txt',
-                               [ 'file://intranet./whatever/you/like.txt' ]
-                       ],
-                       // Multiple-slash cases that can sorta work on Mozilla
-                       // if you hack it just right are kinda pathological,
-                       // and unreliable cross-platform or on IE which means they're
-                       // unlikely to appear on intranets.
-                       // Those will survive the algorithm but with results that
-                       // are less consistent.
-
-                       // protocol-relative URL cases per T31854...
-                       [
-                               '//example.org/test.cgi?id=12345',
-                               [
-                                       'http://org.example./test.cgi?id=12345',
-                                       'https://org.example./test.cgi?id=12345'
-                               ]
-                       ],
-               ];
-       }
-
        /**
         * @dataProvider provideWfMatchesDomainList
         * @covers ::wfMatchesDomainList
index 51b54d2..02fbd81 100644 (file)
@@ -75,7 +75,10 @@ class LinkFilterTest extends MediaWikiLangTestCase {
                        [ 'http://', 'test.com', 'http://name:pass@test.com' ],
                        [ 'http://', '*.test.com', 'http://a.b.c.test.com/dir/dir/file?a=6' ],
                        [ null, 'http://*.test.com', 'http://www.test.com' ],
+                       [ 'http://', '.test.com', 'http://.test.com' ],
+                       [ 'http://', '*..test.com', 'http://foo..test.com' ],
                        [ 'mailto:', 'name@mail.test123.com', 'mailto:name@mail.test123.com' ],
+                       [ 'mailto:', '*@mail.test123.com', 'mailto:name@mail.test123.com' ],
                        [ '',
                                'http://name:pass@www.test.com:12345/dir/dir/file.xyz.php#__se__?arg1=_&arg2[]=4rtg',
                                'http://name:pass@www.test.com:12345/dir/dir/file.xyz.php#__se__?arg1=_&arg2[]=4rtg'
@@ -127,39 +130,66 @@ class LinkFilterTest extends MediaWikiLangTestCase {
                                'http://xx23124:__ffdfdef__@www.test.com:12345/dir' ,
                                'http://name:pass@www.test.com:12345/dir/dir/file.xyz.php#__se__?arg1=_&arg2[]=4rtg'
                        ],
+                       [ 'http://', '127.0.0.1', 'http://127.000.000.001' ],
+                       [ 'http://', '127.0.0.*', 'http://127.000.000.010' ],
+                       [ 'http://', '127.0.*', 'http://127.000.123.010' ],
+                       [ 'http://', '127.*', 'http://127.127.127.127' ],
+                       [ 'http://', '[0:0:0:0:0:0:0:0001]', 'http://[::1]' ],
+                       [ 'http://', '[2001:db8:0:0:*]', 'http://[2001:0DB8::]' ],
+                       [ 'http://', '[2001:db8:0:0:*]', 'http://[2001:0DB8::123]' ],
+                       [ 'http://', '[2001:db8:0:0:*]', 'http://[2001:0DB8::123:456]' ],
+                       [ 'http://', 'xn--f-vgaa.example.com', 'http://fóó.example.com', [ 'idn' => true ] ],
+                       [ 'http://', 'xn--f-vgaa.example.com', 'http://f%c3%b3%C3%B3.example.com', [ 'idn' => true ] ],
+                       [ 'http://', 'fóó.example.com', 'http://xn--f-vgaa.example.com', [ 'idn' => true ] ],
+                       [ 'http://', 'f%c3%b3%C3%B3.example.com', 'http://xn--f-vgaa.example.com', [ 'idn' => true ] ],
+                       [ 'http://', 'f%c3%b3%C3%B3.example.com', 'http://fóó.example.com' ],
+                       [ 'http://', 'fóó.example.com', 'http://f%c3%b3%C3%B3.example.com' ],
+
+                       [ 'http://', 'example.com./foo', 'http://example.com/foo' ],
+                       [ 'http://', 'example.com/foo', 'http://example.com./foo' ],
+                       [ 'http://', '127.0.0.1./foo', 'http://127.0.0.1/foo' ],
+                       [ 'http://', '127.0.0.1/foo', 'http://127.0.0.1./foo' ],
 
                        // Tests for false positives
-                       [ 'http://', 'test.com', 'http://www.test.com', false ],
-                       [ 'http://', 'www1.test.com', 'http://www.test.com', false ],
-                       [ 'http://', '*.test.com', 'http://www.test.t.com', false ],
-                       [ '', 'http://test.com:8080', 'http://www.test.com:8080', false ],
-                       [ '', 'https://test.com', 'http://test.com', false ],
-                       [ '', 'http://test.com', 'https://test.com', false ],
-                       [ 'http://', 'http://test.com', 'http://test.com', false ],
-                       [ null, 'http://www.test.com', 'http://www.test.com:80', false ],
-                       [ null, 'http://www.test.com:80', 'http://www.test.com', false ],
-                       [ null, 'http://*.test.com:80', 'http://www.test.com', false ],
+                       [ 'http://', 'test.com', 'http://www.test.com', [ 'found' => false ] ],
+                       [ 'http://', 'www1.test.com', 'http://www.test.com', [ 'found' => false ] ],
+                       [ 'http://', '*.test.com', 'http://www.test.t.com', [ 'found' => false ] ],
+                       [ 'http://', 'test.com', 'http://xtest.com', [ 'found' => false ] ],
+                       [ 'http://', '*.test.com', 'http://xtest.com', [ 'found' => false ] ],
+                       [ 'http://', '.test.com', 'http://test.com', [ 'found' => false ] ],
+                       [ 'http://', '.test.com', 'http://www.test.com', [ 'found' => false ] ],
+                       [ 'http://', '*..test.com', 'http://test.com', [ 'found' => false ] ],
+                       [ 'http://', '*..test.com', 'http://www.test.com', [ 'found' => false ] ],
+                       [ '', 'http://test.com:8080', 'http://www.test.com:8080', [ 'found' => false ] ],
+                       [ '', 'https://test.com', 'http://test.com', [ 'found' => false ] ],
+                       [ '', 'http://test.com', 'https://test.com', [ 'found' => false ] ],
+                       [ 'http://', 'http://test.com', 'http://test.com', [ 'found' => false ] ],
+                       [ null, 'http://www.test.com', 'http://www.test.com:80', [ 'found' => false ] ],
+                       [ null, 'http://www.test.com:80', 'http://www.test.com', [ 'found' => false ] ],
+                       [ null, 'http://*.test.com:80', 'http://www.test.com', [ 'found' => false ] ],
                        [ '', 'https://gerrit.wikimedia.org/r/#/XXX/status:open,n,z',
-                               'https://gerrit.wikimedia.org/r/#/q/status:open,n,z', false ],
+                               'https://gerrit.wikimedia.org/r/#/q/status:open,n,z', [ 'found' => false ] ],
                        [ '', 'https://*.wikimedia.org/r/#/q/status:open,n,z',
-                               'https://gerrit.wikimedia.org/r/#/XXX/status:open,n,z', false ],
-                       [ 'mailto:', '@test.com', '@abc.test.com', false ],
-                       [ 'mailto:', 'mail@test.com', 'mail2@test.com', false ],
-                       [ '', 'mailto:mail@test.com', 'mail2@test.com', false ],
-                       [ '', 'mailto:@test.com', '@abc.test.com', false ],
-                       [ 'ftp://', '*.co', 'ftp://www.co.uk', false ],
-                       [ 'ftp://', '*.co', 'ftp://www.co.m', false ],
-                       [ 'ftp://', '*.co/dir/', 'ftp://www.co/dir2/', false ],
-                       [ 'ftp://', 'www.co/dir/', 'ftp://www.co/dir2/', false ],
-                       [ 'ftp://', 'test.com/dir/', 'ftp://test.com/', false ],
-                       [ '', 'http://test.com:8080/dir/', 'http://test.com:808/dir/', false ],
-                       [ '', 'http://test.com/dir/index.html', 'http://test.com/dir/index.php', false ],
+                               'https://gerrit.wikimedia.org/r/#/XXX/status:open,n,z', [ 'found' => false ] ],
+                       [ 'mailto:', '@test.com', '@abc.test.com', [ 'found' => false ] ],
+                       [ 'mailto:', 'mail@test.com', 'mail2@test.com', [ 'found' => false ] ],
+                       [ '', 'mailto:mail@test.com', 'mail2@test.com', [ 'found' => false ] ],
+                       [ '', 'mailto:@test.com', '@abc.test.com', [ 'found' => false ] ],
+                       [ 'ftp://', '*.co', 'ftp://www.co.uk', [ 'found' => false ] ],
+                       [ 'ftp://', '*.co', 'ftp://www.co.m', [ 'found' => false ] ],
+                       [ 'ftp://', '*.co/dir/', 'ftp://www.co/dir2/', [ 'found' => false ] ],
+                       [ 'ftp://', 'www.co/dir/', 'ftp://www.co/dir2/', [ 'found' => false ] ],
+                       [ 'ftp://', 'test.com/dir/', 'ftp://test.com/', [ 'found' => false ] ],
+                       [ '', 'http://test.com:8080/dir/', 'http://test.com:808/dir/', [ 'found' => false ] ],
+                       [ '', 'http://test.com/dir/index.html', 'http://test.com/dir/index.php', [ 'found' => false ] ],
+                       [ 'http://', '127.0.0.*', 'http://127.0.1.0', [ 'found' => false ] ],
+                       [ 'http://', '[2001:db8::*]', 'http://[2001:0DB8::123:456]', [ 'found' => false ] ],
 
                        // These are false positives too and ideally shouldn't match, but that
                        // would require using regexes and RLIKE instead of LIKE
-                       // [ null, 'http://*.test.com', 'http://www.test.com:80', false ],
+                       // [ null, 'http://*.test.com', 'http://www.test.com:80', [ 'found' => false ] ],
                        // [ '', 'https://*.wikimedia.org/r/#/q/status:open,n,z',
-                       //      'https://gerrit.wikimedia.org/XXX/r/#/q/status:open,n,z', false ],
+                       //      'https://gerrit.wikimedia.org/XXX/r/#/q/status:open,n,z', [ 'found' => false ] ],
                ];
        }
 
@@ -167,17 +197,24 @@ class LinkFilterTest extends MediaWikiLangTestCase {
         * testMakeLikeArrayWithValidPatterns()
         *
         * Tests whether the LIKE clause produced by LinkFilter::makeLikeArray($pattern, $protocol)
-        * will find one of the URL indexes produced by wfMakeUrlIndexes($url)
+        * will find one of the URL indexes produced by LinkFilter::makeIndexes($url)
         *
         * @dataProvider provideValidPatterns
         *
         * @param string $protocol Protocol, e.g. 'http://' or 'mailto:'
         * @param string $pattern Search pattern to feed to LinkFilter::makeLikeArray
-        * @param string $url URL to feed to wfMakeUrlIndexes
-        * @param bool $shouldBeFound Should the URL be found? (defaults true)
+        * @param string $url URL to feed to LinkFilter::makeIndexes
+        * @param array $options
+        *  - found: (bool) Should the URL be found? (defaults true)
+        *  - idn: (bool) Does this test require the idn conversion (default false)
         */
-       function testMakeLikeArrayWithValidPatterns( $protocol, $pattern, $url, $shouldBeFound = true ) {
-               $indexes = wfMakeUrlIndexes( $url );
+       function testMakeLikeArrayWithValidPatterns( $protocol, $pattern, $url, $options = [] ) {
+               $options += [ 'found' => true, 'idn' => false ];
+               if ( !empty( $options['idn'] ) && !LinkFilter::supportsIDN() ) {
+                       $this->markTestSkipped( 'LinkFilter IDN support is not available' );
+               }
+
+               $indexes = LinkFilter::makeIndexes( $url );
                $likeArray = LinkFilter::makeLikeArray( $pattern, $protocol );
 
                $this->assertTrue( $likeArray !== false,
@@ -186,7 +223,7 @@ class LinkFilterTest extends MediaWikiLangTestCase {
 
                $regex = $this->createRegexFromLIKE( $likeArray );
                $debugmsg = "Regex: '" . $regex . "'\n";
-               $debugmsg .= count( $indexes ) . " index(es) created by wfMakeUrlIndexes():\n";
+               $debugmsg .= count( $indexes ) . " index(es) created by LinkFilter::makeIndexes():\n";
 
                $matches = 0;
 
@@ -195,7 +232,7 @@ class LinkFilterTest extends MediaWikiLangTestCase {
                        $debugmsg .= "\t'$index'\n";
                }
 
-               if ( $shouldBeFound ) {
+               if ( !empty( $options['found'] ) ) {
                        $this->assertTrue(
                                $matches > 0,
                                "Search pattern '$protocol$pattern' does not find url '$url' \n$debugmsg"
@@ -251,4 +288,183 @@ class LinkFilterTest extends MediaWikiLangTestCase {
                );
        }
 
+       /**
+        * @dataProvider provideMakeIndexes()
+        * @covers LinkFilter::makeIndexes
+        */
+       public function testMakeIndexes( $url, $expected ) {
+               // Set global so file:// tests can work
+               $this->setMwGlobals( [
+                       'wgUrlProtocols' => [
+                               'http://',
+                               'https://',
+                               'mailto:',
+                               '//',
+                               'file://', # Non-default
+                       ],
+               ] );
+
+               $index = LinkFilter::makeIndexes( $url );
+               $this->assertEquals( $expected, $index, "LinkFilter::makeIndexes(\"$url\")" );
+       }
+
+       public static function provideMakeIndexes() {
+               return [
+                       // Testcase for T30627
+                       [
+                               'https://example.org/test.cgi?id=12345',
+                               [ 'https://org.example./test.cgi?id=12345' ]
+                       ],
+                       [
+                               // mailtos are handled special
+                               'mailto:wiki@wikimedia.org',
+                               [ 'mailto:org.wikimedia.@wiki' ]
+                       ],
+                       [
+                               // mailtos are handled special
+                               'mailto:wiki',
+                               [ 'mailto:@wiki' ]
+                       ],
+
+                       // file URL cases per T30627...
+                       [
+                               // three slashes: local filesystem path Unix-style
+                               'file:///whatever/you/like.txt',
+                               [ 'file://./whatever/you/like.txt' ]
+                       ],
+                       [
+                               // three slashes: local filesystem path Windows-style
+                               'file:///c:/whatever/you/like.txt',
+                               [ 'file://./c:/whatever/you/like.txt' ]
+                       ],
+                       [
+                               // two slashes: UNC filesystem path Windows-style
+                               'file://intranet/whatever/you/like.txt',
+                               [ 'file://intranet./whatever/you/like.txt' ]
+                       ],
+                       // Multiple-slash cases that can sorta work on Mozilla
+                       // if you hack it just right are kinda pathological,
+                       // and unreliable cross-platform or on IE which means they're
+                       // unlikely to appear on intranets.
+                       // Those will survive the algorithm but with results that
+                       // are less consistent.
+
+                       // protocol-relative URL cases per T31854...
+                       [
+                               '//example.org/test.cgi?id=12345',
+                               [
+                                       'http://org.example./test.cgi?id=12345',
+                                       'https://org.example./test.cgi?id=12345'
+                               ]
+                       ],
+
+                       // IP addresses
+                       [
+                               'http://192.0.2.0/foo',
+                               [ 'http://V4.192.0.2.0./foo' ]
+                       ],
+                       [
+                               'http://192.0.0002.0/foo',
+                               [ 'http://V4.192.0.2.0./foo' ]
+                       ],
+                       [
+                               'http://[2001:db8::1]/foo',
+                               [ 'http://V6.2001.DB8.0.0.0.0.0.1./foo' ]
+                       ],
+
+                       // Explicit specification of the DNS root
+                       [
+                               'http://example.com./foo',
+                               [ 'http://com.example./foo' ]
+                       ],
+                       [
+                               'http://192.0.2.0./foo',
+                               [ 'http://V4.192.0.2.0./foo' ]
+                       ],
+
+                       // Weird edge case
+                       [
+                               'http://.example.com/foo',
+                               [ 'http://com.example../foo' ]
+                       ],
+               ];
+       }
+
+       /**
+        * @dataProvider provideGetQueryConditions
+        * @covers LinkFilter::getQueryConditions
+        */
+       public function testGetQueryConditions( $query, $options, $expected ) {
+               $conds = LinkFilter::getQueryConditions( $query, $options );
+               $this->assertEquals( $expected, $conds );
+       }
+
+       public static function provideGetQueryConditions() {
+               return [
+                       'Basic example' => [
+                               'example.com',
+                               [],
+                               [
+                                       'el_index_60 LIKE \'http://com.example./%\' ESCAPE \'`\' ',
+                                       'el_index LIKE \'http://com.example./%\' ESCAPE \'`\' ',
+                               ],
+                       ],
+                       'Basic example with path' => [
+                               'example.com/foobar',
+                               [],
+                               [
+                                       'el_index_60 LIKE \'http://com.example./foobar%\' ESCAPE \'`\' ',
+                                       'el_index LIKE \'http://com.example./foobar%\' ESCAPE \'`\' ',
+                               ],
+                       ],
+                       'Wildcard domain' => [
+                               '*.example.com',
+                               [],
+                               [
+                                       'el_index_60 LIKE \'http://com.example.%\' ESCAPE \'`\' ',
+                                       'el_index LIKE \'http://com.example.%\' ESCAPE \'`\' ',
+                               ],
+                       ],
+                       'Wildcard domain with path' => [
+                               '*.example.com/foobar',
+                               [],
+                               [
+                                       'el_index_60 LIKE \'http://com.example.%\' ESCAPE \'`\' ',
+                                       'el_index LIKE \'http://com.example.%/foobar%\' ESCAPE \'`\' ',
+                               ],
+                       ],
+                       'Wildcard domain with path, oneWildcard=true' => [
+                               '*.example.com/foobar',
+                               [ 'oneWildcard' => true ],
+                               [
+                                       'el_index_60 LIKE \'http://com.example.%\' ESCAPE \'`\' ',
+                                       'el_index LIKE \'http://com.example.%\' ESCAPE \'`\' ',
+                               ],
+                       ],
+                       'Constant prefix' => [
+                               'example.com/blah/blah/blah/blah/blah/blah/blah/blah/blah/blah?foo=',
+                               [],
+                               [
+                                       'el_index_60' => 'http://com.example./blah/blah/blah/blah/blah/blah/blah/blah/',
+                                       'el_index LIKE ' .
+                                               '\'http://com.example./blah/blah/blah/blah/blah/blah/blah/blah/blah/blah?foo=%\' ' .
+                                               'ESCAPE \'`\' ',
+                               ],
+                       ],
+                       'Bad protocol' => [
+                               'test/',
+                               [ 'protocol' => 'invalid://' ],
+                               false
+                       ],
+                       'Various options' => [
+                               'example.com',
+                               [ 'protocol' => 'https://', 'prefix' => 'xx' ],
+                               [
+                                       'xx_index_60 LIKE \'https://com.example./%\' ESCAPE \'`\' ',
+                                       'xx_index LIKE \'https://com.example./%\' ESCAPE \'`\' ',
+                               ],
+                       ],
+               ];
+       }
+
 }
index b8aecc0..52a3c91 100644 (file)
@@ -152,43 +152,43 @@ class LinkerTest extends MediaWikiLangTestCase {
                        ],
                        // Linker::formatAutocomments
                        [
-                               '<a href="/wiki/Special:BlankPage#autocomment" title="Special:BlankPage">→</a>‎<span dir="auto"><span class="autocomment">autocomment</span></span>',
+                               '<a href="/wiki/Special:BlankPage#autocomment" title="Special:BlankPage">→autocomment</a>‎',
                                "/* autocomment */",
                        ],
                        [
-                               '<a href="/wiki/Special:BlankPage#linkie.3F" title="Special:BlankPage">→</a>‎<span dir="auto"><span class="autocomment"><a href="/wiki/index.php?title=Linkie%3F&amp;action=edit&amp;redlink=1" class="new" title="Linkie? (page does not exist)">linkie?</a></span></span>',
+                               '<a href="/wiki/Special:BlankPage#linkie.3F" title="Special:BlankPage">→<a href="/wiki/index.php?title=Linkie%3F&amp;action=edit&amp;redlink=1" class="new" title="Linkie? (page does not exist)">linkie?</a></a>‎',
                                "/* [[linkie?]] */",
                        ],
                        [
-                               '<a href="/wiki/Special:BlankPage#autocomment" title="Special:BlankPage">→</a>‎<span dir="auto"><span class="autocomment">autocomment: </span> post</span>',
+                               '<a href="/wiki/Special:BlankPage#autocomment" title="Special:BlankPage">→autocomment</a>‎<span dir="auto"><span class="autocomment">: </span> post</span>',
                                "/* autocomment */ post",
                        ],
                        [
-                               'pre <a href="/wiki/Special:BlankPage#autocomment" title="Special:BlankPage">→</a>‎<span dir="auto"><span class="autocomment">autocomment</span></span>',
+                               'pre <a href="/wiki/Special:BlankPage#autocomment" title="Special:BlankPage">→autocomment</a>‎',
                                "pre /* autocomment */",
                        ],
                        [
-                               'pre <a href="/wiki/Special:BlankPage#autocomment" title="Special:BlankPage">→</a>‎<span dir="auto"><span class="autocomment">autocomment: </span> post</span>',
+                               'pre <a href="/wiki/Special:BlankPage#autocomment" title="Special:BlankPage">→autocomment</a>‎<span dir="auto"><span class="autocomment">: </span> post</span>',
                                "pre /* autocomment */ post",
                        ],
                        [
-                               '<a href="/wiki/Special:BlankPage#autocomment" title="Special:BlankPage">→</a>‎<span dir="auto"><span class="autocomment">autocomment: </span> multiple? <a href="/wiki/Special:BlankPage#autocomment2" title="Special:BlankPage">→</a>‎<span dir="auto"><span class="autocomment">autocomment2: </span> </span></span>',
-                               "/* autocomment */ multiple? /* autocomment2 */ ",
+                               '<a href="/wiki/Special:BlankPage#autocomment" title="Special:BlankPage">→autocomment</a>‎<span dir="auto"><span class="autocomment">: </span> multiple? <a href="/wiki/Special:BlankPage#autocomment2" title="Special:BlankPage">→autocomment2</a>‎</span>',
+                               "/* autocomment */ multiple? /* autocomment2 */",
                        ],
                        [
-                               '<a href="/wiki/Special:BlankPage#autocomment_containing_.2F.2A" title="Special:BlankPage">→</a>‎<span dir="auto"><span class="autocomment">autocomment containing /*: </span> T70361</span>',
+                               '<a href="/wiki/Special:BlankPage#autocomment_containing_.2F.2A" title="Special:BlankPage">→autocomment containing /*</a>‎<span dir="auto"><span class="autocomment">: </span> T70361</span>',
                                "/* autocomment containing /* */ T70361"
                        ],
                        [
-                               '<a href="/wiki/Special:BlankPage#autocomment_containing_.22quotes.22" title="Special:BlankPage">→</a>‎<span dir="auto"><span class="autocomment">autocomment containing &quot;quotes&quot;</span></span>',
+                               '<a href="/wiki/Special:BlankPage#autocomment_containing_.22quotes.22" title="Special:BlankPage">→autocomment containing &quot;quotes&quot;</a>‎',
                                "/* autocomment containing \"quotes\" */"
                        ],
                        [
-                               '<a href="/wiki/Special:BlankPage#autocomment_containing_.3Cscript.3Etags.3C.2Fscript.3E" title="Special:BlankPage">→</a>‎<span dir="auto"><span class="autocomment">autocomment containing &lt;script&gt;tags&lt;/script&gt;</span></span>',
+                               '<a href="/wiki/Special:BlankPage#autocomment_containing_.3Cscript.3Etags.3C.2Fscript.3E" title="Special:BlankPage">→autocomment containing &lt;script&gt;tags&lt;/script&gt;</a>‎',
                                "/* autocomment containing <script>tags</script> */"
                        ],
                        [
-                               '<a href="#autocomment">→</a>‎<span dir="auto"><span class="autocomment">autocomment</span></span>',
+                               '<a href="#autocomment">→autocomment</a>‎',
                                "/* autocomment */",
                                false, true
                        ],
@@ -198,12 +198,12 @@ class LinkerTest extends MediaWikiLangTestCase {
                                null
                        ],
                        [
-                               '<a href="/wiki/Special:BlankPage#autocomment" title="Special:BlankPage">→</a>‎<span dir="auto"><span class="autocomment">autocomment</span></span>',
+                               '<a href="/wiki/Special:BlankPage#autocomment" title="Special:BlankPage">→autocomment</a>‎',
                                "/* autocomment */",
                                false, false
                        ],
                        [
-                               '<a class="external" rel="nofollow" href="//en.example.org/w/Special:BlankPage#autocomment">→</a>‎<span dir="auto"><span class="autocomment">autocomment</span></span>',
+                               '<a class="external" rel="nofollow" href="//en.example.org/w/Special:BlankPage#autocomment">→autocomment</a>‎',
                                "/* autocomment */",
                                false, false, $wikiId
                        ],
index 583b751..607f4f7 100644 (file)
@@ -62,4 +62,24 @@ class MovePageTest extends MediaWikiTestCase {
                        WikiPage::factory( $newTitle )->getRevision()
                );
        }
+
+       /**
+        * Test for the move operation being aborted via the TitleMove hook
+        */
+       public function testMoveAbortedByTitleMoveHook() {
+               $error = 'Preventing move operation with TitleMove hook.';
+               $this->setTemporaryHook( 'TitleMove',
+                       function ( $old, $new, $user, $reason, $status ) use ( $error ) {
+                               $status->fatal( $error );
+                       }
+               );
+
+               $oldTitle = Title::newFromText( 'Some old title' );
+               WikiPage::factory( $oldTitle )->doEditContent( new WikitextContent( 'foo' ), 'bar' );
+               $newTitle = Title::newFromText( 'A brand new title' );
+               $mp = new MovePage( $oldTitle, $newTitle );
+               $user = User::newFromName( 'TitleMove tester' );
+               $status = $mp->move( $user, 'Reason', true );
+               $this->assertTrue( $status->hasMessage( $error ) );
+       }
 }
diff --git a/tests/phpunit/includes/Revision/FallbackSlotRoleHandlerTest.php b/tests/phpunit/includes/Revision/FallbackSlotRoleHandlerTest.php
new file mode 100644 (file)
index 0000000..aedf292
--- /dev/null
@@ -0,0 +1,75 @@
+<?php
+
+namespace MediaWiki\Tests\Revision;
+
+use MediaWiki\Revision\FallbackSlotRoleHandler;
+use MediaWikiTestCase;
+use Title;
+
+/**
+ * @covers \MediaWiki\Revision\FallbackSlotRoleHandler
+ */
+class FallbackSlotRoleHandlerTest extends MediaWikiTestCase {
+
+       private function makeBlankTitleObject() {
+               /** @var Title $title */
+               $title = $this->getMockBuilder( Title::class )
+                       ->disableOriginalConstructor()
+                       ->getMock();
+
+               return $title;
+       }
+
+       /**
+        * @covers \MediaWiki\Revision\FallbackSlotRoleHandler::__construct
+        * @covers \MediaWiki\Revision\FallbackSlotRoleHandler::getRole()
+        * @covers \MediaWiki\Revision\FallbackSlotRoleHandler::getNameMessageKey()
+        * @covers \MediaWiki\Revision\FallbackSlotRoleHandler::getDefaultModel()
+        * @covers \MediaWiki\Revision\FallbackSlotRoleHandler::getOutputLayoutHints()
+        */
+       public function testConstruction() {
+               $handler = new FallbackSlotRoleHandler( 'foo' );
+               $this->assertSame( 'foo', $handler->getRole() );
+               $this->assertSame( 'slot-name-foo', $handler->getNameMessageKey() );
+
+               $title = $this->makeBlankTitleObject();
+               $this->assertSame( CONTENT_MODEL_TEXT, $handler->getDefaultModel( $title ) );
+
+               $hints = $handler->getOutputLayoutHints();
+               $this->assertArrayHasKey( 'display', $hints );
+               $this->assertArrayHasKey( 'region', $hints );
+               $this->assertArrayHasKey( 'placement', $hints );
+       }
+
+       /**
+        * @covers \MediaWiki\Revision\FallbackSlotRoleHandler::isAllowedModel()
+        */
+       public function testIsAllowedModel() {
+               $handler = new FallbackSlotRoleHandler( 'foo', 'FooModel' );
+
+               // For the fallback handler, no models are allowed
+               $title = $this->makeBlankTitleObject();
+               $this->assertFalse( $handler->isAllowedModel( 'FooModel', $title ) );
+               $this->assertFalse( $handler->isAllowedModel( 'QuaxModel', $title ) );
+       }
+
+       /**
+        * @covers \MediaWiki\Revision\SlotRoleHandler::isAllowedModel()
+        */
+       public function testIsAllowedOn() {
+               $handler = new FallbackSlotRoleHandler( 'foo', 'FooModel' );
+
+               $title = $this->makeBlankTitleObject();
+               $this->assertFalse( $handler->isAllowedOn( $title ) );
+       }
+
+       /**
+        * @covers \MediaWiki\Revision\FallbackSlotRoleHandler::supportsArticleCount()
+        */
+       public function testSupportsArticleCount() {
+               $handler = new FallbackSlotRoleHandler( 'foo', 'FooModel' );
+
+               $this->assertFalse( $handler->supportsArticleCount() );
+       }
+
+}
diff --git a/tests/phpunit/includes/Revision/MainSlotRoleHandlerTest.php b/tests/phpunit/includes/Revision/MainSlotRoleHandlerTest.php
new file mode 100644 (file)
index 0000000..f2f3da8
--- /dev/null
@@ -0,0 +1,79 @@
+<?php
+
+namespace MediaWiki\Tests\Revision;
+
+use MediaWiki\Revision\MainSlotRoleHandler;
+use MediaWikiTestCase;
+use PHPUnit\Framework\MockObject\MockObject;
+use Title;
+
+/**
+ * @covers \MediaWiki\Revision\MainSlotRoleHandler
+ */
+class MainSlotRoleHandlerTest extends MediaWikiTestCase {
+
+       private function makeTitleObject( $ns ) {
+               /** @var Title|MockObject $title */
+               $title = $this->getMockBuilder( Title::class )
+                       ->disableOriginalConstructor()
+                       ->getMock();
+
+               $title->method( 'getNamespace' )
+                       ->willReturn( $ns );
+
+               return $title;
+       }
+
+       /**
+        * @covers \MediaWiki\Revision\MainSlotRoleHandler::__construct
+        * @covers \MediaWiki\Revision\MainSlotRoleHandler::getRole()
+        * @covers \MediaWiki\Revision\MainSlotRoleHandler::getNameMessageKey()
+        * @covers \MediaWiki\Revision\MainSlotRoleHandler::getOutputLayoutHints()
+        */
+       public function testConstruction() {
+               $handler = new MainSlotRoleHandler( [] );
+               $this->assertSame( 'main', $handler->getRole() );
+               $this->assertSame( 'slot-name-main', $handler->getNameMessageKey() );
+
+               $hints = $handler->getOutputLayoutHints();
+               $this->assertArrayHasKey( 'display', $hints );
+               $this->assertArrayHasKey( 'region', $hints );
+               $this->assertArrayHasKey( 'placement', $hints );
+       }
+
+       /**
+        * @covers \MediaWiki\Revision\MainSlotRoleHandler::getDefaultModel()
+        */
+       public function testFetDefaultModel() {
+               $handler = new MainSlotRoleHandler( [ 100 => CONTENT_MODEL_TEXT ] );
+
+               // For the main handler, the namespace determins the defualt model
+               $titleMain = $this->makeTitleObject( NS_MAIN );
+               $this->assertSame( CONTENT_MODEL_WIKITEXT, $handler->getDefaultModel( $titleMain ) );
+
+               $title100 = $this->makeTitleObject( 100 );
+               $this->assertSame( CONTENT_MODEL_TEXT, $handler->getDefaultModel( $title100 ) );
+       }
+
+       /**
+        * @covers \MediaWiki\Revision\MainSlotRoleHandler::isAllowedModel()
+        */
+       public function testIsAllowedModel() {
+               $handler = new MainSlotRoleHandler( [] );
+
+               // For the main handler, (nearly) all models are allowed
+               $title = $this->makeTitleObject( NS_MAIN );
+               $this->assertTrue( $handler->isAllowedModel( CONTENT_MODEL_WIKITEXT, $title ) );
+               $this->assertTrue( $handler->isAllowedModel( CONTENT_MODEL_TEXT, $title ) );
+       }
+
+       /**
+        * @covers \MediaWiki\Revision\MainSlotRoleHandler::supportsArticleCount()
+        */
+       public function testSupportsArticleCount() {
+               $handler = new MainSlotRoleHandler( [] );
+
+               $this->assertTrue( $handler->supportsArticleCount() );
+       }
+
+}
index 08a8fa6..43fccee 100644 (file)
@@ -483,6 +483,23 @@ class RenderedRevisionTest extends MediaWikiTestCase {
                $this->assertContains( 'time:20180101000003!', $html );
        }
 
+       public function testSetRevisionParserOutput() {
+               $title = $this->getMockTitle( 3, 21 );
+               $rev = $this->getMockRevision( RevisionStoreRecord::class, $title );
+
+               $options = ParserOptions::newCanonical( 'canonical' );
+               $rr = new RenderedRevision( $title, $rev, $options, $this->combinerCallback );
+
+               $output = new ParserOutput( 'Kittens' );
+               $rr->setRevisionParserOutput( $output );
+
+               $this->assertSame( $output, $rr->getRevisionParserOutput() );
+               $this->assertSame( 'Kittens', $rr->getRevisionParserOutput()->getText() );
+
+               $this->assertSame( $output, $rr->getSlotParserOutput( SlotRecord::MAIN ) );
+               $this->assertSame( 'Kittens', $rr->getSlotParserOutput( SlotRecord::MAIN )->getText() );
+       }
+
        public function testNoHtml() {
                /** @var MockObject|Content $mockContent */
                $mockContent = $this->getMockBuilder( WikitextContent::class )
index 469f281..59b5a2c 100644 (file)
@@ -7,9 +7,12 @@ use Content;
 use Language;
 use LogicException;
 use MediaWiki\Revision\MutableRevisionRecord;
+use MediaWiki\Revision\MainSlotRoleHandler;
 use MediaWiki\Revision\RevisionRecord;
 use MediaWiki\Revision\RevisionRenderer;
 use MediaWiki\Revision\SlotRecord;
+use MediaWiki\Revision\SlotRoleRegistry;
+use MediaWiki\Storage\NameTableStore;
 use MediaWikiTestCase;
 use MediaWiki\User\UserIdentityValue;
 use ParserOptions;
@@ -126,7 +129,20 @@ class RevisionRendererTest extends MediaWikiTestCase {
                        ->with( $dbIndex )
                        ->willReturn( $db );
 
-               return new RevisionRenderer( $lb );
+               /** @var NameTableStore|MockObject $slotRoles */
+               $slotRoles = $this->getMockBuilder( NameTableStore::class )
+                       ->disableOriginalConstructor()
+                       ->getMock();
+               $slotRoles->method( 'getMap' )
+                       ->willReturn( [] );
+
+               $roleReg = new SlotRoleRegistry( $slotRoles );
+               $roleReg->defineRole( 'main', function () {
+                       return new MainSlotRoleHandler( [] );
+               } );
+               $roleReg->defineRoleWithModel( 'aux', CONTENT_MODEL_WIKITEXT );
+
+               return new RevisionRenderer( $lb, $roleReg );
        }
 
        private function selectFieldCallback( $table, $fields, $cond, $maxRev ) {
@@ -240,6 +256,34 @@ class RevisionRendererTest extends MediaWikiTestCase {
                $this->assertSame( $html, $rr->getSlotParserOutput( SlotRecord::MAIN )->getText() );
        }
 
+       public function testGetRenderedRevision_known() {
+               $renderer = $this->newRevisionRenderer( 100, true ); // use master
+               $title = $this->getMockTitle( 7, 21 );
+
+               $rev = new MutableRevisionRecord( $title );
+               $rev->setId( 21 ); // current!
+               $rev->setUser( new UserIdentityValue( 9, 'Frank', 0 ) );
+               $rev->setTimestamp( '20180101000003' );
+               $rev->setComment( CommentStoreComment::newUnsavedComment( '' ) );
+
+               $text = "uncached text";
+               $rev->setContent( SlotRecord::MAIN, new WikitextContent( $text ) );
+
+               $output = new ParserOutput( 'cached text' );
+
+               $options = ParserOptions::newCanonical( 'canonical' );
+               $rr = $renderer->getRenderedRevision(
+                       $rev,
+                       $options,
+                       null,
+                       [ 'known-revision-output' => $output ]
+               );
+
+               $this->assertSame( $output, $rr->getRevisionParserOutput() );
+               $this->assertSame( 'cached text', $rr->getRevisionParserOutput()->getText() );
+               $this->assertSame( 'cached text', $rr->getSlotParserOutput( SlotRecord::MAIN )->getText() );
+       }
+
        public function testGetRenderedRevision_old() {
                $renderer = $this->newRevisionRenderer( 100 );
                $title = $this->getMockTitle( 7, 21 );
index 4ece51b..cf5e808 100644 (file)
@@ -80,7 +80,7 @@ abstract class RevisionStoreDbTestBase extends MediaWikiTestCase {
                $this->setMwGlobals( [
                        'wgMultiContentRevisionSchemaMigrationStage' => $this->getMcrMigrationStage(),
                        'wgContentHandlerUseDB' => $this->getContentHandlerUseDB(),
-                       'wgCommentTableSchemaMigrationStage' => MIGRATION_OLD,
+                       'wgCommentTableSchemaMigrationStage' => MIGRATION_NEW,
                        'wgActorTableSchemaMigrationStage' => SCHEMA_COMPAT_OLD,
                ] );
 
@@ -233,6 +233,7 @@ abstract class RevisionStoreDbTestBase extends MediaWikiTestCase {
                        MediaWikiServices::getInstance()->getCommentStore(),
                        MediaWikiServices::getInstance()->getContentModelStore(),
                        MediaWikiServices::getInstance()->getSlotRoleStore(),
+                       MediaWikiServices::getInstance()->getSlotRoleRegistry(),
                        $this->getMcrMigrationStage(),
                        MediaWikiServices::getInstance()->getActorMigration(),
                        $wikiId
index 9904b3b..2e61745 100644 (file)
@@ -7,6 +7,7 @@ use CommentStore;
 use MediaWiki\Logger\Spi as LoggerSpi;
 use MediaWiki\Revision\RevisionStore;
 use MediaWiki\Revision\RevisionStoreFactory;
+use MediaWiki\Revision\SlotRoleRegistry;
 use MediaWiki\Storage\BlobStore;
 use MediaWiki\Storage\BlobStoreFactory;
 use MediaWiki\Storage\NameTableStore;
@@ -27,6 +28,7 @@ class RevisionStoreFactoryTest extends MediaWikiTestCase {
                        $this->getMockLoadBalancerFactory(),
                        $this->getMockBlobStoreFactory(),
                        $this->getNameTableStoreFactory(),
+                       $this->getMockSlotRoleRegistry(),
                        $this->getHashWANObjectCache(),
                        $this->getMockCommentStore(),
                        ActorMigration::newMigration(),
@@ -56,6 +58,7 @@ class RevisionStoreFactoryTest extends MediaWikiTestCase {
                $lbFactory = $this->getMockLoadBalancerFactory();
                $blobStoreFactory = $this->getMockBlobStoreFactory();
                $nameTableStoreFactory = $this->getNameTableStoreFactory();
+               $slotRoleRegistry = $this->getMockSlotRoleRegistry();
                $cache = $this->getHashWANObjectCache();
                $commentStore = $this->getMockCommentStore();
                $actorMigration = ActorMigration::newMigration();
@@ -65,6 +68,7 @@ class RevisionStoreFactoryTest extends MediaWikiTestCase {
                        $lbFactory,
                        $blobStoreFactory,
                        $nameTableStoreFactory,
+                       $slotRoleRegistry,
                        $cache,
                        $commentStore,
                        $actorMigration,
@@ -142,6 +146,16 @@ class RevisionStoreFactoryTest extends MediaWikiTestCase {
                return $mock;
        }
 
+       /**
+        * @return \PHPUnit_Framework_MockObject_MockObject|SlotRoleRegistry
+        */
+       private function getMockSlotRoleRegistry() {
+               $mock = $this->getMockBuilder( SlotRoleRegistry::class )
+                       ->disableOriginalConstructor()->getMock();
+
+               return $mock;
+       }
+
        /**
         * @return NameTableStoreFactory
         */
index 2093b41..efc2952 100644 (file)
@@ -9,6 +9,7 @@ use Language;
 use MediaWiki\MediaWikiServices;
 use MediaWiki\Revision\RevisionAccessException;
 use MediaWiki\Revision\RevisionStore;
+use MediaWiki\Revision\SlotRoleRegistry;
 use MediaWiki\Revision\SlotRecord;
 use MediaWiki\Storage\SqlBlobStore;
 use MediaWikiTestCase;
@@ -51,6 +52,7 @@ class RevisionStoreTest extends MediaWikiTestCase {
                        MediaWikiServices::getInstance()->getCommentStore(),
                        MediaWikiServices::getInstance()->getContentModelStore(),
                        MediaWikiServices::getInstance()->getSlotRoleStore(),
+                       MediaWikiServices::getInstance()->getSlotRoleRegistry(),
                        $wgMultiContentRevisionSchemaMigrationStage,
                        MediaWikiServices::getInstance()->getActorMigration()
                );
@@ -88,6 +90,14 @@ class RevisionStoreTest extends MediaWikiTestCase {
                        ->disableOriginalConstructor()->getMock();
        }
 
+       /**
+        * @return \PHPUnit_Framework_MockObject_MockObject|SlotRoleRegistry
+        */
+       private function getMockSlotRoleRegistry() {
+               return $this->getMockBuilder( SlotRoleRegistry::class )
+                       ->disableOriginalConstructor()->getMock();
+       }
+
        private function getHashWANObjectCache() {
                return new WANObjectCache( [ 'cache' => new \HashBagOStuff() ] );
        }
@@ -127,6 +137,7 @@ class RevisionStoreTest extends MediaWikiTestCase {
                        $this->getMockCommentStore(),
                        $nameTables->getContentModels(),
                        $nameTables->getSlotRoles(),
+                       $this->getMockSlotRoleRegistry(),
                        $migrationMode,
                        MediaWikiServices::getInstance()->getActorMigration()
                );
@@ -541,6 +552,7 @@ class RevisionStoreTest extends MediaWikiTestCase {
                $nameTables = $services->getNameTableStoreFactory();
                $contentModelStore = $nameTables->getContentModels();
                $slotRoleStore = $nameTables->getSlotRoles();
+               $slotRoleRegistry = $services->getSlotRoleRegistry();
                $store = new RevisionStore(
                        $loadBalancer,
                        $blobStore,
@@ -548,6 +560,7 @@ class RevisionStoreTest extends MediaWikiTestCase {
                        $commentStore,
                        $nameTables->getContentModels(),
                        $nameTables->getSlotRoles(),
+                       $slotRoleRegistry,
                        $migration,
                        $services->getActorMigration()
                );
diff --git a/tests/phpunit/includes/Revision/SlotRoleHandlerTest.php b/tests/phpunit/includes/Revision/SlotRoleHandlerTest.php
new file mode 100644 (file)
index 0000000..67e9464
--- /dev/null
@@ -0,0 +1,67 @@
+<?php
+
+namespace MediaWiki\Tests\Revision;
+
+use MediaWiki\Revision\SlotRoleHandler;
+use MediaWikiTestCase;
+use Title;
+
+/**
+ * @covers \MediaWiki\Revision\SlotRoleHandler
+ */
+class SlotRoleHandlerTest extends MediaWikiTestCase {
+
+       private function makeBlankTitleObject() {
+               /** @var Title $title */
+               $title = $this->getMockBuilder( Title::class )
+                       ->disableOriginalConstructor()
+                       ->getMock();
+
+               return $title;
+       }
+
+       /**
+        * @covers \MediaWiki\Revision\SlotRoleHandler::__construct
+        * @covers \MediaWiki\Revision\SlotRoleHandler::getRole()
+        * @covers \MediaWiki\Revision\SlotRoleHandler::getNameMessageKey()
+        * @covers \MediaWiki\Revision\SlotRoleHandler::getDefaultModel()
+        * @covers \MediaWiki\Revision\SlotRoleHandler::getOutputLayoutHints()
+        */
+       public function testConstruction() {
+               $handler = new SlotRoleHandler( 'foo', 'FooModel', [ 'frob' => 'niz' ] );
+               $this->assertSame( 'foo', $handler->getRole() );
+               $this->assertSame( 'slot-name-foo', $handler->getNameMessageKey() );
+
+               $title = $this->makeBlankTitleObject();
+               $this->assertSame( 'FooModel', $handler->getDefaultModel( $title ) );
+
+               $hints = $handler->getOutputLayoutHints();
+               $this->assertArrayHasKey( 'frob', $hints );
+               $this->assertSame( 'niz', $hints['frob'] );
+
+               $this->assertArrayHasKey( 'display', $hints );
+               $this->assertArrayHasKey( 'region', $hints );
+               $this->assertArrayHasKey( 'placement', $hints );
+       }
+
+       /**
+        * @covers \MediaWiki\Revision\SlotRoleHandler::isAllowedModel()
+        */
+       public function testIsAllowedModel() {
+               $handler = new SlotRoleHandler( 'foo', 'FooModel' );
+
+               $title = $this->makeBlankTitleObject();
+               $this->assertTrue( $handler->isAllowedModel( 'FooModel', $title ) );
+               $this->assertFalse( $handler->isAllowedModel( 'QuaxModel', $title ) );
+       }
+
+       /**
+        * @covers \MediaWiki\Revision\SlotRoleHandler::supportsArticleCount()
+        */
+       public function testSupportsArticleCount() {
+               $handler = new SlotRoleHandler( 'foo', 'FooModel' );
+
+               $this->assertFalse( $handler->supportsArticleCount() );
+       }
+
+}
diff --git a/tests/phpunit/includes/Revision/SlotRoleRegistryTest.php b/tests/phpunit/includes/Revision/SlotRoleRegistryTest.php
new file mode 100644 (file)
index 0000000..4d8030d
--- /dev/null
@@ -0,0 +1,194 @@
+<?php
+
+namespace MediaWiki\Tests\Revision;
+
+use InvalidArgumentException;
+use LogicException;
+use MediaWiki\Revision\MainSlotRoleHandler;
+use MediaWiki\Revision\SlotRoleHandler;
+use MediaWiki\Revision\SlotRoleRegistry;
+use MediaWiki\Storage\NameTableStore;
+use MediaWikiTestCase;
+use Title;
+use Wikimedia\Assert\PostconditionException;
+
+/**
+ * @covers \MediaWiki\Revision\SlotRoleRegistry
+ */
+class SlotRoleRegistryTest extends MediaWikiTestCase {
+
+       private function makeBlankTitleObject() {
+               /** @var Title $title */
+               $title = $this->getMockBuilder( Title::class )
+                       ->disableOriginalConstructor()
+                       ->getMock();
+
+               return $title;
+       }
+
+       private function makeNameTableStore( array $names = [] ) {
+               $mock = $this->getMockBuilder( NameTableStore::class )
+                       ->disableOriginalConstructor()
+                       ->getMock();
+
+               $mock->method( 'getMap' )
+                       ->willReturn( $names );
+
+               return $mock;
+       }
+
+       private function newSlotRoleRegistry( NameTableStore $roleNameStore = null ) {
+               if ( !$roleNameStore ) {
+                       $roleNameStore = $this->makeNameTableStore();
+               }
+
+               return new SlotRoleRegistry( $roleNameStore );
+       }
+
+       /**
+        * @covers \MediaWiki\Revision\SlotRoleRegistry::defineRole()
+        * @covers \MediaWiki\Revision\SlotRoleRegistry::getDefinedRoles()
+        * @covers \MediaWiki\Revision\SlotRoleRegistry::getKnownRoles()
+        * @covers \MediaWiki\Revision\SlotRoleRegistry::getRoleHandler()
+        */
+       public function testDefineRole() {
+               $registry = $this->newSlotRoleRegistry();
+               $registry->defineRole( 'foo', function ( $role ) {
+                       return new SlotRoleHandler( $role, 'FooModel' );
+               } );
+
+               $this->assertTrue( $registry->isDefinedRole( 'foo' ) );
+               $this->assertContains( 'foo', $registry->getDefinedRoles() );
+               $this->assertContains( 'foo', $registry->getKnownRoles() );
+
+               $handler = $registry->getRoleHandler( 'foo' );
+               $this->assertSame( 'foo', $handler->getRole() );
+
+               $title = $this->makeBlankTitleObject();
+               $this->assertSame( 'FooModel', $handler->getDefaultModel( $title ) );
+       }
+
+       /**
+        * @covers \MediaWiki\Revision\SlotRoleRegistry::defineRole()
+        */
+       public function testDefineRoleFailsForDupe() {
+               $registry = $this->newSlotRoleRegistry();
+               $registry->defineRole( 'foo', function ( $role ) {
+                       return new SlotRoleHandler( $role, 'FooModel' );
+               } );
+
+               $this->setExpectedException( LogicException::class );
+               $registry->defineRole( 'foo', function ( $role ) {
+                       return new SlotRoleHandler( $role, 'FooModel' );
+               } );
+       }
+
+       /**
+        * @covers \MediaWiki\Revision\SlotRoleRegistry::defineRoleWithModel()
+        * @covers \MediaWiki\Revision\SlotRoleRegistry::getDefinedRoles()
+        * @covers \MediaWiki\Revision\SlotRoleRegistry::getKnownRoles()
+        * @covers \MediaWiki\Revision\SlotRoleRegistry::getRoleHandler()
+        */
+       public function testDefineRoleWithContentModel() {
+               $registry = $this->newSlotRoleRegistry();
+               $registry->defineRoleWithModel( 'foo', 'FooModel' );
+
+               $this->assertTrue( $registry->isDefinedRole( 'foo' ) );
+               $this->assertContains( 'foo', $registry->getDefinedRoles() );
+               $this->assertContains( 'foo', $registry->getKnownRoles() );
+
+               $handler = $registry->getRoleHandler( 'foo' );
+               $this->assertSame( 'foo', $handler->getRole() );
+
+               /** @var Title $title */
+               $title = $this->getMockBuilder( Title::class )
+                       ->disableOriginalConstructor()
+                       ->getMock();
+               $this->assertSame( 'FooModel', $handler->getDefaultModel( $title ) );
+       }
+
+       /**
+        * @covers \MediaWiki\Revision\SlotRoleRegistry::getRoleHandler()
+        */
+       public function testGetRoleHandlerForUnknownModel() {
+               $registry = $this->newSlotRoleRegistry();
+
+               $this->setExpectedException( InvalidArgumentException::class );
+
+               $registry->getRoleHandler( 'foo' );
+       }
+
+       /**
+        * @covers \MediaWiki\Revision\SlotRoleRegistry::getRoleHandler()
+        */
+       public function testGetRoleHandlerFallbackHandler() {
+               $registry = $this->newSlotRoleRegistry(
+                       $this->makeNameTableStore( [ 1 => 'foo' ] )
+               );
+
+               \Wikimedia\suppressWarnings();
+               $handler = $registry->getRoleHandler( 'foo' );
+               $this->assertSame( 'foo', $handler->getRole() );
+
+               \Wikimedia\restoreWarnings();
+       }
+
+       /**
+        * @covers \MediaWiki\Revision\SlotRoleRegistry::getRoleHandler()
+        */
+       public function testGetRoleHandlerWithBadInstantiator() {
+               $registry = $this->newSlotRoleRegistry();
+               $registry->defineRole( 'foo', function ( $role ) {
+                       return 'Not a SlotRoleHandler instance';
+               } );
+
+               $this->setExpectedException( PostconditionException::class );
+               $registry->getRoleHandler( 'foo' );
+       }
+
+       /**
+        * @covers \MediaWiki\Revision\SlotRoleRegistry::getRequiredRoles()
+        */
+       public function testGetRequiredRoles() {
+               $registry = $this->newSlotRoleRegistry();
+               $registry->defineRole( 'main', function ( $role ) {
+                       return new MainSlotRoleHandler( [] );
+               } );
+
+               $title = $this->makeBlankTitleObject();
+               $this->assertEquals( [ 'main' ], $registry->getRequiredRoles( $title ) );
+       }
+
+       /**
+        * @covers \MediaWiki\Revision\SlotRoleRegistry::getAllowedRoles()
+        */
+       public function testGetAllowedRoles() {
+               $registry = $this->newSlotRoleRegistry();
+               $registry->defineRole( 'main', function ( $role ) {
+                       return new MainSlotRoleHandler( [] );
+               } );
+               $registry->defineRoleWithModel( 'foo', CONTENT_MODEL_TEXT );
+
+               $title = $this->makeBlankTitleObject();
+               $this->assertEquals( [ 'main', 'foo' ], $registry->getAllowedRoles( $title ) );
+       }
+
+       /**
+        * @covers \MediaWiki\Revision\SlotRoleRegistry::getKnownRoles()
+        * @covers \MediaWiki\Revision\SlotRoleRegistry::isKnownRole()
+        */
+       public function testGetKnownRoles() {
+               $registry = $this->newSlotRoleRegistry(
+                       $this->makeNameTableStore( [ 1 => 'foo' ] )
+               );
+               $registry->defineRoleWithModel( 'bar', CONTENT_MODEL_TEXT );
+
+               $this->assertTrue( $registry->isKnownRole( 'foo' ) );
+               $this->assertTrue( $registry->isKnownRole( 'bar' ) );
+               $this->assertFalse( $registry->isKnownRole( 'xyzzy' ) );
+
+               $title = $this->makeBlankTitleObject();
+               $this->assertArrayEquals( [ 'foo', 'bar' ], $registry->getKnownRoles( $title ) );
+       }
+
+}
index e5e5551..a2f2796 100644 (file)
@@ -90,7 +90,7 @@ abstract class RevisionDbTestBase extends MediaWikiTestCase {
                $this->setMwGlobals( [
                        'wgMultiContentRevisionSchemaMigrationStage' => $this->getMcrMigrationStage(),
                        'wgContentHandlerUseDB' => $this->getContentHandlerUseDB(),
-                       'wgCommentTableSchemaMigrationStage' => MIGRATION_OLD,
+                       'wgCommentTableSchemaMigrationStage' => MIGRATION_NEW,
                        'wgActorTableSchemaMigrationStage' => SCHEMA_COMPAT_OLD,
                ] );
 
@@ -458,6 +458,7 @@ abstract class RevisionDbTestBase extends MediaWikiTestCase {
                        $services->getCommentStore(),
                        $services->getContentModelStore(),
                        $services->getSlotRoleStore(),
+                       $services->getSlotRoleRegistry(),
                        $this->getMcrMigrationStage(),
                        $services->getActorMigration()
                );
index c053104..7ee800a 100644 (file)
@@ -281,10 +281,14 @@ class RevisionTest extends MediaWikiTestCase {
         * @covers \MediaWiki\Revision\RevisionStore::newMutableRevisionFromArray
         */
        public function testConstructFromRowWithBadPageId() {
-               $this->setMwGlobals( 'wgCommentTableSchemaMigrationStage', MIGRATION_OLD );
+               $this->setMwGlobals( 'wgCommentTableSchemaMigrationStage', MIGRATION_NEW );
                $this->overrideMwServices();
                Wikimedia\suppressWarnings();
-               $rev = new Revision( (object)[ 'rev_page' => 77777777 ] );
+               $rev = new Revision( (object)[
+                       'rev_page' => 77777777,
+                       'rev_comment_text' => '',
+                       'rev_comment_data' => null,
+               ] );
                $this->assertSame( 77777777, $rev->getPage() );
                Wikimedia\restoreWarnings();
        }
@@ -474,6 +478,7 @@ class RevisionTest extends MediaWikiTestCase {
                        MediaWikiServices::getInstance()->getCommentStore(),
                        MediaWikiServices::getInstance()->getContentModelStore(),
                        MediaWikiServices::getInstance()->getSlotRoleStore(),
+                       MediaWikiServices::getInstance()->getSlotRoleRegistry(),
                        MIGRATION_OLD,
                        MediaWikiServices::getInstance()->getActorMigration()
                );
@@ -597,7 +602,7 @@ class RevisionTest extends MediaWikiTestCase {
         * @covers Revision::loadFromTitle
         */
        public function testLoadFromTitle() {
-               $this->setMwGlobals( 'wgCommentTableSchemaMigrationStage', MIGRATION_OLD );
+               $this->setMwGlobals( 'wgCommentTableSchemaMigrationStage', MIGRATION_NEW );
                $this->setMwGlobals( 'wgActorTableSchemaMigrationStage', SCHEMA_COMPAT_OLD );
                $this->overrideMwServices();
                $title = $this->getMockTitle();
@@ -634,7 +639,10 @@ class RevisionTest extends MediaWikiTestCase {
                $db->expects( $this->once() )
                        ->method( 'selectRow' )
                        ->with(
-                               $this->equalTo( [ 'revision', 'page', 'user' ] ),
+                               $this->equalTo( [
+                                       'revision', 'page', 'user',
+                                       'temp_rev_comment' => 'revision_comment_temp', 'comment_rev_comment' => 'comment',
+                               ] ),
                                // We don't really care about the fields are they come from the selectField methods
                                $this->isType( 'array' ),
                                $this->equalTo( $conditions ),
index c175e2f..5f3cba3 100644 (file)
@@ -102,6 +102,9 @@ class DerivedPageDataUpdaterTest extends MediaWikiTestCase {
                }
 
                $rev = $updater->saveRevision( $comment );
+               if ( !$updater->wasSuccessful() ) {
+                       $this->fail( $updater->getStatus()->getWikiText() );
+               }
 
                $this->getDerivedPageDataUpdater( $page ); // flush cached instance after.
                return $rev;
@@ -186,6 +189,11 @@ class DerivedPageDataUpdaterTest extends MediaWikiTestCase {
         * @covers \MediaWiki\Storage\DerivedPageDataUpdater::getCanonicalParserOutput()
         */
        public function testPrepareContent() {
+               MediaWikiServices::getInstance()->getSlotRoleRegistry()->defineRoleWithModel(
+                       'aux',
+                       CONTENT_MODEL_WIKITEXT
+               );
+
                $sysop = $this->getTestUser( [ 'sysop' ] )->getUser();
                $updater = $this->getDerivedPageDataUpdater( __METHOD__ );
 
@@ -584,9 +592,7 @@ class DerivedPageDataUpdaterTest extends MediaWikiTestCase {
        }
 
        public function testGetSecondaryDataUpdatesWithSlotRemoval() {
-               global $wgMultiContentRevisionSchemaMigrationStage;
-
-               if ( ! ( $wgMultiContentRevisionSchemaMigrationStage & SCHEMA_COMPAT_READ_NEW ) ) {
+               if ( !$this->hasMultiSlotSupport() ) {
                        $this->markTestSkipped( 'Slot removal cannot happen with MCR being enabled' );
                }
 
@@ -594,6 +600,11 @@ class DerivedPageDataUpdaterTest extends MediaWikiTestCase {
                $a1 = $this->defineMockContentModelForUpdateTesting( 'A1' );
                $m2 = $this->defineMockContentModelForUpdateTesting( 'M2' );
 
+               MediaWikiServices::getInstance()->getSlotRoleRegistry()->defineRoleWithModel(
+                       'aux',
+                       $a1->getModelID()
+               );
+
                $mainContent1 = $this->createMockContent( $m1, 'main 1' );
                $auxContent1 = $this->createMockContent( $a1, 'aux 1' );
                $mainContent2 = $this->createMockContent( $m2, 'main 2' );
@@ -803,16 +814,6 @@ class DerivedPageDataUpdaterTest extends MediaWikiTestCase {
                        '$forParent' => 0,
                        '$isReusable' => false,
                ];
-               yield 'mismatch prepareUpdate revision user' => [
-                       '$prepUser' => null,
-                       '$prepRevision' => $rev2,
-                       '$prepUpdate' => null,
-                       '$forUser' => null,
-                       '$forRevision' => $rev2x,
-                       '$forUpdate' => null,
-                       '$forParent' => 0,
-                       '$isReusable' => false,
-               ];
                yield 'mismatch prepareUpdate revision id' => [
                        '$prepUser' => null,
                        '$prepRevision' => $rev2,
@@ -876,6 +877,11 @@ class DerivedPageDataUpdaterTest extends MediaWikiTestCase {
 
                if ( $this->hasMultiSlotSupport() ) {
                        $content['aux'] = new WikitextContent( 'Aux [[Nix]]' );
+
+                       MediaWikiServices::getInstance()->getSlotRoleRegistry()->defineRoleWithModel(
+                               'aux',
+                               CONTENT_MODEL_WIKITEXT
+                       );
                }
 
                $rev = $this->createRevision( $page, 'first', $content );
index 3ba9032..4e09077 100644 (file)
@@ -22,6 +22,15 @@ use WikiPage;
  */
 class PageUpdaterTest extends MediaWikiTestCase {
 
+       public function setUp() {
+               parent::setUp();
+
+               MediaWikiServices::getInstance()->getSlotRoleRegistry()->defineRoleWithModel(
+                       'aux',
+                       CONTENT_MODEL_WIKITEXT
+               );
+       }
+
        private function getDummyTitle( $method ) {
                return Title::newFromText( $method, $this->getDefaultWikitextNS() );
        }
@@ -337,6 +346,34 @@ class PageUpdaterTest extends MediaWikiTestCase {
                $this->assertTrue( $status->hasMessage( 'edit-already-exists' ), 'edit-already-exists' );
        }
 
+       /**
+        * @covers \MediaWiki\Storage\PageUpdater::saveRevision()
+        */
+       public function testFailureOnBadContentModel() {
+               $user = $this->getTestUser()->getUser();
+               $title = $this->getDummyTitle( __METHOD__ );
+
+               // start editing non-existing page
+               $page = WikiPage::factory( $title );
+               $updater = $page->newPageUpdater( $user );
+
+               // plain text content should fail in aux slot (the main slot doesn't care)
+               $updater->setContent( 'main', new TextContent( 'Main Content' ) );
+               $updater->setContent( 'aux', new TextContent( 'Aux Content' ) );
+
+               $summary = CommentStoreComment::newUnsavedComment( 'udpate?!' );
+               $updater->saveRevision( $summary, EDIT_UPDATE );
+               $status = $updater->getStatus();
+
+               $this->assertFalse( $updater->wasSuccessful(), 'wasSuccessful()' );
+               $this->assertNull( $updater->getNewRevision(), 'getNewRevision()' );
+               $this->assertFalse( $status->isOK(), 'getStatus()->isOK()' );
+               $this->assertTrue(
+                       $status->hasMessage( 'content-not-allowed-here' ),
+                       'content-not-allowed-here'
+               );
+       }
+
        public function provideSetRcPatrolStatus( $patrolled ) {
                yield [ RecentChange::PRC_UNPATROLLED ];
                yield [ RecentChange::PRC_AUTOPATROLLED ];
index 9c8b957..d80d627 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 
+use MediaWiki\Block\Restriction\PageRestriction;
+
 /**
  * @covers Action
  *
@@ -22,6 +24,8 @@ class ActionTest extends MediaWikiTestCase {
                        'edit' => true,
                        'revisiondelete' => SpecialPageAction::class,
                        'dummy' => true,
+                       'access' => 'ControlledAccessDummyAction',
+                       'unblock' => 'RequiresUnblockDummyAction',
                        'string' => 'NamedDummyAction',
                        'declared' => 'NonExistingClassName',
                        'callable' => [ $this, 'dummyActionCallback' ],
@@ -183,6 +187,53 @@ class ActionTest extends MediaWikiTestCase {
                return new CalledDummyAction( $context->getWikiPage(), $context );
        }
 
+       public function testCanExecute() {
+               $user = $this->getTestUser()->getUser();
+               $user->mRights = [ 'access' ];
+               $action = Action::factory( 'access', $this->getPage(), $this->getContext() );
+               $this->assertNull( $action->canExecute( $user ) );
+       }
+
+       public function testCanExecuteNoRight() {
+               $user = $this->getTestUser()->getUser();
+               $user->mRights = [];
+               $action = Action::factory( 'access', $this->getPage(), $this->getContext() );
+
+               try {
+                       $action->canExecute( $user );
+               } catch ( Exception $e ) {
+                       $this->assertInstanceOf( PermissionsError::class, $e );
+               }
+       }
+
+       public function testCanExecuteRequiresUnblock() {
+               $user = $this->getTestUser()->getUser();
+               $user->mRights = [];
+
+               $page = $this->getExistingTestPage();
+               $action = Action::factory( 'unblock', $page, $this->getContext() );
+
+               $block = new Block( [
+                       'address' => $user,
+                       'by' => $this->getTestSysop()->getUser()->getId(),
+                       'expiry' => 'infinity',
+                       'sitewide' => false,
+               ] );
+               $block->setRestrictions( [
+                       new PageRestriction( 0, $page->getTitle()->getArticleID() ),
+               ] );
+
+               $block->insert();
+
+               try {
+                       $action->canExecute( $user );
+               } catch ( Exception $e ) {
+                       $this->assertInstanceOf( UserBlockedError::class, $e );
+               }
+
+               $block->delete();
+       }
+
 }
 
 class DummyAction extends Action {
@@ -196,6 +247,10 @@ class DummyAction extends Action {
 
        public function execute() {
        }
+
+       public function canExecute( User $user ) {
+               return $this->checkCanExecute( $user );
+       }
 }
 
 class NamedDummyAction extends DummyAction {
@@ -206,3 +261,15 @@ class CalledDummyAction extends DummyAction {
 
 class InstantiatedDummyAction extends DummyAction {
 }
+
+class ControlledAccessDummyAction extends DummyAction {
+       public function getRestriction() {
+               return 'access';
+       }
+}
+
+class RequiresUnblockDummyAction extends DummyAction {
+       public function requiresUnblock() {
+               return true;
+       }
+}
index 563d5e3..9898e53 100644 (file)
@@ -116,24 +116,6 @@ class ApiBlockTest extends ApiTestCase {
        }
 
        public function testBlockWithTag() {
-               $this->setMwGlobals( 'wgChangeTagsSchemaMigrationStage', MIGRATION_WRITE_BOTH );
-               ChangeTags::defineTag( 'custom tag' );
-
-               $this->doBlock( [ 'tags' => 'custom tag' ] );
-
-               $dbw = wfGetDB( DB_MASTER );
-               $this->assertSame( 1, (int)$dbw->selectField(
-                       [ 'change_tag', 'logging' ],
-                       'COUNT(*)',
-                       [ 'log_type' => 'block', 'ct_tag' => 'custom tag' ],
-                       __METHOD__,
-                       [],
-                       [ 'change_tag' => [ 'INNER JOIN', 'ct_log_id = log_id' ] ]
-               ) );
-       }
-
-       public function testBlockWithTagNewBackend() {
-               $this->setMwGlobals( 'wgChangeTagsSchemaMigrationStage', MIGRATION_NEW );
                ChangeTags::defineTag( 'custom tag' );
 
                $this->doBlock( [ 'tags' => 'custom tag' ] );
index f2db1b2..fc546ff 100644 (file)
@@ -74,37 +74,6 @@ class ApiDeleteTest extends ApiTestCase {
        }
 
        public function testDeleteWithTag() {
-               $this->setMwGlobals( 'wgChangeTagsSchemaMigrationStage', MIGRATION_WRITE_BOTH );
-               $name = 'Help:' . ucfirst( __FUNCTION__ );
-
-               ChangeTags::defineTag( 'custom tag' );
-
-               $this->editPage( $name, 'Some text' );
-
-               $this->doApiRequestWithToken( [
-                       'action' => 'delete',
-                       'title' => $name,
-                       'tags' => 'custom tag',
-               ] );
-
-               $this->assertFalse( Title::newFromText( $name )->exists() );
-
-               $dbw = wfGetDB( DB_MASTER );
-               $this->assertSame( 'custom tag', $dbw->selectField(
-                       [ 'change_tag', 'logging' ],
-                       'ct_tag',
-                       [
-                               'log_namespace' => NS_HELP,
-                               'log_title' => ucfirst( __FUNCTION__ ),
-                       ],
-                       __METHOD__,
-                       [],
-                       [ 'change_tag' => [ 'INNER JOIN', 'ct_log_id = log_id' ] ]
-               ) );
-       }
-
-       public function testDeleteWithTagNewBackend() {
-               $this->setMwGlobals( 'wgChangeTagsSchemaMigrationStage', MIGRATION_NEW );
                $name = 'Help:' . ucfirst( __FUNCTION__ );
 
                ChangeTags::defineTag( 'custom tag' );
index 847316a..2161093 100644 (file)
@@ -1332,25 +1332,6 @@ class ApiEditPageTest extends ApiTestCase {
        }
 
        public function testEditWithTag() {
-               $this->setMwGlobals( 'wgChangeTagsSchemaMigrationStage', MIGRATION_WRITE_BOTH );
-               $name = 'Help:' . ucfirst( __FUNCTION__ );
-
-               ChangeTags::defineTag( 'custom tag' );
-
-               $revId = $this->doApiRequestWithToken( [
-                       'action' => 'edit',
-                       'title' => $name,
-                       'text' => 'Some text',
-                       'tags' => 'custom tag',
-               ] )[0]['edit']['newrevid'];
-
-               $dbw = wfGetDB( DB_MASTER );
-               $this->assertSame( 'custom tag', $dbw->selectField(
-                       'change_tag', 'ct_tag', [ 'ct_rev_id' => $revId ], __METHOD__ ) );
-       }
-
-       public function testEditWithTagNewBackend() {
-               $this->setMwGlobals( 'wgChangeTagsSchemaMigrationStage', MIGRATION_NEW );
                $name = 'Help:' . ucfirst( __FUNCTION__ );
 
                ChangeTags::defineTag( 'custom tag' );
index d11e314..312ef55 100644 (file)
@@ -599,7 +599,9 @@ class ApiErrorFormatterTest extends MediaWikiLangTestCase {
                                [
                                        'text' => '&#60;b&#62;Something broke!&#60;/b&#62;',
                                        'code' => 'internal_api_error_RuntimeException',
-                                       'data' => [],
+                                       'data' => [
+                                               'errorclass' => 'RuntimeException',
+                                       ],
                                ]
                        ],
                        'Normal exception, wrapped' => [
@@ -632,4 +634,23 @@ class ApiErrorFormatterTest extends MediaWikiLangTestCase {
                ];
        }
 
+       /**
+        * @dataProvider provideIsValidApiCode
+        * @covers ApiErrorFormatter::isValidApiCode
+        * @param string $code
+        * @param bool $expect
+        */
+       public function testIsValidApiCode( $code, $expect ) {
+               $this->assertSame( $expect, ApiErrorFormatter::isValidApiCode( $code ) );
+       }
+
+       public static function provideIsValidApiCode() {
+               return [
+                       [ 'foo-bar_Baz123', true ],
+                       [ 'foo bar', false ],
+                       [ 'foo\\bar', false ],
+                       [ 'internal_api_error_foo\\bar baz', true ],
+               ];
+       }
+
 }
index a6083cd..9cb84e2 100644 (file)
@@ -1,5 +1,6 @@
 <?php
 
+use Wikimedia\Rdbms\DBQueryError;
 use Wikimedia\TestingAccessWrapper;
 
 /**
@@ -1010,6 +1011,15 @@ class ApiMainTest extends ApiTestCase {
                        MWExceptionHandler::getRedactedTraceAsString( $dbex )
                )->inLanguage( 'en' )->useDatabase( false )->text();
 
+               // The specific exception doesn't matter, as long as it's namespaced.
+               $nsex = new MediaWiki\ShellDisabledError();
+               $nstrace = wfMessage( 'api-exception-trace',
+                       get_class( $nsex ),
+                       $nsex->getFile(),
+                       $nsex->getLine(),
+                       MWExceptionHandler::getRedactedTraceAsString( $nsex )
+               )->inLanguage( 'en' )->useDatabase( false )->text();
+
                $apiEx1 = new ApiUsageException( null,
                        StatusValue::newFatal( new ApiRawMessage( 'An error', 'sv-error1' ) ) );
                TestingAccessWrapper::newFromObject( $apiEx1 )->modulePath = 'foo+bar';
@@ -1017,6 +1027,13 @@ class ApiMainTest extends ApiTestCase {
                $apiEx1->getStatusValue()->warning( new ApiRawMessage( 'Another warning', 'sv-warn2' ) );
                $apiEx1->getStatusValue()->fatal( new ApiRawMessage( 'Another error', 'sv-error2' ) );
 
+               $badMsg = $this->getMockBuilder( ApiRawMessage::class )
+                        ->setConstructorArgs( [ 'An error', 'ignored' ] )
+                        ->setMethods( [ 'getApiCode' ] )
+                        ->getMock();
+               $badMsg->method( 'getApiCode' )->willReturn( "bad\nvalue" );
+               $apiEx2 = new ApiUsageException( null, StatusValue::newFatal( $badMsg ) );
+
                return [
                        [
                                $ex,
@@ -1030,6 +1047,9 @@ class ApiMainTest extends ApiTestCase {
                                                [
                                                        'code' => 'internal_api_error_InvalidArgumentException',
                                                        'text' => "[$reqId] Exception caught: Random exception",
+                                                       'data' => [
+                                                               'errorclass' => InvalidArgumentException::class,
+                                                       ],
                                                ]
                                        ],
                                        'trace' => $trace,
@@ -1049,12 +1069,36 @@ class ApiMainTest extends ApiTestCase {
                                                        'code' => 'internal_api_error_DBQueryError',
                                                        'text' => "[$reqId] Exception caught: A database query error has occurred. " .
                                                                "This may indicate a bug in the software.",
+                                                       'data' => [
+                                                               'errorclass' => DBQueryError::class,
+                                                       ],
                                                ]
                                        ],
                                        'trace' => $dbtrace,
                                        'servedby' => wfHostname(),
                                ]
                        ],
+                       [
+                               $nsex,
+                               [ 'existing-error', 'internal_api_error_MediaWiki\ShellDisabledError' ],
+                               [
+                                       'warnings' => [
+                                               [ 'code' => 'existing-warning', 'text' => 'existing warning', 'module' => 'main' ],
+                                       ],
+                                       'errors' => [
+                                               [ 'code' => 'existing-error', 'text' => 'existing error', 'module' => 'main' ],
+                                               [
+                                                       'code' => 'internal_api_error_MediaWiki\ShellDisabledError',
+                                                       'text' => "[$reqId] Exception caught: " . $nsex->getMessage(),
+                                                       'data' => [
+                                                               'errorclass' => MediaWiki\ShellDisabledError::class,
+                                                       ],
+                                               ]
+                                       ],
+                                       'trace' => $nstrace,
+                                       'servedby' => wfHostname(),
+                               ]
+                       ],
                        [
                                $apiEx1,
                                [ 'existing-error', 'sv-error1', 'sv-error2' ],
@@ -1075,6 +1119,23 @@ class ApiMainTest extends ApiTestCase {
                                        'servedby' => wfHostname(),
                                ]
                        ],
+                       [
+                               $apiEx2,
+                               [ 'existing-error', '<invalid-code>' ],
+                               [
+                                       'warnings' => [
+                                               [ 'code' => 'existing-warning', 'text' => 'existing warning', 'module' => 'main' ],
+                                       ],
+                                       'errors' => [
+                                               [ 'code' => 'existing-error', 'text' => 'existing error', 'module' => 'main' ],
+                                               [ 'code' => "bad\nvalue", 'text' => 'An error' ],
+                                       ],
+                                       'docref' => "See $doclink for API usage. Subscribe to the mediawiki-api-announce mailing " .
+                                               "list at &lt;https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce&gt; " .
+                                               "for notice of API deprecations and breaking changes.",
+                                       'servedby' => wfHostname(),
+                               ]
+                       ]
                ];
        }
 
index c6f5a8e..70114c2 100644 (file)
@@ -38,6 +38,10 @@ class ApiMessageTest extends MediaWikiTestCase {
                $msg = new ApiMessage( 'apiwarn-baz' );
                $this->assertSame( 'baz', $msg->getApiCode() );
 
+               // Weird "message key"
+               $msg = new ApiMessage( "<foo> bar\nbaz" );
+               $this->assertSame( '_foo__bar_baz', $msg->getApiCode() );
+
                // BC case
                $msg = new ApiMessage( 'actionthrottledtext' );
                $this->assertSame( 'ratelimited', $msg->getApiCode() );
@@ -72,6 +76,9 @@ class ApiMessageTest extends MediaWikiTestCase {
                return [
                        [ '' ],
                        [ 42 ],
+                       [ 'A bad code' ],
+                       [ 'Project:A_page_title' ],
+                       [ "WTF\nnewlines" ],
                ];
        }
 
index 24744df..6ebd835 100644 (file)
@@ -114,26 +114,7 @@ class ApiUnblockTest extends ApiTestCase {
                $this->doUnblock( [ 'user' => $this->blocker->getName() ] );
        }
 
-       // XXX These three tests copy-pasted from ApiBlockTest.php
-       public function testUnblockWithTag() {
-               $this->setMwGlobals( 'wgChangeTagsSchemaMigrationStage', MIGRATION_WRITE_BOTH );
-               ChangeTags::defineTag( 'custom tag' );
-
-               $this->doUnblock( [ 'tags' => 'custom tag' ] );
-
-               $dbw = wfGetDB( DB_MASTER );
-               $this->assertSame( 1, (int)$dbw->selectField(
-                       [ 'change_tag', 'logging' ],
-                       'COUNT(*)',
-                       [ 'log_type' => 'block', 'ct_tag' => 'custom tag' ],
-                       __METHOD__,
-                       [],
-                       [ 'change_tag' => [ 'INNER JOIN', 'ct_log_id = log_id' ] ]
-               ) );
-       }
-
        public function testUnblockWithTagNewBackend() {
-               $this->setMwGlobals( 'wgChangeTagsSchemaMigrationStage', MIGRATION_NEW );
                ChangeTags::defineTag( 'custom tag' );
 
                $this->doUnblock( [ 'tags' => 'custom tag' ] );
index 2534ad3..8cc0217 100644 (file)
@@ -188,31 +188,6 @@ class ApiUserrightsTest extends ApiTestCase {
        }
 
        public function testWithTag() {
-               $this->setMwGlobals( 'wgChangeTagsSchemaMigrationStage', MIGRATION_WRITE_BOTH );
-               ChangeTags::defineTag( 'custom tag' );
-
-               $user = $this->getMutableTestUser()->getUser();
-
-               $this->doSuccessfulRightsChange( 'sysop', [ 'tags' => 'custom tag' ], $user );
-
-               $dbr = wfGetDB( DB_REPLICA );
-               $this->assertSame(
-                       'custom tag',
-                       $dbr->selectField(
-                               [ 'change_tag', 'logging' ],
-                               'ct_tag',
-                               [
-                                       'ct_log_id = log_id',
-                                       'log_namespace' => NS_USER,
-                                       'log_title' => strtr( $user->getName(), ' ', '_' )
-                               ],
-                               __METHOD__
-                       )
-               );
-       }
-
-       public function testWithTagNewBackend() {
-               $this->setMwGlobals( 'wgChangeTagsSchemaMigrationStage', MIGRATION_NEW );
                ChangeTags::defineTag( 'custom tag' );
 
                $user = $this->getMutableTestUser()->getUser();
index f207564..8265af8 100644 (file)
@@ -30,6 +30,8 @@ class ChangeTagsTest extends MediaWikiTestCase {
        /** @dataProvider provideModifyDisplayQuery */
        public function testModifyDisplayQuery( $origQuery, $filter_tag, $useTags, $modifiedQuery ) {
                $this->setMwGlobals( 'wgUseTagFilter', $useTags );
+               $rcId = 123;
+               ChangeTags::updateTags( [ 'foo', 'bar' ], [], $rcId );
                // HACK resolve deferred group concats (see comment in provideModifyDisplayQuery)
                if ( isset( $modifiedQuery['fields']['ts_tags'] ) ) {
                        $modifiedQuery['fields']['ts_tags'] = call_user_func_array(
@@ -61,11 +63,13 @@ class ChangeTagsTest extends MediaWikiTestCase {
        public function provideModifyDisplayQuery() {
                // HACK if we call $dbr->buildGroupConcatField() now, it will return the wrong table names
                // We have to have the test runner call it instead
+               $baseConcats = [ ',', [ 'change_tag', 'change_tag_def' ], 'ctd_name' ];
+               $joinConds = [ 'change_tag_def' => [ 'INNER JOIN', 'ct_tag_id=ctd_id' ] ];
                $groupConcats = [
-                       'recentchanges' => [ ',', 'change_tag', 'ct_tag', 'ct_rc_id=rc_id' ],
-                       'logging' => [ ',', 'change_tag', 'ct_tag', 'ct_log_id=log_id' ],
-                       'revision' => [ ',', 'change_tag', 'ct_tag', 'ct_rev_id=rev_id' ],
-                       'archive' => [ ',', 'change_tag', 'ct_tag', 'ct_rev_id=ar_rev_id' ],
+                       'recentchanges' => array_merge( $baseConcats, [ 'ct_rc_id=rc_id', $joinConds ] ),
+                       'logging' => array_merge( $baseConcats, [ 'ct_log_id=log_id', $joinConds ] ),
+                       'revision' => array_merge( $baseConcats, [ 'ct_rev_id=rev_id', $joinConds ] ),
+                       'archive' => array_merge( $baseConcats, [ 'ct_rev_id=ar_rev_id', $joinConds ] ),
                ];
 
                return [
@@ -118,7 +122,7 @@ class ChangeTagsTest extends MediaWikiTestCase {
                                [
                                        'tables' => [ 'recentchanges', 'change_tag' ],
                                        'fields' => [ 'rc_id', 'rc_timestamp', 'ts_tags' => $groupConcats['recentchanges'] ],
-                                       'conds' => [ "rc_timestamp > '20170714183203'", 'ct_tag' => 'foo' ],
+                                       'conds' => [ "rc_timestamp > '20170714183203'", 'ct_tag_id' => [ 1 ] ],
                                        'join_conds' => [ 'change_tag' => [ 'INNER JOIN', 'ct_rc_id=rc_id' ] ],
                                        'options' => [ 'ORDER BY' => 'rc_timestamp DESC' ],
                                ]
@@ -136,7 +140,7 @@ class ChangeTagsTest extends MediaWikiTestCase {
                                [
                                        'tables' => [ 'logging', 'change_tag' ],
                                        'fields' => [ 'log_id', 'ts_tags' => $groupConcats['logging'] ],
-                                       'conds' => [ "log_timestamp > '20170714183203'", 'ct_tag' => 'foo' ],
+                                       'conds' => [ "log_timestamp > '20170714183203'", 'ct_tag_id' => [ 1 ] ],
                                        'join_conds' => [ 'change_tag' => [ 'INNER JOIN', 'ct_log_id=log_id' ] ],
                                        'options' => [ 'ORDER BY log_timestamp DESC' ],
                                ]
@@ -154,7 +158,7 @@ class ChangeTagsTest extends MediaWikiTestCase {
                                [
                                        'tables' => [ 'revision', 'change_tag' ],
                                        'fields' => [ 'rev_id', 'rev_timestamp', 'ts_tags' => $groupConcats['revision'] ],
-                                       'conds' => [ "rev_timestamp > '20170714183203'", 'ct_tag' => 'foo' ],
+                                       'conds' => [ "rev_timestamp > '20170714183203'", 'ct_tag_id' => [ 1 ] ],
                                        'join_conds' => [ 'change_tag' => [ 'INNER JOIN', 'ct_rev_id=rev_id' ] ],
                                        'options' => [ 'ORDER BY' => 'rev_timestamp DESC' ],
                                ]
@@ -172,7 +176,7 @@ class ChangeTagsTest extends MediaWikiTestCase {
                                [
                                        'tables' => [ 'archive', 'change_tag' ],
                                        'fields' => [ 'ar_id', 'ar_timestamp', 'ts_tags' => $groupConcats['archive'] ],
-                                       'conds' => [ "ar_timestamp > '20170714183203'", 'ct_tag' => 'foo' ],
+                                       'conds' => [ "ar_timestamp > '20170714183203'", 'ct_tag_id' => [ 1 ] ],
                                        'join_conds' => [ 'change_tag' => [ 'INNER JOIN', 'ct_rev_id=ar_rev_id' ] ],
                                        'options' => [ 'ORDER BY' => 'ar_timestamp DESC' ],
                                ]
@@ -220,7 +224,7 @@ class ChangeTagsTest extends MediaWikiTestCase {
                                [
                                        'tables' => [ 'recentchanges', 'change_tag' ],
                                        'fields' => [ 'rc_id', 'rc_timestamp', 'ts_tags' => $groupConcats['recentchanges'] ],
-                                       'conds' => [ "rc_timestamp > '20170714183203'", 'ct_tag' => [ 'foo', 'bar' ] ],
+                                       'conds' => [ "rc_timestamp > '20170714183203'", 'ct_tag_id' => [ 1, 2 ] ],
                                        'join_conds' => [ 'change_tag' => [ 'INNER JOIN', 'ct_rc_id=rc_id' ] ],
                                        'options' => [ 'ORDER BY' => 'rc_timestamp DESC', 'DISTINCT' ],
                                ]
@@ -238,7 +242,7 @@ class ChangeTagsTest extends MediaWikiTestCase {
                                [
                                        'tables' => [ 'recentchanges', 'change_tag' ],
                                        'fields' => [ 'rc_id', 'rc_timestamp', 'ts_tags' => $groupConcats['recentchanges'] ],
-                                       'conds' => [ "rc_timestamp > '20170714183203'", 'ct_tag' => [ 'foo', 'bar' ] ],
+                                       'conds' => [ "rc_timestamp > '20170714183203'", 'ct_tag_id' => [ 1, 2 ] ],
                                        'join_conds' => [ 'change_tag' => [ 'INNER JOIN', 'ct_rc_id=rc_id' ] ],
                                        'options' => [ 'DISTINCT', 'ORDER BY' => 'rc_timestamp DESC' ],
                                ]
@@ -256,7 +260,7 @@ class ChangeTagsTest extends MediaWikiTestCase {
                                [
                                        'tables' => [ 'recentchanges', 'change_tag' ],
                                        'fields' => [ 'rc_id', 'ts_tags' => $groupConcats['recentchanges'] ],
-                                       'conds' => [ "rc_timestamp > '20170714183203'", 'ct_tag' => [ 'foo', 'bar' ] ],
+                                       'conds' => [ "rc_timestamp > '20170714183203'", 'ct_tag_id' => [ 1, 2 ] ],
                                        'join_conds' => [ 'change_tag' => [ 'INNER JOIN', 'ct_rc_id=rc_id' ] ],
                                        'options' => [ 'ORDER BY rc_timestamp DESC', 'DISTINCT' ],
                                ]
@@ -327,74 +331,10 @@ class ChangeTagsTest extends MediaWikiTestCase {
                $this->assertEquals( $expected, $actual );
        }
 
-       public function testUpdateTagsMigrationOld() {
-               $this->setMwGlobals( 'wgChangeTagsSchemaMigrationStage', MIGRATION_OLD );
-               $dbw = wfGetDB( DB_MASTER );
-               $dbw->delete( 'change_tag', '*' );
-               $dbw->delete( 'change_tag_def', '*' );
-
-               $rcId = 123;
-               ChangeTags::updateTags( [ 'tag1', 'tag2' ], [], $rcId );
-
-               $dbr = wfGetDB( DB_REPLICA );
-
-               $res = $dbr->select( 'change_tag_def', [ 'ctd_name', 'ctd_id', 'ctd_count' ], '' );
-               $this->assertEquals( [], iterator_to_array( $res, false ) );
-
-               $expected2 = [
-                       (object)[
-                               'ct_tag' => 'tag1',
-                               'ct_tag_id' => null,
-                               'ct_rc_id' => 123
-                       ],
-                       (object)[
-                               'ct_tag' => 'tag2',
-                               'ct_tag_id' => null,
-                               'ct_rc_id' => 123
-                       ],
-               ];
-               $res2 = $dbr->select( 'change_tag', [ 'ct_tag', 'ct_tag_id', 'ct_rc_id' ], '' );
-               $this->assertEquals( $expected2, iterator_to_array( $res2, false ) );
-
-               $rcId = 124;
-               ChangeTags::updateTags( [ 'tag1', 'tag3' ], [], $rcId );
-
-               $dbr = wfGetDB( DB_REPLICA );
-
-               $res = $dbr->select( 'change_tag_def', [ 'ctd_name', 'ctd_id', 'ctd_count' ], '' );
-               $this->assertEquals( [], iterator_to_array( $res, false ) );
-
-               $expected2 = [
-                       (object)[
-                               'ct_tag' => 'tag1',
-                               'ct_tag_id' => null,
-                               'ct_rc_id' => 123
-                       ],
-                       (object)[
-                               'ct_tag' => 'tag2',
-                               'ct_tag_id' => null,
-                               'ct_rc_id' => 123
-                       ],
-                       (object)[
-                               'ct_tag' => 'tag1',
-                               'ct_tag_id' => null,
-                               'ct_rc_id' => 124
-                       ],
-                       (object)[
-                               'ct_tag' => 'tag3',
-                               'ct_tag_id' => null,
-                               'ct_rc_id' => 124
-                       ],
-               ];
-               $res2 = $dbr->select( 'change_tag', [ 'ct_tag', 'ct_tag_id', 'ct_rc_id' ], '' );
-               $this->assertEquals( $expected2, iterator_to_array( $res2, false ) );
-       }
-
-       public function testUpdateTagsMigrationWriteBoth() {
+       public function testUpdateTags() {
                // FIXME: fails under postgres
                $this->markTestSkippedIfDbType( 'postgres' );
 
-               $this->setMwGlobals( 'wgChangeTagsSchemaMigrationStage', MIGRATION_WRITE_BOTH );
                $dbw = wfGetDB( DB_MASTER );
                $dbw->delete( 'change_tag', '*' );
                $dbw->delete( 'change_tag_def', '*' );
@@ -421,17 +361,15 @@ class ChangeTagsTest extends MediaWikiTestCase {
 
                $expected2 = [
                        (object)[
-                               'ct_tag' => 'tag1',
                                'ct_tag_id' => 1,
                                'ct_rc_id' => 123
                        ],
                        (object)[
-                               'ct_tag' => 'tag2',
                                'ct_tag_id' => 2,
                                'ct_rc_id' => 123
                        ],
                ];
-               $res2 = $dbr->select( 'change_tag', [ 'ct_tag', 'ct_tag_id', 'ct_rc_id' ], '' );
+               $res2 = $dbr->select( 'change_tag', [ 'ct_tag_id', 'ct_rc_id' ], '' );
                $this->assertEquals( $expected2, iterator_to_array( $res2, false ) );
 
                $rcId = 124;
@@ -463,59 +401,27 @@ class ChangeTagsTest extends MediaWikiTestCase {
 
                $expected2 = [
                        (object)[
-                               'ct_tag' => 'tag1',
                                'ct_tag_id' => 1,
                                'ct_rc_id' => 123
                        ],
                        (object)[
-                               'ct_tag' => 'tag2',
                                'ct_tag_id' => 2,
                                'ct_rc_id' => 123
                        ],
                        (object)[
-                               'ct_tag' => 'tag1',
                                'ct_tag_id' => 1,
                                'ct_rc_id' => 124
                        ],
                        (object)[
-                               'ct_tag' => 'tag3',
                                'ct_tag_id' => 3,
                                'ct_rc_id' => 124
                        ],
                ];
-               $res2 = $dbr->select( 'change_tag', [ 'ct_tag', 'ct_tag_id', 'ct_rc_id' ], '' );
-               $this->assertEquals( $expected2, iterator_to_array( $res2, false ) );
-       }
-
-       public function testDeleteTagsMigrationOld() {
-               $this->setMwGlobals( 'wgChangeTagsSchemaMigrationStage', MIGRATION_OLD );
-               $dbw = wfGetDB( DB_MASTER );
-               $dbw->delete( 'change_tag', '*' );
-               $dbw->delete( 'change_tag_def', '*' );
-
-               $rcId = 123;
-               ChangeTags::updateTags( [ 'tag1', 'tag2' ], [], $rcId );
-
-               ChangeTags::updateTags( [], [ 'tag2' ], $rcId );
-
-               $dbr = wfGetDB( DB_REPLICA );
-
-               $res = $dbr->select( 'change_tag_def', [ 'ctd_name', 'ctd_id', 'ctd_count' ], '' );
-               $this->assertEquals( [], iterator_to_array( $res, false ) );
-
-               $expected2 = [
-                       (object)[
-                               'ct_tag' => 'tag1',
-                               'ct_tag_id' => null,
-                               'ct_rc_id' => 123
-                       ]
-               ];
-               $res2 = $dbr->select( 'change_tag', [ 'ct_tag', 'ct_tag_id', 'ct_rc_id' ], '' );
+               $res2 = $dbr->select( 'change_tag', [ 'ct_tag_id', 'ct_rc_id' ], '' );
                $this->assertEquals( $expected2, iterator_to_array( $res2, false ) );
        }
 
-       public function testDeleteTagsMigrationWriteBoth() {
-               $this->setMwGlobals( 'wgChangeTagsSchemaMigrationStage', MIGRATION_WRITE_BOTH );
+       public function testDeleteTags() {
                $dbw = wfGetDB( DB_MASTER );
                $dbw->delete( 'change_tag', '*' );
                $dbw->delete( 'change_tag_def', '*' );
@@ -540,36 +446,15 @@ class ChangeTagsTest extends MediaWikiTestCase {
 
                $expected2 = [
                        (object)[
-                               'ct_tag' => 'tag1',
                                'ct_tag_id' => 1,
                                'ct_rc_id' => 123
                        ]
                ];
-               $res2 = $dbr->select( 'change_tag', [ 'ct_tag', 'ct_tag_id', 'ct_rc_id' ], '' );
+               $res2 = $dbr->select( 'change_tag', [ 'ct_tag_id', 'ct_rc_id' ], '' );
                $this->assertEquals( $expected2, iterator_to_array( $res2, false ) );
        }
 
-       public function testTagUsageStatisticsOldBackend() {
-               $this->setMwGlobals( 'wgChangeTagsSchemaMigrationStage', MIGRATION_OLD );
-               $this->setMwGlobals( 'wgTagStatisticsNewTable', false );
-
-               $dbw = wfGetDB( DB_MASTER );
-               $dbw->delete( 'change_tag', '*' );
-               $dbw->delete( 'change_tag_def', '*' );
-
-               $rcId = 123;
-               ChangeTags::updateTags( [ 'tag1', 'tag2' ], [], $rcId );
-
-               $rcId = 124;
-               ChangeTags::updateTags( [ 'tag1' ], [], $rcId );
-
-               $this->assertEquals( [ 'tag1' => 2, 'tag2' => 1 ], ChangeTags::tagUsageStatistics() );
-       }
-
-       public function testTagUsageStatisticsNewMigrationOldBackedn() {
-               $this->setMwGlobals( 'wgChangeTagsSchemaMigrationStage', MIGRATION_WRITE_BOTH );
-               $this->setMwGlobals( 'wgTagStatisticsNewTable', false );
-
+       public function testTagUsageStatistics() {
                $dbw = wfGetDB( DB_MASTER );
                $dbw->delete( 'change_tag', '*' );
                $dbw->delete( 'change_tag_def', '*' );
@@ -584,75 +469,7 @@ class ChangeTagsTest extends MediaWikiTestCase {
                $this->assertEquals( [ 'tag1' => 2, 'tag2' => 1 ], ChangeTags::tagUsageStatistics() );
        }
 
-       public function testTagUsageStatisticsNewBackend() {
-               $this->setMwGlobals( 'wgChangeTagsSchemaMigrationStage', MIGRATION_WRITE_BOTH );
-               $this->setMwGlobals( 'wgTagStatisticsNewTable', true );
-
-               $dbw = wfGetDB( DB_MASTER );
-               $dbw->delete( 'change_tag', '*' );
-               $dbw->delete( 'change_tag_def', '*' );
-               MediaWikiServices::getInstance()->resetServiceForTesting( 'NameTableStoreFactory' );
-
-               $rcId = 123;
-               ChangeTags::updateTags( [ 'tag1', 'tag2' ], [], $rcId );
-
-               $rcId = 124;
-               ChangeTags::updateTags( [ 'tag1' ], [], $rcId );
-
-               $this->assertEquals( [ 'tag1' => 2, 'tag2' => 1 ], ChangeTags::tagUsageStatistics() );
-       }
-
-       public function testListExplicitlyDefinedTagsOld() {
-               $this->setMwGlobals( 'wgChangeTagsSchemaMigrationStage', MIGRATION_OLD );
-               $dbw = wfGetDB( DB_MASTER );
-               $dbw->delete( 'change_tag', '*' );
-               $dbw->delete( 'change_tag_def', '*' );
-               $dbw->delete( 'valid_tag', '*' );
-
-               $rcId = 123;
-               ChangeTags::updateTags( [ 'tag1', 'tag2' ], [], $rcId );
-               ChangeTags::defineTag( 'tag2' );
-
-               $this->assertEquals( [ 'tag2' ], ChangeTags::listExplicitlyDefinedTags() );
-               $dbr = wfGetDB( DB_REPLICA );
-               $res = $dbr->select( 'change_tag_def', [ 'ctd_name', 'ctd_user_defined' ], '' );
-               $this->assertEquals( [], iterator_to_array( $res, false ) );
-
-               $this->assertEquals( [ 'tag2' ], $dbr->selectFieldValues( 'valid_tag', 'vt_tag', '' ) );
-       }
-
-       public function testListExplicitlyDefinedTagsWriteBoth() {
-               $this->setMwGlobals( 'wgChangeTagsSchemaMigrationStage', MIGRATION_WRITE_BOTH );
-               $dbw = wfGetDB( DB_MASTER );
-               $dbw->delete( 'change_tag', '*' );
-               $dbw->delete( 'change_tag_def', '*' );
-               $dbw->delete( 'valid_tag', '*' );
-
-               $rcId = 123;
-               ChangeTags::updateTags( [ 'tag1', 'tag2' ], [], $rcId );
-               ChangeTags::defineTag( 'tag2' );
-
-               $this->assertEquals( [ 'tag2' ], ChangeTags::listExplicitlyDefinedTags() );
-               $dbr = wfGetDB( DB_REPLICA );
-
-               $expected = [
-                       (object)[
-                               'ctd_name' => 'tag1',
-                               'ctd_user_defined' => 0
-                       ],
-                       (object)[
-                               'ctd_name' => 'tag2',
-                               'ctd_user_defined' => 1
-                       ],
-               ];
-               $res = $dbr->select( 'change_tag_def', [ 'ctd_name', 'ctd_user_defined' ], '' );
-               $this->assertEquals( $expected, iterator_to_array( $res, false ) );
-
-               $this->assertEquals( [ 'tag2' ], $dbr->selectFieldValues( 'valid_tag', 'vt_tag', '' ) );
-       }
-
-       public function testListExplicitlyDefinedTagsNew() {
-               $this->setMwGlobals( 'wgChangeTagsSchemaMigrationStage', MIGRATION_NEW );
+       public function testListExplicitlyDefinedTags() {
                $dbw = wfGetDB( DB_MASTER );
                $dbw->delete( 'change_tag', '*' );
                $dbw->delete( 'change_tag_def', '*' );
index e84998c..58f9654 100644 (file)
@@ -126,7 +126,7 @@ class LBFactoryTest extends MediaWikiTestCase {
                                'load'        => 0,
                                'flags'       => DBO_TRX // REPEATABLE-READ for consistency
                        ],
-                       [ // emulated slave
+                       [ // emulated replica
                                'host'        => $wgDBserver,
                                'dbname'      => $wgDBname,
                                'user'        => $wgDBuser,
@@ -152,7 +152,7 @@ class LBFactoryTest extends MediaWikiTestCase {
                        'cluster master set' );
 
                $dbr = $lb->getConnection( DB_REPLICA );
-               $this->assertTrue( $dbr->getLBInfo( 'replica' ), 'slave shows as slave' );
+               $this->assertTrue( $dbr->getLBInfo( 'replica' ), 'replica shows as replica' );
                $this->assertEquals(
                        ( $wgDBserver != '' ) ? $wgDBserver : 'localhost',
                        $dbr->getLBInfo( 'clusterMasterHost' ),
@@ -169,7 +169,7 @@ class LBFactoryTest extends MediaWikiTestCase {
                $this->assertTrue( $dbw->getLBInfo( 'master' ), 'master shows as master' );
 
                $dbr = $factory->getMainLB()->getConnection( DB_REPLICA );
-               $this->assertTrue( $dbr->getLBInfo( 'replica' ), 'slave shows as slave' );
+               $this->assertTrue( $dbr->getLBInfo( 'replica' ), 'replica shows as replica' );
 
                // Destructor should trigger without round stage errors
                unset( $factory );
@@ -493,7 +493,7 @@ class LBFactoryTest extends MediaWikiTestCase {
                $lb->reuseConnection( $db ); // don't care
 
                $db = $lb->getConnection( DB_MASTER ); // local domain connection
-               $factory->setDomainPrefix( 'my_' );
+               $factory->setLocalDomainPrefix( 'my_' );
 
                $this->assertEquals( $wgDBname, $db->getDBname() );
                $this->assertEquals(
@@ -556,7 +556,7 @@ class LBFactoryTest extends MediaWikiTestCase {
 
                $lb->reuseConnection( $db ); // don't care
 
-               $factory->setDomainPrefix( 'my_' );
+               $factory->setLocalDomainPrefix( 'my_' );
                $db = $lb->getConnection( DB_MASTER, [], "$wgDBname-my_" );
 
                $this->assertEquals(
@@ -621,6 +621,50 @@ class LBFactoryTest extends MediaWikiTestCase {
                }
        }
 
+       public function testRedefineLocalDomain() {
+               global $wgDBname;
+
+               if ( wfGetDB( DB_MASTER )->databasesAreIndependent() ) {
+                       self::markTestSkipped( "Skipping tests about selecting DBs: not applicable" );
+                       return;
+               }
+
+               $factory = $this->newLBFactoryMulti(
+                       [],
+                       []
+               );
+               $lb = $factory->getMainLB();
+
+               $conn1 = $lb->getConnectionRef( DB_MASTER );
+               $this->assertEquals(
+                       wfWikiID(),
+                       $conn1->getDomainID()
+               );
+               unset( $conn1 );
+
+               $factory->redefineLocalDomain( 'somedb-prefix' );
+               $this->assertEquals( 'somedb-prefix', $factory->getLocalDomainID() );
+
+               $domain = new DatabaseDomain( $wgDBname, null, 'pref' );
+               $factory->redefineLocalDomain( $domain );
+
+               $n = 0;
+               $lb->forEachOpenConnection( function () use ( &$n ) {
+                       ++$n;
+               } );
+               $this->assertEquals( 0, $n, "Connections closed" );
+
+               $conn2 = $lb->getConnectionRef( DB_MASTER );
+               $this->assertEquals(
+                       $domain->getId(),
+                       $conn2->getDomainID()
+               );
+               unset( $conn2 );
+
+               $factory->closeAll();
+               $factory->destroy();
+       }
+
        private function quoteTable( Database $db, $table ) {
                if ( $db->getType() === 'sqlite' ) {
                        return $table;
index 1f73324..9f88cd7 100644 (file)
@@ -61,13 +61,16 @@ class CategoryMembershipChangeJobTest extends MediaWikiTestCase {
         * @return RecentChange|null
         */
        private function getCategorizeRecentChangeForRevId( $revId ) {
-               return RecentChange::newFromConds(
+               $rc = RecentChange::newFromConds(
                        [
                                'rc_type' => RC_CATEGORIZE,
                                'rc_this_oldid' => $revId,
                        ],
                        __METHOD__
                );
+
+               $this->assertNotNull( $rc, 'rev__id = ' . $revId );
+               return $rc;
        }
 
        public function testRun_normalCategoryAddedAndRemoved() {
index 7665b78..215177d 100644 (file)
@@ -48,6 +48,11 @@ class RefreshLinksJobTest extends MediaWikiTestCase {
        // TODO: test partition
 
        public function testRunForSinglePage() {
+               MediaWikiServices::getInstance()->getSlotRoleRegistry()->defineRoleWithModel(
+                       'aux',
+                       CONTENT_MODEL_WIKITEXT
+               );
+
                $mainContent = new WikitextContent( 'MAIN [[Kittens]]' );
                $auxContent = new WikitextContent( 'AUX [[Category:Goats]]' );
                $page = $this->createPage( __METHOD__, [ 'main' => $mainContent, 'aux' => $auxContent ] );
index a4ab879..2760cb9 100644 (file)
@@ -172,7 +172,7 @@ class FormatJsonTest extends MediaWikiTestCase {
        /**
         * Test data for testParseTryFixing.
         *
-        * Some PHP interpreters use json-c rather than the JSON.org cannonical
+        * Some PHP interpreters use json-c rather than the JSON.org canonical
         * parser to avoid being encumbered by the "shall be used for Good, not
         * Evil" clause of the JSON.org parser's license. By default, json-c
         * parses in a non-strict mode which allows trailing commas for array and
@@ -372,4 +372,56 @@ class FormatJsonTest extends MediaWikiTestCase {
 
                return $cases;
        }
+
+       public function provideEmptyJsonKeyStrings() {
+               return [
+                       [
+                               '{"":"foo"}',
+                               '{"":"foo"}',
+                               ''
+                       ],
+                       [
+                               '{"_empty_":"foo"}',
+                               '{"_empty_":"foo"}',
+                               '_empty_' ],
+                       [
+                               '{"\u005F\u0065\u006D\u0070\u0074\u0079\u005F":"foo"}',
+                               '{"_empty_":"foo"}',
+                               '_empty_'
+                       ],
+                       [
+                               '{"_empty_":"bar","":"foo"}',
+                               '{"_empty_":"bar","":"foo"}',
+                               ''
+                       ],
+                       [
+                               '{"":"bar","_empty_":"foo"}',
+                               '{"":"bar","_empty_":"foo"}',
+                               '_empty_'
+                       ]
+               ];
+       }
+
+       /**
+        * @covers FormatJson::encode
+        * @covers FormatJson::decode
+        * @dataProvider provideEmptyJsonKeyStrings
+        * @param string $json
+        *
+        * Decoding behavior with empty keys can be surprising.
+        * See https://phabricator.wikimedia.org/T206411
+        */
+       public function testEmptyJsonKeyArray( $json, $expect, $php71Name ) {
+               // Decoding to array is consistent across supported PHP versions
+               $this->assertSame( $expect, FormatJson::encode(
+                       FormatJson::decode( $json, true ) ) );
+
+               // Decoding to object differs between supported PHP versions
+               $obj = FormatJson::decode( $json );
+               if ( version_compare( PHP_VERSION, '7.1', '<' ) ) {
+                       $this->assertEquals( 'foo', $obj->_empty_ );
+               } else {
+                       $this->assertEquals( 'foo', $obj->{$php71Name} );
+               }
+       }
 }
index 1b502ec..b7f22ec 100644 (file)
@@ -29,7 +29,7 @@ class ReplicatedBagOStuffTest extends MediaWikiTestCase {
 
                // Write to master.
                $this->assertEquals( $this->writeCache->get( $key ), $value );
-               // Don't write to slave. Replication is deferred to backend.
+               // Don't write to replica. Replication is deferred to backend.
                $this->assertEquals( $this->readCache->get( $key ), false );
        }
 
@@ -44,7 +44,7 @@ class ReplicatedBagOStuffTest extends MediaWikiTestCase {
                $read = wfRandomString();
                $this->readCache->set( $key, $read );
 
-               // Read from slave.
+               // Read from replica.
                $this->assertEquals( $this->cache->get( $key ), $read );
        }
 
index 85ccebc..0041b9c 100644 (file)
@@ -431,7 +431,7 @@ class BlockLogFormatterTest extends LogFormatterTestCase {
                                        ],
                                ],
                                [
-                                       'text' => 'Sysop blocked Logtestuser from non-editing actions'
+                                       'text' => 'Sysop blocked Logtestuser from specified non-editing actions'
                                                . ' with an expiration time of indefinite (anonymous users only)',
                                        'api' => [
                                                'duration' => 'infinite',
index 1e16097..ba4b2e2 100644 (file)
@@ -52,7 +52,7 @@ class PageArchiveMcrTest extends PageArchiveTestBase {
                                'ar_page_id' => strval( $this->ipRev->getPageId() ),
                                'ar_comment_text' => 'just a test',
                                'ar_comment_data' => null,
-                               'ar_comment_cid' => null,
+                               'ar_comment_cid' => '2',
                                'ts_tags' => null,
                                'ar_id' => '2',
                                'ar_namespace' => '0',
@@ -72,7 +72,7 @@ class PageArchiveMcrTest extends PageArchiveTestBase {
                                'ar_page_id' => strval( $this->firstRev->getPageId() ),
                                'ar_comment_text' => 'testing',
                                'ar_comment_data' => null,
-                               'ar_comment_cid' => null,
+                               'ar_comment_cid' => '1',
                                'ts_tags' => null,
                                'ar_id' => '1',
                                'ar_namespace' => '0',
index 4df4ee1..f8d4ef9 100644 (file)
@@ -54,7 +54,7 @@ class PageArchivePreMcrTest extends PageArchiveTestBase {
                                'ar_page_id' => strval( $this->ipRev->getPageId() ),
                                'ar_comment_text' => 'just a test',
                                'ar_comment_data' => null,
-                               'ar_comment_cid' => null,
+                               'ar_comment_cid' => '2',
                                'ar_content_format' => null,
                                'ar_content_model' => null,
                                'ts_tags' => null,
@@ -79,7 +79,7 @@ class PageArchivePreMcrTest extends PageArchiveTestBase {
                                'ar_page_id' => strval( $this->firstRev->getPageId() ),
                                'ar_comment_text' => 'testing',
                                'ar_comment_data' => null,
-                               'ar_comment_cid' => null,
+                               'ar_comment_cid' => '1',
                                'ar_content_format' => null,
                                'ar_content_model' => null,
                                'ts_tags' => null,
index ade8efd..26b6b52 100644 (file)
@@ -43,12 +43,14 @@ abstract class PageArchiveTestBase extends MediaWikiTestCase {
                        [
                                'page',
                                'revision',
+                               'revision_comment_temp',
                                'ip_changes',
                                'text',
                                'archive',
                                'recentchanges',
                                'logging',
                                'page_props',
+                               'comment',
                        ]
                );
        }
@@ -80,7 +82,7 @@ abstract class PageArchiveTestBase extends MediaWikiTestCase {
 
                $this->tablesUsed += $this->getMcrTablesToReset();
 
-               $this->setMwGlobals( 'wgCommentTableSchemaMigrationStage', MIGRATION_OLD );
+               $this->setMwGlobals( 'wgCommentTableSchemaMigrationStage', MIGRATION_NEW );
                $this->setMwGlobals( 'wgActorTableSchemaMigrationStage', SCHEMA_COMPAT_OLD );
                $this->setMwGlobals( 'wgContentHandlerUseDB', $this->getContentHandlerUseDB() );
                $this->setMwGlobals(
index 5f1bf0c..9f696c0 100644 (file)
@@ -60,4 +60,46 @@ class WikiCategoryPageTest extends MediaWikiLangTestCase {
 
                ScopedCallback::consume( $scopedOverride );
        }
+
+       /**
+        * @covers WikiCategoryPage::isExpectedUnusedCategory
+        */
+       public function testExpectUnusedCategory_PropertyNotSet() {
+               $title = Title::makeTitle( NS_CATEGORY, 'CategoryPage' );
+               $categoryPage = WikiCategoryPage::factory( $title );
+
+               $pageProps = $this->getMockPageProps();
+               $pageProps->expects( $this->once() )
+                       ->method( 'getProperties' )
+                       ->with( $title, 'expectunusedcategory' )
+                       ->will( $this->returnValue( [] ) );
+
+               $scopedOverride = PageProps::overrideInstance( $pageProps );
+
+               $this->assertFalse( $categoryPage->isExpectedUnusedCategory() );
+
+               ScopedCallback::consume( $scopedOverride );
+       }
+
+       /**
+        * @dataProvider provideCategoryContent
+        * @covers WikiCategoryPage::isExpectedUnusedCategory
+        */
+       public function testExpectUnusedCategory_PropertyIsSet( $isExpectedUnusedCategory ) {
+               $categoryTitle = Title::makeTitle( NS_CATEGORY, 'CategoryPage' );
+               $categoryPage = WikiCategoryPage::factory( $categoryTitle );
+               $returnValue = $isExpectedUnusedCategory ? [ $categoryTitle->getArticleID() => '' ] : [];
+
+               $pageProps = $this->getMockPageProps();
+               $pageProps->expects( $this->once() )
+                       ->method( 'getProperties' )
+                       ->with( $categoryTitle, 'expectunusedcategory' )
+                       ->will( $this->returnValue( $returnValue ) );
+
+               $scopedOverride = PageProps::overrideInstance( $pageProps );
+
+               $this->assertEquals( $isExpectedUnusedCategory, $categoryPage->isExpectedUnusedCategory() );
+
+               ScopedCallback::consume( $scopedOverride );
+       }
 }
index fee4583..f7e5bd1 100644 (file)
@@ -135,6 +135,9 @@ abstract class WikiPageDbTestBase extends MediaWikiLangTestCase {
                }
 
                $updater->saveRevision( CommentStoreComment::newUnsavedComment( "testing" ) );
+               if ( !$updater->wasSuccessful() ) {
+                       $this->fail( $updater->getStatus()->getWikiText() );
+               }
 
                return $page;
        }
@@ -463,12 +466,13 @@ abstract class WikiPageDbTestBase extends MediaWikiLangTestCase {
                );
                $logId = $status->getValue();
                $actorQuery = ActorMigration::newMigration()->getJoin( 'log_user' );
+               $commentQuery = MediaWikiServices::getInstance()->getCommentStore()->getJoin( 'log_comment' );
                $this->assertSelect(
-                       [ 'logging' ] + $actorQuery['tables'], /* table */
+                       [ 'logging' ] + $actorQuery['tables'] + $commentQuery['tables'], /* table */
                        [
                                'log_type',
                                'log_action',
-                               'log_comment',
+                               'log_comment' => $commentQuery['fields']['log_comment_text'],
                                'log_user' => $actorQuery['fields']['log_user'],
                                'log_user_text' => $actorQuery['fields']['log_user_text'],
                                'log_namespace',
@@ -485,7 +489,7 @@ abstract class WikiPageDbTestBase extends MediaWikiLangTestCase {
                                $page->getTitle()->getDBkey(),
                        ] ],
                        [],
-                       $actorQuery['joins']
+                       $actorQuery['joins'] + $commentQuery['joins']
                );
        }
 
@@ -512,12 +516,13 @@ abstract class WikiPageDbTestBase extends MediaWikiLangTestCase {
                );
                $logId = $status->getValue();
                $actorQuery = ActorMigration::newMigration()->getJoin( 'log_user' );
+               $commentQuery = MediaWikiServices::getInstance()->getCommentStore()->getJoin( 'log_comment' );
                $this->assertSelect(
-                       [ 'logging' ] + $actorQuery['tables'], /* table */
+                       [ 'logging' ] + $actorQuery['tables'] + $commentQuery['tables'], /* table */
                        [
                                'log_type',
                                'log_action',
-                               'log_comment',
+                               'log_comment' => $commentQuery['fields']['log_comment_text'],
                                'log_user' => $actorQuery['fields']['log_user'],
                                'log_user_text' => $actorQuery['fields']['log_user_text'],
                                'log_namespace',
@@ -534,7 +539,7 @@ abstract class WikiPageDbTestBase extends MediaWikiLangTestCase {
                                $page->getTitle()->getDBkey(),
                        ] ],
                        [],
-                       $actorQuery['joins']
+                       $actorQuery['joins'] + $commentQuery['joins']
                );
        }
 
@@ -563,12 +568,13 @@ abstract class WikiPageDbTestBase extends MediaWikiLangTestCase {
                );
                $logId = $status->getValue();
                $actorQuery = ActorMigration::newMigration()->getJoin( 'log_user' );
+               $commentQuery = MediaWikiServices::getInstance()->getCommentStore()->getJoin( 'log_comment' );
                $this->assertSelect(
-                       [ 'logging' ] + $actorQuery['tables'], /* table */
+                       [ 'logging' ] + $actorQuery['tables'] + $commentQuery['tables'], /* table */
                        [
                                'log_type',
                                'log_action',
-                               'log_comment',
+                               'log_comment' => $commentQuery['fields']['log_comment_text'],
                                'log_user' => $actorQuery['fields']['log_user'],
                                'log_user_text' => $actorQuery['fields']['log_user_text'],
                                'log_namespace',
@@ -585,7 +591,7 @@ abstract class WikiPageDbTestBase extends MediaWikiLangTestCase {
                                $page->getTitle()->getDBkey(),
                        ] ],
                        [],
-                       $actorQuery['joins']
+                       $actorQuery['joins'] + $commentQuery['joins']
                );
 
                $this->assertNull(
@@ -2266,10 +2272,11 @@ more stuff
                // Make sure the log entry looks good
                // log_params is not checked here
                $actorQuery = ActorMigration::newMigration()->getJoin( 'log_user' );
+               $commentQuery = MediaWikiServices::getInstance()->getCommentStore()->getJoin( 'log_comment' );
                $this->assertSelect(
-                       [ 'logging' ] + $actorQuery['tables'],
+                       [ 'logging' ] + $actorQuery['tables'] + $commentQuery['tables'],
                        [
-                               'log_comment',
+                               'log_comment' => $commentQuery['fields']['log_comment_text'],
                                'log_user' => $actorQuery['fields']['log_user'],
                                'log_user_text' => $actorQuery['fields']['log_user_text'],
                                'log_namespace',
@@ -2284,7 +2291,7 @@ more stuff
                                $page->getTitle()->getDBkey(),
                        ] ],
                        [],
-                       $actorQuery['joins']
+                       $actorQuery['joins'] + $commentQuery['joins']
                );
        }
 
index 69d12e3..78c0ac3 100644 (file)
@@ -1,4 +1,6 @@
 <?php
+
+use MediaWiki\MediaWikiServices;
 use MediaWiki\Tests\Revision\McrReadNewSchemaOverride;
 
 /**
@@ -24,6 +26,11 @@ class WikiPageMcrReadNewDbTest extends WikiPageDbTestBase {
                $m1 = $this->defineMockContentModelForUpdateTesting( 'M1' );
                $a1 = $this->defineMockContentModelForUpdateTesting( 'A1' );
 
+               MediaWikiServices::getInstance()->getSlotRoleRegistry()->defineRoleWithModel(
+                       'aux',
+                       $a1->getModelID()
+               );
+
                $mainContent1 = $this->createMockContent( $m1, 'main 1' );
                $auxContent1 = $this->createMockContent( $a1, 'aux 1' );
 
index d702084..e102b9b 100644 (file)
@@ -181,6 +181,16 @@ class ParserMethodsTest extends MediaWikiLangTestCase {
                                'http://example.org/%23%2F%3F%26%3D%2B%3B?%23%2F%3F%26%3D%2B%3B#%23%2F%3F%26%3D%2B%3B',
                                'http://example.org/%23%2F%3F&=+;?%23/?%26%3D%2B%3B#%23/?&=+;',
                        ],
+                       [
+                               'IPv6 links aren\'t escaped',
+                               'http://[::1]/foobar',
+                               'http://[::1]/foobar',
+                       ],
+                       [
+                               'non-IPv6 links aren\'t unescaped',
+                               'http://%5B::1%5D/foobar',
+                               'http://%5B::1%5D/foobar',
+                       ],
                ];
        }
 
index a8b0f90..f6061b8 100644 (file)
@@ -100,6 +100,7 @@ class SanitizerTest extends MediaWikiTestCase {
         * @param bool $escaped Whether sanitizer let the tag in or escape it (ie: '&lt;video&gt;')
         */
        public function testRemovehtmltagsOnHtml5Tags( $tag, $escaped ) {
+               $this->hideDeprecated( 'disabling tidy' );
                MWTidy::setInstance( false );
 
                if ( $escaped ) {
@@ -162,6 +163,7 @@ class SanitizerTest extends MediaWikiTestCase {
         * @covers Sanitizer::removeHTMLtags
         */
        public function testRemoveHTMLtags( $input, $output, $msg = null ) {
+               $this->hideDeprecated( 'disabling tidy' );
                MWTidy::setInstance( false );
                $this->assertEquals( $output, Sanitizer::removeHTMLtags( $input ), $msg );
        }
index 2d20f2c..215201e 100644 (file)
@@ -157,6 +157,26 @@ class PasswordPolicyChecksTest extends MediaWikiTestCase {
                $this->assertSame( $expected, $status->isGood() );
        }
 
+       public static function provideLargeBlacklist() {
+               return [
+                       [ false, 'testpass' ],
+                       [ false, 'password' ],
+                       [ false, '12345' ],
+                       [ true, 'DKn17egcA4' ],
+                       [ true, 'testwikijenkinspass' ],
+               ];
+       }
+
+       /**
+        * @covers PasswordPolicyChecks::checkPasswordNotInLargeBlacklist
+        * @dataProvider provideLargeBlacklist
+        */
+       public function testCheckNotInLargeBlacklist( $expected, $password ) {
+               $user = User::newFromName( 'username' );
+               $status = PasswordPolicyChecks::checkPasswordNotInLargeBlacklist( true, $user, $password );
+               $this->assertSame( $expected, $status->isGood() );
+       }
+
        /**
         * Verify that all password policy description messages actually exist.
         * Messages used on Special:PasswordPolicies
index 2b27571..d86e63d 100644 (file)
@@ -32,7 +32,11 @@ class SearchEngineTest extends MediaWikiLangTestCase {
 
                $searchType = SearchEngineFactory::getSearchEngineClass( $this->db );
                $this->setMwGlobals( [
-                       'wgSearchType' => $searchType
+                       'wgSearchType' => $searchType,
+                       'wgCapitalLinks' => true,
+                       'wgCapitalLinkOverrides' => [
+                               NS_CATEGORY => false // for testCompletionSearchMustRespectCapitalLinkOverrides
+                       ]
                ] );
 
                $this->search = new $searchType( $this->db );
@@ -52,7 +56,13 @@ class SearchEngineTest extends MediaWikiLangTestCase {
 
                // Reset the search type back to default - some extensions may have
                // overridden it.
-               $this->setMwGlobals( [ 'wgSearchType' => null ] );
+               $this->setMwGlobals( [
+                       'wgSearchType' => null,
+                       'wgCapitalLinks' => true,
+                       'wgCapitalLinkOverrides' => [
+                               NS_CATEGORY => false // for testCompletionSearchMustRespectCapitalLinkOverrides
+                       ]
+               ] );
 
                $this->insertPage( 'Not_Main_Page', 'This is not a main page' );
                $this->insertPage(
@@ -74,6 +84,9 @@ class SearchEngineTest extends MediaWikiLangTestCase {
                $this->insertPage( 'HalfNumbers', '1234567890' );
                $this->insertPage( 'FullNumbers', '1234567890' );
                $this->insertPage( 'DomainName', 'example.com' );
+               $this->insertPage( 'DomainName', 'example.com' );
+               $this->insertPage( 'Category:search is not Search', '' );
+               $this->insertPage( 'Category:Search is not search', '' );
        }
 
        protected function fetchIds( $results ) {
@@ -211,6 +224,48 @@ class SearchEngineTest extends MediaWikiLangTestCase {
                        "Title power search" );
        }
 
+       public function provideCompletionSearchMustRespectCapitalLinkOverrides() {
+               return [
+                       'Searching for "smithee" finds Smithee on NS_MAIN' => [
+                               'smithee',
+                               'Smithee',
+                               [ NS_MAIN ],
+                       ],
+                       'Searching for "search is" will finds "search is not Search" on NS_CATEGORY' => [
+                               'search is',
+                               'Category:search is not Search',
+                               [ NS_CATEGORY ],
+                       ],
+                       'Searching for "Search is" will finds "search is not Search" on NS_CATEGORY' => [
+                               'Search is',
+                               'Category:Search is not search',
+                               [ NS_CATEGORY ],
+                       ],
+               ];
+       }
+
+       /**
+        * Test that the search query is not munged using wrong CapitalLinks setup
+        * (in other test that the default search backend can benefit from wgCapitalLinksOverride)
+        * Guard against regressions like T208255
+        * @dataProvider provideCompletionSearchMustRespectCapitalLinkOverrides
+        * @covers SearchEngine::completionSearch
+        * @covers PrefixSearch::defaultSearchBackend
+        * @param string $search
+        * @param string $expectedSuggestion
+        * @param int[] $namespaces
+        */
+       public function testCompletionSearchMustRespectCapitalLinkOverrides(
+               $search,
+               $expectedSuggestion,
+               array $namespaces
+       ) {
+               $this->search->setNamespaces( $namespaces );
+               $results = $this->search->completionSearch( $search );
+               $this->assertEquals( 1, $results->getSize() );
+               $this->assertEquals( $expectedSuggestion, $results->getSuggestions()[0]->getText() );
+       }
+
        /**
         * @covers SearchEngine::getSearchIndexFields
         */
index 6ce01ca..58441f0 100644 (file)
@@ -124,9 +124,8 @@ class LocalIdLookupTest extends MediaWikiTestCase {
         * @param bool $localDBSet $wgLocalDatabases contains the shared DB
         */
        public function testIsAttachedShared( $sharedDB, $sharedTable, $localDBSet ) {
-               global $wgDBName;
                $this->setMwGlobals( [
-                       'wgSharedDB' => $sharedDB ? $wgDBName : null,
+                       'wgSharedDB' => $sharedDB ? "dummy" : null,
                        'wgSharedTables' => $sharedTable ? [ 'user' ] : [],
                        'wgLocalDatabases' => $localDBSet ? [ 'shared' ] : [],
                ] );
index 55b3bfc..b9289db 100644 (file)
@@ -3,6 +3,7 @@
 define( 'NS_UNITTEST', 5600 );
 define( 'NS_UNITTEST_TALK', 5601 );
 
+use MediaWiki\Block\Restriction\PageRestriction;
 use MediaWiki\MediaWikiServices;
 use MediaWiki\User\UserIdentityValue;
 use Wikimedia\TestingAccessWrapper;
@@ -11,6 +12,10 @@ use Wikimedia\TestingAccessWrapper;
  * @group Database
  */
 class UserTest extends MediaWikiTestCase {
+
+       /** Constant for self::testIsBlockedFrom */
+       const USER_TALK_PAGE = '<user talk page>';
+
        /**
         * @var User
         */
@@ -1209,6 +1214,91 @@ class UserTest extends MediaWikiTestCase {
                $this->assertFalse( $user->isBlockedFrom( $ut ) );
        }
 
+       /**
+        * @covers User::isBlockedFrom
+        * @dataProvider provideIsBlockedFrom
+        * @param string|null $title Title to test.
+        * @param bool $expect Expected result from User::isBlockedFrom()
+        * @param array $options Additional test options:
+        *  - 'blockAllowsUTEdit': (bool, default true) Value for $wgBlockAllowsUTEdit
+        *  - 'allowUsertalk': (bool, default false) Passed to Block::__construct()
+        *  - 'pageRestrictions': (array|null) If non-empty, page restriction titles for the block.
+        */
+       public function testIsBlockedFrom( $title, $expect, array $options = [] ) {
+               $this->setMwGlobals( [
+                       'wgBlockAllowsUTEdit' => $options['blockAllowsUTEdit'] ?? true,
+               ] );
+
+               $user = $this->getTestUser()->getUser();
+
+               if ( $title === self::USER_TALK_PAGE ) {
+                       $title = $user->getTalkPage();
+               } else {
+                       $title = Title::newFromText( $title );
+               }
+
+               $restrictions = [];
+               foreach ( $options['pageRestrictions'] ?? [] as $pagestr ) {
+                       $page = $this->getExistingTestPage(
+                               $pagestr === self::USER_TALK_PAGE ? $user->getTalkPage() : $pagestr
+                       );
+                       $restrictions[] = new PageRestriction( 0, $page->getId() );
+               }
+
+               $block = new Block( [
+                       'expiry' => wfTimestamp( TS_MW, wfTimestamp() + ( 40 * 60 * 60 ) ),
+                       'allowUsertalk' => $options['allowUsertalk'] ?? false,
+                       'sitewide' => !$restrictions,
+               ] );
+               $block->setTarget( $user );
+               $block->setBlocker( $this->getTestSysop()->getUser() );
+               if ( $restrictions ) {
+                       $block->setRestrictions( $restrictions );
+               }
+               $block->insert();
+
+               try {
+                       $this->assertSame( $expect, $user->isBlockedFrom( $title ) );
+               } finally {
+                       $block->delete();
+               }
+       }
+
+       public static function provideIsBlockedFrom() {
+               return [
+                       'Basic operation' => [ 'Test page', true ],
+                       'User talk page, not allowed' => [ self::USER_TALK_PAGE, true, [
+                               'allowUsertalk' => false,
+                       ] ],
+                       'User talk page, allowed' => [ self::USER_TALK_PAGE, false, [
+                               'allowUsertalk' => true,
+                       ] ],
+                       'User talk page, allowed but $wgBlockAllowsUTEdit is false' => [ self::USER_TALK_PAGE, true, [
+                               'allowUsertalk' => true,
+                               'blockAllowsUTEdit' => false,
+                       ] ],
+
+                       'Partial block, blocking the page' => [ 'Test page', true, [
+                               'pageRestrictions' => [ 'Test page' ],
+                       ] ],
+                       'Partial block, not blocking the page' => [ 'Test page 2', false, [
+                               'pageRestrictions' => [ 'Test page' ],
+                       ] ],
+                       'Partial block, overriding allowUsertalk' => [ self::USER_TALK_PAGE, true, [
+                               'allowUsertalk' => false,
+                               'pageRestrictions' => [ self::USER_TALK_PAGE ],
+                       ] ],
+                       'Partial block, allowing user talk' => [ self::USER_TALK_PAGE, false, [
+                               'allowUsertalk' => true,
+                               'pageRestrictions' => [ 'Test page' ],
+                       ] ],
+                       'Partial block, not allowing user talk' => [ self::USER_TALK_PAGE, true, [
+                               'allowUsertalk' => false,
+                               'pageRestrictions' => [ 'Test page' ],
+                       ] ],
+               ];
+       }
+
        /**
         * Block cookie should be set for IP Blocks if
         * wgCookieSetOnIpBlock is set to true
diff --git a/tests/phpunit/maintenance/populateChangeTagDefTest.php b/tests/phpunit/maintenance/populateChangeTagDefTest.php
deleted file mode 100644 (file)
index 8a88f19..0000000
+++ /dev/null
@@ -1,287 +0,0 @@
-<?php
-
-namespace MediaWiki\Tests\Maintenance;
-
-use PopulateChangeTagDef;
-
-/**
- * @group Database
- * @covers PopulateChangeTagDef
- */
-class PopulateChangeTagDefTest extends MaintenanceBaseTestCase {
-
-       public function getMaintenanceClass() {
-               return PopulateChangeTagDef::class;
-       }
-
-       public function setUp() {
-               parent::setUp();
-               $this->tablesUsed = [ 'change_tag', 'change_tag_def', 'updatelog' ];
-
-               $this->cleanChangeTagTables();
-               $this->insertChangeTagData();
-       }
-
-       private function cleanChangeTagTables() {
-               wfGetDB( DB_MASTER )->delete( 'change_tag', '*' );
-               wfGetDB( DB_MASTER )->delete( 'change_tag_def', '*' );
-               wfGetDB( DB_MASTER )->delete( 'updatelog', '*' );
-       }
-
-       private function insertChangeTagData() {
-               $changeTags = [];
-
-               $changeTags[] = [
-                       'ct_rc_id' => 1234,
-                       'ct_tag' => 'One Tag',
-               ];
-
-               $changeTags[] = [
-                       'ct_rc_id' => 1235,
-                       'ct_tag' => 'Two Tags',
-               ];
-
-               $changeTags[] = [
-                       'ct_log_id' => 1236,
-                       'ct_tag' => 'Two Tags',
-               ];
-
-               $changeTags[] = [
-                       'ct_rev_id' => 1237,
-                       'ct_tag' => 'Three Tags',
-               ];
-
-               $changeTags[] = [
-                       'ct_rc_id' => 1238,
-                       'ct_tag' => 'Three Tags',
-               ];
-
-               $changeTags[] = [
-                       'ct_log_id' => 1239,
-                       'ct_tag' => 'Three Tags',
-               ];
-
-               wfGetDB( DB_MASTER )->insert( 'change_tag', $changeTags );
-       }
-
-       public function testRun() {
-               $this->setMwGlobals( 'wgChangeTagsSchemaMigrationStage', MIGRATION_WRITE_BOTH );
-               $this->maintenance->loadWithArgv( [ '--sleep', '0' ] );
-
-               $this->maintenance->execute();
-
-               $changeTagDefRows = [
-                       (object)[
-                               'ctd_name' => 'One Tag',
-                               'ctd_count' => 1,
-                       ],
-                       (object)[
-                               'ctd_name' => 'Two Tags',
-                               'ctd_count' => 2,
-                       ],
-                       (object)[
-                               'ctd_name' => 'Three Tags',
-                               'ctd_count' => 3,
-                       ],
-               ];
-
-               $actualChangeTagDefs = wfGetDB( DB_REPLICA )->select(
-                       [ 'change_tag_def' ],
-                       [ 'ctd_name', 'ctd_count' ],
-                       [],
-                       __METHOD__,
-                       [ 'ORDER BY' => 'ctd_count' ]
-               );
-
-               $this->assertEquals( $changeTagDefRows, iterator_to_array( $actualChangeTagDefs, false ) );
-
-               // Check if change_tag is also backpopulated
-               $actualChangeTags = wfGetDB( DB_REPLICA )->select(
-                       [ 'change_tag', 'change_tag_def' ],
-                       [ 'ct_tag', 'ct_tag_id', 'ctd_count' ],
-                       [],
-                       __METHOD__,
-                       [],
-                       [ 'change_tag_def' => [ 'LEFT JOIN', 'ct_tag_id=ctd_id' ] ]
-               );
-               $mapping = [
-                       'One Tag' => 1,
-                       'Two Tags' => 2,
-                       'Three Tags' => 3
-               ];
-               foreach ( $actualChangeTags as $row ) {
-                       $this->assertNotNull( $row->ct_tag_id );
-                       $this->assertEquals( $row->ctd_count, $mapping[$row->ct_tag] );
-               }
-       }
-
-       public function testRunUpdateHitCountMigrationNew() {
-               $this->setMwGlobals( 'wgChangeTagsSchemaMigrationStage', MIGRATION_NEW );
-               $changeTagDefBadRows = [
-                       [
-                               'ctd_name' => 'One Tag',
-                               'ctd_user_defined' => 0,
-                               'ctd_count' => 50,
-                       ],
-                       [
-                               'ctd_name' => 'Two Tags',
-                               'ctd_user_defined' => 0,
-                               'ctd_count' => 4,
-                       ],
-                       [
-                               'ctd_name' => 'Three Tags',
-                               'ctd_user_defined' => 0,
-                               'ctd_count' => 3,
-                       ],
-               ];
-               wfGetDB( DB_MASTER )->insert(
-                       'change_tag_def',
-                       $changeTagDefBadRows
-               );
-
-               $mapping = [
-                       'One Tag' => 1,
-                       'Two Tags' => 2,
-                       'Three Tags' => 3
-               ];
-               foreach ( $mapping as $tagName => $tagId ) {
-                       wfGetDB( DB_MASTER )->update(
-                               'change_tag',
-                               [ 'ct_tag_id' => $tagId ],
-                               [ 'ct_tag' => $tagName ]
-                       );
-               }
-
-               $this->maintenance->loadWithArgv( [ '--sleep', '0' ] );
-
-               $this->maintenance->execute();
-
-               $changeTagDefRows = [
-                       (object)[
-                               'ctd_name' => 'One Tag',
-                               'ctd_count' => 1,
-                       ],
-                       (object)[
-                               'ctd_name' => 'Two Tags',
-                               'ctd_count' => 2,
-                       ],
-                       (object)[
-                               'ctd_name' => 'Three Tags',
-                               'ctd_count' => 3,
-                       ],
-               ];
-
-               $actualChangeTagDefs = wfGetDB( DB_REPLICA )->select(
-                       [ 'change_tag_def' ],
-                       [ 'ctd_name', 'ctd_count' ],
-                       [],
-                       __METHOD__,
-                       [ 'ORDER BY' => 'ctd_count' ]
-               );
-
-               $this->assertEquals( $changeTagDefRows, iterator_to_array( $actualChangeTagDefs, false ) );
-       }
-
-       public function testRunUpdateHitCountMigrationWriteBoth() {
-               $this->setMwGlobals( 'wgChangeTagsSchemaMigrationStage', MIGRATION_WRITE_BOTH );
-               $changeTagDefBadRows = [
-                       [
-                               'ctd_name' => 'One Tag',
-                               'ctd_user_defined' => 0,
-                               'ctd_count' => 50,
-                       ],
-                       [
-                               'ctd_name' => 'Two Tags',
-                               'ctd_user_defined' => 0,
-                               'ctd_count' => 4,
-                       ],
-                       [
-                               'ctd_name' => 'Three Tags',
-                               'ctd_user_defined' => 0,
-                               'ctd_count' => 3,
-                       ],
-               ];
-               wfGetDB( DB_MASTER )->insert(
-                       'change_tag_def',
-                       $changeTagDefBadRows
-               );
-
-               $this->maintenance->loadWithArgv( [ '--sleep', '0' ] );
-
-               $this->maintenance->execute();
-
-               $changeTagDefRows = [
-                       (object)[
-                               'ctd_name' => 'One Tag',
-                               'ctd_count' => 1,
-                       ],
-                       (object)[
-                               'ctd_name' => 'Two Tags',
-                               'ctd_count' => 2,
-                       ],
-                       (object)[
-                               'ctd_name' => 'Three Tags',
-                               'ctd_count' => 3,
-                       ],
-               ];
-
-               $actualChangeTagDefs = wfGetDB( DB_REPLICA )->select(
-                       [ 'change_tag_def' ],
-                       [ 'ctd_name', 'ctd_count' ],
-                       [],
-                       __METHOD__,
-                       [ 'ORDER BY' => 'ctd_count' ]
-               );
-
-               $this->assertEquals( $changeTagDefRows, iterator_to_array( $actualChangeTagDefs, false ) );
-       }
-
-       public function testDryRunMigrationNew() {
-               $this->setMwGlobals( 'wgChangeTagsSchemaMigrationStage', MIGRATION_NEW );
-               $this->maintenance->loadWithArgv( [ '--dry-run', '--sleep', '0' ] );
-
-               $this->maintenance->execute();
-
-               $actualChangeTagDefs = wfGetDB( DB_REPLICA )->select(
-                       [ 'change_tag_def' ],
-                       [ 'ctd_id', 'ctd_name' ]
-               );
-
-               $this->assertEquals( [], iterator_to_array( $actualChangeTagDefs, false ) );
-
-               $actualChangeTags = wfGetDB( DB_REPLICA )->select(
-                       [ 'change_tag' ],
-                       [ 'ct_tag_id', 'ct_tag' ]
-               );
-
-               foreach ( $actualChangeTags as $row ) {
-                       $this->assertNull( $row->ct_tag_id );
-                       $this->assertNotNull( $row->ct_tag );
-               }
-       }
-
-       public function testDryRunMigrationWriteBoth() {
-               $this->setMwGlobals( 'wgChangeTagsSchemaMigrationStage', MIGRATION_WRITE_BOTH );
-               $this->maintenance->loadWithArgv( [ '--dry-run', '--sleep', '0' ] );
-
-               $this->maintenance->execute();
-
-               $actualChangeTagDefs = wfGetDB( DB_REPLICA )->select(
-                       [ 'change_tag_def' ],
-                       [ 'ctd_id', 'ctd_name' ]
-               );
-
-               $this->assertEquals( [], iterator_to_array( $actualChangeTagDefs, false ) );
-
-               $actualChangeTags = wfGetDB( DB_REPLICA )->select(
-                       [ 'change_tag' ],
-                       [ 'ct_tag_id', 'ct_tag' ]
-               );
-
-               foreach ( $actualChangeTags as $row ) {
-                       $this->assertNull( $row->ct_tag_id );
-                       $this->assertNotNull( $row->ct_tag );
-               }
-       }
-
-}
index be8b3a9..743660a 100644 (file)
                                // Check for incomplete animations/requests/etc and throw if there are any.
                                if ( $.timers && $.timers.length !== 0 ) {
                                        timers = $.timers.length;
-                                       // eslint-disable-next-line no-restricted-properties
+                                       // eslint-disable-next-line jquery/no-each-util
                                        $.each( $.timers, function ( i, timer ) {
                                                var node = timer.elem;
                                                mw.log.warn( 'Unfinished animation #' + i + ' in ' + timer.queue + ' queue on ' +
                var altPromises = [];
 
                // When we have ES6 support we'll be able to use Array.from here
-               // eslint-disable-next-line no-restricted-properties
+               // eslint-disable-next-line jquery/no-each-util
                $.each( arguments, function ( i, arg ) {
                        var alt = $.Deferred();
                        altPromises.push( alt );
index 1481977..4731b32 100644 (file)
         * @param {string} msg text to pass on to qunit describing the test case
         * @param {string[]} parserId of the parser that will be tested
         * @param {string[][]} data Array of testcases. Each testcase, array of
-        *              inputValue: The string value that we want to test the parser for
-        *              recognized: If we expect that this value's type is detectable by the parser
-        *              outputValue: The value the parser has converted the input to
-        *              msg: describing the testcase
+        *      inputValue: The string value that we want to test the parser for
+        *      recognized: If we expect that this value's type is detectable by the parser
+        *      outputValue: The value the parser has converted the input to
+        *      msg: describing the testcase
         * @param {function($table)} callback something to do before we start the testcase
         */
        function parserTest( msg, parserId, data, callback ) {
        parserTest( 'IPv4', 'IPAddress', ipv4 );
 
        simpleMDYDatesInMDY = [
-               [ 'January 17, 2010',   true, 20100117, 'Long middle endian date' ],
-               [ 'Jan 17, 2010',       true, 20100117, 'Short middle endian date' ],
-               [ '1/17/2010',          true, 20100117, 'Numeric middle endian date' ],
-               [ '01/17/2010',         true, 20100117, 'Numeric middle endian date with padding on month' ],
-               [ '01/07/2010',         true, 20100107, 'Numeric middle endian date with padding on day' ],
-               [ '01/07/0010',         true, 20100107, 'Numeric middle endian date with padding on year' ],
-               [ '5.12.1990',          true, 19900512, 'Numeric middle endian date with . separator' ]
+               [ 'January 17, 2010', true, 20100117, 'Long middle endian date' ],
+               [ 'Jan 17, 2010', true, 20100117, 'Short middle endian date' ],
+               [ '1/17/2010', true, 20100117, 'Numeric middle endian date' ],
+               [ '01/17/2010', true, 20100117, 'Numeric middle endian date with padding on month' ],
+               [ '01/07/2010', true, 20100107, 'Numeric middle endian date with padding on day' ],
+               [ '01/07/0010', true, 20100107, 'Numeric middle endian date with padding on year' ],
+               [ '5.12.1990', true, 19900512, 'Numeric middle endian date with . separator' ]
        ];
        parserTest( 'MDY Dates using mdy content language', 'date', simpleMDYDatesInMDY );
 
        simpleMDYDatesInDMY = [
-               [ 'January 17, 2010',   true, 20100117, 'Long middle endian date' ],
-               [ 'Jan 17, 2010',       true, 20100117, 'Short middle endian date' ],
-               [ '1/17/2010',          true, 20101701, 'Numeric middle endian date' ],
-               [ '01/17/2010',         true, 20101701, 'Numeric middle endian date with padding on month' ],
-               [ '01/07/2010',         true, 20100701, 'Numeric middle endian date with padding on day' ],
-               [ '01/07/0010',         true, 20100701, 'Numeric middle endian date with padding on year' ],
-               [ '5.12.1990',          true, 19901205, 'Numeric middle endian date with . separator' ]
+               [ 'January 17, 2010', true, 20100117, 'Long middle endian date' ],
+               [ 'Jan 17, 2010', true, 20100117, 'Short middle endian date' ],
+               [ '1/17/2010', true, 20101701, 'Numeric middle endian date' ],
+               [ '01/17/2010', true, 20101701, 'Numeric middle endian date with padding on month' ],
+               [ '01/07/2010', true, 20100701, 'Numeric middle endian date with padding on day' ],
+               [ '01/07/0010', true, 20100701, 'Numeric middle endian date with padding on year' ],
+               [ '5.12.1990', true, 19901205, 'Numeric middle endian date with . separator' ]
        ];
        parserTest( 'MDY Dates using dmy content language', 'date', simpleMDYDatesInDMY, function () {
                mw.config.set( {
        } );
 
        oldMDYDates = [
-               [ 'January 19, 1400 BC',                false, '99999999', 'BC' ],
-               [ 'January 19, 1400BC',         false, '99999999', 'Connected BC' ],
-               [ 'January, 19 1400 B.C.',      false, '99999999', 'B.C.' ],
-               [ 'January 19, 1400 AD',                false, '99999999', 'AD' ],
-               [ 'January, 19 10',                     true, 20100119, 'AD' ],
-               [ 'January, 19 1',                      false, '99999999', 'AD' ]
+               [ 'January 19, 1400 BC', false, '99999999', 'BC' ],
+               [ 'January 19, 1400BC', false, '99999999', 'Connected BC' ],
+               [ 'January, 19 1400 B.C.', false, '99999999', 'B.C.' ],
+               [ 'January 19, 1400 AD', false, '99999999', 'AD' ],
+               [ 'January, 19 10', true, 20100119, 'AD' ],
+               [ 'January, 19 1', false, '99999999', 'AD' ]
        ];
        parserTest( 'Very old MDY dates', 'date', oldMDYDates );
 
        complexMDYDates = [
-               [ 'January, 19 2010',   true, 20100119, 'Comma after month' ],
-               [ 'January 19, 2010',   true, 20100119, 'Comma after day' ],
-               [ 'January/19/2010',            true, 20100119, 'Forward slash separator' ],
-               [ '04 22 1991',                 true, 19910422, 'Month with 0 padding' ],
-               [ 'April 21 1991',              true, 19910421, 'Space separation' ],
-               [ '04 22 1991',                 true, 19910422, 'Month with 0 padding' ],
-               [ 'December 12 \'10',   true, 20101212, '' ],
-               [ 'Dec 12 \'10',                        true, 20101212, '' ],
-               [ 'Dec. 12 \'10',               true, 20101212, '' ]
+               [ 'January, 19 2010', true, 20100119, 'Comma after month' ],
+               [ 'January 19, 2010', true, 20100119, 'Comma after day' ],
+               [ 'January/19/2010', true, 20100119, 'Forward slash separator' ],
+               [ '04 22 1991', true, 19910422, 'Month with 0 padding' ],
+               [ 'April 21 1991', true, 19910421, 'Space separation' ],
+               [ '04 22 1991', true, 19910422, 'Month with 0 padding' ],
+               [ 'December 12 \'10', true, 20101212, '' ],
+               [ 'Dec 12 \'10', true, 20101212, '' ],
+               [ 'Dec. 12 \'10', true, 20101212, '' ]
        ];
        parserTest( 'MDY Dates', 'date', complexMDYDates );
 
        clobberedDates = [
-               [ 'January, 19 2010 - January, 20 2010',        false, '99999999', 'Date range with hyphen' ],
-               [ 'January, 19 2010 — January, 20 2010',      false, '99999999', 'Date range with mdash' ],
-               [ 'prefixJanuary, 19 2010',     false, '99999999', 'Connected prefix' ],
-               [ 'prefix January, 19 2010',    false, '99999999', 'Prefix' ],
-               [ 'December 12 2010postfix',    false, '99999999', 'ConnectedPostfix' ],
-               [ 'December 12 2010 postfix',   false, '99999999', 'Postfix' ],
-               [ 'A simple text',              false, '99999999', 'Plain text in date sort' ],
-               [ '04l22l1991',                 false, '99999999', 'l char as separator' ],
-               [ 'January\\19\\2010',  false, '99999999', 'backslash as date separator' ]
+               [ 'January, 19 2010 - January, 20 2010', false, '99999999', 'Date range with hyphen' ],
+               [ 'January, 19 2010 — January, 20 2010', false, '99999999', 'Date range with mdash' ],
+               [ 'prefixJanuary, 19 2010', false, '99999999', 'Connected prefix' ],
+               [ 'prefix January, 19 2010', false, '99999999', 'Prefix' ],
+               [ 'December 12 2010postfix', false, '99999999', 'ConnectedPostfix' ],
+               [ 'December 12 2010 postfix', false, '99999999', 'Postfix' ],
+               [ 'A simple text', false, '99999999', 'Plain text in date sort' ],
+               [ '04l22l1991', false, '99999999', 'l char as separator' ],
+               [ 'January\\19\\2010', false, '99999999', 'backslash as date separator' ]
        ];
        parserTest( 'Clobbered Dates', 'date', clobberedDates );
 
        MYDates = [
-               [ 'December 2010',      false, '99999999', 'Plain month year' ],
-               [ 'Dec 2010',           false, '99999999', 'Abreviated month year' ],
-               [ '12 2010',                    false, '99999999', 'Numeric month year' ]
+               [ 'December 2010', false, '99999999', 'Plain month year' ],
+               [ 'Dec 2010', false, '99999999', 'Abreviated month year' ],
+               [ '12 2010', false, '99999999', 'Numeric month year' ]
        ];
        parserTest( 'MY Dates', 'date', MYDates );
 
        YDates = [
-               [ '2010',       false, '99999999', 'Plain 4-digit year' ],
-               [ '876',                false, '99999999', '3-digit year' ],
-               [ '76',         false, '99999999', '2-digit year' ],
-               [ '\'76',       false, '99999999', '2-digit millenium bug year' ],
-               [ '2010 BC',    false, '99999999', '4-digit year BC' ]
+               [ '2010', false, '99999999', 'Plain 4-digit year' ],
+               [ '876', false, '99999999', '3-digit year' ],
+               [ '76', false, '99999999', '2-digit year' ],
+               [ '\'76', false, '99999999', '2-digit millenium bug year' ],
+               [ '2010 BC', false, '99999999', '4-digit year BC' ]
        ];
        parserTest( 'Y Dates', 'date', YDates );
 
        ISODates = [
-               [ '',           false,  -Infinity, 'Not a date' ],
-               [ '2000',       false,  946684800000, 'Plain 4-digit year' ],
-               [ '2000-01',    true,   946684800000, 'Year with month' ],
-               [ '2000-01-01', true,   946684800000, 'Year with month and day' ],
-               [ '2000-13-01', false,  978307200000, 'Non existant month' ],
-               [ '2000-01-32', true,   949363200000, '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, 946773030000, 'Date with invalid hours' ],
-               [ '2000-01-01T12:60:30Z',       true, 946728000000, '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,111Z',   true, 946729830111, 'Date with milliseconds and , separator' ],
-               [ '2000-01-01T12:30:30+01:00',  true, 946726230000, 'Date time in UTC+1' ],
-               [ '2000-01-01T12:30:30+01:30',  true, 946724430000, 'Date time in UTC+1:30' ],
-               [ '2000-01-01T12:30:30-01:00',  true, 946733430000, 'Date time in UTC-1' ],
-               [ '2000-01-01T12:30:30-01:30',  true, 946735230000, 'Date time in UTC-1:30' ],
+               [ '', false, -Infinity, 'Not a date' ],
+               [ '2000', false, 946684800000, 'Plain 4-digit year' ],
+               [ '2000-01', true, 946684800000, 'Year with month' ],
+               [ '2000-01-01', true, 946684800000, 'Year with month and day' ],
+               [ '2000-13-01', false, 978307200000, 'Non existant month' ],
+               [ '2000-01-32', true, 949363200000, '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, 946773030000, 'Date with invalid hours' ],
+               [ '2000-01-01T12:60:30Z', true, 946728000000, '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,111Z', true, 946729830111, 'Date with milliseconds and , separator' ],
+               [ '2000-01-01T12:30:30+01:00', true, 946726230000, 'Date time in UTC+1' ],
+               [ '2000-01-01T12:30:30+01:30', true, 946724430000, 'Date time in UTC+1:30' ],
+               [ '2000-01-01T12:30:30-01:00', true, 946733430000, 'Date time in UTC-1' ],
+               [ '2000-01-01T12:30:30-01:30', true, 946735230000, 'Date time in UTC-1:30' ],
                [ '2000-01-01T12:30:30.111+01:00', true, 946726230111, 'Date time and milliseconds in UTC+1' ],
                [ '2000-01-01Postfix', true, 946684800000, 'Date with appended postfix' ],
                [ '2000-01-01 Postfix', true, 946684800000, 'Date with separate postfix' ],
-               [ '2 Postfix',  false, -62104060800000, 'One digit with separate postfix' ],
-               [ 'ca. 2',              false, -62104060800000, 'Three digit with separate prefix' ],
-               [ '~200',               false, -55855785600000, 'Three digit with appended prefix' ],
-               [ 'ca. 200[1]', false, -55855785600000, 'Three digit with separate prefix and postfix' ],
-               [ '2000-11-31', true,   975628800000, '31 days in 30 day month' ],
-               [ '50-01-01',   true,   -60589296000000, 'Year with just two digits' ],
-               [ '2',                  false,  -62104060800000, 'Year with one digit' ],
-               [ '02-01',              true,   -62104060800000, 'Year with one digit and leading zero' ],
-               [ ' 2-01',              true,   -62104060800000, 'Year with one digit and leading space' ],
-               [ '-2-10',              true,   -62206704000000, 'Year BC with month' ],
-               [ '-9999',              false,  -377705116800000, 'max. Year BC' ],
-               [ '+9999-12',   true,   253399622400000, 'max. Date with +sign' ],
-               [ '2000-01-01 12:30:30Z',       true, 946729830000, 'Date and time with no T marker' ],
-               [ '2000-01-01T12:30:60Z',       true, 946729860000, 'Date with leap second' ],
-               [ '2000-01-01T12:30:30-23:59',  true, 946816170000, 'Date time in UTC-23:59' ],
-               [ '2000-01-01T12:30:30+23:59',  true, 946643490000, 'Date time in UTC+23:59' ],
-               [ '2000-01-01T123030+0100',     true,   946726230000, 'Time without separators' ],
-               [ '20000101T123030+0100',       false,  946726230000, 'All without separators' ]
+               [ '2 Postfix', false, -62104060800000, 'One digit with separate postfix' ],
+               [ 'ca. 2', false, -62104060800000, 'Three digit with separate prefix' ],
+               [ '~200', false, -55855785600000, 'Three digit with appended prefix' ],
+               [ 'ca. 200[1]', false, -55855785600000, 'Three digit with separate prefix and postfix' ],
+               [ '2000-11-31', true, 975628800000, '31 days in 30 day month' ],
+               [ '50-01-01', true, -60589296000000, 'Year with just two digits' ],
+               [ '2', false, -62104060800000, 'Year with one digit' ],
+               [ '02-01', true, -62104060800000, 'Year with one digit and leading zero' ],
+               [ ' 2-01', true, -62104060800000, 'Year with one digit and leading space' ],
+               [ '-2-10', true, -62206704000000, 'Year BC with month' ],
+               [ '-9999', false, -377705116800000, 'max. Year BC' ],
+               [ '+9999-12', true, 253399622400000, 'max. Date with +sign' ],
+               [ '2000-01-01 12:30:30Z', true, 946729830000, 'Date and time with no T marker' ],
+               [ '2000-01-01T12:30:60Z', true, 946729860000, 'Date with leap second' ],
+               [ '2000-01-01T12:30:30-23:59', true, 946816170000, 'Date time in UTC-23:59' ],
+               [ '2000-01-01T12:30:30+23:59', true, 946643490000, 'Date time in UTC+23:59' ],
+               [ '2000-01-01T123030+0100', true, 946726230000, 'Time without separators' ],
+               [ '20000101T123030+0100', false, 946726230000, 'All without separators' ]
        ];
        parserTest( 'ISO Dates', 'isoDate', ISODates );
 
        currencyData = [
-               [ '1.02 $',     true, 1.02, '' ],
-               [ '$ 3.00',     true, 3, '' ],
-               [ '€ 2,99',   true, 299, '' ],
-               [ '$ 1.00',     true, 1, '' ],
-               [ '$3.50',      true, 3.50, '' ],
-               [ '$ 1.50',     true, 1.50, '' ],
-               [ '€ 0.99',   true, 0.99, '' ],
-               [ '$ 299.99',   true, 299.99, '' ],
-               [ '$ 2,299.99', true, 2299.99, '' ],
-               [ '$ 2,989',    true, 2989, '' ],
-               [ '$ 2 299.99', true, 2299.99, '' ],
-               [ '$ 2 989',    true, 2989, '' ],
-               [ '$ 2.989',    true, 2.989, '' ]
+               [ '1.02 $', true, 1.02, '' ],
+               [ '$ 3.00', true, 3, '' ],
+               [ '€ 2,99', true, 299, '' ],
+               [ '$ 1.00', true, 1, '' ],
+               [ '$3.50', true, 3.50, '' ],
+               [ '$ 1.50', true, 1.50, '' ],
+               [ '€ 0.99', true, 0.99, '' ],
+               [ '$ 299.99', true, 299.99, '' ],
+               [ '$ 2,299.99', true, 2299.99, '' ],
+               [ '$ 2,989', true, 2989, '' ],
+               [ '$ 2 299.99', true, 2299.99, '' ],
+               [ '$ 2 989', true, 2989, '' ],
+               [ '$ 2.989', true, 2.989, '' ]
        ];
        parserTest( 'Currency', 'currency', currencyData );
 
        transformedCurrencyData = [
-               [ '1.02 $',     true, 102, '' ],
-               [ '$ 3.00',     true, 300, '' ],
-               [ '€ 2,99',   true, 2.99, '' ],
-               [ '$ 1.00',     true, 100, '' ],
-               [ '$3.50',      true, 350, '' ],
-               [ '$ 1.50',     true, 150, '' ],
-               [ '€ 0.99',   true, 99, '' ],
-               [ '$ 299.99',   true, 29999, '' ],
-               [ '$ 2\'299,99',        true, 2299.99, '' ],
-               [ '$ 2,989',    true, 2.989, '' ],
-               [ '$ 2 299.99', true, 229999, '' ],
-               [ '2 989 $',    true, 2989, '' ],
-               [ '299.99 $',   true, 29999, '' ],
-               [ '2\'299,99 $',        true, 2299.99, '' ],
-               [ '2,989 $',    true, 2.989, '' ],
-               [ '2 299.99 $', true, 229999, '' ],
-               [ '2 989 $',    true, 2989, '' ]
+               [ '1.02 $', true, 102, '' ],
+               [ '$ 3.00', true, 300, '' ],
+               [ '€ 2,99', true, 2.99, '' ],
+               [ '$ 1.00', true, 100, '' ],
+               [ '$3.50', true, 350, '' ],
+               [ '$ 1.50', true, 150, '' ],
+               [ '€ 0.99', true, 99, '' ],
+               [ '$ 299.99', true, 29999, '' ],
+               [ '$ 2\'299,99', true, 2299.99, '' ],
+               [ '$ 2,989', true, 2.989, '' ],
+               [ '$ 2 299.99', true, 229999, '' ],
+               [ '2 989 $', true, 2989, '' ],
+               [ '299.99 $', true, 29999, '' ],
+               [ '2\'299,99 $', true, 2299.99, '' ],
+               [ '2,989 $', true, 2.989, '' ],
+               [ '2 299.99 $', true, 229999, '' ],
+               [ '2 989 $', true, 2989, '' ]
        ];
        parserTest( 'Currency with european separators', 'currency', transformedCurrencyData, function () {
                mw.config.set( {
                        // We expect 22'234.444,22
                        // Map from ascii separators => localized separators
-                       wgSeparatorTransformTable: [ ', .       ,', '\' ,       .' ],
+                       wgSeparatorTransformTable: [ ',\t.\t,', '\'\t,\t.' ],
                        wgDigitTransformTable: [ '', '' ]
                } );
        } );
index b1a3650..288dea2 100644 (file)
@@ -50,7 +50,9 @@ QUnit.module( 'mediawiki.widgets.APIResultsQueue' );
                        },
                        this.responseDelay );
 
-               return deferred.promise( { abort: function () { clearTimeout( timer ); } } );
+               return deferred.promise( { abort: function () {
+                       clearTimeout( timer );
+               } } );
        };
 
        EmptyResourceProvider.prototype.getResults = function () {
@@ -64,7 +66,9 @@ QUnit.module( 'mediawiki.widgets.APIResultsQueue' );
                                },
                                this.responseDelay );
 
-               return deferred.promise( { abort: function () { clearTimeout( timer ); } } );
+               return deferred.promise( { abort: function () {
+                       clearTimeout( timer );
+               } } );
        };
 
        SingleResultResourceProvider.prototype.getResults = function ( howMany ) {
@@ -80,7 +84,9 @@ QUnit.module( 'mediawiki.widgets.APIResultsQueue' );
                        },
                        this.responseDelay );
 
-               return deferred.promise( { abort: function () { clearTimeout( timer ); } } );
+               return deferred.promise( { abort: function () {
+                       clearTimeout( timer );
+               } } );
        };
 
        /* Tests */
@@ -171,7 +177,9 @@ QUnit.module( 'mediawiki.widgets.APIResultsQueue' );
                assert.expect( 1 );
 
                // Make the delay higher
-               providers.forEach( function ( provider ) { provider.responseDelay = 3; } );
+               providers.forEach( function ( provider ) {
+                       provider.responseDelay = 3;
+               } );
 
                // Add providers to queue
                biggerQueue.setProviders( providers );
@@ -184,7 +192,9 @@ QUnit.module( 'mediawiki.widgets.APIResultsQueue' );
                        } );
 
                // Make the delay higher
-               providers.forEach( function ( provider ) { provider.responseDelay = 5; } );
+               providers.forEach( function ( provider ) {
+                       provider.responseDelay = 5;
+               } );
 
                biggerQueue.setParams( { foo: 'baz' } );
                biggerQueue.get( 10 )
index acdf2f1..3f3cc2c 100644 (file)
                assert.strictEqual( title.getFragment(), null, 'getTalkPage does not copy the fragment' );
        } );
 
+       QUnit.test( 'wantSignaturesNamespace', function ( assert ) {
+               var namespaces = mw.config.values.wgExtraSignatureNamespaces;
+
+               mw.config.values.wgExtraSignatureNamespaces = [];
+               assert.strictEqual( mw.Title.wantSignaturesNamespace( 0 ), false, 'Main namespace has no signatures' );
+               assert.strictEqual( mw.Title.wantSignaturesNamespace( 1 ), true, 'Talk namespace has signatures' );
+               assert.strictEqual( mw.Title.wantSignaturesNamespace( 2 ), false, 'NS2 has no signatures' );
+               assert.strictEqual( mw.Title.wantSignaturesNamespace( 3 ), true, 'NS3 has signatures' );
+
+               mw.config.values.wgExtraSignatureNamespaces = [ 0 ];
+               assert.strictEqual( mw.Title.wantSignaturesNamespace( 0 ), true, 'Main namespace has signatures when explicitly defined' );
+
+               // Restore
+               mw.config.values.wgExtraSignatureNamespaces = namespaces;
+       } );
+
        QUnit.test( 'Throw error on invalid title', function ( assert ) {
                assert.throws( function () {
                        return new mw.Title( '' );
index 32457fa..56801de 100644 (file)
@@ -74,7 +74,7 @@
                } );
        }
 
-       // eslint-disable-next-line no-restricted-properties
+       // eslint-disable-next-line jquery/no-each-util
        $.each( pluralTestcases, function ( langCode, tests ) {
                if ( langCode === mw.config.get( 'wgUserLanguage' ) ) {
                        pluralTest( langCode, tests );
index 2208ab9..5a4d614 100644 (file)
                ]
        };
 
-       // eslint-disable-next-line no-restricted-properties
+       // eslint-disable-next-line jquery/no-each-util
        $.each( grammarTests, function ( langCode, test ) {
                if ( langCode === mw.config.get( 'wgUserLanguage' ) ) {
                        grammarTest( langCode, test );
index 347614c..1118279 100644 (file)
                        assert.strictEqual( siteFromUser, 1, 'site ran before user' );
                } ).always( function () {
                        // Reset
-                       mw.loader.moduleRegistry[ 'site' ].state = 'registered';
-                       mw.loader.moduleRegistry[ 'user' ].state = 'registered';
+                       mw.loader.moduleRegistry.site.state = 'registered';
+                       mw.loader.moduleRegistry.user.state = 'registered';
                } );
        } );
 
index 201dc25..0353694 100644 (file)
                assert.strictEqual( conf.get( 'constructor' ), null, 'Map.get does not look at Object.prototype of internal storage (constructor)' );
                assert.strictEqual( conf.get( 'hasOwnProperty' ), null, 'Map.get does not look at Object.prototype of internal storage (hasOwnProperty)' );
 
-               conf.set( 'hasOwnProperty', function () { return true; } );
+               conf.set( 'hasOwnProperty', function () {
+                       return true;
+               } );
                assert.strictEqual( conf.get( 'example', 'missing' ), 'missing', 'Map.get uses neutral hasOwnProperty method (positive)' );
 
                conf.set( 'example', 'Foo' );
-               conf.set( 'hasOwnProperty', function () { return false; } );
+               conf.set( 'hasOwnProperty', function () {
+                       return false;
+               } );
                assert.strictEqual( conf.get( 'example' ), 'Foo', 'Map.get uses neutral hasOwnProperty method (negative)' );
 
                assert.strictEqual( conf.set( 'constructor', 42 ), true, 'Map.set for key "constructor"' );
                assertMultipleFormats( [ 'int-msg' ], [ 'text', 'parse', 'escaped' ], 'Some Other Message', 'int is resolved' );
                assert.strictEqual( mw.message( 'int-msg' ).plain(), mw.messages.get( 'int-msg' ), 'int is not resolved in plain mode' );
 
-               assert.ok( mw.messages.set( 'mediawiki-italics-msg', '<i>Very</i> important' ), 'mw.messages.set: Register' );
+               assert.ok( mw.messages.set( 'mediawiki-italics-msg', '<i>Very</i> important' ), 'mw.messages.set: Register' );
                assertMultipleFormats( [ 'mediawiki-italics-msg' ], [ 'plain', 'text', 'parse' ], mw.messages.get( 'mediawiki-italics-msg' ), 'Simple italics unchanged' );
                assert.htmlEqual(
                        mw.message( 'mediawiki-italics-msg' ).escaped(),
                        '&lt;i&gt;Very&lt;/i&gt; important',
-                       'Italics are escaped in escaped mode'
+                       'Italics are escaped in escaped mode'
                );
 
                assert.ok( mw.messages.set( 'mediawiki-italics-with-link', 'An <i>italicized [[link|wiki-link]]</i>' ), 'mw.messages.set: Register' );
index 673cb15..ad6a0d0 100644 (file)
        QUnit.test( 'wikiUrlencode', function ( assert ) {
                assert.strictEqual( util.wikiUrlencode( 'Test:A & B/Here' ), 'Test:A_%26_B/Here' );
                // See also wfUrlencodeTest.php#provideURLS
-               // eslint-disable-next-line no-restricted-properties
+               // eslint-disable-next-line jquery/no-each-util
                $.each( {
                        '+': '%2B',
                        '&': '%26',
index ad4c97b..38cd062 100644 (file)
@@ -1,15 +1,15 @@
 {
-       "extends": "../../.eslintrc.json",
+       "root": true,
+       "extends": [
+               "wikimedia/server"
+       ],
        "env": {
-               "es6": true,
-               "mocha": true,
-               "node": true
+               "mocha": true
        },
        "globals": {
                "browser": false
        },
-       "rules":{
-               "no-console": 0,
-               "no-restricted-properties": 0
+       "rules": {
+               "no-console": 0
        }
 }
diff --git a/tests/selenium/wdio-mediawiki/.eslintrc.json b/tests/selenium/wdio-mediawiki/.eslintrc.json
deleted file mode 100644 (file)
index a49d096..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-{
-       "extends": "wikimedia",
-       "env": {
-               "es6": true,
-               "node": true
-       },
-       "globals": {
-               "browser": false
-       }
-}